Bladeren bron

修改拼团

dongxiaoqin 1 jaar geleden
bovenliggende
commit
2bcb9e4375

+ 26 - 16
app/adminapi/controller/master_worker/MasterWorkerTemporaryController.php

@@ -17,11 +17,9 @@ namespace app\adminapi\controller\master_worker;
 
 
 use app\adminapi\controller\BaseAdminController;
-use app\adminapi\lists\master_worker\MasterWorkerLists;
-use app\adminapi\lists\master_worker\MoneyAnalysis;
-use app\adminapi\lists\master_worker\MasterWorkerOnlineLists;
-use app\adminapi\logic\master_worker\MasterWorkerLogic;
-use app\adminapi\validate\master_worker\MasterWorkerValidate;
+use app\adminapi\lists\master_worker\MasterWorkerTemporaryLists;
+use app\adminapi\logic\master_worker\MasterWorkerTemporaryLogic;
+use app\adminapi\validate\master_worker\MasterWorkerTemporaryValidate;
 
 
 /**
@@ -39,7 +37,7 @@ class MasterWorkerTemporaryController extends BaseAdminController
      */
     public function lists()
     {
-        return $this->dataLists(new MasterWorkerLists());
+        return $this->dataLists(new MasterWorkerTemporaryLists());
     }
 
     /**
@@ -50,12 +48,12 @@ class MasterWorkerTemporaryController extends BaseAdminController
      */
     public function add()
     {
-        $params = (new MasterWorkerValidate())->post()->goCheck('add');
-        $result = MasterWorkerLogic::add($params);
+        $params = (new MasterWorkerTemporaryValidate())->post()->goCheck('add');
+        $result = MasterWorkerTemporaryLogic::add($params);
         if (true === $result) {
             return $this->success('添加成功', [], 1, 1);
         }
-        return $this->fail(MasterWorkerLogic::getError());
+        return $this->fail(MasterWorkerTemporaryLogic::getError());
     }
 
 
@@ -67,12 +65,12 @@ class MasterWorkerTemporaryController extends BaseAdminController
      */
     public function edit()
     {
-        $params = (new MasterWorkerValidate())->post()->goCheck('edit');
-        $result = MasterWorkerLogic::edit($params);
+        $params = (new MasterWorkerTemporaryValidate())->post()->goCheck('edit');
+        $result = MasterWorkerTemporaryLogic::edit($params);
         if (true === $result) {
             return $this->success('编辑成功', [], 1, 1);
         }
-        return $this->fail(MasterWorkerLogic::getError());
+        return $this->fail(MasterWorkerTemporaryLogic::getError());
     }
 
 
@@ -84,8 +82,8 @@ class MasterWorkerTemporaryController extends BaseAdminController
      */
     public function delete()
     {
-        $params = (new MasterWorkerValidate())->post()->goCheck('delete');
-        MasterWorkerLogic::delete($params);
+        $params = (new MasterWorkerTemporaryValidate())->post()->goCheck('delete');
+        MasterWorkerTemporaryLogic::delete($params);
         return $this->success('删除成功', [], 1, 1);
     }
 
@@ -98,9 +96,21 @@ class MasterWorkerTemporaryController extends BaseAdminController
      */
     public function detail()
     {
-        $params = (new MasterWorkerValidate())->goCheck('detail');
-        $result = MasterWorkerLogic::detail($params);
+        $params = (new MasterWorkerTemporaryValidate())->goCheck('detail');
+        $result = MasterWorkerTemporaryLogic::detail($params);
         return $this->data($result);
     }
 
+    /**
+     * 导入excel
+     */
+    public function import()
+    {
+        $file = request()->file('file');
+        $result = MasterWorkerTemporaryLogic::import($file);
+        if (true === $result) {
+            return $this->success('导入成功', [], 1, 1);
+        }
+        return $this->fail(MasterWorkerTemporaryLogic::getError());
+    }
 }

+ 16 - 3
app/adminapi/controller/works/GroupServiceWorkController.php

@@ -23,11 +23,11 @@ use app\adminapi\validate\works\GroupServiceWorkValidate;
 use app\common\model\master_worker\MasterWorkerTemporary;
 
 /**
- * ServiceWork控制器
- * Class WorksController
+ * GroupServiceWork控制器
+ * Class GroupServiceWorkController
  * @package app\adminapi\controller\works
  */
-class ServiceWorkController extends BaseAdminController
+class GroupServiceWorkController extends BaseAdminController
 {
 
 
@@ -145,5 +145,18 @@ class ServiceWorkController extends BaseAdminController
         return $this->success('操作成功!', [], 1, 1);
     }
 
+    /**
+     * 导入excel
+     */
+    public function import()
+    {
+        $file = request()->file('file');
+        $result = GroupServiceWorkLogic::import($file);
+        if (true === $result) {
+            return $this->success('导入成功', [], 1, 1);
+        }
+        return $this->fail(GroupServiceWorkLogic::getError());
+    }
+
 
 }

+ 83 - 0
app/adminapi/lists/master_worker/MasterWorkerTemporaryLists.php

@@ -0,0 +1,83 @@
+<?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\master_worker;
+
+
+use app\adminapi\lists\BaseAdminDataLists;
+use app\adminapi\service\DistributeLeafletsService;
+use app\common\model\master_worker\MasterWorker;
+use app\common\lists\ListsSearchInterface;
+use app\common\model\master_worker\MasterWorkerTeam;
+use app\common\model\master_worker\MasterWorkerTemporary;
+use app\common\model\master_worker_credential\MasterWorkerCredentialImages;
+use app\common\model\works\ServiceWork;
+use think\facade\Db;
+use think\facade\Log;
+
+/**
+ * MasterWorkerTemporary列表
+ * Class MasterWorkerTemporaryLists
+ * @package app\adminapi\listsmaster_worker
+ */
+class MasterWorkerTemporaryLists extends BaseAdminDataLists implements ListsSearchInterface
+{
+    public $count = 0;
+    public $range = 0;
+    /**
+     * @notes 设置搜索条件
+     * @return \string[][]
+     * @author likeadmin
+     * @date 2024/07/10 18:17
+     */
+    public function setSearch(): array
+    {
+        // 派单搜索条件 - 工程师接单状态
+        return [
+            '=' => ['mobile', 'is_disable', 'work_status'],
+            '%like%' => ['real_name']
+        ];
+    }
+   
+    /**
+     * @notes 获取列表
+     * @return array
+     * @throws \think\db\exception\DataNotFoundException
+     * @throws \think\db\exception\DbException
+     * @throws \think\db\exception\ModelNotFoundException
+     * @author likeadmin
+     * @date 2024/07/10 18:17
+     */
+    public function lists(): array
+    {
+        $list = MasterWorkerTemporary::where($this->searchWhere)
+            ->limit($this->limitOffset, $this->limitLength)
+            ->order('id','desc')
+            ->select()->toArray();
+        return $list;
+    }
+
+
+    /**
+     * @notes 获取数量
+     * @return int
+     * @author likeadmin
+     * @date 2024/07/10 18:17
+     */
+    public function count(): int
+    {
+        return MasterWorker::where($this->searchWhere)
+            ->count();
+    }
+}

+ 9 - 2
app/adminapi/lists/works/GroupServiceWorkLists.php

@@ -90,19 +90,26 @@ class GroupServiceWorkLists extends BaseAdminDataLists implements ListsSearchInt
      */
     public function lists(): array
     {
-        return GroupServiceWork::with([
+        $lists = GroupServiceWork::with([
+            'worker'=>function(Query $query) {
+                $query->field("id,worker_number,real_name,mobile");
+            },
+            'goodsCategory' =>function (Query $query) {
+                $query->field('id,name');
+            },
             'serviceWorkLog' =>function(Query $query){
                 $query->field('id,work_id,opera_log,create_time');
             },
         ])
             ->where($this->searchWhere)
             ->where($this->queryWhere())
-            ->field(['id', 'work_sn', 'real_name', 'mobile', 'address', 'title', 'category_type', 'goods_category_ids', 'goods_category_id', 'work_status', 'service_status', 'dispatch_time', 'receive_time', 'appointment_time', 'finished_images', 'finished_time', 'master_worker_id', 'work_amount',  'create_time', 'finally_door_time','third_type'])
+            ->field(['id', 'code','work_sn', 'real_name', 'mobile', 'address', 'title', 'category_type', 'goods_category_ids', 'goods_category_id', 'work_total','settlement_amount','work_status', 'service_status', 'dispatch_time', 'receive_time', 'appointment_time', 'work_images','finished_images', 'finished_time', 'master_worker_id', 'work_amount',  'create_time', 'finally_door_time','third_type'])
             ->append(['service_status_text','category_type_text','third_type_text'])
             ->limit($this->limitOffset, $this->limitLength)
             ->order(['id' => 'desc'])
             ->select()
             ->toArray();
+        return $lists;
     }
 
 

+ 200 - 0
app/adminapi/logic/master_worker/MasterWorkerTemporaryLogic.php

@@ -0,0 +1,200 @@
+<?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\master_worker;
+
+
+use Excel;
+use think\db\Query;
+use think\facade\Db;
+use think\facade\Config;
+use app\common\logic\BaseLogic;
+use PhpOffice\PhpSpreadsheet\IOFactory;
+use app\common\model\master_worker\MasterWorker;
+use app\common\model\master_worker\MasterWorkerTemporary;
+
+
+/**
+ * MasterWorkerTemporary逻辑
+ * Class MasterWorkerLogicTemporary
+ * @package app\adminapi\logic\master_worker
+ */
+class MasterWorkerTemporaryLogic extends BaseLogic
+{
+
+
+    /**
+     * @notes 添加
+     * @param array $params
+     * @return bool
+     * @author likeadmin
+     * @date 2024/07/10 18:17
+     */
+    public static function add(array $params): bool
+    {
+        Db::startTrans();
+        try {
+            if (MasterWorkerTemporary::where('worker_number', $params['worker_number'])->value('worker_number')) {
+                self::setError('该工号已存在!');
+                return false;
+            }
+            if (MasterWorkerTemporary::where('mobile', $params['mobile'])->value('mobile')) {
+                self::setError('该手机号已存在!');
+                return false;
+            }
+            if($params['category_ids']){
+                foreach ($params['category_ids'] as $val){
+                    is_array($val)?($ids[] = end($val)):($ids[] = $val);
+                }
+                $params['category_ids'] = implode(',',$ids);
+            }
+            $masterWorker = MasterWorkerTemporary::create([
+                'worker_number' => $params['worker_number'],
+                'real_name' => $params['real_name'],
+                'mobile' => $params['mobile'],
+                'is_disable' => $params['is_disable'],
+                'work_status' => $params['work_status']??0,
+                'remark' => $params['remark']??'',
+                'category_ids' => $params['category_ids']??'',
+            ]);
+            
+            Db::commit();
+            return true;
+        } catch (\Exception $e) {
+            Db::rollback();
+            self::setError($e->getMessage());
+            return false;
+        }
+    }
+
+
+    /**
+     * @notes 编辑
+     * @param array $params
+     * @return bool
+     * @author likeadmin
+     * @date 2024/07/10 18:17
+     */
+    public static function edit(array $params): bool
+    {
+        Db::startTrans();
+        try {
+            if($params['category_ids']){
+                foreach ($params['category_ids'] as $val){
+                    is_array($val)?($ids[] = end($val)):($ids[] = $val);
+                }
+                $params['category_ids'] = implode(',',$ids);
+            }
+            $update = [
+                'real_name' => $params['real_name'],
+                'is_disable' => $params['is_disable'],
+                'work_status' => $params['work_status']??0,
+                'remark' => $params['remark']??'',
+                'category_ids' => $params['category_ids']??'',
+            ];
+            MasterWorkerTemporary::where('id', $params['id'])->update($update);
+            
+            Db::commit();
+            return true;
+        } catch (\Exception $e) {
+            Db::rollback();
+            self::setError($e->getMessage());
+            return false;
+        }
+    }
+
+
+    /**
+     * @notes 删除
+     * @param array $params
+     * @return bool
+     * @author likeadmin
+     * @date 2024/07/10 18:17
+     */
+    public static function delete(array $params): bool
+    {
+        return MasterWorkerTemporary::destroy($params['id']);
+    }
+
+
+    /**
+     * @notes 获取详情
+     * @param $params
+     * @return array
+     * @author likeadmin
+     * @date 2024/07/10 18:17
+     */
+    public static function detail($params): array
+    {
+        $info = MasterWorkerTemporary::findOrEmpty($params['id'])->toArray();
+
+        if(!empty($info['category_ids'])){
+            $info['category_ids'] = explode(',',$info['category_ids']);
+            $info['category_ids'] = array_map('intval', $info['category_ids']);
+        }
+        return $info;
+    }
+
+    /**
+     * 导入工程师
+     */
+    public static function import($file) {
+        
+        $mobile = [];
+        try {
+            // 移动文件到指定目录
+            $info = $file->move(root_path('public') . 'uploads');
+            if ($info) {
+                $filePath = $info->getPathname();
+
+                // 读取 Excel 文件
+                $spreadsheet = IOFactory::load($filePath);
+                $worksheet = $spreadsheet->getActiveSheet();
+                $highestRow = $worksheet->getHighestRow();
+
+                $number = MasterWorkerTemporary::count();
+                // 假设第一行为表头,从第二行开始读取数据
+                for ($row = 2; $row <= $highestRow; $row++) {
+                    
+                    $data = [
+                        'real_name' => $worksheet->getCell('A' . $row)->getValue(),
+                        'mobile' => $worksheet->getCell('B' . $row)->getValue(),
+                        'remark' => $worksheet->getCell('C' . $row)->getValue(),
+                    ];
+                    if (empty($data['mobile'])) {
+                        continue;
+                    }
+                    if(MasterWorkerTemporary::where('mobile', $data['mobile'])->value('mobile')){
+                        $mobile[] = $data['mobile']; 
+                        continue;
+                    }
+                    $number += 1;
+                    $data['worker_number'] = str_pad($number, 6, '0', STR_PAD_LEFT);
+                    MasterWorkerTemporary::create($data);
+                }
+                if ($mobile) {
+                    self::setError('手机号'.implode(',',$mobile).'已存在');
+                    return false;
+                }
+                return true;
+            } else {
+                self::setError($file->getError());
+                return false;
+            }
+        } catch (\Exception $e) {
+            self::setError($e->getMessage());
+            return false;
+        }
+    }
+}

+ 119 - 33
app/adminapi/logic/works/GroupServiceWorkLogic.php

@@ -14,10 +14,11 @@
 
 namespace app\adminapi\logic\works;
 
+use think\db\Query;
 use think\Exception;
 use think\facade\Db;
 use app\common\logic\BaseLogic;
-use app\common\model\works\ServiceWork;
+use PhpOffice\PhpSpreadsheet\IOFactory;
 use app\common\model\works\GroupServiceWork;
 use app\workerapi\logic\GroupServiceWorkLogLogic;
 use app\common\model\master_worker\MasterWorkerTemporary;
@@ -40,10 +41,9 @@ class GroupServiceWorkLogic extends BaseLogic
     {
         Db::startTrans();
         try {
-            ServiceWork::where('id', $params['id'])->update([
+            GroupServiceWork::where('id', $params['id'])->update([
                 'address' => $params['address'],
                 'appointment_time' => strtotime($params['appointment_time']),
-                'estimated_finish_time' => $params['estimated_finish_time'],
             ]);
             Db::commit();
             return true;
@@ -75,14 +75,16 @@ class GroupServiceWorkLogic extends BaseLogic
 
             $work->finally_door_time = time();//最后上门时间
             $work->work_status = 4;//已上门
+            $work->service_status = 1;//服务中
             $work->work_images = $params['work_images'];
             $work->save();
 
             //添加变更日志
             $work_log = [
+                'type' => 3,
                 'work_id'=>$work->id,
                 'master_worker_id'=>$work->master_worker_id,
-                'opera_log'=>'编号['.$params['user_info']['worker_number'].']'.$params['user_info']['real_name'].'于'.date('y-m-d H:i:s',time()).'于'.date('Y-m-d H:i:s',time()).'已上门',
+                'opera_log'=>'编号['.$params['user_info']['worker_number'].']'.$params['user_info']['real_name'].'于'.date('y-m-d H:i:s',time()).'已上门',
             ];
             GroupServiceWorkLogLogic::add($work_log);
             Db::commit();
@@ -117,22 +119,25 @@ class GroupServiceWorkLogic extends BaseLogic
                 throw new Exception('工单不存在');
             }
             if($params['code'] != $work->code) {
-                throw new Exception('验码错误');
+                throw new Exception('验码错误');
             }
 
-            if($work->user_confirm_status !=2){
+            if($work->work_status !=4){
                 throw new Exception('请勿重复操作');
             }
 
             $work->finished_images = $params['finished_images'];
-            $work->user_confirm_status = 3;//待确认服务完成
+            $work->user_confirm_status = 5;//用户确认完成
+            $work->work_status = 7;//服务工单已完结
+            $work->service_status = 3;//工单已完成
             $work->save();
 
             //添加变更日志
             $work_log = [
+                'type' => 4,
                 'work_id'=>$work->id,
                 'master_worker_id'=>$work->master_worker_id,
-                'opera_log'=>'编号['.$params['user_info']['worker_number'].']'.$params['user_info']['real_name'].'于'.date('y-m-d H:i:s',time()).'于'.date('Y-m-d H:i:s',time()).'提交了待用户确认服务完成',
+                'opera_log'=>'编号['.$params['user_info']['worker_number'].']'.$params['user_info']['real_name'].'于'.date('y-m-d H:i:s',time()).'于'.date('Y-m-d H:i:s',time()).'提交了确认服务完成',
             ];
             GroupServiceWorkLogLogic::add($work_log);
             Db::commit();
@@ -143,32 +148,43 @@ class GroupServiceWorkLogic extends BaseLogic
             return false;
         }
     }
-
+    
     public static function allocateWorker($params,$userInfo){
         Db::startTrans();
         try {
-            $work = GroupServiceWork::findOrEmpty($params['id']);
-            if($work->isEmpty()){
-                throw new Exception('工单不存在');
-            }
-            if($work->work_status >=6 ){
-                throw new \Exception('工单状态只能修改待结算之前的');
-            }
-            if($work->master_worker_id == $params['master_worker_id']){
-                throw new \Exception('分配的工程师相同');
+            $ids = explode(",",$params['id']);
+            if (count($ids) > 50) {
+                throw new \Exception('单次最多分配50个');
             }
             $worker = MasterWorkerTemporary::where(['id'=>$params['master_worker_id'],'is_disable' =>0])->findOrEmpty();
             if($worker->isEmpty()){
                 throw new \Exception('工程师不存在或被禁用');
             }
             
-            $work->master_worker_id = $params['master_worker_id'];
-            $work->work_status = 3;
-            $work->dispatch_time = time();
-            $work->receive_time = time();
-            $work->user_confirm_status = 2;
-            $work->code = str_pad(rand(0, 9999), 4, '0', STR_PAD_LEFT);//从 0 - 9 中随机取 4 个数字
-            $work->save();
+            //批量派单
+            $work = GroupServiceWork::whereIn('id',$ids)->where('work_status','<',6)->select()->toArray();
+            
+            foreach($work as $item) {
+                if($item['master_worker_id'] != $params['master_worker_id']){
+                    $work_log = [
+                        'type' => 1,
+                        'work_id'=>$item['id'],
+                        'master_worker_id'=>$params['master_worker_id'],
+                        'opera_log'=>'后台用户['.$userInfo['admin_id'].']'.$userInfo['name'].'于'.date('Y-m-d H:i:s',time()).'分配了工程师'.'编号['.$worker->worker_number.']'.$worker->real_name
+                    ];
+                    GroupServiceWorkLogLogic::add($work_log);
+
+                    GroupServiceWork::where('id',$item['id'])->update([
+                        'master_worker_id' => $params['master_worker_id'],
+                        'work_status' => 3,
+                        'dispatch_time' => time(),
+                        'receive_time' => time(),
+                        'user_confirm_status' => 2,
+                        'code' => str_pad(rand(0, 9999), 4, '0', STR_PAD_LEFT),//从 0 - 9 中随机取 4 个数字
+                    ]);
+                }
+            }
+            
             Db::commit();
           
             // 工程师派单通知【给工程师的通知】【公众号通知,不发短信】
@@ -208,19 +224,21 @@ class GroupServiceWorkLogic extends BaseLogic
                 throw new \Exception('工程师不存在');
             }
             $params['master_worker_id'] = (isset($params['master_worker_id']) && !empty($params['master_worker_id']))?$params['master_worker_id']:$work->master_worker_id;
-            $work->master_worker_id = 0;
-            $work->work_status = 0;
-            $work->dispatch_time = 0;
-            $work->receive_time = 0;
-            $work->save();
-
+    
             //添加变更日志
             $work_log = [
+                'type' => 2,
                 'work_id'=>$work->id,
                 'master_worker_id'=>$work->master_worker_id,
                 'opera_log'=>'后台用户['.$userInfo['admin_id'].']'.$userInfo['name'].'于'.date('Y-m-d H:i:s',time()).'取消了工程师'.'编号['.$worker->worker_number.']'.$worker->real_name
             ];
             GroupServiceWorkLogLogic::add($work_log);
+
+            $work->master_worker_id = 0;
+            $work->work_status = 0;
+            $work->dispatch_time = 0;
+            $work->receive_time = 0;
+            $work->save();
             Db::commit();
             return true;
         }catch(\Exception $e){
@@ -238,10 +256,25 @@ class GroupServiceWorkLogic extends BaseLogic
      */
     public static function detail($params){
         $work_where = !empty($params['work_sn'])?['work_sn'=>$params['work_sn']]:['id'=>$params['id']];
-        $result = GroupServiceWork::where($work_where)
+        if (!empty($params['master_worker_id'])) {
+            $work_where['master_worker_id'] = $params['master_worker_id'];
+        }
+        $result = GroupServiceWork::with([
+                'worker'=> function(Query $query) {
+                    $query->field('id,worker_number,real_name,mobile');
+                },
+                'serviceWorkLog' =>function(Query $query){
+                    $query->field('id,work_id,opera_log,create_time');
+                }
+            ])
+            ->where($work_where)
             ->append(['id','work_status_text','service_status_text'])
             ->findOrEmpty()->toArray();
-      
+        if (empty($result)) {
+            self::setError('工单不存在');
+            return false;
+        }
+        
         //工程师工单按钮状态
         $work_service_status = 0;
         $work_service_status_text = '待派单';
@@ -290,4 +323,57 @@ class GroupServiceWorkLogic extends BaseLogic
         return  $result;
     }
 
+    /**
+     * 导入拼团工单
+     */
+    public static function import($file) {
+        
+        try {
+            // 移动文件到指定目录
+            $info = $file->move(root_path('public') . 'uploads');
+            if ($info) {
+                $filePath = $info->getPathname();
+
+                // 读取 Excel 文件
+                $spreadsheet = IOFactory::load($filePath);
+                $worksheet = $spreadsheet->getActiveSheet();
+                $highestRow = $worksheet->getHighestRow();
+
+                // 假设第一行为表头,从第二行开始读取数据
+                for ($row = 2; $row <= $highestRow; $row++) {
+                    $data = [
+                        'title' => $worksheet->getCell('A' . $row)->getValue(),
+                        'real_name' => $worksheet->getCell('B' . $row)->getValue(),
+                        'mobile' => $worksheet->getCell('C' . $row)->getValue(),
+                        'address' => $worksheet->getCell('D' . $row)->getValue(),
+                        'area_name' => $worksheet->getCell('E'. $row)->getValue(),
+                        'appointment_time' => $worksheet->getCell('F'. $row)->getValue(),
+                        'work_total' => $worksheet->getCell('G'. $row)->getValue(),
+                        'work_amount' => $worksheet->getCell('H'. $row)->getValue(),
+                        'settlement_amount' => $worksheet->getCell('I'. $row)->getValue(),
+                        'remark' => $worksheet->getCell('J'. $row)->getValue(),
+                    ];
+                    
+                    if(empty($data['title']) || empty($data['real_name']) || empty($data['mobile']) || empty($data['address'])){
+                        continue;
+                    }
+                    $data['third_type'] = 2;
+                    $data['work_status'] = 3;
+                    $data['work_pay_status'] = 2;
+                    $data['category_type'] = 2;
+                    $data['appointment_time'] = $data['appointment_time'] ? strtotime($data['appointment_time']) : 0;
+                    $data['work_sn'] = generate_sn(GroupServiceWork::class, 'work_sn');
+                    GroupServiceWork::create($data);
+                }
+                return true;
+            } else {
+                self::setError($file->getError());
+                return false;
+            }
+        } catch (\Exception $e) {
+            self::setError($e->getMessage());
+            return false;
+        }
+    }
+
 }

+ 102 - 0
app/adminapi/validate/master_worker/MasterWorkerTemporaryValidate.php

@@ -0,0 +1,102 @@
+<?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\master_worker;
+
+
+use app\common\validate\BaseValidate;
+
+
+/**
+ * MasterWorkerTemporary验证器
+ * Class MasterWorkerTemporaryValidate
+ * @package app\adminapi\validate\master_worker
+ */
+class MasterWorkerTemporaryValidate extends BaseValidate
+{
+
+     /**
+      * 设置校验规则
+      * @var string[]
+      */
+    protected $rule = [
+        'id' => 'require',
+        'worker_number' => 'require',
+        'real_name' => 'require',
+        'mobile' => 'require',
+        'is_disable' => 'require',
+
+    ];
+
+
+    /**
+     * 参数描述
+     * @var string[]
+     */
+    protected $field = [
+        'id' => 'id',
+        'worker_number' => '工程师编号',
+        'real_name' => '真实姓名',
+        'mobile' => '工程师电话',
+        'is_disable' => '是否禁用',
+    ];
+
+
+    /**
+     * @notes 添加场景
+     * @return MasterWorkerValidate
+     * @author likeadmin
+     * @date 2024/07/10 18:17
+     */
+    public function sceneAdd()
+    {
+        return $this->only(['worker_number','real_name','mobile','is_disable']);
+    }
+
+    /**
+     * @notes 编辑场景
+     * @return MasterWorkerValidate
+     * @author likeadmin
+     * @date 2024/07/10 18:17
+     */
+    public function sceneEdit()
+    {
+        return $this->only(['id','is_disable']);
+    }
+
+
+    /**
+     * @notes 删除场景
+     * @return MasterWorkerValidate
+     * @author likeadmin
+     * @date 2024/07/10 18:17
+     */
+    public function sceneDelete()
+    {
+        return $this->only(['id']);
+    }
+
+
+    /**
+     * @notes 详情场景
+     * @return MasterWorkerValidate
+     * @author likeadmin
+     * @date 2024/07/10 18:17
+     */
+    public function sceneDetail()
+    {
+        return $this->only(['id']);
+    }
+
+}

+ 1 - 0
app/common/cache/MasterWokerTokenCache.php

@@ -99,6 +99,7 @@ class MasterWokerTokenCache extends BaseCache
             $userInfo = [
                 'user_id' => $user->id,
                 'real_name'=>$user->real_name,
+                'worker_number'=>$user->worker_number,
                 'token' => $token,
                 'mobile' => $user->mobile,
                 'terminal' => $userSession->terminal,

+ 3 - 0
app/common/model/master_worker/MasterWorkerTemporary.php

@@ -16,6 +16,7 @@ namespace app\common\model\master_worker;
 
 
 use app\common\model\BaseModel;
+use think\model\concern\SoftDelete;
 
 
 
@@ -26,7 +27,9 @@ use app\common\model\BaseModel;
  */
 class MasterWorkerTemporary extends BaseModel
 {
+    use SoftDelete;
     
     protected $name = 'master_worker_temporary';
+    protected $deleteTime = 'delete_time';
 
 }

+ 17 - 5
app/common/model/works/GroupServiceWork.php

@@ -15,9 +15,10 @@
 namespace app\common\model\works;
 
 
-use app\adminapi\logic\ConfigLogic;
 use app\common\model\BaseModel;
-
+use app\adminapi\logic\ConfigLogic;
+use app\common\model\goods_category\GoodsCategory;
+use app\common\model\master_worker\MasterWorkerTemporary;
 
 /**
  * GroupServiceWork模型
@@ -32,12 +33,20 @@ class GroupServiceWork extends BaseModel
         'goods_category_ids' =>  'array',
     ];
     const WORK_STATUS_TXT  = [0=>'待派单',1=>'待领单',2=>'待联系',3=>'待上门',4=>'已上门',5=>'服务中',6=>'待结算',7=>'已完结',8=>'已评价',9=>'已退费'];
-    
+    public function worker()
+    {
+        return $this->belongsTo(MasterWorkerTemporary::class, 'master_worker_id', 'id');
+    }
     //跟进记录
     public function serviceWorkLog()
     {
         return $this->hasMany(GroupServiceWorkLog::class,'work_id','id')->order(['id'=>'desc']);
     }
+
+    public function goodsCategory()
+    {
+        return $this->hasOne(GoodsCategory::class,'id','goods_category_id');
+    }
     public function getWorkStatusTextAttr($value,$data)
     {
         return (isset($data['service_status']) && $data['service_status']===4)?'已取消':self::WORK_STATUS_TXT[$data['work_status']];
@@ -141,9 +150,9 @@ class GroupServiceWork extends BaseModel
         return !empty($data['finished_time'])?date('Y-m-d H:i:s',$data['finished_time']):'';
     }
 
-    public function getEstimatedFinishTimeAttr($value,$data)
+    public function getReceiveTimeAttr($value,$data)
     {
-        return !empty($data['estimated_finish_time'])?date('Y-m-d H:i:s',$data['estimated_finish_time']):'';
+        return !empty($data['receive_time'])?date('Y-m-d H:i:s',$data['receive_time']):'';
     }
 
     public function getWorkImagesAttr($value)
@@ -158,6 +167,9 @@ class GroupServiceWork extends BaseModel
   
     public function getCategoryTypeTextAttr($value,$data)
     {
+        if (!isset($data['category_type'])) {
+            return '';
+        }
         $categoryTypedata = array_column(ConfigLogic::getDictByType('category_type')['category_type'],'name','value');
         return $categoryTypedata[$data['category_type']];
     }

+ 2 - 1
app/workerapi/controller/GroupWorksController.php

@@ -28,6 +28,7 @@ class GroupWorksController extends BaseApiController
     {
         try {
             $params = (new GroupServiceWorkValidate())->goCheck('detail',[
+                'master_worker_id' => $this->userId,
                 'user_id' => $this->userId,
                 'user_info' => $this->userInfo,
             ]);
@@ -75,7 +76,7 @@ class GroupWorksController extends BaseApiController
         if (false === $result) {
             return $this->fail(GroupServiceWorkLogic::getError());
         }
-        return $this->success('操作成功,工程师已确认服务完成,等待用户确认中', [], 1, 1);
+        return $this->success('操作成功,工程师已确认服务完成', [], 1, 1);
     }
 
 }

+ 12 - 1
app/workerapi/controller/LoginController.php

@@ -17,6 +17,7 @@ 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\dict\DictData;
 use app\common\model\notice\NoticeSetting;
 use app\common\service\wechat\WeChatOaService;
 use app\workerapi\logic\DictLogic;
@@ -35,7 +36,7 @@ use think\facade\Log;
 class LoginController extends BaseApiController
 {
 
-    public array $notNeedLogin = ['register', 'account', 'logout','testWeChat','getCredentialName','passedInterview','getRegisterId','mobile'];
+    public array $notNeedLogin = ['register', 'account', 'logout','testWeChat','getCredentialName','passedInterview','getRegisterId','mobile','customerPhone'];
 
 
     /**
@@ -172,4 +173,14 @@ class LoginController extends BaseApiController
         }
         return $this->data($result);
     }
+
+    /**
+     * 客服电话
+     * @return \think\response\Json
+     */
+    public function customerPhone()
+    {
+        $result = DictData::where(['type_value' => 'customer_support'])->column('value', 'name');
+        return $this->data($result);
+    }
 }

+ 2 - 1
app/workerapi/http/middleware/LoginMiddleware.php

@@ -64,7 +64,8 @@ class LoginMiddleware
             }
 
             //临时工程师校验一下权限
-            if (isset($userInfo['type']) && $userInfo['type'] == 2 && !in_array($request->controller(), ['Groupworks','Sms','Login'])) {
+            $controller = $request->controller();
+            if (isset($userInfo['type']) && $userInfo['type'] == 2 && !in_array(strtolower($controller), ['groupworks','sms','login','upload'])) {
                 return JsonService::fail('暂无权限', [], 401);
             }
         }

+ 2 - 1
app/workerapi/logic/GroupServiceWorkLogLogic.php

@@ -22,10 +22,11 @@ class GroupServiceWorkLogLogic extends BaseLogic
      */
     public static function add(array $params): bool
     {
-        if(empty($params['work_id']) || empty($params['master_worker_id']) || empty($params['opera_log'])) {
+        if(empty($params['type']) || empty($params['work_id']) || empty($params['master_worker_id']) || empty($params['opera_log'])) {
             throw new Exception('参数错误');
         }
         GroupServiceWorkLog::create([
+            'type' => $params['type'],
             'work_id' => $params['work_id'],
             'master_worker_id' => $params['master_worker_id'],
             'opera_log'=>$params['opera_log']

BIN
public/template/~$临时服务工单.xlsx


BIN
public/template/临时工程师.xlsx


BIN
public/template/临时服务工单.xlsx