OrderPeriodAdjustForm.php 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  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\Order;
  10. use common\models\OrderPeriodAdjust;
  11. use common\models\Period;
  12. /**
  13. * OrderPeriodAdjustForm form
  14. */
  15. class OrderPeriodAdjustForm extends Model
  16. {
  17. public $orderSn;
  18. public $modernPeriod;
  19. public $order;
  20. public function init() {
  21. parent::init();
  22. $this->adminOperateLogger = new AdminOperate([
  23. 'fetchClass' => OrderPeriodAdjust::class,
  24. ]);
  25. }
  26. /**
  27. * @inheritdoc
  28. */
  29. public function rules()
  30. {
  31. return [
  32. [['orderSn', 'modernPeriod'], 'trim'],
  33. [['orderSn', 'modernPeriod'], 'required'],
  34. ];
  35. }
  36. public function attributeLabels()
  37. {
  38. return [
  39. 'orderSn' => '订单号',
  40. 'modernPeriod' => '调整后期数',
  41. ];
  42. }
  43. /**
  44. * 指定校验场景
  45. * @return array
  46. */
  47. public function scenarios()
  48. {
  49. $parentScenarios = parent::scenarios();
  50. $customScenarios = [
  51. 'orderPeriodAdjust' => ['orderSn', 'modernPeriod'],
  52. ];
  53. return array_merge($parentScenarios, $customScenarios);
  54. }
  55. /**
  56. * 校验之前
  57. * @return bool
  58. */
  59. public function beforeValidate()
  60. {
  61. $parentValidate = parent::beforeValidate();
  62. // 校验订单
  63. $this->order = Order::findOne(['SN' => $this->orderSn, 'IS_DELETE' => 0]);
  64. if (!$this->order) {
  65. $this->addError('orderSn', '订单不存在');
  66. return false;
  67. }
  68. // 目前期数:已封期、未挂网可调整
  69. $period = Period::getInfoByPeriodNum($this->modernPeriod);
  70. if (!$period) {
  71. $this->addError('modernPeriod', '期数不存在');
  72. return false;
  73. }
  74. if (!((+$period['IS_CLOSED'] == 1) && (+$period['IS_SENT'] == 0))) {
  75. $this->addError('orderSn', '调整后的期数必须是已封期且未挂网');
  76. return false;
  77. }
  78. return $parentValidate;
  79. }
  80. /**
  81. * @return bool|null
  82. */
  83. public function periodAdjust()
  84. {
  85. if (!$this->validate()) {
  86. return null;
  87. }
  88. $db = \Yii::$app->db;
  89. $transaction = $db->beginTransaction();
  90. try {
  91. // 调整订单期数
  92. Order::updateAll(['PERIOD_NUM' => $this->modernPeriod], 'SN = :SN', [':SN' => $this->orderSn]);
  93. // 调整报单期数
  94. if ($this->order->ORDER_TYPE === 'ZC') {
  95. DecOrder::updateAll(['PERIOD_NUM' => $this->modernPeriod], 'ORDER_SN = :ORDER_SN', ['ORDER_SN' => $this->orderSn]);
  96. }
  97. // 写入调整记录
  98. $orderModel = new OrderPeriodAdjust();
  99. $orderModel->ORDER_SN = $this->orderSn;
  100. $orderModel->ORIGIN_PERIOD = $this->order->PERIOD_NUM;
  101. $orderModel->MODERN_PERIOD = $this->modernPeriod;
  102. $orderModel->ADMIN_ID = Admin::getAdminNameById(\Yii::$app->user->id);
  103. $orderModel->CREATED_AT = Date::nowTime();
  104. if (!$orderModel->save()) {
  105. $this->addErrors($orderModel->getErrors());
  106. return false;
  107. }
  108. $transaction->commit();
  109. } catch(\Exception $e) {
  110. $transaction->rollBack();
  111. $this->addError('periodAdjust', $e->getMessage());
  112. return null;
  113. }
  114. return true;
  115. }
  116. }