Bläddra i källkod

服务工单增加分配师傅,详情功能

林海涛 1 år sedan
förälder
incheckning
0e70c23bce

+ 15 - 2
app/adminapi/controller/works/ServiceWorkController.php

@@ -86,8 +86,11 @@ class ServiceWorkController extends BaseAdminController
     public function delete()
     {
         $params = (new ServiceWorkValidate())->post()->goCheck('delete');
-        ServiceWorkLogic::delete($params);
-        return $this->success('删除成功', [], 1, 1);
+        $result = ServiceWorkLogic::edit($params);
+        if (true === $result) {
+            return $this->success('编辑成功', [], 1, 1);
+        }
+        return $this->success('分配成功', [], 1, 1);
     }
 
 
@@ -105,4 +108,14 @@ class ServiceWorkController extends BaseAdminController
     }
 
 
+    public function allocateWorker()
+    {
+        $params = (new ServiceWorkValidate())->post()->goCheck('allocateWorker');
+        $result = ServiceWorkLogic::allocateWorker($params,$this->adminInfo);
+        if (true === $result) {
+            return $this->success('分配师傅成功', [], 1, 1);
+        }
+        return $this->fail(ServiceWorkLogic::getError());
+    }
+
 }

+ 21 - 7
app/adminapi/lists/master_worker/MasterWorkerLists.php

@@ -19,7 +19,6 @@ use app\adminapi\lists\BaseAdminDataLists;
 use app\common\model\master_worker\MasterWorker;
 use app\common\lists\ListsSearchInterface;
 
-
 /**
  * MasterWorker列表
  * Class MasterWorkerLists
@@ -38,12 +37,22 @@ class MasterWorkerLists extends BaseAdminDataLists implements ListsSearchInterfa
     public function setSearch(): array
     {
         return [
-            '=' => ['sn', 'real_name', 'nickname', 'worker_number','account', 'password', 'mobile', 'sex', 'channel', 'is_disable', 'is_new_user', 'create_time', 'update_time'],
+            '=' => ['mw.sn', 'mw.real_name', 'mw.account', 'mw.password', 'mw.mobile', 'mw.sex', 'mw.channel', 'mw.is_disable', 'mw.is_new_user', 'mw.create_time', 'mw.update_time'],
 
         ];
     }
 
-
+    public function queryWhere(){
+        $where = [];
+        // 用户昵称
+        if (isset($this->params['nickname']) && !empty($this->params['nickname'])) {
+            $where[] = ['mw.nickname|mw.worker_number', 'like','%' .$this->params['nickname'] . '%'];
+        }
+        if (isset($this->params['worker_exp_type']) && !empty($this->params['worker_exp_type'])) {
+            $where[] = ['mwr.maintain_exp_type', '=', $this->params['worker_exp_type']];
+        }
+        return $where;
+    }
     /**
      * @notes 获取列表
      * @return array
@@ -55,10 +64,13 @@ class MasterWorkerLists extends BaseAdminDataLists implements ListsSearchInterfa
      */
     public function lists(): array
     {
-        return MasterWorker::where($this->searchWhere)
-            ->field(['id', 'sn', 'avatar', 'real_avatar','worker_number', 'real_name', 'nickname', 'account', 'password', 'mobile', 'sex', 'channel', 'is_disable', 'login_ip', 'login_time', 'is_new_user', 'estimate_money', 'user_money', 'earnest_money', 'exp'])
+        return MasterWorker::alias('mw')
+            ->join('master_worker_register mwr', 'mwr.master_worker_id = mw.id')
+            ->where($this->searchWhere)
+            ->where($this->queryWhere())
+//            ->field(['mw.id', 'mw.sn', 'mw.avatar', 'mw.real_avatar','mw.worker_number', 'mw.real_name', 'mw.nickname', 'mw.account', 'mw.password', 'mw.mobile', 'mw.sex', 'mw.channel', 'mw.is_disable', 'mw.login_ip', 'mw.login_time', 'mw.is_new_user', 'mw.estimate_money', 'mw.user_money', 'mw.earnest_money', 'mw.exp'])
             ->limit($this->limitOffset, $this->limitLength)
-            ->order(['id' => 'desc'])
+            ->order(['mw.id' => 'desc'])
             ->select()
             ->toArray();
     }
@@ -72,7 +84,9 @@ class MasterWorkerLists extends BaseAdminDataLists implements ListsSearchInterfa
      */
     public function count(): int
     {
-        return MasterWorker::where($this->searchWhere)->count();
+        return MasterWorker::alias('mw')
+            ->join('master_worker_register mwr', 'mwr.master_worker_id = mw.id')
+            ->where($this->searchWhere)->where($this->queryWhere())->count();
     }
 
 }

+ 57 - 3
app/adminapi/logic/works/ServiceWorkLogic.php

@@ -15,12 +15,13 @@
 namespace app\adminapi\logic\works;
 
 
-use app\common\model\dict\DictData;
+use app\common\model\master_worker\MasterWorker;
 use app\common\model\recharge\RechargeOrder;
 use app\common\model\works\ServiceWork;
 use app\common\logic\BaseLogic;
-use app\common\model\works\ServiceWorkLog;
+use app\workerapi\logic\ServiceWorkerAllocateWorkerLogic;
 use app\workerapi\logic\ServiceWorkLogLogic;
+use think\db\Query;
 use think\Exception;
 use think\facade\Db;
 
@@ -61,6 +62,7 @@ class ServiceWorkLogic extends BaseLogic
             Db::commit();
         }
         catch (\Exception $e) {
+            Db::rollback();
             self::setError($e->getMessage());
             return false;
         }
@@ -143,6 +145,7 @@ class ServiceWorkLogic extends BaseLogic
             Db::commit();
         }
         catch (\Exception $e) {
+            Db::rollback();
             self::setError($e->getMessage());
             return false;
         }
@@ -208,6 +211,7 @@ class ServiceWorkLogic extends BaseLogic
             Db::commit();
         }
         catch (\Exception $e) {
+            Db::rollback();
             self::setError($e->getMessage());
             return false;
         }
@@ -243,10 +247,60 @@ class ServiceWorkLogic extends BaseLogic
             ];
             ServiceWorkLogLogic::add($work_log);
             Db::commit();
+        } catch (\Exception $e) {
+            Db::rollback();
+            self::setError($e->getMessage());
+            return false;
         }
-        catch (\Exception $e) {
+    }
+
+    public static function allocateWorker($params,$userInfo){
+        Db::startTrans();
+        try {
+            $work = ServiceWork::findOrEmpty($params['id']);
+            if($work->isEmpty()){
+                throw new Exception('工单不存在');
+            }
+            if($work->work_status !== 0 ){
+                throw new \Exception('工单状态不是待确认');
+            }
+            if($work->master_worker_id == $params['master_worker_id']){
+                throw new \Exception('分配的师傅相同');
+            }
+            $worker = MasterWorker::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->save();
+            $work_log = [
+                '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
+            ];
+            ServiceWorkerAllocateWorkerLogic::add($work_log);
+            Db::commit();
+            return true;
+        }catch(\Exception $e){
+            Db::rollback();
             self::setError($e->getMessage());
             return false;
         }
     }
+
+    public static function detail($params){
+        return ServiceWork::with([
+            'worker'=> function(Query $query) {
+                $query->field('id,worker_number,real_name');
+//                $query->with('workerRegister');
+            },
+            'rechargeOrder'=>function(Query $query){
+                $query->field('id,order_type,work_id,sn,refund_status,pay_status,pay_time,order_total,order_amount,create_time,update_time')->order(['id'=>'desc']);
+                $query->with(['orderGoods'=>function(Query $query){
+                    $query->field('id,sn,goods_id,goods_name,goods_image,goods_number,good_unit,goods_size,goods_type,goods_brand,base_service_fee,service_total,service_fee')->order(['id'=>'desc']);
+                }]);
+            }
+        ])->append(['work_status_text','service_status_text'])
+            ->findOrEmpty($params['id'])->toArray();
+    }
 }

+ 137 - 125
app/adminapi/validate/works/ServiceWorkValidate.php

@@ -1,126 +1,138 @@
-<?php
-// +----------------------------------------------------------------------
-// | likeadmin快速开发前后端分离管理后台(PHP版)
-// +----------------------------------------------------------------------
-// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
-// | 开源版本可自由商用,可去除界面版权logo
-// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
-// | github下载:https://github.com/likeshop-github/likeadmin
-// | 访问官网:https://www.likeadmin.cn
-// | likeadmin团队 版权所有 拥有最终解释权
-// +----------------------------------------------------------------------
-// | author: likeadminTeam
-// +----------------------------------------------------------------------
-
-namespace app\adminapi\validate\works;
-
-
-use app\common\validate\BaseValidate;
-
-
-/**
- * ServiceWork验证器
- * Class ServiceWorkValidate
- * @package app\adminapi\validate\works
- */
-class ServiceWorkValidate extends BaseValidate
-{
-
-     /**
-      * 设置校验规则
-      * @var string[]
-      */
-    protected $rule = [
-        'id' => 'require',
-        'work_sn' => 'require',
-        'mobile' => 'require',
-        'address' => 'require',
-        'title' => 'require',
-        'category_type' => 'require',
-        'goods_category_ids' => 'require',
-        'goods_category_id' => 'require',
-        'base_service_fee' => 'require',
-        'service_fee' => 'require',
-        'work_status' => 'require',
-        'service_status' => 'require',
-        'dispatch_time' => 'require',
-        'receive_time' => 'require',
-        'appointment_time' => 'require',
-        'finished_time' => 'require',
-        'master_worker_id' => 'require',

-    ];
-
-
-    /**
-     * 参数描述
-     * @var string[]
-     */
-    protected $field = [
-        'id' => 'id',
-        'work_sn' => '工单编号',
-        'mobile' => '手机号',
-        'address' => '客户地址',
-        'title' => '工单名称',
-        'category_type' => '服务类别',
-        'goods_category_ids' => '服务类目',
-        'goods_category_id' => '服务产品',
-        'base_service_fee' => '基础服务费',
-        'service_fee' => '服务费用',
-        'work_status' => '工单状态',
-        'service_status' => '订单服务状态',
-        'dispatch_time' => '派单时间',
-        'receive_time' => '领单时间',
-        'appointment_time' => '预约上门时间',
-        'finished_time' => '结单时间',
-        'master_worker_id' => '师傅',

-    ];
-
-
-    /**
-     * @notes 添加场景
-     * @return ServiceWorkValidate
-     * @author likeadmin
-     * @date 2024/07/10 15:06
-     */
-    public function sceneAdd()
-    {
-        return $this->only(['work_sn','mobile','address','title','category_type','goods_category_ids','goods_category_id','base_service_fee','service_fee','work_status','service_status','dispatch_time','receive_time','appointment_time','finished_time','master_worker_id']);
-    }
-
-
-    /**
-     * @notes 编辑场景
-     * @return ServiceWorkValidate
-     * @author likeadmin
-     * @date 2024/07/10 15:06
-     */
-    public function sceneEdit()
-    {
-        return $this->only(['id','work_sn','mobile','address','title','category_type','goods_category_ids','goods_category_id','base_service_fee','service_fee','work_status','service_status','dispatch_time','receive_time','appointment_time','finished_time','master_worker_id']);
-    }
-
-
-    /**
-     * @notes 删除场景
-     * @return ServiceWorkValidate
-     * @author likeadmin
-     * @date 2024/07/10 15:06
-     */
-    public function sceneDelete()
-    {
-        return $this->only(['id']);
-    }
-
-
-    /**
-     * @notes 详情场景
-     * @return ServiceWorkValidate
-     * @author likeadmin
-     * @date 2024/07/10 15:06
-     */
-    public function sceneDetail()
-    {
-        return $this->only(['id']);
-    }
-
+<?php
+// +----------------------------------------------------------------------
+// | likeadmin快速开发前后端分离管理后台(PHP版)
+// +----------------------------------------------------------------------
+// | 欢迎阅读学习系统程序代码,建议反馈是我们前进的动力
+// | 开源版本可自由商用,可去除界面版权logo
+// | gitee下载:https://gitee.com/likeshop_gitee/likeadmin
+// | github下载:https://github.com/likeshop-github/likeadmin
+// | 访问官网:https://www.likeadmin.cn
+// | likeadmin团队 版权所有 拥有最终解释权
+// +----------------------------------------------------------------------
+// | author: likeadminTeam
+// +----------------------------------------------------------------------
+
+namespace app\adminapi\validate\works;
+
+
+use app\common\validate\BaseValidate;
+
+
+/**
+ * ServiceWork验证器
+ * Class ServiceWorkValidate
+ * @package app\adminapi\validate\works
+ */
+class ServiceWorkValidate extends BaseValidate
+{
+
+     /**
+      * 设置校验规则
+      * @var string[]
+      */
+    protected $rule = [
+        'id' => 'require',
+        'work_sn' => 'require',
+        'mobile' => 'require',
+        'address' => 'require',
+        'title' => 'require',
+        'category_type' => 'require',
+        'goods_category_ids' => 'require',
+        'goods_category_id' => 'require',
+        'base_service_fee' => 'require',
+        'service_fee' => 'require',
+        'work_status' => 'require',
+        'service_status' => 'require',
+        'dispatch_time' => 'require',
+        'receive_time' => 'require',
+        'appointment_time' => 'require',
+        'finished_time' => 'require',
+        'master_worker_id' => 'require',
+
+    ];
+
+
+    /**
+     * 参数描述
+     * @var string[]
+     */
+    protected $field = [
+        'id' => 'id',
+        'work_sn' => '工单编号',
+        'mobile' => '手机号',
+        'address' => '客户地址',
+        'title' => '工单名称',
+        'category_type' => '服务类别',
+        'goods_category_ids' => '服务类目',
+        'goods_category_id' => '服务产品',
+        'base_service_fee' => '基础服务费',
+        'service_fee' => '服务费用',
+        'work_status' => '工单状态',
+        'service_status' => '订单服务状态',
+        'dispatch_time' => '派单时间',
+        'receive_time' => '领单时间',
+        'appointment_time' => '预约上门时间',
+        'finished_time' => '结单时间',
+        'master_worker_id' => '师傅',
+
+    ];
+
+
+    /**
+     * @notes 添加场景
+     * @return ServiceWorkValidate
+     * @author likeadmin
+     * @date 2024/07/10 15:06
+     */
+    public function sceneAdd()
+    {
+        return $this->only(['work_sn','mobile','address','title','category_type','goods_category_ids','goods_category_id','base_service_fee','service_fee','work_status','service_status','dispatch_time','receive_time','appointment_time','finished_time','master_worker_id']);
+    }
+
+
+    /**
+     * @notes 编辑场景
+     * @return ServiceWorkValidate
+     * @author likeadmin
+     * @date 2024/07/10 15:06
+     */
+    public function sceneEdit()
+    {
+        return $this->only(['id','work_sn','mobile','address','title','category_type','goods_category_ids','goods_category_id','base_service_fee','service_fee','work_status','service_status','dispatch_time','receive_time','appointment_time','finished_time','master_worker_id']);
+    }
+
+
+    /**
+     * @notes 删除场景
+     * @return ServiceWorkValidate
+     * @author likeadmin
+     * @date 2024/07/10 15:06
+     */
+    public function sceneDelete()
+    {
+        return $this->only(['id']);
+    }
+
+
+    /**
+     * @notes 详情场景
+     * @return ServiceWorkValidate
+     * @author likeadmin
+     * @date 2024/07/10 15:06
+     */
+    public function sceneDetail()
+    {
+        return $this->only(['id']);
+    }
+
+    /**
+     * 分配师傅场景
+     * @return ServiceWorkValidate
+     * @author 林海涛
+     * @date 2024/7/16 下午4:38
+     */
+    public function sceneAllocateWorker()
+    {
+        return $this->only(['id','master_worker_id']);
+    }
 }

+ 5 - 2
app/common/model/orders/RechargeOrder.php

@@ -16,7 +16,7 @@ namespace app\common\model\orders;
 
 
 use app\common\model\BaseModel;
-
+use app\common\model\recharge\OrderGoods;
 
 
 /**
@@ -30,5 +30,8 @@ class RechargeOrder extends BaseModel
     protected $name = 'recharge_order';
     
 
-    
+    public function orderGoods()
+    {
+        return $this->hasMany(OrderGoods::class,'sn','sn');
+    }
 }

+ 1 - 1
app/common/model/recharge/RechargeOrder.php

@@ -63,6 +63,6 @@ class RechargeOrder extends BaseModel
 
     public function orderGoods()
     {
-        return $this->hasOne(OrderGoods::class, 'sn', 'sn');
+        return $this->hasMany(OrderGoods::class, 'sn', 'sn');
     }
 }

+ 6 - 1
app/common/model/works/ServiceWork.php

@@ -18,6 +18,7 @@ namespace app\common\model\works;
 use app\api\logic\PerformanceLogic;
 use app\common\model\BaseModel;
 use app\common\model\master_worker\MasterWorker;
+use app\common\model\orders\RechargeOrder;
 
 
 /**
@@ -37,7 +38,11 @@ class ServiceWork extends BaseModel
             PerformanceLogic::calculatePerformance($model);
         }
     }
-    
+
+    public function rechargeOrder()
+    {
+        return $this->hasMany(RechargeOrder::class,'work_id','id');
+    }
     public function worker()
     {
         return $this->belongsTo(MasterWorker::class, 'master_worker_id', 'id');

+ 17 - 0
app/common/model/works/ServiceWorkAllocateWorkerLog.php

@@ -0,0 +1,17 @@
+<?php
+namespace app\common\model\works;
+
+
+use app\common\model\BaseModel;
+
+
+/**
+ * ServiceWorkLog模型
+ * Class ServiceWorkLog
+ * @package app\common\model\works
+ */
+class ServiceWorkAllocateWorkerLog extends BaseModel
+{
+    protected $name = 'service_work_allocate_worker_log';
+
+}

+ 33 - 0
app/workerapi/logic/ServiceWorkerAllocateWorkerLogic.php

@@ -0,0 +1,33 @@
+<?php
+namespace app\workerapi\logic;
+use app\common\logic\BaseLogic;
+use app\common\model\works\ServiceWorkAllocateWorkerLog;
+
+/**
+ * @author 林海涛
+ * @date 2024/7/16 下午4:03
+ */
+class ServiceWorkerAllocateWorkerLogic extends BaseLogic
+{
+    /**
+     * @notes 添加
+     * @param array $params
+     * @return bool
+     * @throws
+     * @author whitef
+     * @date 2024/07/10 15:06
+     */
+    public static function add(array $params): bool
+    {
+        if(empty($params['work_id']) || empty($params['master_worker_id']) || empty($params['opera_log'])) {
+            throw new \Exception('参数错误');
+        }
+        ServiceWorkAllocateWorkerLog::create([
+            'work_id' => $params['work_id'],
+            'master_worker_id' => $params['master_worker_id'],
+            'opera_log'=>$params['opera_log']
+        ]);
+
+        return true;
+    }
+}