BonusController.php 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594
  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 backendApi\modules\v1\models\lists\bonus\BalanceList;
  10. use backendApi\modules\v1\models\lists\bonus\CfLxAuditList;
  11. use backendApi\modules\v1\models\lists\bonus\FlowBalanceList;
  12. use backendApi\modules\v1\models\lists\bonus\FlowBonusList;
  13. use backendApi\modules\v1\models\lists\bonus\FlowCfList;
  14. use backendApi\modules\v1\models\lists\bonus\FlowExchangePointsList;
  15. use backendApi\modules\v1\models\lists\bonus\FlowLxList;
  16. use backendApi\modules\v1\models\lists\bonus\FlowReconsumePointsList;
  17. use backendApi\modules\v1\models\lists\bonus\OtherPeriodBonusList;
  18. use backendApi\modules\v1\models\lists\bonus\PerfMonthList;
  19. use backendApi\modules\v1\models\lists\bonus\PerfOrderList;
  20. use backendApi\modules\v1\models\lists\bonus\PerfPeriodList;
  21. use backendApi\modules\v1\models\lists\bonus\PerfStandardList;
  22. use backendApi\modules\v1\models\lists\bonus\PeriodBonusList;
  23. use backendApi\modules\v1\models\lists\bonus\ResendQyAuditList;
  24. use backendApi\modules\v1\models\lists\bonus\ResendQyList;
  25. use backendApi\modules\v1\models\lists\bonus\ScoreMonthList;
  26. use backendApi\modules\v1\models\lists\bonus\TraceBtList;
  27. use backendApi\modules\v1\models\lists\bonus\TraceDownBdList;
  28. use backendApi\modules\v1\models\lists\bonus\TraceDownFxList;
  29. use backendApi\modules\v1\models\lists\bonus\TraceDownGlList;
  30. use backendApi\modules\v1\models\lists\bonus\TraceDownGxList;
  31. use backendApi\modules\v1\models\lists\bonus\TraceDownQyList;
  32. use backendApi\modules\v1\models\lists\bonus\TraceDownTgList;
  33. use backendApi\modules\v1\models\lists\bonus\TraceDownXfList;
  34. use backendApi\modules\v1\models\lists\bonus\TraceDownYcList;
  35. use backendApi\modules\v1\models\lists\bonus\TraceDownYjList;
  36. use backendApi\modules\v1\models\lists\bonus\TraceFlList;
  37. use backendApi\modules\v1\models\lists\bonus\TraceFwList;
  38. use backendApi\modules\v1\models\lists\bonus\TraceUpBdList;
  39. use backendApi\modules\v1\models\lists\bonus\TraceUpFxList;
  40. use backendApi\modules\v1\models\lists\bonus\TraceUpGlList;
  41. use backendApi\modules\v1\models\lists\bonus\TraceUpGxList;
  42. use backendApi\modules\v1\models\lists\bonus\TraceUpQyList;
  43. use backendApi\modules\v1\models\lists\bonus\TraceUpTgList;
  44. use backendApi\modules\v1\models\lists\bonus\TraceUpXfList;
  45. use backendApi\modules\v1\models\lists\bonus\TraceUpYcList;
  46. use backendApi\modules\v1\models\lists\bonus\TraceUpYjList;
  47. use backendApi\modules\v1\models\lists\bonus\UserPerfList;
  48. use common\helpers\Cache;
  49. use common\helpers\Excel;
  50. use common\helpers\Form;
  51. use common\helpers\http\RemoteUploadApi;
  52. use common\helpers\Log;
  53. use common\libs\export\module\BonusExport;
  54. use common\models\forms\PeriodForm;
  55. use common\models\LogAsync;
  56. use common\models\Withdraw;
  57. use yii\db\Exception;
  58. class BonusController extends BaseController
  59. {
  60. // 计算服务部分--------start
  61. /**
  62. * 计算服务---累计用户业绩---根据业务系统的业绩单
  63. */
  64. public function actionCalcServePerf($taskKey){
  65. $params = Cache::getAsyncParams($taskKey);
  66. $formModel = new CalcServePeriodForm();
  67. $handleResult = false;
  68. $periodNum = isset($params['periodNum']) && !empty($params['periodNum']) ? $params['periodNum'] : null;
  69. if($formModel->load($params, '') && $formModel->perfAsync($params['handleUserId'],$periodNum)){
  70. $handleResult = true;
  71. \Yii::$app->swooleAsyncTimer->pushAsyncResultToAdmin($params['handleUserId'], "预计算月业绩第{$params['periodNum']}期生成业绩单更新成功");
  72. } else {
  73. \Yii::$app->swooleAsyncTimer->pushAsyncResultToAdmin($params['handleUserId'], "预计算月业绩第{$params['periodNum']}期生成业绩单更新失败,原因:".Form::formatErrorsForApi($formModel->getErrors()), false);
  74. }
  75. if(!$handleResult){
  76. echo "预计算月业绩,第{$params['periodNum']}期生成业绩单更新失败,原因:".Form::formatErrorsForApi($formModel->getErrors());
  77. }
  78. }
  79. /**
  80. * 计算服务---计算奖金
  81. */
  82. /**
  83. * 结算奖金
  84. * @param $taskKey
  85. * @throws Exception
  86. * @throws \yii\base\Exception
  87. */
  88. public function actionCalcServeCalcBonus($taskKey){
  89. $params = Cache::getAsyncParams($taskKey);
  90. $formModel = new CalcServePeriodForm();
  91. $handleResult = false;
  92. if($formModel->load($params, '') && $formModel->calcAsync($params['handleUserId'])){
  93. $handleResult = true;
  94. \Yii::$app->swooleAsyncTimer->pushAsyncResultToAdmin($params['handleUserId'], "第{$params['periodNum']}期奖金结算更新成功");
  95. } else {
  96. \Yii::$app->swooleAsyncTimer->pushAsyncResultToAdmin($params['handleUserId'], "第{$params['periodNum']}期奖金结算更新失败,原因:".Form::formatErrorsForApi($formModel->getErrors()), false);
  97. }
  98. if(!$handleResult){
  99. echo "第{$params['periodNum']}期奖金结算更新失败,原因:".Form::formatErrorsForApi($formModel->getErrors());
  100. }
  101. }
  102. // 计算服务部分---------end
  103. /**
  104. * 生成业绩单并计算业绩
  105. * @param $taskKey
  106. * @throws Exception
  107. * @throws \yii\base\Exception
  108. */
  109. public function actionPerf($taskKey){
  110. $params = Cache::getAsyncParams($taskKey);
  111. $formModel = new PeriodForm();
  112. $handleResult = false;
  113. if($formModel->load($params, '') && $formModel->perfAsync($params['handleUserId'])){
  114. $handleResult = true;
  115. \Yii::$app->swooleAsyncTimer->pushAsyncResultToAdmin($params['handleUserId'], "第{$params['periodNum']}期生成业绩单更新成功");
  116. } else {
  117. \Yii::$app->swooleAsyncTimer->pushAsyncResultToAdmin($params['handleUserId'], "第{$params['periodNum']}期生成业绩单更新失败,原因:".Form::formatErrorsForApi($formModel->getErrors()), false);
  118. }
  119. if(!$handleResult){
  120. echo "第{$params['periodNum']}期生成业绩单更新失败,原因:".Form::formatErrorsForApi($formModel->getErrors());
  121. // Log::async([
  122. // 'type' => LogAsync::TYPE_BONUS,
  123. // 'route' => \Yii::$app->controller->id.'/'.\Yii::$app->controller->action->id,
  124. // 'title' => "第{$params['periodNum']}期生成业绩单更新失败",
  125. // 'detail' => "第{$params['periodNum']}期生成业绩单更新失败,原因:".Form::formatErrorsForApi($formModel->getErrors()),
  126. // 'status' => 0,
  127. // ]);
  128. }
  129. }
  130. /**
  131. * 结算奖金
  132. * @param $taskKey
  133. * @throws Exception
  134. * @throws \yii\base\Exception
  135. */
  136. public function actionCalc($taskKey){
  137. $params = Cache::getAsyncParams($taskKey);
  138. $formModel = new PeriodForm();
  139. $handleResult = false;
  140. if($formModel->load($params, '') && $formModel->calcAsync($params['handleUserId'])){
  141. $handleResult = true;
  142. \Yii::$app->swooleAsyncTimer->pushAsyncResultToAdmin($params['handleUserId'], "第{$params['periodNum']}期奖金结算更新成功");
  143. } else {
  144. \Yii::$app->swooleAsyncTimer->pushAsyncResultToAdmin($params['handleUserId'], "第{$params['periodNum']}期奖金结算更新失败,原因:".Form::formatErrorsForApi($formModel->getErrors()), false);
  145. }
  146. if(!$handleResult){
  147. echo "第{$params['periodNum']}期奖金结算更新失败,原因:".Form::formatErrorsForApi($formModel->getErrors());
  148. // Log::async([
  149. // 'type' => LogAsync::TYPE_BONUS,
  150. // 'route' => \Yii::$app->controller->id.'/'.\Yii::$app->controller->action->id,
  151. // 'title' => "第{$params['periodNum']}期奖金结算更新失败",
  152. // 'detail' => "第{$params['periodNum']}期奖金结算更新失败,原因:".Form::formatErrorsForApi($formModel->getErrors()),
  153. // 'status' => 0,
  154. // ]);
  155. }
  156. }
  157. /**
  158. * 奖金挂网
  159. * @param $taskKey
  160. * @throws Exception
  161. * @throws \yii\base\Exception
  162. */
  163. public function actionSend($taskKey){
  164. $params = Cache::getAsyncParams($taskKey);
  165. $formModel = new PeriodForm();
  166. $handleResult = false;
  167. if($formModel->load($params, '') && $formModel->sendAsync($params['handleUserId'])){
  168. $handleResult = true;
  169. \Yii::$app->swooleAsyncTimer->pushAsyncResultToAdmin($params['handleUserId'], "第{$params['periodNum']}期挂网成功");
  170. } else {
  171. \Yii::$app->swooleAsyncTimer->pushAsyncResultToAdmin($params['handleUserId'], "第{$params['periodNum']}期挂网失败,原因:".Form::formatErrorsForApi($formModel->getErrors()), false);
  172. }
  173. if(!$handleResult){
  174. echo "第{$params['periodNum']}期挂网失败,原因:".Form::formatErrorsForApi($formModel->getErrors());
  175. // Log::async([
  176. // 'type' => LogAsync::TYPE_BONUS,
  177. // 'route' => \Yii::$app->controller->id.'/'.\Yii::$app->controller->action->id,
  178. // 'title' => "第{$params['periodNum']}期挂网失败",
  179. // 'detail' => "第{$params['periodNum']}期挂网失败,原因:".Form::formatErrorsForApi($formModel->getErrors()),
  180. // 'status' => 0,
  181. // ]);
  182. }
  183. }
  184. /**
  185. * 后台手动封期时调用的封期后操作
  186. * @param $taskKey
  187. * @throws Exception
  188. */
  189. public function actionAfterClose($taskKey){
  190. $params = Cache::getAsyncParams($taskKey);
  191. $formModel = new PeriodForm();
  192. $handleResult = false;
  193. if($formModel->afterCloseAsync($params['periodNum'], $params['closedAt'])){
  194. $handleResult = true;
  195. }
  196. if(!$handleResult){
  197. // Log::async([
  198. // 'type' => LogAsync::TYPE_BONUS,
  199. // 'route' => \Yii::$app->controller->id.'/'.\Yii::$app->controller->action->id,
  200. // 'title' => "于{$params['periodNum']}期自动提现上月奖金失败",
  201. // 'detail' => "于{$params['periodNum']}期自动提现上月奖金失败",
  202. // 'status' => 0,
  203. // ]);
  204. }
  205. }
  206. /**
  207. * 奖金余额导出
  208. * @param $taskId
  209. * @return bool
  210. */
  211. public function actionBalanceExport($taskId){
  212. return $this->_export($taskId, BalanceList::class, '会员奖金余额列表');
  213. }
  214. /**
  215. * 车房养老奖和领袖分红年度发放审核导出
  216. * @param $taskId
  217. * @return bool
  218. */
  219. public function actionCfLxAuditExport($taskId){
  220. return $this->_export($taskId, CfLxAuditList::class, '年度奖金发放审核列表');
  221. }
  222. /**
  223. * 最新奖金列表导出
  224. * @param $taskId
  225. * @return bool
  226. */
  227. public function actionNewPeriodBonusExport($taskId){
  228. return $this->_export($taskId, PeriodBonusList::class, '最新奖金列表');
  229. }
  230. /**
  231. * 往期奖金列表导出
  232. * @param $taskId
  233. * @return bool
  234. */
  235. public function actionOtherPeriodBonusExport($taskId){
  236. return $this->_export($taskId, PeriodBonusList::class, '往期奖金列表');
  237. }
  238. /**
  239. * 奖金流水列表导出
  240. * @param $taskId
  241. * @return bool
  242. */
  243. public function actionFlowBonusExport($taskId){
  244. return $this->_export($taskId, FlowBonusList::class, '奖金流水列表');
  245. }
  246. /**
  247. * 余额流水导出
  248. * @param $taskId
  249. * @return bool
  250. */
  251. public function actionFlowBalanceExport($taskId){
  252. return $this->_export($taskId, FlowBalanceList::class, '复消积分流水列表');
  253. }
  254. /**
  255. * 复消积分流水导出
  256. * @param $taskId
  257. * @return bool
  258. */
  259. public function actionFlowRpExport($taskId){
  260. return $this->_export($taskId, FlowReconsumePointsList::class, '复消积分流水列表');
  261. }
  262. /**
  263. * 兑换积分流水导出
  264. * @param $taskId
  265. * @return bool
  266. */
  267. public function actionFlowExchangeExport($taskId){
  268. return $this->_export($taskId, FlowExchangePointsList::class, '兑换积分流水列表');
  269. }
  270. /**
  271. * 车房养老奖流水导出
  272. * @param $taskId
  273. * @return bool
  274. */
  275. public function actionFlowCfExport($taskId){
  276. return $this->_export($taskId, FlowCfList::class, '车房养老奖流水列表');
  277. }
  278. /**
  279. * 领袖分红奖导出
  280. * @param $taskId
  281. * @return bool
  282. */
  283. public function actionFlowLxExport($taskId){
  284. return $this->_export($taskId, FlowLxList::class, '领袖分红奖流水列表');
  285. }
  286. /**
  287. * 区域津贴补发列表
  288. * @param $taskId
  289. * @return bool
  290. */
  291. public function actionResendQyListExport($taskId){
  292. return $this->_export($taskId, ResendQyList::class, '区域津贴补发列表');
  293. }
  294. /**
  295. * 补发区域津贴审核列表
  296. * @param $taskId
  297. * @return bool
  298. */
  299. public function actionResendQyAuditListExport($taskId){
  300. return $this->_export($taskId, ResendQyAuditList::class, '补发区域津贴审核列表');
  301. }
  302. /**
  303. * 团队奖向下追溯导出
  304. * @param $taskId
  305. * @return bool
  306. */
  307. public function actionTraceDownQyExport($taskId){
  308. return $this->_export($taskId, TraceDownQyList::class, '团队奖向下追溯导出列表');
  309. }
  310. /**
  311. * 团队奖向上追溯导出
  312. * @param $taskId
  313. * @return bool
  314. */
  315. public function actionTraceUpQyExport($taskId){
  316. return $this->_export($taskId, TraceUpQyList::class, '团队奖向上追溯导出列表');
  317. }
  318. /**
  319. * 荣衔奖向下追溯导出
  320. * @param $taskId
  321. * @return bool
  322. */
  323. public function actionTraceDownYcExport($taskId){
  324. return $this->_export($taskId, TraceDownYcList::class, '荣衔奖向下追溯导出列表');
  325. }
  326. /**
  327. * 荣衔奖向上追溯导出
  328. * @param $taskId
  329. * @return bool
  330. */
  331. public function actionTraceUpYcExport($taskId){
  332. return $this->_export($taskId, TraceUpYcList::class, '荣衔奖向上追溯导出列表');
  333. }
  334. /**
  335. * 服务奖向下追溯导出
  336. * @param $taskId
  337. * @return bool
  338. */
  339. public function actionTraceDownBdExport($taskId){
  340. return $this->_export($taskId, TraceDownYcList::class, '服务奖向下追溯导出列表');
  341. }
  342. /**
  343. * 服务奖向上追溯导出
  344. * @param $taskId
  345. * @return bool
  346. */
  347. public function actionTraceUpBdExport($taskId){
  348. return $this->_export($taskId, TraceUpYcList::class, '服务奖向上追溯导出列表');
  349. }
  350. /**
  351. * 推广奖向下追溯导出
  352. * @param $taskId
  353. * @return bool
  354. */
  355. public function actionTraceDownTgExport($taskId){
  356. return $this->_export($taskId, TraceDownTgList::class, '推广奖向下追溯导出列表');
  357. }
  358. /**
  359. * 推广奖向上追溯导出
  360. * @param $taskId
  361. * @return bool
  362. */
  363. public function actionTraceUpTgExport($taskId){
  364. return $this->_export($taskId, TraceUpTgList::class, '推广奖向上追溯导出列表');
  365. }
  366. /**
  367. * 消费奖向下追溯导出
  368. * @param $taskId
  369. * @return bool
  370. */
  371. public function actionTraceDownXfExport($taskId){
  372. return $this->_export($taskId, TraceDownXfList::class, '消费奖向下追溯导出列表');
  373. }
  374. /**
  375. * 消费奖向上追溯导出
  376. * @param $taskId
  377. * @return bool
  378. */
  379. public function actionTraceUpXfExport($taskId){
  380. return $this->_export($taskId, TraceUpXfList::class, '消费奖向上追溯导出列表');
  381. }
  382. /**
  383. * 业绩奖向下追溯导出
  384. * @param $taskId
  385. * @return bool
  386. */
  387. public function actionTraceDownYjExport($taskId){
  388. return $this->_export($taskId, TraceDownYjList::class, '业绩奖向下追溯导出列表');
  389. }
  390. /**
  391. * 业绩奖向上追溯导出
  392. * @param $taskId
  393. * @return bool
  394. */
  395. public function actionTraceUpYjExport($taskId){
  396. return $this->_export($taskId, TraceUpYjList::class, '业绩奖向上追溯导出列表');
  397. }
  398. /**
  399. * 管理奖向下追溯导出
  400. * @param $taskId
  401. * @return bool
  402. */
  403. public function actionTraceDownGlExport($taskId){
  404. return $this->_export($taskId, TraceDownGlList::class, '管理奖向下追溯导出列表');
  405. }
  406. /**
  407. * 管理奖向上追溯导出
  408. * @param $taskId
  409. * @return bool
  410. */
  411. public function actionTraceUpGlExport($taskId){
  412. return $this->_export($taskId, TraceUpGlList::class, '管理奖向上追溯导出列表');
  413. }
  414. /**
  415. * 共享奖向下追溯导出
  416. * @param $taskId
  417. * @return bool
  418. */
  419. public function actionTraceDownGxExport($taskId){
  420. return $this->_export($taskId, TraceDownGxList::class, '共享奖向下追溯导出列表');
  421. }
  422. /**
  423. * 共享奖向上追溯导出
  424. * @param $taskId
  425. * @return bool
  426. */
  427. public function actionTraceUpBdGxport($taskId){
  428. return $this->_export($taskId, TraceUpGxList::class, '共享奖向上追溯导出列表');
  429. }
  430. /**
  431. * 复销奖向下追溯导出
  432. * @param $taskId
  433. * @return bool
  434. */
  435. public function actionTraceDownFxExport($taskId){
  436. return $this->_export($taskId, TraceDownFxList::class, '复销奖向下追溯导出列表');
  437. }
  438. /**
  439. * 复销奖向上追溯导出
  440. * @param $taskId
  441. * @return bool
  442. */
  443. public function actionTraceUpFxExport($taskId){
  444. return $this->_export($taskId, TraceUpFxList::class, '复销奖向上追溯导出列表');
  445. }
  446. /**
  447. * 报单中心补贴追溯导出
  448. * @param $taskId
  449. * @return bool
  450. */
  451. public function actionTraceBtExport($taskId){
  452. return $this->_export($taskId, TraceBtList::class, '报单中心补贴追溯列表');
  453. }
  454. /**
  455. * 报单中心货补追溯导出
  456. * @param $taskId
  457. * @return bool
  458. */
  459. public function actionTraceFlExport($taskId){
  460. return $this->_export($taskId, TraceFlList::class, '报单中心货补追溯列表');
  461. }
  462. /**
  463. * 区域业绩提成追溯列表导出
  464. * @param $taskId
  465. * @return bool
  466. */
  467. public function actionTraceFwExport($taskId){
  468. return $this->_export($taskId, TraceFwList::class, '区域业绩提成追溯列表');
  469. }
  470. /**
  471. * 业绩单导出
  472. * @param $taskId
  473. * @return bool
  474. */
  475. public function actionPerfOrderExport($taskId){
  476. return $this->_export($taskId, PerfOrderList::class, '业绩单列表');
  477. }
  478. /**
  479. * 月积分导出
  480. * @param $taskId
  481. * @return bool
  482. */
  483. public function actionScoreMonthExport($taskId){
  484. return $this->_export($taskId, ScoreMonthList::class, '月积分列表');
  485. }
  486. /**
  487. * 月业绩导出
  488. * @param $taskId
  489. * @return bool
  490. */
  491. public function actionPerfMonthExport($taskId){
  492. return $this->_export($taskId, PerfMonthList::class, '月业绩列表');
  493. }
  494. /**
  495. * 达标业绩导出
  496. * @param $taskId
  497. * @return bool
  498. */
  499. public function actionPerfStandardExport($taskId){
  500. return $this->_export($taskId, PerfStandardList::class, '达标业绩列表');
  501. }
  502. /**
  503. * 月业绩导出
  504. * @param $taskId
  505. * @return bool
  506. */
  507. public function actionUserPerfExport($taskId){
  508. return $this->_export($taskId, UserPerfList::class, '用户业绩列表');
  509. }
  510. /**
  511. * 期业绩导出
  512. * @param $taskId
  513. * @return bool
  514. */
  515. public function actionPerfPeriodListExport($taskId){
  516. return $this->_export($taskId, PerfPeriodList::class, '期业绩列表');
  517. }
  518. /**
  519. * 导出方法
  520. * @param $taskId
  521. * @param $className
  522. * @param $listName
  523. * @return bool
  524. */
  525. private function _export($taskId, $className, $listName){
  526. $factory = BonusExport::factory($taskId);
  527. $factory->listModelClass = $className;
  528. try {
  529. if ($factory->generate()) {
  530. \Yii::$app->swooleAsyncTimer->pushAsyncResultToAdmin($factory->getUserId(), $listName.'导出成功');
  531. }
  532. unset($factory, $taskId, $className, $listName);
  533. return true;
  534. } catch (\Exception $e) {
  535. echo $listName.'导出失败。详情:' . $e->getMessage();
  536. \Yii::$app->swooleAsyncTimer->pushAsyncResultToAdmin($factory->getUserId(), $listName.'导出失败。详情:' . $e->getMessage(), false);
  537. }
  538. unset($factory, $taskId, $className, $listName);
  539. return false;
  540. }
  541. }