OrderClerkForm.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. namespace app\modules\admin\models;
  8. use app\models\Md;
  9. use app\models\MdProfit;
  10. use app\models\MdStaff;
  11. use app\models\Order;
  12. use app\models\OrderShare;
  13. use app\models\User;
  14. use app\models\UserShareMoney;
  15. use yii\base\Model;
  16. use yii\db\ActiveRecord;
  17. /**
  18. * @property ActiveRecord $order_model
  19. */
  20. class OrderClerkForm extends Model
  21. {
  22. public $order_model;
  23. public $order_id;
  24. public $store_id;
  25. public $order;
  26. public $clerk_id;
  27. public function rules()
  28. {
  29. return [
  30. [['clerk_id', 'order_id'], 'integer']
  31. ];
  32. }
  33. public function clerk()
  34. {
  35. if (!$this->order_id) {
  36. return [
  37. 'code' => 1,
  38. 'msg' => '数据错误,请刷新后重试'
  39. ];
  40. }
  41. $order = Order::findOne(['id' => $this->order_id]);
  42. if (!$order) {
  43. return [
  44. 'code' => 1,
  45. 'msg' => '订单不存在,请刷新后重试'
  46. ];
  47. }
  48. if ($order->is_pay == 0 && $order->pay_type != 2) {
  49. return [
  50. 'code' => 1,
  51. 'msg' => '订单未支付'
  52. ];
  53. }
  54. $this->order = $order;
  55. return $this->order();
  56. }
  57. // 商城订单核销
  58. private function order()
  59. {
  60. $t = \Yii::$app->db->beginTransaction();
  61. try {
  62. $orderClass = $this->order_model;
  63. $order = $this->order;
  64. //如果订单已经取消
  65. if ($order->apply_delete == Order::ORDER_APPLY_DELETE || $order->trade_status == Order::ORDER_FLOW_CANCEL) {
  66. return [
  67. 'code' => 1,
  68. 'msg' => '订单已取消或申请取消中,不可核销'
  69. ];
  70. }
  71. if ($order->pay_type == 2) {
  72. $order->is_pay = 1;
  73. $order->pay_time = time();
  74. }
  75. $order->send_time = time();
  76. $order->confirm_time = time();
  77. $order->trade_status = Order::ORDER_FLOW_CONFIRM;
  78. $mp_profit = MdProfit::findOne(['order_id' => $order->id]);
  79. if ((int)$order->md_id > 0 && $mp_profit) {
  80. $md = Md::findOne($order->md_id);
  81. $md_staff = MdStaff::findOne(['md_id' => $order->md_id, 'is_manager' => 1, 'is_delete' => 0, 'store_id' => get_store_id()]);
  82. if (!$md_staff) {
  83. return [
  84. 'code' => 1,
  85. 'msg' => '当前无可操作权限,请先配置店长'
  86. ];
  87. }
  88. if ($md_staff->is_disable) {
  89. return [
  90. 'code' => 1,
  91. 'msg' => '核销权限已被禁用'
  92. ];
  93. }
  94. if ($mp_profit->is_clerk == 1 && $mp_profit->is_send == 0) {
  95. $mp_profit->is_send = 1;
  96. $mp_profit->clerk_id = $md_staff->id;
  97. $mp_profit->updated_at = time();
  98. if (!$mp_profit->save()) {
  99. $t->rollBack();
  100. return [
  101. 'code' => 1,
  102. 'msg' => $mp_profit->errors[0]
  103. ];
  104. }
  105. $md->total_profit += $mp_profit->total_profit;
  106. $md->cash_profit += $mp_profit->total_profit;
  107. $md->clerk_profit += $mp_profit->clerk_profit;
  108. if (!$md->save()) {
  109. $t->rollBack();
  110. return [
  111. 'code' => 1,
  112. 'msg' => $md->errors[0]
  113. ];
  114. }
  115. $order->clerk_id = get_user_id();
  116. if (!$order->save()) {
  117. $t->rollBack();
  118. return [
  119. 'code' => 1,
  120. 'msg' => implode(';', array_values($order->firstErrors))
  121. ];
  122. }
  123. }
  124. }
  125. if ($order->save()) {
  126. \app\models\OrderAdminHandleLog::addHandleLog($order->id, \app\models\OrderAdminHandleLog::HANDLE_TYPE_CLERK);
  127. $t->commit();
  128. // TODO: 核销成功 消息发送
  129. return [
  130. 'code' => 0,
  131. 'msg' => '操作成功'
  132. ];
  133. } else {
  134. return [
  135. 'code' => 1,
  136. 'msg' => $this->getErrorSummary(false)[0],
  137. ];
  138. }
  139. } catch (\Exception $e) {
  140. return [
  141. 'code' => 1,
  142. 'msg' => $e->getMessage()
  143. ];
  144. }
  145. }
  146. }