PerfAdjustmentForm.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. <?php
  2. namespace common\models\forms;
  3. use common\components\Model;
  4. use common\helpers\Form;
  5. use common\libs\logging\operate\AdminOperate;
  6. use common\models\Period;
  7. use common\models\UserPerf;
  8. use yii\base\Exception;
  9. class PerfAdjustmentForm extends Model
  10. {
  11. public $USER_ID;
  12. public $USER_NAME;
  13. public $SURPLUS_1L;
  14. public $SURPLUS_1L_ZC;
  15. public $SURPLUS_1L_FX;
  16. public $SURPLUS_2L;
  17. public $SURPLUS_2L_ZC;
  18. public $SURPLUS_2L_FX;
  19. public $SURPLUS_3L;
  20. public $SURPLUS_3L_ZC;
  21. public $SURPLUS_3L_FX;
  22. public function init()
  23. {
  24. parent::init();
  25. $this->adminOperateLogger = new AdminOperate([
  26. 'fetchClass' => UserPerf::class,
  27. ]);
  28. }
  29. /**
  30. * @inheritdoc
  31. */
  32. public function rules()
  33. {
  34. return [
  35. [['USER_ID', 'SURPLUS_1L', 'SURPLUS_1L_ZC', 'SURPLUS_1L_FX', 'SURPLUS_2L', 'SURPLUS_2L_ZC', 'SURPLUS_2L_FX', 'SURPLUS_3L', 'SURPLUS_3L_ZC', 'SURPLUS_3L_FX'], 'required'],
  36. ];
  37. }
  38. /**
  39. * 指定场景
  40. * @return array
  41. */
  42. public function scenarios() {
  43. $parentScenarios = parent::scenarios();
  44. $customScenarios = [
  45. 'perfAdjustment' => ['USER_ID', 'USER_NAME', 'SURPLUS_1L', 'SURPLUS_1L_ZC', 'SURPLUS_1L_FX', 'SURPLUS_2L', 'SURPLUS_2L_ZC', 'SURPLUS_2L_FX', 'SURPLUS_3L', 'SURPLUS_3L_ZC', 'SURPLUS_3L_FX']
  46. ];
  47. return array_merge($parentScenarios, $customScenarios);
  48. }
  49. /**
  50. * @inheritdoc
  51. */
  52. public function attributeLabels()
  53. {
  54. return [
  55. 'USER_ID' => '会员ID',
  56. 'SURPLUS_1L' => '一市场综合结余业绩',
  57. 'SURPLUS_1L_ZC' => '一市场综合报单业绩',
  58. 'SURPLUS_1L_FX' => '一市场复消结余业绩',
  59. 'SURPLUS_2L' => '二市场综合结余业绩',
  60. 'SURPLUS_2L_ZC' => '二市场综合报单业绩',
  61. 'SURPLUS_2L_FX' => '二市场复消结余业绩',
  62. 'SURPLUS_3L' => '三市场综合结余业绩',
  63. 'SURPLUS_3L_ZC' => '三市场综合报单业绩',
  64. 'SURPLUS_3L_FX' => '三市场复消结余业绩',
  65. ];
  66. }
  67. /**
  68. * 调整会员业绩
  69. * @return bool|null
  70. */
  71. public function perfAdjustment(): ?bool
  72. {
  73. if (!$this->validate()) {
  74. return false;
  75. }
  76. $transaction = \Yii::$app->db->beginTransaction();
  77. try {
  78. // 修改前业绩
  79. $userPerf = UserPerf::find()
  80. ->where('USER_ID=:USER_ID', [':USER_ID' => $this->USER_ID])
  81. ->select('USER_ID,SURPLUS_1L,SURPLUS_1L_ZC,SURPLUS_1L_FX,SURPLUS_2L,SURPLUS_2L_ZC,SURPLUS_2L_FX,SURPLUS_3L,SURPLUS_3L_ZC,SURPLUS_3L_FX')
  82. ->one();
  83. if (!$userPerf->toArray()) {
  84. throw new Exception('Member performance does not exist'); // 会员业绩不存在
  85. }
  86. $this->adminOperateLogger->beforeUpdate($userPerf);
  87. $modernPerf = [
  88. 'SURPLUS_1L' => $this->SURPLUS_1L,
  89. 'SURPLUS_1L_ZC' => $this->SURPLUS_1L_ZC,
  90. 'SURPLUS_1L_FX' => $this->SURPLUS_1L_FX,
  91. 'SURPLUS_2L' => $this->SURPLUS_2L,
  92. 'SURPLUS_2L_ZC' => $this->SURPLUS_2L_ZC,
  93. 'SURPLUS_2L_FX' => $this->SURPLUS_2L_FX,
  94. 'SURPLUS_3L' => $this->SURPLUS_3L,
  95. 'SURPLUS_3L_ZC' => $this->SURPLUS_3L_ZC,
  96. 'SURPLUS_3L_FX' => $this->SURPLUS_3L_FX,
  97. ];
  98. if (!UserPerf::updateAll($modernPerf, 'USER_ID=:USER_ID', [':USER_ID' => $this->USER_ID])) {
  99. throw new Exception(Form::formatErrorsForApi($userPerf->getErrors()));
  100. }
  101. $transaction->commit();
  102. $afterUpdate = UserPerf::find()
  103. ->where('USER_ID=:USER_ID', [':USER_ID' => $this->USER_ID])
  104. ->select('USER_ID,SURPLUS_1L,SURPLUS_1L_ZC,SURPLUS_1L_FX,SURPLUS_2L,SURPLUS_2L_ZC,SURPLUS_2L_FX,SURPLUS_3L,SURPLUS_3L_ZC,SURPLUS_3L_FX')
  105. ->one();
  106. $this->adminOperateLogger->afterUpdate($afterUpdate)->clean()->save([
  107. 'optType' => '调整业绩',
  108. 'userId' => $this->USER_ID,
  109. 'userName' => $this->USER_NAME,
  110. 'periodNum' => Period::instance()->getNowPeriodNum(),
  111. ]);
  112. } catch (Exception $e) {
  113. $transaction->rollBack();
  114. $this->addError('perfAdjustment', $e->getMessage());
  115. return false;
  116. }
  117. return true;
  118. }
  119. }