拓展小组服务团队工作-结算分润逻辑

This commit is contained in:
chenbo 2023-09-21 19:11:32 +08:00
parent f124075e34
commit 6258be966b
2 changed files with 144 additions and 15 deletions

View File

@ -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 = [

View File

@ -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')); // 今天的 0000: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)