Przeglądaj źródła

工单处理->商品对比

loustwo 4 lat temu
rodzic
commit
d8e02aac7b

+ 18 - 0
app/Http/Controllers/WorkOrderCommoditiesController.php

@@ -7,7 +7,9 @@ use App\Services\WorkOrderDetailService;
 use App\Services\WorkOrderLogService;
 use App\Services\WorkOrderService;
 use App\WorkOrder;
+use App\WorkOrderDetail;
 use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Gate;
 
 class WorkOrderCommoditiesController extends Controller
@@ -119,4 +121,20 @@ class WorkOrderCommoditiesController extends Controller
         $workOrder->loadDefaultWith();
         return ['success' => true, 'data' => $workOrder];
     }
+
+    /**
+     * 获取
+     * @param Request $request
+     * @return array
+     */
+    public function getCommodityEqualsMapApi(Request $request): array
+    {
+        if(!Auth::check()){
+            return ['success' => false, 'message' => '没有对应权限'];
+        }
+        /** @var WorkOrderDetail $work_order_detail */
+        $work_order_detail = WorkOrderDetail::query()->find($request->input('id'));
+        $data = $this->service->getOrderCommoditiesEqualWorkOrderDetailCommoditiesMap($work_order_detail);
+        return ['success' => true,'data' => $data];
+    }
 }

+ 105 - 0
app/Services/WorkOrderCommoditiesService.php

@@ -2,9 +2,14 @@
 
 namespace App\Services;
 
+use App\OrderPackage;
+use App\OrderPackageCommodities;
+use App\RejectedBill;
+use App\RejectedBillItem;
 use App\Traits\ServiceAppAop;
 use App\WorkOrderCommodities;
 use App\WorkOrderDetail;
+use Illuminate\Support\Facades\DB;
 
 class WorkOrderCommoditiesService
 {
@@ -106,4 +111,104 @@ class WorkOrderCommoditiesService
     {
         $detail->commodities()->update(['tag' => 1]);
     }
+
+    public function getOrderCommoditiesEqualWorkOrderDetailCommoditiesMap(WorkOrderDetail $workOrderDetail): array
+    {
+        $query = OrderPackage::query()->select('id')->where('order_id', $workOrderDetail->workOrder->order_id);
+        $order_commodities = OrderPackageCommodities::query()->with('commodity.barcodes')->whereIn('order_package_id', $query)->get();
+        $query = DB::table('order_issue_rejected_bill')->select('logistic_number_return')->where('order_id', $workOrderDetail->workOrder->order_id);
+        $query = RejectedBill::query()->select('id')->whereIn('logistic_number_return',$query->get()->map(function ($item){
+            return $item->logistic_number_return;
+        })->toArray());
+        $rejected_items = RejectedBillItem::query()->with('barcode','quality')->whereIn('id_rejected_bill',$query)->get();
+        return $this->getEqualMapByRejectedBillAndWorkOrderCommodity($order_commodities,$rejected_items);
+    }
+
+    private function getEqualMapByRejectedBillAndWorkOrderCommodity($order_commodities,$rejectedBillItems): array
+    {
+        $rejected_bill_items_map = $this->getRejectedBillItemMap($rejectedBillItems);
+        $order_commodities_map = $this->getOrderCommoditiesMap($order_commodities,$rejected_bill_items_map);
+        return $this->getEqualMap($order_commodities_map,$rejected_bill_items_map);
+    }
+
+    public function getRejectedBillItemMap($rejectedBillItems): array
+    {
+        $map = [];
+        $rejectedBillItems->each(function($item)use(&$map){
+            $key = $item->barcode_goods;
+            $quality_label = $item->quality_label;
+            if(!array_key_exists($key,$map)){
+                $map[$key] = [
+                    'sku' => $key,
+                    'quality_label' => [
+                        "${quality_label}"=> [
+                            "quality_label" => $quality_label, "amount" => $item->amount,
+                        ],
+                    ],
+                    'name' => $item->name_goods,
+                ];
+            }
+            if(!array_key_exists($quality_label,$map[$key]['quality_label'])){
+                $map[$key]['quality_label'][$quality_label]['amount'] = 0;
+                $map[$key]['quality_label'][$quality_label]['quality_label'] = $quality_label;
+            }
+            $map[$key]['quality_label'][$quality_label]['amount'] += $item->amount;
+        });
+        return $map;
+    }
+
+    public function getOrderCommoditiesMap($orderCommodities,$rejectedBillMap): array
+    {
+        $map = [];
+        if (!$orderCommodities) return $map;
+        $barcodes = array_keys($rejectedBillMap);
+        foreach ($orderCommodities as $order_commodity) {
+            $commodity_barcodes = $order_commodity->commodity->barcodes->map(function($item){
+                return $item->code;
+            })->toArray();
+            $key = $order_commodity->commodity->sku;
+            if($commodity_barcodes){
+                $codes = array_intersect($barcodes,$commodity_barcodes);
+                $key = array_shift($codes);
+            }
+            if (!array_key_exists($key,$map)){
+                $map[$key] = [
+                    'sku' => $key,
+                    'amount' => 0,
+                    'name' => $order_commodity->commodity->name,
+                ];
+                $map[$key]['amount'] += (int) $order_commodity->amount;
+            }
+        }
+        return $map;
+    }
+
+    public function getEqualMap($orderCommodityMap,$rejectedBillMap): array
+    {
+        $map = [];
+        foreach ($orderCommodityMap as $key=>$item){
+            $map[$key] = [
+                'order_commodity_sku' => $key,
+                'order_commodity_name' => $item['name'],
+                'order_commodity_amount' => $item['amount'],
+                'rejected_item_sku' => isset($rejectedBillMap[$key]) ? $key : '',
+                'rejected_item_quality_label' => $rejectedBillMap[$key]['quality_label'] ?? [],
+                'rejected_item_name' => $rejectedBillMap[$key]['name'] ?? '',
+            ];
+        }
+        foreach ($rejectedBillMap as $key=>$item){
+            if(!array_key_exists($key,$orderCommodityMap)){
+                $map[$key] = [
+                    'order_commodity_sku' => isset($orderCommodityMap[$key])  ? $key : '',
+                    'order_commodity_name' => $orderCommodityMap['name'] ?? null,
+                    'order_commodity_amount' => $orderCommodityMap['amount'] ?? null,
+                    'rejected_item_sku' => $key,
+                    'rejected_item_quality_label' => $item['quality_label'] ?? [],
+                    'rejected_item_name' => $item['name'] ?? '',
+                ];
+            }
+        }
+        return $map;
+    }
+
 }

+ 27 - 18
resources/views/order/workOrder/_rejected_item_equals_order_commodity.blade.php

@@ -1,28 +1,37 @@
 <el-dialog :visible.sync="dialogComoditiesEquealsVisible" width="75%">
-    <table class="table table-sm">
-        <tr>
-           <th colspan="3">
+    <table class="table table-bordered table-sm">
+        <tr class="text-center">
+           <th colspan="3" class="bg-light-info" style="width: 600px">
                订单商品信息
            </th>
-           <th colspan="3">
-               工单商品信息
+           <th colspan="3" class="bg-light-khaki" style="width: 600px">
+               退回商品信息
            </th>
         </tr>
         <tr>
-            <th>商品条码</th>
-            <th>商品名</th>
-            <th>数量</th>
-            <th>商品条码</th>
-            <th>商品名</th>
-            <th>数量</th>
+            <th class="bg-light-info">商品条码</th>
+            <th class="bg-light-info">商品名</th>
+            <th class="bg-light-info">数量</th>
+            <th class="bg-light-khaki">商品条码</th>
+            <th class="bg-light-khaki">商品名</th>
+            <th class="bg-light-khaki">数量</th>
         </tr>
-        <tr>
-            <td></td>
-            <td></td>
-            <td></td>
-            <td></td>
-            <td></td>
-            <td></td>
+        <tr v-for="item in commodityEqualsMap">
+            <td class="bg-light-info" v-text="item.order_commodity_sku"></td>
+            <td class="bg-light-info" v-text="item.order_commodity_name"></td>
+            <td class="bg-light-info" v-text="item.order_commodity_amount"></td>
+            <td class="bg-light-khaki" v-text="item.rejected_item_sku"></td>
+            <td class="bg-light-khaki" v-text="item.rejected_item_name"></td>
+            <td class="bg-light-khaki">
+                <div v-for="item_quality_label in item.rejected_item_quality_label">
+                    <span class="badge badge-primary"
+                        v-show="item_quality_label.quality_label === '正品'" v-text="'正品数量:' + item_quality_label.amount"></span>
+                    <span class="badge badge-danger"
+                        v-show="item_quality_label.quality_label === '次品'" v-text="'次品数量' + item_quality_label.amount"></span>
+                    <span class="badge badge-secondary"
+                        v-show="item_quality_label.quality_label === '未知'" v-text="'未知数量' + item_quality_label.amount"></span>
+                </div>
+            </td>
         </tr>
     </table>
 </el-dialog>

+ 26 - 0
resources/views/order/workOrder/index.blade.php

@@ -105,6 +105,10 @@
                                     <button class="btn btn-sm btn-outline-secondary"
                                             @click="showOrderCommoditiesInfo(item)">商品详情
                                     </button>
+                                    <br>
+                                    <button class="btn btn-sm btn-outline-secondary" @click="getEqualsMap(item)">
+                                        商品比较
+                                    </button>
                                 </td>
                                 <td>
                                     @can('订单管理-订单问题件生成')
@@ -390,6 +394,7 @@
         @include('order.workOrder._edit_order_issue_log')
         @include('order.workOrder._edit_process_log')
         @include('order.workOrder._order_commodity_info')
+        @include('order.workOrder._rejected_item_equals_order_commodity')
     </div>
 @endsection()
 
@@ -651,6 +656,7 @@
                     {name:'部分退回',value:'部分退回'},
                     {name:'差异退回',value:'差异退回'},
                     ],
+                commodityEqualsMap:[],
             },
             computed: {},
             mounted() {
@@ -3628,6 +3634,26 @@
                         this.errorTempTip(err);
                     })
                 },
+                getEqualsMap(item){
+                    let order_detail_id = item.pending_detail.id;
+                    let url = "{{route('workOrder.commodity.equalsMapApi')}}";
+                    let data = {
+                        id:order_detail_id,
+                    }
+                    this.waitingTempTip('获取中..');
+                    axios.post(url,data).then(res=>{
+                        window.tempTip.cancelWaitingTip();
+                        if(res.data.success){
+                            this.commodityEqualsMap = res.data.data;
+                            this.dialogComoditiesEquealsVisible = true;
+                            return ;
+                        }
+                        this.errorTempTip(res.data.message ? res.data.message : '获取失败');
+                    }).catch(err=>{
+                        window.tempTip.cancelWaitingTip();
+                        this.errorTempTip(err);
+                    });
+                },
             },
         });
     </script>

+ 1 - 0
routes/apiLocal.php

@@ -371,6 +371,7 @@ Route::prefix('workOrder')->group(function(){
         Route::post("/owner","WorkOrderCommoditiesController@ownerUpdateCommoditiesApi")->name("workOrder.commodity.ownerUpdateApi");          // 货主填充商品信息
         Route::post("/logistic","WorkOrderCommoditiesController@logisticUpdateCommoditiesApi")->name("workOrder.commodity.logisticUpdateApi"); // 承运商 更新商品 处理信息
         Route::post("/baoShi","WorkOrderCommoditiesController@baoShiUpdateCommoditiesApi")->name("workOrder.commodity.baoShiUpdateApi");       // 宝时客服 更新丢件信息
+        Route::post('/getCommodityEqualsMap',"WorkOrderCommoditiesController@getCommodityEqualsMapApi")->name('workOrder.commodity.equalsMapApi'); // 商品数量
     });
 
     Route::prefix('rejectedBill/relation')->group(function(){