CalcController.php 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: leo
  5. * Date: 2018/3/9
  6. * Time: 上午11:56
  7. */
  8. namespace console\controllers;
  9. use common\helpers\bonus\Calc\CalcConsole;
  10. use common\helpers\bonus\Calc\GeneratePerfOrder;
  11. use common\helpers\bonus\Calc\PullCalcBonusData;
  12. use common\helpers\bonus\Calc\PullPerfDataFromCalc;
  13. use common\helpers\bonus\Calc\PushBaseDataToCalc;
  14. use common\helpers\Cache;
  15. use common\models\CalcRecord;
  16. use common\models\Period;
  17. class CalcController extends BaseController
  18. {
  19. public function actionPerfOrder($taskKey)
  20. {
  21. $params = Cache::getAsyncParams($taskKey);
  22. $periodNum = $params['periodNum'] ?? 0;
  23. CalcRecord::record($periodNum, '【生成业绩单】业务系统,业绩单生成中');
  24. //生成业绩单 状态已修改
  25. $res = (new GeneratePerfOrder($periodNum))->start();
  26. //该期状态改为不在计算中
  27. // Period::updatePeriodIsProcessing($periodNum, Period::NOT_PROCESSING);
  28. if (200 == $res['code']) {
  29. self::recordCalcAndProcessStatus($periodNum, '【生成业绩单】业务系统,业绩单已生成');
  30. \Yii::$app->swooleAsyncTimer->pushAsyncResultToAdmin($params['handleUserId'], "第{$params['periodNum']}期生成业绩单更新成功");
  31. return true;
  32. } else {
  33. self::recordCalcAndProcessStatus($periodNum, '【生成业绩单】业务系统,业绩单生成失败,原因:' . substr($res['msg'],0,1000) ?? '');
  34. \Yii::$app->swooleAsyncTimer->pushAsyncResultToAdmin($params['handleUserId'], "第{$params['periodNum']}期生成业绩单更新失败,原因:" . $res['msg'] ?? '', false);
  35. return false;
  36. }
  37. }
  38. //自动执行
  39. public static function actionAutoExec($taskKey): bool
  40. {
  41. $params = Cache::getAsyncParams($taskKey);
  42. $periodNum = $params['periodNum'] ?? 0;
  43. //生成业绩单 状态已修改
  44. CalcRecord::record($periodNum, '【生成业绩单】业务系统,开始生成业绩单');
  45. //重置业务系统的计算进度标识
  46. \Yii::$app->db->createCommand()->update('AR_PERIOD', ['IS_PERFED' => 0, 'IS_CALCULATED' => 0], 'PERIOD_NUM=' . $periodNum)->execute();
  47. //重置计算系统的计算进度标识
  48. $db = CalcConsole::CALC_DB_NAME;
  49. \Yii::$app->$db->createCommand()->update('AR_PERIOD', ['IS_PREPARE' => 0, 'IS_PERFED' => 0, 'IS_CALCULATED' => 0], 'PERIOD_NUM=' . $periodNum)->execute();
  50. $res = (new GeneratePerfOrder($periodNum))->start();
  51. if (200 == $res['code']) {
  52. CalcRecord::record($periodNum, '【生成业绩单】业务系统,业绩单已生成');
  53. } else {
  54. Period::updatePeriodIsProcessing($periodNum, Period::NOT_PROCESSING);
  55. CalcRecord::record($periodNum, '【生成业绩单】业务系统,第' . $periodNum . '期业绩单生成失败,原因:' . substr($res['msg'],0,100));
  56. return false;
  57. }
  58. //推送基础数据
  59. CalcRecord::record($periodNum, '【基础数据】开始推送基础数据');
  60. $res = (new PushBaseDataToCalc($periodNum))->start();
  61. if (200 == $res['code']) {
  62. Period::updatePeriodIsProcessing($periodNum, Period::NOT_PROCESSING);
  63. CalcRecord::record($periodNum, '【基础数据】基础数据完成推送');
  64. } else {
  65. Period::updatePeriodIsProcessing($periodNum, Period::NOT_PROCESSING);
  66. CalcRecord::record($periodNum, '【基础数据】第' . $periodNum . '期基础数据推送失败,原因:' . $res['msg']);
  67. return false;
  68. }
  69. //todo 完成需要修改状态
  70. //通知结算系统生成期业绩
  71. CalcRecord::record($periodNum, '【基础数据】开始生成' . $periodNum . '期的期业绩');
  72. \Yii::$app->$db->createCommand()->update('AR_PERIOD', ['IS_PREPARE' => 1], 'PERIOD_NUM=' . $periodNum)->execute();
  73. //todo 完成需要修改状态
  74. //自动监听 拉取期业绩 并计算奖金
  75. // (new PullPerfDataFromCalc($periodNum))->start();
  76. //通知结算系统计算奖金
  77. // \Yii::$app->$db->createCommand()->update('AR_PERIOD', ['IS_PREPARE' => 3], 'PERIOD_NUM=' . $periodNum)->execute();
  78. //自动监听 计算完成 自动拉取奖金结果并修改状态
  79. // (new PullCalcBonusData($period['PERIOD_NUM']))->start();
  80. return true;
  81. }
  82. //自动计算业绩
  83. public static function actionAutoPerf($taskKey): bool
  84. {
  85. $params = Cache::getAsyncParams($taskKey);
  86. $periodNum = $params['periodNum'] ?? 0;
  87. //生成业绩单 状态已修改
  88. CalcRecord::record($periodNum, '【生成业绩单】开始生成业绩单');
  89. //重置业务系统的计算进度标识
  90. \Yii::$app->db->createCommand()->update('AR_PERIOD', ['IS_PERFED' => 0, 'IS_CALCULATED' => 0], 'PERIOD_NUM=' . $periodNum)->execute();
  91. //重置计算系统的计算进度标识
  92. $db = CalcConsole::CALC_DB_NAME;
  93. \Yii::$app->$db->createCommand()->update('AR_PERIOD', ['IS_PREPARE' => 0, 'IS_PERFED' => 0, 'IS_CALCULATED' => 0], 'PERIOD_NUM=' . $periodNum)->execute();
  94. $res = (new GeneratePerfOrder($periodNum))->start();
  95. if (200 == $res['code']) {
  96. CalcRecord::record($periodNum, '【生成业绩单】业绩单已生成');
  97. } else {
  98. Period::updatePeriodIsPreparing($periodNum, Period::NOT_PREPARING);
  99. CalcRecord::record($periodNum, '【生成业绩单】第' . $periodNum . '期业绩单生成失败,原因:' . substr($res['msg'],0,100));
  100. return false;
  101. }
  102. //推送基础数据
  103. CalcRecord::record($periodNum, '【基础数据】开始推送基础数据');
  104. $res = (new PushBaseDataToCalc($periodNum))->start();
  105. if (200 == $res['code']) {
  106. CalcRecord::record($periodNum, '【基础数据】基础数据完成推送');
  107. } else {
  108. Period::updatePeriodIsPreparing($periodNum, Period::NOT_PREPARING);
  109. CalcRecord::record($periodNum, '【基础数据】第' . $periodNum . '期基础数据推送失败,原因:' . $res['msg']);
  110. return false;
  111. }
  112. //todo 完成需要修改状态
  113. //通知结算系统生成期业绩
  114. CalcRecord::record($periodNum, '【期业绩】开始生成' . $periodNum . '期的期业绩');
  115. \Yii::$app->$db->createCommand()->update('AR_PERIOD', ['IS_PREPARE' => 1], 'PERIOD_NUM=' . $periodNum)->execute();
  116. //todo 完成需要修改状态
  117. //自动监听 拉取期业绩 并计算奖金
  118. // (new PullPerfDataFromCalc($periodNum))->start();
  119. //通知结算系统计算奖金
  120. // \Yii::$app->$db->createCommand()->update('AR_PERIOD', ['IS_PREPARE' => 3], 'PERIOD_NUM=' . $periodNum)->execute();
  121. //自动监听 计算完成 自动拉取奖金结果并修改状态
  122. // (new PullCalcBonusData($period['PERIOD_NUM']))->start();
  123. return true;
  124. }
  125. public static function recordCalcAndProcessStatus($periodNum, $text)
  126. {
  127. Period::updatePeriodIsProcessing($periodNum, Period::NOT_PROCESSING);
  128. CalcRecord::record($periodNum, $text);
  129. return true;
  130. }
  131. /**推送基础数据
  132. * @param $taskKey
  133. * @return bool
  134. */
  135. public function actionPushData($taskKey): bool
  136. {
  137. $params = Cache::getAsyncParams($taskKey);
  138. $periodNum = $params['periodNum'] ?? 0;
  139. CalcRecord::record($periodNum, '【基础数据】开始准备基础数据');
  140. //推送数据 状态已修改
  141. $res = (new PushBaseDataToCalc($periodNum))->start();
  142. if (200 == $res['code']) {
  143. self::recordCalcAndProcessStatus($periodNum, '【基础数据】基础数据已全部推送');
  144. return true;
  145. } else {
  146. self::recordCalcAndProcessStatus($periodNum, '【基础数据】基础数据推送失败,原因:' . substr($res['msg'],0,100));
  147. return false;
  148. }
  149. }
  150. /**拉取期业绩
  151. * @param $taskKey
  152. * @return bool
  153. */
  154. public function actionPullPeriod($taskKey): bool
  155. {
  156. $params = Cache::getAsyncParams($taskKey);
  157. $periodNum = $params['periodNum'] ?? 0;
  158. CalcRecord::record($periodNum, '【期业绩】开始拉取期业绩数据');
  159. //推送数据 状态已修改
  160. $res = (new PullPerfDataFromCalc($periodNum))->start();
  161. if (200 == $res['code']) {
  162. self::recordCalcAndProcessStatus($periodNum, '【期业绩】期业绩数据已全部拉取');
  163. return true;
  164. } else {
  165. self::recordCalcAndProcessStatus($periodNum, '【期业绩】期业绩数据拉取失败,原因:' . substr($res['msg'],0,100));
  166. return false;
  167. }
  168. }
  169. /**拉取奖金数据
  170. * @param $taskKey
  171. * @return bool
  172. */
  173. public function actionPullBonus($taskKey): bool
  174. {
  175. $params = Cache::getAsyncParams($taskKey);
  176. $periodNum = $params['periodNum'] ?? 0;
  177. CalcRecord::record($periodNum, '【奖金计算】开始拉取'.$periodNum.'期奖金数据');
  178. //推送数据 状态已修改
  179. $res = (new PullCalcBonusData($periodNum))->start();
  180. if (200 == $res['code']) {
  181. self::recordCalcAndProcessStatus($periodNum, '【奖金计算】'.$periodNum.'期奖金数据已全部拉取');
  182. return true;
  183. } else {
  184. self::recordCalcAndProcessStatus($periodNum, '【奖金计算】'.$periodNum.'期奖金数据拉取失败,原因:' . $res['msg'] ?? '');
  185. return false;
  186. }
  187. }
  188. }