setName('CampaignAward') ->addArgument('date', Argument::REQUIRED, "时间"); } protected function execute(Input $input, Output $output) { $date = $input->getArgument('date'); //cli模式下无法获取到当前的项目模块,手动指定一下 Request::instance()->module('admin'); if ( !$date ){ $date = date( 'Ymd', time()-3600*24*8 ); } $data = model('CampaignMatch')->where([ 'match_date' => $date, ])->select(); if ( !empty($data) ){ $activeId = $data[0]->campaign_id; $active = $this->getActivityById($activeId); //每个场次的基数 $baseNum =$active['elementary_num']*$active['elementary_need']+$active['intermediate_num']*$active['intermediate_need']+$active['advanced_num']*$active['advanced_need']; echo '基数'.$baseNum; //实际报名和成功的人数 $signNum = 0; $successNum = 0; foreach ($data as $k =>$v){ $signNum += $v['kandian']*$v['participator_num']; $successNum += $v['kandian']*$v['success_num']; } echo '实际打卡'.$signNum; echo '实际成功'.$successNum; //官方补贴+基数+实际报名人数 $signNum += $baseNum+$active['subsidy_need']; echo '报名:'.$signNum; //基数+实际成功的人数 $successNum += $baseNum; echo '成功:'.$successNum; //升值倍数 $awardPercent = !empty($successNum) ?round($signNum/$successNum,2) : 1; echo '系数'.$awardPercent; foreach ($data as $k=>$v) { $update[$k]['id'] = $v['id']; $update[$k]['award'] = intval($v['kandian']*$awardPercent); } model('CampaignMatch')->isUpdate()->saveAll($update); Redis::instance()->del(CampaignConstants::getLastAwardMatch()); Redis::instance()->del(CampaignConstants::getCampaignMatchRedisKey($date,$active['elementary_need'])); Redis::instance()->del(CampaignConstants::getCampaignMatchRedisKey($date,$active['intermediate_need'])); Redis::instance()->del(CampaignConstants::getCampaignMatchRedisKey($date,$active['advanced_need'])); echo '计算成功';exit; } echo '数据为空'; } protected function getActivityById($activeId){ $activiy = model('CampaignRead') ->where([ 'id'=>$activeId ]) ->find(); $activiy = is_array($activiy) ? $activiy : $activiy->toArray(); return $activiy; } }