OrderPeriodAdjustForm.php 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <?php
  2. namespace common\models\forms;
  3. use backendApi\modules\v1\models\Admin;
  4. use common\helpers\Date;
  5. use common\components\Model;
  6. use common\helpers\LoggerTool;
  7. use common\libs\logging\operate\AdminOperate;
  8. use common\models\DecOrder;
  9. use common\models\FlowExchangePoints;
  10. use common\models\FlowReconsumePoints;
  11. use common\models\FlowWallet;
  12. use common\models\Order;
  13. use common\models\OrderPeriodAdjust;
  14. use common\models\Period;
  15. use common\models\User;
  16. use common\models\UserInfo;
  17. /**
  18. * OrderPeriodAdjustForm form
  19. */
  20. class OrderPeriodAdjustForm extends Model
  21. {
  22. public $orderSn;
  23. public $modernPeriod;
  24. public $order;
  25. public function init() {
  26. parent::init();
  27. $this->adminOperateLogger = new AdminOperate([
  28. 'fetchClass' => OrderPeriodAdjust::class,
  29. ]);
  30. }
  31. /**
  32. * @inheritdoc
  33. */
  34. public function rules()
  35. {
  36. return [
  37. [['orderSn', 'modernPeriod'], 'trim'],
  38. [['orderSn', 'modernPeriod'], 'required'],
  39. ];
  40. }
  41. public function attributeLabels()
  42. {
  43. return [
  44. 'orderSn' => '订单号',
  45. 'modernPeriod' => '调整后期数',
  46. ];
  47. }
  48. /**
  49. * 指定校验场景
  50. * @return array
  51. */
  52. public function scenarios()
  53. {
  54. $parentScenarios = parent::scenarios();
  55. $customScenarios = [
  56. 'orderPeriodAdjust' => ['orderSn', 'modernPeriod'],
  57. ];
  58. return array_merge($parentScenarios, $customScenarios);
  59. }
  60. /**
  61. * 校验之前
  62. * @return bool
  63. */
  64. public function beforeValidate()
  65. {
  66. $parentValidate = parent::beforeValidate();
  67. // 校验订单
  68. $this->order = Order::findOne(['SN' => $this->orderSn, 'IS_DELETE' => 0]);
  69. if (!$this->order) {
  70. $this->addError('orderSn', '订单不存在');
  71. return false;
  72. }
  73. // 目前期数:已封期、未挂网可调整
  74. $period = Period::getInfoByPeriodNum($this->modernPeriod);
  75. if (!$period) {
  76. $this->addError('modernPeriod', '期数不存在');
  77. return false;
  78. }
  79. if (!((+$period['IS_CLOSED'] == 1) && (+$period['IS_SENT'] == 0))) {
  80. $this->addError('orderSn', '调整后的期数必须是已封期且未挂网');
  81. return false;
  82. }
  83. return $parentValidate;
  84. }
  85. /**
  86. * @return bool|null
  87. */
  88. public function periodAdjust()
  89. {
  90. if (!$this->validate()) {
  91. return null;
  92. }
  93. $db = \Yii::$app->db;
  94. $transaction = $db->beginTransaction();
  95. try {
  96. // 调整订单期数
  97. Order::updateAll(['PERIOD_NUM' => $this->modernPeriod], 'SN = :SN', [':SN' => $this->orderSn]);
  98. if ($this->order->ORDER_TYPE === 'ZC') {
  99. // 调整报单期数
  100. DecOrder::updateAll(['PERIOD_NUM' => $this->modernPeriod], 'ORDER_SN = :ORDER_SN', ['ORDER_SN' => $this->orderSn]);
  101. // 调整会员的期数
  102. User::updateAll(['PERIOD_AT' => $this->modernPeriod], 'ID = :USER_ID', ['USER_ID' => $this->order->USER_ID]);
  103. UserInfo::updateAll(['HIGHEST_EMP_LV_PERIOD' => $this->modernPeriod], 'USER_ID = :USER_ID', ['USER_ID' => $this->order->USER_ID]);
  104. }
  105. // 调整流水的期数
  106. switch ($this->order->PAY_TYPE){
  107. case 'cash':
  108. FlowWallet::updateAll(['PERIOD_NUM' => $this->modernPeriod], 'ORDER_SN = :ORDER_SN', ['ORDER_SN' => $this->orderSn]);
  109. break;
  110. case 'point':
  111. FlowReconsumePoints::updateAll(['PERIOD_NUM' => $this->modernPeriod], 'ORDER_SN = :ORDER_SN', ['ORDER_SN' => $this->orderSn]);
  112. break;
  113. case 'exchange':
  114. FlowExchangePoints::updateAll(['PERIOD_NUM' => $this->modernPeriod], 'ORDER_SN = :ORDER_SN', ['ORDER_SN' => $this->orderSn]);
  115. break;
  116. default:
  117. break;
  118. }
  119. // 写入调整记录
  120. $orderModel = new OrderPeriodAdjust();
  121. $orderModel->ORDER_SN = $this->orderSn;
  122. $orderModel->DEC_SN = $this->order->DEC_SN ?? '';
  123. $orderModel->ORIGIN_PERIOD = $this->order->PERIOD_NUM;
  124. $orderModel->MODERN_PERIOD = $this->modernPeriod;
  125. $orderModel->ADMIN_ID = Admin::getAdminNameById(\Yii::$app->user->id);
  126. $orderModel->CREATED_AT = Date::nowTime();
  127. if (!$orderModel->save()) {
  128. $this->addErrors($orderModel->getErrors());
  129. return false;
  130. }
  131. $transaction->commit();
  132. } catch(\Exception $e) {
  133. $transaction->rollBack();
  134. $this->addError('periodAdjust', $e->getMessage());
  135. return null;
  136. }
  137. return true;
  138. }
  139. }