diff --git a/app/adminapi/controller/TaskController.php b/app/adminapi/controller/TaskController.php index a97a0656c..a4fc8b022 100644 --- a/app/adminapi/controller/TaskController.php +++ b/app/adminapi/controller/TaskController.php @@ -2,6 +2,8 @@ namespace app\adminapi\controller; +use app\common\logic\CompanyLogic; +use app\common\logic\task\TaskLogic; use think\facade\Db; use app\common\model\user\Task; @@ -211,5 +213,22 @@ class TaskController extends BaseAdminController } } + // 手动结算 + public function manualSettlement() + { + $taskId = $this->request->param('task_id'); + $result = TaskLogic::manualSettlement($taskId); + if (true === $result) { + return $this->success('手动结算完成', [], 1, 1); + } + return $this->fail(TaskLogic::getError()); + } + // 任务进度和详情 + public function taskProgress() + { + $taskId = $this->request->param('task_id'); + $detail = TaskLogic::taskProgress($taskId); + return $this->success('', compact('detail')); + } } \ No newline at end of file diff --git a/app/api/controller/CeshiController.php b/app/api/controller/CeshiController.php index 6bcb6430f..8070b07f2 100644 --- a/app/api/controller/CeshiController.php +++ b/app/api/controller/CeshiController.php @@ -704,19 +704,16 @@ class CeshiController extends BaseApiController public function testShopApi() { - $id = $this->request->param('id'); - $templateInfo = TaskTemplate::where(['id'=>$id])->find(); - $townCompany = Company::where(['id' => $templateInfo['company_id']])->find(); + $dayCount = 4; //$taskTemplateInfo['day_count']; + $targetgroupServiceCompanyCount = floor($dayCount /2 ); // 目标小组团队数 + echo $targetgroupServiceCompanyCount; + $targetInformationCount = 0; // 目标收集户数 + for ($j = 0; $j < $targetgroupServiceCompanyCount; $j++) { + for ($i = 0; $i < $dayCount; $i++) { + $targetInformationCount +=5; - $param['start_time'] = strtotime(date('Y-m-d', $templateInfo['cretate_time'])) + 86400; - $param['end_time'] = time(); - $param['mer_intention_id'] = 131; -// $param['goods_id'] = '17,18'; - $param['type_id'] = 10; - - - // todo 返回字段要对接 - $result = ShopRequestLogic::getGeneralMerchantProductListing($param); - dd($result); + } + } + echo $targetInformationCount; } } diff --git a/app/api/controller/CronController.php b/app/api/controller/CronController.php index 9108fbfc0..234ad1eaf 100644 --- a/app/api/controller/CronController.php +++ b/app/api/controller/CronController.php @@ -36,7 +36,8 @@ class CronController extends BaseApiController $plan_ids = []; foreach ($plan_all as $k => $v) { - $all = TaskTemplate::where('status', 1)->where('task_scheduling', $v['id'])->limit(30)->select()->toArray(); + // cron_time 定时下发日期 小于等于当前日期就都下发 + $all = TaskTemplate::where('status', 1)->where('task_scheduling', $v['id'])->where('cron_time', '<=', $time)->select()->toArray(); $plan_ids[] = $v['id']; if ($all) { $plan_all[$k]['template'] = $all; diff --git a/app/api/controller/TaskController.php b/app/api/controller/TaskController.php index 168be7a75..3d7d39a2d 100644 --- a/app/api/controller/TaskController.php +++ b/app/api/controller/TaskController.php @@ -1014,4 +1014,15 @@ class TaskController extends BaseApiController return $this->success('成功', []); } } + + // 任务进度 + public function taskProgress() + { + $taskId = $this->request->get('task_id'); + $taskTypeValue = $this->request->get('task_type_value'); + // 服务部长协助负责人开展工作任务 + if ($taskTypeValue == 'town_task_type_1') { + + } + } } diff --git a/app/common/logic/ShopRequestLogic.php b/app/common/logic/ShopRequestLogic.php index a17217a85..5cd10df90 100644 --- a/app/common/logic/ShopRequestLogic.php +++ b/app/common/logic/ShopRequestLogic.php @@ -231,4 +231,135 @@ class ShopRequestLogic extends BaseLogic return false; } } + + /** + * 查询镇级下的镇级供应链商户 + */ + public static function getTownSupplyChainMerchant($param) + { + try { + $requestResponse = HttpClient::create()->request('GET', env('url.shop_prefix'). '/api/statistics/supply_chain_merchant', [ + 'query' => $param + ]); + return json_decode($requestResponse->getContent(), true); + } catch (Exception $e) { + self::setError($e->getMessage()); + return false; + } + } + + /** + * 查询镇级下的镇级供应链商户 + */ + public static function getTownGeneralMerchant($param) + { + try { + $requestResponse = HttpClient::create()->request('GET', env('url.shop_prefix'). '/api/statistics/general_merchant', [ + 'query' => $param + ]); + return json_decode($requestResponse->getContent(), true); + } catch (Exception $e) { + self::setError($e->getMessage()); + return false; + } + } + + /** + * 查询镇级供应链商户的上架商品数 + */ + public static function getTownSupplyChainMerchantProductCount($param) + { + try { + $requestResponse = HttpClient::create()->request('GET', env('url.shop_prefix'). '/api/statistics/supply_chain_product', [ + 'query' => $param + ]); + return json_decode($requestResponse->getContent(), true); + } catch (Exception $e) { + self::setError($e->getMessage()); + return false; + } + } + + /** + * 查询普通商户的上架商品数 + */ + public static function getTownGeneralMerchantProductCount($param) + { + try { + $requestResponse = HttpClient::create()->request('GET', env('url.shop_prefix'). '/api/statistics/general_merchant_product', [ + 'query' => $param + ]); + return json_decode($requestResponse->getContent(), true); + } catch (Exception $e) { + self::setError($e->getMessage()); + return false; + } + } + + /** + * 供应链商户入驻20天后是否完成库存更新 + */ + public static function getStockUpdate1($param) + { + try { + $requestResponse = HttpClient::create()->request('GET', env('url.shop_prefix'). '/api/statistics/supply_chain_product_stock_count1', [ + 'query' => $param + ]); + return json_decode($requestResponse->getContent(), true); + } catch (Exception $e) { + self::setError($e->getMessage()); + return false; + } + } + + /** + * 普通商户入驻20天后是否完成库存更新 + */ + public static function getGeneralStockUpdate1($param) + { + try { + $requestResponse = HttpClient::create()->request('GET', env('url.shop_prefix'). '/api/statistics/product_stock_count1', [ + 'query' => $param + ]); + return json_decode($requestResponse->getContent(), true); + } catch (Exception $e) { + self::setError($e->getMessage()); + return false; + } + } + + + + /** + * 查询供应链商户指定商品采购金额 + */ + public static function getMerchantPurchaseAmount($param) + { + try { + $requestResponse = HttpClient::create()->request('GET', env('url.shop_prefix'). '/api/statistics/supply_chain_product_price', [ + 'query' => $param + ]); + return json_decode($requestResponse->getContent(), true); + } catch (Exception $e) { + self::setError($e->getMessage()); + return false; + } + } + + + /** + * 查询一般商户采购金额 + */ + public static function getGeneralMerchantPurchaseAmount1($param) + { + try { + $requestResponse = HttpClient::create()->request('GET', env('url.shop_prefix'). '/api/statistics/general_product_price', [ + 'query' => $param + ]); + return json_decode($requestResponse->getContent(), true); + } catch (Exception $e) { + self::setError($e->getMessage()); + return false; + } + } } \ No newline at end of file diff --git a/app/common/logic/task/TaskLogic.php b/app/common/logic/task/TaskLogic.php index 92f3a597c..d102c936f 100644 --- a/app/common/logic/task/TaskLogic.php +++ b/app/common/logic/task/TaskLogic.php @@ -15,6 +15,8 @@ namespace app\common\logic\task; +use app\common\enum\user\AccountLogEnum; +use app\common\logic\AccountLogLogic; use app\common\logic\finance\TownShareProfit; use app\common\logic\finance\VillageShareProfit; use app\common\logic\ShopRequestLogic; @@ -31,6 +33,7 @@ use app\common\model\informationg\UserInformationg; use app\common\model\task_scheduling_plan\TaskSchedulingPlan; use app\common\model\task_template\TaskTemplate; use app\common\model\user\User; +use app\common\model\user\UserAccountLog; use think\Exception; use think\facade\Db; use think\facade\Log; @@ -714,9 +717,9 @@ class TaskLogic extends BaseLogic self::masterTask2Settlement($taskSchedulePlan); break; // 信息收集与促销 - case 'town_task_type_master_3': - self::masterTask3Settlement($taskSchedulePlan); - break; +// case 'town_task_type_master_3': +// self::masterTask3Settlement($taskSchedulePlan); +// break; // 种养殖基地订单匹配 case 'town_task_type_master_4': self::masterTask4Settlement($taskSchedulePlan); @@ -925,6 +928,7 @@ class TaskLogic extends BaseLogic if(isset($result['status']) && $result['status']== 400) { $tradeAmount = 0; } + if(isset($result['status']) && $result['status']== 200) { $tradeAmount = $result['data']['trade_amount']; Log::info(['4.负责人-信息收集与促销-查询商城返回-交易额', $tradeAmount]); @@ -1180,6 +1184,10 @@ class TaskLogic extends BaseLogic } // self::dealTaskMarketingDirector10($taskSchedulePlan); break; + // 信息收集与镇级供应链促销 + case 'town_task_type_marketing_director_11': + self::dealTaskMarketingDirector11($taskSchedulePlan); + break; default: return true; } @@ -1192,6 +1200,7 @@ class TaskLogic extends BaseLogic /** * @param $taskSchedulePlan * 市场部长协助总负责人开展工作 任务完成判定和结算 + * 任务完成条件 镇下辖所有小组服务团队实际交易流水人≥所有小组服务团队当天的总的交易流水任务,算完成 */ private static function dealTaskMarketingDirector1($taskSchedulePlan) { @@ -1202,40 +1211,26 @@ class TaskLogic extends BaseLogic $isDone = 1; // 任务是否完成标记 $isTaskSchedule = 0; // 下属小组服务公司是否有每日任务安排标记 - // 负责人任务类型id列表 - $typeIds = []; - $townMasterTaskTypeList = DictData::where(['type_value' => 'town_task_type_master', 'status' => 1])->column('value', 'id'); - foreach ($townMasterTaskTypeList as $k => $item) { - if ($item == 'town_task_type_master_3') { - $typeIds[] = $k; - } - if ($item == 'town_task_type_master_4') { - $typeIds[] =$k; - } -// if ($item == 'town_task_type_master_5') { -// $typeIds[] = $k; -// } - if ($item == 'town_task_type_master_8') { - $typeIds[] = $k; - } - } + // 镇下辖所有小组服务团队 + $groupServiceCompanyList = Company::where(['street' => $townCompany['street'], 'company_type'=> 18, 'is_contract'=>1])->select()->toArray(); - // 查询 镇合伙人公司负责人是否有对应的每日任务安排 - $templateList = TaskTemplate::where(['company_id'=>$townCompany['id']])->whereIn('type', $typeIds)->select()->toArray(); - // 未做任务安排的小组服务公司不在判定范围内,跳出本次循环 - if(count($templateList) === 3) { - $isTaskSchedule = 1; - // 查询负责人的循环任务有没有全部做完 任意有一个任务没有做完,则判定为 协助总负责人开展工作任务 失败 - foreach ($templateList as $template) { - $task = Task::where(['template_id' => $template['id'], 'status' => 3])->find(); - if (empty($task)) { - $isDone = 0; - break; + $townTotalTradeAmount = 0; // 镇下属小组服务公司 每日实际总交易额 + $targetAmount = 0; // 镇下属小组服务公司每日 目标总交易额 + // 查镇所属小组服务公司当日任务目标金额总和 + foreach ($groupServiceCompanyList as $groupServiceCompany) { + $tempTask = Task::where(['company_id'=> $groupServiceCompany['id'], 'status'=>3, 'type'=>33]) + ->whereDay('start_time','today') + ->find(); + if ($tempTask) { + $plan = TaskSchedulingPlan::where(['id'=>$tempTask['scheduling_plan_id']])->find(); + if ($plan['is_pay'] == 1) { + $extend = $tempTask['extend']; + $targetAmount += $extend['transaction']['arr']['day_money']; + $townTotalTradeAmount += $extend['transaction']['arr']['total_price']; } } } - // 镇合伙人公司负责人有任务安排,也完成了任务 - if ($isDone === 1 && $isTaskSchedule === 1) { + if ($townTotalTradeAmount >= $targetAmount) { // 做任务结算,分润 (new TownShareProfit())->dealTaskSettlementMarketingDirector1($taskInfo, $townCompany, $taskSchedulePlan); } else { @@ -1243,6 +1238,48 @@ class TaskLogic extends BaseLogic (new Task())->closeTask($taskSchedulePlan['task_id']); Log::info('协助总负责人开展工作任务,结算失败:' . $taskTemplateInfo['title'] . '未完成。任务:' . json_encode($taskInfo)); } + + // 负责人任务类型id列表 +// $typeIds = []; +// $townMasterTaskTypeList = DictData::where(['type_value' => 'town_task_type_master', 'status' => 1])->column('value', 'id'); +// foreach ($townMasterTaskTypeList as $k => $item) { +// if ($item == 'town_task_type_master_3') { +// $typeIds[] = $k; +// } +// if ($item == 'town_task_type_master_4') { +// $typeIds[] =$k; +// } +//// if ($item == 'town_task_type_master_5') { +//// $typeIds[] = $k; +//// } +// if ($item == 'town_task_type_master_8') { +// $typeIds[] = $k; +// } +// } +// +// // 查询 镇合伙人公司负责人是否有对应的每日任务安排 +// $templateList = TaskTemplate::where(['company_id'=>$townCompany['id']])->whereIn('type', $typeIds)->select()->toArray(); +// // 未做任务安排的小组服务公司不在判定范围内,跳出本次循环 +// if(count($templateList) === 3) { +// $isTaskSchedule = 1; +// // 查询负责人的循环任务有没有全部做完 任意有一个任务没有做完,则判定为 协助总负责人开展工作任务 失败 +// foreach ($templateList as $template) { +// $task = Task::where(['template_id' => $template['id'], 'status' => 3])->find(); +// if (empty($task)) { +// $isDone = 0; +// break; +// } +// } +// } + // 镇合伙人公司负责人有任务安排,也完成了任务 +// if ($isDone === 1 && $isTaskSchedule === 1) { +// // 做任务结算,分润 +// (new TownShareProfit())->dealTaskSettlementMarketingDirector1($taskInfo, $townCompany, $taskSchedulePlan); +// } else { +// // 关闭任务 +// (new Task())->closeTask($taskSchedulePlan['task_id']); +// Log::info('协助总负责人开展工作任务,结算失败:' . $taskTemplateInfo['title'] . '未完成。任务:' . json_encode($taskInfo)); +// } } /** @@ -2260,6 +2297,79 @@ class TaskLogic extends BaseLogic } } } + + + public static function dealTaskMarketingDirector11($taskSchedulePlan) + { + Log::info(['镇合伙人公司定时任务结算执行-'.$taskSchedulePlan['template_info']['title']]); + $taskTemplateInfo = $taskSchedulePlan['template_info']; + $dayCount = $taskTemplateInfo['day_count']; + $stageDayTwoCount = bcadd($taskTemplateInfo['stage_day_one'],$taskTemplateInfo['stage_day_two']); + $target = $taskTemplateInfo['extend']['target']; + $taskInfo = Task::where(['id' => $taskSchedulePlan['task_id']])->find(); + $townCompany = Company::where(['id' => $taskTemplateInfo['company_id']])->find(); + + // 任务交易池,用于叠加交易额 + $townTransactionPool = $taskTemplateInfo['transaction_pool']; + + // 任务累计天数 小于 第一阶段 关闭任务 + if ($dayCount < $taskTemplateInfo['stage_day_one']) { + (new Task())->closeTask($taskSchedulePlan['task_id']); + return false; + } + + // 任务累计天数 = 第一阶段 收集信息 >= 1家 + if ($dayCount == $taskTemplateInfo['stage_day_one']) { + $purchaseSalesInfo = $taskTemplateInfo['extend']['purchase_sales_info']; + $purchaseSalesCount = count($purchaseSalesInfo['planting']) + count($purchaseSalesInfo['supply']); + if ($purchaseSalesCount >= 1) { + $taskInfo['money'] = bcmul($taskTemplateInfo['money'], $taskTemplateInfo['stage_day_one'], 2); + (new TownShareProfit())->dealTaskSettlementMaster3($taskInfo, $townCompany, $taskSchedulePlan, $townTransactionPool); + } + } + + + // 判断收集任务,整体是否已完成 + if ($dayCount == 60) { + $purchaseSalesInfo = $taskTemplateInfo['extend']['purchase_sales_info']; + $purchaseSalesCount = count($purchaseSalesInfo['planting']) + count($purchaseSalesInfo['supply']); + + $rate = bcdiv($purchaseSalesCount, $target, 2); + if ($rate >= 1) { + $rate = 1; + } + + $totalMoney = bcmul(bcdiv($taskTemplateInfo['money_two'], 2, 2),55, 2); + + $taskInfo['money'] = bcmul($totalMoney, $rate, 2); + (new TownShareProfit())->dealTaskSettlementMaster3($taskInfo, $townCompany, $taskSchedulePlan, $townTransactionPool); + } + + + // 任务累计天数 大于 第一阶段 小于第一+第二阶段 判断交易任务是否完成,完成则结算,否则关闭任务 + if ($dayCount > $taskTemplateInfo['stage_day_one'] && $dayCount < $stageDayTwoCount) { + $purchaseSalesInfo = $taskTemplateInfo['extend']['purchase_sales_info']; + $purchaseSalesCount = bcadd(count($purchaseSalesInfo['planting']), count($purchaseSalesInfo['supply'])); + // 判断交易任务是否完成 + self::judgeMasterTask3Trade($taskInfo, $taskTemplateInfo, $townCompany, $taskSchedulePlan, $purchaseSalesInfo, $townTransactionPool, $purchaseSalesCount); + } + + // 任务累计天数 = 第一+第二阶段 判断信息收集和交易任务是否完成,完成则结算,否则关闭任务 +// if ($dayCount == $stageDayTwoCount) { +// $purchaseSalesInfo = $taskTemplateInfo['extend']['purchase_sales_info']; +// $purchaseSalesCount = count($purchaseSalesInfo['planting']) + count($purchaseSalesInfo['supply']); +// if ($purchaseSalesCount >= $target) { +// $taskInfo['money'] = bcmul(bcdiv($taskTemplateInfo['money_two'], 2, 2), $taskTemplateInfo['stage_day_two'], 2); +// (new TownShareProfit())->dealTaskSettlementMaster3($taskInfo, $townCompany, $taskSchedulePlan, $townTransactionPool); +// } +// } + + // 任务累计天数 大于 第一+第二阶段 每日结算 判断交易任务是否完成,完成则结算,否则关闭任务 + if ($dayCount >= $stageDayTwoCount) { + // 判断交易任务是否完成 + self::judgeMasterTask3Trade($taskInfo, $taskTemplateInfo, $townCompany, $taskSchedulePlan, $purchaseSalesInfo, $townTransactionPool, $target); + } + } /** * @param $taskSchedulePlan * 服务部长任务结算 @@ -2316,6 +2426,8 @@ class TaskLogic extends BaseLogic } } + + /** * 系统自动判定镇合伙人公司负责人是否完成每日循环任务 */ @@ -2325,43 +2437,30 @@ class TaskLogic extends BaseLogic $taskTemplateInfo = $taskSchedulePlan['template_info']; $taskInfo = Task::where(['id' => $taskSchedulePlan['task_id']])->find(); $townCompany = Company::where(['id' => $taskTemplateInfo['company_id']])->find(); - $isDone = 1; // 任务是否完成标记 - $isTaskSchedule = 0; // 下属小组服务公司是否有每日任务安排标记 - // 负责人 每日任务类型id列表 - $typeIds = []; - $townMasterTaskTypeList = DictData::where(['type_value' => 'town_task_type_master', 'status' => 1])->column('value', 'id'); - foreach ($townMasterTaskTypeList as $k=>$item) { - if ($item == 'town_task_type_master_3') { - $typeIds[] = $k; - } - if ($item == 'town_task_type_master_4') { - $typeIds[] = $k; - } -// if ($item == 'town_task_type_master_5') { -// $typeIds[] = $k; -// } - if ($item == 'town_task_type_master_8') { - $typeIds[] = $k; - } - } - // 查询 镇合伙人公司负责人是否有对应的每日任务安排 - $templateList = TaskTemplate::where(['company_id'=>$townCompany['id']])->whereIn('type', $typeIds)->select()->toArray(); - // 未做任务安排的小组服务公司不在判定范围内,跳出本次循环 - if(count($templateList) === 3) { - $isTaskSchedule = 1; - // 查询负责人的循环任务有没有全部做完 任意有一个任务没有做完,则判定为 协助总负责人开展工作任务 失败 - foreach ($templateList as $template) { - $task = Task::where(['template_id' => $template['id'], 'status' => 3])->find(); - if (empty($task)) { - $isDone = 0; - break; + + + // 镇下辖所有小组服务团队 + $groupServiceCompanyList = Company::where(['street' => $townCompany['street'], 'company_type'=> 18, 'is_contract'=>1])->select()->toArray(); + + $townTotalTradeAmount = 0; // 镇下属小组服务公司 每日实际总交易额 + $targetAmount = 0; // 镇下属小组服务公司每日 目标总交易额 + // 查镇所属小组服务公司当日任务目标金额总和 + foreach ($groupServiceCompanyList as $groupServiceCompany) { + $tempTask = Task::where(['company_id'=> $groupServiceCompany['id'], 'status'=>3, 'type'=>33]) + ->whereDay('start_time','today') + ->find(); + + if ($tempTask) { + $plan = TaskSchedulingPlan::where(['id'=>$tempTask['scheduling_plan_id']])->find(); + if ($plan['is_pay'] == 1) { + $extend = $tempTask['extend']; + $targetAmount += $extend['transaction']['arr']['day_money']; + $townTotalTradeAmount += $extend['transaction']['arr']['total_price']; } } } - - // 下属小组服务公司有任务安排,也完成了任务 - if ($isDone === 1 && $isTaskSchedule === 1) { + if ($townTotalTradeAmount >= $targetAmount) { // 做任务结算,分润 (new TownShareProfit())->townTaskType1($taskInfo, $townCompany, $taskSchedulePlan); } else { @@ -2369,6 +2468,51 @@ class TaskLogic extends BaseLogic (new Task())->closeTask($taskSchedulePlan['task_id']); Log::info('协助总负责人开展工作任务,结算失败:' . $taskTemplateInfo['title'] . '未完成。任务:' . json_encode($taskInfo)); } + + +// $isDone = 1; // 任务是否完成标记 +// $isTaskSchedule = 0; // 下属小组服务公司是否有每日任务安排标记 + // 负责人 每日任务类型id列表 +// $typeIds = []; +// $townMasterTaskTypeList = DictData::where(['type_value' => 'town_task_type_master', 'status' => 1])->column('value', 'id'); +// foreach ($townMasterTaskTypeList as $k=>$item) { +// if ($item == 'town_task_type_master_3') { +// $typeIds[] = $k; +// } +// if ($item == 'town_task_type_master_4') { +// $typeIds[] = $k; +// } +//// if ($item == 'town_task_type_master_5') { +//// $typeIds[] = $k; +//// } +// if ($item == 'town_task_type_master_8') { +// $typeIds[] = $k; +// } +// } +// // 查询 镇合伙人公司负责人是否有对应的每日任务安排 +// $templateList = TaskTemplate::where(['company_id'=>$townCompany['id']])->whereIn('type', $typeIds)->select()->toArray(); +// // 未做任务安排的小组服务公司不在判定范围内,跳出本次循环 +// if(count($templateList) === 3) { +// $isTaskSchedule = 1; +// // 查询负责人的循环任务有没有全部做完 任意有一个任务没有做完,则判定为 协助总负责人开展工作任务 失败 +// foreach ($templateList as $template) { +// $task = Task::where(['template_id' => $template['id'], 'status' => 3])->find(); +// if (empty($task)) { +// $isDone = 0; +// break; +// } +// } +// } +// +// // 下属小组服务公司有任务安排,也完成了任务 +// if ($isDone === 1 && $isTaskSchedule === 1) { +// // 做任务结算,分润 +// (new TownShareProfit())->townTaskType1($taskInfo, $townCompany, $taskSchedulePlan); +// } else { +// // 关闭任务 +// (new Task())->closeTask($taskSchedulePlan['task_id']); +// Log::info('协助总负责人开展工作任务,结算失败:' . $taskTemplateInfo['title'] . '未完成。任务:' . json_encode($taskInfo)); +// } } /** @@ -3179,4 +3323,859 @@ class TaskLogic extends BaseLogic $task['money'] = $taskTemplateInfo['money_three']; (new VillageShareProfit())->dealVillageTaskSettlement8($task, $villageCompany, $taskSchedulePlan); } + + public static function taskProgress($taskId=0) + { + $taskInfo = Task::where(['id'=>$taskId])->find(); + $taskDictInfo = DictData::where('id', $taskInfo['type'])->find(); + $taskInfo['task_type_name'] = $taskDictInfo['name']; + $taskInfo['task_type_value'] = $taskDictInfo['value']; + // 完成进度 + $progress = []; + // 完成详情 + $doneList = []; + + switch ($taskDictInfo['value']) { + + case 1: + // 小组服务团队-档案更新任务 + $extend = $taskInfo['extend']; + $progress['total'] = $extend['informationg']['count']; + $progress['done'] = $extend['informationg']['update']; + if (isset($extend['informationg']['ids'])) { + $doneList = UserInformationg::whereIn('id', $extend['informationg']['ids'])->select(); + } + $taskInfo['progress'] = $progress; + $taskInfo['done_list'] = $doneList; + + return $taskInfo; + break; + case 2: + // 小组服务团队-三轮车任务 + return $taskInfo; + break; + case 3: + // 小组服务团队-平台交易任务 + + break; + case 4: + // 小组服务团队-其他任务 + break; + case 5: + // 小组服务团队-入股任务 + break; + case 'town_task_type_1': + // 镇合伙人服务部长-市场部长协助负责人开展工作任务 + return $taskInfo; + break; + case 'town_task_type_2': + // 镇合伙人服务部长-拓展小组服务团队任务 + $company = Company::where('id', $taskInfo['company_id'])->find(); + $doneList = Company::where('company_type', 18)->where('street', $company['street'])->select(); + $progress['total'] = 30; + $progress['done'] = Company::where('company_type', 18)->where('street', $company['street'])->count(); + $taskInfo['progress'] = $progress; + $taskInfo['done_list'] = $doneList; + return $taskInfo; + break; + case 'town_task_type_3': + // 镇合伙人服务部长-督促完成档案更新和三轮车任务 + $townCompany = Company::where(['id' => $taskInfo['company_id']])->find(); + + $groupServiceCompanyList = Company::where('company_type', 18)->where('street', $townCompany['street'])->select(); + + $groupServiceCompanyCount = count($groupServiceCompanyList); // 团队总数 + $doneTaskGroupServiceCompanyCount = 0; // 完成任务团队总数 + + $doneGroupServiceCompanyList = []; + foreach ($groupServiceCompanyList as $groupServiceCompany) { + // 档案更新任务 + $taskType31 = Task::where(['company_id' => $groupServiceCompany['id'], 'type' => 31, 'status' => 3])->whereDay('start_time', 'today')->find(); + // 三轮车任务 + $taskType32 = Task::where(['company_id' => $groupServiceCompany['id'], 'type' => 32, 'status' => 3])->whereDay('start_time', 'today')->find(); + if (!empty($taskType31) && !empty($taskType32)) { + $doneTaskGroupServiceCompanyCount++; + $doneGroupServiceCompanyList[] = $groupServiceCompany; + + } + } + $progress['total'] = $groupServiceCompanyCount; + $progress['done'] = $doneTaskGroupServiceCompanyCount; + $taskInfo['progress'] = $progress; + $taskInfo['done_list'] = $doneGroupServiceCompanyList; + return $taskInfo; + break; + case 'town_task_type_4': + // 镇合伙人服务部长-督促小组服务团队学习任务 每30天完成4次 + $progress['total'] = 4; + $progress['done'] = Task::where(['company_id' => $taskInfo['company_id'], 'type' => $taskDictInfo['id'], 'status' => 3])->count();; + $taskInfo['progress'] = $progress; + return $taskInfo; + break; + case 'town_task_type_5': + // 镇合伙人服务部长-督促完成需求收集和交易任务 + $taskTemplateInfo = TaskTemplate::where(['id' => $taskInfo['template_id']])->find(); + $townTransactionPool = $taskTemplateInfo['transaction_pool']; // 镇交易池 + $townTotalTradeAmount = 0; // 镇下属小组服务公司 每日实际总交易额 + $targetAmount = 0; // 镇下属小组服务公司每日 目标总交易额 + $townCompany = Company::where(['id' => $taskInfo['company_id']])->find(); + $groupServiceCompanyList = Db::query("select * from la_company where company_type=:company_type and FIND_IN_SET(street,:street)", ['company_type' => 18,'street'=>$townCompany['street']], true); + + // 查镇所属小组服务公司当日任务目标金额总和 + foreach ($groupServiceCompanyList as $groupServiceCompany) { + $tempTask = Task::where(['company_id'=> $groupServiceCompany['id'], 'status'=>3, 'type'=>33]) + ->whereDay('start_time','today') + ->find(); + if ($tempTask) { + $plan = TaskSchedulingPlan::where(['id'=>$tempTask['scheduling_plan_id']])->find(); + if ($plan['is_pay'] == 1) { + $extend = $tempTask['extend']; + $targetAmount += $extend['transaction']['arr']['day_money']; + $townTotalTradeAmount += $extend['transaction']['arr']['total_price']; + } + } + } + $progress['total'] = $targetAmount; + $progress['done'] = bcadd($townTransactionPool, $townTotalTradeAmount); + $taskInfo['progress'] = $progress; + return $taskInfo; + break; + case 'town_task_type_6': + // 镇合伙人服务部长-督促入股村管理公司任务 + $progress['total'] = 30*3000; + $approve = Approve::where('task_id', $taskId)->findOrEmpty(); + if ($approve->isEmpty()) { + $sharecapitalPaidCount = 0; + } else { + // 小组服务完成股金上交数 + $sharecapitalPaidCount = intdiv($approve->amount, 3000); + } + $progress['done'] = $sharecapitalPaidCount*3000; + $taskInfo['progress'] = $progress; + return $taskInfo; + break; + case 'town_task_type_7': + // 镇合伙人服务部长-安全工作任务 + return $taskInfo; + break; + case 'town_task_type_marketing_director_1': + // 镇合伙人-市场部长协助负责人开展日常工作 + return $taskInfo; + break; + case 'town_task_type_marketing_director_2': + // 镇合伙人市场部长-招驻供应链商户 + $townCompany = Company::where(['id' => $taskInfo['company_id']])->find(); + $taskTemplateInfo = TaskTemplate::where(['id' => $taskInfo['template_id']])->find(); + + // 查询 镇辖区下 商城的镇级供应链商户 + $supplyChainMerchant = ShopRequestLogic::getTownSupplyChainMerchant(['street_code'=>$townCompany['street']]); + + $progress['total'] = $taskTemplateInfo['extend']['target']; + $progress['done'] = count($supplyChainMerchant['data']['list']); + $doneList = $supplyChainMerchant['data']['list']; + $taskInfo['progress'] = $progress; + $taskInfo['done_list'] = $doneList; + return $taskInfo; + break; + case 'town_task_type_marketing_director_3': + // 镇合伙人市场部长-协助供应链商户上架和库存更新 + $templateInfo = TaskTemplate::where(['id' => $taskInfo['template_id']])->find(); + $townCompany = Company::where(['id' => $templateInfo['company_id']])->find(); + $townPlatformCompany = Db::query("select * from la_company where company_type=:company_type and FIND_IN_SET(:street,responsible_area)", ['company_type' => 41,'street'=>$townCompany['street']], true)[0]; + + // 商城商户入驻申请id 与商户已关联 + $shopMerchantSettleinLogList= ShopMerchantSettleinLog::where(['town_company_id'=>$townPlatformCompany['id']])->select()->toArray(); + // 遍历农科公司区域下的商户,查询每个商户的商品数 + foreach ($shopMerchantSettleinLogList as $k => $item) { + $temp = []; + $merIntentionId = $item['mer_intention_id']; + $param = [ + 'mer_intention_id' => $merIntentionId, + ]; + + $result = ShopRequestLogic::getTownSupplyChainMerchantProductCount($param); + if (empty($result['data'])) { + continue; + } + + $temp['count'] = $result['data']['count']; + $temp['total'] = $templateInfo['extend']['target']; + $temp['mer_name'] = $result['data']['merchantName']; + + $merIntentionId = $item['mer_intention_id']; + $param = [ + 'mer_intention_id' => $merIntentionId, + ]; + $result1 = ShopRequestLogic::getStockUpdate1($param); + $temp['is_update_stock'] = $result1['data']['count']; + $progress[] = $temp; + unset($temp); + } + $taskInfo['progress'] = $progress; + return $taskInfo; + break; + case 'town_task_type_marketing_director_4': + // 镇合伙人市场部长-督促供应链商户采购任务 + $templateInfo = TaskTemplate::where(['id' => $taskInfo['template_id']])->find(); + $townCompany = Company::where(['id' => $templateInfo['company_id']])->find(); + $townPlatformCompany = Db::query("select * from la_company where company_type=:company_type and FIND_IN_SET(:street,responsible_area)", ['company_type' => 41,'street'=>$townCompany['street']], true)[0]; + + // 商城商户入驻申请id 与商户已关联 + $shopMerchantSettleinLogList= ShopMerchantSettleinLog::where(['town_company_id'=>$townPlatformCompany['id']])->select()->toArray(); + + // 遍历农科公司区域下的商户,对每个商户进行判定 + foreach ($shopMerchantSettleinLogList as $item) { + $temp = []; + + $startTime = strtotime(date('Y-m-d', strtotime($item['create_time']))); // 入驻当日 00:00:00 + $endTime = strtotime("+{$templateInfo['stage_day_one']} day", $startTime); // $templateInfo['stage_day_one']天后的 00:00:00 + $merIntentionId = $item['mer_intention_id']; + $param = [ + 'mer_intention_id' => $merIntentionId, + 'type'=>200 + ]; + $result1 = ShopRequestLogic::getMerchantPurchaseAmount($param); + if (empty($result1['data'])) { + continue; + } + $temp['procure_amount'] = $result1['data']['count']; + $temp['merchant_name'] = $result1['data']['merName']; + + // 第一阶段目标金额 从入驻时间累计到第一阶段周期天数 + if (date('Y-m-d', $endTime) > date('Y-m-d', time())){ + $temp['total'] = self::countTargetProcureAmount(1); + } + + + // 第二阶段目标金额 从入驻时间累计到第二阶段周期天数 + $stageDayTwoCount = bcadd($templateInfo['stage_day_one'], $templateInfo['stage_day_two']); + $endTime1 = strtotime("+{$stageDayTwoCount} day", $startTime); + if (date('Y-m-d', $endTime) < date('Y-m-d', time()) && date('Y-m-d', $endTime1) > date('Y-m-d', time())){ + $temp['total'] = self::countTargetProcureAmount(2); + } + + // 第三阶段目标金额 从入驻时间累计到第三阶段周期天数 + $stageDayThreeCount = bcadd(bcadd($templateInfo['stage_day_one'], $templateInfo['stage_day_two']), $templateInfo['stage_day_three']); + $endTime2 = strtotime("+{$stageDayThreeCount} day", $startTime); + if (date('Y-m-d', $endTime1) < date('Y-m-d', time()) && date('Y-m-d', $endTime2) > date('Y-m-d', time())){ + $temp['total'] = self::countTargetProcureAmount(3); + } + + // 长期目标金额 间隔天数 = 当前日期的00:00:00时间戳 - 商户入驻时间累计三个阶段天数的日期00:00:00时间戳 + $intervalDayCount = intdiv(bcsub( strtotime(date('Y-m-d', time())), $endTime2), 86400); + $endTime3 = strtotime(date('Y-m-d', time())); + // 间隔天数能整除30 表示可以结算 + if (date('Y-m-d', $endTime2) < date('Y-m-d', time()) && date('Y-m-d', $endTime3) < date('Y-m-d', time()) && $intervalDayCount % 30 === 0) { + $step = bcadd(3, intdiv($intervalDayCount, 30)); + $temp['total'] = self::countTargetProcureAmount($step); + } + $progress[] = $temp; + unset($temp); + } + $taskInfo['progress'] = $progress; + return $taskInfo; + break; + case 'town_task_type_marketing_director_5': + // 镇合伙人市场部长-督促供应链商户销售任务 + + $templateInfo = TaskTemplate::where(['id' => $taskInfo['template_id']])->find(); + $townCompany = Company::where(['id' => $templateInfo['company_id']])->find(); + $townPlatformCompany = Db::query("select * from la_company where company_type=:company_type and FIND_IN_SET(:street,responsible_area)", ['company_type' => 41,'street'=>$townCompany['street']], true)[0]; + + // 商城商户入驻申请id 与商户已关联 + $shopMerchantSettleinLogList= ShopMerchantSettleinLog::where(['town_company_id'=>$townPlatformCompany['id']])->select()->toArray(); + + // 遍历农科公司区域下的商户,对每个商户进行判定 + foreach ($shopMerchantSettleinLogList as $item) { + $temp = []; + + $startTime = strtotime(date('Y-m-d', strtotime($item['create_time']))); // 入驻当日 00:00:00 + $endTime = strtotime("+{$templateInfo['stage_day_one']} day", $startTime); // $templateInfo['stage_day_one']天后的 00:00:00 + $merIntentionId = $item['mer_intention_id']; + $param = [ + 'mer_intention_id' => $merIntentionId, + 'type'=>300 + ]; + $result1 = ShopRequestLogic::getMerchantPurchaseAmount($param); + if (empty($result1['data'])) { + continue; + } + $temp['trade_amount'] = $result1['data']['count']; + $temp['merchant_name'] = $result1['data']['merName']; + + // 第一阶段目标金额 从入驻时间累计到第一阶段周期天数 + if (date('Y-m-d', $endTime) > date('Y-m-d', time())){ + $temp['total'] = self::countTargetProcureAmount(1); + } + + + // 第二阶段目标金额 从入驻时间累计到第二阶段周期天数 + $stageDayTwoCount = bcadd($templateInfo['stage_day_one'], $templateInfo['stage_day_two']); + $endTime1 = strtotime("+{$stageDayTwoCount} day", $startTime); + if (date('Y-m-d', $endTime) < date('Y-m-d', time()) && date('Y-m-d', $endTime1) > date('Y-m-d', time())){ + $temp['total'] = self::countTargetProcureAmount(2); + } + + // 第三阶段目标金额 从入驻时间累计到第三阶段周期天数 + $stageDayThreeCount = bcadd(bcadd($templateInfo['stage_day_one'], $templateInfo['stage_day_two']), $templateInfo['stage_day_three']); + $endTime2 = strtotime("+{$stageDayThreeCount} day", $startTime); + if (date('Y-m-d', $endTime1) < date('Y-m-d', time()) && date('Y-m-d', $endTime2) > date('Y-m-d', time())){ + $temp['total'] = self::countTargetProcureAmount(3); + } + + // 长期目标金额 间隔天数 = 当前日期的00:00:00时间戳 - 商户入驻时间累计三个阶段天数的日期00:00:00时间戳 + $intervalDayCount = intdiv(bcsub( strtotime(date('Y-m-d', time())), $endTime2), 86400); + $endTime3 = strtotime(date('Y-m-d', time())); + // 间隔天数能整除30 表示可以结算 + if (date('Y-m-d', $endTime2) < date('Y-m-d', time()) && date('Y-m-d', $endTime3) < date('Y-m-d', time()) && $intervalDayCount % 30 === 0) { + $step = bcadd(3, intdiv($intervalDayCount, 30)); + $temp['total'] = self::countTargetProcureAmount($step); + } + $progress[] = $temp; + unset($temp); + } + $taskInfo['progress'] = $progress; + return $taskInfo; + break; + case 'town_task_type_marketing_director_6': + // 镇合伙人市场部长-招驻一般商户 + $townCompany = Company::where(['id' => $taskInfo['company_id']])->find(); + $taskTemplateInfo = TaskTemplate::where(['id' => $taskInfo['template_id']])->find(); + + // 查询 镇辖区下 商城的镇级供应链商户 + $supplyChainMerchant = ShopRequestLogic::getTownGeneralMerchant(['street_code'=>$townCompany['street']]); + + $progress['total'] = $taskTemplateInfo['extend']['target']; + $progress['done'] = count($supplyChainMerchant['data']['list']); + $doneList = $supplyChainMerchant['data']['list']; + $taskInfo['progress'] = $progress; + $taskInfo['done_list'] = $doneList; + return $taskInfo; + break; + case 'town_task_type_marketing_director_7': + // 镇合伙人市场部长-协助一般商户上架商品和库存更新 + $templateInfo = TaskTemplate::where(['id' => $taskInfo['template_id']])->find(); + $townCompany = Company::where(['id' => $templateInfo['company_id']])->find(); + $townPlatformCompany = Db::query("select * from la_company where company_type=:company_type and FIND_IN_SET(:street,responsible_area)", ['company_type' => 41,'street'=>$townCompany['street']], true)[0]; + + // 商城商户入驻申请id 与商户已关联 + $shopMerchantSettleinLogList= ShopMerchantSettleinLog::where(['town_company_id'=>$townPlatformCompany['id']])->select()->toArray(); + // 遍历农科公司区域下的商户,查询每个商户的商品数 + foreach ($shopMerchantSettleinLogList as $k => $item) { + $temp = []; + $merIntentionId = $item['mer_intention_id']; + $param = [ + 'mer_intention_id' => $merIntentionId, + ]; + + $result = ShopRequestLogic::getTownGeneralMerchantProductCount($param); + if (empty($result['data'])) { + continue; + } + + $temp['count'] = $result['data']['count']; + $temp['total'] = 10; + $temp['mer_name'] = $result['data']['merchantName']; + + $merIntentionId = $item['mer_intention_id']; + $param = [ + 'mer_intention_id' => $merIntentionId, + ]; + $result1 = ShopRequestLogic::getGeneralStockUpdate1($param); + $temp['is_update_stock'] = $result1['data']['count']; + $progress[] = $temp; + unset($temp); + } + $taskInfo['progress'] = $progress; + return $taskInfo; + break; + case 'town_task_type_marketing_director_8': + // 镇合伙人市场部长-督促一般商户采购任务 + $templateInfo = TaskTemplate::where(['id' => $taskInfo['template_id']])->find(); + $townCompany = Company::where(['id' => $templateInfo['company_id']])->find(); + $townPlatformCompany = Db::query("select * from la_company where company_type=:company_type and FIND_IN_SET(:street,responsible_area)", ['company_type' => 41,'street'=>$townCompany['street']], true)[0]; + + // 商城商户入驻申请id 与商户已关联 + $shopMerchantSettleinLogList= ShopMerchantSettleinLog::where(['town_company_id'=>$townPlatformCompany['id']])->select()->toArray(); + + // 遍历农科公司区域下的商户,对每个商户进行判定 + foreach ($shopMerchantSettleinLogList as $item) { + $temp = []; + + $startTime = strtotime(date('Y-m-d', strtotime($item['create_time']))); // 入驻当日 00:00:00 + $endTime = strtotime("+{$templateInfo['stage_day_one']} day", $startTime); // $templateInfo['stage_day_one']天后的 00:00:00 + $merIntentionId = $item['mer_intention_id']; + $param = [ + 'mer_intention_id' => $merIntentionId, + 'type'=>200 + ]; + $result1 = ShopRequestLogic::getGeneralMerchantPurchaseAmount1($param); + if (empty($result1['data'])) { + continue; + } + $temp['procure_amount'] = $result1['data']['count']; + $temp['merchant_name'] = $result1['data']['merName']; + + // 第一阶段目标金额 从入驻时间累计到第一阶段周期天数 + if (date('Y-m-d', $endTime) > date('Y-m-d', time())){ + $temp['total'] = self::countTargetProcureAmount(1); + } + + + // 第二阶段目标金额 从入驻时间累计到第二阶段周期天数 + $stageDayTwoCount = bcadd($templateInfo['stage_day_one'], $templateInfo['stage_day_two']); + $endTime1 = strtotime("+{$stageDayTwoCount} day", $startTime); + if (date('Y-m-d', $endTime) < date('Y-m-d', time()) && date('Y-m-d', $endTime1) > date('Y-m-d', time())){ + $temp['total'] = self::countTargetProcureAmount(2); + } + + // 第三阶段目标金额 从入驻时间累计到第三阶段周期天数 + $stageDayThreeCount = bcadd(bcadd($templateInfo['stage_day_one'], $templateInfo['stage_day_two']), $templateInfo['stage_day_three']); + $endTime2 = strtotime("+{$stageDayThreeCount} day", $startTime); + if (date('Y-m-d', $endTime1) < date('Y-m-d', time()) && date('Y-m-d', $endTime2) > date('Y-m-d', time())){ + $temp['total'] = self::countTargetProcureAmount(3); + } + + // 长期目标金额 间隔天数 = 当前日期的00:00:00时间戳 - 商户入驻时间累计三个阶段天数的日期00:00:00时间戳 + $intervalDayCount = intdiv(bcsub( strtotime(date('Y-m-d', time())), $endTime2), 86400); + $endTime3 = strtotime(date('Y-m-d', time())); + // 间隔天数能整除30 表示可以结算 + if (date('Y-m-d', $endTime2) < date('Y-m-d', time()) && date('Y-m-d', $endTime3) < date('Y-m-d', time()) && $intervalDayCount % 30 === 0) { + $step = bcadd(3, intdiv($intervalDayCount, 30)); + $temp['total'] = self::countTargetProcureAmount($step); + } + $progress[] = $temp; + unset($temp); + } + $taskInfo['progress'] = $progress; + return $taskInfo; + break; + case 'town_task_type_marketing_director_9': + // 镇合伙人市场部长-督促一般商户销售任务 + $templateInfo = TaskTemplate::where(['id' => $taskInfo['template_id']])->find(); + $townCompany = Company::where(['id' => $templateInfo['company_id']])->find(); + $townPlatformCompany = Db::query("select * from la_company where company_type=:company_type and FIND_IN_SET(:street,responsible_area)", ['company_type' => 41,'street'=>$townCompany['street']], true)[0]; + + // 商城商户入驻申请id 与商户已关联 + $shopMerchantSettleinLogList= ShopMerchantSettleinLog::where(['town_company_id'=>$townPlatformCompany['id']])->select()->toArray(); + + // 遍历农科公司区域下的商户,对每个商户进行判定 + foreach ($shopMerchantSettleinLogList as $item) { + $temp = []; + + $startTime = strtotime(date('Y-m-d', strtotime($item['create_time']))); // 入驻当日 00:00:00 + $endTime = strtotime("+{$templateInfo['stage_day_one']} day", $startTime); // $templateInfo['stage_day_one']天后的 00:00:00 + $merIntentionId = $item['mer_intention_id']; + $param = [ + 'mer_intention_id' => $merIntentionId, + 'type'=>300 + ]; + $result1 = ShopRequestLogic::getGeneralMerchantPurchaseAmount1($param); + if (empty($result1['data'])) { + continue; + } + $temp['procure_amount'] = $result1['data']['count']; + $temp['merchant_name'] = $result1['data']['merName']; + + // 第一阶段目标金额 从入驻时间累计到第一阶段周期天数 + if (date('Y-m-d', $endTime) > date('Y-m-d', time())){ + $temp['total'] = self::countTargetProcureAmount(1); + } + + + // 第二阶段目标金额 从入驻时间累计到第二阶段周期天数 + $stageDayTwoCount = bcadd($templateInfo['stage_day_one'], $templateInfo['stage_day_two']); + $endTime1 = strtotime("+{$stageDayTwoCount} day", $startTime); + if (date('Y-m-d', $endTime) < date('Y-m-d', time()) && date('Y-m-d', $endTime1) > date('Y-m-d', time())){ + $temp['total'] = self::countTargetProcureAmount(2); + } + + // 第三阶段目标金额 从入驻时间累计到第三阶段周期天数 + $stageDayThreeCount = bcadd(bcadd($templateInfo['stage_day_one'], $templateInfo['stage_day_two']), $templateInfo['stage_day_three']); + $endTime2 = strtotime("+{$stageDayThreeCount} day", $startTime); + if (date('Y-m-d', $endTime1) < date('Y-m-d', time()) && date('Y-m-d', $endTime2) > date('Y-m-d', time())){ + $temp['total'] = self::countTargetProcureAmount(3); + } + + // 长期目标金额 间隔天数 = 当前日期的00:00:00时间戳 - 商户入驻时间累计三个阶段天数的日期00:00:00时间戳 + $intervalDayCount = intdiv(bcsub( strtotime(date('Y-m-d', time())), $endTime2), 86400); + $endTime3 = strtotime(date('Y-m-d', time())); + // 间隔天数能整除30 表示可以结算 + if (date('Y-m-d', $endTime2) < date('Y-m-d', time()) && date('Y-m-d', $endTime3) < date('Y-m-d', time()) && $intervalDayCount % 30 === 0) { + $step = bcadd(3, intdiv($intervalDayCount, 30)); + $temp['total'] = self::countTargetProcureAmount($step); + } + $progress[] = $temp; + unset($temp); + } + $taskInfo['progress'] = $progress; + return $taskInfo; + break; + case 'town_task_type_marketing_director_10': + // 镇合伙人市场部长-数字农贸宣传、加工业务建设和招商任务 + $templateInfo = TaskTemplate::where(['id' => $taskInfo['template_id']])->find(); + $dayCount = $templateInfo['day_count']; + $stageDayOne = $templateInfo['stage_day_one']; + $stageDayTwoCount = bcadd($templateInfo['stage_day_one'], $templateInfo['stage_day_two']); + $stageDayThreeCount = bcadd($templateInfo['stage_day_three'], $stageDayTwoCount); + // 第一阶段 + if ($dayCount < $stageDayOne) { + $extend = Task::where('template_id',$templateInfo['id'])->where("extend->>'$.stage'", 1)->value('extend'); // Db::query("SELECT extend FROM `la_task` WHERE template_id={$templateInfo['id']} AND extend->>'$.stage' =1 LIMIT 1;"); + $progress['stage1'] = json_decode($extend); + } + // 第二阶段 + if ($dayCount > $stageDayOne && $dayCount <= $stageDayTwoCount) { + $extend = Task::where('template_id',$templateInfo['id'])->where("extend->>'$.stage'", 2)->value('extend'); // Db::query("SELECT extend FROM `la_task` WHERE template_id={$templateInfo['id']} AND extend->>'$.stage' =2 LIMIT 1;"); + $taskInfo['stage2'] = json_decode($extend); + } + // 第三阶段 + if ($dayCount > $stageDayTwoCount && $dayCount <= $stageDayThreeCount) { + $extend = Task::where('template_id',$templateInfo['id'])->where("extend->>'$.stage'", 3)->value('extend'); + $taskInfo['stage3'] = json_decode($extend); + } + // 第四阶段 + if ($dayCount > $stageDayThreeCount) { + $extend = Task::where('template_id',$templateInfo['id'])->where("extend->>'$.stage'", 4)->value('extend'); + $taskInfo['stage4'] = json_decode($extend); + } + $taskInfo['progress'] = $progress; + return $taskInfo; + break; + case 'town_task_type_marketing_director_11': + // 镇合伙人市场部长-信息收集与镇级供应链促销 todo + return $taskInfo; + break; + case 'town_task_type_master_4': + // 镇合伙人负责人-督促种养殖商户和供应链商户交易 + return $taskInfo; + break; + case 'town_task_type_master_5': + // 镇合伙人负责人-村联络员招募 行政村数量 + $townCompany = Company::where('id', $taskInfo['company_id'])->find(); + $villageCount = Db::name('geo_village')->where('street_code', $townCompany['street'])->count(); + // 村公司 + $villageCompanyList = Company::where('street', $townCompany['street'])->where('company_type', 17)->select()->toArray(); + $ids = array_column($villageCompanyList, 'id'); + // 村联络员数量 + $liaisonManCount = User::where(['group_id'=>17])->whereIn('company_id', $ids)->count(); + + $progress['total'] = $villageCount; + $progress['done'] = $liaisonManCount; + $taskInfo['progress'] = $progress; + $taskInfo['done_list'] = $villageCompanyList; + return $taskInfo; + break; + case 'town_task_type_master_6': + // 镇合伙人负责人-促成村联络员入股甲方 + $townCompany = Company::where('id', $taskInfo['company_id'])->find(); + $villageCount = Db::name('geo_village')->where('street_code', $townCompany['street'])->count(); + $progress['total'] = $villageCount*6000 + 30*3000; + $taskList = Task::where('template_id', $taskInfo['template_id'])->select()->toArray(); + $ids = array_column($taskList, 'id'); + $progress['done'] = Approve::whereIn('task_id', $ids)->sum('amount'); + $taskInfo['progress'] = $progress; + return $taskInfo; + break; + case 'town_task_type_master_7': + // 镇合伙人负责人-政策补贴申请 + $progress['total'] = 430000; + $taskList = Task::where('template_id', $taskInfo['template_id'])->select()->toArray(); + $ids = array_column($taskList, 'id'); + $progress['done'] = Approve::whereIn('task_id', $ids)->sum('amount'); + $taskInfo['progress'] = $progress; + return $taskInfo; + break; + case 'town_task_type_master_8': + // 镇合伙人负责人-日常管理及其他临时任务 + return $taskInfo; + break; + case 'village_task_type_1': + // 村联络员-组建小组服务团队 + return $taskInfo; + break; + case 'village_task_type_2': + // 村联络员-协助小组服务团队完成辖区内的交易 + return $taskInfo; + break; + case 'village_task_type_3': + // 村联络员-负责辖区内农产品安检和溯源 + return $taskInfo; + break; + case 'village_task_type_4': + // 村联络员-督促小组服务团队入股 + return $taskInfo; + break; + case 'village_task_type_5': + // 村联络员-入股甲方公司 + return $taskInfo; + break; + case 'village_task_type_7': + // 村联络员-种养殖基地订单匹配 + return $taskInfo; + break; + case 'village_task_type_8': + // 村联络员-日常管理及其他临时任务 + return $taskInfo; + break; + } + } + + public static function countTargetProcureAmount($step) + { + $targetProcureAmount = 10000; + // 目标采购额每阶段增幅30% + for ($i = 1; $i < $step; $i++) { + $targetProcureAmount = self::increase($targetProcureAmount); + } + return $targetProcureAmount; + } + + // 后台手动结算任务 + public static function manualSettlement($taskId=0) + { + $taskInfo = Task::where(['id'=>$taskId])->with('director_info')->find(); + if (empty($taskInfo)) { + self::setError('任务不存在'); + return false; + } + + if ($taskInfo['status'] == 5) { + self::setError('任务已关闭,无法结算'); + return false; + } + + $template = TaskTemplate::where('id', $taskInfo['template_id'])->find(); + if (empty($template)) { + self::setError('任务安排模板不存在'); + return false; + } + + $taskDictInfo = DictData::where('id', $taskInfo['type'])->find(); + + switch ($taskDictInfo['value']) { + + case 1: + // 小组服务团队-档案更新任务 + case 2: + // 小组服务团队-三轮车任务 + case 3: + // 小组服务团队-平台交易任务 + case 4: + // 小组服务团队-其他任务 + case 5: + // 小组服务团队-入股任务 + $company = Company::where(['id'=>$taskInfo['company_id']])->find(); + $taskSchedulingPaln = TaskSchedulingPlan::where(['task_id' => $taskInfo['id']]) + ->withJoin(['scheduling'], 'left') + ->where('scheduling.company_type', 18) + ->where('is_pay',0) + ->with(['template_info']) + ->select() + ->toArray()[0]; + self::serviceGroupTaskSettlement($taskInfo, $company, $taskSchedulingPaln); + break; + case 'town_task_type_1': + // 镇合伙人服务部长-市场部长协助负责人开展工作任务 + + break; + case 'town_task_type_2': + // 镇合伙人服务部长-拓展小组服务团队任务 + + break; + case 'town_task_type_3': + // 镇合伙人服务部长-督促完成档案更新和三轮车任务 + + break; + case 'town_task_type_4': + // 镇合伙人服务部长-督促小组服务团队学习任务 + + break; + case 'town_task_type_5': + // 镇合伙人服务部长-督促完成需求收集和交易任务 + + break; + case 'town_task_type_6': + // 镇合伙人服务部长-督促入股村管理公司任务 + + break; + case 'town_task_type_7': + // 镇合伙人服务部长-安全工作任务 + + break; + case 'town_task_type_marketing_director_1': + // 镇合伙人-市场部长协助负责人开展日常工作 + + break; + case 'town_task_type_marketing_director_2': + // 镇合伙人市场部长-招驻供应链商户 + + break; + case 'town_task_type_marketing_director_3': + // 镇合伙人市场部长-协助供应链商户上架和库存更新 + + break; + case 'town_task_type_marketing_director_4': + // 镇合伙人市场部长-督促供应链商户采购任务 + + break; + case 'town_task_type_marketing_director_5': + // 镇合伙人市场部长-督促供应链商户销售任务 + + break; + case 'town_task_type_marketing_director_6': + // 镇合伙人市场部长-招驻一般商户 + + break; + case 'town_task_type_marketing_director_7': + // 镇合伙人市场部长-协助一般商户上架商品和库存更新 + + break; + case 'town_task_type_marketing_director_8': + // 镇合伙人市场部长-督促一般商户采购任务 + + break; + case 'town_task_type_marketing_director_9': + // 镇合伙人市场部长-督促一般商户销售任务 + + break; + case 'town_task_type_marketing_director_10': + // 镇合伙人市场部长-数字农贸宣传、加工业务建设和招商任务 + + break; + case 'town_task_type_marketing_director_11': + // 镇合伙人市场部长-信息收集与镇级供应链促销 + + break; + case 'town_task_type_master_2': + // 镇合伙人负责人-信息收集与镇级供应链促销 + + break; + case 'town_task_type_master_4': + // 镇合伙人负责人-督促种养殖商户和供应链商户交易 + + break; + case 'town_task_type_master_5': + // 镇合伙人负责人-村联络员招募 + + break; + case 'town_task_type_master_6': + // 镇合伙人负责人-促成村联络员入股甲方 + + break; + case 'town_task_type_master_7': + // 镇合伙人负责人-政策补贴申请 + + break; + case 'town_task_type_master_8': + // 镇合伙人负责人-日常管理及其他临时任务 + + break; + case 'village_task_type_1': + // 村联络员-组建小组服务团队 + + break; + case 'village_task_type_2': + // 村联络员-协助小组服务团队完成辖区内的交易 + + break; + case 'village_task_type_3': + // 村联络员-负责辖区内农产品安检和溯源 + + break; + case 'village_task_type_4': + // 村联络员-督促小组服务团队入股 + + break; + case 'village_task_type_5': + // 村联络员-入股甲方公司 + + break; + case 'village_task_type_7': + // 村联络员-种养殖基地订单匹配 + + break; + case 'village_task_type_8': + // 村联络员-日常管理及其他临时任务 + + break; + } + + } + + // 小组服务团队任务-手动结算、分润 + public static function serviceGroupTaskSettlement($data, $company, $datas = []) + { + $proportion = 0; + $name = $taskInfo['director_info']['nickname'] ??'特定人员'; + $accountRemark = '来自任务【' . $data['template_info']['title'] . '】,完成方:' . $name . ',任务结算'; + //总金额除以2等于不可提现账号金额和收益 + $master_money = bcdiv($data['money'], 2, 2); + //收益的百分之25为负责人的收益其余为成员的平分收益 + $master_money_user = bcdiv($master_money, 2, 2); + + //成员数量 + $userAll = User::where('company_id', $data['company_id'])->where('admin_id', 0)->field('id,user_money')->select(); + $yser_all_count = count($userAll); + $member_money_user = bcdiv($master_money_user, $yser_all_count, 2); + + //负责人 + $arr = [$company['user_id'], AccountLogEnum::UM_INC_TASK, AccountLogEnum::INC, $master_money_user, $datas['sn'], $remark . '获得收益' . $master_money_user . '元', ['company_id' => $data['company_id'], 'proportion' => $proportion], $data['status']]; + self::master($arr); + $arr_two = [$company['user_id'], AccountLogEnum::UM_INC_TASKUSER, AccountLogEnum::INC, $master_money_user, $datas['sn'], $remark. '获得账户余额' . $master_money_user . '元', ['company_id' => $data['company_id'], 'proportion' => $proportion], $data['status']]; + self::Account($arr_two); + + //成员 + foreach ($userAll as $value) { + $arr = [$value['id'], AccountLogEnum::UM_INC_TASK, AccountLogEnum::INC, $member_money_user, $datas['sn'], $remark . '获得收益' . $member_money_user . '元', ['company_id' => $data['company_id'], 'proportion' => $proportion], $data['status']]; + self::member($arr); + $arr_two = [$value['id'], AccountLogEnum::UM_INC_TASKUSER, AccountLogEnum::INC, $member_money_user, $datas['sn'], $remark. '获得账户余额' . $member_money_user . '元', ['company_id' => $data['company_id'], 'proportion' => $proportion], $data['status']]; + self::Account($arr_two); + } + + //公司 + $deposit_count = bcadd($company['deposit'], $master_money, 2); + self::AccountLog($data['company_id'], $deposit_count, $master_money); + + $company_money_count = bcadd($company['company_money'], $master_money, 2); + self::AccountLog($data['company_id'], $company_money_count, $master_money); + Company::where('id', $data['company_id'])->update(['deposit' => Db::raw('deposit+' . $master_money), 'company_money' => Db::raw('company_money+' . $master_money)]); + } + + public static function AccountLog($companyId, $left_amount, $changeAmount, $change_object = 1, $change_type = 1, $action = 1) + { + $company_log = [ + 'sn' => generate_sn(UserAccountLog::class, 'sn', 20), + 'company_id' => $companyId, + 'change_object' => $change_object, //变动对象 + 'change_type' => $change_type, //变动类型 + 'action' => $action, //1-增加 2-减少 + 'left_amount' => $left_amount, //变动后数量 + 'change_amount' => $changeAmount, //变动数量 + 'status' => 1, + ]; + CompanyAccountLog::create($company_log); + } + + /**负责人的分润 + * @param $data + */ + private static function master($data) + { + User::where('id', $data[0])->update(['deposit'=>Db::raw('deposit+' . $data[3]),'user_money'=>Db::raw('user_money+' . $data[3])]); + return AccountLogLogic::add($data[0], $data[1], $data[2], $data[3], $data[4], $data[5], $data[6], $data[7]); + } + + /**成员分润 + * @param $data + */ + private static function member($data) + { + User::where('id', $data[0])->update(['deposit'=>Db::raw('deposit+' . $data[3]),'user_money'=>Db::raw('user_money+' . $data[3])]); + return AccountLogLogic::add($data[0], $data[1], $data[2], $data[3], $data[4], $data[5], $data[6], $data[7]); + } + + private static function Account($data) + { + return AccountLogLogic::add($data[0], $data[1], $data[2], $data[3], $data[4], $data[5], $data[6], $data[7]); + } }