dongxiaoqin 11 ヶ月 前
コミット
0b483fde70

+ 64 - 33
app/adminapi/logic/works/ServiceWorkLogic.php

@@ -251,34 +251,75 @@ class ServiceWorkLogic extends BaseLogic
                 throw new Exception('请勿重复操作');
                 throw new Exception('请勿重复操作');
             }
             }
 
 
-            // 关联配件信息.计算配件总价  id  company_price original_price offering_price number
+            // 商城配件.计算配件总价  id  company_price original_price offering_price number
             $spare_total = 0;
             $spare_total = 0;
             $work->spare_total = 0;
             $work->spare_total = 0;
             isset($params['spare_parts']) && $params['spare_parts'] && $params['spare_parts'] = json_decode($params['spare_parts'], true);
             isset($params['spare_parts']) && $params['spare_parts'] && $params['spare_parts'] = json_decode($params['spare_parts'], true);
+            $spare_parts_ids = ServiceWorkSpare::where('service_work_id',$work['id'])->column('id');
+            
             if(isset($params['spare_parts']) && $params['spare_parts']){
             if(isset($params['spare_parts']) && $params['spare_parts']){
-                $spare_parts = $params['spare_parts'];
-                foreach ($spare_parts as $spare){
-                    $spare_total += $spare['company_price']*$spare['number'];
+                if (count($params['spare_parts']) > 10) {
+                    throw new Exception('商城配件最多10个');
+                }
+                $ids = array_column($params['spare_parts'],'id');
+                $spare_parts = SparePart::where('id','in',$ids)->column('id as spare_part_id,spare_name,spare_image,company_price,original_price,offering_price,spare_number,spare_unit,brand');
+                $spare_parts = array_column($spare_parts,null,'spare_part_id');
+
+                foreach ($params['spare_parts'] as $k => $item){
+                    if (!isset($spare_parts[$item['id']])){
+                        throw new Exception('配件信息错误');
+                    }
+                    $spare_part = $spare_parts[$item['id']];
+                    $spare_total += $spare_part['company_price']*$item['spare_number'];
+                    $data = array_merge($spare_part, ['service_work_id' => $work['id'], 'spare_number' => $item['spare_number'] * $spare_part['spare_number']]);
+
+                    if (current($spare_parts_ids)) {
+                        //修改
+                        ServiceWorkSpare::where("id",current($spare_parts_ids))->update($data);
+                    } else {
+                        //新增
+                        ServiceWorkSpare::create($data);
+                    }
+                    array_shift($spare_parts_ids);
                 }
                 }
                 $work->spare_total += $spare_total;
                 $work->spare_total += $spare_total;
-
-                $service_work_spare = ServiceWorkSpare::where(['service_work_id'=>$work['id']])->findOrEmpty();
-                if($service_work_spare->isEmpty()){
-                    //新增
-                    $service_work_spare = ServiceWorkSpare::create([
+            }
+            //自选配件
+            isset($params['self_spare_parts']) && $params['self_spare_parts'] && $params['self_spare_parts'] = json_decode($params['self_spare_parts'], true);
+            if(isset($params['self_spare_parts']) && $params['self_spare_parts']){
+                if (count($params['self_spare_parts']) > 10) {
+                    throw new Exception('自选配件最多10个');
+                }
+                foreach ($params['self_spare_parts'] as $item){
+                    $spare_total += $item['offering_price']*$item['spare_number'];
+                    $data = [
                         'service_work_id'=>$work['id'],
                         'service_work_id'=>$work['id'],
-                        'spare_parts'=>$params['spare_parts'],
-                        'remark'=>''
-                    ]);
-                }else{
-                    //修改
-                    $service_work_spare->spare_parts = $params['spare_parts'];
-                    $service_work_spare->save();
+                        'spare_name' => $item['spare_name'],
+                        'spare_image' => $item['spare_image'],
+                        'offering_price' => $item['offering_price'],
+                        'company_price' => 0,
+                        'original_price' => 0,
+                        'spare_number' => $item['spare_number'],
+                        'spare_part_id' => 0,
+                        'brand' => $item['brand']
+                    ];
+                    if (current($spare_parts_ids)) {
+                        //修改
+                        ServiceWorkSpare::where("id",current($spare_parts_ids))->update($data);
+                    } else {
+                        //新增
+                        ServiceWorkSpare::create($data);
+                    }
+                    array_shift($spare_parts_ids);
                 }
                 }
-                $work->service_work_spare_id = $service_work_spare->id;
-            }elseif (isset($params['spare_total']) && $params['spare_total']){
-                $work->spare_total += $params['spare_total'];
+                $work->spare_total += $spare_total;
             }
             }
+
+            //删除多余的配件数据
+            if ($spare_parts_ids) {
+                ServiceWorkSpare::where('id','in',$spare_parts_ids)->delete();
+            }
+
             // 添加工单尾款报价记录 - 即配件费用
             // 添加工单尾款报价记录 - 即配件费用
             if(isset($params['price_content'])){
             if(isset($params['price_content'])){
                 !is_array($params['price_content']) && $params['price_content'] = json_decode($params['price_content'], true);
                 !is_array($params['price_content']) && $params['price_content'] = json_decode($params['price_content'], true);
@@ -290,7 +331,6 @@ class ServiceWorkLogic extends BaseLogic
                 $work->spare_total += array_sum('price');
                 $work->spare_total += array_sum('price');
             }
             }
 
 
-
             // order_amount 原 =  $params['amount'] 修改为 = 配件总价 + 服务尾款
             // order_amount 原 =  $params['amount'] 修改为 = 配件总价 + 服务尾款
             $order_amount = $params['amount'] + $spare_total;
             $order_amount = $params['amount'] + $spare_total;
 
 
@@ -349,8 +389,6 @@ class ServiceWorkLogic extends BaseLogic
             ];
             ];
             ServiceWorkLogLogic::add($work_log);
             ServiceWorkLogLogic::add($work_log);
 
 
-
-
             Db::commit();
             Db::commit();
             // 商家报价通知外部平台 即报价
             // 商家报价通知外部平台 即报价
             if($work->external_platform_id > 0){
             if($work->external_platform_id > 0){
@@ -608,17 +646,10 @@ class ServiceWorkLogic extends BaseLogic
 
 
         // 配件信息
         // 配件信息
         $result['spare_parts'] = [];
         $result['spare_parts'] = [];
-        if($result['service_work_spare_id']){
-            $work_spare_parts = json_decode(ServiceWorkSpare::where('id',$result['service_work_spare_id'])->value('spare_parts'),true);
-            $spare_parts = SparePart::where('id','in',array_column($work_spare_parts,'id'))
-                ->field(['id', 'goods_category_id', 'spare_name', 'spare_image', 'spare_number', 'spare_unit','spare_status'])
-                ->select()
-                ->toArray();
-            $spare_parts = array_column($spare_parts,null,'id');
-            foreach (array_column($work_spare_parts,null,'id') as $k=>&$v){
-                $spare_parts[$k] = array_merge($spare_parts[$k],$v);
-            }
-            $result['spare_parts'] = array_values($spare_parts)??[];
+        $result['self_spare_parts'] = [];
+        if($result['spare_total'] > 0){
+            $result['spare_parts'] = ServiceWorkSpare::getLists($result['id'], 1);
+            $result['self_spare_parts'] = ServiceWorkSpare::getLists($result['id'], 2);
         }
         }
         // 保修卡信息
         // 保修卡信息
         $result['order_effectives'] = OrderEffectiveLog::with(['goods'=>function ($query) {
         $result['order_effectives'] = OrderEffectiveLog::with(['goods'=>function ($query) {

+ 10 - 24
app/api/logic/ServiceOrderLogic.php

@@ -438,7 +438,7 @@ class ServiceOrderLogic extends BaseLogic
             $order_info =  \app\common\model\recharge\RechargeOrder::with(['order_goods'=>function ($query) {
             $order_info =  \app\common\model\recharge\RechargeOrder::with(['order_goods'=>function ($query) {
                 $query->visible(['goods_id','goods_name','goods_image','goods_number','good_unit']);
                 $query->visible(['goods_id','goods_name','goods_image','goods_number','good_unit']);
             },'service_work'=>function ($query) {
             },'service_work'=>function ($query) {
-                $query->visible(['id','work_sn','real_name','mobile','address','service_status','appointment_time','master_worker_id','work_images','explanation','finished_images','finished_time','spare_total','service_work_spare_id','refund_approval','property_activity_id','order_effective_id'])->append(['service_status_text','user_service_status','user_service_status_text']);
+                $query->visible(['id','work_sn','real_name','mobile','address','service_status','appointment_time','master_worker_id','work_images','explanation','finished_images','finished_time','spare_total','refund_approval','property_activity_id','order_effective_id'])->append(['service_status_text','user_service_status','user_service_status_text']);
             }])
             }])
                 ->visible(['id','sn','payment_type','order_total','order_amount','paid_amount','pay_status','create_time','title','work_id'])
                 ->visible(['id','sn','payment_type','order_total','order_amount','paid_amount','pay_status','create_time','title','work_id'])
                 ->where([
                 ->where([
@@ -529,17 +529,10 @@ class ServiceOrderLogic extends BaseLogic
             // 所有配件
             // 所有配件
             $order_info['spare_total'] = $order_info['service_work']['spare_total']??0;
             $order_info['spare_total'] = $order_info['service_work']['spare_total']??0;
             $order_info['spare_parts'] = [];
             $order_info['spare_parts'] = [];
-            if($order_info['service_work']['service_work_spare_id']){
-                $work_spare_parts = json_decode(ServiceWorkSpare::where('id',$order_info['service_work']['service_work_spare_id'])->value('spare_parts'),true);
-                $spare_parts = SparePart::where('id','in',array_column($work_spare_parts,'id'))
-                    ->field(['id', 'goods_category_id', 'spare_name', 'spare_image', 'spare_number', 'spare_unit','spare_status'])
-                    ->select()
-                    ->toArray();
-                $spare_parts = array_column($spare_parts,null,'id');
-                foreach (array_column($work_spare_parts,null,'id') as $k=>&$v){
-                    $spare_parts[$k] = array_merge($spare_parts[$k],$v);
-                }
-                $order_info['spare_parts'] = array_values($spare_parts)??[];
+            $order_info['self_spare_parts'] = [];
+            if($order_info['service_work']['spare_total']){
+                $order_info['spare_parts'] = ServiceWorkSpare::getLists($order_info['work_id'], 1);
+                $order_info['self_spare_parts'] = ServiceWorkSpare::getLists($order_info['work_id'], 2);
             }
             }
 
 
             //获取所有的改约记录
             //获取所有的改约记录
@@ -618,7 +611,7 @@ class ServiceOrderLogic extends BaseLogic
             $order_info =  \app\common\model\recharge\RechargeOrder::with(['order_goods'=>function ($query) {
             $order_info =  \app\common\model\recharge\RechargeOrder::with(['order_goods'=>function ($query) {
                 $query->visible(['goods_id','goods_payment_type','goods_category_id']);
                 $query->visible(['goods_id','goods_payment_type','goods_category_id']);
             },'service_work'=>function ($query) {
             },'service_work'=>function ($query) {
-                $query->visible(['service_fee','spare_total','service_work_spare_id','goods_category_id']);
+                $query->visible(['service_fee','spare_total','goods_category_id']);
             }])
             }])
                 ->visible(['id','pay_status','sn','work_id','coupon_id','coupon_price'])
                 ->visible(['id','pay_status','sn','work_id','coupon_id','coupon_price'])
                 ->where([
                 ->where([
@@ -689,17 +682,10 @@ class ServiceOrderLogic extends BaseLogic
             // 所有配件
             // 所有配件
             $order_info['spare_total'] = $order_info['service_work']['spare_total']??0;
             $order_info['spare_total'] = $order_info['service_work']['spare_total']??0;
             $order_info['spare_parts'] = [];
             $order_info['spare_parts'] = [];
-            if($order_info['service_work']['service_work_spare_id']){
-                $work_spare_parts = json_decode(ServiceWorkSpare::where('id',$order_info['service_work']['service_work_spare_id'])->value('spare_parts'),true);
-                $spare_parts = SparePart::where('id','in',array_column($work_spare_parts,'id'))
-                    ->field(['id', 'goods_category_id', 'spare_name', 'spare_image', 'spare_number', 'spare_unit','spare_status'])
-                    ->select()
-                    ->toArray();
-                $spare_parts = array_column($spare_parts,null,'id');
-                foreach (array_column($work_spare_parts,null,'id') as $k=>&$v){
-                    $spare_parts[$k] = array_merge($spare_parts[$k],$v);
-                }
-                $order_info['spare_parts'] = array_values($spare_parts)??[];
+            $order_info['self_spare_parts'] = [];
+            if($order_info['service_work']['spare_total'] > 0){
+                $order_info['spare_parts'] = ServiceWorkSpare::getLists($order_info['work_id'], 1);
+                $order_info['self_spare_parts'] = ServiceWorkSpare::getLists($order_info['work_id'], 2);
             }
             }
 
 
             //获取是否存在可使用优惠券
             //获取是否存在可使用优惠券

+ 19 - 0
app/common/model/works/ServiceWorkSpare.php

@@ -32,5 +32,24 @@ class ServiceWorkSpare extends BaseModel
         'spare_parts' =>  'array'
         'spare_parts' =>  'array'
     ];
     ];
 
 
+    public static function getLists($service_work_id, $type) {
+        $where = [];
+        //商城工单配件
+        if ($type == 1) {
+            $where[] = ['spare_part_id','>', 0];
+            
+        } else if ($type == 2) {
+            //自选工单配件
+            $where[] = ['spare_part_id','=', 0];
+        } 
+        
+        $lists = self::where('service_work_id', $service_work_id)
+                    ->where($where)
+                    ->field("id,spare_part_id, spare_name, spare_image, company_price, original_price, offering_price, spare_number,spare_unit,brand")
+                    ->select()
+                    ->toArray();
+        return $lists;
+    }
+
     
     
 }
 }

+ 66 - 30
app/tenantapi/logic/works/ServiceWorkLogic.php

@@ -214,32 +214,75 @@ class ServiceWorkLogic extends BaseLogic
                 throw new Exception('请勿重复操作');
                 throw new Exception('请勿重复操作');
             }
             }
 
 
-            // 关联配件信息.计算配件总价  id  company_price original_price offering_price number
+            // 商城配件.计算配件总价  id  company_price original_price offering_price number
             $spare_total = 0;
             $spare_total = 0;
-
+            $work->spare_total = 0;
             isset($params['spare_parts']) && $params['spare_parts'] && $params['spare_parts'] = json_decode($params['spare_parts'], true);
             isset($params['spare_parts']) && $params['spare_parts'] && $params['spare_parts'] = json_decode($params['spare_parts'], true);
+            $spare_parts_ids = ServiceWorkSpare::where('service_work_id',$work['id'])->column('id');
+            
             if(isset($params['spare_parts']) && $params['spare_parts']){
             if(isset($params['spare_parts']) && $params['spare_parts']){
-                $spare_parts = $params['spare_parts'];
-                foreach ($spare_parts as $spare){
-                    $spare_total += $spare['company_price']*$spare['number'];
+                if (count($params['spare_parts']) > 10) {
+                    throw new Exception('商城配件最多10个');
                 }
                 }
-                $work->spare_total = $spare_total;
-
-                $service_work_spare = ServiceWorkSpare::where(['service_work_id'=>$work['id']])->findOrEmpty();
-                if($service_work_spare->isEmpty()){
-                    //新增
-                    $service_work_spare = ServiceWorkSpare::create([
+                $ids = array_column($params['spare_parts'],'id');
+                $spare_parts = SparePart::where('id','in',$ids)->column('id,spare_name,spare_image,company_price,original_price,offering_price,spare_number,spare_unit,brand');
+                $spare_parts = array_column($spare_parts,null,'id');
+
+                foreach ($params['spare_parts'] as $k => $item){
+                    if (!isset($spare_parts[$item['id']])){
+                        throw new Exception('配件信息错误');
+                    }
+                    $spare_part = $spare_parts[$item['id']];
+                    $spare_total += $spare_part['company_price']*$item['spare_number'];
+                    $data = array_merge($spare_part, ['service_work_id' => $work['id'], 'spare_number' => $item['spare_number'] * $spare_part['spare_number']]);
+                    unset($data['id']);
+                    if (current($spare_parts_ids)) {
+                        //修改
+                        ServiceWorkSpare::where("id",current($spare_parts_ids))->update($data);
+                    } else {
+                        //新增
+                        ServiceWorkSpare::create($data);
+                    }
+                    array_shift($spare_parts_ids);
+                }
+                $work->spare_total += $spare_total;
+            }
+            //自选配件
+            isset($params['self_spare_parts']) && $params['self_spare_parts'] && $params['self_spare_parts'] = json_decode($params['self_spare_parts'], true);
+            if(isset($params['self_spare_parts']) && $params['self_spare_parts']){
+                if (count($params['self_spare_parts']) > 10) {
+                    throw new Exception('自选配件最多10个');
+                }
+                foreach ($params['self_spare_parts'] as $item){
+                    $spare_total += $item['offering_price']*$item['spare_number'];
+                    $data = [
                         'service_work_id'=>$work['id'],
                         'service_work_id'=>$work['id'],
-                        'spare_parts'=>$params['spare_parts'],
-                        'remark'=>''
-                    ]);
-                }else{
-                    //修改
-                    $service_work_spare->spare_parts = $params['spare_parts'];
-                    $service_work_spare->save();
+                        'spare_name' => $item['spare_name'],
+                        'spare_image' => $item['spare_image'],
+                        'offering_price' => $item['offering_price'],
+                        'company_price' => 0,
+                        'original_price' => 0,
+                        'spare_number' => $item['spare_number'],
+                        'spare_part_id' => 0,
+                        'brand' => $item['brand']
+                    ];
+                    if (current($spare_parts_ids)) {
+                        //修改
+                        ServiceWorkSpare::where("id",current($spare_parts_ids))->update($data);
+                    } else {
+                        //新增
+                        ServiceWorkSpare::create($data);
+                    }
+                    array_shift($spare_parts_ids);
                 }
                 }
-                $work->service_work_spare_id = $service_work_spare->id;
+                $work->spare_total += $spare_total;
+            }
+
+            //删除多余的配件数据
+            if ($spare_parts_ids) {
+                ServiceWorkSpare::where('id','in',$spare_parts_ids)->delete();
             }
             }
+            
             // order_amount 原 =  $params['amount'] 修改为 = 配件总价 + 服务尾款
             // order_amount 原 =  $params['amount'] 修改为 = 配件总价 + 服务尾款
             $order_amount = $params['amount'] + $spare_total;
             $order_amount = $params['amount'] + $spare_total;
 
 
@@ -502,17 +545,10 @@ class ServiceWorkLogic extends BaseLogic
 
 
         // 配件信息
         // 配件信息
         $result['spare_parts'] = [];
         $result['spare_parts'] = [];
-        if($result['service_work_spare_id']){
-            $work_spare_parts = json_decode(ServiceWorkSpare::where('id',$result['service_work_spare_id'])->value('spare_parts'),true);
-            $spare_parts = SparePart::where('id','in',array_column($work_spare_parts,'id'))
-                ->field(['id', 'goods_category_id', 'spare_name', 'spare_image', 'spare_number', 'spare_unit','spare_status'])
-                ->select()
-                ->toArray();
-            $spare_parts = array_column($spare_parts,null,'id');
-            foreach (array_column($work_spare_parts,null,'id') as $k=>&$v){
-                $spare_parts[$k] = array_merge($spare_parts[$k],$v);
-            }
-            $result['spare_parts'] = array_values($spare_parts)??[];
+        $result['self_spare_parts'] = [];
+        if($result['spare_total'] > 0){
+            $result['spare_parts'] = ServiceWorkSpare::getLists($result['id'], 1);
+            $result['self_spare_parts'] = ServiceWorkSpare::getLists($result['id'], 2);
         }
         }
         // 保修卡信息
         // 保修卡信息
         $result['order_effectives'] = OrderEffectiveLog::with(['goods'=>function ($query) {
         $result['order_effectives'] = OrderEffectiveLog::with(['goods'=>function ($query) {

+ 4 - 16
app/workerapi/lists/ServiceWorkSparePartLists.php

@@ -2,7 +2,6 @@
 namespace app\workerapi\lists;
 namespace app\workerapi\lists;
 
 
 use app\common\lists\ListsSearchInterface;
 use app\common\lists\ListsSearchInterface;
-use app\common\model\spare_part\SparePart;
 use app\common\model\works\ServiceWork;
 use app\common\model\works\ServiceWork;
 use app\common\model\works\ServiceWorkSpare;
 use app\common\model\works\ServiceWorkSpare;
 
 
@@ -56,22 +55,11 @@ class ServiceWorkSparePartLists extends BaseWorkerDataLists implements ListsSear
     public function lists(): array
     public function lists(): array
     {
     {
         // 配件信息
         // 配件信息
+        $id = ServiceWork::where($this->searchWhere)->value('id');
         $spare_parts = [];
         $spare_parts = [];
-        $service_work_spare_id = ServiceWork::where($this->searchWhere)->value('service_work_spare_id');
-        if($service_work_spare_id){
-            $work_spare_parts = json_decode(ServiceWorkSpare::where('id',$service_work_spare_id)->value('spare_parts'),true);
-            $spare_parts = SparePart::where('id','in',array_column($work_spare_parts,'id'))
-                ->where($this->queryWhere())
-                ->field(['id', 'goods_category_id', 'spare_name', 'spare_image', 'spare_number', 'spare_unit','spare_status'])
-                ->select()
-                ->toArray();
-            $spare_parts = array_column($spare_parts,null,'id');
-            foreach (array_column($work_spare_parts,null,'id') as $k=>&$v){
-                isset($spare_parts[$k]) && $spare_parts[$k] = array_merge($spare_parts[$k],$v);
-            }
-            $this->count = SparePart::where('id','in',array_column($work_spare_parts,'id'))
-                ->where($this->queryWhere())
-                ->count();
+        if($id){
+            $spare_parts['spare_parts'] = ServiceWorkSpare::getLists($id, 1);
+            $spare_parts['self_spare_parts'] = ServiceWorkSpare::getLists($id, 2);
         }
         }
         return $spare_parts?array_values($spare_parts):[];
         return $spare_parts?array_values($spare_parts):[];
     }
     }