Преглед изворни кода

Merge branch 'master' into dongxiaoqin_0220

dongxiaoqin пре 1 година
родитељ
комит
f7592811f1
72 измењених фајлова са 3275 додато и 992 уклоњено
  1. 130 0
      app/adminapi/controller/tenant/TenantAgreeController.php
  2. 25 25
      app/adminapi/controller/tenant/TenantRatingCommissionController.php
  3. 25 25
      app/adminapi/controller/tenant/TenantRegisterController.php
  4. 13 1
      app/adminapi/controller/training/TrainingWorkerTaskController.php
  5. 5 1
      app/adminapi/controller/works/ServiceWorkController.php
  6. 1 1
      app/adminapi/lists/master_worker/MasterWorkerLists.php
  7. 29 2
      app/adminapi/lists/property/PropertyHeadLists.php
  8. 77 0
      app/adminapi/lists/tenant/TenantAgreeLists.php
  9. 79 0
      app/adminapi/lists/tenant/TenantRatingCommissionLists.php
  10. 78 0
      app/adminapi/lists/tenant/TenantRegisterLists.php
  11. 1 1
      app/adminapi/lists/training/TrainingWorkerTaskLists.php
  12. 7 0
      app/adminapi/lists/works/ServiceWorkLists.php
  13. 11 11
      app/adminapi/logic/master_worker/MasterWorkerTeamLogic.php
  14. 14 6
      app/adminapi/logic/notice/NoticeLogic.php
  15. 15 5
      app/adminapi/logic/property/PropertyHeadLogic.php
  16. 14 2
      app/adminapi/logic/sale/SaleLogic.php
  17. 23 0
      app/adminapi/logic/setting/web/WebSettingLogic.php
  18. 1 0
      app/adminapi/logic/tenant/TenantAdminLogic.php
  19. 111 0
      app/adminapi/logic/tenant/TenantAgreeLogic.php
  20. 121 0
      app/adminapi/logic/tenant/TenantRatingCommissionLogic.php
  21. 212 0
      app/adminapi/logic/tenant/TenantRegisterLogic.php
  22. 10 7
      app/adminapi/logic/training/TrainingWorkerTaskLogic.php
  23. 11 6
      app/adminapi/logic/works/ServiceWorkLogic.php
  24. 1 1
      app/adminapi/validate/property/PropertyHeadValidate.php
  25. 100 0
      app/adminapi/validate/tenant/TenantAgreeValidate.php
  26. 104 0
      app/adminapi/validate/tenant/TenantRatingCommissionValidate.php
  27. 118 0
      app/adminapi/validate/tenant/TenantRegisterValidate.php
  28. 2 2
      app/adminapi/validate/training/TrainingWorkerTaskValidate.php
  29. 13 2
      app/api/controller/LoginController.php
  30. 14 1
      app/api/logic/LoginLogic.php
  31. 23 2
      app/api/logic/PerformanceLogic.php
  32. 48 0
      app/api/logic/TenantRatingCommissionLogic.php
  33. 25 5
      app/common.php
  34. 28 0
      app/common/command/AddAgreementPdf.php
  35. 11 0
      app/common/logic/TableDataLogic.php
  36. 40 1
      app/common/model/master_worker_register/MasterWorkerRegister.php
  37. 4 1
      app/common/model/property/PropertyHead.php
  38. 42 0
      app/common/model/tenant/TenantAgree.php
  39. 37 0
      app/common/model/tenant/TenantRatingCommission.php
  40. 42 0
      app/common/model/tenant/TenantRegister.php
  41. 3 0
      app/common/model/training/TrainingWorkerTask.php
  42. 17 1
      app/common/service/wechat/WeChatOaService.php
  43. 36 0
      app/index/controller/TenantAgreementController.php
  44. 20 20
      app/index/view/agreement/master_service.html
  45. 700 0
      app/index/view/tenant_agreement/tenant_agree.html
  46. 0 119
      app/tenantapi/controller/master_worker/BankAccountController.php
  47. 0 129
      app/tenantapi/controller/master_worker/EngineerBillController.php
  48. 0 124
      app/tenantapi/controller/master_worker/EngineerSettlementController.php
  49. 0 120
      app/tenantapi/controller/master_worker/MasterWorkerAgreeController.php
  50. 0 109
      app/tenantapi/controller/master_worker/MasterWorkerExamineController.php
  51. 0 116
      app/tenantapi/controller/master_worker/MasterWorkerInfoController.php
  52. 0 66
      app/tenantapi/controller/master_worker/MasterWorkerServiceOrderController.php
  53. 0 37
      app/tenantapi/controller/master_worker/RetentionMoneyLogController.php
  54. 0 27
      app/tenantapi/lists/master_worker/MasterWorkerLists.php
  55. 8 11
      app/tenantapi/logic/ConfigLogic.php
  56. 3 0
      app/tenantapi/logic/auth/MenuLogic.php
  57. 7 1
      app/tenantapi/logic/master_worker/MasterWorkerLogic.php
  58. 65 0
      app/workerapi/controller/PropertyHeadController.php
  59. 126 0
      app/workerapi/controller/SaleController.php
  60. 67 0
      app/workerapi/controller/TenantController.php
  61. 28 2
      app/workerapi/controller/TrainingController.php
  62. 77 0
      app/workerapi/lists/MasterWorkerRegisterLists.php
  63. 68 0
      app/workerapi/lists/PropertyHeadLists.php
  64. 66 0
      app/workerapi/lists/TenantRegisterLists.php
  65. 3 1
      app/workerapi/logic/LoginLogic.php
  66. 24 0
      app/workerapi/logic/MasterWorkerRegisterLogic.php
  67. 35 0
      app/workerapi/logic/PropertyHeadLogic.php
  68. 95 0
      app/workerapi/logic/SaleLogic.php
  69. 76 0
      app/workerapi/logic/TenantAgreeLogic.php
  70. 77 0
      app/workerapi/logic/TenantRegisterLogic.php
  71. 8 1
      app/workerapi/logic/TrainingLogic.php
  72. 1 0
      config/export.php

+ 130 - 0
app/adminapi/controller/tenant/TenantAgreeController.php

@@ -0,0 +1,130 @@
+<?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\tenant;
+
+
+use app\adminapi\controller\BaseAdminController;
+use app\adminapi\lists\tenant\TenantAgreeLists;
+use app\adminapi\logic\setting\web\WebSettingLogic;
+use app\adminapi\logic\tenant\TenantAgreeLogic;
+use app\adminapi\validate\tenant\TenantAgreeValidate;
+
+
+/**
+ * TenantAgree控制器
+ * Class TenantAgreeController
+ * @package app\adminapi\controller
+ */
+class TenantAgreeController extends BaseAdminController
+{
+
+
+    /**
+     * @notes 获取列表
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2025/02/26 14:54
+     */
+    public function lists()
+    {
+        return $this->dataLists(new TenantAgreeLists());
+    }
+
+
+    /**
+     * @notes 添加
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2025/02/26 14:54
+     */
+    public function add()
+    {
+        $params = (new TenantAgreeValidate())->post()->goCheck('add');
+        $result = TenantAgreeLogic::add($params);
+        if (true === $result) {
+            return $this->success('添加成功', [], 1, 1);
+        }
+        return $this->fail(TenantAgreeLogic::getError());
+    }
+
+
+    /**
+     * @notes 编辑
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2025/02/26 14:54
+     */
+    public function edit()
+    {
+        $params = (new TenantAgreeValidate())->post()->goCheck('edit');
+        $result = TenantAgreeLogic::edit($params);
+        if (true === $result) {
+            return $this->success('编辑成功', [], 1, 1);
+        }
+        return $this->fail(TenantAgreeLogic::getError());
+    }
+
+
+    /**
+     * @notes 删除
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2025/02/26 14:54
+     */
+    public function delete()
+    {
+        $params = (new TenantAgreeValidate())->post()->goCheck('delete');
+        TenantAgreeLogic::delete($params);
+        return $this->success('删除成功', [], 1, 1);
+    }
+
+
+    /**
+     * @notes 获取详情
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2025/02/26 14:54
+     */
+    public function detail()
+    {
+        $params = (new TenantAgreeValidate())->goCheck('detail');
+        $result = TenantAgreeLogic::detail($params);
+        return $this->data($result);
+    }
+    /**
+     * @notes 协议详情
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2025/02/26 14:54
+     */
+    public function agreeDetail()
+    {
+        $result = WebSettingLogic::getTenantAgreement();
+        return $this->data($result);
+    }
+    /**
+     * @notes 设置协议
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2025/02/26 14:54
+     */
+    public function setAgree()
+    {
+        $params = request()->post();
+        WebSettingLogic::setTenantAgreement($params);
+        return $this->data($params);
+    }
+}

+ 25 - 25
app/tenantapi/controller/master_worker/MasterWorkerTeamController.php → app/adminapi/controller/tenant/TenantRatingCommissionController.php

@@ -13,21 +13,21 @@
 // +----------------------------------------------------------------------
 // +----------------------------------------------------------------------
 
 
 
 
-namespace app\tenantapi\controller\master_worker;
+namespace app\adminapi\controller\tenant;
 
 
 
 
-use app\tenantapi\controller\BaseAdminController;
-use app\tenantapi\lists\master_worker\MasterWorkerTeamLists;
-use app\tenantapi\logic\master_worker\MasterWorkerTeamLogic;
-use app\tenantapi\validate\master_worker\MasterWorkerTeamValidate;
+use app\adminapi\controller\BaseAdminController;
+use app\adminapi\lists\tenant\TenantRatingCommissionLists;
+use app\adminapi\logic\tenant\TenantRatingCommissionLogic;
+use app\adminapi\validate\tenant\TenantRatingCommissionValidate;
 
 
 
 
 /**
 /**
- * MasterWorkerTeam控制器
- * Class MasterWorkerTeamController
- * @package app\tenantapi\controller
+ * TenantRatingCommission控制器
+ * Class TenantRatingCommissionController
+ * @package app\adminapi\controller
  */
  */
-class MasterWorkerTeamController extends BaseAdminController
+class TenantRatingCommissionController extends BaseAdminController
 {
 {
 
 
 
 
@@ -35,11 +35,11 @@ class MasterWorkerTeamController extends BaseAdminController
      * @notes 获取列表
      * @notes 获取列表
      * @return \think\response\Json
      * @return \think\response\Json
      * @author likeadmin
      * @author likeadmin
-     * @date 2024/11/20 17:42
+     * @date 2025/02/26 18:03
      */
      */
     public function lists()
     public function lists()
     {
     {
-        return $this->dataLists(new MasterWorkerTeamLists());
+        return $this->dataLists(new TenantRatingCommissionLists());
     }
     }
 
 
 
 
@@ -47,16 +47,16 @@ class MasterWorkerTeamController extends BaseAdminController
      * @notes 添加
      * @notes 添加
      * @return \think\response\Json
      * @return \think\response\Json
      * @author likeadmin
      * @author likeadmin
-     * @date 2024/11/20 17:42
+     * @date 2025/02/26 18:03
      */
      */
     public function add()
     public function add()
     {
     {
-        $params = (new MasterWorkerTeamValidate())->post()->goCheck('add', ['tenant_id' => $this->adminInfo['tenant_id']]);
-        $result = MasterWorkerTeamLogic::add($params);
+        $params = (new TenantRatingCommissionValidate())->post()->goCheck('add');
+        $result = TenantRatingCommissionLogic::add($params);
         if (true === $result) {
         if (true === $result) {
             return $this->success('添加成功', [], 1, 1);
             return $this->success('添加成功', [], 1, 1);
         }
         }
-        return $this->fail(MasterWorkerTeamLogic::getError());
+        return $this->fail(TenantRatingCommissionLogic::getError());
     }
     }
 
 
 
 
@@ -64,16 +64,16 @@ class MasterWorkerTeamController extends BaseAdminController
      * @notes 编辑
      * @notes 编辑
      * @return \think\response\Json
      * @return \think\response\Json
      * @author likeadmin
      * @author likeadmin
-     * @date 2024/11/20 17:42
+     * @date 2025/02/26 18:03
      */
      */
     public function edit()
     public function edit()
     {
     {
-        $params = (new MasterWorkerTeamValidate())->post()->goCheck('edit', ['tenant_id' => $this->adminInfo['tenant_id']]);
-        $result = MasterWorkerTeamLogic::edit($params);
+        $params = (new TenantRatingCommissionValidate())->post()->goCheck('edit');
+        $result = TenantRatingCommissionLogic::edit($params);
         if (true === $result) {
         if (true === $result) {
             return $this->success('编辑成功', [], 1, 1);
             return $this->success('编辑成功', [], 1, 1);
         }
         }
-        return $this->fail(MasterWorkerTeamLogic::getError());
+        return $this->fail(TenantRatingCommissionLogic::getError());
     }
     }
 
 
 
 
@@ -81,12 +81,12 @@ class MasterWorkerTeamController extends BaseAdminController
      * @notes 删除
      * @notes 删除
      * @return \think\response\Json
      * @return \think\response\Json
      * @author likeadmin
      * @author likeadmin
-     * @date 2024/11/20 17:42
+     * @date 2025/02/26 18:03
      */
      */
     public function delete()
     public function delete()
     {
     {
-        $params = (new MasterWorkerTeamValidate())->post()->goCheck('delete');
-        MasterWorkerTeamLogic::delete($params);
+        $params = (new TenantRatingCommissionValidate())->post()->goCheck('delete');
+        TenantRatingCommissionLogic::delete($params);
         return $this->success('删除成功', [], 1, 1);
         return $this->success('删除成功', [], 1, 1);
     }
     }
 
 
@@ -95,12 +95,12 @@ class MasterWorkerTeamController extends BaseAdminController
      * @notes 获取详情
      * @notes 获取详情
      * @return \think\response\Json
      * @return \think\response\Json
      * @author likeadmin
      * @author likeadmin
-     * @date 2024/11/20 17:42
+     * @date 2025/02/26 18:03
      */
      */
     public function detail()
     public function detail()
     {
     {
-        $params = (new MasterWorkerTeamValidate())->goCheck('detail');
-        $result = MasterWorkerTeamLogic::detail($params);
+        $params = (new TenantRatingCommissionValidate())->goCheck('detail');
+        $result = TenantRatingCommissionLogic::detail($params);
         return $this->data($result);
         return $this->data($result);
     }
     }
 
 

+ 25 - 25
app/tenantapi/controller/master_worker/MasterWorkerRuleController.php → app/adminapi/controller/tenant/TenantRegisterController.php

@@ -13,21 +13,21 @@
 // +----------------------------------------------------------------------
 // +----------------------------------------------------------------------
 
 
 
 
-namespace app\tenantapi\controller\master_worker;
+namespace app\adminapi\controller\tenant;
 
 
 
 
-use app\tenantapi\controller\BaseAdminController;
-use app\tenantapi\lists\master_worker\MasterWorkerRuleLists;
-use app\tenantapi\logic\master_worker\MasterWorkerRuleLogic;
-use app\tenantapi\validate\master_worker\MasterWorkerRuleValidate;
+use app\adminapi\controller\BaseAdminController;
+use app\adminapi\lists\tenant\TenantRegisterLists;
+use app\adminapi\logic\tenant\TenantRegisterLogic;
+use app\adminapi\validate\tenant\TenantRegisterValidate;
 
 
 
 
 /**
 /**
- * MasterWorkerRule控制器
- * Class MasterWorkerRuleController
- * @package app\tenantapi\controller
+ * TenantRegister控制器
+ * Class TenantRegisterController
+ * @package app\adminapi\controller
  */
  */
-class MasterWorkerRuleController extends BaseAdminController
+class TenantRegisterController extends BaseAdminController
 {
 {
 
 
 
 
@@ -35,11 +35,11 @@ class MasterWorkerRuleController extends BaseAdminController
      * @notes 获取列表
      * @notes 获取列表
      * @return \think\response\Json
      * @return \think\response\Json
      * @author likeadmin
      * @author likeadmin
-     * @date 2024/09/28 15:31
+     * @date 2025/02/25 09:29
      */
      */
     public function lists()
     public function lists()
     {
     {
-        return $this->dataLists(new MasterWorkerRuleLists());
+        return $this->dataLists(new TenantRegisterLists());
     }
     }
 
 
 
 
@@ -47,16 +47,16 @@ class MasterWorkerRuleController extends BaseAdminController
      * @notes 添加
      * @notes 添加
      * @return \think\response\Json
      * @return \think\response\Json
      * @author likeadmin
      * @author likeadmin
-     * @date 2024/09/28 15:31
+     * @date 2025/02/25 09:29
      */
      */
     public function add()
     public function add()
     {
     {
-        $params = (new MasterWorkerRuleValidate())->post()->goCheck('add');
-        $result = MasterWorkerRuleLogic::add($params);
+        $params = (new TenantRegisterValidate())->post()->goCheck('add');
+        $result = TenantRegisterLogic::add($params);
         if (true === $result) {
         if (true === $result) {
             return $this->success('添加成功', [], 1, 1);
             return $this->success('添加成功', [], 1, 1);
         }
         }
-        return $this->fail(MasterWorkerRuleLogic::getError());
+        return $this->fail(TenantRegisterLogic::getError());
     }
     }
 
 
 
 
@@ -64,16 +64,16 @@ class MasterWorkerRuleController extends BaseAdminController
      * @notes 编辑
      * @notes 编辑
      * @return \think\response\Json
      * @return \think\response\Json
      * @author likeadmin
      * @author likeadmin
-     * @date 2024/09/28 15:31
+     * @date 2025/02/25 09:29
      */
      */
     public function edit()
     public function edit()
     {
     {
-        $params = (new MasterWorkerRuleValidate())->post()->goCheck('edit');
-        $result = MasterWorkerRuleLogic::edit($params);
+        $params = (new TenantRegisterValidate())->post()->goCheck('edit');
+        $result = TenantRegisterLogic::edit($params);
         if (true === $result) {
         if (true === $result) {
             return $this->success('编辑成功', [], 1, 1);
             return $this->success('编辑成功', [], 1, 1);
         }
         }
-        return $this->fail(MasterWorkerRuleLogic::getError());
+        return $this->fail(TenantRegisterLogic::getError());
     }
     }
 
 
 
 
@@ -81,12 +81,12 @@ class MasterWorkerRuleController extends BaseAdminController
      * @notes 删除
      * @notes 删除
      * @return \think\response\Json
      * @return \think\response\Json
      * @author likeadmin
      * @author likeadmin
-     * @date 2024/09/28 15:31
+     * @date 2025/02/25 09:29
      */
      */
     public function delete()
     public function delete()
     {
     {
-        $params = (new MasterWorkerRuleValidate())->post()->goCheck('delete');
-        MasterWorkerRuleLogic::delete($params);
+        $params = (new TenantRegisterValidate())->post()->goCheck('delete');
+        TenantRegisterLogic::delete($params);
         return $this->success('删除成功', [], 1, 1);
         return $this->success('删除成功', [], 1, 1);
     }
     }
 
 
@@ -95,12 +95,12 @@ class MasterWorkerRuleController extends BaseAdminController
      * @notes 获取详情
      * @notes 获取详情
      * @return \think\response\Json
      * @return \think\response\Json
      * @author likeadmin
      * @author likeadmin
-     * @date 2024/09/28 15:31
+     * @date 2025/02/25 09:29
      */
      */
     public function detail()
     public function detail()
     {
     {
-        $params = (new MasterWorkerRuleValidate())->goCheck('detail');
-        $result = MasterWorkerRuleLogic::detail($params);
+        $params = (new TenantRegisterValidate())->goCheck('detail');
+        $result = TenantRegisterLogic::detail($params);
         return $this->data($result);
         return $this->data($result);
     }
     }
 
 

+ 13 - 1
app/adminapi/controller/training/TrainingWorkerTaskController.php

@@ -30,6 +30,7 @@ use app\adminapi\validate\training\TrainingWorkerTaskValidate;
 class TrainingWorkerTaskController extends BaseAdminController
 class TrainingWorkerTaskController extends BaseAdminController
 {
 {
 
 
+    public array $notNeedLogin = ['courseInitialize'];
 
 
     /**
     /**
      * @notes 获取列表
      * @notes 获取列表
@@ -104,5 +105,16 @@ class TrainingWorkerTaskController extends BaseAdminController
         return $this->data($result);
         return $this->data($result);
     }
     }
 
 
-
+    /**
+     * @notes 初始化课程
+     * @return \think\response\Json
+     * @author likeadmin
+     * @date 2025/02/16 13:49
+     */
+    public function courseInitialize()
+    {
+        $params = request()->get();
+        $result = TrainingWorkerTaskLogic::trainingCourseRecord($params['master_worker_id'],$params['training_task_id']);
+        return $this->data($result);
+    }
 }
 }

+ 5 - 1
app/adminapi/controller/works/ServiceWorkController.php

@@ -202,11 +202,15 @@ class ServiceWorkController extends BaseAdminController
     }
     }
 
 
 
 
+    /**
+     * 工单分配给租户
+     * @return \think\response\Json
+     */
     public function distributeTenants()
     public function distributeTenants()
     {
     {
         $params = request()->post();
         $params = request()->post();
         $params['admin_id'] = $this->adminId;
         $params['admin_id'] = $this->adminId;
-        $result = ServiceWorkLogic::distributeTenants($params);
+        $result = ServiceWorkLogic::distributeTenants($params,$this->adminInfo);
         if (true === $result) {
         if (true === $result) {
             return $this->success('分配成功', [], 1, 1);
             return $this->success('分配成功', [], 1, 1);
         }
         }

+ 1 - 1
app/adminapi/lists/master_worker/MasterWorkerLists.php

@@ -69,7 +69,7 @@ class MasterWorkerLists extends BaseAdminDataLists implements ListsSearchInterfa
     }
     }
     public function queryWhere(){
     public function queryWhere(){
         $where = [];
         $where = [];
-        $where[] = ['mw.team_role','in',[0,1]];
+        //$where[] = ['mw.team_role','in',[0,1]];
         if(isset($this->params['time_period']) && !empty($this->params['time_period'])){
         if(isset($this->params['time_period']) && !empty($this->params['time_period'])){
             $sqls = [];
             $sqls = [];
             foreach ($this->params['time_period'] as $item) {
             foreach ($this->params['time_period'] as $item) {

+ 29 - 2
app/adminapi/lists/property/PropertyHeadLists.php

@@ -82,7 +82,7 @@ class PropertyHeadLists extends BaseAdminDataLists implements ListsSearchInterfa
     public function lists(): array
     public function lists(): array
     {
     {
         return PropertyHead::where($this->searchWhere)->where($this->queryDataWhere())
         return PropertyHead::where($this->searchWhere)->where($this->queryDataWhere())
-            ->field(['province','city','area_name','head_corporate_bank','id', 'property_name', 'village_name', 'address', 'head_name', 'head_mobile', 'ratio', 'head_bank_card', 'remark', 'user_id', 'all_profit_amount', 'surplus_profit_amount', 'extract_profit_amount','lon', 'lat','bind_date','sale_type','sale_id','is_cooperate'])
+            ->field(['*'])
             ->limit($this->limitOffset, $this->limitLength)
             ->limit($this->limitOffset, $this->limitLength)
             ->order(['id' => 'desc'])
             ->order(['id' => 'desc'])
             ->select()
             ->select()
@@ -100,5 +100,32 @@ class PropertyHeadLists extends BaseAdminDataLists implements ListsSearchInterfa
     {
     {
         return PropertyHead::where($this->searchWhere)->where($this->queryDataWhere())->count();
         return PropertyHead::where($this->searchWhere)->where($this->queryDataWhere())->count();
     }
     }
-
+    public function setExcelComplexFields(): array
+    {
+        $zh_cn_fields = [
+            '是否合作','代理名称','小区名称','小区地址','负责人名称', '负责人手机号',
+            '提成比例','对公账户名称','对公银行','对公银行卡号','备注','注册用户ID',
+            '总收益金额(累计)','剩余收益金额','已提收益金额(累计)','经度','纬度','绑定天数'
+        ];
+        $data_fields = [function($row){
+                                    switch ($row['is_cooperate']){
+                                        case 1:
+                                            return '合作中';
+                                        case 2:
+                                            return '已结束';
+                                        case 3:
+                                            return '待审核';
+                                        case 4:
+                                            return '不通过';
+                                        default:
+                                            return '';
+                                    }
+        },'property_name','village_name','address','head_name','head_mobile',
+            'ratio','corporate_bank_name','head_corporate_bank','head_bank_card','remark','user_id',
+            'all_profit_amount','surplus_profit_amount','extract_profit_amount','lon','lat','bind_date'];
+        return [
+            'zh_cn_fields' => $zh_cn_fields,
+            'data_fields' => $data_fields
+        ];
+    }
 }
 }

+ 77 - 0
app/adminapi/lists/tenant/TenantAgreeLists.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\tenant;
+
+
+use app\adminapi\lists\BaseAdminDataLists;
+use app\common\model\tenant\TenantAgree;
+use app\common\lists\ListsSearchInterface;
+
+
+/**
+ * TenantAgree列表
+ * Class TenantAgreeLists
+ * @package app\adminapi\lists
+ */
+class TenantAgreeLists extends BaseAdminDataLists implements ListsSearchInterface
+{
+
+
+    /**
+     * @notes 设置搜索条件
+     * @return \string[][]
+     * @author likeadmin
+     * @date 2025/02/26 14:54
+     */
+    public function setSearch(): array
+    {
+        return [
+            '=' => ['code', 'agree_type', 'worker_id', 'sign', 'pdf_url', 'audit_state'],
+        ];
+    }
+
+
+    /**
+     * @notes 获取列表
+     * @return array
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     * @author likeadmin
+     * @date 2025/02/26 14:54
+     */
+    public function lists(): array
+    {
+        return TenantAgree::with(['masterWorkerInfo'])->where($this->searchWhere)
+            ->field(['*'])
+            ->limit($this->limitOffset, $this->limitLength)
+            ->order(['id' => 'desc'])
+            ->select()
+            ->toArray();
+    }
+
+
+    /**
+     * @notes 获取数量
+     * @return int
+     * @author likeadmin
+     * @date 2025/02/26 14:54
+     */
+    public function count(): int
+    {
+        return TenantAgree::where($this->searchWhere)->count();
+    }
+
+}

+ 79 - 0
app/adminapi/lists/tenant/TenantRatingCommissionLists.php

@@ -0,0 +1,79 @@
+<?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\tenant;
+
+
+use app\adminapi\lists\BaseAdminDataLists;
+use app\common\model\tenant\TenantRatingCommission;
+use app\common\lists\ListsSearchInterface;
+
+
+/**
+ * TenantRatingCommission列表
+ * Class TenantRatingCommissionLists
+ * @package app\adminapi\lists
+ */
+class TenantRatingCommissionLists extends BaseAdminDataLists implements ListsSearchInterface
+{
+
+
+    /**
+     * @notes 设置搜索条件
+     * @return \string[][]
+     * @author likeadmin
+     * @date 2025/02/26 18:03
+     */
+    public function setSearch(): array
+    {
+        return [
+            '=' => ['rating_start', 'rating_end', 'commission', 'tenant_id'],
+        ];
+    }
+
+
+    /**
+     * @notes 获取列表
+     * @return array
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     * @author likeadmin
+     * @date 2025/02/26 18:03
+     */
+    public function lists(): array
+    {
+        //'id', 'rating_start', 'rating_end', 'commission',
+        return TenantRatingCommission::with(['allCommission'])->where($this->searchWhere)
+            ->field(['tenant_id'])
+            ->group('tenant_id')
+            ->order(['create_time' => 'desc'])
+            ->limit($this->limitOffset, $this->limitLength)
+            ->select()
+            ->toArray();
+    }
+
+
+    /**
+     * @notes 获取数量
+     * @return int
+     * @author likeadmin
+     * @date 2025/02/26 18:03
+     */
+    public function count(): int
+    {
+        return TenantRatingCommission::field(['tenant_id'])->where($this->searchWhere)->group('tenant_id')->count('tenant_id');
+    }
+
+}

+ 78 - 0
app/adminapi/lists/tenant/TenantRegisterLists.php

@@ -0,0 +1,78 @@
+<?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\tenant;
+
+
+use app\adminapi\lists\BaseAdminDataLists;
+use app\common\model\tenant\TenantRegister;
+use app\common\lists\ListsSearchInterface;
+
+
+/**
+ * TenantRegister列表
+ * Class TenantRegisterLists
+ * @package app\adminapi\lists
+ */
+class TenantRegisterLists extends BaseAdminDataLists implements ListsSearchInterface
+{
+
+
+    /**
+     * @notes 设置搜索条件
+     * @return \string[][]
+     * @author likeadmin
+     * @date 2025/02/25 09:29
+     */
+    public function setSearch(): array
+    {
+        return [
+            '=' => ['door_images', 'business_images', 'province', 'city', 'area_name', 'lon', 'lat', 'status', 'sale_id', 'openid'],
+            '%like%' => ['name', 'head_name','mobile'],
+        ];
+    }
+
+
+    /**
+     * @notes 获取列表
+     * @return array
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     * @author likeadmin
+     * @date 2025/02/25 09:29
+     */
+    public function lists(): array
+    {
+        return TenantRegister::with(['sale'])->where($this->searchWhere)
+            ->field(['id', 'name', 'head_name', 'mobile', 'door_images', 'business_images', 'province', 'city', 'area_name', 'lon', 'lat', 'status', 'sale_id', 'openid'])
+            ->limit($this->limitOffset, $this->limitLength)
+            ->order(['id' => 'desc'])
+            ->select()
+            ->toArray();
+    }
+
+
+    /**
+     * @notes 获取数量
+     * @return int
+     * @author likeadmin
+     * @date 2025/02/25 09:29
+     */
+    public function count(): int
+    {
+        return TenantRegister::where($this->searchWhere)->count();
+    }
+
+}

+ 1 - 1
app/adminapi/lists/training/TrainingWorkerTaskLists.php

@@ -62,7 +62,7 @@ class TrainingWorkerTaskLists extends BaseAdminDataLists implements ListsSearchI
                 'ShopGoods',
                 'ShopGoods',
                 'ShopOrders',
                 'ShopOrders',
             ])->where($this->searchWhere)
             ])->where($this->searchWhere)
-            ->field(['id', 'master_worker_id', 'shop_goods_id', 'shop_orders_id', 'training_task_id', 'training_status', 'lead_master_worker_id', 'operate_status'])
+            ->field(['id', 'task_list','master_worker_id', 'shop_goods_id', 'shop_orders_id', 'training_task_id', 'training_status', 'lead_master_worker_id', 'operate_status'])
             ->limit($this->limitOffset, $this->limitLength)
             ->limit($this->limitOffset, $this->limitLength)
             ->order(['id' => 'desc'])
             ->order(['id' => 'desc'])
             ->select()
             ->select()

+ 7 - 0
app/adminapi/lists/works/ServiceWorkLists.php

@@ -77,6 +77,13 @@ class ServiceWorkLists extends BaseAdminDataLists implements ListsSearchInterfac
 
 
     public function queryWhere(){
     public function queryWhere(){
         $where = [];
         $where = [];
+        if (isset($this->params['all_tenant'])) {
+            if((int)$this->params['all_tenant'] === 1){
+                $where[] = ['tenant_id','>' ,0];
+            }else{
+                $where[] = ['tenant_id','=', 0];
+            }
+        }
         if (isset($this->params['master_worker_name']) && !empty($this->params['master_worker_name'])) {
         if (isset($this->params['master_worker_name']) && !empty($this->params['master_worker_name'])) {
             $master_worker_ids = MasterWorker::where([['worker_number|mobile|real_name', 'like','%' .$this->params['master_worker_name'] . '%']])->column('id')??[0];
             $master_worker_ids = MasterWorker::where([['worker_number|mobile|real_name', 'like','%' .$this->params['master_worker_name'] . '%']])->column('id')??[0];
             $where[] = ['master_worker_id','in' ,$master_worker_ids];
             $where[] = ['master_worker_id','in' ,$master_worker_ids];

+ 11 - 11
app/adminapi/logic/master_worker/MasterWorkerTeamLogic.php

@@ -45,7 +45,7 @@ class MasterWorkerTeamLogic extends BaseLogic
                 throw new \Exception('该师傅已加入团队');
                 throw new \Exception('该师傅已加入团队');
             }
             }
 
 
-            if($params['goods_category_ids']){
+            if(isset($params['goods_category_ids']) && $params['goods_category_ids']){
                 foreach ($params['goods_category_ids'] as $val){
                 foreach ($params['goods_category_ids'] as $val){
                     is_array($val)?($ids[] = end($val)):($ids[] = $val);
                     is_array($val)?($ids[] = end($val)):($ids[] = $val);
                 }
                 }
@@ -57,16 +57,16 @@ class MasterWorkerTeamLogic extends BaseLogic
                 'team_name' => $params['team_name'],
                 'team_name' => $params['team_name'],
                 'master_worker_id' => $params['master_worker_id'],
                 'master_worker_id' => $params['master_worker_id'],
                 'tenant_id' => $params['tenant_id']??0,
                 'tenant_id' => $params['tenant_id']??0,
-                'city' => $params['city'],
-                'area_name' => $params['area_name'],
-                'lon' => $params['lon'],
-                'lat' => $params['lat'],
-                'distance' => $params['distance'],
-                'am_limit' => $params['am_limit'],
-                'pm_limit' => $params['pm_limit'],
-                'min_order' => $params['min_order'],
-                'goods_category_ids' => $params['goods_category_ids'],
-                'accept_order_status' => $params['accept_order_status'],
+                'city' => $params['city']??0,
+                'area_name' => $params['area_name']??'',
+                'lon' => $params['lon']??0,
+                'lat' => $params['lat']??0,
+                'distance' => $params['distance']??0,
+                'am_limit' => $params['am_limit']??0,
+                'pm_limit' => $params['pm_limit']??0,
+                'min_order' => $params['min_order']??0,
+                'goods_category_ids' => $params['goods_category_ids']??'',
+                'accept_order_status' => $params['accept_order_status']??1,
             ]);
             ]);
             MasterWorker::where('id', $params['master_worker_id'])->update(
             MasterWorker::where('id', $params['master_worker_id'])->update(
                 [
                 [

+ 14 - 6
app/adminapi/logic/notice/NoticeLogic.php

@@ -253,10 +253,18 @@ class NoticeLogic extends BaseLogic
                 return $noticeInfo;
                 return $noticeInfo;
             }*/
             }*/
             //$params['business_code']
             //$params['business_code']
+            $where = [];
+            if (isset($params['all_tenant'])) {
+                if((int)$params['all_tenant'] === 1){
+                    $where[] = ['tenant_id','>' ,0];
+                }else{
+                    $where[] = ['tenant_id','=', 0];
+                }
+            }
             switch ($params['business_code']){
             switch ($params['business_code']){
                 case 'service_work':
                 case 'service_work':
                     // 用户下单待派单 service_status
                     // 用户下单待派单 service_status
-                    $serviceWorkCount = ServiceWork::where('work_status', 0)->where('service_status','<', 3)->where('work_pay_status','>', 0)->count('id');
+                    $serviceWorkCount = ServiceWork::where($where)->where('work_status', 0)->where('service_status','<', 3)->where('work_pay_status','>', 0)->count('id');
                     if($serviceWorkCount){
                     if($serviceWorkCount){
                         $noticeInfo['confirm_code'] = 101;
                         $noticeInfo['confirm_code'] = 101;
                         $noticeInfo['count'] = $serviceWorkCount;
                         $noticeInfo['count'] = $serviceWorkCount;
@@ -266,7 +274,7 @@ class NoticeLogic extends BaseLogic
                     break;
                     break;
                 case 'work_status_receive':
                 case 'work_status_receive':
                     // 用户下单待派单 service_status
                     // 用户下单待派单 service_status
-                    $serviceWorkCount = ServiceWork::where('work_status', 1)->where('work_pay_status','>', 0)->count('id');
+                    $serviceWorkCount = ServiceWork::where($where)->where('work_status', 1)->where('work_pay_status','>', 0)->count('id');
                     if($serviceWorkCount){
                     if($serviceWorkCount){
                         $noticeInfo['confirm_code'] = 101;
                         $noticeInfo['confirm_code'] = 101;
                         $noticeInfo['count'] = $serviceWorkCount;
                         $noticeInfo['count'] = $serviceWorkCount;
@@ -276,7 +284,7 @@ class NoticeLogic extends BaseLogic
                     break;
                     break;
                 case 'work_status_contact':
                 case 'work_status_contact':
                     // 用户下单待派单 service_status
                     // 用户下单待派单 service_status
-                    $serviceWorkCount = ServiceWork::where('work_status', 2)->where('work_pay_status','>', 0)->count('id');
+                    $serviceWorkCount = ServiceWork::where($where)->where('work_status', 2)->where('work_pay_status','>', 0)->count('id');
                     if($serviceWorkCount){
                     if($serviceWorkCount){
                         $noticeInfo['confirm_code'] = 101;
                         $noticeInfo['confirm_code'] = 101;
                         $noticeInfo['count'] = $serviceWorkCount;
                         $noticeInfo['count'] = $serviceWorkCount;
@@ -296,7 +304,7 @@ class NoticeLogic extends BaseLogic
                     break;
                     break;
                 case 'appoint_approval':
                 case 'appoint_approval':
                     // 用户更新工单上门时间超过15分钟工程师未确认
                     // 用户更新工单上门时间超过15分钟工程师未确认
-                    $serviceWorkCount = ServiceWork::where('appoint_approval', 1)->where('refund_approval','=',0)->where('work_pay_status','>',0)->where('update_time','<', time()-15*60)->count('id');
+                    $serviceWorkCount = ServiceWork::where($where)->where('appoint_approval', 1)->where('refund_approval','=',0)->where('work_pay_status','>',0)->where('update_time','<', time()-15*60)->count('id');
                     if($serviceWorkCount){
                     if($serviceWorkCount){
                         $noticeInfo['confirm_code'] = 101;
                         $noticeInfo['confirm_code'] = 101;
                         $noticeInfo['count'] = $serviceWorkCount;
                         $noticeInfo['count'] = $serviceWorkCount;
@@ -306,7 +314,7 @@ class NoticeLogic extends BaseLogic
                     break;
                     break;
                 case 'refund_approval':
                 case 'refund_approval':
                     // 用户退款状态审核中
                     // 用户退款状态审核中
-                    $serviceWorkCount = ServiceWork::where('refund_approval', 1)->where('work_pay_status','>',0)->count('id');
+                    $serviceWorkCount = ServiceWork::where($where)->where('refund_approval', 1)->where('work_pay_status','>',0)->count('id');
                     if($serviceWorkCount){
                     if($serviceWorkCount){
                         $noticeInfo['confirm_code'] = 101;
                         $noticeInfo['confirm_code'] = 101;
                         $noticeInfo['count'] = $serviceWorkCount;
                         $noticeInfo['count'] = $serviceWorkCount;
@@ -327,7 +335,7 @@ class NoticeLogic extends BaseLogic
             $res = [];
             $res = [];
             $params['business_codes'] = explode(',',$params['business_codes']);
             $params['business_codes'] = explode(',',$params['business_codes']);
             foreach ($params['business_codes'] as $business_code) {
             foreach ($params['business_codes'] as $business_code) {
-                $noticeInfo = self::getInformation(['business_code'=>$business_code]);
+                $noticeInfo = self::getInformation(['business_code'=>$business_code,'all_tenant'=>($params['all_tenant']??0)]);
                 if($noticeInfo['confirm_code'] == 101){
                 if($noticeInfo['confirm_code'] == 101){
                     $res[$business_code] = $noticeInfo['count'];
                     $res[$business_code] = $noticeInfo['count'];
                 }else{
                 }else{

+ 15 - 5
app/adminapi/logic/property/PropertyHeadLogic.php

@@ -45,18 +45,22 @@ class PropertyHeadLogic extends BaseLogic
     {
     {
         Db::startTrans();
         Db::startTrans();
         try {
         try {
+            $info = PropertyHead::where('head_mobile',$params['head_mobile'])->findOrEmpty();
+            if(!$info->isEmpty()){
+                throw new \Exception('该手机号已入驻代理');
+            }
             PropertyHead::create([
             PropertyHead::create([
                 'property_name' => $params['property_name'],
                 'property_name' => $params['property_name'],
                 'village_name' => $params['village_name'],
                 'village_name' => $params['village_name'],
                 'address' => $params['address'],
                 'address' => $params['address'],
                 'head_name' => $params['head_name'],
                 'head_name' => $params['head_name'],
                 'head_mobile' => $params['head_mobile'],
                 'head_mobile' => $params['head_mobile'],
-                'ratio' => $params['ratio'],
-                'head_bank_card' => $params['head_bank_card'],
+                'ratio' => $params['ratio']??0,
+                'head_bank_card' => $params['head_bank_card']??'',
                 'head_corporate_bank' => $params['head_corporate_bank']??'',
                 'head_corporate_bank' => $params['head_corporate_bank']??'',
-                'lon' => $params['lon'],
-                'lat' => $params['lat'],
-                'remark' => $params['remark'],
+                'lon' => $params['lon']??0,
+                'lat' => $params['lat']??0,
+                'remark' => $params['remark']??'',
                 'bind_date'=>!empty($params['bind_date'])?$params['bind_date']:0,
                 'bind_date'=>!empty($params['bind_date'])?$params['bind_date']:0,
                 'sale_type'=>$params['sale_type']??0,
                 'sale_type'=>$params['sale_type']??0,
                 'sale_id'=>$params['sale_id']??0,
                 'sale_id'=>$params['sale_id']??0,
@@ -64,6 +68,9 @@ class PropertyHeadLogic extends BaseLogic
                 'province' => $params['province']??0,
                 'province' => $params['province']??0,
                 'city' => $params['city']??0,
                 'city' => $params['city']??0,
                 'area_name' => $params['area_name']??'',
                 'area_name' => $params['area_name']??'',
+                'door_images' => $params['door_images']??'',
+                'openid' => $params['openid']??'',
+                'corporate_bank_name' => $params['corporate_bank_name']??'',
             ]);
             ]);
 
 
             Db::commit();
             Db::commit();
@@ -116,6 +123,9 @@ class PropertyHeadLogic extends BaseLogic
                 'province' => $params['province']??0,
                 'province' => $params['province']??0,
                 'city' => $params['city']??0,
                 'city' => $params['city']??0,
                 'area_name' => $params['area_name']??'',
                 'area_name' => $params['area_name']??'',
+                'door_images' => $params['door_images']??'',
+                'openid' => $params['openid']??'',
+                'corporate_bank_name' => $params['corporate_bank_name']??'',
             ]);
             ]);
 
 
 
 

+ 14 - 2
app/adminapi/logic/sale/SaleLogic.php

@@ -17,6 +17,7 @@ namespace app\adminapi\logic\sale;
 
 
 use app\common\model\sale\Sale;
 use app\common\model\sale\Sale;
 use app\common\logic\BaseLogic;
 use app\common\logic\BaseLogic;
+use think\facade\Config;
 use think\facade\Db;
 use think\facade\Db;
 
 
 
 
@@ -40,10 +41,15 @@ class SaleLogic extends BaseLogic
     {
     {
         Db::startTrans();
         Db::startTrans();
         try {
         try {
+
+            $passwordSalt = Config::get('project.unique_identification');
+            $password = create_password($params['password'], $passwordSalt);
+
             Sale::create([
             Sale::create([
                 'sale_group_id' => $params['sale_group_id'],
                 'sale_group_id' => $params['sale_group_id'],
                 'sale_name' => $params['sale_name'],
                 'sale_name' => $params['sale_name'],
                 'mobile' => $params['mobile'],
                 'mobile' => $params['mobile'],
+                'password' => $password,
             ]);
             ]);
 
 
             Db::commit();
             Db::commit();
@@ -67,11 +73,17 @@ class SaleLogic extends BaseLogic
     {
     {
         Db::startTrans();
         Db::startTrans();
         try {
         try {
-            Sale::where('id', $params['id'])->update([
+            $up_data = [
                 'sale_group_id' => $params['sale_group_id'],
                 'sale_group_id' => $params['sale_group_id'],
                 'sale_name' => $params['sale_name'],
                 'sale_name' => $params['sale_name'],
                 'mobile' => $params['mobile'],
                 'mobile' => $params['mobile'],
-            ]);
+            ];
+            if(!empty($params['password'])){
+                $passwordSalt = Config::get('project.unique_identification');
+                $password = create_password($params['password'], $passwordSalt);
+                $up_data['password'] = $password;
+            }
+            Sale::where('id', $params['id'])->update($up_data);
 
 
             Db::commit();
             Db::commit();
             return true;
             return true;

+ 23 - 0
app/adminapi/logic/setting/web/WebSettingLogic.php

@@ -198,4 +198,27 @@ class WebSettingLogic extends BaseLogic
         return $config;
         return $config;
     }
     }
 
 
+    /**
+     * @notes 设置团队协议
+     * @param array $params
+     */
+    public static function setTenantAgreement(array $params)
+    {
+        ConfigService::set('tenant_agreement', 'tenant_cooperate_title', $params['tenant_cooperate_title'] ?? '');
+        ConfigService::set('tenant_agreement', 'tenant_cooperate_content', clear_file_domain($params['tenant_cooperate_content'] ?? ''));
+    }
+
+
+    /**
+     * @notes 获取工程师协议
+     * @return array
+     */
+    public static function getTenantAgreement() : array
+    {
+        $config = [
+            'tenant_cooperate_title' => ConfigService::get('tenant_agreement', 'tenant_cooperate_title')?? '',
+            'tenant_cooperate_content' => ConfigService::get('tenant_agreement', 'tenant_cooperate_content')??'',
+        ];
+        return $config;
+    }
 }
 }

+ 1 - 0
app/adminapi/logic/tenant/TenantAdminLogic.php

@@ -51,6 +51,7 @@ class TenantAdminLogic extends BaseLogic
 
 
             $admin = TenantAdmin::create([
             $admin = TenantAdmin::create([
                 'name'             => $params['name'],
                 'name'             => $params['name'],
+                'root'             => $params['root']??0,
                 'tenant_id'        => $params['tenant_id'],
                 'tenant_id'        => $params['tenant_id'],
                 'account'          => $params['account'],
                 'account'          => $params['account'],
                 'avatar'           => $avatar,
                 'avatar'           => $avatar,

+ 111 - 0
app/adminapi/logic/tenant/TenantAgreeLogic.php

@@ -0,0 +1,111 @@
+<?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\tenant;
+
+
+use app\common\model\tenant\TenantAgree;
+use app\common\logic\BaseLogic;
+use think\facade\Db;
+
+
+/**
+ * TenantAgree逻辑
+ * Class TenantAgreeLogic
+ * @package app\adminapi\logic
+ */
+class TenantAgreeLogic extends BaseLogic
+{
+
+
+    /**
+     * @notes 添加
+     * @param array $params
+     * @return bool
+     * @author likeadmin
+     * @date 2025/02/26 14:54
+     */
+    public static function add(array $params): bool
+    {
+        Db::startTrans();
+        try {
+            TenantAgree::create([
+                'code' => $params['code'],
+                'agree_type' => $params['agree_type'],
+                'worker_id' => $params['worker_id'],
+                'sign' => $params['sign'],
+                'pdf_url' => $params['pdf_url'],
+                'audit_state' => $params['audit_state']
+            ]);
+
+            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/02/26 14:54
+     */
+    public static function edit(array $params): bool
+    {
+        Db::startTrans();
+        try {
+            TenantAgree::where('id', $params['id'])->update([
+                'audit_state' => $params['audit_state']
+            ]);
+
+            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/02/26 14:54
+     */
+    public static function delete(array $params): bool
+    {
+        return TenantAgree::destroy($params['id']);
+    }
+
+
+    /**
+     * @notes 获取详情
+     * @param $params
+     * @return array
+     * @author likeadmin
+     * @date 2025/02/26 14:54
+     */
+    public static function detail($params): array
+    {
+        return TenantAgree::findOrEmpty($params['id'])->toArray();
+    }
+}

+ 121 - 0
app/adminapi/logic/tenant/TenantRatingCommissionLogic.php

@@ -0,0 +1,121 @@
+<?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\tenant;
+
+
+use app\common\model\tenant\TenantRatingCommission;
+use app\common\logic\BaseLogic;
+use think\facade\Db;
+
+
+/**
+ * TenantRatingCommission逻辑
+ * Class TenantRatingCommissionLogic
+ * @package app\adminapi\logic
+ */
+class TenantRatingCommissionLogic extends BaseLogic
+{
+
+
+    /**
+     * @notes 添加
+     * @param array $params
+     * @return bool
+     * @author likeadmin
+     * @date 2025/02/26 18:03
+     */
+    public static function add(array $params): bool
+    {
+        Db::startTrans();
+        try {
+            $info = TenantRatingCommission::where('tenant_id',$params['tenant_id'])->findOrEmpty();
+            if(!$info->isEmpty()){
+                throw new \Exception('该租户已存在抽点配置');
+            }
+            TenantRatingCommission::where('tenant_id',$params['tenant_id'])->delete();
+            foreach ($params['allCommission'] as $value) {
+                TenantRatingCommission::create([
+                    'rating_start' => $value['rating_start'],
+                    'rating_end' => $value['rating_end'],
+                    'commission' => $value['commission'],
+                    'tenant_id' => $params['tenant_id']
+                ]);
+            }
+
+            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/02/26 18:03
+     */
+    public static function edit(array $params): bool
+    {
+        Db::startTrans();
+        try {
+            TenantRatingCommission::where('tenant_id',$params['tenant_id'])->delete();
+            foreach ($params['allCommission'] as $value) {
+                TenantRatingCommission::create([
+                    'rating_start' => $value['rating_start'],
+                    'rating_end' => $value['rating_end'],
+                    'commission' => $value['commission'],
+                    'tenant_id' => $params['tenant_id']
+                ]);
+            }
+            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/02/26 18:03
+     */
+    public static function delete(array $params): bool
+    {
+        return TenantRatingCommission::destroy($params['id']);
+    }
+
+
+    /**
+     * @notes 获取详情
+     * @param $params
+     * @return array
+     * @author likeadmin
+     * @date 2025/02/26 18:03
+     */
+    public static function detail($params): array
+    {
+        return TenantRatingCommission::findOrEmpty($params['id'])->toArray();
+    }
+}

+ 212 - 0
app/adminapi/logic/tenant/TenantRegisterLogic.php

@@ -0,0 +1,212 @@
+<?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\tenant;
+
+
+use app\adminapi\logic\master_worker\MasterWorkerTeamLogic;
+use app\adminapi\logic\master_worker_register\MasterWorkerRegisterLogic;
+use app\adminapi\logic\training\TrainingWorkerTaskLogic;
+use app\common\model\dict\DictData;
+use app\common\model\tenant\TenantRegister;
+use app\common\logic\BaseLogic;
+use think\facade\Db;
+
+
+/**
+ * TenantRegister逻辑
+ * Class TenantRegisterLogic
+ * @package app\adminapi\logic
+ */
+class TenantRegisterLogic extends BaseLogic
+{
+
+
+    /**
+     * @notes 添加
+     * @param array $params
+     * @return bool
+     * @author likeadmin
+     * @date 2025/02/25 09:29
+     */
+    public static function add(array $params): bool
+    {
+        Db::startTrans();
+        try {
+            TenantRegister::create([
+                'name' => $params['name'],
+                'head_name' => $params['head_name'],
+                'mobile' => $params['mobile'],
+                'door_images' => $params['door_images'],
+                'business_images' => $params['business_images'],
+                'province' => $params['province'],
+                'city' => $params['city'],
+                'area_name' => $params['area_name'],
+                'lon' => $params['lon'],
+                'lat' => $params['lat'],
+                'status' => $params['status'],
+                'sale_id' => $params['sale_id'],
+                'openid' => $params['openid']??''
+            ]);
+
+            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/02/25 09:29
+     */
+    public static function edit(array $params): bool
+    {
+        Db::startTrans();
+        try {
+            TenantRegister::where('id', $params['id'])->update([
+                'name' => $params['name'],
+                'head_name' => $params['head_name'],
+                'mobile' => $params['mobile'],
+                'door_images' => $params['door_images'],
+                'business_images' => $params['business_images'],
+                'province' => $params['province'],
+                'city' => $params['city'],
+                'area_name' => $params['area_name'],
+                'lon' => $params['lon'],
+                'lat' => $params['lat'],
+                'status' => $params['status'],
+                'sale_id' => $params['sale_id'],
+                'openid' => $params['openid']??''
+            ]);
+
+            if((int)$params['status'] === 1){
+                /* domain_alias training_task_id task_list
+                 域名绑定好且能正常访问
+                 工程师添加(工程师负责人和注册表信息)--自动添加
+                团队添加(工程师负责人、门店名称做团队名称)--自动添加
+                培训课程(工程师负责人)--自动添加 */
+
+                $tenant_id = TenantLogic::add([
+                    'name'                => $params['name'],
+                    'avatar'              => '',
+                    'tel'                 => $params['mobile'],
+                    'domain_alias_enable' => 1,
+                    'domain_alias'        => $params['domain_alias']??'',
+                ])->id;
+                TenantRegister::where('id', $params['id'])->update([
+                    'tenant_id' => $tenant_id
+                ]);
+                //mobile real_name lon lat province city area_name
+                $worker_id = MasterWorkerRegisterLogic::createMasterWorker([
+                    'mobile' => $params['mobile'],
+                    'real_name' => $params['head_name'],
+                    'lon' => $params['lon'],
+                    'lat' => $params['lat'],
+                    'province' => $params['province'],
+                    'city' => $params['city'],
+                    'area_name' => $params['area_name']
+                ]);
+                //master_worker_id tenant_id team_name
+                $res = MasterWorkerTeamLogic::add([
+                    'master_worker_id' => $worker_id,
+                    'tenant_id' => $tenant_id,
+                    'team_name' => $params['name']
+                ]);
+                if($res === false){
+                    throw new \Exception(MasterWorkerTeamLogic::getError());
+                }
+                //
+                $training_task_id = DictData::where('status', 1)->where('type_value', 'training_task_id')->value('value')??0;
+                if($training_task_id){
+                    $team_task_list = DictData::where('status', 1)->where('type_value', 'team_task_list')->column('value')??[];
+                    $res = TrainingWorkerTaskLogic::add([
+                        'master_worker_id' => $worker_id,
+                        'shop_goods_id' => 0,
+                        //'training_task_id' => $params['training_task_id']??0,
+                        //'task_list' => $params['task_list']??'',
+                        'training_task_id' => $training_task_id,
+                        'task_list' => $team_task_list,
+                    ]);
+                    if($res === false){
+                        throw new \Exception(TrainingWorkerTaskLogic::getError());
+                    }
+                }
+
+                $res = TenantAdminLogic::add([
+                    'name'             => $params['mobile'],
+                    'root'             => 1,
+                    'tenant_id'        => $tenant_id,
+                    'account'          => $params['mobile'],
+                    'avatar'           => '',
+                    'password'         => $params['mobile'],
+                    'disable'          => 0,
+                    'multipoint_login' => 1,
+                ]);
+                if($res === false){
+                    throw new \Exception(TrainingWorkerTaskLogic::getError());
+                }
+
+
+                Db::query('call CopyMenusToTenantOne(:in_param1,:in_param2,:in_param3,:in_param4)', [
+                    'in_param1' => 1,
+                    'in_param2' => $tenant_id,
+                    'in_param3' => 0,
+                    'in_param4' => 0,
+                ]);
+
+            }
+
+
+            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/02/25 09:29
+     */
+    public static function delete(array $params): bool
+    {
+        return TenantRegister::destroy($params['id']);
+    }
+
+
+    /**
+     * @notes 获取详情
+     * @param $params
+     * @return array
+     * @author likeadmin
+     * @date 2025/02/25 09:29
+     */
+    public static function detail($params): array
+    {
+        return TenantRegister::findOrEmpty($params['id'])->toArray();
+    }
+}

+ 10 - 7
app/adminapi/logic/training/TrainingWorkerTaskLogic.php

@@ -42,14 +42,16 @@ class TrainingWorkerTaskLogic extends BaseLogic
      */
      */
     public static function add(array $params): bool
     public static function add(array $params): bool
     {
     {
+
         Db::startTrans();
         Db::startTrans();
         try {
         try {
             TrainingWorkerTask::create([
             TrainingWorkerTask::create([
                 'master_worker_id' => $params['master_worker_id'],
                 'master_worker_id' => $params['master_worker_id'],
-                'shop_goods_id' => $params['shop_goods_id'],
-                'training_task_id' => $params['training_task_id'],
-                'lead_master_worker_id' => $params['lead_master_worker_id'],
+                'shop_goods_id' => $params['shop_goods_id']??0,
+                'training_task_id' => $params['training_task_id']??0,
+                'lead_master_worker_id' => $params['lead_master_worker_id']??0,
                 'operate_status' => $params['operate_status']??0,
                 'operate_status' => $params['operate_status']??0,
+                'task_list' => $params['task_list']??'',
             ]);
             ]);
 
 
             // 添加该工程师初始化记录
             // 添加该工程师初始化记录
@@ -78,10 +80,11 @@ class TrainingWorkerTaskLogic extends BaseLogic
         try {
         try {
             TrainingWorkerTask::where('id', $params['id'])->update([
             TrainingWorkerTask::where('id', $params['id'])->update([
                 'master_worker_id' => $params['master_worker_id'],
                 'master_worker_id' => $params['master_worker_id'],
-                'shop_goods_id' => $params['shop_goods_id'],
-                'training_task_id' => $params['training_task_id'],
-                'lead_master_worker_id' => $params['lead_master_worker_id'],
+                'shop_goods_id' => $params['shop_goods_id']??0,
+                'training_task_id' => $params['training_task_id']??0,
+                'lead_master_worker_id' => $params['lead_master_worker_id']??0,
                 'operate_status' => $params['operate_status']??0,
                 'operate_status' => $params['operate_status']??0,
+                'task_list' => $params['task_list']?json_encode($params['task_list']):'',
             ]);
             ]);
 
 
             Db::commit();
             Db::commit();
@@ -123,7 +126,7 @@ class TrainingWorkerTaskLogic extends BaseLogic
      */
      */
     public static function trainingCourseRecord($masterWorkerId,$training_task_id): array
     public static function trainingCourseRecord($masterWorkerId,$training_task_id): array
     {
     {
-        $training_course_ids  = json_decode(TrainingTask::where('id',$training_task_id)->value('training_course_id'),true);
+        $training_course_ids  = json_decode(TrainingTask::where('id',$training_task_id)->value('training_course_id')??'[]',true);
         // 添加该工程师的所有培训课程初始化记录
         // 添加该工程师的所有培训课程初始化记录
         foreach ($training_course_ids as $course_id) {
         foreach ($training_course_ids as $course_id) {
             $workerCourse = TrainingWorkerCourse::create([
             $workerCourse = TrainingWorkerCourse::create([

+ 11 - 6
app/adminapi/logic/works/ServiceWorkLogic.php

@@ -868,7 +868,7 @@ class ServiceWorkLogic extends BaseLogic
                 MasterWorkerTeam::where('master_worker_id',$work->master_worker_id)->where('tenant_id',$work->tenant_id)->update($updateData);
                 MasterWorkerTeam::where('master_worker_id',$work->master_worker_id)->where('tenant_id',$work->tenant_id)->update($updateData);
             }
             }
 
 
-            
+            $params['master_worker_id'] = (isset($params['master_worker_id']) && !empty($params['master_worker_id']))?$params['master_worker_id']:$work->master_worker_id;
             MasterWorker::setWorktotal('dec',$work->master_worker_id);
             MasterWorker::setWorktotal('dec',$work->master_worker_id);
             $work->master_worker_id = 0;
             $work->master_worker_id = 0;
             $work->work_status = 0;
             $work->work_status = 0;
@@ -889,9 +889,6 @@ class ServiceWorkLogic extends BaseLogic
             return true;
             return true;
         }catch(\Exception $e){
         }catch(\Exception $e){
             Db::rollback();
             Db::rollback();
-
-            dd($e->getMessage());
-
             self::setError($e->getMessage());
             self::setError($e->getMessage());
             return false;
             return false;
         }
         }
@@ -921,18 +918,26 @@ class ServiceWorkLogic extends BaseLogic
         }
         }
     }
     }
 
 
-    public static function distributeTenants($params)
+    public static function distributeTenants($params,$userInfo)
     {
     {
         Db::startTrans();
         Db::startTrans();
         try {
         try {
             if(empty($params['id']) || empty($params['tenant_id'])){
             if(empty($params['id']) || empty($params['tenant_id'])){
-                throw new \Exception('参数错误');
+                throw new \Exception('参数错误'.json_encode($params));
             }
             }
             if (is_array($params['id'])) {
             if (is_array($params['id'])) {
                 $ids = $params['id'];
                 $ids = $params['id'];
             } else{
             } else{
                 $ids = [$params['id']];
                 $ids = [$params['id']];
             }
             }
+
+            // 取消工程师分配
+            foreach ($ids as $id) {
+                $res = self::cancelAllocation(['id'=>$id,'master_worker_id'=>''],$userInfo);
+                if($res === false){
+                    Log::info('分配log'.self::getError());
+                }
+            }
             ServiceWork::whereIn('id',$ids)->update(['tenant_id'=>$params['tenant_id']]);
             ServiceWork::whereIn('id',$ids)->update(['tenant_id'=>$params['tenant_id']]);
             Db::commit();
             Db::commit();
             return true;
             return true;

+ 1 - 1
app/adminapi/validate/property/PropertyHeadValidate.php

@@ -66,7 +66,7 @@ class PropertyHeadValidate extends BaseValidate
      */
      */
     public function sceneAdd()
     public function sceneAdd()
     {
     {
-        return $this->only(['property_name','village_name','address','head_name','head_mobile','head_bank_card']);
+        return $this->only(['property_name','village_name','address','head_name','head_mobile']);
     }
     }
 
 
 
 

+ 100 - 0
app/adminapi/validate/tenant/TenantAgreeValidate.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\tenant;
+
+
+use app\common\validate\BaseValidate;
+
+
+/**
+ * TenantAgree验证器
+ * Class TenantAgreeValidate
+ * @package app\adminapi\validate
+ */
+class TenantAgreeValidate extends BaseValidate
+{
+
+     /**
+      * 设置校验规则
+      * @var string[]
+      */
+    protected $rule = [
+        'id' => 'require',
+        'code' => 'require',
+        'worker_id' => 'require',
+        'audit_state' => 'require',
+    ];
+
+
+    /**
+     * 参数描述
+     * @var string[]
+     */
+    protected $field = [
+        'id' => 'id',
+        'code' => '协议编号',
+        'worker_id' => '团队负责工程师ID',
+        'audit_state' => '审核状态',
+    ];
+
+
+    /**
+     * @notes 添加场景
+     * @return TenantAgreeValidate
+     * @author likeadmin
+     * @date 2025/02/26 14:54
+     */
+    public function sceneAdd()
+    {
+        return $this->only(['code','worker_id','audit_state']);
+    }
+
+
+    /**
+     * @notes 编辑场景
+     * @return TenantAgreeValidate
+     * @author likeadmin
+     * @date 2025/02/26 14:54
+     */
+    public function sceneEdit()
+    {
+        return $this->only(['id','code','worker_id','audit_state']);
+    }
+
+
+    /**
+     * @notes 删除场景
+     * @return TenantAgreeValidate
+     * @author likeadmin
+     * @date 2025/02/26 14:54
+     */
+    public function sceneDelete()
+    {
+        return $this->only(['id']);
+    }
+
+
+    /**
+     * @notes 详情场景
+     * @return TenantAgreeValidate
+     * @author likeadmin
+     * @date 2025/02/26 14:54
+     */
+    public function sceneDetail()
+    {
+        return $this->only(['id']);
+    }
+
+}

+ 104 - 0
app/adminapi/validate/tenant/TenantRatingCommissionValidate.php

@@ -0,0 +1,104 @@
+<?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\tenant;
+
+
+use app\common\validate\BaseValidate;
+
+
+/**
+ * TenantRatingCommission验证器
+ * Class TenantRatingCommissionValidate
+ * @package app\adminapi\validate
+ */
+class TenantRatingCommissionValidate extends BaseValidate
+{
+
+     /**
+      * 设置校验规则
+      * @var string[]
+      */
+    protected $rule = [
+        'id' => 'require',
+        'rating_start' => 'require',
+        'rating_end' => 'require',
+        'commission' => 'require',
+        'tenant_id' => 'require',
+        'allCommission' => 'require',
+    ];
+
+
+    /**
+     * 参数描述
+     * @var string[]
+     */
+    protected $field = [
+        'id' => 'id',
+        'rating_start' => '评分开始',
+        'rating_end' => '评分结束',
+        'commission' => '抽点比例%',
+        'tenant_id' => '租户ID',
+        'allCommission' => '抽点配置',
+    ];
+
+
+    /**
+     * @notes 添加场景
+     * @return TenantRatingCommissionValidate
+     * @author likeadmin
+     * @date 2025/02/26 18:03
+     */
+    public function sceneAdd()
+    {
+        return $this->only(['allCommission','tenant_id']);
+    }
+
+
+    /**
+     * @notes 编辑场景
+     * @return TenantRatingCommissionValidate
+     * @author likeadmin
+     * @date 2025/02/26 18:03
+     */
+    public function sceneEdit()
+    {
+        return $this->only(['allCommission','tenant_id']);
+    }
+
+
+    /**
+     * @notes 删除场景
+     * @return TenantRatingCommissionValidate
+     * @author likeadmin
+     * @date 2025/02/26 18:03
+     */
+    public function sceneDelete()
+    {
+        return $this->only(['id']);
+    }
+
+
+    /**
+     * @notes 详情场景
+     * @return TenantRatingCommissionValidate
+     * @author likeadmin
+     * @date 2025/02/26 18:03
+     */
+    public function sceneDetail()
+    {
+        return $this->only(['id']);
+    }
+
+}

+ 118 - 0
app/adminapi/validate/tenant/TenantRegisterValidate.php

@@ -0,0 +1,118 @@
+<?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\tenant;
+
+
+use app\common\validate\BaseValidate;
+
+
+/**
+ * TenantRegister验证器
+ * Class TenantRegisterValidate
+ * @package app\adminapi\validate
+ */
+class TenantRegisterValidate extends BaseValidate
+{
+
+     /**
+      * 设置校验规则
+      * @var string[]
+      */
+    protected $rule = [
+        'id' => 'require',
+        'name' => 'require',
+        'head_name' => 'require',
+        'mobile' => 'require',
+        'door_images' => 'require',
+        'business_images' => 'require',
+        'city' => 'require',
+        'area_name' => 'require',
+        'lon' => 'require',
+        'lat' => 'require',
+        'sale_id' => 'require',
+        'openid' => 'require',
+    ];
+
+    /**
+     * 参数描述
+     * @var string[]
+     */
+    protected $field = [
+        'id' => 'id',
+        'name' => '门店名称',
+        'head_name' => '负责人名称',
+        'mobile' => '电话',
+        'door_images' => '门头照片',
+        'business_images' => '营业执照',
+        'city' => '城市',
+        'area_name' => '地区名称',
+        'lon' => '经度',
+        'lat' => '维度',
+        'sale_id' => '所属销售id',
+        'openid' => '微信openid',
+    ];
+
+
+    /**
+     * @notes 添加场景
+     * @return TenantRegisterValidate
+     * @author likeadmin
+     * @date 2025/02/25 09:29
+     */
+    public function sceneAdd()
+    {
+        return $this->only(['name','head_name','mobile','city','lon','lat','sale_id']);
+    }
+    public function sceneApiAdd()
+    {
+        return $this->only(['name','head_name','mobile','business_images','city','area_name','lon','lat','sale_id','openid']);
+    }
+
+    /**
+     * @notes 编辑场景
+     * @return TenantRegisterValidate
+     * @author likeadmin
+     * @date 2025/02/25 09:29
+     */
+    public function sceneEdit()
+    {
+        return $this->only(['id','name','head_name','mobile','city','lon','lat','sale_id']);
+    }
+
+
+    /**
+     * @notes 删除场景
+     * @return TenantRegisterValidate
+     * @author likeadmin
+     * @date 2025/02/25 09:29
+     */
+    public function sceneDelete()
+    {
+        return $this->only(['id']);
+    }
+
+
+    /**
+     * @notes 详情场景
+     * @return TenantRegisterValidate
+     * @author likeadmin
+     * @date 2025/02/25 09:29
+     */
+    public function sceneDetail()
+    {
+        return $this->only(['id']);
+    }
+
+}

+ 2 - 2
app/adminapi/validate/training/TrainingWorkerTaskValidate.php

@@ -68,7 +68,7 @@ class TrainingWorkerTaskValidate extends BaseValidate
      */
      */
     public function sceneAdd()
     public function sceneAdd()
     {
     {
-        return $this->only(['master_worker_id','shop_goods_id','training_task_id']);
+        return $this->only(['master_worker_id']);
     }
     }
 
 
 
 
@@ -80,7 +80,7 @@ class TrainingWorkerTaskValidate extends BaseValidate
      */
      */
     public function sceneEdit()
     public function sceneEdit()
     {
     {
-        return $this->only(['id','master_worker_id','shop_goods_id','training_task_id']);
+        return $this->only(['id','master_worker_id']);
     }
     }
 
 
 
 

+ 13 - 2
app/api/controller/LoginController.php

@@ -28,7 +28,7 @@ use app\api\logic\LoginLogic;
 class LoginController extends BaseApiController
 class LoginController extends BaseApiController
 {
 {
 
 
-    public array $notNeedLogin = ['account', 'logout', 'codeUrl', 'oaLogin',  'mnpLogin', 'getScanCode', 'scanLogin', 'firmLogin','getMnpSessionKey','mnpAuthPhone'];
+    public array $notNeedLogin = ['account', 'logout', 'codeUrl','getOpenIdByCode', 'oaLogin',  'mnpLogin', 'getScanCode', 'scanLogin', 'firmLogin','getMnpSessionKey','mnpAuthPhone'];
 
 
     /**
     /**
      * @notes 账号密码/手机号密码/手机号验证码登录
      * @notes 账号密码/手机号密码/手机号验证码登录
@@ -85,7 +85,18 @@ class LoginController extends BaseApiController
         return $this->success('获取成功', $result);
         return $this->success('获取成功', $result);
     }
     }
 
 
-
+    /**
+     * 获取微信用户openid信息
+     */
+    public function getOpenIdByCode()
+    {
+        $code = $this->request->get('code');
+        $res = LoginLogic::getOpenIdByCode(['code'=>$code]);
+        if (false === $res) {
+            return $this->fail(LoginLogic::getError());
+        }
+        return $this->success('', $res);
+    }
     /**
     /**
      * @notes 公众号登录
      * @notes 公众号登录
      * @return \think\response\Json
      * @return \think\response\Json

+ 14 - 1
app/api/logic/LoginLogic.php

@@ -151,7 +151,20 @@ class LoginLogic extends BaseLogic
     {
     {
         return (new WeChatOaService())->getCodeUrl($url);
         return (new WeChatOaService())->getCodeUrl($url);
     }
     }
-
+    /**
+     * 获取微信用户openid信息
+     */
+    public static function getOpenIdByCode($params)
+    {
+        try {
+            //通过code获取微信 openid
+            $response = (new WeChatOaService())->getOpenIdByCode($params['code']);
+            return $response;
+        } catch (\Exception $e) {
+            self::$error = $e->getMessage();
+            return false;
+        }
+    }
 
 
     /**
     /**
      * @notes 公众号登录
      * @notes 公众号登录

+ 23 - 2
app/api/logic/PerformanceLogic.php

@@ -109,10 +109,21 @@ class PerformanceLogic extends BaseLogic
             //系统回收金额
             //系统回收金额
             $work->system_amount = $worker_price-$settlement_amount-$work->earnest_money-$work->add_work_amount;
             $work->system_amount = $worker_price-$settlement_amount-$work->earnest_money-$work->add_work_amount;
 
 
+            //门店结算金额
+            if($work->tenant_id > 0){
+                $percentage = TenantRatingCommissionLogic::getCommissionByTenantId($work->tenant_id);
+                if($percentage > 0){
+                    $work->system_amount = bcmul($worker_price, bcdiv($percentage, 100, 4),2);
+                    $work->tenant_all_amount = $worker_price - $work->system_amount;
+                    $work->tenant_amount = $work->tenant_all_amount - $settlement_amount - $work->earnest_money - $work->add_work_amount;
+                }
+                Log::info('平台抽成门店的比例:'.'门店ID:'.$work->tenant_id.',平台抽成:'.$percentage);
+            }
+
             //工程师可提现金额,汇总了加单金额
             //工程师可提现金额,汇总了加单金额
             $settlement_amount += (float)$work->add_work_amount;
             $settlement_amount += (float)$work->add_work_amount;
 
 
-            Log::info('工单'.$work->id.',总服务费:'.$worker_price.'可提现金额:'.$settlement_amount.',加单金额:'.$work->add_work_amount.',缴纳质保金:'.$work->earnest_money.',系统回收金额:'.$work->system_amount);
+            Log::info('工单'.$work->id.',总服务费:'.$worker_price.'可提现金额:'.$settlement_amount.',加单金额:'.$work->add_work_amount.',缴纳质保金:'.$work->earnest_money.',系统回收金额:'.$work->system_amount.',门店总金额(包含工程师):'.$work->tenant_all_amount . ',门店实际金额:'.$work->tenant_amount);
 
 
             WorkerAccountLogLogic::addAccountLog($work,$settlement_amount,WorkerAccountLogEnum::UM_INC_ADMIN,WorkerAccountLogEnum::INC);
             WorkerAccountLogLogic::addAccountLog($work,$settlement_amount,WorkerAccountLogEnum::UM_INC_ADMIN,WorkerAccountLogEnum::INC);
         }
         }
@@ -178,10 +189,20 @@ class PerformanceLogic extends BaseLogic
             //系统回收金额
             //系统回收金额
             $work->system_amount = $work->worker_price-$settlement_amount-$work->earnest_money-$work->add_work_amount;
             $work->system_amount = $work->worker_price-$settlement_amount-$work->earnest_money-$work->add_work_amount;
 
 
+            //门店结算金额
+            if($work->tenant_id > 0){
+                $percentage = TenantRatingCommissionLogic::getCommissionByTenantId($work->tenant_id);
+                if($percentage > 0){
+                    $work->system_amount = bcmul($work->worker_price, bcdiv($percentage, 100, 4),2);
+                    $work->tenant_all_amount = $work->worker_price - $work->system_amount;
+                    $work->tenant_amount = $work->tenant_all_amount - $settlement_amount - $work->earnest_money - $work->add_work_amount;
+                }
+                Log::info('calculatePerformanceCommission:平台抽成门店的比例:'.'门店ID:'.$work->tenant_id.',平台抽成:'.$percentage);
+            }
             //工程师可提现金额,汇总了加单金额
             //工程师可提现金额,汇总了加单金额
             $settlement_amount += (float)$work->add_work_amount;
             $settlement_amount += (float)$work->add_work_amount;
 
 
-            Log::info('工单'.$work->id.',总服务费:'.$work->worker_price.'可提现金额:'.$settlement_amount.',加单金额:'.$work->add_work_amount.',缴纳质保金:'.$work->earnest_money.',系统回收金额:'.$work->system_amount);
+            Log::info('calculatePerformanceCommission:工单'.$work->id.',总服务费:'.$work->worker_price.'可提现金额:'.$settlement_amount.',加单金额:'.$work->add_work_amount.',缴纳质保金:'.$work->earnest_money.',系统回收金额:'.$work->system_amount.',门店总金额(包含工程师):'.$work->tenant_all_amount . ',门店实际金额:'.$work->tenant_amount);
 
 
             WorkerAccountLogLogic::addAccountLog($work,$settlement_amount,WorkerAccountLogEnum::UM_INC_ADMIN,WorkerAccountLogEnum::INC);
             WorkerAccountLogLogic::addAccountLog($work,$settlement_amount,WorkerAccountLogEnum::UM_INC_ADMIN,WorkerAccountLogEnum::INC);
         }
         }

+ 48 - 0
app/api/logic/TenantRatingCommissionLogic.php

@@ -0,0 +1,48 @@
+<?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\api\logic;
+
+use app\common\enum\PayEnum;
+use app\common\logic\BaseLogic;
+use app\common\model\master_worker\MasterWorkerTeam;
+use app\common\model\recharge\RechargeOrder;
+use app\common\model\tenant\TenantRatingCommission;
+use app\common\model\user\User;
+use app\common\service\ConfigService;
+
+
+/**
+ * 服务分抽成
+ * Class TenantRatingCommissionLogic
+ * @package app\shopapi\logic
+ */
+class TenantRatingCommissionLogic extends BaseLogic
+{
+
+    /**
+     * 获取抽成比例
+     *  eg:
+     *  3.5 <= 3.8 < 4.0
+     *
+     */
+    public static function getCommissionByTenantId($tenant_id)
+    {
+        $comprehensive_score = MasterWorkerTeam::where('tenant_id',$tenant_id)->value('comprehensive_score')??0;
+        return TenantRatingCommission::where('tenant_id',$tenant_id)
+            ->where('rating_start','<=',$comprehensive_score)
+            ->where('rating_end','>',$comprehensive_score)->value('commission')??0;
+    }
+
+}

+ 25 - 5
app/common.php

@@ -1,5 +1,6 @@
 <?php
 <?php
 // 应用公共文件
 // 应用公共文件
+use app\common\logic\TableDataLogic;
 use app\common\model\goods_category\GoodsCategory;
 use app\common\model\goods_category\GoodsCategory;
 use app\common\model\setting\PostageRegion;
 use app\common\model\setting\PostageRegion;
 use app\common\service\FileService;
 use app\common\service\FileService;
@@ -444,15 +445,27 @@ function asteriskString($str) {
     }
     }
 }
 }
 
 
-function getPostageRegion() {
-    $lists = cache('postageRegion');
+function getPostageRegion($ids = []) {
+    $id_str = '';
+    if(!empty($ids)){
+        $id_str = implode(',',$ids);
+    }
+    $lists = cache('postageRegion'.$id_str);
     if(empty($lists)){
     if(empty($lists)){
-        $lists = PostageRegion::field(['*'])->select()->toArray();
-        cache('postageRegion',$lists);
+        $lists = PostageRegion::field(['*']);
+        if(!empty($id_str)){
+            $lists = $lists->whereIn('id',$ids);
+        }
+        $lists = $lists->select()->toArray();
+        cache('postageRegion'.$id_str,$lists);
     }
     }
     return $lists;
     return $lists;
 }
 }
-
+// 通过市查询省id
+function getProvinceByCityId($city_id) {
+    $postageRegion = array_column(getPostageRegion([$city_id]), null, 'id');
+    return $postageRegion[$city_id]['pid'];
+}
 // 获取随机字符串
 // 获取随机字符串
 function generateRandomString($length = 8,$basic_method = 4) {
 function generateRandomString($length = 8,$basic_method = 4) {
     $characters = '';
     $characters = '';
@@ -541,3 +554,10 @@ function getSuperiorCategoryTree($category_ids)
         ->toArray();
         ->toArray();
     return linear_to_tree($tree_data, 'children');
     return linear_to_tree($tree_data, 'children');
 }
 }
+// 获取选项数据
+function getOptionDataByTable($table) {
+    if (method_exists(TableDataLogic::class, $table)) {
+        $lists = TableDataLogic::$table();
+    }
+    return $lists??[];
+}

+ 28 - 0
app/common/command/AddAgreementPdf.php

@@ -2,6 +2,7 @@
 namespace app\common\command;
 namespace app\common\command;
 
 
 use app\common\model\master_worker\MasterWorkerAgree;
 use app\common\model\master_worker\MasterWorkerAgree;
+use app\common\model\tenant\TenantAgree;
 use PhpAmqpLib\Connection\AMQPStreamConnection;
 use PhpAmqpLib\Connection\AMQPStreamConnection;
 use PhpAmqpLib\Message\AMQPMessage;
 use PhpAmqpLib\Message\AMQPMessage;
 use PhpAmqpLib\Wire\AMQPTable;
 use PhpAmqpLib\Wire\AMQPTable;
@@ -98,6 +99,33 @@ class AddAgreementPdf extends Command
         }
         }
     }
     }
 
 
+    /**
+     * 团队协议生成PDF文件
+     * @param $param
+     * @return void
+     */
+    public static function addTenantAgreePdf($param)
+    {
+        $code = $param['code'];
+        $url = $param['url'];
+        $pdf = '/'.$code.'.pdf';
+        $path = 'uploads/agreement_pdf/'.date('Ymd');
+        if(!file_exists($path)){
+            mkdir ($path,0777,true);
+        }
+        $shell_ = 'wkhtmltopdf --page-height 297mm '.$url.' '.$path.$pdf;
+        $output = [];
+        $return_var = 0;
+        \exec($shell_ . ' > /dev/null 2>&1', $output, $return_var);
+        if ($return_var === 0) {
+            $agreement = TenantAgree::where('code', $code)->findOrEmpty();
+            $agreement->pdf_url = $path.$pdf;
+            $agreement->save();
+        } else {
+            // 处理错误
+            echo "Command failed with return code: $return_var";
+        }
+    }
 
 
     public static function sendMq($code,$url):bool
     public static function sendMq($code,$url):bool
     {
     {

+ 11 - 0
app/common/logic/TableDataLogic.php

@@ -120,6 +120,17 @@ class TableDataLogic extends BaseLogic
         return $data;
         return $data;
     }
     }
 
 
+    public static function postageRegionCity(): array
+    {
+        // 缓存优化
+        $data = cache('labelPostageRegionCity');
+        if(empty($data)){
+            $lists = PostageRegion::whereIn('level',[1,2])->field('id,pid,name as label,id as value,"data_table_postageRegionCity" as type_value')->select()->toArray();
+            $data = linear_to_tree($lists, 'children', 'id', 'pid');
+            cache('labelPostageRegionCity',$data);
+        }
+        return $data;
+    }
     public static function jobsRules(): array
     public static function jobsRules(): array
     {
     {
         return JobsRules::field(['id', 'rule_name as label','id as value','"data_table_jobsRules" as type_value'])->select()->toArray();
         return JobsRules::field(['id', 'rule_name as label','id as value','"data_table_jobsRules" as type_value'])->select()->toArray();

+ 40 - 1
app/common/model/master_worker_register/MasterWorkerRegister.php

@@ -16,7 +16,8 @@ namespace app\common\model\master_worker_register;
 
 
 
 
 use app\common\model\BaseModel;
 use app\common\model\BaseModel;
-
+use app\common\model\dict\DictData;
+use think\facade\Cache;
 
 
 
 
 /**
 /**
@@ -42,4 +43,42 @@ class MasterWorkerRegister extends BaseModel
         return empty($value)?[]:explode(',',$value);
         return empty($value)?[]:explode(',',$value);
     }
     }
 
 
+    public function getCityTextAttr($value,$data):string{
+        $postageRegion = array_column(getPostageRegion([$data['city']]), null, 'id');
+        return $postageRegion[$data['city']]['name']??'';
+    }
+    public function getMaintainExpTypeTextAttr($value,$data):string{
+        $default = Cache::get('WORKER_EXP_TYPE');
+        if (!$default) {
+            $status = DictData::where('type_value', 'worker_exp_type')->column('name','value');
+            Cache::set('WORKER_EXP_TYPE', json_encode($status,true),5);
+        } else {
+            $status = json_decode($default,true);
+        }
+        return $status[$data['maintain_exp_type']] ?? '';
+    }
+    public function getOtherExpTypeTextAttr($value,$data):string{
+        $default = Cache::get('WORKER_OTHER_EXP_TYPE');
+        if (!$default) {
+            $status = DictData::where('type_value', 'worker_other_exp_type')->column('name','value');
+            Cache::set('WORKER_OTHER_EXP_TYPE', json_encode($status,true),5);
+        } else {
+            $status = json_decode($default,true);
+        }
+        return $status[$data['other_exp_type']] ?? '';
+    }
+    public function getVehicleTypeTextAttr($value,$data):string{
+        $default = Cache::get('WORKER_VEHICLE_TYPE');
+        if (!$default) {
+            $status = DictData::where('type_value', 'worker_vehicle_type')->column('name','value');
+            Cache::set('WORKER_VEHICLE_TYPE', json_encode($status,true),5);
+        } else {
+            $status = json_decode($default,true);
+        }
+        return $status[$data['vehicle_type']] ?? '';
+    }
+
+
+
+
 }
 }

+ 4 - 1
app/common/model/property/PropertyHead.php

@@ -28,7 +28,10 @@ class PropertyHead extends BaseModel
 {
 {
     
     
     protected $name = 'property_head';
     protected $name = 'property_head';
-    
 
 
+    public function getCityTextAttr($value,$data):string{
+        $postageRegion = array_column(getPostageRegion([$data['city']]), null, 'id');
+        return $postageRegion[$data['city']]['name']??'';
+    }
     
     
 }
 }

+ 42 - 0
app/common/model/tenant/TenantAgree.php

@@ -0,0 +1,42 @@
+<?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\tenant;
+
+
+use app\common\model\BaseModel;
+use app\common\model\master_worker\MasterWorker;
+use app\common\model\master_worker\MasterWorkerInfo;
+use app\common\model\master_worker\MasterWorkerTeam;
+
+
+/**
+ * TenantAgree模型
+ * Class TenantAgree
+ * @package app\common\model
+ */
+class TenantAgree extends BaseModel
+{
+    
+    protected $name = 'tenant_agree';
+
+    public function masterWorkerInfo()
+    {
+        return $this->hasOne(MasterWorkerInfo::class, 'worker_id', 'worker_id');
+    }
+    public function masterWorkerTeam()
+    {
+        return $this->hasOne(MasterWorkerTeam::class, 'master_worker_id', 'worker_id');
+    }
+}

+ 37 - 0
app/common/model/tenant/TenantRatingCommission.php

@@ -0,0 +1,37 @@
+<?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\tenant;
+
+
+use app\common\model\BaseModel;
+
+
+
+/**
+ * TenantRatingCommission模型
+ * Class TenantRatingCommission
+ * @package app\common\model
+ */
+class TenantRatingCommission extends BaseModel
+{
+    
+    protected $name = 'tenant_rating_commission';
+
+    public function allCommission()
+    {
+        return $this->hasMany(TenantRatingCommission::class,'tenant_id','tenant_id');
+    }
+    
+}

+ 42 - 0
app/common/model/tenant/TenantRegister.php

@@ -0,0 +1,42 @@
+<?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\tenant;
+
+
+use app\common\model\BaseModel;
+use app\common\model\sale\Sale;
+
+
+/**
+ * TenantRegister模型
+ * Class TenantRegister
+ * @package app\common\model
+ */
+class TenantRegister extends BaseModel
+{
+    
+    protected $name = 'tenant_register';
+
+    public function sale()
+    {
+        return $this->hasOne(Sale::class, 'id', 'sale_id');
+    }
+
+    public function getCityTextAttr($value,$data):string{
+        $postageRegion = array_column(getPostageRegion([$data['city']]), null, 'id');
+        return $postageRegion[$data['city']]['name']??'';
+    }
+
+}

+ 3 - 0
app/common/model/training/TrainingWorkerTask.php

@@ -30,6 +30,9 @@ class TrainingWorkerTask extends BaseModel
 {
 {
     
     
     protected $name = 'training_worker_task';
     protected $name = 'training_worker_task';
+    protected $type = [
+        'task_list' => 'array',
+    ];
     public function TrainingTask(){
     public function TrainingTask(){
         return $this->hasOne(TrainingTask::class,'id','training_task_id');
         return $this->hasOne(TrainingTask::class,'id','training_task_id');
     }
     }

+ 17 - 1
app/common/service/wechat/WeChatOaService.php

@@ -20,6 +20,7 @@ use app\common\model\notice\NoticeSetting;
 use EasyWeChat\Kernel\Exceptions\Exception;
 use EasyWeChat\Kernel\Exceptions\Exception;
 use EasyWeChat\OfficialAccount\Application;
 use EasyWeChat\OfficialAccount\Application;
 use think\facade\Log;
 use think\facade\Log;
+use WpOrg\Requests\Requests;
 
 
 
 
 /**
 /**
@@ -73,7 +74,22 @@ class WeChatOaService
         return $config;
         return $config;
     }
     }
 
 
-
+    /**
+     * @notes 只获取微信用户openid信息
+     * @return array
+     * @throws Exception
+     * @author 段誉
+     * @date 2023/2/27 12:03
+     */
+    public function getOpenIdByCode(string $code)
+    {
+        $config = WeChatConfigService::getOaConfig();
+        $url = 'https://api.weixin.qq.com/sns/oauth2/access_token';
+        $url .= '?appid=' . $config['app_id'] . '&secret=' . $config['secret'] . '&code=' . $code;
+        $url .= '&grant_type=authorization_code';
+        $requests = Requests::get($url);
+        return json_decode($requests->body, true);
+    }
     /**
     /**
      * @notes 公众号-根据code获取微信信息
      * @notes 公众号-根据code获取微信信息
      * @param string $code
      * @param string $code

+ 36 - 0
app/index/controller/TenantAgreementController.php

@@ -0,0 +1,36 @@
+<?php
+
+namespace app\index\controller;
+
+use app\BaseController;
+use app\common\command\AddAgreementPdf;
+use app\common\model\master_worker\MasterWorkerAgree;
+use app\common\model\tenant\TenantAgree;
+use app\common\model\tenant\TenantRegister;
+use app\common\service\JsonService;
+use think\facade\View;
+
+class TenantAgreementController extends BaseController
+{
+    //http:// /index/tenant_agreement/index?code=
+    public function index()
+    {
+        $code = $this->request->param('code');
+        if(empty($code)){
+            return JsonService::fail('code不存在');
+        }
+        $agree = TenantAgree::with(['masterWorkerInfo','masterWorkerTeam'])->where('code', $code)->findOrEmpty();
+        if($agree->isEmpty() || empty($agree['sign'])){
+            return JsonService::fail('协议不存在');
+        }
+        $register_info = TenantRegister::where('tenant_id', $agree['masterWorkerTeam']['tenant_id']??-1)->findOrEmpty();
+        $agree['sign'] = $this->request->domain().'/'.$agree['sign'];
+        View::assign([
+            'agree'  => $agree,
+            'register_info'  => $register_info,
+            'start_date'=> date('Y年m月d日'),
+            'end_date'=> date('Y年m月d日', strtotime(date('Y-m-d'). ' +1 year')),
+        ]);
+        return view('tenant_agree');
+    }
+}

+ 20 - 20
app/index/view/agreement/master_service.html

@@ -287,47 +287,47 @@
             </div>
             </div>
         </div>
         </div>
         <p class="text-indent indent">
         <p class="text-indent indent">
-            使用维修很忙工程师软件及服务平台,成为维修很忙家庭维保服务信息平台的注册工程师(以下称“您”)。
+            使用众盾闪修工程师软件及服务平台,成为众盾闪修家庭维保服务信息平台的注册工程师(以下称“您”)。
         </p>
         </p>
         <p class="text-indent indent">
         <p class="text-indent indent">
-            为了使用维修很忙家庭维保服务信息平台的服务,您应当阅读并遵守《工程师合作协议》(以下简称“本协议”)、《维修很忙隐私政策(工程师版)》。请您务必审慎阅读、充分理解各条款内容,特别是免除或者限制维修很忙家庭维保服务信息平台责任的条款、对您权利进行限制的条款、约定争议解决方式和司法管辖的条款等,以及开通或者使用某项服务的单独协议或规则。限制、免责条款或者其他涉及您重大权益的条款可能以加粗、加下划线等形式提示您重点注意。
+            为了使用众盾闪修家庭维保服务信息平台的服务,您应当阅读并遵守《工程师合作协议》(以下简称“本协议”)、《众盾闪修隐私政策(工程师版)》。请您务必审慎阅读、充分理解各条款内容,特别是免除或者限制众盾闪修家庭维保服务信息平台责任的条款、对您权利进行限制的条款、约定争议解决方式和司法管辖的条款等,以及开通或者使用某项服务的单独协议或规则。限制、免责条款或者其他涉及您重大权益的条款可能以加粗、加下划线等形式提示您重点注意。
         </p>
         </p>
         <p class="text-indent indent">
         <p class="text-indent indent">
-            当您按照注册页面提示填写信息并完成全部注册程序后,或者阅读并点击“同意”本协议及相关规范、附件,或者使用维修很忙家庭维保服务信息平台,或者以其他任何明示或者默示的方式表示接受本协议的,即表示您已充分阅读、完全理解并同意接受本协议所有条款,本协议即在您与维修很忙家庭维保服务信息平台之间产生法律效力,成为对双方具有约束力的法律文件。在注册或者阅读本协议过程中,如果您不同意本协议的任何内容或无法准确理解条款含义,或者您不符合本协议或其他任何条款约定,请您立即停止注册程序或者停止使用/接受维修很忙家庭维保服务信息平台的任何服务。
+            当您按照注册页面提示填写信息并完成全部注册程序后,或者阅读并点击“同意”本协议及相关规范、附件,或者使用众盾闪修家庭维保服务信息平台,或者以其他任何明示或者默示的方式表示接受本协议的,即表示您已充分阅读、完全理解并同意接受本协议所有条款,本协议即在您与众盾闪修家庭维保服务信息平台之间产生法律效力,成为对双方具有约束力的法律文件。在注册或者阅读本协议过程中,如果您不同意本协议的任何内容或无法准确理解条款含义,或者您不符合本协议或其他任何条款约定,请您立即停止注册程序或者停止使用/接受众盾闪修家庭维保服务信息平台的任何服务。
         </p>
         </p>
         <p class="text-indent indent">
         <p class="text-indent indent">
-            您理解并同意维修很忙家庭维保服务信息平台仅为您提供家庭维保相关的综合技术支持服务,您与维修很忙家庭维保服务信息平台之间均无任何订立劳动合同的意思表示,亦不构成任何直接或间接的劳动/劳务关系。您作为具备提供家庭设备安装、维修、保养,管道疏通,水电、家具的安装与维修,房屋修缮,开锁,修锁等服务(以下称“家庭维保服务”)之技术和资质的专业人员,需自购配件、装备,与用户进行交易,为用户完成对应的家庭维保服务。
+            您理解并同意众盾闪修家庭维保服务信息平台仅为您提供家庭维保相关的综合技术支持服务,您与众盾闪修家庭维保服务信息平台之间均无任何订立劳动合同的意思表示,亦不构成任何直接或间接的劳动/劳务关系。您作为具备提供家庭设备安装、维修、保养,管道疏通,水电、家具的安装与维修,房屋修缮,开锁,修锁等服务(以下称“家庭维保服务”)之技术和资质的专业人员,需自购配件、装备,与用户进行交易,为用户完成对应的家庭维保服务。
         </p>
         </p>
         <p class="text-indent indent">
         <p class="text-indent indent">
-            您与维修很忙家庭维保服务信息平台之间均无任何订立劳动合同的意思表示,亦不构成任何直接或间接的劳动/劳务关系。您作为具备提供家庭设备安装、维修、保养,管道疏通,水电、家具的安装与维修,房屋修缮,开锁,修锁等服务(以下称“家庭维保服务”)之技术和资质的专业人员,需自购配件、装备,与用户进行交易,为用户完成对应的家庭维保服务。
+            您与众盾闪修家庭维保服务信息平台之间均无任何订立劳动合同的意思表示,亦不构成任何直接或间接的劳动/劳务关系。您作为具备提供家庭设备安装、维修、保养,管道疏通,水电、家具的安装与维修,房屋修缮,开锁,修锁等服务(以下称“家庭维保服务”)之技术和资质的专业人员,需自购配件、装备,与用户进行交易,为用户完成对应的家庭维保服务。
         </p>
         </p>
         <br>
         <br>
         <p class="indent">
         <p class="indent">
             <b>第一条定义</b>
             <b>第一条定义</b>
         </p>
         </p>
         <p class="text-indent indent">
         <p class="text-indent indent">
-            1.维修很忙家庭维保服务信息平台:以下简称“我们”或者“平台”,是指武汉开源节流科技有限公司及其关联公司所运营和管理的,为用户、工程师的交易活动(包括家庭维修信息发布、家庭维修服务工单领取、家庭维修服务费支付等)提供综合技术支持的第三方电商网络信息平台,该平台面向用户、工程师提供综合技术支持的途径包括但不限于维修很忙工程师APP手机客户端、微信小程序、网站以及未来开发产生的其他等形式。
+            1.众盾闪修家庭维保服务信息平台:以下简称“我们”或者“平台”,是指武汉开源节流科技有限公司及其关联公司所运营和管理的,为用户、工程师的交易活动(包括家庭维修信息发布、家庭维修服务工单领取、家庭维修服务费支付等)提供综合技术支持的第三方电商网络信息平台,该平台面向用户、工程师提供综合技术支持的途径包括但不限于众盾闪修工程师APP手机客户端、微信小程序、网站以及未来开发产生的其他等形式。
         </p>
         </p>
         <p class="text-indent indent">
         <p class="text-indent indent">
-            2.用户:是指通过维修很忙旗下相关客户端平台或者渠道发布维修需求,并支付家庭维保服务费的商户、消费者。
+            2.用户:是指通过众盾闪修旗下相关客户端平台或者渠道发布维修需求,并支付家庭维保服务费的商户、消费者。
         </p>
         </p>
         <p class="text-indent indent">
         <p class="text-indent indent">
             3.工程师:即本协议中的“您”,是指接受并同意本协议全部规定及平台规则,注册登录并经平台审核通过后,利用自身技能、自有工具,通过平台自主选择、完成家庭维保服务事项,并在服务完成后从用户处获取相应服务费的完全民事行为能力人。
             3.工程师:即本协议中的“您”,是指接受并同意本协议全部规定及平台规则,注册登录并经平台审核通过后,利用自身技能、自有工具,通过平台自主选择、完成家庭维保服务事项,并在服务完成后从用户处获取相应服务费的完全民事行为能力人。
         </p>
         </p>
         <p class="text-indent indent">
         <p class="text-indent indent">
-            4.家庭维保服务:是指用户通过维修很忙旗下相关客户端平台或者渠道发布的设备安装、维修、保养、管道疏通、水电、家具的安装与维修、房屋修缮、开锁、修锁等家庭维保服务事项信息。
+            4.家庭维保服务:是指用户通过众盾闪修旗下相关客户端平台或者渠道发布的设备安装、维修、保养、管道疏通、水电、家具的安装与维修、房屋修缮、开锁、修锁等家庭维保服务事项信息。
         </p>
         </p>
         <p class="indent">
         <p class="indent">
             <b>第二条协议范围</b>
             <b>第二条协议范围</b>
         </p>
         </p>
         <p class="text-indent indent">
         <p class="text-indent indent">
-            1.本协议的签约双方为维修很忙家庭维保服务信息平台的实际运营商武汉开源节流科技有限公司与使用维修很忙家庭维修平台信息服务的工程师,本协议是您与维修很忙家庭维保服务信息平台之间关于您使用维修很忙家庭维保服务信息平台提供的各项服务所订立的服务条款,具有正式书面合同的效力。
+            1.本协议的签约双方为众盾闪修家庭维保服务信息平台的实际运营商武汉开源节流科技有限公司与使用众盾闪修家庭维修平台信息服务的工程师,本协议是您与众盾闪修家庭维保服务信息平台之间关于您使用众盾闪修家庭维保服务信息平台提供的各项服务所订立的服务条款,具有正式书面合同的效力。
         </p>
         </p>
         <p class="text-indent indent">
         <p class="text-indent indent">
-            2.您知晓武汉开源节流科技有限公司仅为您提供维修很忙家庭维保服务信息平台信息技术相关的服务,因业务需要,您同意武汉开源节流科技有限公司代表其关联公司或者合作方与您签署其他相关服务协议(如有)、届时由对应关联方、合作方(如有)在相关区域、领域内实际履行协议、收取/支付服务报酬,并为其履行行为按本协议约定承担法律后果,各个履行主体作为独立法律实体单独承担法律责任,相互间不承担担保、保证、连带等责任。
+            2.您知晓武汉开源节流科技有限公司仅为您提供众盾闪修家庭维保服务信息平台信息技术相关的服务,因业务需要,您同意武汉开源节流科技有限公司代表其关联公司或者合作方与您签署其他相关服务协议(如有)、届时由对应关联方、合作方(如有)在相关区域、领域内实际履行协议、收取/支付服务报酬,并为其履行行为按本协议约定承担法律后果,各个履行主体作为独立法律实体单独承担法律责任,相互间不承担担保、保证、连带等责任。
         </p>
         </p>
         <p class="text-indent indent">
         <p class="text-indent indent">
-            3.本协议内容同时包括本协议正文、本协议援引的其他协议、《维修很忙家庭维修隐私政策(工程师版)》、所有平台已经发布或后续不时发布并依法通知您的各类平台规则、您在平台填写或确认的内容以及您在使用维修很忙家庭维保服务信息平台某一特定服务时另单独的协议、相关业务规则等(以下统称“单独协议”)。前述平台规则/内容一经正式发布/确认,即为本协议不可分割的一部分,与本协议正文具有同等的法律效力。
+            3.本协议内容同时包括本协议正文、本协议援引的其他协议、《众盾闪修家庭维修隐私政策(工程师版)》、所有平台已经发布或后续不时发布并依法通知您的各类平台规则、您在平台填写或确认的内容以及您在使用众盾闪修家庭维保服务信息平台某一特定服务时另单独的协议、相关业务规则等(以下统称“单独协议”)。前述平台规则/内容一经正式发布/确认,即为本协议不可分割的一部分,与本协议正文具有同等的法律效力。
         </p>
         </p>
         <p class="text-indent indent">
         <p class="text-indent indent">
             4.为了不断提升平台用户与工程师体验,适应法律法规要求等原因,您同意平台修改本协议、制定、修改平台规则。对于影响您权利义务的变更,平台将提前在平台公示,并视变更的重要程度而采取确认、提示等提醒服务。本协议与平台规则的修订构成对本协议的补充,成为本协议的一部分,一经发布即发生效力。如您不同意修订后内容,请勿继续使用平台服务,如您在修订内容发布后仍继续使用平台服务的,视为您以事实履行接受了修订后的协议内容。除另行声明或签署协议后,任何基于提升用户及工程师体验、服务升级等目的所扩大的服务范围或软件功能的增加均受本协议的约束。
             4.为了不断提升平台用户与工程师体验,适应法律法规要求等原因,您同意平台修改本协议、制定、修改平台规则。对于影响您权利义务的变更,平台将提前在平台公示,并视变更的重要程度而采取确认、提示等提醒服务。本协议与平台规则的修订构成对本协议的补充,成为本协议的一部分,一经发布即发生效力。如您不同意修订后内容,请勿继续使用平台服务,如您在修订内容发布后仍继续使用平台服务的,视为您以事实履行接受了修订后的协议内容。除另行声明或签署协议后,任何基于提升用户及工程师体验、服务升级等目的所扩大的服务范围或软件功能的增加均受本协议的约束。
@@ -336,7 +336,7 @@
             <b>第三条合作事项</b>
             <b>第三条合作事项</b>
         </p>
         </p>
         <p class="text-indent indent">
         <p class="text-indent indent">
-            1.维修很忙家庭维保服务信息平台作为家庭维保服务O2O平台,拥有丰富的家庭维保服务的信息、资源及成熟的经营模式,是为用户和您之间提供互通信息的平台,服务模式为用户以服务需求方身份在维修很忙家庭维保服务信息平台或者渠道发布维修需求事项,平台予以展示,由您自主选择是否接收前述服务事项并完成委托事项。平台将为您有偿提供完成家庭维保服务所需要的包括但不限于以下事项的各项技术支撑服务:
+            1.众盾闪修家庭维保服务信息平台作为家庭维保服务O2O平台,拥有丰富的家庭维保服务的信息、资源及成熟的经营模式,是为用户和您之间提供互通信息的平台,服务模式为用户以服务需求方身份在众盾闪修家庭维保服务信息平台或者渠道发布维修需求事项,平台予以展示,由您自主选择是否接收前述服务事项并完成委托事项。平台将为您有偿提供完成家庭维保服务所需要的包括但不限于以下事项的各项技术支撑服务:
         </p>
         </p>
         <p class="text-indent indent">
         <p class="text-indent indent">
             (1)以我们的名义为您设计、制作、推广服务宣传品;
             (1)以我们的名义为您设计、制作、推广服务宣传品;
@@ -390,13 +390,13 @@
             <b>第五条账号使用与资格审核</b>
             <b>第五条账号使用与资格审核</b>
         </p>
         </p>
         <p class="text-indent indent">
         <p class="text-indent indent">
-            1.您知悉并同意,您仅能使用本人手机号注册维修很忙工程师小程序,以登录、访问平台获取用户家庭维保信息。
+            1.您知悉并同意,您仅能使用本人手机号注册众盾闪修工程师小程序,以登录、访问平台获取用户家庭维保信息。
         </p>
         </p>
         <p class="text-indent indent">
         <p class="text-indent indent">
-            2.您已了解,如您在使用维修很忙工程师小程序账号时违反本协议或平台规则,平台有权对您的账号采取必要措施(包括但不限于限制、临时中止、永久封禁等措施),从而影响您对平台服务的正常使用,且需您自行承担因此而产生的任何责任或不利后果。
+            2.您已了解,如您在使用众盾闪修工程师小程序账号时违反本协议或平台规则,平台有权对您的账号采取必要措施(包括但不限于限制、临时中止、永久封禁等措施),从而影响您对平台服务的正常使用,且需您自行承担因此而产生的任何责任或不利后果。
         </p>
         </p>
         <p class="text-indent indent">
         <p class="text-indent indent">
-            3.您在成为维修很忙家庭维保服务平台的工程师,并通过平台自主选择、完成家庭维保服务事项前,应首先满足如下资格条件:
+            3.您在成为众盾闪修家庭维保服务平台的工程师,并通过平台自主选择、完成家庭维保服务事项前,应首先满足如下资格条件:
         </p>
         </p>
         <p class="text-indent indent">
         <p class="text-indent indent">
             (1)具有完全民事行为能力;
             (1)具有完全民事行为能力;
@@ -540,7 +540,7 @@
             2.平台在服务过程中提供的内容(包括但不限于网页、文字、图片、音频、视频、图表、计算机软件、广告等)的知识产权归平台所有。各项电子服务的所有权和运作权归武汉开源节流科技有限公司所有;除另有特别声明外,平台在提供服务时所依托的著作权、专利权即其他知识产权归武汉开源节流科技有限公司所有。
             2.平台在服务过程中提供的内容(包括但不限于网页、文字、图片、音频、视频、图表、计算机软件、广告等)的知识产权归平台所有。各项电子服务的所有权和运作权归武汉开源节流科技有限公司所有;除另有特别声明外,平台在提供服务时所依托的著作权、专利权即其他知识产权归武汉开源节流科技有限公司所有。
         </p>
         </p>
         <p class="text-indent indent">
         <p class="text-indent indent">
-            3.平台在服务过程中所使用的“维修很忙”形象等商业标识,其著作权或商标归武汉开源节流科技有限公司所有。
+            3.平台在服务过程中所使用的“众盾闪修”形象等商业标识,其著作权或商标归武汉开源节流科技有限公司所有。
         </p>
         </p>
         <p class="text-indent indent">
         <p class="text-indent indent">
             4.上述即其他任何本服务包含的内容的知识产权均受法律法规保护,未经平台、相关权利人书面许可,任何人不得以任何形式进行使用或创造相关衍生品。
             4.上述即其他任何本服务包含的内容的知识产权均受法律法规保护,未经平台、相关权利人书面许可,任何人不得以任何形式进行使用或创造相关衍生品。
@@ -639,7 +639,7 @@
             <b>第十二条:协议的生效与变更</b>
             <b>第十二条:协议的生效与变更</b>
         </p>
         </p>
         <p class="text-indent indent">
         <p class="text-indent indent">
-            1.您点击“同意”本协议及相关规范、附件,或者使用维修很忙家庭维保服务信息平台,或者以其他任何明示或者默示的方式表示接受本协议的行为时,本协议即发生法律效力,我们双方即受该协议的约束。
+            1.您点击“同意”本协议及相关规范、附件,或者使用众盾闪修家庭维保服务信息平台,或者以其他任何明示或者默示的方式表示接受本协议的行为时,本协议即发生法律效力,我们双方即受该协议的约束。
         </p>
         </p>
         <p class="text-indent indent">
         <p class="text-indent indent">
             2.您同意我们在必要时有权修改本协议条款,您在我们变更条款后,继续使用凭条服务的,即视为您已接受变更后的协议。
             2.您同意我们在必要时有权修改本协议条款,您在我们变更条款后,继续使用凭条服务的,即视为您已接受变更后的协议。
@@ -830,7 +830,7 @@
             </tr>
             </tr>
             <tr>
             <tr>
                 <td colspan="5">
                 <td colspan="5">
-                    说明:1.工程师应缴纳的服务质量保证金标准最终以我们系统展示金额为准。2.同一工程师在平台开展两项以上的服务类目时,只需按照金额最高的服务类目缴纳质保金。例如:甲工程师在平台内除提供家电维修服务外还提供家电清洗服务的,则甲工程师只需缴纳5,000.00元质保金。3.平台其他规则对质保金另有规定的,从其规定。4.解约成功是指平台在与工程师合作关系解除且处理完双方合作期限的全部事项后在维修很忙工程师平台上公布的工程师成功解约的时间。
+                    说明:1.工程师应缴纳的服务质量保证金标准最终以我们系统展示金额为准。2.同一工程师在平台开展两项以上的服务类目时,只需按照金额最高的服务类目缴纳质保金。例如:甲工程师在平台内除提供家电维修服务外还提供家电清洗服务的,则甲工程师只需缴纳5,000.00元质保金。3.平台其他规则对质保金另有规定的,从其规定。4.解约成功是指平台在与工程师合作关系解除且处理完双方合作期限的全部事项后在众盾闪修工程师平台上公布的工程师成功解约的时间。
                 </td>
                 </td>
             </tr>
             </tr>
             </tbody>
             </tbody>
@@ -845,7 +845,7 @@
             1.小程序充值缴存
             1.小程序充值缴存
         </p>
         </p>
         <p class="text-indent indent">
         <p class="text-indent indent">
-            工程师通过“维修很忙工程师小程序-我的-质保金账户-质保金充值”进行充值缴存。
+            工程师通过“众盾闪修工程师小程序-我的-质保金账户-质保金充值”进行充值缴存。
         </p>
         </p>
         <p class="text-indent indent">
         <p class="text-indent indent">
             2.家庭维保服务费划扣缴存
             2.家庭维保服务费划扣缴存
@@ -929,7 +929,7 @@
             (1)质保金锁定期届满;
             (1)质保金锁定期届满;
         </p>
         </p>
         <p class="text-indent indent">
         <p class="text-indent indent">
-            (2)工程师通过“维修很忙工程师小程序端-我的-质保金账户”申请质保金提现。
+            (2)工程师通过“众盾闪修工程师小程序端-我的-质保金账户”申请质保金提现。
         </p>
         </p>
         <p class="text-indent indent">
         <p class="text-indent indent">
             2.平台应如下表三规定的时间及时办理质保金退还事宜:
             2.平台应如下表三规定的时间及时办理质保金退还事宜:

Разлика између датотеке није приказан због своје велике величине
+ 700 - 0
app/index/view/tenant_agreement/tenant_agree.html


+ 0 - 119
app/tenantapi/controller/master_worker/BankAccountController.php

@@ -1,119 +0,0 @@
-<?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\tenantapi\controller\master_worker;
-
-
-use app\tenantapi\controller\BaseAdminController;
-use app\tenantapi\lists\master_worker\BankAccountLists;
-use app\tenantapi\logic\master_worker\BankAccountLogic;
-use app\tenantapi\validate\master_worker\BankAccountValidate;
-use app\common\logic\MasterWorkerExamineLogic;
-
-
-/**
- * BankAccount控制器
- * Class BankAccountController
- * @package app\tenantapi\controller\master_worker
- */
-class BankAccountController extends BaseAdminController
-{
-
-
-    /**
-     * @notes 获取列表
-     * @return \think\response\Json
-     * @author likeadmin
-     * @date 2024/10/08 09:41
-     */
-    public function lists()
-    {
-        return $this->dataLists(new BankAccountLists());
-    }
-
-
-    /**
-     * @notes 添加
-     * @return \think\response\Json
-     * @author likeadmin
-     * @date 2024/10/08 09:41
-     */
-    public function add()
-    {
-        $params = (new BankAccountValidate())->post()->goCheck('add');
-        $result = BankAccountLogic::add($params);
-        if (true === $result) {
-            MasterWorkerExamineLogic::updateEngineerInformation($params['worker_id']);
-            return $this->success('添加成功', [], 1, 1);
-        }
-        return $this->fail(BankAccountLogic::getError());
-    }
-
-
-    /**
-     * @notes 编辑
-     * @return \think\response\Json
-     * @author likeadmin
-     * @date 2024/10/08 09:41
-     */
-    public function edit()
-    {
-        $params = (new BankAccountValidate())->post()->goCheck('edit');
-        $result = BankAccountLogic::edit($params);
-        if (true === $result) {
-            MasterWorkerExamineLogic::updateEngineerInformation($params['worker_id']);
-            return $this->success('编辑成功', [], 1, 1);
-        }
-        return $this->fail(BankAccountLogic::getError());
-    }
-
-
-    /**
-     * @notes 删除
-     * @return \think\response\Json
-     * @author likeadmin
-     * @date 2024/10/08 09:41
-     */
-    public function delete()
-    {
-        $params = (new BankAccountValidate())->post()->goCheck('delete');
-        try {
-            $worker_ids = BankAccountLogic::getWorkerIds($params);
-            BankAccountLogic::delete($params);
-            foreach ($worker_ids as $worker_id) {
-                MasterWorkerExamineLogic::updateEngineerInformation($worker_id);
-            }
-            return $this->success('删除成功', [], 1, 1);
-        } catch (\Exception $e) {
-            return $this->fail('删除失败-'.$e->getMessage());
-        }
-    }
-
-
-    /**
-     * @notes 获取详情
-     * @return \think\response\Json
-     * @author likeadmin
-     * @date 2024/10/08 09:41
-     */
-    public function detail()
-    {
-        $params = (new BankAccountValidate())->goCheck('detail');
-        $result = BankAccountLogic::detail($params);
-        return $this->data($result);
-    }
-
-
-}

+ 0 - 129
app/tenantapi/controller/master_worker/EngineerBillController.php

@@ -1,129 +0,0 @@
-<?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\tenantapi\controller\master_worker;
-
-
-use app\tenantapi\controller\BaseAdminController;
-use app\tenantapi\lists\master_worker\EngineerBillLists;
-use app\tenantapi\logic\export\ExportLogic;
-use app\tenantapi\logic\financial\MasterSettlementDetailsLogic;
-use app\tenantapi\logic\master_worker\EngineerBillLogic;
-use app\tenantapi\logic\master_worker\EngineerSettlementLogic;
-use app\common\service\ExcelExportService;
-use excel\ExcelWriter;
-use phpseclib3\Common\Functions\Strings;
-use think\facade\Db;
-use think\facade\Log;
-
-/**
- * EngineerSettlement控制器
- * Class EngineerSettlementController
- * @package app\tenantapi\controller
- */
-class EngineerBillController extends BaseAdminController
-{
-    /**
-     * @notes 获取列表
-     * @return \think\response\Json
-     * @author likeadmin
-     * @date 2024/11/15 17:21
-     */
-    public function lists()
-    {
-        // 导入数据
-        $res = EngineerSettlementLogic::insertSettlementDetails();
-        if($res === false){
-            return $this->fail('导入失败');
-        }
-        return $this->dataLists(new EngineerBillLists());
-    }
-
-    public function download()
-    {
-        /*$firstDay = date('Y-m-01 00:00:00', strtotime('first day of last month'));
-        $lastDay = date('Y-m-t 23:59:59', strtotime('last day of last month'));
-        $filename = date('Y-m-d',strtotime($firstDay))."-至-".date('Y-m-d',strtotime($lastDay))."最后结算余额";
-        $result = ExportLogic::add([
-            'download_type' => 1,
-            'params' => ['firstDay'=>$firstDay,'lastDay'=>$lastDay],
-            'name' => $filename,
-            'admin_id' => $this->adminId,
-        ]);
-        if (false === $result) {
-            return $this->fail(ExportLogic::getError());
-        }*/
-
-        $params = $this->request->get();
-        $deadline_time = strtotime($params['deadline_time'])+86400;
-        $settlement_type = $params['settlement_type'];
-
-        $allData = $this->dataLists(new EngineerBillLists())->getData()['data']['lists'];
-        if(empty($allData)) return $this->fail('无数据');
-
-        $type = [
-            1=>'周(7天)',
-            2=>'半月',
-            3=>'整月'
-        ];
-        $filename = "截止到".$params['deadline_time'].$type[$settlement_type].'型结算单';
-        $result = ExportLogic::add([
-            'download_type' => 1,
-            'params' => ['settlement_type'=>$settlement_type,'deadline_time'=>$deadline_time],
-            'name' => $filename,
-            'admin_id' => $this->adminId,
-        ]);
-        if (false === $result) {
-            return $this->fail(ExportLogic::getError());
-        }
-        Log::info('导出参数:'.json_encode([$params,$result]));
-        // 暂时 - 立即生成导出文件
-        (new ExcelExportService)->download($result);
-        return $this->success('添加成功-'.$result, [], 1, 1);
-    }
-    public function submitForm()
-    {
-        $params = $this->request->post();
-        $params['adminId'] = $this->adminId;
-        $result = EngineerBillLogic::submitForm($params);
-        if ($result === false){
-            return $this->fail(EngineerBillLogic::getError());
-        }
-        return $this->success('打款成功', [], 1, 1);
-    }
-
-
-    /*
-     * 列表导出 - 不涉及任何后续批量编号逻辑
-     */
-    public function listsDownload()
-    {
-        $params = $this->request->get();
-        $filename = "财务结算工程师";
-        $result = ExportLogic::add([
-            'download_type' => 5,
-            'params' => $params,
-            'name' => $filename,
-            'admin_id' => $this->adminId,
-        ]);
-        if (false === $result) {
-            return $this->fail(ExportLogic::getError());
-        }
-        // 暂时 - 立即生成导出文件
-        (new ExcelExportService)->download($result);
-        return $this->success('添加成功-'.$result, [], 1, 1);
-    }
-
-}

+ 0 - 124
app/tenantapi/controller/master_worker/EngineerSettlementController.php

@@ -1,124 +0,0 @@
-<?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\tenantapi\controller\master_worker;
-
-
-use app\tenantapi\controller\BaseAdminController;
-use app\tenantapi\lists\master_worker\EngineerSettlementLists;
-use app\tenantapi\logic\master_worker\EngineerSettlementLogic;
-use app\tenantapi\validate\master_worker\EngineerSettlementValidate;
-use excel\ExcelWriter;
-use PhpOffice\PhpSpreadsheet\Spreadsheet;
-use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
-
-
-/**
- * EngineerSettlement控制器
- * Class EngineerSettlementController
- * @package app\tenantapi\controller
- */
-class EngineerSettlementController extends BaseAdminController
-{
-
-    /**
-     * @notes 获取列表
-     * @return \think\response\Json
-     * @author likeadmin
-     * @date 2024/11/15 17:21
-     */
-    public function lists()
-    {
-        return $this->dataLists(new EngineerSettlementLists());
-    }
-
-
-    /**
-     * @notes 添加
-     * @return \think\response\Json
-     * @author likeadmin
-     * @date 2024/11/15 17:21
-     */
-    public function add()
-    {
-        //$params = (new EngineerSettlementValidate())->post();//->goCheck('add');
-        try {
-            $params = $this->request->post();
-            $params = EngineerSettlementLogic::engineerSettlementValidate($params);
-            $result = EngineerSettlementLogic::add($params,$this->adminId);
-            if (true === $result) {
-                return $this->success('添加成功', [], 1, 1);
-            }
-            return $this->fail(EngineerSettlementLogic::getError());
-        } catch (\Exception $e) {
-            return $this->fail($e->getMessage()?:EngineerSettlementLogic::getError());
-        }
-    }
-
-
-    /**
-     * @notes 编辑
-     * @return \think\response\Json
-     * @author likeadmin
-     * @date 2024/11/15 17:21
-     */
-    public function edit()
-    {
-        $params = (new EngineerSettlementValidate())->post()->goCheck('edit');
-        $result = EngineerSettlementLogic::edit($params);
-        if (true === $result) {
-            return $this->success('编辑成功', [], 1, 1);
-        }
-        return $this->fail(EngineerSettlementLogic::getError());
-    }
-
-
-    /**
-     * @notes 删除
-     * @return \think\response\Json
-     * @author likeadmin
-     * @date 2024/11/15 17:21
-     */
-    public function delete()
-    {
-        $params = (new EngineerSettlementValidate())->post()->goCheck('delete');
-        EngineerSettlementLogic::delete($params);
-        return $this->success('删除成功', [], 1, 1);
-    }
-
-
-    /**
-     * @notes 获取详情
-     * @return \think\response\Json
-     * @author likeadmin
-     * @date 2024/11/15 17:21
-     */
-    public function detail()
-    {
-        $params = (new EngineerSettlementValidate())->goCheck('detail');
-        $result = EngineerSettlementLogic::detail($params);
-        return $this->data($result);
-    }
-
-    public function download()
-    {
-        $lists = EngineerSettlementLogic::downloadLists();
-        (new ExcelWriter())->generateExcelFile([
-            '工程师ID', '工程师编号', '工程师姓名', '工程师原始余额', '工程师总结算金额', '工程师扣款金额', '工程师最终结算金额', '结算时间', '结算明细备注'
-        ], $lists,'template', ['master_worker_id','worker_number','engineer_name','original_balance','total_settlement_amount','deduction_amount',
-            'final_settlement_amount','settlement_time','settlement_details_remarks']);
-    }
-
-}

+ 0 - 120
app/tenantapi/controller/master_worker/MasterWorkerAgreeController.php

@@ -1,120 +0,0 @@
-<?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\tenantapi\controller\master_worker;
-
-
-use app\tenantapi\controller\BaseAdminController;
-use app\tenantapi\lists\master_worker\MasterWorkerAgreeLists;
-use app\tenantapi\logic\master_worker\MasterWorkerAgreeLogic;
-use app\tenantapi\validate\master_worker\MasterWorkerAgreeValidate;
-use app\common\logic\MasterWorkerExamineLogic;
-
-
-/**
- * MasterWorkerAgree控制器
- * Class MasterWorkerAgreeController
- * @package app\tenantapi\controller\master_worker
- */
-class MasterWorkerAgreeController extends BaseAdminController
-{
-
-
-    /**
-     * @notes 获取列表
-     * @return \think\response\Json
-     * @author likeadmin
-     * @date 2024/07/17 15:20
-     */
-    public function lists()
-    {
-        return $this->dataLists(new MasterWorkerAgreeLists());
-    }
-
-
-    /**
-     * @notes 添加
-     * @return \think\response\Json
-     * @author likeadmin
-     * @date 2024/07/17 15:20
-     */
-    public function add()
-    {
-        $params = (new MasterWorkerAgreeValidate())->post()->goCheck('add');
-        $result = MasterWorkerAgreeLogic::add($params);
-        if (true === $result) {
-            MasterWorkerExamineLogic::updateEngineerInformation($params['worker_id']);
-            return $this->success('添加成功', [], 1, 1);
-        }
-        return $this->fail(MasterWorkerAgreeLogic::getError());
-    }
-
-
-    /**
-     * @notes 编辑
-     * @return \think\response\Json
-     * @author likeadmin
-     * @date 2024/07/17 15:20
-     */
-    public function edit()
-    {
-        $params = (new MasterWorkerAgreeValidate())->post()->goCheck('edit');
-        $result = MasterWorkerAgreeLogic::edit($params);
-        if (true === $result) {
-            $info = MasterWorkerAgreeLogic::detail(['id'=>$params['id']]);
-            MasterWorkerExamineLogic::updateEngineerInformation($info['worker_id']);
-            return $this->success('编辑成功', [], 1, 1);
-        }
-        return $this->fail(MasterWorkerAgreeLogic::getError());
-    }
-
-
-    /**
-     * @notes 删除
-     * @return \think\response\Json
-     * @author likeadmin
-     * @date 2024/07/17 15:20
-     */
-    public function delete()
-    {
-        $params = (new MasterWorkerAgreeValidate())->post()->goCheck('delete');
-        try {
-            $worker_ids = MasterWorkerAgreeLogic::getWorkerIds($params);
-            MasterWorkerAgreeLogic::delete($params);
-            foreach ($worker_ids as $worker_id) {
-                MasterWorkerExamineLogic::updateEngineerInformation($worker_id);
-            }
-            return $this->success('删除成功', [], 1, 1);
-        } catch (\Exception $e) {
-            return $this->fail('删除失败-'.$e->getMessage());
-        }
-    }
-
-
-    /**
-     * @notes 获取详情
-     * @return \think\response\Json
-     * @author likeadmin
-     * @date 2024/07/17 15:20
-     */
-    public function detail()
-    {
-        $params = (new MasterWorkerAgreeValidate())->goCheck('detail');
-        $result = MasterWorkerAgreeLogic::detail($params);
-        return $this->data($result);
-    }
-
-
-}

+ 0 - 109
app/tenantapi/controller/master_worker/MasterWorkerExamineController.php

@@ -1,109 +0,0 @@
-<?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\tenantapi\controller\master_worker;
-
-
-use app\tenantapi\controller\BaseAdminController;
-use app\tenantapi\lists\master_worker\MasterWorkerAgreeLists;
-use app\tenantapi\lists\master_worker\MasterWorkerExamineLists;
-use app\tenantapi\logic\master_worker\MasterWorkerAgreeLogic;
-use app\tenantapi\logic\master_worker\MasterWorkerExamineLogic;
-use app\tenantapi\validate\master_worker\MasterWorkerAgreeValidate;
-
-
-/**
- * MasterWorkerExamine控制器
- * Class MasterWorkerExamineController
- * @package app\tenantapi\controller\master_worker
- */
-class MasterWorkerExamineController extends BaseAdminController
-{
-
-
-    /**
-     * @notes 获取列表
-     * @return \think\response\Json
-     * @author likeadmin
-     * @date 2024/07/17 15:20
-     */
-    public function lists()
-    {
-        return $this->dataLists(new MasterWorkerExamineLists());
-    }
-
-
-    /**
-     * @notes 添加
-     * @return \think\response\Json
-     * @author likeadmin
-     * @date 2024/07/17 15:20
-     */
-    public function add()
-    {
-        return $this->fail('');
-    }
-
-
-    /**
-     * @notes 编辑
-     * @return \think\response\Json
-     * @author likeadmin
-     * @date 2024/07/17 15:20
-     */
-    public function edit()
-    {
-        $params = $this->request->post();
-        $result = MasterWorkerExamineLogic::edit($params);
-        if (true === $result) {
-            return $this->success('编辑成功', [], 1, 1);
-        }
-        return $this->fail(MasterWorkerExamineLogic::getError());
-    }
-
-
-    /**
-     * @notes 删除
-     * @return \think\response\Json
-     * @author likeadmin
-     * @date 2024/07/17 15:20
-     */
-    public function delete()
-    {
-        $params = (new MasterWorkerAgreeValidate())->post()->goCheck('delete');
-        MasterWorkerAgreeLogic::delete($params);
-        return $this->success('删除成功', [], 1, 1);
-    }
-
-
-    /**
-     * @notes 获取详情
-     * @return \think\response\Json
-     * @author likeadmin
-     * @date 2024/07/17 15:20
-     */
-    public function detail()
-    {
-        $params = (new MasterWorkerAgreeValidate())->goCheck('detail');
-        $result = MasterWorkerAgreeLogic::detail($params);
-        return $this->data($result);
-    }
-
-    public function getStatus()
-    {
-        $result = MasterWorkerAgreeLogic::getStatus();
-        return $this->data(['count'=>$result]);
-    }
-}

+ 0 - 116
app/tenantapi/controller/master_worker/MasterWorkerInfoController.php

@@ -1,116 +0,0 @@
-<?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\tenantapi\controller\master_worker;
-
-
-use app\tenantapi\controller\BaseAdminController;
-use app\tenantapi\lists\master_worker\MasterWorkerInfoLists;
-use app\tenantapi\logic\master_worker\MasterWorkerInfoLogic;
-use app\tenantapi\validate\master_worker\MasterWorkerInfoValidate;
-use app\common\logic\MasterWorkerExamineLogic;
-
-
-/**
- * MasterWorkerInfo控制器
- * Class MasterWorkerInfoController
- * @package app\tenantapi\controller\master_worker
- */
-class MasterWorkerInfoController extends BaseAdminController
-{
-
-
-    /**
-     * @notes 获取列表
-     * @return \think\response\Json
-     * @author likeadmin
-     * @date 2024/10/07 18:58
-     */
-    public function lists()
-    {
-        return $this->dataLists(new MasterWorkerInfoLists());
-    }
-
-
-    /**
-     * @notes 添加
-     * @return \think\response\Json
-     * @author likeadmin
-     * @date 2024/10/07 18:58
-     */
-    public function add()
-    {
-        $params = (new MasterWorkerInfoValidate())->post()->goCheck('add');
-        $result = MasterWorkerInfoLogic::add($params);
-        if (true === $result) {
-            MasterWorkerExamineLogic::updateEngineerInformation($params['worker_id']);
-            return $this->success('添加成功', [], 1, 1);
-        }
-        return $this->fail(MasterWorkerInfoLogic::getError());
-    }
-
-
-    /**
-     * @notes 编辑
-     * @return \think\response\Json
-     * @author likeadmin
-     * @date 2024/10/07 18:58
-     */
-    public function edit()
-    {
-        $params = (new MasterWorkerInfoValidate())->post()->goCheck('edit');
-        $result = MasterWorkerInfoLogic::edit($params);
-        if (true === $result) {
-            $info = MasterWorkerInfoLogic::detail(['id'=>$params['id']]);
-            MasterWorkerExamineLogic::updateEngineerInformation($info['worker_id']);
-            return $this->success('编辑成功', [], 1, 1);
-        }
-        return $this->fail(MasterWorkerInfoLogic::getError());
-    }
-
-
-    /**
-     * @notes 删除
-     * @return \think\response\Json
-     * @author likeadmin
-     * @date 2024/10/07 18:58
-     */
-    public function delete()
-    {
-        $params = (new MasterWorkerInfoValidate())->post()->goCheck('delete');
-        $worker_ids = MasterWorkerInfoLogic::getWorkerIds($params);
-        MasterWorkerInfoLogic::delete($params);
-        foreach ($worker_ids as $worker_id) {
-            MasterWorkerExamineLogic::updateEngineerInformation($worker_id);
-        }
-        return $this->success('删除成功', [], 1, 1);
-    }
-
-
-    /**
-     * @notes 获取详情
-     * @return \think\response\Json
-     * @author likeadmin
-     * @date 2024/10/07 18:58
-     */
-    public function detail()
-    {
-        $params = (new MasterWorkerInfoValidate())->goCheck('detail');
-        $result = MasterWorkerInfoLogic::detail($params);
-        return $this->data($result);
-    }
-
-
-}

+ 0 - 66
app/tenantapi/controller/master_worker/MasterWorkerServiceOrderController.php

@@ -1,66 +0,0 @@
-<?php
-namespace app\tenantapi\controller\master_worker;
-
-use app\tenantapi\controller\BaseAdminController;
-use app\tenantapi\lists\master_commission\MasterWorkerCommissionNoticeLists;
-use app\tenantapi\lists\master_worker\MasterWorkerServiceOrderLists;
-use app\tenantapi\logic\export\ExportLogic;
-use app\common\service\ExcelExportService;
-
-/**
- * MasterWorkerServiceOrder控制器
- * Class MasterWorkerServiceOrderController
- * @package app\tenantapi\controller
- */
-class MasterWorkerServiceOrderController extends BaseAdminController
-{
-    /**
-     * @notes 获取列表
-     */
-    public function lists()
-    {
-        return $this->dataLists(new MasterWorkerServiceOrderLists());
-    }
-    public function download()
-    {
-        $params = $this->request->get();
-        $tmp_filename = '';
-        if($params['start_time'] && $params['end_time']) $tmp_filename = date('Y-m-d',strtotime($params['start_time']))."-至-".date('Y-m-d',strtotime($params['end_time']));
-        $filename = $tmp_filename."工单统计";
-        $result = ExportLogic::add([
-            'download_type' => 2,
-            'params' => $params,
-            'name' => $filename,
-            'admin_id' => $this->adminId,
-        ]);
-        if (false === $result) {
-            return $this->fail(ExportLogic::getError());
-        }
-        // 暂时 - 立即生成导出文件
-        (new ExcelExportService)->download($result);
-        return $this->success('添加成功-'.$result, [], 1, 1);
-    }
-
-    public function freeNotice()
-    {
-        return $this->dataLists(new MasterWorkerCommissionNoticeLists());
-    }
-
-    public function freeDownload()
-    {
-        $params = $this->request->get();
-        $filename = "免费班工程师统计";
-        $result = ExportLogic::add([
-            'download_type' => 4,
-            'params' => $params,
-            'name' => $filename,
-            'admin_id' => $this->adminId,
-        ]);
-        if (false === $result) {
-            return $this->fail(ExportLogic::getError());
-        }
-        // 暂时 - 立即生成导出文件
-        (new ExcelExportService)->download($result);
-        return $this->success('添加成功-'.$result, [], 1, 1);
-    }
-}

+ 0 - 37
app/tenantapi/controller/master_worker/RetentionMoneyLogController.php

@@ -1,37 +0,0 @@
-<?php
-
-namespace app\tenantapi\controller\master_worker;
-
-use app\tenantapi\controller\BaseAdminController;
-use app\tenantapi\validate\master_worker\MasterWorkerRetentionMoneyLogValidate;
-use app\common\logic\RetentionMoneyLogic;
-use app\workerapi\lists\MasterWorkerRetentionMoneyLogLists;
-
-class RetentionMoneyLogController extends BaseAdminController
-{
-    public array $notNeedLogin = ['totalAmount'];
-    public function lists()
-    {
-        return $this->dataLists(new MasterWorkerRetentionMoneyLogLists());
-    }
-
-    public function totalAmount()
-    {
-        $params = (new MasterWorkerRetentionMoneyLogValidate())->get()->goCheck('totalAmount');
-        $result = RetentionMoneyLogic::totalAmount($params);
-        if (false === $result) {
-            return $this->fail(RetentionMoneyLogic::getError());
-        }
-        return $this->success('操作成功',$result, 1, 0);
-    }
-
-    public function add()
-    {
-        $params = (new MasterWorkerRetentionMoneyLogValidate())->post()->goCheck('add');
-        $result = RetentionMoneyLogic::addDeduct($params);
-        if (true === $result) {
-            return $this->success('添加成功', [], 1, 1);
-        }
-        return $this->fail(RetentionMoneyLogic::getError());
-    }
-}

+ 0 - 27
app/tenantapi/lists/master_worker/MasterWorkerLists.php

@@ -51,25 +51,8 @@ class MasterWorkerLists extends BaseAdminDataLists implements ListsSearchInterfa
             //'in' => ['mw.time_period']
             //'in' => ['mw.time_period']
         ];
         ];
     }
     }
-    /**
-     * 获取数据权限
-     * $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['province']) && !empty($data_rules['province'])) {
-            $where[] = ['mw.province','in' ,$data_rules['province']];
-        }
-        if (isset($data_rules['city']) && !empty($data_rules['city'])) {
-            $where[] = ['mw.city','in' ,$data_rules['city']];
-        }
-        return $where;
-    }
     public function queryWhere(){
     public function queryWhere(){
         $where = [];
         $where = [];
-        $where[] = ['mw.team_role','in',[0,1]];
         if(isset($this->params['time_period']) && !empty($this->params['time_period'])){
         if(isset($this->params['time_period']) && !empty($this->params['time_period'])){
             $sqls = [];
             $sqls = [];
             foreach ($this->params['time_period'] as $item) {
             foreach ($this->params['time_period'] as $item) {
@@ -128,16 +111,8 @@ class MasterWorkerLists extends BaseAdminDataLists implements ListsSearchInterfa
             $where[] =[ 'mw.work_total','<= ',$this->params['max_work_number']];
             $where[] =[ 'mw.work_total','<= ',$this->params['max_work_number']];
         }
         }
         if(isset($this->params['order_id']) && $this->params['order_id']){
         if(isset($this->params['order_id']) && $this->params['order_id']){
-//            $lon_lat = (ServiceWork::where('id',$this->params['order_id'])->column("lon,lat,goods_category_id"))[0];
-//            $this->lon = $lon_lat['lon'];
-//            $this->lat = $lon_lat['lat'];
-//            $goods_category_id = $lon_lat['goods_category_id'];
-            // 派单搜索条件 - 工程师保护期  工程师可用金额限制(除去保护期工程师)  订单产品分类  订单坐标筛选(暂不按距离筛选只按距离排序)
-            //$ids = DistributeLeafletsService::getIntersection($goods_category_id??0);
-            //$where[] = [ 'mw.id','IN',$ids];
             $where[] = [ 'mw.work_status','=',0];
             $where[] = [ 'mw.work_status','=',0];
         }
         }
-        Log::debug('MasterWorker-where:'.json_encode($where));
         return $where;
         return $where;
     }
     }
     /**
     /**
@@ -170,7 +145,6 @@ class MasterWorkerLists extends BaseAdminDataLists implements ListsSearchInterfa
             ->where('mw.tenant_id', $this->adminInfo['tenant_id'])
             ->where('mw.tenant_id', $this->adminInfo['tenant_id'])
             ->where($this->searchWhere)
             ->where($this->searchWhere)
             ->where($queryWhere)
             ->where($queryWhere)
-            ->where($this->queryDataWhere())
             ->field($fields)
             ->field($fields)
             ->limit($this->limitOffset, $this->limitLength)
             ->limit($this->limitOffset, $this->limitLength)
             ->having($having)
             ->having($having)
@@ -217,7 +191,6 @@ class MasterWorkerLists extends BaseAdminDataLists implements ListsSearchInterfa
             ->where('mw.tenant_id', $this->adminInfo['tenant_id'])
             ->where('mw.tenant_id', $this->adminInfo['tenant_id'])
             ->where($this->searchWhere)
             ->where($this->searchWhere)
             ->where($queryWhere)
             ->where($queryWhere)
-            ->where($this->queryDataWhere())
             ->field($fields)
             ->field($fields)
             ->having($having)
             ->having($having)
             ->select()->toArray());
             ->select()->toArray());

+ 8 - 11
app/tenantapi/logic/ConfigLogic.php

@@ -86,23 +86,20 @@ class ConfigLogic
         
         
         $type = explode(',', $type);
         $type = explode(',', $type);
         $lists = DictData::whereIn('type_value', $type)->select()->toArray();
         $lists = DictData::whereIn('type_value', $type)->select()->toArray();
-        foreach ($type as $item) {
-            if (str_contains($item, 'data_table_')) {
-                $table = str_replace('data_table_', '', $item);
-                if (method_exists(TableDataLogic::class, $table)) {
-                    $lists = array_merge($lists, TableDataLogic::$table());
-                }
-            }
-        }
         if (empty($lists)) {
         if (empty($lists)) {
             return [];
             return [];
         }
         }
 
 
         $result = [];
         $result = [];
         foreach ($type as $item) {
         foreach ($type as $item) {
-            foreach ($lists as $dict) {
-                if ($dict['type_value'] == $item) {
-                    $result[$item][] = $dict;
+            if (str_contains($item, 'data_table_')) {
+                $table = str_replace('data_table_', '', $item);
+                $result[$item] = getOptionDataByTable($table);
+            }else{
+                foreach ($lists as $dict) {
+                    if ($dict['type_value'] == $item) {
+                        $result[$item][] = $dict;
+                    }
                 }
                 }
             }
             }
         }
         }

+ 3 - 0
app/tenantapi/logic/auth/MenuLogic.php

@@ -53,6 +53,9 @@ class MenuLogic extends BaseLogic
             $roleMenu = TenantSystemRoleMenu::whereIn('role_id', $admin['role_id'])->column('menu_id');
             $roleMenu = TenantSystemRoleMenu::whereIn('role_id', $admin['role_id'])->column('menu_id');
             $where[] = ['id', 'in', $roleMenu];
             $where[] = ['id', 'in', $roleMenu];
         }
         }
+        if ($admin['tenant_id']) {
+            $where[] = ['tenant_id', '=', $admin['tenant_id']];
+        }
 
 
         $menu = TenantSystemMenu::where($where)
         $menu = TenantSystemMenu::where($where)
             ->order(['sort' => 'desc', 'id' => 'asc'])
             ->order(['sort' => 'desc', 'id' => 'asc'])

+ 7 - 1
app/tenantapi/logic/master_worker/MasterWorkerLogic.php

@@ -18,6 +18,7 @@ namespace app\tenantapi\logic\master_worker;
 use app\common\model\master_worker\MasterWorker;
 use app\common\model\master_worker\MasterWorker;
 use app\common\logic\BaseLogic;
 use app\common\logic\BaseLogic;
 use app\common\model\master_worker\MasterWorkerRetentionMoneyLog;
 use app\common\model\master_worker\MasterWorkerRetentionMoneyLog;
+use app\common\model\master_worker\MasterWorkerTeam;
 use app\common\model\master_worker_register\MasterWorkerRegister;
 use app\common\model\master_worker_register\MasterWorkerRegister;
 use app\common\service\ConfigService;
 use app\common\service\ConfigService;
 use think\db\Query;
 use think\db\Query;
@@ -53,6 +54,7 @@ class MasterWorkerLogic extends BaseLogic
         Db::startTrans();
         Db::startTrans();
         try {
         try {
 
 
+            $params['team_id'] = MasterWorkerTeam::where('tenant_id',$params['tenant_id'])->value('id')??"";
             $number = MasterWorker::count();
             $number = MasterWorker::count();
             $number += 1;
             $number += 1;
             if ($number < 100000) {
             if ($number < 100000) {
@@ -103,6 +105,8 @@ class MasterWorkerLogic extends BaseLogic
                 'labels' => (isset($params['labels']) && $params['labels'])?implode(',',$params['labels']):'',
                 'labels' => (isset($params['labels']) && $params['labels'])?implode(',',$params['labels']):'',
                 'remark' => $params['remark']??'',
                 'remark' => $params['remark']??'',
                 'tenant_id' => $params['tenant_id'],
                 'tenant_id' => $params['tenant_id'],
+                'team_id' => $params['team_id']??0,
+                'team_role' => 2,
                 'audit_state' => 1,
                 'audit_state' => 1,
             ]);
             ]);
 
 
@@ -156,7 +160,7 @@ class MasterWorkerLogic extends BaseLogic
         }
         }
         Db::startTrans();
         Db::startTrans();
         try {
         try {
-
+            $params['team_id'] = MasterWorkerTeam::where('tenant_id',$params['tenant_id'])->value('id')??"";
             MasterWorker::where('id', $params['id'])->update([
             MasterWorker::where('id', $params['id'])->update([
                 'sn' => $params['sn'],
                 'sn' => $params['sn'],
                 'avatar' => $params['avatar'],
                 'avatar' => $params['avatar'],
@@ -196,6 +200,8 @@ class MasterWorkerLogic extends BaseLogic
                 'labels' => (isset($params['labels']) && $params['labels'])?implode(',',$params['labels']):'',
                 'labels' => (isset($params['labels']) && $params['labels'])?implode(',',$params['labels']):'',
                 'remark' => $params['remark']??'',
                 'remark' => $params['remark']??'',
                 'tenant_id' => $params['tenant_id'],
                 'tenant_id' => $params['tenant_id'],
+                'team_id' => $params['team_id']??0,
+                'team_role' => 2,
             ]);
             ]);
             Db::commit();
             Db::commit();
             return true;
             return true;

+ 65 - 0
app/workerapi/controller/PropertyHeadController.php

@@ -0,0 +1,65 @@
+<?php
+namespace app\workerapi\controller;
+
+use app\adminapi\logic\property\PropertyHeadLogic;
+use app\adminapi\logic\user\UserLogic;
+use app\adminapi\validate\property\PropertyHeadValidate;
+use app\common\enum\notice\NoticeEnum;
+use app\common\model\master_worker\MasterWorker;
+use app\common\model\master_worker_register\MasterWorkerRegister;
+use app\common\model\notice\NoticeSetting;
+use app\common\model\sale\Sale;
+use app\common\service\wechat\WeChatOaService;
+use app\workerapi\lists\MasterWorkerRegisterLists;
+use app\workerapi\lists\PropertyHeadLists;
+use app\workerapi\lists\TenantRegisterLists;
+use app\workerapi\logic\DictLogic;
+use app\workerapi\logic\LoginLogic;
+use app\workerapi\logic\MasterWorkerRegisterLogic;
+
+use app\workerapi\logic\SaleLogic;
+use app\workerapi\logic\TenantRegisterLogic;
+use app\workerapi\validate\LoginAccountValidate;
+use app\workerapi\validate\RegisterValidate;
+
+
+/**
+ * 销售
+ * Class PropertyHeadController
+ * @package app\workerapi\controller
+ */
+class PropertyHeadController extends BaseApiController
+{
+
+    public array $notNeedLogin = ['register'];
+
+
+    /**
+     * @notes 注册代理
+     * @return \think\response\Json
+     * @author 段誉
+     * @date 2022/9/7 15:38
+     */
+    public function register()
+    {
+        $params = (new PropertyHeadValidate())->post()->goCheck('add');
+        $params['sale_type'] = 1;
+        $params['is_cooperate'] = 3;
+        // 通过 $params['city'] 查询省市区
+        if(isset($params['city']) && !empty($params['city'])){
+            $postageRegion = array_column(getPostageRegion(), null, 'id');
+            $params['province'] = $postageRegion[$params['city']]['pid'];
+            $params['province'] && $params['area_name'] = $postageRegion[$params['province']]['name'].$postageRegion[$params['city']]['name'];
+        }
+        $result = PropertyHeadLogic::add($params);
+        if (true === $result) {
+            // 通过手机号查询用户是否注册 - 已注册绑定id ,未注册注册再绑定id
+            $userId = UserLogic::getUserIdByMobile($params['head_mobile'], true);
+            PropertyHeadLogic::updateUserId($params['head_mobile'],$userId);
+            return $this->success('入驻成功', [], 1, 1);
+        }
+        return $this->fail(PropertyHeadLogic::getError());
+    }
+
+
+}

+ 126 - 0
app/workerapi/controller/SaleController.php

@@ -0,0 +1,126 @@
+<?php
+// +----------------------------------------------------------------------
+// | whitef快速开发前后端分离管理后台(PHP版)
+// +----------------------------------------------------------------------
+// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
+// | 开源版本可自由商用,可去除界面版权logo
+// | gitee下载:https://gitee.com/likeshop_gitee/whitef
+// | github下载:https://github.com/likeshop-github/whitef
+// | 访问官网:https://www.whitef.cn
+// | whitef团队 版权所有 拥有最终解释权
+// +----------------------------------------------------------------------
+// | author: whitefTeam
+// +----------------------------------------------------------------------
+
+namespace app\workerapi\controller;
+
+use app\common\enum\notice\NoticeEnum;
+use app\common\model\master_worker\MasterWorker;
+use app\common\model\master_worker_register\MasterWorkerRegister;
+use app\common\model\notice\NoticeSetting;
+use app\common\model\sale\Sale;
+use app\common\service\wechat\WeChatOaService;
+use app\workerapi\lists\MasterWorkerRegisterLists;
+use app\workerapi\lists\PropertyHeadLists;
+use app\workerapi\lists\TenantRegisterLists;
+use app\workerapi\logic\DictLogic;
+use app\workerapi\logic\LoginLogic;
+use app\workerapi\logic\MasterWorkerRegisterLogic;
+use app\workerapi\logic\PropertyHeadLogic;
+use app\workerapi\logic\SaleLogic;
+use app\workerapi\logic\TenantRegisterLogic;
+use app\workerapi\validate\LoginAccountValidate;
+use app\workerapi\validate\RegisterValidate;
+
+
+/**
+ * 销售
+ * Class SaleController
+ * @package app\workerapi\controller
+ */
+class SaleController extends BaseApiController
+{
+
+    public array $notNeedLogin = ['register', 'account','getTenantList','getTenantDetail','getWorkerList','getWorkerDetail','getPropertyList','getPropertyDetail'];
+
+
+    /**
+     * @notes 注册账号
+     * @return \think\response\Json
+     * @author 段誉
+     * @date 2022/9/7 15:38
+     */
+    public function register()
+    {
+        return $this->success('注册成功', [], 1, 1);
+    }
+
+    /**
+     * @notes 手机号密码/手机号验证码登录
+     * @return \think\response\Json
+     * @author 段誉
+     * @date 2022/9/16 10:42
+     */
+    public function account()
+    {
+        $params = request()->post();
+        $result = SaleLogic::login($params);
+        if (false === $result) {
+            return $this->fail(SaleLogic::getError());
+        }
+        return $this->data($result);
+    }
+
+    /**
+     * 销售查看门店入驻情况列表
+     */
+    public function getTenantList()
+    {
+        return $this->dataLists(new TenantRegisterLists());
+    }
+    /**
+     * 销售查看门店入驻详情
+     */
+    public function getTenantDetail()
+    {
+        $params = request()->get();
+        $result = TenantRegisterLogic::detail($params);
+        return $this->data($result);
+    }
+
+    /**
+     * 销售查看工程师入驻情况列表
+     */
+    public function getWorkerList()
+    {
+        return $this->dataLists(new MasterWorkerRegisterLists());
+    }
+    /**
+     * 销售查看工程师入驻详情
+     */
+    public function getWorkerDetail()
+    {
+        $params = request()->get();
+        $result = MasterWorkerRegisterLogic::detail($params);
+        return $this->data($result);
+    }
+
+
+    /**
+     * 销售查看代理列表
+     */
+    public function getPropertyList()
+    {
+        return $this->dataLists(new PropertyHeadLists());
+    }
+    /**
+     * 销售查看代理详情
+     */
+    public function getPropertyDetail()
+    {
+        $params = request()->get();
+        $result = PropertyHeadLogic::detail($params);
+        return $this->data($result);
+    }
+
+}

+ 67 - 0
app/workerapi/controller/TenantController.php

@@ -0,0 +1,67 @@
+<?php
+namespace app\workerapi\controller;
+
+
+use app\adminapi\validate\tenant\TenantRegisterValidate;
+use app\workerapi\logic\TenantAgreeLogic;
+use app\workerapi\logic\TenantRegisterLogic;
+use app\workerapi\validate\MasterWorkerAgreeValidate;
+
+/**
+ * 门店H5注册
+ * Class TenantController
+ * @package app\workerapi\controller
+ */
+class TenantController extends BaseApiController
+{
+
+    public array $notNeedLogin = ['register'];
+
+
+    /**
+     * @notes 注册账号
+     * @return \think\response\Json
+     * @author 段誉
+     * @date 2022/9/7 15:38
+     */
+    public function register()
+    {
+        $params = (new TenantRegisterValidate())->post()->goCheck('apiadd');
+        $result = TenantRegisterLogic::add($params);
+        if (true === $result) {
+            return $this->success('入驻成功', [], 1, 1);
+        }
+        return $this->fail(TenantRegisterLogic::getError());
+    }
+
+
+    /**
+     * 协议详情
+     * @return \think\response\Json
+     */
+    public function agreement_detail()
+    {
+        $type = $this->request->get('type/s', '');
+        $result = TenantAgreeLogic::getAgreeByType($type,$this->userId);
+        return $this->data($result);
+    }
+
+    /**
+     * 协议签名
+     * @return \think\response\Json
+     */
+    public function agreeSign()
+    {
+        $params = (new MasterWorkerAgreeValidate())->post()->goCheck('sign', [
+            'user_id' => $this->userId,
+            'user_info' => $this->userInfo
+        ]);
+        $result = TenantAgreeLogic::sign($params);
+        if (false === $result) {
+            return $this->fail(TenantAgreeLogic::getError());
+        }
+        return $this->success('签名成功', [], 1, 1);
+    }
+
+
+}

+ 28 - 2
app/workerapi/controller/TrainingController.php

@@ -12,11 +12,13 @@ use app\workerapi\logic\LoginLogic;
 use app\workerapi\logic\MasterWorkerInfoLogic;
 use app\workerapi\logic\MasterWorkerInfoLogic;
 use app\workerapi\logic\MasterWorkerLogic;
 use app\workerapi\logic\MasterWorkerLogic;
 use app\workerapi\logic\MasterWorkerTeamLogic;
 use app\workerapi\logic\MasterWorkerTeamLogic;
+use app\workerapi\logic\TenantAgreeLogic;
 use app\workerapi\logic\TrainingLogic;
 use app\workerapi\logic\TrainingLogic;
 use app\workerapi\validate\BankAccountValidate;
 use app\workerapi\validate\BankAccountValidate;
 use app\workerapi\validate\MasterWokerInfoValidate;
 use app\workerapi\validate\MasterWokerInfoValidate;
 use app\workerapi\validate\MasterWokerTeamValidate;
 use app\workerapi\validate\MasterWokerTeamValidate;
 use app\workerapi\validate\MasterWokerValidate;
 use app\workerapi\validate\MasterWokerValidate;
+use app\workerapi\validate\MasterWorkerAgreeValidate;
 
 
 class TrainingController extends BaseApiController
 class TrainingController extends BaseApiController
 {
 {
@@ -105,8 +107,6 @@ class TrainingController extends BaseApiController
         return $this->success('', [], 1, 1);
         return $this->success('', [], 1, 1);
     }
     }
 
 
-
-
     /**
     /**
      * 考试结果统计
      * 考试结果统计
      * @return \think\response\Json
      * @return \think\response\Json
@@ -118,5 +118,31 @@ class TrainingController extends BaseApiController
         return $this->data($result);
         return $this->data($result);
     }
     }
 
 
+    /**
+     * 获取团队协议详情
+     * @return \think\response\Json
+     */
+    public function agreement_detail()
+    {
+        $result = TenantAgreeLogic::getAgreeByType('tenant_cooperate',$this->userId);
+        return $this->data($result);
+    }
+
+    /**
+     * 签署团队协议
+     * @return \think\response\Json
+     */
+    public function agreeSign()
+    {
+        $params = (new MasterWorkerAgreeValidate())->post()->goCheck('sign', [
+            'user_id' => $this->userId,
+            'user_info' => $this->userInfo
+        ]);
+        $result = TenantAgreeLogic::sign($params);
+        if (false === $result) {
+            return $this->fail(TenantAgreeLogic::getError());
+        }
+        return $this->success('签名成功', [], 1, 1);
+    }
 
 
 }
 }

+ 77 - 0
app/workerapi/lists/MasterWorkerRegisterLists.php

@@ -0,0 +1,77 @@
+<?php
+namespace app\workerapi\lists;
+
+use app\common\model\master_worker_register\MasterWorkerRegister;
+use app\common\lists\ListsSearchInterface;
+use app\common\model\works\ServiceWork;
+use app\workerapi\logic\SaleLogic;
+use think\facade\Db;
+
+
+/**
+ * MasterWorkerRegister列表
+ * Class MasterWorkerRegisterLists
+ * @package app\workerapi\lists
+ */
+class MasterWorkerRegisterLists extends BaseWorkerDataLists implements ListsSearchInterface
+{
+
+
+    /**
+     * @notes 设置搜索条件
+     * @return \string[][]
+     * @author likeadmin
+     * @date 2025/02/25 09:29
+     */
+    public function setSearch(): array
+    {
+        $sale_id = SaleLogic::getSaleIdByToken($this->params['sale_token']??'00000');
+        $this->params['sale_id'] = $sale_id;
+        return [
+            '=' => ['maintain_exp_type', 'other_exp_type', 'city', 'vehicle_type', 'status','is_credential','sale_id'],
+            '%like%' => ['name', 'mobile'],
+        ];
+    }
+
+
+    /**
+     * @notes 获取列表
+     * @return array
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     * @author likeadmin
+     * @date 2025/02/25 09:29
+     */
+    public function lists(): array
+    {
+        $list = MasterWorkerRegister::where($this->searchWhere)
+            ->field(['*'])
+            ->limit($this->limitOffset, $this->limitLength)
+            ->order(['id' => 'desc'])
+            ->select()
+            ->toArray();
+        $workCount = array_column(ServiceWork::where('master_worker_id','>',0)
+            ->whereIn('master_worker_id', array_filter(array_column($list, 'worker_id'), function($value) { return $value != 0; })??[-1])
+            ->field(['master_worker_id',Db::raw('COUNT(id) as work_total')])
+            ->group('master_worker_id')
+            ->select()->toArray(),'work_total','master_worker_id');
+        foreach ($list as &$item) {
+            $item['work_total'] = $workCount[$item['worker_id']]??0;
+        }
+        return $list;
+    }
+
+
+    /**
+     * @notes 获取数量
+     * @return int
+     * @author likeadmin
+     * @date 2025/02/25 09:29
+     */
+    public function count(): int
+    {
+        return MasterWorkerRegister::where($this->searchWhere)->count();
+    }
+
+}

+ 68 - 0
app/workerapi/lists/PropertyHeadLists.php

@@ -0,0 +1,68 @@
+<?php
+namespace app\workerapi\lists;
+
+use app\common\model\master_worker_register\MasterWorkerRegister;
+use app\common\lists\ListsSearchInterface;
+use app\common\model\property\PropertyHead;
+use app\common\model\works\ServiceWork;
+use app\workerapi\logic\SaleLogic;
+use think\facade\Db;
+
+
+/**
+ * PropertyHeadLists列表
+ * Class PropertyHeadLists
+ * @package app\workerapi\lists
+ */
+class PropertyHeadLists extends BaseWorkerDataLists implements ListsSearchInterface
+{
+
+
+    /**
+     * @notes 设置搜索条件
+     * @return \string[][]
+     * @author likeadmin
+     * @date 2025/02/25 09:29
+     */
+    public function setSearch(): array
+    {
+        $sale_id = SaleLogic::getSaleIdByToken($this->params['sale_token']??'00000');
+        $this->params['sale_id'] = $sale_id;
+        return [
+            '=' => ['sale_id'],
+            '%like%' => ['property_name', 'village_name', 'head_name'],
+        ];
+    }
+
+    /**
+     * @notes 获取列表
+     * @return array
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     * @author likeadmin
+     * @date 2025/02/25 09:29
+     */
+    public function lists(): array
+    {
+        return PropertyHead::where($this->searchWhere)
+            ->field(['*'])
+            ->limit($this->limitOffset, $this->limitLength)
+            ->order(['id' => 'desc'])
+            ->select()
+            ->toArray();
+    }
+
+
+    /**
+     * @notes 获取数量
+     * @return int
+     * @author likeadmin
+     * @date 2025/02/25 09:29
+     */
+    public function count(): int
+    {
+        return PropertyHead::where($this->searchWhere)->count();
+    }
+
+}

+ 66 - 0
app/workerapi/lists/TenantRegisterLists.php

@@ -0,0 +1,66 @@
+<?php
+namespace app\workerapi\lists;
+
+use app\common\model\tenant\TenantRegister;
+use app\common\lists\ListsSearchInterface;
+use app\workerapi\logic\SaleLogic;
+
+
+/**
+ * TenantRegister列表
+ * Class TenantRegisterLists
+ * @package app\workerapi\lists
+ */
+class TenantRegisterLists extends BaseWorkerDataLists implements ListsSearchInterface
+{
+
+
+    /**
+     * @notes 设置搜索条件
+     * @return \string[][]
+     * @author likeadmin
+     * @date 2025/02/25 09:29
+     */
+    public function setSearch(): array
+    {
+        $sale_id = SaleLogic::getSaleIdByToken($this->params['sale_token']??'00000');
+        $this->params['sale_id'] = $sale_id;
+        return [
+            '=' => ['door_images', 'business_images', 'province', 'city', 'area_name', 'lon', 'lat', 'status', 'sale_id', 'openid'],
+            '%like%' => ['name', 'head_name','mobile'],
+        ];
+    }
+
+
+    /**
+     * @notes 获取列表
+     * @return array
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     * @author likeadmin
+     * @date 2025/02/25 09:29
+     */
+    public function lists(): array
+    {
+        return TenantRegister::with(['sale'])->where($this->searchWhere)
+            ->field(['*'])
+            ->limit($this->limitOffset, $this->limitLength)
+            ->order(['id' => 'desc'])
+            ->select()
+            ->toArray();
+    }
+
+
+    /**
+     * @notes 获取数量
+     * @return int
+     * @author likeadmin
+     * @date 2025/02/25 09:29
+     */
+    public function count(): int
+    {
+        return TenantRegister::where($this->searchWhere)->count();
+    }
+
+}

+ 3 - 1
app/workerapi/logic/LoginLogic.php

@@ -98,7 +98,8 @@ class LoginLogic extends BaseLogic
                     'lon' => !empty($params['lon'])?$params['lon']:0,
                     'lon' => !empty($params['lon'])?$params['lon']:0,
                     'lat' => !empty($params['lat'])?$params['lat']:0,
                     'lat' => !empty($params['lat'])?$params['lat']:0,
                     'address' => !empty($params['address'])?$params['address']:'',
                     'address' => !empty($params['address'])?$params['address']:'',
-                    'status'=>0
+                    'status'=>0,
+                    'sale_id' => $params['sale_id']??0,
                 ]);
                 ]);
             }else{
             }else{
                 MasterWorkerRegister::create([
                 MasterWorkerRegister::create([
@@ -119,6 +120,7 @@ class LoginLogic extends BaseLogic
                     'lon' => !empty($params['lon'])?$params['lon']:0,
                     'lon' => !empty($params['lon'])?$params['lon']:0,
                     'lat' => !empty($params['lat'])?$params['lat']:0,
                     'lat' => !empty($params['lat'])?$params['lat']:0,
                     'address' => !empty($params['address'])?$params['address']:'',
                     'address' => !empty($params['address'])?$params['address']:'',
+                    'sale_id' => $params['sale_id']??0,
                 ]);
                 ]);
             }
             }
 
 

+ 24 - 0
app/workerapi/logic/MasterWorkerRegisterLogic.php

@@ -0,0 +1,24 @@
+<?php
+namespace app\workerapi\logic;
+
+use app\common\model\master_worker_register\MasterWorkerRegister;
+use app\common\logic\BaseLogic;
+
+/**
+ * MasterWorkerRegister逻辑
+ * Class MasterWorkerRegisterLogic
+ * @package app\workerapi\logic\master_worker_register
+ */
+class MasterWorkerRegisterLogic extends BaseLogic
+{
+
+    /**
+     * 获取详情
+     */
+    public static function detail($params): array
+    {
+        return MasterWorkerRegister::findOrEmpty($params['id'])->append(['credential_images','credential_name','city_text','maintain_exp_type_text','other_exp_type_text','vehicle_type_text'])->toArray();
+    }
+
+
+}

+ 35 - 0
app/workerapi/logic/PropertyHeadLogic.php

@@ -0,0 +1,35 @@
+<?php
+namespace app\workerapi\logic;
+
+
+use app\adminapi\logic\user\UserLogic;
+use app\common\model\property\PropertyHead;
+use app\common\logic\BaseLogic;
+use app\common\model\user\User;
+use app\common\service\wechat\WeChatMnpService;
+use Exception;
+use think\facade\Db;
+use think\facade\Log;
+
+
+/**
+ * PropertyHead逻辑
+ * Class PropertyHeadLogic
+ * @package app\adminapi\logic
+ */
+class PropertyHeadLogic extends BaseLogic
+{
+
+
+    /**
+     * @notes 获取详情
+     * @param $params
+     * @return array
+     * @author likeadmin
+     * @date 2024/09/19 10:48
+     */
+    public static function detail($params): array
+    {
+        return PropertyHead::findOrEmpty($params['id'])->append(['city_text'])->toArray();
+    }
+}

+ 95 - 0
app/workerapi/logic/SaleLogic.php

@@ -0,0 +1,95 @@
+<?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\workerapi\logic;
+
+
+use app\common\enum\LoginEnum;
+use app\common\enum\notice\NoticeEnum;
+use app\common\model\sale\Sale;
+use app\common\logic\BaseLogic;
+use app\common\service\sms\SmsDriver;
+use think\facade\Config;
+use think\facade\Db;
+
+
+/**
+ * Sale逻辑
+ * Class SaleLogic
+ * @package app\workerapi\logic
+ */
+class SaleLogic extends BaseLogic
+{
+
+
+    public static function login($params)
+    {
+        try {
+            // 账号/手机号 密码登录
+            $where = ['mobile' => $params['mobile']];
+            $user = Sale::where($where)->findOrEmpty();
+            if ($user->isEmpty()) {
+                throw new \Exception('无此用户');
+            }
+
+            // 账号密码登录
+            if (LoginEnum::ACCOUNT_PASSWORD == $params['scene']) {
+                if (!isset($params['password'])) {
+                    throw new \Exception('请输入密码');
+                }
+                $passwordSalt = Config::get('project.unique_identification');
+                if ($user['password'] !== create_password($params['password'], $passwordSalt)) {
+                    throw new \Exception('密码错误');
+                }
+            }
+
+            // 手机验证码登录
+            if (LoginEnum::MOBILE_CAPTCHA == $params['scene']) {
+                if (!isset($params['code'])) {
+                    throw new \Exception('请输入手机验证码');
+                }
+                $smsDriver = new SmsDriver();
+                $result = $smsDriver->verify($params['mobile'], $params['code'], NoticeEnum::LOGIN_CAPTCHA);
+                if (!$result) {
+                    throw new \Exception('验证码错误');
+                }
+            }
+
+            //获取token
+            $token = create_token($params['mobile']);
+            $user->token = $token;
+            $user->save();
+
+            return [
+                'id' => $user['id'],
+                'mobile' => $user['mobile'],
+                'sale_token' => $token,
+            ];
+        } catch (\Exception $e) {
+            self::setError($e->getMessage());
+            return false;
+        }
+    }
+
+    public static function getSaleIdByToken($sale_token)
+    {
+        $user = Sale::where('token',$sale_token)->findOrEmpty();
+        if ($user->isEmpty()) {
+            return -1;
+        }
+        return $user['id'];
+    }
+
+
+}

+ 76 - 0
app/workerapi/logic/TenantAgreeLogic.php

@@ -0,0 +1,76 @@
+<?php
+namespace app\workerapi\logic;
+
+use app\common\command\AddAgreementPdf;
+use app\common\logic\BaseLogic;
+use app\common\model\master_worker\MasterWorker;
+use app\common\model\master_worker_register\MasterWorkerRegister;
+use app\common\model\tenant\Tenant;
+use app\common\model\tenant\TenantAgree;
+use app\common\model\tenant\TenantRegister;
+use app\common\service\ConfigService;
+use app\common\service\UploadService;
+use think\facade\Db;
+
+
+/**
+ * TenantAgreeLogic逻辑
+ * Class TenantAgreeLogic
+ * @package app\workerapi\logic\
+ */
+class TenantAgreeLogic extends BaseLogic
+{
+    public static function getAgreeByType($type,$userId)
+    {
+
+        //合作协议是否存在pdf
+        if($type=='tenant_cooperate'){
+            $pdf = TenantAgree::where(['agree_type'=>'tenant_cooperate','worker_id'=>$userId])->value('pdf_url');
+        }
+
+        return [
+            'title' => ConfigService::get('tenant_agreement', $type . '_title', ''),
+            'content' => ConfigService::get('tenant_agreement', $type . '_content', ''),
+            'pdf'=>!empty($pdf)?'https://'.$_SERVER['SERVER_NAME'].'/'.$pdf:''
+        ];
+    }
+    /**
+     *
+     * @param $params
+     * @return bool|void
+     */
+    public static function sign($params)
+    {
+        try {
+            //查询协议
+            $agree = TenantAgree::where(['worker_id'=>$params['user_id'],'agree_type'=>'tenant_cooperate'])->findOrEmpty();
+            //保存签名
+            if($agree->isEmpty()){
+                $agree->code = generate_sn(TenantAgree::class, 'code');
+                $agree->agree_type = 'tenant_cooperate';
+                $agree->worker_id = $params['user_id'];
+            }
+            $result = UploadService::base64Image(4, $params['sign']);
+            $sign = $result['url'];
+            $agree->sign = $sign;
+            $agree->audit_state = 0;
+            $agree->save();
+
+            \think\facade\Log::write('团队签署协议'.$agree->code);
+            AddAgreementPdf::addTenantAgreePdf(['code'=>$agree->code,'url'=>'https://'.$_SERVER['SERVER_NAME'].'/index/tenant_agreement/index?code='.$agree->code]);
+            return true;
+        } catch (\Exception $e) {
+            self::setError($e->getMessage());
+            return false;
+        }
+    }
+    /**
+     * 获取详情
+     */
+    public static function detail($params): array
+    {
+        return TenantRegister::findOrEmpty($params['id'])->toArray();
+    }
+
+
+}

+ 77 - 0
app/workerapi/logic/TenantRegisterLogic.php

@@ -0,0 +1,77 @@
+<?php
+namespace app\workerapi\logic;
+
+use app\common\logic\BaseLogic;
+use app\common\model\master_worker\MasterWorker;
+use app\common\model\master_worker_register\MasterWorkerRegister;
+use app\common\model\tenant\Tenant;
+use app\common\model\tenant\TenantRegister;
+use think\facade\Db;
+
+
+/**
+ * TenantRegisterLogic逻辑
+ * Class TenantRegisterLogic
+ * @package app\workerapi\logic\master_worker_register
+ */
+class TenantRegisterLogic extends BaseLogic
+{
+    /**
+     *  添加
+     */
+    public static function add(array $params): bool
+    {
+        Db::startTrans();
+        try {
+            $info = TenantRegister::where('mobile',$params['mobile'])->findOrEmpty();
+            if(!$info->isEmpty()){
+                throw new \Exception('手机号已入驻门店');
+            }
+            $info = Tenant::where('tel',$params['mobile'])->findOrEmpty();
+            if(!$info->isEmpty()){
+                throw new \Exception('手机号已存在租户');
+            }
+            // $info = MasterWorkerRegister::where('mobile',$params['mobile'])->findOrEmpty();
+            // if(!$info->isEmpty()){
+            //     throw new \Exception('手机号已注册工程师');
+            // }
+            // $info = MasterWorker::where('mobile',$params['mobile'])->findOrEmpty();
+            // if(!$info->isEmpty()){
+            //     throw new \Exception('手机号已占用');
+            // }
+            isset($params['city']) && $params['province'] = getProvinceByCityId($params['city']);
+            //$params['province'] && $params['area_name'] = $postageRegion[$params['province']]['name'].$postageRegion[$params['city']]['name'];
+            TenantRegister::create([
+                'name' => $params['name'],
+                'head_name' => $params['head_name']??'',
+                'mobile' => $params['mobile'],
+                'door_images' => $params['door_images']??'',
+                'business_images' => $params['business_images']??'',
+                'province' => $params['province']??0,
+                'city' => $params['city']??0,
+                'area_name' => $params['area_name']??'',
+                'lon' => $params['lon']??0,
+                'lat' => $params['lat']??0,
+                'status' => $params['status']??0,
+                'sale_id' => $params['sale_id'],
+                'openid' => $params['openid']??''
+            ]);
+
+            Db::commit();
+            return true;
+        } catch (\Exception $e) {
+            Db::rollback();
+            self::setError($e->getMessage());
+            return false;
+        }
+    }
+    /**
+     * 获取详情
+     */
+    public static function detail($params): array
+    {
+        return TenantRegister::findOrEmpty($params['id'])->append(['city_text'])->toArray();
+    }
+
+
+}

+ 8 - 1
app/workerapi/logic/TrainingLogic.php

@@ -12,6 +12,8 @@ use app\common\model\master_worker\MasterWorkerInfo;
 use app\common\model\master_worker\MasterWorkerTeam;
 use app\common\model\master_worker\MasterWorkerTeam;
 use app\common\model\shops\ShopOrderGoods;
 use app\common\model\shops\ShopOrderGoods;
 use app\common\model\shops\ShopOrders;
 use app\common\model\shops\ShopOrders;
+use app\common\model\tenant\TenantAgree;
+use app\common\model\tenant\TenantRegister;
 use app\common\model\training\TrainingCourse;
 use app\common\model\training\TrainingCourse;
 use app\common\model\training\TrainingQuestions;
 use app\common\model\training\TrainingQuestions;
 use app\common\model\training\TrainingWorkerCourse;
 use app\common\model\training\TrainingWorkerCourse;
@@ -45,8 +47,13 @@ class TrainingLogic extends  BaseLogic
                 $masterWorker = MasterWorker::where('id',$masterWorkerId)->find();
                 $masterWorker = MasterWorker::where('id',$masterWorkerId)->find();
                 $task_info['category_status'] = empty($masterWorker['category_ids'])?0:1;
                 $task_info['category_status'] = empty($masterWorker['category_ids'])?0:1;
                 $task_info['service_status'] = (empty($masterWorker['lon']) || empty($masterWorker['lat']))?0:1;
                 $task_info['service_status'] = (empty($masterWorker['lon']) || empty($masterWorker['lat']))?0:1;
+                // 团队入驻状态 审核状态 0待审核 1审核通过 2审核拒绝
+                $task_info['tenant_register_status'] = TenantRegister::where('mobile',$masterWorker['mobile'])->value('status')??0;
+                // 团队协议状态 审核状态 0待审核 1审核通过 2审核拒绝 3待提交
+                $task_info['tenant_agree_status'] = TenantAgree::where('worker_id',$masterWorker['id'])->value('audit_state')??0;
+                $task_info['tenant_agree_info'] = TenantAgreeLogic::getAgreeByType('tenant_cooperate',$masterWorker['id']);
             }
             }
-            $task_info['free_videos'] = TrainingCourse::where('course_lock',1)->select()->toArray();
+            //$task_info['free_videos'] = TrainingCourse::where('course_lock',1)->select()->toArray();
             return $task_info;
             return $task_info;
         } catch (\Exception $e) {
         } catch (\Exception $e) {
             self::setError($e->getMessage());
             self::setError($e->getMessage());

+ 1 - 0
config/export.php

@@ -15,5 +15,6 @@ return [
         '6' =>  'sale.SaleAnalysisLists',
         '6' =>  'sale.SaleAnalysisLists',
         '7' =>  'sale.PropertyHeadAnalysisLists',
         '7' =>  'sale.PropertyHeadAnalysisLists',
         '2' =>  'master_worker.MasterWorkerServiceOrderLists',
         '2' =>  'master_worker.MasterWorkerServiceOrderLists',
+        '8' =>  'property.PropertyHeadLists',
     ],
     ],
 ];
 ];

Неке датотеке нису приказане због велике количине промена