Просмотр исходного кода

问题件【修改问题件不显示商品问题】

ajun 5 лет назад
Родитель
Сommit
2c6553f90f

+ 1 - 0
app/Http/Controllers/OrderIssueController.php

@@ -14,6 +14,7 @@ use App\Owner;
 use App\QualityLabel;
 use App\RejectedBill;
 use App\Services\OrderIssueService;
+use App\Services\OrderPackageService;
 use App\Services\OrderService;
 use App\Services\RejectedService;
 use App\Shop;

+ 150 - 15
app/Services/OrderPackageCommoditiesService.php

@@ -18,24 +18,152 @@ class OrderPackageCommoditiesService
     public function basedOnOracleDetailsStore($orderNo, $orderPackage)
     {
         $details = OracleDOCOrderDetail::query()->where('orderNo', $orderNo)->get();
-        foreach ($details as $key => $detail) {
-            $this->createByOrderDetail($detail, $orderPackage);
-        }
+        $orderPackageCommodities = OrderPackageCommodities::query()->where('order_package_id',$orderPackage['id'])->get();
+        $this->根据详情更新OrderPackage下的商品信息($orderPackage,$orderPackageCommodities,$details,'qtyordered');
     }
 
     public function basedOnActAllocationDetailsStoreByOrderNo($orderNo,$orderPackage){
         $details = OracleActAllocationDetails::query()->where('orderno', $orderNo)->get();
-        foreach ($details as $key => $detail) {
-            $this->createByActAllocationDetail($detail, $orderPackage);
+        $orderPackageCommodities =  OrderPackageCommodities::query()->where('order_package_id',$orderPackage['id'])->get();
+        $this->根据详情更新OrderPackage下的商品信息($orderPackage,$orderPackageCommodities,$details,'qty');
+    }
+
+    public function 根据详情更新OrderPackage下的商品信息($orderPackage,$orderPackageCommodities,$details,$key){
+        $newItems = [];
+        foreach ($details as $detail) {
+            $owner = Owner::query()->where(['code' => $detail['customerid']])->first();      // 货主
+            $sku = $detail->sku;    // sku
+            $owner_id = $owner->id; // 货主id
+            $commodity = Commodity::query()->where(['sku' => $sku, 'owner_id' => $owner_id])->first(); // 商品
+            if ($commodity == null) {
+                $basSku = OracleBasSKU::query()->where(['sku' => $sku, 'customerid' => $detail->customerid])->first();   // 没有找到对应的商品信息
+                $commodity = Commodity::query()->create(['sku' => $sku, 'owner_id' => $owner_id, 'name' => $basSku->descr_c]);
+            }
+            $data =  ['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail[$key]];
+            array_push($newItems,$data);
+        }
+        $diffarr = [];
+        foreach ($newItems as $newItem) {
+            $packageCommodity =  $orderPackageCommodities->where('order_package_id',$newItem['order_package_id'])->where('commodity_id',$newItem['commodity_id'])->first();
+            if($packageCommodity!=null){
+                if($packageCommodity['amount'] != $newItem['amount']){
+                    $packageCommodity->update(['amount'=>intval($newItem['amount'])]);
+                }
+                $orderPackageCommodities =  $orderPackageCommodities->filter(function ($item) use ($packageCommodity){
+                    if($item['id'] ==  $packageCommodity['id']){
+                        return false;
+                    }
+                    return true;
+                });
+                array_push($diffarr,$newItem);
+            }
+        }
+        if($orderPackageCommodities->count() > 0){
+            foreach ($orderPackageCommodities as $orderPackageCommodity) {
+                $id = $orderPackageCommodity['id'];
+                OrderPackageCommodities::destroy($id);
+            }
+        }
+        $newItems = array_filter($newItems,function($newItem) use ($diffarr){
+            foreach ($diffarr as $item) {
+                if($item['order_package_id'] == $newItem['order_package_id'] && $item['commodity_id'] == $newItem['commodity_id'] && $item['amount'] == $newItem['amount']){
+                    return false;
+                }
+            }
+            return true;
+        });
+        try {
+            if(count($newItems) > 0 ){
+                OrderPackageCommodities::query()->insert($newItems);
+                LogService::log(__METHOD__,__FUNCTION__,'添加包裹商品信息'.json_encode($newItems));
+            }
+        } catch (\Exception $e) {
+            LogService::log(__METHOD__,__FUNCTION__,'添加包裹商品信息异常'.json_encode($newItems).$e->getMessage(),$e->getTraceAsString());
         }
     }
 
+//    public function 根据订单详情更新OrderPackage下的商品信息($orderPackage,$orderPackageCommodities,$details){
+//        $newItems = [];
+////        ['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qty']]
+//        foreach ($details as $detail) {
+//            $owner = Owner::query()->where(['code' => $detail['customerid']])->first();      // 货主
+//            $sku = $detail->sku;    // sku
+//            $owner_id = $owner->id; // 货主id
+//            $commodity = Commodity::query()->where(['sku' => $sku, 'owner_id' => $owner_id])->first(); // 商品
+//            if ($commodity == null) {
+//                $basSku = OracleBasSKU::query()->where(['sku' => $sku, 'customerid' => $detail->customerid])->first();   // 没有找到对应的商品信息
+//                $commodity = Commodity::query()->create(['sku' => $sku, 'owner_id' => $owner_id, 'name' => $basSku->descr_c]);
+//            }
+//            $data =  ['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qty']];
+//            array_push($newItems,$data);
+//        }
+//        $diffarr = [];
+//        foreach ($newItems as $newItem) {
+//            $packageCommodity =  $orderPackageCommodities->where('sku',$newItem['sku'])->where('customerid',$newItem['customerid'])->first();
+//            if($packageCommodity!=null){
+//                if($packageCommodity['amount'] != $newItem['amount']){
+//                    $packageCommodity->update($packageCommodity,$newItem['amount']);
+//                }
+//                array_push($diffarr,$newItem);
+//            }
+//        }
+//
+//        $newItems = array_diff($newItems,$diffarr);
+//
+//        try {
+//            if(count($newItems) > 0 ){
+//                OrderPackageCommodities::query()->create($newItems);
+//                LogService::log(__METHOD__,__FUNCTION__,'添加包裹商品信息'.json_encode($newItems));
+//            }
+//        } catch (\Exception $e) {
+//            LogService::log(__METHOD__,__FUNCTION__,'添加包裹商品信息异常'.json_encode($newItems).$e->getMessage(),$e->getTraceAsString());
+//        }
+//
+//    }
+//
+//    public function 根据分配详情更新更新OrderPackage下的商品信息($orderPackage,$orderPackageCommodities,$details){
+////        ['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qtyordered']]
+//        $newItems = [];
+//        foreach ($details as $detail) {
+//            $owner = Owner::query()->where(['code' => $detail['customerid']])->first();      // 货主
+//            $sku = $detail->sku;    // sku
+//            $owner_id = $owner->id; // 货主id
+//            $commodity = Commodity::query()->where(['sku' => $sku, 'owner_id' => $owner_id])->first(); // 商品
+//            if ($commodity == null) {
+//                $basSku = OracleBasSKU::query()->where(['sku' => $sku, 'customerid' => $detail->customerid])->first();   // 没有找到对应的商品信息
+//                $commodity = Commodity::query()->create(['sku' => $sku, 'owner_id' => $owner_id, 'name' => $basSku->descr_c]);
+//            }
+//            $data = ['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qtyordered']];
+//            array_push($newItems,$data);
+//        }
+//        $diffarr = [];
+//        foreach ($newItems as $newItem) {
+//            $packageCommodity =  $orderPackageCommodities->where('sku',$newItem['sku'])->where('customerid',$newItem['customerid'])->first();
+//            if($packageCommodity!=null){
+//                if($packageCommodity['amount'] != $newItem['amount']){
+//                    $packageCommodity->update($packageCommodity,$newItem['amount']);
+//                }
+//                array_push($diffarr,$newItem);
+//            }
+//        }
+//        $newItems = array_diff($newItems,$diffarr);
+//        try {
+//            if(count($newItems) > 0 ){
+//                OrderPackageCommodities::query()->create($newItems);
+//                LogService::log(__METHOD__,__FUNCTION__,'添加包裹商品信息'.json_encode($newItems));
+//            }
+//        } catch (\Exception $e) {
+//            LogService::log(__METHOD__,__FUNCTION__,'添加包裹商品信息异常'.json_encode($newItems).$e->getMessage(),$e->getTraceAsString());
+//        }
+//
+//    }
+
+
     public function basedOnActAllocationDetailsStore($orderPackage)
     {
         $details = OracleActAllocationDetails::query()->where('picktotraceid', $orderPackage->logistic_number)->get();
-        foreach ($details as $key => $detail) {
-            $this->createByActAllocationDetail($detail, $orderPackage);
-        }
+        $orderPackageCommodities =  OrderPackageCommodities::query()->where('order_package_id',$orderPackage['id'])->get();
+        $this->根据详情更新OrderPackage下的商品信息($orderPackage,$orderPackageCommodities,$details,'qty');
     }
 
     public function basedOnActAllocationDetail(Order $order,OracleDOCOrderHeader $header,array  $details){
@@ -63,12 +191,15 @@ class OrderPackageCommoditiesService
             $commodity = Commodity::query()->create(['sku' => $sku, 'owner_id' => $owner_id, 'name' => $basSku->descr_c]);
         }
         try {
-            $orderPackageCommodities = OrderPackageCommodities::query()->create(['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qty']]);
-            LogService::log(__METHOD__,__FUNCTION__,'创建订单包裹详情'.json_encode($orderPackageCommodities));
-            return $orderPackageCommodities;
+            $count  = OrderPackageCommodities::query()->where(['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qty']])->count();
+            if($count == 0){
+                $orderPackageCommodities = OrderPackageCommodities::query()->firstOrCreate(['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qty']]);
+                LogService::log(__METHOD__,__FUNCTION__,'创建订单包裹详情'.json_encode($orderPackageCommodities));
+            }
         } catch (\Exception $e) {
             LogService::log(__METHOD__,__FUNCTION__,'创建订单包裹失败'.$e->getMessage().$e->getTraceAsString());
-            return  null;
+        } finally {
+            return $orderPackageCommodities ?? null;
         }
     }
 
@@ -96,11 +227,15 @@ class OrderPackageCommoditiesService
             $commodity = Commodity::query()->create(['sku' => $sku, 'owner_id' => $owner_id, 'name' => $basSku->descr_c]);
         }
         try {
-            $orderpackageCommodities = OrderPackageCommodities::query()->create(['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qtyordered']]);
-            LogService::log(__METHOD__,__FUNCTION__,'创建顶订单包裹详情'.json_encode($orderpackageCommodities));
-            return  $orderpackageCommodities;
+            $count =  OrderPackageCommodities::query()->where('order_package_id',$orderPackage['id'])->where('commodity_id',$commodity['id'])->where('amount' , $detail['qtyordered'])->count();
+            if($count == 0){
+                $orderPackageCommodities = OrderPackageCommodities::query()->first(['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qtyordered']]);
+                LogService::log(__METHOD__,__FUNCTION__,'创建顶订单包裹详情'.json_encode($orderPackageCommodities));
+            }
         } catch (\Exception $e) {
             LogService::log(__METHOD__,__FUNCTION__,'创建顶订单包裹详情'.$e->getMessage().$e->getTraceAsString());
+        } finally {
+            return  $orderPackageCommodities ?? null;
         }
     }
 

+ 66 - 47
app/Services/OrderPackageService.php

@@ -19,69 +19,82 @@ class OrderPackageService
 
     public function createdByOrder($order)
     {
+        /** @var OrderPackageCommoditiesService $orderPackageCommoditiesService */
         $orderPackageCommoditiesService = app('orderPackageCommoditiesService');
-        $actAllocationCount = OracleActAllocationDetails::query()->where('OrderNo', $order['code'])->count();
+        $oracleActAllocationDetails = OracleActAllocationDetails::query()->where('OrderNo', $order['code'])->get();
         $orderHeader = OracleDOCOrderHeader::query()->where('OrderNo', $order['code'])->first();
-        $orderDetailCount = OracleDOCOrderDetail::query()->where('OrderNo', $order['code'])->count();
+        $oracleDOCOrderDetail = OracleDOCOrderDetail::query()->where('OrderNo', $order['code'])->get();
         $logistic_number = null;
-        if ($actAllocationCount == 0) {  // 通过oracle Order Detail
+        if ($oracleActAllocationDetails->count() == 0) {  // 通过oracle Order Detail
             $logistic_number = $orderHeader['soreference5'];
-            if ($orderDetailCount == 0) {return null;}
-            if ($logistic_number == null || $logistic_number == '*') { return null; }
+            if ($oracleDOCOrderDetail->count() == 0) {
+                return null;
+            }
+            if ($logistic_number == null || $logistic_number == '*') {
+                return null;
+            }
             try {
-                $orderPackage = OrderPackage::query()->create(['order_id' => $order['id'], 'logistic_number' => $logistic_number]);
+                $orderPackage = OrderPackage::query()->firstOrCreate(['order_id' => $order['id'], 'logistic_number' => $logistic_number]);
                 $orderPackageCommoditiesService->basedOnOracleDetailsStore($orderHeader['orderno'], $orderPackage);
-                LogService::log(__METHOD__,__FUNCTION__,'创建订单包裹orderPackage'. json_encode($orderPackage));
+                LogService::log(__METHOD__, __FUNCTION__, '创建订单包裹orderPackage' . json_encode($orderPackage));
             } catch (\Exception $e) {
-                LogService::log(__METHOD__,__FUNCTION__,'创建订单包裹orderPackage失败'.$e->getMessage().$e->getTraceAsString());
+                LogService::log(__METHOD__, __FUNCTION__, '创建订单包裹orderPackage失败' . $e->getMessage() . $e->getTraceAsString());
             }
-        } else if ($actAllocationCount > 0) {
-            $count = OracleActAllocationDetails::query()->where('OrderNo', $order['code'])->whereNull('picktotraceid')->count();
+        } else if ($oracleActAllocationDetails->count() > 0) {
+            $count = $oracleActAllocationDetails->where('OrderNo', $order['code'])->whereNull('picktotraceid')->count();
             if ($count > 0) {   // 快递单号为空
-                if (($orderHeader['soreference5'] ?? false) && $orderHeader['soreference5'] == '*') { return null; }
+                if (($orderHeader['soreference5'] ?? false) && $orderHeader['soreference5'] == '*') {
+                    return null;
+                }
                 $logistic_number = $orderHeader['soreference5'];
+
                 try {
-                    $orderPackage = OrderPackage::query()->create(['order_id' => $order['id'], 'logistic_number' => $logistic_number]);
+                    $orderPackage = OrderPackage::query()->firstOrCreate(['order_id' => $order['id'], 'logistic_number' => $logistic_number]);
                     $orderPackageCommoditiesService->basedOnOracleDetailsStore($order, $orderPackage);
-                    LogService::log(__METHOD__,__FUNCTION__,'创建订单包裹orderPackage'. json_encode($orderPackage));
+                    LogService::log(__METHOD__, __FUNCTION__, '创建订单包裹orderPackage' . json_encode($orderPackage));
                 } catch (\Exception $e) {
-                    LogService::log(__METHOD__,__FUNCTION__,'创建订单包裹orderPackage失败'.$e->getMessage().$e->getTraceAsString());
+                    LogService::log(__METHOD__, __FUNCTION__, '创建订单包裹orderPackage失败' . $e->getMessage() . $e->getTraceAsString());
                 }
             } else {
-                $ActAllocationDetails = OracleActAllocationDetails::query()->where('orderno', $order['code'])->get();
-                foreach ($ActAllocationDetails as $detail) {
-                    $logistic_number = $detail['picktotraceid'];
+                $ActAllocationDetails = $oracleActAllocationDetails->where('orderno', $order['code']);
+                $picktotraceids = data_get($ActAllocationDetails,'*.picktotraceid');
+                $picktotraceids = array_unique($picktotraceids);
+                foreach ($picktotraceids as $picktotraceid) {
+                    $logistic_number = $picktotraceid;
                     if ($logistic_number == null || $logistic_number == '*') {
                         $logistic_number = $orderHeader['soreference5'];
-                        if ($logistic_number == null || $logistic_number == '*')  {return null;}
+                        if ($logistic_number == null || $logistic_number == '*') {
+                            return null;
+                        }
                         $orderPackage = OrderPackage::query()->where(['order_id' => $order['id'], 'logistic_number' => $logistic_number])->first();
-                        if($orderPackage){continue;}
+                        if ($orderPackage) {
+                            $orderPackageCommoditiesService->basedOnActAllocationDetailsStoreByOrderNo($order['code'], $orderPackage);
+                            continue;
+                        }
                         try {
                             $orderPackage = OrderPackage::query()->create(['order_id' => $order['id'], 'logistic_number' => $logistic_number]);
                             $orderPackageCommoditiesService->basedOnActAllocationDetailsStoreByOrderNo($order['code'], $orderPackage);
-                            LogService::log(__METHOD__,__FUNCTION__,'创建订单orderPackage'.json_encode($orderPackage));
+                            LogService::log(__METHOD__, __FUNCTION__, '创建订单orderPackage' . json_encode($orderPackage));
                         } catch (\Exception $e) {
-                            LogService::log(__METHOD__,__FUNCTION__,'创建订单orderPackage失败'.json_encode($e->getMessage()).json_encode($e->getTraceAsString()));
+                            LogService::log(__METHOD__, __FUNCTION__, '创建订单orderPackage失败' . json_encode($e->getMessage()) . json_encode($e->getTraceAsString()));
                         }
                         continue;
                     }
-                    $orderPackage = OrderPackage::query()->where('order_id' , $order['id'])->where('logistic_number' , $logistic_number)->first();
-                    if ($orderPackage) {continue;}
+                    $orderPackage = OrderPackage::query()->where('order_id', $order['id'])->where('logistic_number', $logistic_number)->first();
+                    if ($orderPackage) {
+                        $orderPackageCommoditiesService->basedOnActAllocationDetailsStore($orderPackage);
+                        continue;
+                    }
                     try {
                         $orderPackage = OrderPackage::query()->create(['order_id' => $order['id'], 'logistic_number' => $logistic_number]);
                         $orderPackageCommoditiesService->basedOnActAllocationDetailsStore($orderPackage);
-                        LogService::log(__METHOD__,__FUNCTION__,'创建订单'.json_encode($orderPackage));
+                        LogService::log(__METHOD__, __FUNCTION__, '创建订单' . json_encode($orderPackage));
                     } catch (\Exception $e) {
-                        LogService::log(__METHOD__,__FUNCTION__,'创建订单orderPackage失败'.json_encode($e->getMessage()).json_encode($e->getTraceAsString()));
+                        LogService::log(__METHOD__, __FUNCTION__, '创建订单orderPackage失败' . json_encode($e->getMessage()) . json_encode($e->getTraceAsString()));
                     }
                 }
             }
-        }else{
-            $this->updateOrderPackageInfo($order);
         }
-        return OrderPackage::with(['commodities' => function ($query) {
-            return $query->with(['commodity']);
-        }])->get();
     }
 
     public function updateOrderPackageInfo(Order $order)
@@ -94,16 +107,18 @@ class OrderPackageService
         $orderPackageCommodities = OrderPackageCommodities::with('commodity')->whereIn('order_package_id', data_get($orderPackages, '*.id'))->get();
         $actAllocationDetails = OracleActAllocationDetails::where('orderNo', $order['client_code'])->get();
         if (count($orderPackageCommodities) < count($actAllocationDetails)) {
-            $actAllocationDetails =  $actAllocationDetails->reject(function($value,$key) use (&$orderPackageCommodities){
+            $actAllocationDetails = $actAllocationDetails->reject(function ($value, $key) use (&$orderPackageCommodities) {
                 $bool = false;
                 $count = 0;
-                $orderPackageCommodities->reject(function($value1,$key1)use($value,&$bool,$count){
-                    if($count>0){return false;}
-                    if($value1->commodity['sku'] == $value['sku'] && $value1['amount'] == intval($value['qty']) ){
+                $orderPackageCommodities->reject(function ($value1, $key1) use ($value, &$bool, $count) {
+                    if ($count > 0) {
+                        return false;
+                    }
+                    if ($value1->commodity['sku'] == $value['sku'] && $value1['amount'] == intval($value['qty'])) {
                         $bool = true;
                         $count++;
                         return true;
-                    }else{
+                    } else {
                         return false;
                     }
                 });
@@ -115,19 +130,21 @@ class OrderPackageService
         $order['wam_status'] = $orderHeader['oracleBASCode_codename_c'];
         $order->save();
     }
+
     /**
      * @param string $logistic_number
      * @param array $values
      * @return OrderPackage $package
      */
-    public function firstOrCreate($logistic_number, array $values){
+    public function firstOrCreate($logistic_number, array $values)
+    {
         /** @var OrderPackage $package */
-        $package = OrderPackage::query()->where('logistic_number','=',$logistic_number)->first();
-        if ($package)return $package;
+        $package = OrderPackage::query()->where('logistic_number', '=', $logistic_number)->first();
+        if ($package) return $package;
 
         /** @var OrderService */
         $order = app('orderService')->logisticNumberCreateOrder($logistic_number);
-        if ($order)$values["order_id"] = $order->id;
+        if ($order) $values["order_id"] = $order->id;
 
         $values["logistic_number"] = $logistic_number;
         /** @var OrderPackage $package */
@@ -136,17 +153,19 @@ class OrderPackageService
     }
 
 
-    public function createExceptionPaginate($paginate){
-        return OrderPackage::query()->select('id','status','logistic_number','measuring_machine_id','weighed_at','weight','length','width','height','bulk','paper_box_id')
-            ->where('status','上传异常')->orWhere('status','测量异常')->orderBy('created_at','DESC')
+    public function createExceptionPaginate($paginate)
+    {
+        return OrderPackage::query()->select('id', 'status', 'logistic_number', 'measuring_machine_id', 'weighed_at', 'weight', 'length', 'width', 'height', 'bulk', 'paper_box_id')
+            ->where('status', '上传异常')->orWhere('status', '测量异常')->orderBy('created_at', 'DESC')
             ->paginate($paginate);
     }
 
-    public function issueExceptionPaginate($paginate){
-        return OrderPackage::query()->select('id','logistic_number','created_at','batch_number','batch_rule')
-            ->where('status','下发异常')->orWhere('status','记录异常')
-            ->orWhere('status','已上传异常')->orderBy('created_at','DESC')
+    public function issueExceptionPaginate($paginate)
+    {
+        return OrderPackage::query()->select('id', 'logistic_number', 'created_at', 'batch_number', 'batch_rule')
+            ->where('status', '下发异常')->orWhere('status', '记录异常')
+            ->orWhere('status', '已上传异常')->orderBy('created_at', 'DESC')
             ->paginate($paginate);
     }
 
- }
+}

+ 1 - 1
app/Services/OrderService.php

@@ -77,8 +77,8 @@ class OrderService
                 'client_code' => $orderHeadAttr['soreference1'],
             ];
             $order = Order::query()->create($arr);
-            $orderPackageService->createdByOrder($order);
         }
+        $orderPackageService->createdByOrder($order);
         return Order::with('packages.commodities.commodity')->where('client_code', $clientCode)->first();
     }
 

+ 1 - 1
resources/js/queryForm/queryForm.js

@@ -574,6 +574,7 @@ const query = function getQueryForm(data) {
                 ul_div.hide();
             }
         });
+
         return div;
     }
 
@@ -648,7 +649,6 @@ const query = function getQueryForm(data) {
                     select: dom_data,
                     mold: 'select_multiple_select'
                 };
-                modifyData(dom)
                 modifyData(dom);
                 redenerUl(ul);
                 isMultiple(ul.attr('name'));