CalcController.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: leo
  5. * Date: 2018/2/24
  6. * Time: 下午12:48
  7. */
  8. namespace backendApi\modules\v1\controllers;
  9. use common\helpers\bonus\Calc\CalcConsole;
  10. use common\helpers\bonus\Calc\PullCalcBonusData;
  11. use common\helpers\Form;
  12. use common\models\CalcRecord;
  13. use common\models\FlowBonus;
  14. use common\models\forms\PeriodForm;
  15. use common\models\Period;
  16. use Yii;
  17. class CalcController extends BaseController
  18. {
  19. public $modelClass = FlowBonus::class;
  20. public function behaviors()
  21. {
  22. $behaviors = parent::behaviors();
  23. return $behaviors;
  24. }
  25. public function actionAutoCalc()
  26. {
  27. $periodNum = \Yii::$app->request->get('periodNum');
  28. if (!$periodNum) {
  29. return static::notice('期数不存在', 400);
  30. }
  31. if (Period::isProcessing($periodNum)) {
  32. return static::notice('有操作正在进行中请稍后', 400);
  33. }
  34. //设置计算进行中标识
  35. Period::updatePeriodIsProcessing($periodNum, Period::IS_PROCESSING);
  36. //设置自动计算标识
  37. Period::updatePeriodIsAutoExec($periodNum, Period::AUTO_EXEC_CALC);
  38. $formModel = new PeriodForm();
  39. $formModel->scenario = 'perf';
  40. if ($formModel->load(Yii::$app->request->get(), '') && $formModel->autoExec()) {
  41. return static::notice('自动计算已开始,请等待');
  42. } else {
  43. return static::notice(Form::formatErrorsForApi($formModel->getErrors()), 400);
  44. }
  45. }
  46. /**
  47. * 生成业绩单
  48. * @return mixed
  49. * @throws \yii\web\HttpException
  50. */
  51. public function actionPerfOrder()
  52. {
  53. $periodNum = \Yii::$app->request->get('periodNum');
  54. if (!$periodNum) {
  55. return static::notice('期数不存在', 400);
  56. }
  57. if (Period::isProcessing($periodNum)) {
  58. return static::notice('有操作正在进行中请稍后', 400);
  59. }
  60. //设置手动计算标识
  61. Period::updatePeriodIsAutoExec($periodNum, Period::MANUAL_EXEC_CALC);
  62. //设置计算进行中标识
  63. Period::updatePeriodIsProcessing($periodNum, Period::IS_PROCESSING);
  64. $formModel = new PeriodForm();
  65. $formModel->scenario = 'perf';
  66. if ($formModel->load(Yii::$app->request->get(), '') && $formModel->generatePerfOrder()) {
  67. return static::notice('业绩单已开始生成,请等待');
  68. } else {
  69. Period::updatePeriodIsProcessing($periodNum, Period::NOT_PROCESSING);
  70. return static::notice(Form::formatErrorsForApi($formModel->getErrors()), 400);
  71. }
  72. }
  73. /**
  74. * 推送基础数据
  75. * @return mixed
  76. * @throws \yii\web\HttpException
  77. */
  78. public function actionInitData()
  79. {
  80. $periodNum = \Yii::$app->request->get('periodNum');
  81. if (!$periodNum) {
  82. return static::notice('期数不存在', 400);
  83. }
  84. if (Period::isProcessing($periodNum)) {
  85. return static::notice('有操作正在进行中请稍后', 400);
  86. }
  87. //设置手动计算标识
  88. Period::updatePeriodIsAutoExec($periodNum, Period::MANUAL_EXEC_CALC);
  89. //设置计算进行中标识
  90. Period::updatePeriodIsProcessing($periodNum, Period::IS_PROCESSING);
  91. $formModel = new PeriodForm();
  92. $formModel->scenario = 'perf';
  93. if ($formModel->load(Yii::$app->request->get(), '') && $formModel->pushBaseData()) {
  94. return static::notice('基础数据已开始推送,请等待');
  95. } else {
  96. Period::updatePeriodIsProcessing($periodNum, Period::NOT_PROCESSING);
  97. return static::notice(Form::formatErrorsForApi($formModel->getErrors()), 400);
  98. }
  99. }
  100. /**
  101. * 通知计算系统生成期业绩和月业绩单
  102. * @return mixed
  103. * @throws \yii\web\HttpException
  104. */
  105. public function actionCalcPerfPeriod()
  106. {
  107. $periodNum = \Yii::$app->request->get('periodNum');
  108. if (!$periodNum) {
  109. return static::notice('期数不存在', 400);
  110. }
  111. if (Period::isProcessing($periodNum)) {
  112. return static::notice('有操作正在进行中请稍后', 400);
  113. }
  114. //设置手动计算标识
  115. Period::updatePeriodIsAutoExec($periodNum, Period::MANUAL_EXEC_CALC);
  116. //设置计算进行中标识
  117. // Period::updatePeriodIsProcessing($periodNum, Period::IS_PROCESSING);
  118. $db = CalcConsole::CALC_DB_NAME;
  119. $period = \Yii::$app->$db->createCommand('SELECT * FROM AR_PERIOD where PERIOD_NUM=:PERIOD_NUM')
  120. ->bindValue(':PERIOD_NUM', $periodNum)
  121. ->queryOne();
  122. if (empty($period)) {
  123. Period::updatePeriodIsProcessing($periodNum, Period::NOT_PROCESSING);
  124. return static::notice('计算系统中的第' . $periodNum . '期的业绩期信息不存在');
  125. } else {
  126. CalcRecord::record($periodNum, '已通知计算系统生成本期的期业绩');
  127. \Yii::$app->$db->createCommand()->update('AR_PERIOD', ['IS_PREPARE' => 1], 'PERIOD_NUM=' . $periodNum)->execute();
  128. return static::notice('期业绩已于计算系统中开始计算,请等待');
  129. }
  130. }
  131. /**
  132. * 拉取期业绩和月业绩到业务系统
  133. * @return mixed
  134. * @throws \yii\web\HttpException
  135. */
  136. public function actionPullPerfPeriod()
  137. {
  138. $periodNum = \Yii::$app->request->get('periodNum');
  139. if (!$periodNum) {
  140. return static::notice('期数不存在', 400);
  141. }
  142. if (Period::isProcessing($periodNum)) {
  143. return static::notice('有操作正在进行中请稍后', 400);
  144. }
  145. //设置手动计算标识
  146. Period::updatePeriodIsAutoExec($periodNum, Period::MANUAL_EXEC_CALC);
  147. $db = CalcConsole::CALC_DB_NAME;
  148. $period = \Yii::$app->$db->createCommand('SELECT * FROM AR_PERIOD where PERIOD_NUM=:PERIOD_NUM')
  149. ->bindValue(':PERIOD_NUM', $periodNum)
  150. ->queryOne();
  151. if (empty($period)) {
  152. return static::notice('计算系统中的第' . $periodNum . '期的业绩期信息不存在');
  153. }
  154. $formModel = new PeriodForm();
  155. $formModel->scenario = 'perf';
  156. if (2 == $period['IS_PREPARE'] && 1 == $period['IS_PERFED']) {
  157. //设置计算进行中标识
  158. Period::updatePeriodIsProcessing($periodNum, Period::IS_PROCESSING);
  159. if ($formModel->load(Yii::$app->request->get(), '') && $formModel->pullPeriod()) {
  160. return static::notice('开始拉取期业绩数据,请等待');
  161. } else {
  162. Period::updatePeriodIsProcessing($periodNum, Period::NOT_PROCESSING);
  163. return static::notice(Form::formatErrorsForApi($formModel->getErrors()), 400);
  164. }
  165. } else {
  166. Period::updatePeriodIsProcessing($periodNum, Period::NOT_PROCESSING);
  167. return static::notice('业绩单还未全部生成,无法拉取期业绩数据,请稍后重试', 400);
  168. }
  169. }
  170. /**
  171. * 通知业务系统计算奖金
  172. * @return mixed|void
  173. * @throws \yii\web\HttpException
  174. */
  175. public function actionCalcBonus()
  176. {
  177. $periodNum = \Yii::$app->request->get('periodNum');
  178. if (!$periodNum) {
  179. return static::notice('期数不存在', 400);
  180. }
  181. if (Period::isProcessing($periodNum)) {
  182. return static::notice('有操作正在进行中请稍后', 400);
  183. }
  184. //设置手动计算标识
  185. Period::updatePeriodIsAutoExec($periodNum, Period::MANUAL_EXEC_CALC);
  186. //设置计算进行中标识
  187. // Period::updatePeriodIsProcessing($periodNum, Period::IS_PROCESSING);
  188. $db = CalcConsole::CALC_DB_NAME;
  189. $period = \Yii::$app->$db->createCommand('SELECT * FROM AR_PERIOD where PERIOD_NUM=:PERIOD_NUM')
  190. ->bindValue(':PERIOD_NUM', $periodNum)
  191. ->queryOne();
  192. $formModel = new PeriodForm();
  193. $formModel->scenario = 'calc';
  194. if (empty($period)) {
  195. Period::updatePeriodIsProcessing($periodNum, Period::NOT_PROCESSING);
  196. return static::notice('计算系统中的第' . $periodNum . '期的业绩期信息不存在');
  197. } else if (1 == $period['IS_PERFED'] && 2 == $period['IS_PREPARE']) {
  198. Period::updateAll(['IS_CALCULATED' => 0], ['PERIOD_NUM' => $period['PERIOD_NUM']]);
  199. CalcRecord::record($periodNum, '奖金已于计算系统中开始计算,请等待');
  200. \Yii::$app->$db->createCommand()->update('AR_PERIOD', ['IS_PREPARE' => 3], 'PERIOD_NUM=' . $periodNum)->execute();
  201. Period::updatePeriodIsProcessing($periodNum, Period::NOT_PROCESSING);
  202. return static::notice('本期奖金已于计算系统中开始计算,请等待');
  203. } else {
  204. return static::notice(Form::formatErrorsForApi($formModel->getErrors()), 400);
  205. }
  206. }
  207. public function actionPullBonus()
  208. {
  209. $periodNum = \Yii::$app->request->get('periodNum');
  210. if (!$periodNum) {
  211. return static::notice('期数不存在', 400);
  212. }
  213. if (Period::isProcessing($periodNum)) {
  214. return static::notice('有操作正在进行中请稍后', 400);
  215. }
  216. //设置手动计算标识
  217. Period::updatePeriodIsAutoExec($periodNum, Period::MANUAL_EXEC_CALC);
  218. $db = CalcConsole::CALC_DB_NAME;
  219. $period = \Yii::$app->$db->createCommand('SELECT * FROM AR_PERIOD where PERIOD_NUM=:PERIOD_NUM')
  220. ->bindValue(':PERIOD_NUM', $periodNum)
  221. ->queryOne();
  222. if (empty($period)) {
  223. return static::notice('计算系统中的第' . $periodNum . '期的业绩期信息不存在');
  224. }
  225. $formModel = new PeriodForm();
  226. $formModel->scenario = 'calc';
  227. if (4 == $period['IS_PREPARE'] && 1 == $period['IS_CALCULATED']) {
  228. //设置计算进行中标识
  229. Period::updatePeriodIsProcessing($periodNum, Period::IS_PROCESSING);
  230. if ($formModel->load(Yii::$app->request->get(), '') && $formModel->pullBonus()) {
  231. return static::notice('开始拉取奖金数据,请等待');
  232. } else {
  233. Period::updatePeriodIsProcessing($periodNum, Period::NOT_PROCESSING);
  234. return static::notice(Form::formatErrorsForApi($formModel->getErrors()), 400);
  235. }
  236. } else {
  237. Period::updatePeriodIsProcessing($periodNum, Period::NOT_PROCESSING);
  238. return static::notice('奖金数据还未全部生成,无法全部拉取,请稍后重试', 400);
  239. }
  240. }
  241. public function actionRecordList()
  242. {
  243. $filter = $this->filterCondition([
  244. 'periodNum' => 'PERIOD_NUM',
  245. ]);
  246. $condition = $filter['condition'];
  247. $params = $filter['params'];
  248. $data = CalcRecord::lists($condition, $params, ['orderBy' => 'CREATED_AT DESC , ID DESC']);
  249. return static::notice($data);
  250. }
  251. }