Просмотр исходного кода

Merge branch 'master' into part_0504

dongxiaoqin 11 месяцев назад
Родитель
Сommit
6547fea2d3

+ 1 - 1
app/adminapi/controller/external/ExternalConsultationController.php

@@ -81,7 +81,7 @@ class ExternalConsultationController extends BaseAdminController
         $params = (new ExternalConsultationValidate())->post()->goCheck('edit');
         $result = ExternalConsultationLogic::order($params);
         if (true === $result) {
-            return $this->success('编辑成功', [], 1, 1);
+            return $this->success('下单成功', [], 1, 1);
         }
         return $this->fail(ExternalConsultationLogic::getError());
     }

+ 17 - 0
app/adminapi/controller/master_worker/MasterWorkerServiceOrderController.php

@@ -82,4 +82,21 @@ class MasterWorkerServiceOrderController extends BaseAdminController
     }
 
 
+
+    /**
+     * @notes 删除
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2024/09/28 15:31
+     */
+    public function behalfVerifiedelete()
+    {
+        $params = request()->post();
+        MasterWorkerServiceOrderLogic::behalfVerifiedelete($params);
+        return $this->success('删除成功', [], 1, 1);
+    }
+
+
+
+
 }

+ 11 - 1
app/adminapi/controller/sale/SaleAnalysisController.php

@@ -19,6 +19,7 @@ namespace app\adminapi\controller\sale;
 use app\adminapi\controller\BaseAdminController;
 use app\adminapi\lists\sale\PropertyHeadAnalysisLists;
 use app\adminapi\lists\sale\SaleAnalysisLists;
+use app\adminapi\lists\sale\SaleCommissionLists;
 use app\adminapi\lists\sale\SaleGroupAnalysisLists;
 use app\adminapi\lists\sale\SaleLists;
 use app\adminapi\lists\sale\SaleMasterWorkerLists;
@@ -69,5 +70,14 @@ class SaleAnalysisController extends BaseAdminController
         return $this->dataLists(new SaleMasterWorkerLists());
     }
 
-
+    /**
+     * 销售提成统计
+     * @return \think\response\Json
+     * @author liugc <466014217@qq.com>
+     * @date 2025/5/5 9:07
+     */
+    public function saleCommissionLists()
+    {
+        return $this->dataLists(new SaleCommissionLists());
+    }
 }

+ 108 - 0
app/adminapi/controller/works/ServiceWorkAnomalousController.php

@@ -0,0 +1,108 @@
+<?php
+// +----------------------------------------------------------------------
+// | likeadmin快速开发前后端分离管理后台(PHP版)
+// +----------------------------------------------------------------------
+// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
+// | 开源版本可自由商用,可去除界面版权logo
+// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
+// | github下载:https://github.com/likeshop-github/likeadmin
+// | 访问官网:https://www.likeadmin.cn
+// | likeadmin团队 版权所有 拥有最终解释权
+// +----------------------------------------------------------------------
+// | author: likeadminTeam
+// +----------------------------------------------------------------------
+
+
+namespace app\adminapi\controller\works;
+
+
+use app\adminapi\controller\BaseAdminController;
+use app\adminapi\lists\works\ServiceWorkAnomalousLists;
+use app\adminapi\logic\works\ServiceWorkAnomalousLogic;
+use app\adminapi\validate\works\ServiceWorkAnomalousValidate;
+
+
+/**
+ * ServiceWorkAnomalous控制器
+ * Class ServiceWorkAnomalousController
+ * @package app\adminapi\controller
+ */
+class ServiceWorkAnomalousController extends BaseAdminController
+{
+
+
+    /**
+     * @notes 获取列表
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2025/05/04 15:41
+     */
+    public function lists()
+    {
+        return $this->dataLists(new ServiceWorkAnomalousLists());
+    }
+
+
+    /**
+     * @notes 添加
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2025/05/04 15:41
+     */
+    public function add()
+    {
+        $params = (new ServiceWorkAnomalousValidate())->post()->goCheck('add');
+        $result = ServiceWorkAnomalousLogic::add($params);
+        if (true === $result) {
+            return $this->success('添加成功', [], 1, 1);
+        }
+        return $this->fail(ServiceWorkAnomalousLogic::getError());
+    }
+
+
+    /**
+     * @notes 编辑
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2025/05/04 15:41
+     */
+    public function edit()
+    {
+        $params = (new ServiceWorkAnomalousValidate())->post()->goCheck('edit');
+        $result = ServiceWorkAnomalousLogic::edit($params);
+        if (true === $result) {
+            return $this->success('编辑成功', [], 1, 1);
+        }
+        return $this->fail(ServiceWorkAnomalousLogic::getError());
+    }
+
+
+    /**
+     * @notes 删除
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2025/05/04 15:41
+     */
+    public function delete()
+    {
+        $params = (new ServiceWorkAnomalousValidate())->post()->goCheck('delete');
+        ServiceWorkAnomalousLogic::delete($params);
+        return $this->success('删除成功', [], 1, 1);
+    }
+
+
+    /**
+     * @notes 获取详情
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2025/05/04 15:41
+     */
+    public function detail()
+    {
+        $params = (new ServiceWorkAnomalousValidate())->goCheck('detail');
+        $result = ServiceWorkAnomalousLogic::detail($params);
+        return $this->data($result);
+    }
+
+
+}

+ 6 - 4
app/adminapi/lists/master_worker/MasterWorkerServiceOrderLists.php

@@ -58,10 +58,12 @@ class MasterWorkerServiceOrderLists extends BaseAdminDataLists implements ListsS
             $where[] = [ 'a.id','IN',$period_ids?:[0]];
         }
         if (isset($this->params['is_recruiting_behalf']) && !empty($this->params['is_recruiting_behalf'])) {
+            $where[] = ['a.recruiting_behalf','<>' ,""];
             if ($this->params['is_recruiting_behalf'] == 1){
-                $where[] = ['a.recruiting_behalf','<>' ,""];
-                $master_worker_ids = MasterWorkerBehalf::column('master_worker_id')??[];
-                $master_worker_ids && $where[] = ['a.id','not in' ,$master_worker_ids];
+                if (isset($this->params['accounting']) && !empty($this->params['accounting'])) {
+                    $this->params['accounting'] == 2 && $where[] = ['a.id','in' ,MasterWorkerBehalf::column('master_worker_id')??[]];
+                    $this->params['accounting'] == 1 && $where[] = ['a.id','not in' ,MasterWorkerBehalf::column('master_worker_id')??[]];
+                }
             }else
                 $where[] = ['a.recruiting_behalf','=' ,""];
         }
@@ -88,7 +90,7 @@ class MasterWorkerServiceOrderLists extends BaseAdminDataLists implements ListsS
         }
         // ( ( b.finished_time >= 1743436800  AND b.finished_time < 1746028800 ) or ( b.create_time >= 1743436800  AND b.create_time < 1746028800) )
         if (!empty($this->params['start_time']) && !empty($this->params['end_time'])) {
-            $this->sqlJoin = ' and ( ( b.finished_time >= '.strtotime($this->params['start_time']).'  AND b.finished_time < '.strtotime($this->params['end_time']).' ) or ( b.create_time >= '.strtotime($this->params['start_time']).'  AND b.create_time < '.strtotime($this->params['end_time']).') )';
+            $this->sqlJoin = ' and ( ( b.finished_time >= '.strtotime($this->params['start_time']).'  AND b.finished_time < '.(strtotime($this->params['end_time'])+86399).' ) or ( b.create_time >= '.strtotime($this->params['start_time']).'  AND b.create_time < '.(strtotime($this->params['end_time'])+86399).') )';
         }
         //dd($this->sqlJoin);
         $where[] = ['a.audit_state','=' ,1];

+ 1 - 0
app/adminapi/lists/sale/SaleAnalysisLists.php

@@ -101,6 +101,7 @@ class SaleAnalysisLists extends BaseAdminDataLists implements ListsSearchInterfa
             ->where($this->searchWhere)
             ->where($this->queryWhere())
             ->where($this->queryDataWhere())
+            ->where('a.sale_id','>',0)
             ->where('a.sale_type', 'in', [1, 2])
             //->where('a.order_status', 3)
             ->where('b.service_status', 3)

+ 272 - 0
app/adminapi/lists/sale/SaleCommissionLists.php

@@ -0,0 +1,272 @@
+<?php
+// +----------------------------------------------------------------------
+// | likeadmin快速开发前后端分离管理后台(PHP版)
+// +----------------------------------------------------------------------
+// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
+// | 开源版本可自由商用,可去除界面版权logo
+// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
+// | github下载:https://github.com/likeshop-github/likeadmin
+// | 访问官网:https://www.likeadmin.cn
+// | likeadmin团队 版权所有 拥有最终解释权
+// +----------------------------------------------------------------------
+// | author: likeadminTeam
+// +----------------------------------------------------------------------
+
+namespace app\adminapi\lists\sale;
+
+
+use app\adminapi\lists\BaseAdminDataLists;
+use app\common\model\group_activity\GroupOrder;
+use app\common\model\group_activity\GroupUserOrder;
+use app\common\model\master_worker\MasterWorker;
+use app\common\model\master_worker_register\MasterWorkerRegister;
+use app\common\lists\ListsSearchInterface;
+use app\common\model\property\PropertyHead;
+use app\common\model\sale\Sale;
+use app\workerapi\logic\MasterWorkerLogic;
+use think\facade\Db;
+
+
+/**
+ * Sale列表
+ * Class SaleLists
+ * @package app\adminapi\lists
+ */
+class SaleCommissionLists extends BaseAdminDataLists implements ListsSearchInterface
+{
+
+    /**
+     * @notes 设置搜索条件
+     * @return \string[][]
+     * @author likeadmin
+     * @date 2024/12/15 10:53
+     */
+    public function setSearch(): array
+    {
+        return [
+            '=' => ['id'],
+
+        ];
+    }
+
+    /*public function queryWhere()
+    {
+        $where = [];
+        if(isset($this->params['time_range']) && $this->params['time_range']){
+            $startDateTime = strtotime($this->params['time_range'][0]);
+            $endDateTime = strtotime($this->params['time_range'][1])+86400-1;
+            $where[] = ['b.finished_time','BETWEEN',[$startDateTime,$endDateTime]];
+        }
+        return $where;
+    }*/
+
+
+    public function queryWhereTime()
+    {
+        //dd($this->params);
+        if(isset($this->params['time_range']) && $this->params['time_range']){
+            $startDateTime = strtotime($this->params['time_range'][0]);
+            $endDateTime = strtotime($this->params['time_range'][1])+86400-1;
+        } else {
+            $startDateTime = strtotime(date('Y-m-01',time()));
+            $endDateTime = time();
+        }
+        return [$startDateTime,$endDateTime];
+    }
+
+
+    /**
+     * 获取数据权限
+     * $this->adminInfo['data_rules']
+     * province city admin_id sale_group_id sale_id  property_head_id
+     */
+    public function queryDataWhere(){
+        $where = [];
+        $data_rules = $this->adminInfo['data_rules'];
+        if (isset($data_rules['sale_group_id']) && !empty($data_rules['sale_group_id'])) {
+            $where[] = ['sale_group_id','in' ,$data_rules['sale_group_id']];
+        }
+        if (isset($data_rules['sale_id']) && !empty($data_rules['sale_id'])) {
+            $where[] = ['id','in' ,$data_rules['sale_id']];
+        }
+        return $where;
+    }
+    /**
+     * @notes 获取列表
+     * @return array
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     * @author likeadmin
+     * @date 2024/12/15 10:53
+     */
+    public function lists(): array
+    {
+        $list = Sale::with('saleGroupInfo')->where($this->searchWhere)
+            ->where($this->queryDataWhere())
+            ->field(['id','sale_name','mobile','sale_group_id',
+                    Db::raw("'".($this->queryWhereTime()[0]??'')."' AS start_date"),
+                    Db::raw("'".($this->queryWhereTime()[1]??'')."' AS end_date"),
+            ])
+            ->limit($this->limitOffset, $this->limitLength)
+            ->select()->toArray();
+
+        $passes_counts = $this->passesCounts($list,$this->queryWhereTime())??[];
+        $property_counts = $this->propertyCounts($list,$this->queryWhereTime())??[];
+        $group_counts = $this->groupCounts($list,$this->queryWhereTime())??[];
+
+        // $this->passesMerits($passes_counts[$item['id']]??0) * $passes_counts[$item['id']]??0;
+        // $this->propertyMerits($property_counts[$item['id']]??0) * $property_counts[$item['id']]??0;
+        //  * 0.05
+        foreach ($list as &$item) {
+            $item['passes_counts'] = $passes_counts[$item['id']]??0;
+            $item['passes_merits'] = $this->passesMerits($passes_counts[$item['id']]??0);
+
+            $item['property_counts'] = $property_counts[$item['id']]??0;
+            $item['property_merits'] = $this->propertyMerits($property_counts[$item['id']]??0);
+
+            $item['group_counts'] = $group_counts[$item['id']]??0;
+            $item['group_merits'] = $this->groupMerits($group_counts[$item['id']]??0);
+
+            $item['all_merits'] = $item['passes_merits'] + $item['property_merits'] + $item['group_merits'];
+        }
+        return $list;
+    }
+
+
+    /**
+     * @notes 获取数量
+     * @return int
+     * @author likeadmin
+     * @date 2024/12/15 10:53
+     */
+    public function count(): int
+    {
+        return Sale::where($this->searchWhere)->where($this->queryDataWhere())->count();
+    }
+
+    public function setExcelComplexFields(): array
+    {
+        $zh_cn_fields = [
+            '销售组','销售员', '销售手机号','工程师审核通过数量','入驻提成绩效','物业签约合计分数','物业提成绩效','拼团总流水','拼团提成绩效','总提成绩效'
+            ,'开始日期','结束日期'
+        ];
+        $data_fields = [function($row){ return $row['saleGroupInfo']['sale_name']??''; },'sale_name','mobile',
+            'passes_counts','passes_merits','property_counts','property_merits','group_counts','group_merits','all_merits'
+            ,'start_date','end_date'
+        ];
+        return [
+            'zh_cn_fields' => $zh_cn_fields,
+            'data_fields' => $data_fields
+        ];
+    }
+
+
+    public function passesCounts($list,$whereTime)
+    {
+        $sale_ids = array_column($list,'id');
+        $passes_counts = [];
+        foreach ($sale_ids as $sale_id) {
+            $worker_ids = MasterWorkerRegister::where('sale_id','>',0)->where('worker_id','>',0)
+                ->where('sale_id',$sale_id)
+                ->whereBetween('create_time',[$whereTime[0],$whereTime[1]])
+                ->column('worker_id');
+            foreach ($worker_ids as $worker_id) {
+                !isset($passes_counts[$sale_id]) && $passes_counts[$sale_id] = 0;
+                $passes_counts[$sale_id] += $this->requiredMasterWorker($worker_id)?1:0;
+            }
+        }
+        //dd($passes_counts);
+        return $passes_counts;
+    }
+    public function passesMerits($value)
+    {
+        switch (true){
+            case (60 <= $value && $value < 70):
+                return 200;
+            case (70 <= $value && $value < 80):
+                return 400;
+            case (80 <= $value && $value < 90):
+                return 600;
+            case (90 <= $value && $value < 100):
+                return 800;
+            case (100 <= $value ):
+                return 1000;
+            case ($value < 60):
+            default:
+                return 0;
+        }
+    }
+
+    public function propertyCounts($list,$whereTime)
+    {
+        $sale_ids = array_column($list,'id');
+        $propertyHeads = PropertyHead::where('sale_id','>',0)->where('is_cooperate','=',1)
+            ->where('sale_id','in',$sale_ids)
+            ->whereBetween('create_time',[$whereTime[0],$whereTime[1]])
+            ->field([
+                'sale_id',
+                Db::raw("SUM(rating_value) AS rating_values")
+            ])
+            ->group('sale_id')
+            ->select()->toArray();
+        return array_column($propertyHeads,'rating_values','sale_id');
+    }
+
+    public function propertyMerits($value)
+    {
+        switch (true){
+            case (60 <= $value && $value < 70):
+                return 200;
+            case (70 <= $value && $value < 80):
+                return 400;
+            case (80 <= $value && $value < 90):
+                return 600;
+            case (90 <= $value && $value < 100):
+                return 800;
+            case (100 <= $value ):
+                return 1000;
+            case ($value < 60):
+            default:
+                return 0;
+        }
+    }
+
+
+    public function groupCounts($list,$whereTime)
+    {
+        $sale_ids = array_column($list,'id');
+        $groupCounts = [];
+        foreach ($sale_ids as $sale_id) {
+            $propertyHeadIds = PropertyHead::where('sale_id','>',0)->where('is_cooperate','=',1)->where('sale_id',$sale_id)->column('id')??[];
+            $groupOrderIds = GroupOrder::whereIn('property_head_id',$propertyHeadIds)->column('id')??[];
+            //->whereB('pay_time',1)->
+            $paid_amounts = GroupUserOrder::whereIn('group_order_id',$groupOrderIds)
+                ->where('status',1)
+                ->whereBetween('pay_time',[$whereTime[0],$whereTime[1]])
+                ->sum('paid_amount');
+            $groupCounts[$sale_id] = $paid_amounts;
+        }
+        return $groupCounts;
+    }
+
+    public function groupMerits($value)
+    {
+        return $value;
+    }
+
+
+    public function requiredMasterWorker($master_worker_id): bool
+    {
+        $masterWorker = MasterWorker::where('id',$master_worker_id)->findOrEmpty();
+        if(!$masterWorker->isEmpty()){
+            // 该工程师所有必须任务是否完成
+            $taskRequired = MasterWorkerLogic::taskRequired($master_worker_id,$masterWorker->identity_source);
+            if($masterWorker->audit_state == 1 && $taskRequired){
+                return true;
+            }
+        }
+        return false;
+    }
+
+}

+ 45 - 10
app/adminapi/lists/sale/SaleMasterWorkerLists.php

@@ -16,9 +16,11 @@ namespace app\adminapi\lists\sale;
 
 
 use app\adminapi\lists\BaseAdminDataLists;
+use app\common\model\master_worker\MasterWorker;
 use app\common\model\master_worker_register\MasterWorkerRegister;
 use app\common\lists\ListsSearchInterface;
 use app\common\model\sale\Sale;
+use app\workerapi\logic\MasterWorkerLogic;
 use think\facade\Db;
 
 
@@ -45,15 +47,16 @@ class SaleMasterWorkerLists extends BaseAdminDataLists implements ListsSearchInt
         ];
     }
 
-    public function queryWhere()
+    public function queryWhereTime()
     {
-        $where = [];
         if(isset($this->params['time_range']) && $this->params['time_range']){
             $startDateTime = strtotime($this->params['time_range'][0]);
             $endDateTime = strtotime($this->params['time_range'][1])+86400-1;
-            $where[] = ['create_time','BETWEEN',[$startDateTime,$endDateTime]];
+        } else {
+            $startDateTime = strtotime(date('Y-m-01',time()));
+            $endDateTime = time();
         }
-        return $where;
+        return [$startDateTime,$endDateTime];
     }
     /**
      * 获取数据权限
@@ -89,20 +92,41 @@ class SaleMasterWorkerLists extends BaseAdminDataLists implements ListsSearchInt
      */
     public function lists(): array
     {
-        return MasterWorkerRegister::with(['sale'])
+        $list = MasterWorkerRegister::with(['sale'])
             ->where('sale_id','>',0)
             ->where($this->searchWhere)
-            ->where($this->queryWhere())
+            ->whereBetween('create_time',$this->queryWhereTime())
             ->where($this->queryDataWhere())
             ->field([
                 'sale_id',
                 Db::raw("COUNT(id) AS register_count,SUM(CASE WHEN worker_id > 0 THEN 1 ELSE 0 END) AS settled_count"),
-                Db::raw("'".($this->params['time_range'][0]??'')."' AS start_date"),
-                Db::raw("'".($this->params['time_range'][1]??'')."' AS end_date"),
+                Db::raw("'".($this->queryWhereTime()[0]??'')."' AS start_date"),
+                Db::raw("'".($this->queryWhereTime()[1]??'')."' AS end_date"),
             ])
             ->group('sale_id')
             ->limit($this->limitOffset, $this->limitLength)
             ->select()->toArray();
+
+        // tmp - 统计已完成所有必须任务工程师数
+        $sale_ids = array_column($list,'sale_id');
+        $passes_counts = [];
+        foreach ($sale_ids as $sale_id) {
+            $worker_ids = MasterWorkerRegister::where('sale_id','>',0)->where('worker_id','>',0)
+                ->where('sale_id',$sale_id)
+                ->where($this->searchWhere)
+                ->whereBetween('create_time',$this->queryWhereTime())
+                ->where($this->queryDataWhere())
+                ->column('worker_id');
+            foreach ($worker_ids as $worker_id) {
+                !isset($passes_counts[$sale_id]) && $passes_counts[$sale_id] = 0;
+                $passes_counts[$sale_id] += $this->requiredMasterWorker($worker_id)?1:0;
+            }
+        }
+        //dd($passes_counts);
+        foreach ($list as &$item) {
+            $item['passes_count'] = $passes_counts[$item['sale_id']]??0;
+        }
+        return $list;
     }
 
 
@@ -117,7 +141,7 @@ class SaleMasterWorkerLists extends BaseAdminDataLists implements ListsSearchInt
         return MasterWorkerRegister::with(['sale'])
             ->where('sale_id','>',0)
             ->where($this->searchWhere)
-            ->where($this->queryWhere())
+            ->whereBetween('create_time',$this->queryWhereTime())
             ->where($this->queryDataWhere())
             ->field(['sale_id'])
             ->group('sale_id')
@@ -141,6 +165,17 @@ class SaleMasterWorkerLists extends BaseAdminDataLists implements ListsSearchInt
     }
 
 
-
+    public function requiredMasterWorker($master_worker_id): bool
+    {
+        $masterWorker = MasterWorker::where('id',$master_worker_id)->findOrEmpty();
+        if(!$masterWorker->isEmpty()){
+            // 该工程师所有必须任务是否完成
+            $taskRequired = MasterWorkerLogic::taskRequired($master_worker_id,$masterWorker->identity_source);
+            if($masterWorker->audit_state == 1 && $taskRequired){
+                return true;
+            }
+        }
+        return false;
+    }
 
 }

+ 77 - 0
app/adminapi/lists/works/ServiceWorkAnomalousLists.php

@@ -0,0 +1,77 @@
+<?php
+// +----------------------------------------------------------------------
+// | likeadmin快速开发前后端分离管理后台(PHP版)
+// +----------------------------------------------------------------------
+// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
+// | 开源版本可自由商用,可去除界面版权logo
+// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
+// | github下载:https://github.com/likeshop-github/likeadmin
+// | 访问官网:https://www.likeadmin.cn
+// | likeadmin团队 版权所有 拥有最终解释权
+// +----------------------------------------------------------------------
+// | author: likeadminTeam
+// +----------------------------------------------------------------------
+
+namespace app\adminapi\lists\works;
+
+
+use app\adminapi\lists\BaseAdminDataLists;
+use app\common\model\works\ServiceWorkAnomalous;
+use app\common\lists\ListsSearchInterface;
+
+
+/**
+ * ServiceWorkAnomalous列表
+ * Class ServiceWorkAnomalousLists
+ * @package app\adminapi\lists
+ */
+class ServiceWorkAnomalousLists extends BaseAdminDataLists implements ListsSearchInterface
+{
+
+
+    /**
+     * @notes 设置搜索条件
+     * @return \string[][]
+     * @author likeadmin
+     * @date 2025/05/04 15:41
+     */
+    public function setSearch(): array
+    {
+        return [
+            '=' => ['work_id', 'reason_type', 'reason', 'status', 'remark'],
+        ];
+    }
+
+
+    /**
+     * @notes 获取列表
+     * @return array
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     * @author likeadmin
+     * @date 2025/05/04 15:41
+     */
+    public function lists(): array
+    {
+        return ServiceWorkAnomalous::where($this->searchWhere)
+            ->field(['id', 'work_id', 'reason_type', 'reason', 'status', 'remark'])
+            ->limit($this->limitOffset, $this->limitLength)
+            ->order(['id' => 'desc'])
+            ->select()
+            ->toArray();
+    }
+
+
+    /**
+     * @notes 获取数量
+     * @return int
+     * @author likeadmin
+     * @date 2025/05/04 15:41
+     */
+    public function count(): int
+    {
+        return ServiceWorkAnomalous::where($this->searchWhere)->count();
+    }
+
+}

+ 3 - 0
app/adminapi/logic/external/ExternalConsultationLogic.php

@@ -45,6 +45,7 @@ class ExternalConsultationLogic extends BaseLogic
                 'external_platform_id' => $params['external_platform_id'],
                 'shop_code' => $params['shop_code'],
                 'shop_name' => $params['shop_name'],
+                'service_name' => $params['service_name']??'',
                 'unique_code' => $params['unique_code'],
                 'solution_type' => $params['solution_type'],
                 'form_detail' => $params['form_detail'],
@@ -84,6 +85,7 @@ class ExternalConsultationLogic extends BaseLogic
                 'external_platform_id' => $params['external_platform_id'],
                 'shop_code' => $params['shop_code'],
                 'shop_name' => $params['shop_name'],
+                'service_name' => $params['service_name']??'',
                 'unique_code' => $params['unique_code'],
                 'solution_type' => $params['solution_type'],
                 'form_detail' => $params['form_detail'],
@@ -133,6 +135,7 @@ class ExternalConsultationLogic extends BaseLogic
                 'external_platform_id' => $params['external_platform_id'],
                 'shop_code' => $params['shop_code'],
                 'shop_name' => $params['shop_name'],
+                'service_name' => $params['service_name']??'',
                 'unique_code' => $params['unique_code'],
                 'solution_type' => $params['solution_type'],
                 'form_detail' => $params['form_detail'],

+ 20 - 1
app/adminapi/logic/master_worker/MasterWorkerServiceOrderLogic.php

@@ -30,5 +30,24 @@ class MasterWorkerServiceOrderLogic extends BaseLogic
             return false;
         }
     }
-
+    /**
+     * @notes 删除
+     * @param array $params
+     * @return bool
+     * @author likeadmin
+     * @date 2024/09/28 15:31
+     */
+    public static function behalfVerifiedelete(array $params): bool
+    {
+        Db::startTrans();
+        try {
+            MasterWorkerBehalf::where('master_worker_id',$params['master_worker_id'])->delete();
+            Db::commit();
+            return true;
+        } catch (\Exception $e) {
+            Db::rollback();
+            self::setError($e->getMessage());
+            return false;
+        }
+    }
 }

+ 114 - 0
app/adminapi/logic/works/ServiceWorkAnomalousLogic.php

@@ -0,0 +1,114 @@
+<?php
+// +----------------------------------------------------------------------
+// | likeadmin快速开发前后端分离管理后台(PHP版)
+// +----------------------------------------------------------------------
+// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
+// | 开源版本可自由商用,可去除界面版权logo
+// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
+// | github下载:https://github.com/likeshop-github/likeadmin
+// | 访问官网:https://www.likeadmin.cn
+// | likeadmin团队 版权所有 拥有最终解释权
+// +----------------------------------------------------------------------
+// | author: likeadminTeam
+// +----------------------------------------------------------------------
+
+namespace app\adminapi\logic\works;
+
+
+use app\common\model\works\ServiceWorkAnomalous;
+use app\common\logic\BaseLogic;
+use think\facade\Db;
+
+
+/**
+ * ServiceWorkAnomalous逻辑
+ * Class ServiceWorkAnomalousLogic
+ * @package app\adminapi\logic
+ */
+class ServiceWorkAnomalousLogic extends BaseLogic
+{
+
+
+    /**
+     * @notes 添加
+     * @param array $params
+     * @return bool
+     * @author likeadmin
+     * @date 2025/05/04 15:41
+     */
+    public static function add(array $params): bool
+    {
+        Db::startTrans();
+        try {
+            ServiceWorkAnomalous::create([
+                'work_id' => $params['work_id'],
+                'reason_type' => $params['reason_type'],
+                'reason' => $params['reason'],
+                'status' => $params['status'],
+                'remark' => $params['remark']
+            ]);
+
+            Db::commit();
+            return true;
+        } catch (\Exception $e) {
+            Db::rollback();
+            self::setError($e->getMessage());
+            return false;
+        }
+    }
+
+
+    /**
+     * @notes 编辑
+     * @param array $params
+     * @return bool
+     * @author likeadmin
+     * @date 2025/05/04 15:41
+     */
+    public static function edit(array $params): bool
+    {
+        Db::startTrans();
+        try {
+            ServiceWorkAnomalous::where('id', $params['id'])->update([
+                'work_id' => $params['work_id'],
+                'reason_type' => $params['reason_type'],
+                'reason' => $params['reason'],
+                'status' => $params['status'],
+                'remark' => $params['remark']
+            ]);
+
+            Db::commit();
+            return true;
+        } catch (\Exception $e) {
+            Db::rollback();
+            self::setError($e->getMessage());
+            return false;
+        }
+    }
+
+
+    /**
+     * @notes 删除
+     * @param array $params
+     * @return bool
+     * @author likeadmin
+     * @date 2025/05/04 15:41
+     */
+    public static function delete(array $params): bool
+    {
+        return ServiceWorkAnomalous::destroy($params['id']);
+    }
+
+
+    /**
+     * @notes 获取详情
+     * @param $params
+     * @return array
+     * @author likeadmin
+     * @date 2025/05/04 15:41
+     */
+    public static function detail($params): array
+    {
+        return ServiceWorkAnomalous::findOrEmpty($params['id'])->toArray();
+    }
+}

+ 100 - 0
app/adminapi/validate/works/ServiceWorkAnomalousValidate.php

@@ -0,0 +1,100 @@
+<?php
+// +----------------------------------------------------------------------
+// | likeadmin快速开发前后端分离管理后台(PHP版)
+// +----------------------------------------------------------------------
+// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
+// | 开源版本可自由商用,可去除界面版权logo
+// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
+// | github下载:https://github.com/likeshop-github/likeadmin
+// | 访问官网:https://www.likeadmin.cn
+// | likeadmin团队 版权所有 拥有最终解释权
+// +----------------------------------------------------------------------
+// | author: likeadminTeam
+// +----------------------------------------------------------------------
+
+namespace app\adminapi\validate\works;
+
+
+use app\common\validate\BaseValidate;
+
+
+/**
+ * ServiceWorkAnomalous验证器
+ * Class ServiceWorkAnomalousValidate
+ * @package app\adminapi\validate
+ */
+class ServiceWorkAnomalousValidate extends BaseValidate
+{
+
+     /**
+      * 设置校验规则
+      * @var string[]
+      */
+    protected $rule = [
+        'id' => 'require',
+        'work_id' => 'require',
+        'reason_type' => 'require',
+        'status' => 'require',
+    ];
+
+
+    /**
+     * 参数描述
+     * @var string[]
+     */
+    protected $field = [
+        'id' => 'id',
+        'work_id' => '服务工单ID',
+        'reason_type' => '原因类型:0=未知,1=金额错误',
+        'status' => '处理状态:0=未处理,1=已处理',
+    ];
+
+
+    /**
+     * @notes 添加场景
+     * @return ServiceWorkAnomalousValidate
+     * @author likeadmin
+     * @date 2025/05/04 15:41
+     */
+    public function sceneAdd()
+    {
+        return $this->only(['work_id','reason_type','status']);
+    }
+
+
+    /**
+     * @notes 编辑场景
+     * @return ServiceWorkAnomalousValidate
+     * @author likeadmin
+     * @date 2025/05/04 15:41
+     */
+    public function sceneEdit()
+    {
+        return $this->only(['id','work_id','reason_type','status']);
+    }
+
+
+    /**
+     * @notes 删除场景
+     * @return ServiceWorkAnomalousValidate
+     * @author likeadmin
+     * @date 2025/05/04 15:41
+     */
+    public function sceneDelete()
+    {
+        return $this->only(['id']);
+    }
+
+
+    /**
+     * @notes 详情场景
+     * @return ServiceWorkAnomalousValidate
+     * @author likeadmin
+     * @date 2025/05/04 15:41
+     */
+    public function sceneDetail()
+    {
+        return $this->only(['id']);
+    }
+
+}

+ 34 - 0
app/common/model/works/ServiceWorkAnomalous.php

@@ -0,0 +1,34 @@
+<?php
+// +----------------------------------------------------------------------
+// | likeadmin快速开发前后端分离管理后台(PHP版)
+// +----------------------------------------------------------------------
+// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
+// | 开源版本可自由商用,可去除界面版权logo
+// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
+// | github下载:https://github.com/likeshop-github/likeadmin
+// | 访问官网:https://www.likeadmin.cn
+// | likeadmin团队 版权所有 拥有最终解释权
+// +----------------------------------------------------------------------
+// | author: likeadminTeam
+// +----------------------------------------------------------------------
+
+namespace app\common\model\works;
+
+
+use app\common\model\BaseModel;
+
+
+
+/**
+ * ServiceWorkAnomalous模型
+ * Class ServiceWorkAnomalous
+ * @package app\common\model
+ */
+class ServiceWorkAnomalous extends BaseModel
+{
+    
+    protected $name = 'service_work_anomalous';
+    
+
+    
+}

+ 1 - 0
config/export.php

@@ -20,5 +20,6 @@ return [
         '10' =>  'works.ServiceWorkLists',
         '11' =>  'group_activity.GroupUserOrderLists',
         '12' =>  'sale.SaleMasterWorkerLists',
+        '13' =>  'sale.SaleCommissionLists',
     ],
 ];