PreparePeriodForm.php 3.4 KB

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