OrderPeriodAdjustForm.php 5.9 KB

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