From b08fcdd13feb37f64c02c218ecade206899f79a4 Mon Sep 17 00:00:00 2001
From: chenbo <709206448@qq.com>
Date: Wed, 27 Dec 2023 11:36:49 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E5=AE=89=E6=8E=92-1.?=
 =?UTF-8?q?=E5=AE=9A=E6=97=B6=E4=B8=8B=E5=8F=91=E4=BB=BB=E5=8A=A12.?=
 =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E8=BF=9B=E5=BA=A6=E5=92=8C=E8=AF=A6=E6=83=85?=
 =?UTF-8?q?3=E5=B8=82=E5=9C=BA=E9=83=A8=E9=95=BF/=E6=9C=8D=E5=8A=A1?=
 =?UTF-8?q?=E9=83=A8=E9=95=BF=E5=8D=8F=E5=8A=A9=E8=B4=9F=E8=B4=A3=E4=BA=BA?=
 =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E4=BB=BB=E5=8A=A1=E7=BB=93=E7=AE=97=E9=80=BB?=
 =?UTF-8?q?=E8=BE=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 app/adminapi/controller/TaskController.php |   19 +
 app/api/controller/CeshiController.php     |   23 +-
 app/api/controller/CronController.php      |    3 +-
 app/api/controller/TaskController.php      |   11 +
 app/common/logic/ShopRequestLogic.php      |  131 +++
 app/common/logic/task/TaskLogic.php        | 1131 ++++++++++++++++++--
 6 files changed, 1238 insertions(+), 80 deletions(-)

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]);
+    }
 }