CalcController.php 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  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\GeneratePerfOrder;
  10. use common\helpers\bonus\Calc\PullCalcBonusData;
  11. use common\helpers\bonus\Calc\PullPerfDataFromCalc;
  12. use common\helpers\bonus\Calc\PushBaseDataToCalc;
  13. use common\helpers\Cache;
  14. use common\models\CalcRecord;
  15. use common\models\Period;
  16. class CalcController extends BaseController
  17. {
  18. public function actionPerfOrder($taskKey)
  19. {
  20. $params = Cache::getAsyncParams($taskKey);
  21. $periodNum = $params['periodNum'] ?? 0;
  22. CalcRecord::record($periodNum, '业绩单生成中');
  23. //生成业绩单 状态已修改
  24. $res = (new GeneratePerfOrder($periodNum))->start();
  25. //该期状态改为不在计算中
  26. // Period::updatePeriodIsProcessing($periodNum, Period::NOT_PROCESSING);
  27. if (200 == $res['code']) {
  28. self::recordCalcAndProcessStatus($periodNum, '业绩单已生成');
  29. \Yii::$app->swooleAsyncTimer->pushAsyncResultToAdmin($params['handleUserId'], "第{$params['periodNum']}期生成业绩单更新成功");
  30. return true;
  31. } else {
  32. self::recordCalcAndProcessStatus($periodNum, '业绩单生成失败,原因:' . $res['msg'] ?? '');
  33. \Yii::$app->swooleAsyncTimer->pushAsyncResultToAdmin($params['handleUserId'], "第{$params['periodNum']}期生成业绩单更新失败,原因:" . $res['msg'] ?? '', false);
  34. return false;
  35. }
  36. }
  37. //自动执行
  38. public static function actionAutoExec($taskKey): bool
  39. {
  40. $params = Cache::getAsyncParams($taskKey);
  41. $periodNum = $params['periodNum'] ?? 0;
  42. $db = 'dbCalc';
  43. //生成业绩单 状态已修改
  44. CalcRecord::record($periodNum, '开始生成业绩单');
  45. $res = (new GeneratePerfOrder($periodNum))->start();
  46. if (200 == $res['code']) {
  47. CalcRecord::record($periodNum, '业绩单已生成');
  48. } else {
  49. Period::updatePeriodIsProcessing($periodNum, Period::NOT_PROCESSING);
  50. CalcRecord::record($periodNum, '第' . $periodNum . '期业绩单生成失败,原因:' . $res['msg']);
  51. return false;
  52. }
  53. //推送基础数据
  54. CalcRecord::record($periodNum, '开始推送基础数据');
  55. $res = (new PushBaseDataToCalc($periodNum))->start();
  56. if (200 == $res['code']) {
  57. CalcRecord::record($periodNum, '基础数据完成推送');
  58. } else {
  59. Period::updatePeriodIsProcessing($periodNum, Period::NOT_PROCESSING);
  60. CalcRecord::record($periodNum, '第' . $periodNum . '期基础数据推送失败,原因:' . $res['msg']);
  61. return false;
  62. }
  63. //todo 完成需要修改状态
  64. //通知结算系统生成期业绩
  65. CalcRecord::record($periodNum, '开始生成' . $periodNum . '期的期业绩');
  66. \Yii::$app->$db->createCommand()->update('AR_PERIOD', ['IS_PREPARE' => 1], 'PERIOD_NUM=' . $periodNum)->execute();
  67. //todo 完成需要修改状态
  68. //自动监听 拉取期业绩 并计算奖金
  69. // (new PullPerfDataFromCalc($periodNum))->start();
  70. //通知结算系统计算奖金
  71. // \Yii::$app->$db->createCommand()->update('AR_PERIOD', ['IS_PREPARE' => 3], 'PERIOD_NUM=' . $periodNum)->execute();
  72. //自动监听 计算完成 自动拉取奖金结果并修改状态
  73. // (new PullCalcBonusData($period['PERIOD_NUM']))->start();
  74. return true;
  75. }
  76. public static function recordCalcAndProcessStatus($periodNum, $text)
  77. {
  78. Period::updatePeriodIsProcessing($periodNum, Period::NOT_PROCESSING);
  79. CalcRecord::record($periodNum, $text);
  80. return true;
  81. }
  82. public function actionPushData($taskKey): bool
  83. {
  84. $params = Cache::getAsyncParams($taskKey);
  85. $periodNum = $params['periodNum'] ?? 0;
  86. CalcRecord::record($periodNum, '开始推送基础数据');
  87. //推送数据 状态已修改
  88. $res = (new PushBaseDataToCalc($periodNum))->start();
  89. if (200 == $res['code']) {
  90. self::recordCalcAndProcessStatus($periodNum, '基础数据已全部推送');
  91. return true;
  92. } else {
  93. self::recordCalcAndProcessStatus($periodNum, '基础数据推送失败,原因:' . $res['msg'] ?? '');
  94. return false;
  95. }
  96. }
  97. public function actionPullPeriod($taskKey): bool
  98. {
  99. $params = Cache::getAsyncParams($taskKey);
  100. $periodNum = $params['periodNum'] ?? 0;
  101. CalcRecord::record($periodNum, '开始拉取期业绩数据');
  102. //推送数据 状态已修改
  103. $res = (new PullPerfDataFromCalc($periodNum))->start();
  104. if (200 == $res['code']) {
  105. self::recordCalcAndProcessStatus($periodNum, '期业绩数据已全部拉取');
  106. return true;
  107. } else {
  108. self::recordCalcAndProcessStatus($periodNum, '期业绩数据拉取失败,原因:' . $res['msg'] ?? '');
  109. return false;
  110. }
  111. }
  112. public function actionPullBonus($taskKey): bool
  113. {
  114. $params = Cache::getAsyncParams($taskKey);
  115. $periodNum = $params['periodNum'] ?? 0;
  116. CalcRecord::record($periodNum, '开始拉取奖金数据');
  117. //推送数据 状态已修改
  118. $res = (new PullCalcBonusData($periodNum))->start();
  119. if (200 == $res['code']) {
  120. self::recordCalcAndProcessStatus($periodNum, '奖金数据已全部拉取');
  121. return true;
  122. } else {
  123. self::recordCalcAndProcessStatus($periodNum, '奖金数据拉取失败,原因:' . $res['msg'] ?? '');
  124. return false;
  125. }
  126. }
  127. }