CampaignAward.php 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <?php
  2. namespace app\admin\command;
  3. use app\common\library\Redis;
  4. use app\common\service\CampaignService;
  5. use app\main\constants\CampaignConstants;
  6. use ReflectionClass;
  7. use ReflectionMethod;
  8. use think\Cache;
  9. use think\Config;
  10. use think\console\Command;
  11. use think\console\Input;
  12. use think\console\input\Argument;
  13. use think\console\input\Option;
  14. use think\console\Output;
  15. use think\Exception;
  16. use think\Request;
  17. class CampaignAward extends Command
  18. {
  19. /**
  20. * 配置指令
  21. */
  22. protected function configure()
  23. {
  24. $this->setName('CampaignAward')
  25. ->addArgument('date', Argument::REQUIRED, "时间");
  26. }
  27. protected function execute(Input $input, Output $output)
  28. {
  29. $date = $input->getArgument('date');
  30. //cli模式下无法获取到当前的项目模块,手动指定一下
  31. Request::instance()->module('admin');
  32. if ( !$date ){
  33. $date = date( 'Ymd', time()-3600*24*8 );
  34. }
  35. $data = model('CampaignMatch')->where([
  36. 'match_date' => $date,
  37. ])->select();
  38. if ( !empty($data) ){
  39. $activeId = $data[0]->campaign_id;
  40. $active = $this->getActivityById($activeId);
  41. //每个场次的基数
  42. $baseNum =$active['elementary_num']*$active['elementary_need']+$active['intermediate_num']*$active['intermediate_need']+$active['advanced_num']*$active['advanced_need'];
  43. echo '基数'.$baseNum;
  44. //实际报名和成功的人数
  45. $signNum = 0;
  46. $successNum = 0;
  47. foreach ($data as $k =>$v){
  48. $signNum += $v['kandian']*$v['participator_num'];
  49. $successNum += $v['kandian']*$v['success_num'];
  50. }
  51. echo '实际打卡'.$signNum;
  52. echo '实际成功'.$successNum;
  53. //官方补贴+基数+实际报名人数
  54. $signNum += $baseNum+$active['subsidy_need'];
  55. echo '报名:'.$signNum;
  56. //基数+实际成功的人数
  57. $successNum += $baseNum;
  58. echo '成功:'.$successNum;
  59. //升值倍数
  60. $awardPercent = !empty($successNum) ?round($signNum/$successNum,2) : 1;
  61. echo '系数'.$awardPercent;
  62. foreach ($data as $k=>$v) {
  63. $update[$k]['id'] = $v['id'];
  64. $update[$k]['award'] = intval($v['kandian']*$awardPercent);
  65. }
  66. model('CampaignMatch')->isUpdate()->saveAll($update);
  67. Redis::instance()->del(CampaignConstants::getLastAwardMatch());
  68. Redis::instance()->del(CampaignConstants::getCampaignMatchRedisKey($date,$active['elementary_need']));
  69. Redis::instance()->del(CampaignConstants::getCampaignMatchRedisKey($date,$active['intermediate_need']));
  70. Redis::instance()->del(CampaignConstants::getCampaignMatchRedisKey($date,$active['advanced_need']));
  71. echo '计算成功';exit;
  72. }
  73. echo '数据为空';
  74. }
  75. protected function getActivityById($activeId){
  76. $activiy = model('CampaignRead')
  77. ->where([
  78. 'id'=>$activeId
  79. ])
  80. ->find();
  81. $activiy = is_array($activiy) ? $activiy : $activiy->toArray();
  82. return $activiy;
  83. }
  84. }