OrderPeriodAdjustForm.php 5.5 KB

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