CalcController.php 10 KB

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