From 6258be966be252c68bc55c6fc11c99fb9ea9f21b Mon Sep 17 00:00:00 2001 From: chenbo <709206448@qq.com> Date: Thu, 21 Sep 2023 19:11:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8B=93=E5=B1=95=E5=B0=8F=E7=BB=84=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E5=9B=A2=E9=98=9F=E5=B7=A5=E4=BD=9C-=E7=BB=93?= =?UTF-8?q?=E7=AE=97=E5=88=86=E6=B6=A6=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/common/logic/finance/TownShareProfit.php | 44 +++++++ app/common/logic/task/TaskLogic.php | 115 ++++++++++++++++--- 2 files changed, 144 insertions(+), 15 deletions(-) diff --git a/app/common/logic/finance/TownShareProfit.php b/app/common/logic/finance/TownShareProfit.php index 98cef9598..9ed1c6b8f 100644 --- a/app/common/logic/finance/TownShareProfit.php +++ b/app/common/logic/finance/TownShareProfit.php @@ -56,6 +56,50 @@ class TownShareProfit } } + public function townTaskType2($taskInfo, $company, $taskSchedulePlan, $step, $contractCount) + { + try { + Db::startTrans(); + + $proportion = 0; + //总金额除以2等于不可提现账号金额和收益 + $masterMoney = bcdiv($taskInfo['money'], 2, 2); + + $remark = '来自任务【' . $taskSchedulePlan['template_info']['title'] . '】,'; + //服务部长收益 任务金额的50%为服务部长的收益 + $serviceManagerUser = User::where(['company_id' => $company['id'], 'group_id' => 14])->find(); + Log::info([$taskSchedulePlan['template_info']['title'].'结算-服务部长用户信息', $serviceManagerUser]); + // 用户收益变动 + $arr = [$serviceManagerUser['id'], AccountLogEnum::UM_INC_TASK, AccountLogEnum::INC, $masterMoney, $taskSchedulePlan['sn'], $remark.'任务结算获得收益' . $masterMoney . '元', ['company_id' => $company['id'], 'proportion' => $proportion], 1]; + $this->master($arr); + // 用户余额变动 + $arr_two = [$serviceManagerUser['id'], AccountLogEnum::UM_INC_TASKUSER, AccountLogEnum::INC, $masterMoney, $taskSchedulePlan['sn'], $remark . '获得账户余额' . $masterMoney . '元', ['company_id' => $company['id'], 'proportion' => $proportion], 1]; + $this->Account($arr_two); + + // 公司 + $deposit_count = bcadd($company['deposit'], $masterMoney, 2); + // 公司收益变动记录 + $this->AccountLog($company['id'], $deposit_count, $masterMoney, 1, CompanyAccountLog::TASK_INC_DEPOSIT); + $company_money_count = bcadd($company['company_money'], $masterMoney, 2); + //公司余额变动记录 + $this->AccountLog($company['id'], $company_money_count, $masterMoney, 1, CompanyAccountLog::TASK_INC_COMPANY_MONEY); + // 变更公司收益和余额 + Company::where('id', $company['id'])->update(['deposit' => Db::raw('deposit+' . $masterMoney), 'company_money' => Db::raw('company_money+' . $masterMoney)]); + + if ($step == 2 && $contractCount >= 15) { + // 更改任务状态 + Task::where(['id' => $taskSchedulePlan['task_id']])->update(['status' => 3]); + } + + Db::commit(); + return true; + } catch (\Exception $e) { + Db::rollback(); + Log::error('54-任务结算失败:' . $e->getMessage()); + return false; + } + } + public function AccountLog($companyId, $left_amount, $changeAmount, $change_object = 1, $change_type = 1, $action = 1) { $company_log = [ diff --git a/app/common/logic/task/TaskLogic.php b/app/common/logic/task/TaskLogic.php index e6ceca0a9..cebb44b3c 100644 --- a/app/common/logic/task/TaskLogic.php +++ b/app/common/logic/task/TaskLogic.php @@ -16,6 +16,7 @@ namespace app\common\logic\task; use app\common\logic\finance\TownShareProfit; +use app\common\model\contract\Contract; use app\common\model\dict\DictData; use app\common\model\task\Task; use app\common\logic\BaseLogic; @@ -293,10 +294,12 @@ class TaskLogic extends BaseLogic { try { Log::info(['镇管理公司定时任务下发-任务模板', $taskTemplate]); - // 单次任务 + // 单次任务不重复下发,在结算时刷新任务时间 if ($taskTemplate['types'] == 3) { $task = Task::where('template_id', $taskTemplate['id'])->find(); if ($task) { + // 累计任务进行天数,单次任务结算时,用于判断任务是否超时 + TaskTemplate::where('id', $taskTemplate['id'])->inc('day_count')->update(); return true; } } @@ -402,7 +405,7 @@ class TaskLogic extends BaseLogic self::dealTownTask1($taskSchedulePlan); break; case 'town_task_type_2': - // 协助总负责人开展工作任务 单次任务 周期内未完成要刷新任务的时间 + // 拓展小组服务团队工作任务 self::dealTownTask2($taskSchedulePlan); break; case 'town_task_type_3': @@ -472,28 +475,110 @@ class TaskLogic extends BaseLogic } } + /** + * 拓展小组服务团队工作任务 单次任务 + * 当前任务进行天数 < 第一阶段天数 只刷新任务时间 + * 当前任务进行天数 = 第一阶段天数 做第一阶段结算 如果第一阶段已完成全部任务,也要刷新任务时间,等到第二阶段结算时才结束任务 + * 当前任务进行天数 > 第一阶段天数 但未到第二阶段结算时间 继续刷新任务时间 + * 当前任务进行天数 = (第一阶段+第二阶段)天数 未完成则关闭任务 完成则结算第二阶段金额 + */ private static function dealTownTask2($taskSchedulePlan) { $taskTemplateInfo = $taskSchedulePlan['template_info']; - $taskScheduleInfo = $taskSchedulePlan['scheduling']; + $townCompany = Company::where(['id' => $taskTemplateInfo['company_id']])->find(); $day = $taskTemplateInfo['stage_day_one'] + $taskTemplateInfo['stage_day_two']; - if($taskTemplateInfo['day_count']>$day){ - Task::where('id', $taskSchedulePlan['task_id'])->update(['status' =>5]); - Log::info($taskTemplateInfo['title'] . '结算失败,任务为超时:' . json_encode($taskSchedulePlan)); - return false; + $task = Task::where('id', $taskSchedulePlan['task_id'])->with('director_info')->find(); + + // 当前任务进行天数 < 第一阶段天数 只刷新任务时间 + if($taskTemplateInfo['day_count'] < $taskTemplateInfo['stage_day_one']) { + self::flushTaskTime($taskSchedulePlan); + return true; } - $task = Task::where('id', $taskSchedulePlan['task_id'])->field('director_uid,status,money,start_time,end_time')->with('director_info')->find(); - if($taskTemplateInfo['day_count'] <= $day){ - TaskSchedulingPlan::where('id', $taskSchedulePlan['id'])->update(['is_pay' => 0]); - try{ - Task::where('id', $taskSchedulePlan['task_id'])->update(['create_time' => $task['start_time']+86400,'update_time' =>time(),'start_time'=>$task['start_time']+86400,'end_time'=>$task['start_time']+86400+86399]); - }catch(\Exception $e){ - $start_time = strtotime(date('Y-m-d')); - Task::where('id', $taskSchedulePlan['task_id'])->update(['create_time' => $start_time+86400,'update_time' =>time(),'start_time'=>$start_time+86400,'end_time'=> $start_time + 86400+86399]); + // 当前任务进行天数 = 第一阶段天数 做第一阶段结算 如果第一阶段已完成全部任务,也要刷新任务时间,等到第二阶段结算时才结束任务 + if($taskTemplateInfo['day_count'] == $taskTemplateInfo['stage_day_one']) { + // 已签约的小组服务合同个数 + $contractCount = Contract::where(['party_a' => $townCompany['id'], 'status' => 1, 'contract_type' => 25])->count(); + if ($contractCount < 9) { + self::flushTaskTime($taskSchedulePlan); + return false; } + $totolMoney = bcmul($taskTemplateInfo['stage_day_one'], $taskTemplateInfo['money_one'], 2); + $taskMoney = 0; + switch ($contractCount) { + case 9: + $taskMoney = bcmul($totolMoney, 0.4, 2); + break; + case 10: + $taskMoney = bcmul($totolMoney, 0.4, 2); + break; + case 11: + $taskMoney = bcmul($totolMoney, 0.5, 2); + break; + case 12: + $taskMoney = bcmul($totolMoney, 0.6, 2); + break; + case 13: + $taskMoney = bcmul($totolMoney, 0.6, 2); + break; + case 14: + $taskMoney = bcmul($totolMoney, 0.7, 2); + break; + case 15: + $taskMoney = bcmul($totolMoney, 1, 2); + break; + } + if ($contractCount > 15) { + $taskMoney = bcmul($totolMoney, 1, 2); + } + $task['money'] = $taskMoney; // 任务金额 + (new TownShareProfit())->townTaskType2($task, $townCompany, $taskSchedulePlan, 1, $contractCount); } + // 当前任务进行天数 > 第一阶段天数 但未到第二阶段结算 继续刷新任务时间 + if($taskTemplateInfo['day_count'] > $taskTemplateInfo['stage_day_one'] && $taskTemplateInfo['day_count'] < $day){ + self::flushTaskTime($taskSchedulePlan); + } + + // 当前任务进行天数 = 第一+第二阶段天数 第二阶段结算 + if ($taskTemplateInfo['day_count'] == $day) { + // 已签约的小组服务合同个数 + $contractCount = Contract::where(['party_a' => $townCompany['id'], 'status' => 1, 'contract_type' => 25])->count(); + // 第二阶段未完成 + if ($contractCount < 15) { + // 关闭任务,并且没有奖励 + Task::where('id', $taskSchedulePlan['task_id'])->update(['status' => 5]); + return false; + } + + $taskMoney = bcmul($taskTemplateInfo['stage_day_two'], $taskTemplateInfo['money_two'], 2); + $task['money'] = $taskMoney; // 任务金额 + + (new TownShareProfit())->townTaskType2($task, $townCompany, $taskSchedulePlan, 2, $contractCount); + } + + + } + + private static function flushTaskTime($taskSchedulePlan) + { + $time = strtotime(date('Y-m-d')); // 今天的 00:00:00 + + TaskSchedulingPlan::where(['id' => $taskSchedulePlan['id']])->update( + [ + 'create_time' => $time+86400, //第二天的00:00:00 + 'update_time' =>time(), + 'start_time'=>$time+86400, //第二天的00:00:00 + 'end_time'=>$time+86400+86399 //第二天的 23:59:59 + ]); + + Task::where('id', $taskSchedulePlan['task_id'])->update( + [ + 'create_time' => $time+86400, + 'update_time' => time(), + 'start_time'=> $time+86400, + 'end_time'=> $time+86400+86399 + ]); } private static function dealTownTask3($taskSchedulePlan)