add 镇农科负责人任务-任务6,7,8结算逻辑。 任务3,4部分结算逻辑。

This commit is contained in:
chenbo 2023-11-06 15:58:46 +08:00
parent a34a4e0bd4
commit edfc17b274
6 changed files with 309 additions and 12 deletions

View File

@ -120,6 +120,21 @@ class ApproveController extends BaseAdminController
$approve->amount = $params['amount'];
$approve->save();
}
if ($approve->type == Approve::APPROVE_TYPE_8) {
// 需要手动输入申请的政策补贴金额
$approve->amount = $params['amount'];
$approve->save();
}
if ($approve->type == Approve::APPROVE_TYPE_9) {
$taskSchedulePlan = TaskSchedulingPlan::where('la_task_scheduling_plan.id', $task['scheduling_plan_id'])
->where('is_pay',0)
->with(['template_info'])
->withJoin(['scheduling'], 'left')
->where('scheduling.company_type', 17)
->find()
->toArray();
TaskLogic::masterTask8Settlement($taskSchedulePlan);
}
}
// 拒绝

View File

@ -549,8 +549,8 @@ class TaskController extends BaseApiController
'other'=> [
'is_commit' => 1,
'note' => $parmas['note'],
'annex' => ['annex'],
'video_annex' => ['video_annex'],
'annex' => $parmas['annex'],
'video_annex' => $parmas['video_annex'],
]
];
Task::where(['id' => $parmas['id']])->update(['extend' => json_encode($extend), 'update_time'=>time(), 'director_uid'=>$this->userId]); // director_uid 指派人
@ -606,8 +606,8 @@ class TaskController extends BaseApiController
'other'=> [
'is_commit' => 1,
'note' => $parmas['note'],
'annex' => ['annex'],
'video_annex' => ['video_annex'],
'annex' => $parmas['annex'],
'video_annex' => $parmas['video_annex'],
]
];
Task::where(['id' => $parmas['id']])->update(['extend' => json_encode($extend), 'update_time'=>time(), 'director_uid'=>$this->userId]); // director_uid 指派人
@ -653,4 +653,62 @@ class TaskController extends BaseApiController
$task = Task::where(['id'=>$param['id']])->find();
$taskTemplate = TaskTemplate::where(['id'=>$task['template_id']])->find();
}
/**
* 提交 镇农科负责人-政策补贴申请
* 上传凭证,后台审批,填写实际完成金额
*/
publiC function commit_town_master_task_type_7()
{
try {
$parmas = $this->request->param(); // id annex video_annex
$task = TaskLogic::detail($parmas);
if (empty($task)) {
$this->fail('任务不存在');
}
if (empty($parmas['annex']) && empty($parmas['video_annex'])) {
$this->fail('没有上传凭证,无法提交审核');
}
$extend = [
'other'=> [
'is_commit' => 1,
'note' => $parmas['note'],
'annex' => $parmas['annex'],
'video_annex' => $parmas['video_annex'],
]
];
Task::where(['id' => $parmas['id']])->update(['extend' => json_encode($extend), 'update_time'=>time(), 'director_uid'=>$this->userId]); // director_uid 指派人
// 片区经理
$areaManagerId = User::where(['id' => $this->userId])->with('company')->value('area_manager');
// 没有则创建审批任务
$approveModel = Approve::where(['task_id' => $task['id']])->findOrEmpty();
if ($approveModel->isEmpty()) {
$approveModel->type = Approve::APPROVE_TYPE_6;
$approveModel->flow_id = 1;
$approveModel->name = $task['title'];
$approveModel->admin_id = 0; // 后台发起人id 暂时为0
$approveModel->user_id = $this->userId; // 前台发起人用户id
$approveModel->task_id = $task['id']; // 任务id
$approveModel->department_id = '0';
$approveModel->check_admin_ids = $areaManagerId; // 当前审批人ID 片区经理的admin_id
$approveModel->check_status = 1; // 状态 0待审核,1审核中,2审核通过,3审核不通过,4撤销审核
$approveModel->other_type = 6;
$approveModel->extend = json_encode($extend);
$approveModel->create_time = time();
$approveModel->update_time = time();
$re = $approveModel->save();
} else {
// 有则更新状态
$approveModel->check_status = 1; // 状态 0待审核,1审核中,2审核通过,3审核不通过,4撤销审核
$approveModel->save();
}
return $this->success('ok', []);
} catch (Exception $e) {
return $this->fail($e->getMessage());
}
}
}

View File

@ -199,4 +199,20 @@ class ShopRequestLogic extends BaseLogic
return false;
}
}
/**
* 查询镇农科公司负责片区内的种养殖商户和供应链商户交易额
*/
public static function getTownTradeAmount($param)
{
try {
$requestResponse = HttpClient::create()->request('GET', env('url.shop_prefix'). '', [
'query' => $param
]);
return json_decode($requestResponse->getContent(), true);
} catch (Exception $e) {
self::setError($e->getMessage());
return false;
}
}
}

View File

@ -157,18 +157,19 @@ class TownShareProfit
$remark = '来自任务【' . $taskSchedulePlan['template_info']['title'] . '】,';
//负责人收益 todo
//负责人收益
if ($taskSchedulePlan['template_info']['extend']['task_role'] == 1) {
$serviceManagerUser = (new User())->searchMaster($company['id']);
Log::info([$taskSchedulePlan['template_info']['title'].'结算-市场部长用户信息', $serviceManagerUser]);
}
//市场部长收益
if ($taskSchedulePlan['template_info']['extend']['task_role'] == 2) {
$serviceManagerUser = User::where(['company_id' => $company['id'], 'group_id' => 16])->find();
$serviceManagerUser = (new User())->searchMarketingManager($company['id']);;
Log::info([$taskSchedulePlan['template_info']['title'].'结算-市场部长用户信息', $serviceManagerUser]);
}
//服务部长收益 任务金额的50%为服务部长的收益
if ($taskSchedulePlan['template_info']['extend']['task_role'] == 3) {
$serviceManagerUser = User::where(['company_id' => $company['id'], 'group_id' => 14])->find();
$serviceManagerUser = (new User())->searchServiceManager($company['id']);;
Log::info([$taskSchedulePlan['template_info']['title'].'结算-服务部长用户信息', $serviceManagerUser]);
}
@ -429,6 +430,26 @@ class TownShareProfit
}
}
public function dealTaskSettlementMaster4(Task $taskInfo, Company $townCompany, $taskSchedulePlan, $leftTransactionPool)
{
try {
Db::startTrans();
$this->shareProfit($taskInfo, $townCompany, $taskSchedulePlan);
// 更改结算状态
(new TaskSchedulingPlan())->settlement($taskSchedulePlan['id']);
// 更改任务状态
Task::where(['id' => $taskSchedulePlan['task_id']])->update(['status' => 3,'money' => $taskInfo['money']]);
// 更新镇交易池
(new TaskTemplate())->updateTransactionPool($taskSchedulePlan['template_info']['id'], $leftTransactionPool);
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
Log::error($taskSchedulePlan['template_info']['title'].'-任务结算失败:' . $e->getMessage());
return false;
}
}
public function dealTaskSettlementMaster5(Task $taskInfo, Company $townCompany, $taskSchedulePlan)
{
try {
@ -446,4 +467,58 @@ class TownShareProfit
return false;
}
}
public function dealTaskSettlementMaster6(Task $taskInfo, Company $townCompany, $taskSchedulePlan)
{
try {
Db::startTrans();
$this->shareProfit($taskInfo, $townCompany, $taskSchedulePlan);
// 更改结算状态
(new TaskSchedulingPlan())->settlement($taskSchedulePlan['id']);
// 更改任务状态
Task::where(['id' => $taskSchedulePlan['task_id']])->update(['status' => 3,'money' => $taskInfo['money']]);
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
Log::error($taskSchedulePlan['template_info']['title'].'-任务结算失败:' . $e->getMessage());
return false;
}
}
public function dealTaskSettlementMaster7(Task $taskInfo, Company $townCompany, $taskSchedulePlan)
{
try {
Db::startTrans();
$this->shareProfit($taskInfo, $townCompany, $taskSchedulePlan);
// 更改结算状态
(new TaskSchedulingPlan())->settlement($taskSchedulePlan['id']);
// 更改任务状态
Task::where(['id' => $taskSchedulePlan['task_id']])->update(['status' => 3,'money' => $taskInfo['money']]);
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
Log::error($taskSchedulePlan['template_info']['title'].'-任务结算失败:' . $e->getMessage());
return false;
}
}
public function dealTaskSettlementMaster8(Task $taskInfo, Company $townCompany, $taskSchedulePlan)
{
try {
Db::startTrans();
$this->shareProfit($taskInfo, $townCompany, $taskSchedulePlan);
// 更改结算状态
(new TaskSchedulingPlan())->settlement($taskSchedulePlan['id']);
// 更改任务状态
Task::where(['id' => $taskSchedulePlan['task_id']])->update(['status' => 3,'money' => $taskInfo['money']]);
Db::commit();
return true;
} catch (\Exception $e) {
Db::rollback();
Log::error($taskSchedulePlan['template_info']['title'].'-任务结算失败:' . $e->getMessage());
return false;
}
}
}

View File

@ -735,6 +735,11 @@ class TaskLogic extends BaseLogic
break;
// 日常管理及其他临时任务
case 'town_task_type_master_8':
// 如果当天做了临时任务的情况下,需要通过审批才结算
$task = Task::where('id', $taskSchedulePlan['task_id'])->find();
if(isset($task['extend']['is_commit']) && $task['extend']['is_commit'] == 1) {
return true;
}
self::masterTask8Settlement($taskSchedulePlan);
break;
default:
@ -801,6 +806,7 @@ class TaskLogic extends BaseLogic
}
// todo
private static function masterTask3Settlement($taskSchedulePlan)
{
Log::info(['镇农科公司定时任务结算执行-'.$taskSchedulePlan['template_info']['title']]);
@ -820,9 +826,44 @@ class TaskLogic extends BaseLogic
}
}
/**
* @param $taskSchedulePlan
* 督促种养殖商户和供应链商户交易
*/
private static function masterTask4Settlement($taskSchedulePlan)
{
Log::info(['镇农科公司定时任务结算执行-'.$taskSchedulePlan['template_info']['title']]);
$taskTemplateInfo = $taskSchedulePlan['template_info'];
$taskInfo = Task::where(['id' => $taskSchedulePlan['task_id']])->find();
$townCompany = Company::where(['id' => $taskTemplateInfo['company_id']])->find();
// 任务交易池,用于叠加交易额
$townTransactionPool = $taskTemplateInfo['transaction_pool'];
// 行政村数量
$villageCount = Db::name('geo_village')->where(['street_code' => $townCompany['street']])->count();
// 每日目标金额
$targetAmount = bcmul($villageCount, 329 , 2);
// 查询镇农科辖区 当日的 种养殖商户和供应链商户交易额
$param = [
'start_time' => strtotime(date('Y-m-d', time())),
'end_time' => strtotime(date('Y-m-d', time())) + 86399,
'responsible_area' => $townCompany['responsible_area'],
'type' => 'street',
];
$result = ShopRequestLogic::getTownTradeAmount($param); // todo 对接接口
$tradeAmount = $result['data']['trade_amount'];
// 总交易额 交易池金额+商城交易额
$totalAmount = bcadd($townTransactionPool, $tradeAmount, 2);
// 完成条件: 总交易额 >= 每日目标金额
if (bccomp($totalAmount, $targetAmount, 2) == 0 || bccomp($totalAmount, $targetAmount, 2) == 1) {
$leftTransactionPool = bcsub($totalAmount, $targetAmount, 2);
// 任务结算
(new TownShareProfit())->dealTaskSettlementMaster4($taskInfo, $townCompany, $taskSchedulePlan, $leftTransactionPool);
} else {
(new Task())->closeTask($taskSchedulePlan['task_id']);
}
}
private static function masterTask5Settlement($taskSchedulePlan)
@ -835,7 +876,7 @@ class TaskLogic extends BaseLogic
// 行政村数量
$villageCount = Db::name('geo_village')->where(['street_code' => $townCompany['street']])->count();
// 村公司
$villageCompanyList = Db::query("select id from la_company where company_type=:company_type and FIND_IN_SET(:street,responsible_area)", ['company_type' => 18,'street'=>$townCompany['street']], true);
$villageCompanyList = Db::query("select id from la_company where company_type=:company_type and FIND_IN_SET(:street,responsible_area)", ['company_type' => 17,'street'=>$townCompany['street']], true);
$ids = array_column($villageCompanyList, 'id');
// 村联络员数量
$liaisonManCount = User::where(['group_id'=>17])->whereIn('company_id', $ids)->count();
@ -872,19 +913,105 @@ class TaskLogic extends BaseLogic
}
}
/**
* @param $taskSchedulePlan
* 促成村联络员入股甲方 单次
* 任务累计天数 小于 第一阶段 刷新任务时间
* 任务累计天数 = 第一阶段 结算
*/
private static function masterTask6Settlement($taskSchedulePlan)
{
Log::info(['镇农科公司定时任务结算执行-'.$taskSchedulePlan['template_info']['title']]);
$taskTemplateInfo = $taskSchedulePlan['template_info'];
$dayCount = $taskTemplateInfo['day_count'];
$taskInfo = Task::where(['id' => $taskSchedulePlan['task_id']])->find();
$townCompany = Company::where(['id' => $taskTemplateInfo['company_id']])->find();
// 行政村数量
$villageCount = Db::name('geo_village')->where(['street_code' => $townCompany['street']])->count();
// 小组服务公司总数
$groupServiceCompanyList = Company::where(['company_type'=> 18])->whereIn('street', $townCompany['responsible_area'])->select()->toArray();
$groupServiceCompanyCount = count($groupServiceCompanyList);
// 任务累计天数 小于 第一阶段 刷新任务时间
if ($dayCount < $taskTemplateInfo['stage_day_one']) {
self::flushTaskTime($taskSchedulePlan);
}
// 任务累计天数 = 第一阶段 结算
if ($dayCount == $taskTemplateInfo['stage_day_one']) {
// 目标任务金额 行政村数量*6000 + 小组服务团队数量*3000
$targetShareholderedMoney = bcadd(bcmul($villageCount, 6000, 2), bcmul($groupServiceCompanyCount, 3000, 2), 2);
$companyIds = [];
foreach ($groupServiceCompanyList as $groupServiceCompany) {
$companyIds[] = $groupServiceCompany['id'];
}
// 村公司
$villageCompanyList = Db::query("select id from la_company where company_type=:company_type and FIND_IN_SET(:street,responsible_area)", ['company_type' => 17,'street'=>$townCompany['street']], true);
foreach ($villageCompanyList as $villageCompany) {
$companyIds[] = $villageCompany['id'];
}
// 已入股股金总额
$shareholderedMoney = CompanyAccountLog::where(['change_object'=>CompanyAccountLog::SHAREHOLDER, 'change_type'=>CompanyAccountLog::TASK_INC_SHAREHOLDER_MONEY])
->whereIn('company_id', $companyIds)
->sum('change_amount');
$rate = bcdiv($shareholderedMoney, $targetShareholderedMoney, 2);
if (bccomp($rate, 0.5, 2) == -1) {
(new Task())->closeTask($taskSchedulePlan['task_id']);
return true;
}
$totalMoney = bcmul($taskTemplateInfo['money'], $taskTemplateInfo['stage_day_one'], 2);
$taskInfo['money'] = self::countSettelmentMoney($rate, $totalMoney);
(new TownShareProfit())->dealTaskSettlementMaster6($taskInfo, $townCompany, $taskSchedulePlan);
}
}
/**
* @param $taskSchedulePlan
* 政策补贴申请 单次
*/
private static function masterTask7Settlement($taskSchedulePlan)
{
Log::info(['镇农科公司定时任务结算执行-'.$taskSchedulePlan['template_info']['title']]);
$taskTemplateInfo = $taskSchedulePlan['template_info'];
$dayCount = $taskTemplateInfo['day_count'];
$taskInfo = Task::where(['id' => $taskSchedulePlan['task_id']])->find();
$townCompany = Company::where(['id' => $taskTemplateInfo['company_id']])->find();
if($dayCount < $taskTemplateInfo['stage_day_one']) {
self::flushTaskTime($taskSchedulePlan);
}
if ($dayCount == $taskTemplateInfo['stage_day_one']) {
// 审批通过后,任务状态会变更为已完成状态,审批是会根据凭证填入实际申请的政策补贴金额,根据该金额计算任务结算金额
if ($taskInfo['status'] == 3) {
$approve = Approve::where(['task_id' => $taskSchedulePlan['task_id']])->find();
if ($approve->check_status == 2) {
$amount = $approve['amount']; // 审批通过后的金额
$rate = bcdiv($amount, $taskTemplateInfo['extend']['target'], 2);
if (bccomp($rate, 0.5, 2) == -1) {
(new Task())->closeTask($taskSchedulePlan['task_id']);
}
$totalMoney = bcmul($taskTemplateInfo['money'], $taskTemplateInfo['stage_day_one'], 2);
$taskInfo['money'] = self::countTaskMarketingDirector4TaskMoney($totalMoney, $rate);
(new TownShareProfit())->dealTaskSettlementMaster7($taskInfo, $townCompany, $taskSchedulePlan);
}
} else {
// 关闭任务
(new Task())->closeTask($taskSchedulePlan['task_id']);
}
}
}
private static function masterTask8Settlement($taskSchedulePlan)
public static function masterTask8Settlement($taskSchedulePlan)
{
$taskTemplateInfo = $taskSchedulePlan['template_info'];
$villageCompany = Company::where(['id' => $taskTemplateInfo['company_id']])->find();
$task = Task::where('id', $taskSchedulePlan['task_id'])->find();
$task['money'] = $taskTemplateInfo['money_three'];
(new TownShareProfit())->dealTaskSettlementMaster8($task, $villageCompany, $taskSchedulePlan);
}
/**
@ -2365,7 +2492,10 @@ class TaskLogic extends BaseLogic
$groupServiceCompanyCount = Company::where(['street' => $townCompany['street'], 'company_type'=> 18])->count();
// 小组服务完成股金上交数
$sharecapitalPaidCount= Db::name('company_sharecapital_change_log')->where(['parent_company_id'=>$villageCompanyList['id']])->count();
$sharecapitalPaidCount = 0;
foreach ($villageCompanyList as $villageCompany) {
$sharecapitalPaidCount += Db::name('company_sharecapital_change_log')->where(['parent_company_id'=>$villageCompany['id']])->count();
}
$rate = bcdiv($sharecapitalPaidCount, $groupServiceCompanyCount, 2);

View File

@ -21,6 +21,9 @@ class Approve extends BaseModel
const APPROVE_TYPE_7 = 7; // 镇农科负责人任务-应用软件推广
const APPROVE_TYPE_8 = 8; // 镇农科负责人任务-政策补贴申请
const APPROVE_TYPE_9 = 9; // 镇农科负责人任务-日常管理及其他临时任务
public function task()
{
return $this->hasOne(Task::class, 'id', 'task_id');