CalcServePeriodForm.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <?php
  2. namespace common\models\forms;
  3. use common\components\Model;
  4. use common\helpers\bonus\CalcServePerfCalc;
  5. use common\models\Period;
  6. use yii\base\Exception;
  7. class CalcServePeriodForm extends Model
  8. {
  9. public $periodNum;
  10. private $_periodModel;
  11. /**
  12. * @inheritdoc
  13. */
  14. public function rules()
  15. {
  16. return [
  17. [['periodNum'], 'trim'],
  18. [['periodNum'], 'required'],
  19. [['periodNum'], 'integer'],
  20. [['periodNum'], 'isPeriod'],
  21. ];
  22. }
  23. public function scenarios()
  24. {
  25. $parentScenarios = parent::scenarios();
  26. $customScenarios = [
  27. 'close' => ['periodNum'],
  28. 'perf' => ['periodNum'],
  29. 'calc' => ['periodNum'],
  30. 'send' => ['periodNum'],
  31. 'autoClose' => ['periodNum'],
  32. ];
  33. return array_merge($parentScenarios, $customScenarios);
  34. }
  35. public function attributeLabels()
  36. {
  37. return [
  38. 'periodNum' => '期数',
  39. ];
  40. }
  41. public function isPeriod($attributes){
  42. $periodModel = Period::findOne(['PERIOD_NUM' => $this->periodNum]);
  43. if(!$periodModel){
  44. $this->addError($attributes, '所传期数不存在');
  45. }
  46. $this->_periodModel = $periodModel;
  47. }
  48. // /**
  49. // * 页面请求异步处理生成业绩单
  50. // * @return string | null
  51. // */
  52. // public function perfWebToAsync(){
  53. // if(!$this->validate()){
  54. // return null;
  55. // }
  56. // $model = $this->_periodModel;
  57. // $model->IS_PERFING = 1;
  58. // $model->PERF_ADMIN_ID = \Yii::$app->user->id;
  59. // if(!$model->save()){
  60. // $this->addError('perf', Form::formatErrorsForApi($model->getErrors()));
  61. // return null;
  62. // }
  63. // // 异步处理添加任务
  64. // $settings = \Yii::$app->params['swooleAsyncTimer'];
  65. // $bonusSettings = \Yii::$app->params['swooleBonusConfig'];
  66. // $settings = array_merge($settings, $bonusSettings);
  67. // $taskKey = \Yii::$app->swooleAsyncTimer->asyncHandle('bonus/prepare-perf', \Yii::$app->request->get(), $settings);
  68. // if($taskKey === false){
  69. // $this->addError('perf', '请求失败');
  70. // return null;
  71. // }
  72. // return $model;
  73. // }
  74. /**
  75. * 异步处理逻辑
  76. * @param $handleUserId
  77. * @return bool|null
  78. * @throws Exception
  79. * @throws \yii\db\Exception
  80. */
  81. public function perfAsync($handleUserId,$periodNum){
  82. if(!$this->validate()){
  83. return null;
  84. }
  85. $bonusCalc = CalcServePerfCalc::instance();
  86. $periodNum = $periodNum ? $periodNum : $this->periodNum;
  87. $asyncResult = $bonusCalc->calcStep($periodNum, $handleUserId);
  88. if($asyncResult){
  89. $bonusCalc->endCalcTask();
  90. } else {
  91. $bonusCalc->errorCalcTask();
  92. $this->addErrors($bonusCalc->getErrors());
  93. }
  94. return $asyncResult;
  95. }
  96. }