Selaa lähdekoodia

Merge branch 'master' into Haozi

haozi 5 vuotta sitten
vanhempi
commit
f8ce979759
75 muutettua tiedostoa jossa 1260 lisäystä ja 588 poistoa
  1. 0 41
      app/Commodity.php
  2. 24 0
      app/Events/ResetProcessStatisticStartDateEvent.php
  3. 93 109
      app/Http/Controllers/OrderIssueController.php
  4. 26 4
      app/Http/Controllers/ProcessController.php
  5. 6 1
      app/Http/Controllers/RejectedBillController.php
  6. 1 0
      app/Http/Controllers/RejectedBillItemController.php
  7. 33 12
      app/Http/Controllers/TestController.php
  8. 21 8
      app/Http/Controllers/api/thirdPart/flux/SortingController.php
  9. 10 7
      app/Http/Controllers/api/thirdPart/goodscan/PackageController.php
  10. 29 19
      app/Http/Controllers/api/thirdPart/weight/PackageController.php
  11. 60 0
      app/Listeners/ResetProcessStatisticStartDateListener.php
  12. 0 1
      app/OracleDOCOrderHeader.php
  13. 6 2
      app/Order.php
  14. 3 2
      app/OrderIssue.php
  15. 3 3
      app/OrderPackage.php
  16. 4 0
      app/Process.php
  17. 2 0
      app/Providers/AppServiceProvider.php
  18. 3 0
      app/Providers/EventServiceProvider.php
  19. 1 1
      app/RejectedBill.php
  20. 29 0
      app/Services/CommodityBarcodeService.php
  21. 54 2
      app/Services/CommodityService.php
  22. 10 16
      app/Services/LogService.php
  23. 1 0
      app/Services/OracleActAllocationDetailService.php
  24. 4 3
      app/Services/OracleDOCOrderHeaderService.php
  25. 22 10
      app/Services/OrderIssueService.php
  26. 103 73
      app/Services/OrderPackageCommoditiesService.php
  27. 72 16
      app/Services/OrderPackageService.php
  28. 222 79
      app/Services/OrderService.php
  29. 6 4
      app/Services/OwnerService.php
  30. 7 3
      app/Services/RejectedBillService.php
  31. 1 1
      app/Services/ShopService.php
  32. 2 1
      app/Services/UserService.php
  33. 1 1
      app/Services/WarehouseService.php
  34. 1 1
      app/Services/common/DataHandlerService.php
  35. 2 2
      public/js/app.js
  36. 2 5
      public/t.php
  37. 9 4
      resources/js/queryForm/queryForm.js
  38. 1 1
      resources/views/inventory/stockInventory/mission.blade.php
  39. 14 1
      resources/views/order/index/delivering.blade.php
  40. 5 4
      resources/views/test.blade.php
  41. 0 0
      tests/Services/CacheService/GetOrExecuteTest.php
  42. 0 0
      tests/Services/CityService/FindByNameTest.php
  43. 60 0
      tests/Services/CommodityBarcodeService/DestroyTest.php
  44. 65 0
      tests/Services/CommodityBarcodeService/InsertMany_onCommoditiesTest.php
  45. 98 0
      tests/Services/CommodityService/SyncBarcodesTest.php
  46. 0 0
      tests/Services/LogisticTimingService/FindByParamsTest.php
  47. 0 0
      tests/Services/OracleDOCOrderHeaderService/GetWMSOrderOnStartDateTest.php
  48. 0 0
      tests/Services/OracleDOCOrderHeaderService/GetWmsOrderOnStartDateEditTest.php
  49. 0 2
      tests/Services/OracleDOCOrderHeaderService/GetWmsOrderOnstartDateCreateTest.php
  50. 0 0
      tests/Services/OrderIssueService/OrderIssueTagTest.php
  51. 10 8
      tests/Services/OrderPackageCommoditiesService/RegroupOrderCommoditiesTest.php
  52. 33 0
      tests/Services/OrderPackageCommoditiesService/SyncOrderPackageCommoditiesTest.php
  53. 0 46
      tests/Services/OrderPackageService/CreatePackageInfoTest/CreatePackageInfoTest.php
  54. 0 0
      tests/Services/OrderPackageService/DeleteUnnecessaryPackageTest.php
  55. 0 0
      tests/Services/OrderPackageService/GetInnerParamsTest.php
  56. 6 10
      tests/Services/OrderPackageService/SyncOrderPackageTest.php
  57. 9 8
      tests/Services/OrderPackageService/SyncPackageByOrderHeadersTest.php
  58. 0 40
      tests/Services/OrderService/CreateOrderInfoTest/CreateOrderInfoTest.php
  59. 0 0
      tests/Services/OrderService/FindOrCreateByClientCodeTest.php
  60. 0 0
      tests/Services/OrderService/GetByWmsOrdersTest.php
  61. 0 0
      tests/Services/OrderService/GetCreateOrderModelByWMSOrderHeadersTest.php
  62. 0 0
      tests/Services/OrderService/GetCreateOrderModelsTest.php
  63. 0 0
      tests/Services/OrderService/GetOrderByLogisticNumberTest.php
  64. 0 0
      tests/Services/OrderService/GetParamByOrderHeaderTest.php
  65. 0 0
      tests/Services/OrderService/GetUpdateModelByWmsOrderHeadersTest.php
  66. 0 0
      tests/Services/OrderService/LogisticNumberFirstOrCreateOrderTest.php
  67. 5 35
      tests/Services/OrderService/SyncOrderByWMSOrderHeaderTest.php
  68. 77 0
      tests/Services/OrderService/SyncOrderTest.php
  69. 0 0
      tests/Services/OrderTrakingSerive/CustomizedOperationTest.php
  70. 0 0
      tests/Services/OrderTrakingSerive/GetParamsByOrderHeaderAndOrderTest.php
  71. 0 0
      tests/Services/ProvinceService/FindByNameTest.php
  72. 0 0
      tests/Services/WarehouseService/GetByWmsOrderTest.php
  73. 0 0
      tests/Services/WarehouseService/SyncWmsWareHouseTest.php
  74. 0 1
      tests/sortingFluxNewBatch.http
  75. 4 1
      文档/WAS项目规范.md

+ 0 - 41
app/Commodity.php

@@ -36,48 +36,7 @@ class Commodity extends Model
         return $this->owner['code']??'';
     }
 
-    static function newCommodityBy_BarcodeOwnerIdNameSku($barcode,$ownerId,$name,$sku){
-        $barcodes=rtrim($barcode,',');
-        $barcodes=explode(',',$barcodes);
-        foreach ($barcodes as $k=>$barcode){
-            if(!trim($barcode)) unset($barcodes[$k]);
-        }
-
-        $commodities=[];
-        foreach ($barcodes as $barcode){
-            if(!trim($barcode))continue;
-            $commodity=Commodity::whereHas('barcodes', function (Builder $query)use($barcode){
-                $query->where('code',$barcode);
-            })->where('name',$name)->where('owner_id',$ownerId)->first();
-            if($commodity)$commodities[]=$commodity;
-        }
-
-        if(count($barcodes)==count($commodities)&&count($commodities)>0){//筛选掉仅有一个条码相等的。
-            $commodity=$commodities[0];
-        }else{
-            $commodity=null;
-        }
 
-        if(!$commodity){
-            $commodity=new Commodity(['name'=>$name,'sku'=>$sku,'owner_id'=>$ownerId]);
-            $commodity->save();
-        }else{
-            if(!isset($commodity['name'])||(!isset($commodity['sku'])||$sku)){
-                $commodity['name']=$name;
-                $commodity['sku']=$sku;
-                $commodity->save();
-            }
-        }
-        foreach ($barcodes as $barcode){
-            if(!trim($barcode))continue;
-            $commodityBarcode=CommodityBarcode::where('code',$barcode)->where('commodity_id',$commodity['id'])->first();
-            if(!$commodityBarcode){
-                $commodityBarcode=new CommodityBarcode(['code'=>$barcode,'commodity_id'=>$commodity['id']]);
-                $commodityBarcode->save();
-            }
-        }
-        return $commodity;
-    }
 
     public function newBarcode($barcode){
         $barcodeModel = $this->barcodes()->where('code', $barcode)->first();

+ 24 - 0
app/Events/ResetProcessStatisticStartDateEvent.php

@@ -0,0 +1,24 @@
+<?php
+
+namespace App\Events;
+
+use App\Process;
+use Illuminate\Broadcasting\InteractsWithSockets;
+use Illuminate\Foundation\Events\Dispatchable;
+use Illuminate\Queue\SerializesModels;
+
+class ResetProcessStatisticStartDateEvent
+{
+    use Dispatchable, InteractsWithSockets, SerializesModels;
+
+    public $process;
+    /**
+     * Create a new event instance.
+     * @param Process $process
+     * @return void
+     */
+    public function __construct(Process $process)
+    {
+        $this->process = $process;
+    }
+}

+ 93 - 109
app/Http/Controllers/OrderIssueController.php

@@ -13,6 +13,7 @@ use App\OrderPackage;
 use App\Owner;
 use App\QualityLabel;
 use App\RejectedBill;
+use App\Services\common\ExportService;
 use App\Services\LogService;
 use App\Services\OrderIssueProcessLogService;
 use App\Services\OrderIssueService;
@@ -604,8 +605,11 @@ class OrderIssueController extends Controller
         }
         /** @var OrderIssueService $service */
         $service = app('OrderIssueService');
-
         $order_Issues  = $service->getJsonObj($params);
+        return $this->getJson($order_Issues);
+    }
+
+    public function getJson($order_Issues){
         $json = [];
         $row = [
             '登记日期','创建日期','客户','客户订单号','原始承运商','收货人','收货电话','省','市','区','收货人地址',
@@ -615,120 +619,100 @@ class OrderIssueController extends Controller
             '二次订单号','二次承运商','二次运单号','二次商品条码','二次商品名','二次商品数量',
             '最终状态', '承运商赔偿金额', '承运商快递减免', '宝时赔偿金额', '宝时快递减免','事故责任方'
         ];
-        $count = null;
-        $row_count = 0;
-        $start_row=  0;
-        $mergeRow = []; //合并规则
-        $row_number = 2;
-        $order_Issues->each(function ($order_issue)use(&$json,&$row_number,&$mergeRow){
-            $order = $order_issue->order;
-            $send_order = $order_issue->secondOrder ??  new Order();
-            $logs =  $order_issue->logs ?? collect();
-            $rejectedBill  = $order_issue->rejectedBill ?? new RejectedBill();
-            // 订单信息
-            $order_logistic_number = [];
-            $order_info = [];
-            $order->packages->each(function($package)use(&$order_logistic_number,&$order_info){
-                $order_logistic_number [] = $package->logistic_number;
-                $package->commodities->each(function($commodities)use(&$order_info){
-                    $sku = $commodities->commodity;
-                    if($sku?? false)
-                        $order_info[]=['sku'=>$sku->sku,'sku_name'=>$sku->name,'amount'=>$commodities->amount];
-                });
-             });
-            // 二次订单信息
-            $send_order_logistic_number  = [];
-            $send_order_info = [];
-            $send_order->packages->each(function($package)use(&$send_order_logistic_number,&$send_order_info){
-                $send_order_logistic_number [] = $package->logistic_number;
-                $package->commodities->each(function($commodities)use(&$send_order_info){
-                    $sku = $commodities->commodity;
-                    if($sku?? false)
-                        $send_order_info[] = ['send_sku'=>$sku->sku ?? '','send_sku_name'=>$sku->name ?? '','send_amount'=>$commodities->amount ?? ''];
+        foreach ($order_Issues as $order_issue){
+            $order =  $order_issue->order;
+            $orderPacakges = $order_issue->order->packages ?? collect();
+            $logistic_numbers = '';$order_sku  = '';$order_sku_name  = '';$order_sku_amount  = '';
+            $orderPacakges->each(function($package,$index)use(&$logistic_numbers,&$order_sku,&$order_sku_name,&$order_sku_amount){
+                $logistic_numbers.=$package->logistic_number."\r\n";
+                $package->commodities->each(function($commodities)use(&$order_sku,&$order_sku_name,&$order_sku_amount){
+                    $commodity = $commodities->commodity ?? '';
+                    $order_sku.= ($commodity->sku ?? '')."\r\n";
+                    $order_sku_name.= ($commodity->name ?? '')."\r\n";
+                    $order_sku_amount.= ($commodities->amount ?? '')."\r\n";
                 });
             });
+            $rejected_Bill_remark = $order_issue->rejectedBill->remark ?? '';
+            $rejected_name = ''; $rejected_barcode = '';$rejected_amount = '';
+            if($order_issue->rejectedBill){
+                $order_issue->rejectedBill->items(function($item)use(&$rejected_name,&$rejected_barcode, &$rejected_amount){
+                    $rejected_name.= $item->name_goods."\r\n";
+                    $rejected_barcode.= $item->barcode_goods."\r\n";
+                    $rejected_amount.= $item->amount."\r\n";
+                });
+            }
 
-            // 退回单信息
-            $rejected_Bill_info = [];
-            $rejected_Bill_remark =$rejectedBill->remark ?? '';
-            $rejectedBill->items->each(function($item)use(&$rejected_Bill_info){
-                $rejected_Bill_info[] = ['rejected_item_name'=>$item->name_goods,'rejected_item_barcode'=>$item->barcode_goods,'rejected_item_amount'=>$item->amount];
+            $log_type = ''; $log_content = '';$log_user = '';
+            $order_issue->logs->each(function($log)use(&$log_type, &$log_content,&$log_user){
+                $log_type.=$log->type."\r\n";
+                $log_content.=$log->content."\r\n";
+                $log_user.=$log->user->name."\r\n";
             });
-            $logs_info = [];
-            $logs->each(function($log)use(&$logs_info){
-                $logs_info[] = ['log_type'=>$log->type,'log_content'=>$log->content,'log_user'=>$log->user->name];
+            $send_order = $order_issue->secondOrder ??  new Order();
+            $send_order_numbers = '';$send_order_sku ='';$send_order_name ='';$send_order_amount = '';
+            $send_order->packages->each(function($package)use(&$send_order_numbers ,&$send_order_sku ,&$send_order_name ,&$send_order_amount ){
+                $send_order_numbers.=($package->logistic_number)."\r\n";
+                $package->commodities->each(function ($commodities)use( &$send_order_sku ,&$send_order_name ,&$send_order_amount ){
+                    $commodity = $commodities->commodity;
+                    $send_order_sku.=$commodity->sku."\r\n";
+                    $send_order_name.=$commodity->name."\r\n";
+                    $send_order_amount.=$commodities->amount."\r\n";
+                });
             });
-            $rows = [count($rejected_Bill_info),count($logs_info),count($send_order_info),count($order_info)];
-            $max_rows = max($rows);
-            $start_row = $row_number;
-            for ($index =0 ;$index<$max_rows ;$index++){
-                $json[] = [
-                    isset($order_issue->created_at) ? str_split($order_issue->created_at,10)[0] :'',       // 登记日期
-                    isset($order->created_at) ? str_split($order->created_at,10)[0] :'',             // 创建日期
-                    $order->owner->name ?? '',      // 客户
-                    $order->client_code,              // 客户订单号
-                    $order->logistic->name ?? '',   // 原始承运商
-                    $order->consignee_name,         // 收货人
-                    $order->consignee_phone,        // 收货电话
-                    $order->province,               // 省
-                    $order->city,                   // 市
-                    $order->district,               // 区
-                    $order->address,                // 收货人地址
-
-                    $order_logistic_number[$index]??'',     //原始运单号
-                    $order_info[$index]['sku']??'',         //原始商品
-                    $order_info[$index]['sku_name']??'',    //原始商品名称
-                    $order_info[$index]['amount']??'',      //原始商品数量
-
-                    //'退单备注','退单商品名','退单商品条码','退单商品数量','退单状态',
-                    $rejected_Bill_remark,                                          // 退单备注
-                    $rejected_Bill_info[$index]['rejected_item_name'] ?? '',        // 退单商品名
-                    $rejected_Bill_info[$index]['rejected_item_barcode'] ?? '' ,    // 退单商品条码
-                    $rejected_Bill_info[$index]['rejected_item_amount'] ?? '',      // 退单商品数量
-                    $order_issue->rejecting_status ,                                // 退单状态
-
-                    // '操作类型','情况说明','问题类别',
-                    $logs_info[$index]['log_type'] ?? '',                        //操作类型
-                    $logs_info[$index]['log_content'] ?? '',                     //情况说明
-                    $logs_info[$index]['log_user'] ?? '',                        //操作者
-
-                    // '情况说明','问题类别',
-                    $order_issue->result_explain,                               // 情况说明
-                    $order_issue->issueType->name ?? '',                                   // 问题类别
-
-                    // '二次订单号','二次承运商','二次运单号','二次商品条码','二次商品名','二次商品数量',
-                    $order_issue->secondOrder->client_code ?? '',                //二次订单号
-                    $order_issue->secondOrder->logistic->name ?? '',            //二次承运商
-                    $send_order_logistic_number[$index] ?? '' ,                 //二次运单号
-                    $send_order_info[$index]['send_sku'] ?? '',                // 二次商品条码
-                    $send_order_info[$index]['send_sku_name'] ?? '',            // 二次商品名
-                    $send_order_info[$index]['send_amount'] ?? '',              // 二次商品数量
-
-                    //'最终状态', '承运商赔偿金额', '承运商快递减免', '宝时赔偿金额', '宝时快递减免','事故责任方'
-                    $order_issue->final_status??'',
-                    $order_issue->logistic_indemnity_money ,
-                    $order_issue->logistic_express_remission,
-                    $order_issue->baoshi_indemnity_money,
-                    $order_issue->baoshi_express_remission,
-                    $order_issue->userWorkGroup->name ?? '',
-                ];
-                $row_number++;
-            }
-            if($max_rows>1){
-                $mergeRow[(string)($start_row)]  =(string)($row_number-1);
-            }
-        });
-        $mergeColumn = ['A','B','C','D','E','F','G','H','I','J','K','L','P','T','X','Y','Z','AA','AF','AG','AH','AI','AJ','AK'];   // 合并行
-        $post=Http::post(config('go.export.url'),['type'=>'base',
-            'data'=>json_encode(['row'=>$row,'list'=>$json,'mergeColumn'=>$mergeColumn,'mergeRow'=>$mergeRow],JSON_UNESCAPED_UNICODE),'createFormat'=>'merge']);
-        // 'createFormat'=>'wrapText'
-        if ($post->status() == 500){
-            throw new Exception($post->header("Msg"));
+
+            $json[] = [
+                isset($order_issue->created_at) ? str_split($order_issue->created_at,10)[0] :'',       // 登记日期
+                isset($order->created_at) ? str_split($order->created_at,10)[0] :'',             // 创建日期
+                $order->owner->name ?? '',      // 客户
+                $order->client_code,              // 客户订单号
+                $order->logistic->name ?? '',   // 原始承运商
+                $order->consignee_name,         // 收货人
+                $order->consignee_phone,        // 收货电话
+                $order->province,               // 省
+                $order->city,                   // 市
+                $order->district,               // 区
+                $order->address,                // 收货人地址
+
+                $logistic_numbers,              //原始运单号
+                $order_sku,                     //原始商品
+                $order_sku_name,                //原始商品名称
+                $order_sku_amount,              //原始商品数量
+
+                //'退单备注','退单商品名','退单商品条码','退单商品数量','退单状态',
+                $rejected_Bill_remark,                                          // 退单备注
+                $rejected_name,        // 退单商品名
+                $rejected_barcode ,    // 退单商品条码
+                $rejected_amount,      // 退单商品数量
+                $order_issue->rejecting_status ,                                // 退单状态
+
+                // '操作类型','情况说明','问题类别',
+                $log_type,                        //操作类型
+                $log_content,                     //情况说明
+                $log_user,                        //操作者
+
+                // '情况说明','问题类别',
+                $order_issue->result_explain,                               // 情况说明
+                $order_issue->issueType->name ?? '',                                   // 问题类别
+
+                // '二次订单号','二次承运商','二次运单号','二次商品条码','二次商品名','二次商品数量',
+                $order_issue->secondOrder->client_code ?? '',                //二次订单号
+                $order_issue->secondOrder->logistic->name ?? '',             //二次承运商
+                $send_order_numbers ,                                        //二次运单号
+                $send_order_sku,                                             // 二次商品条码
+                $send_order_name,                                            // 二次商品名
+                $send_order_amount,                                          // 二次商品数量
+
+                //'最终状态', '承运商赔偿金额', '承运商快递减免', '宝时赔偿金额', '宝时快递减免','事故责任方'
+                $order_issue->final_status??'',
+                $order_issue->logistic_indemnity_money ,
+                $order_issue->logistic_express_remission,
+                $order_issue->baoshi_indemnity_money,
+                $order_issue->baoshi_express_remission,
+                $order_issue->userWorkGroup->name ?? '',
+            ];
         }
-        return response($post,200, [
-            "Content-type"=>"application/octet-stream",
-            "Content-Disposition"=>"attachment; filename=订单问题件-".date('ymdHis').'.xlsx',
-        ]);
+        $mergeColumn = ['A','B','C','D','E','F','G','H','I','J','K','L','P','T','X','Y','Z','AA','AF','AG','AH','AI','AJ','AK'];   // 合并行
+        return app(ExportService::class)->json($row,$json,"订单问题件");
     }
 
 }

+ 26 - 4
app/Http/Controllers/ProcessController.php

@@ -4,6 +4,7 @@ namespace App\Http\Controllers;
 
 use App\Commodity;
 use App\CommodityBarcode;
+use App\Events\ResetProcessStatisticStartDateEvent;
 use App\LaborReport;
 use App\Owner;
 use App\Process;
@@ -20,6 +21,7 @@ use App\UserDutyCheck;
 use App\UserLabor;
 use Carbon\Carbon;
 use Exception;
+use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\DB;
@@ -319,6 +321,8 @@ class ProcessController extends Controller
         }
         return $process_id;
     }
+
+    //新增参与人
     public function storeProcessDailyParticipant(Request $request){
         if(!Gate::allows('二次加工管理-登记工时')){ return redirect(url('/'));  }
         $errors=$this->validatorProcessDailyParticipant($request)->errors();
@@ -355,6 +359,11 @@ class ProcessController extends Controller
         $processDailyParticipant->load(['processDaily'=>function($query){
             $query->with('process');
         }]);
+
+        // 重置统计开始时间
+        event(new ResetProcessStatisticStartDateEvent($processDailyParticipant->processDaily->process));
+
+
         if ($processDailyParticipant->processDaily && $processDailyParticipant->processDaily->process &&
             $processDailyParticipant->processDaily->process->status=='交接完成'){
             $this->statistic($processDailyParticipant->processDaily->process);
@@ -908,9 +917,13 @@ class ProcessController extends Controller
                 unset($processDaily);
             }
         }
-        ProcessDaily::destroy($processDailiesId);
-        ProcessDailyParticipant::whereIn('process_daily_id',$processDailiesId)->delete();
+
         $process=Process::find($process_id);
+        if (count($processDailiesId) > 0){
+            ProcessDaily::destroy($processDailiesId);
+            ProcessDailyParticipant::whereIn('process_daily_id',$processDailiesId)->delete();
+            event(new ResetProcessStatisticStartDateEvent($process));
+        }
         if (!$is_process_daily && $process){
             $ProcessDailyNow=ProcessDaily::create([
                 'process_id'=>$process_id,
@@ -920,7 +933,7 @@ class ProcessController extends Controller
             ]);
             $processDailies->push($ProcessDailyNow);
         }
-        $today=Carbon::now()->format('Y-m-d');
+        $today=Carbon::parse($start_date)->format('Y-m-d');
         $this->createDeficiencyData($processDailies,$today);
         $processDailies=ProcessDaily::with('processDailyParticipants')->where('process_id',$process_id)
             ->orderBy('date','DESC')->get();
@@ -963,7 +976,16 @@ class ProcessController extends Controller
 
     //删除临时工工作记录
     public function destroyDailyParticipant($id){
-        if (ProcessDailyParticipant::destroy($id)) return ['success'=>true];
+        $pro = ProcessDailyParticipant::query()->with(["processDaily"=>function($query){
+            /** @var Builder $query */
+            $query->with("process");
+        }])->find($id);
+        if ($pro->delete()) {
+
+            event(new ResetProcessStatisticStartDateEvent($pro->processDaily->process));
+
+            return ['success'=>true];
+        }
         return ['success'=>false , 'data'=>'记录不存在!'];
     }
     //导入商品数据

+ 6 - 1
app/Http/Controllers/RejectedBillController.php

@@ -150,9 +150,14 @@ class RejectedBillController extends Controller
     {
         $mobileShouldBeRequired = 'required';
         $logistic=Logistic::find($data['id_logistic_return']);
-        if($logistic){if(strstr($logistic['name'],'顺丰')){
+        if($logistic){if(
+            strstr($logistic['name'],'顺丰')
+        ){
             $mobileShouldBeRequired = 'nullable';
         }}
+        if($data['id_owner']=='4'){
+            $mobileShouldBeRequired = 'nullable';
+        }
         $mobileDigits = '';
         if($data['mobile_sender']&&$data['mobile_sender'][0]=='1'){
             $mobileDigits = 'digits:11';

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

@@ -363,6 +363,7 @@ class RejectedBillItemController extends Controller
         }
         $rejectedBillItem = RejectedBillItem::find($request->input('id'));
         $rejectedBillItem->forceDelete();
+        app('LogService')->log(__METHOD__,__FUNCTION__,json_encode($rejectedBillItem),Auth::user()['id']);
         return ['success'=>'true','id'=>$request->input('id')];
     }
 

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 33 - 12
app/Http/Controllers/TestController.php


+ 21 - 8
app/Http/Controllers/api/thirdPart/flux/SortingController.php

@@ -10,6 +10,8 @@ use App\Order;
 use App\OrderBin;
 use App\OrderCommodity;
 use App\Owner;
+//use App\Services\OrderService;
+use App\Services\CommodityService;
 use Carbon\Carbon;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Validator;
@@ -18,6 +20,12 @@ use Zttp\Zttp;
 class SortingController extends Controller
 {
 
+//    /** @var OrderService orderService */
+//    private $orderService;
+//    public function __construct(){
+//        $this->orderService=app('OrderService');
+//    }
+
     /**
      * 新增被通知的波次列表(一个以上的波次),并且保存在本地数据库,供get波次使用
      * 接收:request[(下边newBatch的字段)]
@@ -37,12 +45,14 @@ class SortingController extends Controller
         $requestBatches = $requestArr['request']?? '';
         foreach ($requestBatches as $requestBatch){
             $requestBatch['edittime']&&strpos(trim($requestBatch['edittime']),' ')?$editTimeFormat='Y-m-d H:i:s':$editTimeFormat='YmdHis';
-            $batch=new Batch([
-                'code' => $requestBatch['waveno'],
-                'wms_type' => $requestBatch['batch_type']??'',
-                'wms_status' => $requestBatch['docstatus']??'',
-                'status' => '未处理',
-                'wms_created_at' => $requestBatch['edittime']?Carbon::createFromFormat($editTimeFormat,$requestBatch['edittime']):'',
+            $batch=Batch::query()->firstOrCreate(['code' => $requestBatch['waveno']]);
+            if(!$batch)$batch=new Batch();
+            $batch->fill([
+                    'code' => $requestBatch['waveno'],
+                    'wms_type' => $requestBatch['batch_type']??'',
+                    'wms_status' => $requestBatch['docstatus']??'',
+                    'status' => '未处理',
+                    'wms_created_at' => $requestBatch['edittime']?Carbon::createFromFormat($editTimeFormat,$requestBatch['edittime']):'',
             ]);
             $batch->save();
             $oracleAlloactions=OracleActAllocationDetails::query()->where('waveno',$requestBatch['waveno'])->get();
@@ -57,6 +67,7 @@ class SortingController extends Controller
                         'wms_status' => $requestOrder['docstatus']??'波次下发',
                         'status' => '未处理',
                     ]);
+                    app('LogService')->log(__METHOD__,__FUNCTION__,'创建 Order'.json_encode($order));
                 }else{
                     $order['batch_id']= $order['batch_id']??$batch['id'] ;
                     $order['owner_id']=$order['owner_id']??$owner['owner_id'];
@@ -72,7 +83,9 @@ class SortingController extends Controller
                     $orderCommodity=OrderCommodity::query()
                         ->where('order_id',$order['id'])->where('wms_ptltaskid',$requestBarcode['ptltaskid'])->first();
                     if(!$orderCommodity){
-                        $commodity=Commodity::newCommodityBy_BarcodeOwnerIdNameSku($requestBarcode['alternate_sku1'],$owner['id'],$requestBarcode['descr_c'],$requestBarcode['sku']);
+                        /** @var CommodityService $commodityService */
+                        $commodityService=app('CommodityService');
+                        $commodity=$commodityService->syncBarcodes($requestBarcode['alternate_sku1'],$owner['id'],$requestBarcode['sku']);
                         $orderCommodity = new OrderCommodity([
                             'order_id' => $order['id'],
                             'commodity_id' => $commodity['id'],
@@ -95,7 +108,7 @@ class SortingController extends Controller
     {
         return Validator::make($data, [
             'request' => ['required', 'array', 'min:1'],
-            'request.*.waveno' => ['required', 'string', 'max:191','unique:batches,code'],
+            'request.*.waveno' => ['required', 'string', 'max:191'],
             'request.*.taskprocess' => ['nullable', 'string', 'max:191'],
             'request.*.edittime' => ['nullable', 'string', 'max:191'],
             'request.*.batch_type' => ['nullable', 'string', 'max:191'],

+ 10 - 7
app/Http/Controllers/api/thirdPart/goodscan/PackageController.php

@@ -9,7 +9,6 @@ use App\MeasuringMachine;
 use App\OracleDOCOrderHeader;
 use App\Order;
 use App\OrderPackage;
-use App\Services\LogService;
 use App\Services\OrderService;
 use App\Waybill;
 use Carbon\Carbon;
@@ -28,11 +27,11 @@ class PackageController
         app('LogService')->log(__METHOD__,'GoodScan weightApi add'.__FUNCTION__,json_encode($request->getContent()));
         $errors = $this->validatorWeight($requestInput)->errors(); // 参数校验
         if($requestInput['weight'] == '-9.9'){   // 称重异常校验
-            LogService::log(__METHOD__,'GoodScan weightApi (Error)'.__FUNCTION__,'异方接口称重伤上传异常[异常值为-9.9,电子秤故障或未连接]'.json_encode($request->getContent()));
+            app('LogService')->log(__METHOD__,'GoodScan weightApi (Error)'.__FUNCTION__,'异方接口称重伤上传异常[异常值为-9.9,电子秤故障或未连接]'.json_encode($request->getContent()));
             return json_encode(['code'=>500,'error'=>'weight=-9.9']);
         }
         if(count($errors) > 0){
-            LogService::log(__METHOD__,'error'.__FUNCTION__,json_encode($request->getContent()).'||'.json_encode($errors),null);
+            app('LogService')->log(__METHOD__,'error'.__FUNCTION__,json_encode($request->getContent()).'||'.json_encode($errors),null);
             return json_encode(['code'=>500,'error'=>$errors]);
         }
 
@@ -60,7 +59,7 @@ class PackageController
                 $orderPackage = $this->getOrderPackage($requestInput, $measuringMachine, $order);// 返回包裹对象
                 $this->syncOrderPackageLogistic($orderPackage);// 同步包裹订单的承运商
             } catch (\Exception $e) {
-                LogService::log(__METHOD__,__FUNCTION__,'GoodScan weightApi (Error)'.json_encode($request->getContent()).'||'.json_encode($orderPackage),null);
+                app('LogService')->log(__METHOD__,__FUNCTION__,'GoodScan weightApi (Error)'.json_encode($request->getContent()).'||'.json_encode($orderPackage),null);
                 return json_encode(["code"=>500,"error"=>"写入WMS失败!"],JSON_UNESCAPED_UNICODE);
             }
         }
@@ -69,7 +68,7 @@ class PackageController
         }
         event(new WeighedEvent($orderPackage));
         $response=["code"=>0,'error'=>'upload success'];
-        LogService::log(__METHOD__,__FUNCTION__,"下发写入包裹成功:".json_encode($request->getContent()).'||'.json_encode($response),null);
+        app('LogService')->log(__METHOD__,__FUNCTION__,"下发写入包裹成功:".json_encode($request->getContent()).'||'.json_encode($response),null);
         return json_encode($response,JSON_UNESCAPED_UNICODE);
     }
 
@@ -155,7 +154,7 @@ class PackageController
                 $orderPackage->status="上传异常";
             }
         }else{
-            LogService::log(__METHOD__,__FUNCTION__,"GoodScan 写入包裹至WMS:".json_encode($orderPackage),null);
+            app('LogService')->log(__METHOD__,__FUNCTION__,"GoodScan 写入包裹至WMS:".json_encode($orderPackage),null);
             try{
                 $result=$fluxController->accomplishToWMS($orderPackage);
                 if ($result['result'])
@@ -230,7 +229,11 @@ class PackageController
         /** @var OrderService $orderService */
         $orderService=app(OrderService::class);
         $order_create_params=$orderService->getParamByOrderHeader($orderHeader);
-        return Order::query()->create($order_create_params);
+        $order = Order::query()->where('code',$orderHeader->orderno)->first();
+        if($order)return $order;
+        $order = Order::query()->create($order_create_params);
+        app('LogService')->log(__METHOD__,__FUNCTION__,'GoodScan 创建Order',json_encode($order)." || ".$orderHeader);
+        return $order;
     }
 
     /**

+ 29 - 19
app/Http/Controllers/api/thirdPart/weight/PackageController.php

@@ -226,9 +226,14 @@ class PackageController extends Controller
                 $logisticNumberController = new LogisticNumberFeatureController();
                 if (!$package->order){
                     $package->order = new Order();
-                }
-                if (!$package->order->logistic){
-                    $package->order->logistic = $logisticNumberController->getLogisticByFeatures($package->logistic_number);
+                    $logistic=$logisticNumberController->getLogisticByFeatures($package->logistic_number);
+                    $package->order->logistic = $logistic;
+                }else{
+                    if(!$package->order->logistic){
+                        $logistic=$logisticNumberController->getLogisticByFeatures($package->logistic_number);
+                        $package->order->logistic_id = $logistic['id'];
+                        $package->order->save();
+                    }
                 }
             }catch (\Exception $e){
                 $response=["msg"=>"称重下发修改时发生错误!".json_encode($e),"code"=>500,"data"=>null];
@@ -260,17 +265,22 @@ class PackageController extends Controller
             $package->fetchAllFromOracle();
             $package->fetchPaperBox();
             try{
+                $package->save();
                 $package->load(['order'=>function($query){
                     $query->with('owner','logistic');
                 },'paperBox','measuringMachine']);
                 $logisticNumberController = new LogisticNumberFeatureController();
                 if (!$package->order){
                     $package->order = new Order();
+                    $logistic=$logisticNumberController->getLogisticByFeatures($package->logistic_number);
+                    $package->order->logistic = $logistic;
+                }else{
+                    if(!$package->order->logistic){
+                        $logistic=$logisticNumberController->getLogisticByFeatures($package->logistic_number);
+                        $package->order->logistic_id = $logistic['id'];
+                        $package->order->save();
+                    }
                 }
-                if (!$package->order->logistic){
-                    $package->order->logistic = $logisticNumberController->getLogisticByFeatures($package->logistic_number);
-                }
-                $package->save();
             }catch (\Exception $e){
                 $response=["msg"=>$e->getMessage(),"code"=>500,"data"=>$e->getTraceAsString()];
                 app('LogService')->log(__METHOD__,'weightApi(ERROR)'.__FUNCTION__,json_encode($request).'||'.json_encode($response).'||'.$e->getTraceAsString(),null);
@@ -287,18 +297,18 @@ class PackageController extends Controller
         }
         if(!empty($package->order))
             Waybill::setWeightByOrderCode($package->order->code,$package->weight);
-            event(new WeighedEvent($package));
-            $response=["msg"=>"保存成功",
-                "code"=>200,
-                "data"=>true,
-                "serverMsg"=>null,
-                "requestor"=>[
-                    "requestor"=>"1",
-                    "eventCode"=>"0",
-                    "reqDate"=>$reqDate,
-                    "resDate"=>Carbon::now()]
-            ];
-            app('LogService')->log(__METHOD__,__FUNCTION__,"下发写入包裹成功:".json_encode($request).'|'.json_encode($response),null);
+        event(new WeighedEvent($package));
+        $response=["msg"=>"保存成功",
+            "code"=>200,
+            "data"=>true,
+            "serverMsg"=>null,
+            "requestor"=>[
+                "requestor"=>"1",
+                "eventCode"=>"0",
+                "reqDate"=>$reqDate,
+                "resDate"=>Carbon::now()]
+        ];
+        app('LogService')->log(__METHOD__,__FUNCTION__,"下发写入包裹成功:".json_encode($request).'|'.json_encode($response),null);
         return json_encode($response,JSON_UNESCAPED_UNICODE);
     }
 

+ 60 - 0
app/Listeners/ResetProcessStatisticStartDateListener.php

@@ -0,0 +1,60 @@
+<?php
+
+namespace App\Listeners;
+
+use App\Events\ResetProcessStatisticStartDateEvent;
+use App\Process;
+use App\ProcessStatistic;
+use Carbon\Carbon;
+use Illuminate\Contracts\Queue\ShouldQueue;
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Queue\InteractsWithQueue;
+
+class ResetProcessStatisticStartDateListener
+{
+    /**
+     * Create the event listener.
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        //
+    }
+
+    /**
+     * Handle the event.
+     *
+     * @param  ResetProcessStatisticStartDateEvent  $event
+     * @return void
+     */
+    public function handle(ResetProcessStatisticStartDateEvent $event)
+    {
+        $process = $event->process;
+        $process->load(["processDailies"=>function($query){
+            /** @var Builder $query */
+            $query->orderBy("date")->withCount(["processDailyParticipants"]);
+        },"processStatistic"=>function($query){
+            /** @var Builder $query */
+            $query->select("process_id","started_at");
+        }]);
+
+        $dailies = $process->processDailies ?? false;
+        if ($dailies){
+            foreach ($dailies as $daily){
+                if ($daily->process_daily_participants_count > 0){
+                    $this->comparisonReplace($process->processStatistic,$daily->date." 09:00:00");
+                    return;
+                }
+            }
+        }
+        $this->comparisonReplace($process->processStatistic,null);
+    }
+
+    private function comparisonReplace($statistic, $date)
+    {
+        if ($statistic->started_at != $date){
+            ProcessStatistic::query()->where("process_id",$statistic->process_id)->update(["started_at"=>$date]);
+        }
+    }
+}

+ 0 - 1
app/OracleDOCOrderHeader.php

@@ -41,7 +41,6 @@ class OracleDOCOrderHeader extends Model
     public function actAllocationDetails(){
         return $this->hasMany('App\OracleActAllocationDetails','orderno','orderno');
     }
-
     public function getOracleBASCustomerDescrCAttribute(){
         return $this['oracleBASCustomer']['descr_c']??'';
     }

+ 6 - 2
app/Order.php

@@ -28,6 +28,10 @@ class Order extends Model
         'amount',
         'commodityPackages'
     ];
+    public function cancel(){
+        $this['status'] = '取消';
+        $this->update();
+    }
 
     public function logistic()
     {
@@ -128,7 +132,7 @@ class Order extends Model
         return parent::delete();
     }
 
-    public function isEquals(Order $order)
+    public function isEquals($order)
     {
         return
             $this['code'] == $order['code'] &&
@@ -148,7 +152,7 @@ class Order extends Model
             (string)$this['created_at'] == (string)$order['created_at'];
     }
 
-    public function assignValueByOrder(Order $order)
+    public function assignValueByOrder($order)
     {
         $this['code'] = $order['code'] ;
         $this['warehouse_id'] = $order['warehouse_id'] ;

+ 3 - 2
app/OrderIssue.php

@@ -218,11 +218,12 @@ class OrderIssue extends Model
         return parent::delete();
     }
 
+    // 同步退回单
     public function syncRejectedBill()
     {
-        if(!isset($this['second_logistic_number'])){
+        if(!isset($this['logistic_number_return'])){
             $order = $this->order;
-            $rejectedBill = RejectedBill::query()->where('logistic_number','like','原单退回'.'%')->where('order_number',$order->client_code)->first();
+            $rejectedBill = RejectedBill::query()->where('logistic_number','like','原单退回'.'%')->where('order_number',$order->client_code)->whereNotNull('order_number')->first();
             if($rejectedBill){
                 $this->update(['logistic_number_return'=>$rejectedBill->logistic_number_return,'is_new_rejecting'=>'有']);
             }

+ 3 - 3
app/OrderPackage.php

@@ -106,15 +106,15 @@ class OrderPackage extends Model
         $now = Carbon::now();
         foreach($resultOracleObjs_grouped as $resultOracleObj_grouped){
             $resultOracleObj = $resultOracleObj_grouped[0];
-            /** @var OrderService */
-            $order = app('OrderService')->logisticNumberFirstOrCreateOrder($resultOracleObj['soreference5']);
+            /** @var OrderService $orderService*/
+            $orderService = app('OrderService');
+            $order = $orderService->logisticNumberFirstOrCreateOrder($resultOracleObj['soreference5']);
             if (!$order){
                 app('LogService')->log(__METHOD__,"此包裹在WMS未找到order",json_encode($resultOracleObj),Auth::user()['id']);
                 continue;
             }
             array_push($packages,[
                 'batch_number'=>$batchCode??'',
-                /** @var OrderPackageService */
                 'order_id' => $order->id,
                 'logistic_number'=>$resultOracleObj['soreference5']??'',
                 'weight'=>$weight,

+ 4 - 0
app/Process.php

@@ -50,6 +50,10 @@ class Process extends Model
         return $this->hasMany('App\Sign','signable_id','id')
             ->where('signable_type','processes')->where('field','unit_price');
     }
+    public function processStatistic()
+    {
+        return $this->hasOne(ProcessStatistic::class,"process_id","id");
+    }
 
     public function automaticSupplementSign(){
         return $this->hasOne('App\Sign','signable_id','id')

+ 2 - 0
app/Providers/AppServiceProvider.php

@@ -32,6 +32,7 @@ use App\Services\OrderService;
 use App\Services\OrderIssueWorkLoadService;
 use App\Services\OrderPackageCommoditiesService;
 use App\Services\OrderTrackingService;
+use App\Services\OwnerReportService;
 use App\Services\OwnerService;
 use App\Services\PackageService;
 use App\Services\PackageStatisticsService;
@@ -125,6 +126,7 @@ class AppServiceProvider extends ServiceProvider
         app()->singleton('OrderIssueService',OrderIssueService::class);
         app()->singleton('OrderService',OrderService::class);
         app()->singleton('OracleDocOrderHeaderService',OracleDOCOrderHeaderService::class);
+        app()->singleton('OwnerReportService',OwnerReportService::class);
         app()->singleton('RejectedBillService',RejectedBillService::class);
         app()->singleton('RejectedBillItemService',RejectedBillItemService::class);
         app()->singleton('StoreCheckingReceiveService',StoreCheckingReceiveService::class);

+ 3 - 0
app/Providers/EventServiceProvider.php

@@ -27,6 +27,9 @@ class EventServiceProvider extends ServiceProvider
         'App\Events\CustomerStored' =>[
             'App\Listeners\FulfillPackageCustomer'
         ],
+        'App\Events\ResetProcessStatisticStartDateEvent' =>[
+            'App\Listeners\ResetProcessStatisticStartDateListener'
+        ],
     ];
 
     /**

+ 1 - 1
app/RejectedBill.php

@@ -93,7 +93,7 @@ class RejectedBill extends Model
     }
     function save(array $options = [])
     {
-        (new LogisticNumberFeatureController())->createFeatures($this['logistic_number_return'],$this['id_logistic_return']);
+        if($this['logistic_number_return'])(new LogisticNumberFeatureController())->createFeatures($this['logistic_number_return'],$this['id_logistic_return']);
         return parent::save($options);
     }
 

+ 29 - 0
app/Services/CommodityBarcodeService.php

@@ -3,6 +3,7 @@
 namespace App\Services;
 
 use App\CommodityBarcode;
+use Illuminate\Support\Collection;
 
 Class CommodityBarcodeService
 {
@@ -44,4 +45,32 @@ Class CommodityBarcodeService
     {
         return CommodityBarcode::query()->create($params);
     }
+
+    /**
+     * @param array $commoditiesAndBarcodesPacks 格式:[['commodity_id'=>id, barcodes=[str,str,str]], [......]]
+     * @return bool
+     */
+    public function insertMany_onCommodities(array $commoditiesAndBarcodesPacks)
+    {
+        $commodityBarcodes=[];
+        foreach ($commoditiesAndBarcodesPacks as $commoditiesAndBarcodesPack){
+            $commodity_id=$commoditiesAndBarcodesPack['commodity_id'];
+            $barcodes=$commoditiesAndBarcodesPack['barcodes'];
+            foreach ($barcodes as $barcode){
+                $commodityBarcodes[]=[
+                    'commodity_id'=>$commodity_id,
+                    'code'=>$barcode,
+                ];
+            }
+        }
+        if(empty($commodityBarcodes))return false;
+        return CommodityBarcode::query()->insert($commodityBarcodes);
+    }
+    public function destroyCollections(Collection $commodityBarcodes)
+    {
+        $ids=$commodityBarcodes->map(function($commodityBarcode){
+            return $commodityBarcode['id'];
+        });
+        return CommodityBarcode::destroy($ids);
+    }
 }

+ 54 - 2
app/Services/CommodityService.php

@@ -3,15 +3,17 @@
 namespace App\Services;
 
 use App\Commodity;
+use App\CommodityBarcode;
 use App\OracleBasSKU;
 use App\Owner;
 use App\Services\common\BatchUpdateService;
 use Carbon\Carbon;
 use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Database\Eloquent\Collection;
 
 Class CommodityService
 {
-    public function firstOrCreate($param,$column = null){
+    public function firstOrCreate($param,$column = null):Commodity{
         if ($column) return Commodity::query()->firstOrCreate($param,$column);
         return Commodity::query()->firstOrCreate($param);
     }
@@ -120,7 +122,7 @@ Class CommodityService
         if(!$orderHeaders) return null;
         $customerId_sku_map = [];
         foreach ($orderHeaders as $orderHeader) {
-            $oracleDOCOrderDetails=  $orderHeader->oracleDOCOrderDetails;
+            $oracleDOCOrderDetails = $orderHeader->oracleDOCOrderDetails;
             foreach ($oracleDOCOrderDetails as $oracleDOCOrderDetail) {
                 $value = [
                     'owner_code' => $oracleDOCOrderDetail->customerid,
@@ -214,4 +216,54 @@ Class CommodityService
         $params["type"] = "临时";
         return Commodity::query()->create($params);
     }
+
+
+
+    public function syncBarcodes($barcodesStr,$ownerId,$sku):Commodity
+    {
+        $barcodes=(function()use($barcodesStr){
+            $barcodes=rtrim($barcodesStr,',');
+            $barcodes=explode(',',$barcodes);
+            foreach ($barcodes as $k=>$barcode){
+                if(!trim($barcode)) unset($barcodes[$k]);
+            }
+            return $barcodes;
+        })();
+        $commodity=$this->firstOrCreate(['owner_id'=>$ownerId,'sku'=>$sku]);
+        $commodityBarcodes=$commodity['barcodes']??new Collection();
+
+
+        /** @var CommodityBarcodeService $commodityBarcodeService */
+        $commodityBarcodeService=app('CommodityBarcodeService');
+        $redundantCommodityBarcodes=new Collection();
+        foreach($commodityBarcodes as $commodityBarcode){//清除数组中 已经在商品有的条码,清除商品条码中,不在数组中的条码
+            $hasMatch=false;
+            foreach($barcodes as $key=>$barcode){
+                if($barcodes[$key]==$commodityBarcode['code']){
+                    $hasMatch=true;
+                    unset($barcodes[$key]);
+                    break;
+                }
+            }
+            if(!$hasMatch){
+                $redundantCommodityBarcodes->push($commodityBarcode);
+            }
+        }
+        if(!empty($redundantCommodityBarcodes)){
+            $commodityBarcodeService->destroyCollections($redundantCommodityBarcodes);
+        }
+        if(!empty($barcodes)){
+            $commodityBarcodeService->insertMany_onCommodities([['commodity_id'=>$commodity['id'],'barcodes'=>$barcodes]]);
+        }
+        return $commodity;
+    }
+    public function destroyWithOffspring(Commodity $commodity)
+    {
+        $barcodesIds=$commodity->barcodes->map(function ($barcode){
+            return $barcode['id'];
+        });
+        CommodityBarcode::destroy($barcodesIds);
+        $commodity->delete();
+    }
+
 }

+ 10 - 16
app/Services/LogService.php

@@ -18,29 +18,23 @@ class LogService
             $user = auth()->user();
             if ($user) $id_user = $user['id'];
         }
+        $log=new Log([
+            'operation' => $method,
+            'type' => $type,
+            'description' => $description,
+            'id_user' => $id_user,
+            'ip' => request()->ip(),
+        ]);
         try {
             Redis::LLEN('LOGS');
         } catch (Exception $e) {
             //redis出现异常直接保存到数据库中
-            (new Log([
-                'operation' => $method,
-                'type' => $type,
-                'description' => $description,
-                'id_user' => $id_user,
-                'ip' => Request::ip(),
-            ]))->save();
+            $log->save();
             return;
         }
         $date = date('Y-m-d H:i:s');
-        $log = new Log([
-            'operation' => $method,
-            'type' => $type,
-            'description' => $description,
-            'id_user' => $id_user,
-            'ip' => Request::ip(),
-            'created_at' => $date,
-            'updated_at' => $date
-        ]);
+        $log['created_at']=$date;
+        $log['updated_at']=$date;
         Redis::LPUSH('LOGS', $log);
     }
 

+ 1 - 0
app/Services/OracleActAllocationDetailService.php

@@ -40,6 +40,7 @@ Class OracleActAllocationDetailService
         if (($params['page'] ?? false) && ($params['paginate'] ?? false))$allocations = $this->paginate($params);
         else $allocations = $this->get($params);
         $count = count($allocations);
+        if (!$count)return null;
         $str = "(";
         foreach ($allocations as $index => $allocation){
             if ($index < $count-1){

+ 4 - 3
app/Services/OracleDOCOrderHeaderService.php

@@ -19,7 +19,8 @@ Class OracleDOCOrderHeaderService
         'DOC_Order_Header.EditTime','DOC_Order_Header.Notes','DOC_Order_Header.CarrierID',
         'DOC_Order_Header.CarrierName', 'DOC_Order_Header.LastShipmentTime','DOC_Order_Header.EDISendFlag',
         'DOC_Order_Header.SOReference5', 'DOC_Order_Header.C_Tel2','DOC_Order_Header.Transportation',
-        'DOC_Order_Header.WareHouseId','DOC_Order_Header.SOStatus','DOC_Order_Header.C_Tel1'
+        'DOC_Order_Header.WareHouseId','DOC_Order_Header.SOStatus','DOC_Order_Header.C_Tel1','DOC_Order_Header.C_District',
+        'DOC_Order_Header.IssuePartyName'
     ];
 
     function first(array $params){
@@ -72,11 +73,11 @@ Class OracleDOCOrderHeaderService
             },'oracleDOCOrderDetails'=>function($query){
                 $query->selectRaw('doc_order_details.orderNo,doc_order_details.customerid,doc_order_details.sku,doc_order_details.QtyOrdered');
             }, 'actAllocationDetails'=>function($query){
-                $query->selectRaw('ACT_Allocation_Details.AllocationDetailsID,ACT_Allocation_Details.OrderNo,ACT_Allocation_Details.Qty_Each,ACT_Allocation_Details.PickToTraceID,ACT_Allocation_Details.CustomerID');
+                $query->selectRaw('ACT_Allocation_Details.AllocationDetailsID,ACT_Allocation_Details.OrderNo,ACT_Allocation_Details.Qty_Each,ACT_Allocation_Details.PickToTraceID,ACT_Allocation_Details.CustomerID,ACT_Allocation_Details.Sku');
             },'oracleBASCode'=>function($query){
                 $query->selectRaw('BAS_Codes.CodeID,BAS_Codes.CodeName_C,BAS_Codes.Code');
             }])
-            ->where('addTime','>=',$startDate)
+            ->where('DOC_Order_Header.addTime','>=',$startDate)
             ->get();
     }
 }

+ 22 - 10
app/Services/OrderIssueService.php

@@ -296,17 +296,27 @@ class OrderIssueService
     public function createOrderIssueByWmsOrder($orderHeaders, $order_issue_type_id, $result_explain, $imported_status = '正常', $custom_code = null)
     {
         /** @var OrderService $orderService */
-        $orderService = app(OrderService::class);
-        $orders = $orderService->createByWmsOrder($orderHeaders);
+        $orderService = app('OrderService');
+//        $orderService->updateByWmsOrders($orderHeaders);
+//        $orders = $orderService->getByWmsOrders($orderHeaders);
+        $orderService->createByWmsOrder($orderHeaders);
+        $orders = Order::query()->whereIn('code',data_get($orderHeaders,'*.orderno'))->whereHas('packages')->get();
+
         $innerParams = [];
-        foreach ($orders as $order) {
-            $innerParams[] = [
-                'order_id' => $order->id,
-                'order_issue_type_id' => $order_issue_type_id,
-                'result_explain' => $result_explain,
-                'imported_status' => $imported_status,
-                'custom_code' => $custom_code
-            ];
+        if($orders->count()>0){
+            foreach ($orderHeaders as $orderHeader) {
+                $order = $orders->where('code',$orderHeader->orderno)->first();
+                if($order==null){
+                    $order = Order::query()->where('code',$orderHeader->orderno)->first();
+                }
+                $innerParams[] = [
+                    'order_id' => $order->id,
+                    'order_issue_type_id' => $order_issue_type_id,
+                    'result_explain' => $result_explain,
+                    'imported_status' => $imported_status,
+                    'custom_code' => $custom_code
+                ];
+            }
         }
         try {
             $this->insert($innerParams);
@@ -417,6 +427,7 @@ class OrderIssueService
             $order = Order::query()->create($arr);
             $orderIssue->order_id = $order['id'];
             $orderIssue->save();
+            app('LogService')->log(__METHOD__,__FUNCTION__,'创建 Order'.json_encode($order));
         }
         $orderIssue->同步退单状态();
         return $orderIssue;
@@ -425,6 +436,7 @@ class OrderIssueService
     public function createByLogisticNumber(array $arr)
     {
         $order = Order::query()->create($arr);
+        app('LogService')->log(__METHOD__,__FUNCTION__,'创建 Order'.json_encode($order));
         $orderIssue = OrderIssue::query()->create($arr);
         $orderIssue['order_id'] = $order['id'];
         OrderPackage::query()->create(['order_id' => $order['id'], 'logistic_number' => $arr['logistic_number_return']]);

+ 103 - 73
app/Services/OrderPackageCommoditiesService.php

@@ -27,7 +27,7 @@ class OrderPackageCommoditiesService
     public function batchUpdate($params){
         return app(BatchUpdateService::class)->batchUpdate('order_package_commodities',$params);
     }
-
+    //-------------------------
     public function basedOnOracleDetailsStore($orderNo, $orderPackage)
     {
         $details = OracleDOCOrderDetail::query()->where('orderNo', $orderNo)->get();
@@ -426,7 +426,6 @@ class OrderPackageCommoditiesService
         return $order_no_map;
     }
 
-
     public function 删选可以保留的OrderPackageCommodities(&$OPCCollect,&$params)
     {
         $retain = collect();
@@ -488,7 +487,6 @@ class OrderPackageCommoditiesService
         return $innerParam;
     }
 
-
     public function 删选需要修改的OrderPackageCommodities(&$OPCCollect,&$params)
     {
         $update = collect();
@@ -591,79 +589,92 @@ class OrderPackageCommoditiesService
         return $commodity_map;
     }
 
+    // TODO
     public function deleteUnnecessaryOrderCommodities($ids)
     {
         if(!$ids)return;
+        if(count($ids)==0)return;
         OrderPackageCommodities::query()->whereHas('package',function($query)use($ids){
             $query->whereIn('id',$ids);
         })->delete();
+        app('LogService')->log(__METHOD__,__FUNCTION__,'删除 OrderPackageCommodities'.json_encode($ids));
     }
     // TODO
-    public function createOrderCommodity($orderHeaders)
-    {
+    public function syncOrderPackageCommodities(&$orderHeaders)
+    {
+        /**
+         * @var DataHandlerService $dataHandService
+         * @var CommodityService $commodityService
+         * @var OrderPackageService $orderPackageService
+         */
+        $dataHandService = app('DataHandlerService');
+        $commodityService = app('CommodityService');
+        $orderPackageService  = app( 'OrderPackageService');
         if(!$orderHeaders)return ;
-        $order_nos = data_get($orderHeaders,'*.orderno');
-        $orderCommodities = OrderPackageCommodities::query()
-            ->with(['package.order','commodity'])
-            ->whereHas('package.order',function($query)use($order_nos){
-            $query->whereIn('code',$order_nos);
-        })->get();
 
+        $commodityService->getByWmsOrders($orderHeaders);   // 预先处理     3s
+        $orderPackages = $orderPackageService->getByWmsOrders($orderHeaders);
+        $orderCommodities = $this->getByWmsOrder($orderHeaders);
+
+        $package_map = $dataHandService->dataHeader(['logistic_number'],$orderPackages);
         $orderCommodities = $this->regroupOrderCommodities($orderCommodities);
+
         $orderAllocationDetails = $this->regroupWmsOrderAllocationDetails($orderHeaders);
-        $this->filterExistParams($orderAllocationDetails,$orderCommodities);
-        $inner_params = $this->filterInnerParams($orderAllocationDetails,$orderCommodities);
-        $update_params =$this->filterUpdateParams($orderAllocationDetails,$orderCommodities);
-        $delete_params = $this->filterDeleteParams($orderAllocationDetails,$orderCommodities);
-        if($inner_params){
-            $package = [];
-            foreach ($orderCommodities as $orderCommodity) {
-                $order_package = $orderCommodity->package;
-                if(!isset($package[$order_package->logistic_number]))
-                    $package[$order_package->logistic_number] = $order_package;
-            }
-            $this->createOrderCommodities($inner_params,$package);
-        }
-        if(!$update_params)
-            $this->updateOrderCommodities($update_params);
+        $del_orderCommodities  =[];
+
+        $update_params =$this->filterUpdateParams($orderAllocationDetails,$orderCommodities,$del_orderCommodities);                  // 修改
+        $inner_params = $this->filterInnerParams($orderAllocationDetails,$orderCommodities);                              // 创建
+        $delete_params = $this->filterDeleteParams($orderAllocationDetails,$orderCommodities);                                           // 删除
 
-        if(!$delete_params)
-            $this->deleteOrderCommodities($delete_params);
+        if(count($inner_params)>0)
+            $this->createOrderCommodities($inner_params,$package_map);  // 创建 3s
+
+        if(count($update_params)>0)
+            $this->updateOrderCommodities($update_params);              // 更新
+
+        if(count($delete_params)>0)
+            $this->deleteOrderCommodities($delete_params);              // 删除
+
+        if(count($del_orderCommodities)>0)
+            $this->deleteOrderCommodities($del_orderCommodities);       // 删除
     }
-    // TODO
-    public function regroupOrderCommodities($orderCommodities)
+    // TODO 重组已有的OrderCommodities
+    public function regroupOrderCommodities(&$orderCommodities)
     {
         $params = [];
         $orderCommodities->each(function($orderCommodity)use(&$params){
-            $order_no = $orderCommodity->pacakge->order->code ?? '';
-            dd($orderCommodity->pacakge->order ?? '');
+            $order_no = $orderCommodity->package->order->code ?? '';
             $logistic_number = $orderCommodity->package->logistic_number ?? '';
             $sku = $orderCommodity->commodity->sku ?? '';
             $key = ' orderno='.$order_no.' logsitic_number='.$logistic_number.' sku='.$sku.' ';
-            $params[$key] = [
+            $params[$key][] = [
                 'id' =>$orderCommodity->id,
                 'orderno'=>$order_no,
                 'logistic_number'=>$logistic_number,
                 'sku' => $sku,
-                'amount' => $orderCommodity->amount
+                'amount' => $orderCommodity->amount,
+                'order_package_id'=>$orderCommodity->package->id ?? '',
+                'commodity_id'=>$orderCommodity->commodity->id ?? '',
             ];
         });
         return $params;
     }
-    // TODO
-    public function regroupWmsOrderAllocationDetails($orderHeaders)
+    // TODO 重组OrderAllocationDetails
+    public function regroupWmsOrderAllocationDetails(&$orderHeaders)
     {
+        /**
+         * @var OracleDOCOrderHeader $orderHeader
+         */
         $params =[];
         foreach ($orderHeaders as $orderHeader) {
             $order_no = $orderHeader->orderno;
             $actAllocationDetails = $orderHeader->actAllocationDetails ?? [];
-            foreach ($actAllocationDetails as $item) {
-                if($item)continue;
+            $actAllocationDetails->each(function($item)use(&$params,$order_no){
                 $logistic_number = $item->picktotraceid;
                 $sku = $item->sku;
                 $key = ' orderno='.$order_no.' logsitic_number='.$logistic_number.' sku='.$sku.' ';
                 if(isset($params[$key])){
-                    $params[$key]->amount += $item->qty_each;
+                    $params[$key]['amount']+= $item->qty_each;
                 }else{
                     $params[$key] = [
                         'orderno'=>$item->orderno,
@@ -673,62 +684,76 @@ class OrderPackageCommoditiesService
                         'owner_code' => $item->customerid
                     ];
                 }
-            }
+            });
         }
         return $params;
     }
-    // TODO
-    public function filterExistParams(&$orderAllocationDetails,&$orderCommodities)
+    // TODO 过滤已有的
+    public function filterUpdateParams(&$orderAllocationDetails,&$orderCommodities,&$del_orderCommodities)
     {
+        $update_params = [];
         foreach ($orderCommodities as $key=>$orderCommodity) {
             if(isset($orderAllocationDetails[$key])){
-                unset($orderCommodity,$orderAllocationDetails[$key]);
+                if(count($orderCommodity) == 1  && $orderAllocationDetails[$key]['amount'] != $orderCommodity[0]['amount']){
+                    $update_params[$key] = $orderCommodity[0];
+                    $update_params['amount'] = $orderAllocationDetails[$key]['amount'];
+                }elseif(count($orderCommodity)>1){
+                    $update_params[$key] = array_shift($orderCommodity);
+                    $update_params[$key]['amount'] = $orderAllocationDetails[$key]['amount'];
+                    collect($orderCommodity)->each(function($item)use(&$del_orderCommodities){
+                        $del_orderCommodities[] = $item;
+                    });
+                }
+                unset($orderCommodities[$key],$orderAllocationDetails[$key]);
             }
         }
+        return $update_params;
     }
-    // TODO
+    // TODO 创建
     public function filterInnerParams(&$orderAllocationDetails,&$orderCommodities)
     {
         $inner_params = [];
         foreach ($orderAllocationDetails as $key=>$orderAllocationDetail) {
-            if($orderCommodities[$key]){
+            if(!($orderCommodities[$key] ?? false)){
                 $inner_params[] = $orderAllocationDetail;
                 unset($orderCommodities[$key],$orderAllocationDetail);
             }
         }
         return $inner_params;
     }
-    // TODO
-    public function filterUpdateParams(&$orderAllocationDetails,&$orderCommodities)
-    {
-        $update_params = [];
-        foreach ($orderCommodities as $key => $orderCommodity) {
-            if(isset($orderAllocationDetails[$key])){
-                if($orderCommodity->amount != $orderAllocationDetails[$key]->amount){
-                    $update_params[$key] = $orderCommodity[$key]->amount = $orderAllocationDetails[$key]->amount;
-                    unset($orderCommodity,$orderAllocationDetails[$key]);
-                }
-            }
-        }
-        return $update_params;
-    }
+    // TODO 更新
+//    public function filterUpdateParams(&$orderAllocationDetails,&$orderCommodities)
+//    {
+//        $update_params = [];
+//        foreach ($orderCommodities as $key => $orderCommodity) {
+//            if(isset($orderAllocationDetails[$key])){
+//                if($orderCommodity->amount != $orderAllocationDetails[$key]->amount){
+//                    $update_params[$key] = $orderCommodity[$key]->amount = $orderAllocationDetails[$key]->amount;
+//                    unset($orderCommodity,$orderAllocationDetails[$key]);
+//                }
+//            }
+//        }
+//        return $update_params;
+//    }
     // TODO
     public function filterDeleteParams(&$orderAllocationDetails,&$orderCommodities)
     {
         $del_params = [];
         foreach ($orderCommodities as $key => $orderCommodity) {
             if(!isset($orderAllocationDetails[$key])){
-                $del_params[] = $orderCommodity;
+                collect($orderCommodity)->each(function ($item)use(&$del_params){
+                    $del_params[] = $item;
+                });
+                unset($orderCommodities[$key]);
             }
         }
         return $del_params;
     }
-    // TODO
-    public function createOrderCommodities($inner_params,$packages)
+    // TODO  根据数据创建
+    public function createOrderCommodities($inner_params,$package_map)
     {
         /** @var DataHandlerService $dataHandlerService */
         $dataHandlerService  = app('DataHandlerService');
-        $package_map = $dataHandlerService->dataHeader(['logistic_number'],$packages);
         $sku = [];$owners = [];
         foreach ($inner_params as $inner_param) {
             $sku_code = $inner_param['sku'];$owner_code = $inner_param['owner_code'];
@@ -748,7 +773,8 @@ class OrderPackageCommoditiesService
         $create_params =[];
         $date = Carbon::now();
         foreach ($inner_params as $inner_param) {
-            $package = $dataHandlerService->getKeyValue(['logistic_number'=>$inner_param],$package_map);
+            if($inner_param['logistic_number'] === '*' || $inner_param['logistic_number'] === ' ')continue;
+            $package = $dataHandlerService->getKeyValue(['logistic_number'=>$inner_param['logistic_number']],$package_map);
             $commodity = $commodity_map[' owner='.$inner_param['owner_code'].' sku='.$inner_param['sku']] ?? null;
             $create_params[] = [
                 'order_package_id'=>$package->id,
@@ -760,7 +786,7 @@ class OrderPackageCommoditiesService
         }
         if(count($create_params)>0){
             try {
-                $bool = OrderPackageCommodities::query()->insert($create_params);
+                $bool = $this->insert($create_params);
                 LogService::log(__METHOD__,__FUNCTION__,'批量添加 orderCommodity --'. $bool ." || ".count($create_params).' || '.json_encode($create_params));
             } catch (\Exception $e) {
                 LogService::log(__METHOD__,__FUNCTION__.'error','批量添加 orderCommodity error'." || ".count($create_params).' || '.json_encode($create_params));
@@ -775,22 +801,26 @@ class OrderPackageCommoditiesService
         $update_params = [['id','order_package_id','commodity_id','amount','updated_at']];
         foreach ($orderCommodities as $orderCommodity) {
             $update_params[] = [
-                'id' => $orderCommodity->id,
-                'order_package_id'=>$orderCommodity->order_package_id,
-                'commodity_id'=>$orderCommodity->commodity_id,
-                'amount' => $orderCommodity->amount,
+                'id' => $orderCommodity['id'] ?? '',
+                'order_package_id'=>$orderCommodity['order_package_id'] ?? '',
+                'commodity_id'=>$orderCommodity['commodity_id'] ?? '',
+                'amount' => $orderCommodity['amount'],
                 'updated_at' => $updated_at
             ];
         }
-        if(count($update_params)>0)
+        if(count($update_params)>1)
             $this->batchUpdate($update_params);
     }
-    // TODO
+    // TODO 删除
     public function deleteOrderCommodities($orderCommodities){
         if(!$orderCommodities)return;
+        if(count($orderCommodities)==0)return;
         try {
-            $bool = OrderPackageCommodities::query()->whereIn('id', data_get($orderCommodities, '*.id'))->delete();
-            LogService::log(__METHOD__, __FUNCTION__, '批量删除 OrderCommodity -- ' . $bool . '||' . $orderCommodities->count() . ' || ' . json_encode($orderCommodities->toArray()));
+            $ids = data_get($orderCommodities, '*.id');
+            if(count($ids) >0){
+                $bool = OrderPackageCommodities::query()->whereIn('id', data_get($orderCommodities, '*.id'))->delete();
+                LogService::log(__METHOD__, __FUNCTION__, '批量删除 OrderCommodity -- ' . $bool . '||' .count($orderCommodities)  . ' || ' . json_encode($orderCommodities));
+            }
         } catch (\Exception $e) {
             LogService::log(__METHOD__, __FUNCTION__.' error', '批量删除 OrderCommodity Error-- ' . $e->getMessage() . '||' . $e->getTraceAsString() );
         }

+ 72 - 16
app/Services/OrderPackageService.php

@@ -13,6 +13,8 @@ use App\Services\common\BatchUpdateService;
 use App\Services\common\DataHandlerService;
 use Carbon\Carbon;
 use Illuminate\Support\Collection;
+use Illuminate\Support\Facades\Auth;
+use Illuminate\Support\Facades\DB;
 
 class OrderPackageService
 {
@@ -229,7 +231,7 @@ class OrderPackageService
         $created_at = Carbon::now()->format('Y-m-d H:i:s');
         $updated_at = Carbon::now()->format('Y-m-d H:i:s');
         foreach ($logistic_numbers as $logistic_number) {
-            if($logistic_number == $orderHeader->orderno)continue;
+//            if($logistic_number == $orderHeader->orderno)continue;
             $key  = ['order_id'=>$order->id,'logistic_number'=>$logistic_number];
             $orderPackage = $dataHandlerService->getKeyValue($key,$order_packages_logistic_number_map);
             if(isset($orderPackage)){ continue;}
@@ -382,18 +384,19 @@ class OrderPackageService
         $orderPackage = OrderPackage::query()->create(['order_id'=>$order->id,'logistic_number'=>$logisticNumber]);
         return  compact('orderPackage','order');
     }
+
     // TODO
-    public function createPackageInfo($orderHeaders)
+    public function syncOrderPackage(&$orderHeaders)
     {
         /**
          * @var OrderPackageCommoditiesService $OrderPackageCommoditiesService
          */
         $OrderPackageCommoditiesService = app('OrderPackageCommoditiesService');
-        $this->createPackageByOrderHeader($orderHeaders);
-        $OrderPackageCommoditiesService->createOrderCommodity($orderHeaders);
+        $this->syncPackageByOrderHeaders($orderHeaders);
+        $OrderPackageCommoditiesService->syncOrderPackageCommodities($orderHeaders);
     }
     // TODO
-    public function createPackageByOrderHeader($orderHeaders)
+    public function syncPackageByOrderHeaders(&$orderHeaders)
     {
         /**
          * @var OrderService $orderService
@@ -405,12 +408,12 @@ class OrderPackageService
         $orderTrackingService = app('OrderTrackingService');
         if(!$orderHeaders)return;
         $orders = $orderService->getByWmsOrders($orderHeaders);
-        $packages = $this->getByOrderNos(data_get($orderHeaders,'*.orderno'));
-
+        $packages = $this->getByOrderNos(data_get($orderHeaders,'*.orderno'));          // 已有
         $this->createOrderPackage($orderHeaders,$orders,$packages);                     // 创建package
-        $del_ids = $this->deleteUnnecessaryPackage($orderHeaders,$packages);            // 删除package
 
-        $orderPackageCommodityService->deleteUnnecessaryOrderCommodities($del_ids);     // orderCommodity
+        $del_ids = $this->deleteUnnecessaryPackage($orderHeaders,$packages);     // 删除package
+        $orderPackageCommodityService->deleteUnnecessaryOrderCommodities($del_ids);     // 删除 orderCommodity
+
         $orderTracking = OrderTracking::query()->whereHas('commodities.package',function($query)use($del_ids){
             $query->whereIn('id',$del_ids);
         })->get();
@@ -436,8 +439,12 @@ class OrderPackageService
         }
 
         if(count($inner_params)>0){
-            $this->insert($inner_params);
-            LogService::log(__METHOD__,__FUNCTION__,'批量添加 OrderPackage '.count($inner_params).' || '.json_encode($inner_params));
+            try {
+                $bool = $this->insert($inner_params);
+                $bool ? LogService::log(__METHOD__, __FUNCTION__, '批量添加 OrderPackage ' . count($inner_params) . ' || ' . json_encode($inner_params)) : null;
+            } catch (\Exception $e) {
+                LogService::log(__METHOD__, __FUNCTION__, '批量添加 OrderPackage error ' . count($inner_params) . ' || ' .json_encode($e->getMessage()). json_encode($inner_params).json_encode($e->getTraceAsString()));
+            }
         }
     }
     // TODO
@@ -458,6 +465,7 @@ class OrderPackageService
                 'logistic_number' => $logistic_number,
                 'created_at' => $date,
                 'updated_at' => $date,
+                'status' =>'无'
             ];
         }
         return $inner_params;
@@ -469,7 +477,7 @@ class OrderPackageService
          * @var DataHandlerService $dataHandlerService
          */
         $dataHandlerService = app(DataHandlerService::class);
-        $logistic_numbers = data_get($orderHeaders,'*.actAllocationDetails.picktotraceid');     // 获取picktotraceid (运单的快递单号)
+        $logistic_numbers = data_get($orderHeaders,'*.actAllocationDetails.*.picktotraceid');     // 获取picktotraceid (运单的快递单号)
         $logistic_numbers = array_unique($logistic_numbers);
         $logistic_numbers = array_diff($logistic_numbers,['',' ','*']);
 
@@ -479,15 +487,63 @@ class OrderPackageService
         $diff_number = array_diff($exits_number,$logistic_numbers);
         foreach ($diff_number as $number) {
             $package = $dataHandlerService->getKeyValue(['logistic_number'=>$number],$packages_maps);
-            if($package)$packages->push($package->id);
+            if($package ?? false)$packages->push($package->id);
         }
-        if(!$packages)return $packages;
+        if($packages->isEmpty())return $packages;
         try {
-            return OrderPackage::query()->whereIn('id', $packages)->delete() ? $packages : collect();
+            $bool = OrderPackage::query()->whereIn('id', $packages)->delete();
+            $bool ? LogService::log(__METHOD__,__FUNCTION__,'删除多余包裹 ids:'.json_encode($packages)) : null;
+            return $bool ? $packages : collect();
         } catch (\Exception $e) {
             LogService::log(__METHOD__,__FUNCTION__,'删除多余包裹 ids:'.json_encode($packages).$e->getMessage());
             return collect();
         }
     }
-
+    // TODO
+    public function createPackagesFromBatchCode($batchCode,$weight)
+    {
+        /**
+         * @var OrderService $orderService
+         */
+        $now = Carbon::now();
+        $orderService = app('OrderService');
+        $orderHeaders = OracleDOCOrderHeader::query()->selectRaw(implode(',',OracleDOCOrderHeaderService::$columns))
+            ->with(['oracleBASCustomer'=>function($query){
+                $query->selectRaw('BAS_CUSTOMER.CustomerID,BAS_CUSTOMER.Customer_Type,BAS_CUSTOMER.Descr_C,BAS_CUSTOMER.Active_Flag');
+            },'oracleDOCOrderDetails'=>function($query){
+                $query->selectRaw('doc_order_details.orderNo,doc_order_details.CustomerId,doc_order_details.sku,doc_order_details.QtyOrdered');
+            }, 'actAllocationDetails'=>function($query){
+                $query->selectRaw('ACT_Allocation_Details.AllocationDetailsID,ACT_Allocation_Details.OrderNo,ACT_Allocation_Details.Qty_Each,ACT_Allocation_Details.PickToTraceID,ACT_Allocation_Details.CustomerID,ACT_Allocation_Details.Sku');
+            },'oracleBASCode'=>function($query){
+                $query->selectRaw('BAS_Codes.CodeID,BAS_Codes.CodeName_C,BAS_Codes.Code');
+            }])
+            ->where('Doc_Order_Header.WaveNo',$batchCode)
+            ->get();
+        $orderService->syncOrder($orderHeaders);
+        $orders = Order::query()->with('packages')->whereIn('code',data_get($orderHeaders,'*.orderno'))->get();
+        $update_params = [[
+            'id','weight','weighed_at','status','batch_number'
+        ]];
+        foreach ($orderHeaders as $orderHeader) {
+            $order = $orders->where('code',$orderHeader->orderno)->first();
+            if(!$order){
+                app('LogService')->log(__METHOD__,"此包裹在WMS未找到order",json_encode($orderHeader),Auth::user()['id']);
+                continue;
+            }
+            $order->packages->each(function($package)use(&$update_params,$weight,$batchCode,$now){
+                $update_params[] = [
+                    'id' => $package->id,
+                    'weight' =>$weight,
+                    'weighed_at'=>$now,
+                    'status' =>"已上传",
+                    'batch_number' => $batchCode
+                ];
+            });
+        }
+        if(count($update_params)==1)return;
+        DB::transaction(function ()use($update_params){
+                $this->batchUpdate($update_params);
+        });
+        app('LogService')->log(__METHOD__,"批量录入包裹成功",json_encode($update_params),Auth::user()['id']);
+    }
 }

+ 222 - 79
app/Services/OrderService.php

@@ -25,8 +25,17 @@ class OrderService
         return app(BatchUpdateService::class)->batchUpdate('orders',$params);
     }
 
-    public function insert($params){
-        return Order::query()->insert($params);
+    public function insert(array $params){
+        if(!$params)return true;
+        if(count($params)==0) return true;
+        try {
+            $bool= Order::query()->insert($params);
+            app('LogService')->log(__METHOD__, __FUNCTION__, '批量创建 Order' . json_encode($params));
+            return $bool;
+        } catch (\Exception $e) {
+            app('LogService')->log(__METHOD__, __FUNCTION__, '批量创建 Order error' . json_encode($params).json_encode($e->getMessage()).json_encode($e->getTraceAsString()));
+            return false;
+        }
     }
 
     private function preciseQuery(array $params,$sql){
@@ -194,7 +203,7 @@ class OrderService
             $ordernos = app('OracleActAllocationDetailService')
                 ->getOrderno(['checktime_start'=>$checktime_start,'checktime_end'=>$checktime_end,
                     'paginate'=>$paginate,'page'=>$page]);
-            $params['ordernos'] = $ordernos;
+            if ($ordernos)$params['ordernos'] = $ordernos;
         }
         $sql="select ACT_ALLOCATION_DETAILS.CHECKTIME,DOC_ORDER_HEADER.addtime,DOC_ORDER_HEADER.C_PROVINCE,DOC_ORDER_HEADER.C_CITY,DOC_ORDER_HEADER.C_DISTRICT,DOC_ORDER_HEADER.C_CONTACT,DOC_ORDER_HEADER.OrderNo,DOC_ORDER_HEADER.SOStatus,DOC_ORDER_HEADER.WAREHOUSEID,DOC_ORDER_HEADER.CustomerID
         ,DOC_ORDER_HEADER.C_Tel2,DOC_ORDER_HEADER.C_Tel1,DOC_ORDER_HEADER.CarrierName,DOC_ORDER_HEADER.IssuePartyName,DOC_ORDER_HEADER.EDIREMARKS2,
@@ -376,6 +385,7 @@ class OrderService
                 'client_code' => $orderHeadAttr['soreference1'],
             ];
             $order = Order::query()->create($arr);
+            app('LogService')->log(__METHOD__,__FUNCTION__,'创建 Order '.json_encode($order));
             unset($arr,$orderHeadAttr,$owner);
         }else{
             $this->updateOrderByOrderHeader($order,$orderHeader);
@@ -459,7 +469,8 @@ class OrderService
             ['code' => $orderHeader->userdefine1, 'name' => $orderHeader->carriername]);
         $wareHouse = Warehouse::query()->firstOrCreate(['code'=>$orderHeader->warehouseid],
             ['name'=>$orderHeader->warehouseid,'code'=>$orderHeader->warehouseid]);
-        return Order::query()->create([
+
+         $order =  Order::query()->create([
             'warehouse_id'=> $wareHouse->id ?? '',
             'code' => $orderHeader->orderno,
             'owner_id' => $owner ? $owner->id : null,
@@ -475,6 +486,8 @@ class OrderService
             'address' => $orderHeader->c_address1,
             'client_code' => $orderHeader->soreference1,
         ]);
+        app('LogService')->log(__METHOD__,__FUNCTION__,'创建 Order '.json_encode($order));
+        return $order;
     }
 
     /**
@@ -524,10 +537,13 @@ class OrderService
         }
 
         $insert_params = $this->getParamsByOrderHeader($orderHeaders,$owners_code_map,$logistics_code_map,$shop_name_map,$warehouses_code_map);
-
+        $update_params = $this->getUpdateParams($orderHeaders,$owners_code_map,$logistics_code_map,$shop_name_map,$warehouses_code_map);
         if(count($insert_params)> 0){
             $this->create($insert_params);
         }
+        if(count($update_params)>1){
+            $this->batchUpdate($update_params);
+        }
         $orderPackageService->createByWmsOrder($orderHeaders);
         $order_nos = data_get($orderHeaders,'*.orderno');
         unset($orderHeaders_map,$orders_code_map,$shop_name_map,$logistics_code_map,$owners_code_map);
@@ -543,7 +559,7 @@ class OrderService
             $order_code_map[$order->code]= $order;
         }
         foreach ($orderHeaders_map as $orderHeader) {
-             if($order_code_map[$orderHeader->orderno] ?? false)continue;
+            if($order_code_map[$orderHeader->orderno] ?? false)continue;
             $owner = $owners_code_map[$orderHeader->customerid] ?? null;
             $logistic =  $logistics_code_map[$orderHeader->userdefine1] ?? null;
             $warehouse=$warehouses_code_map[$orderHeader->warehouseid] ?? null;
@@ -570,11 +586,36 @@ class OrderService
         return $params;
     }
 
+    public function getUpdateParams($orderHeaders,$owners_code_map,$logistics_code_map,$shop_name_map,$warehouses_code_map)
+    {
+        if(!$orderHeaders){[];}
+        $orders = Order::query()->whereIn('code',data_get($orderHeaders,'*.orderno'))->get();
+        $update_params = [[
+            'id','owner_id','wms_status','logistic_id','shop_id','consignee_name','consignee_phone','province','city','district','address','client_code','updated_at','wms_edittime','warehouse_id'
+        ]];
+        $orderHeaders_map = [];
+        foreach ($orderHeaders as $orderHeader) {
+            $orderHeaders_map[$orderHeader->orderno] = $orderHeader;
+        }
+        $updated_at = Carbon::now()->toDateTimeString();
+        $orders->each(function($order)use($orderHeaders_map,&$owners_code_map,&$logistics_code_map,&$shop_name_map,&$warehouses_code_map,&$update_params,$updated_at){
+            $order_header = $orderHeaders_map[$order->code] ?? null;
+            if(isset($order_header)){
+                $owner = $owners_code_map[$order_header->customerid] ?? null;
+                $logistic =  $logistics_code_map[$order_header->userdefine1] ?? null;
+                $warehouse=$warehouses_code_map[$order_header->warehouseid] ?? null;
+                $key = ' owner_code='.$order_header->customerid.' name='.$order_header->issuepartyname ?? null;
+                $shop = $shop_name_map[$key] ?? null;
+                $this->UpdateOrderParamBy($shop, $logistic, $owner, $warehouse, $order, $order_header, $updated_at, $update_params);
+            }
+        });
+        return $update_params;
+    }
+
     public function create(array $params){
         if(count($params) == 0) return [];
         try {
             $this->insert($params);
-            app('LogService')->log(__METHOD__,__FUNCTION__,'批量创建 order '.count($params).json_encode($params));
         } catch (\Exception $e) {
             app('LogService')->log(__METHOD__,__FUNCTION__,'批量创建 order '.json_encode($params).'||'.$e->getMessage().'||'.$e->getTraceAsString());
         } finally{
@@ -609,45 +650,12 @@ class OrderService
         $updated_at = Carbon::now()->toDateTimeString();
         foreach ($orderHeaders as $orderHeader) {
             $order =$dataHandlerService->getKeyValue(['code'=>$orderHeader->orderno],$orders_code_map);
-            if(!$order){continue;}
+            if(!$order)continue;
             $logistic = $dataHandlerService->getKeyValue(['code'=>$orderHeader->userdefine1] ,$logistics_code_map);
             $owner = $dataHandlerService->getKeyValue(['code'=>$orderHeader->customerid] ,$owner_code_map);
             $shop = $dataHandlerService->getKeyValue(['owner_id'=>$owner->id ?? '','name'=> $orderHeader->issuepartyname] ,$shops_map);
             $warehouse=$dataHandlerService->getKeyValue(['code'=>$orderHeader->warehouseid],$warehouses_map);
-            $shop_id = $shop->id ?? null;
-            $logistic_id = $logistic->id ?? null;
-            $owner_id = $owner->id ?? null;
-            $warehouse_id=$warehouse->id??null;
-            if($order->wms_status != $orderHeader->oracleBASCode_codename_c ||
-                $order->logistic_id != $logistic_id ||
-                $order->shop_id != $shop_id ||
-                $order->owner_id != $owner_id ||
-                $order->consignee_name != $orderHeader->c_contact ||
-                $order->consignee_phone != empty($orderHeader->c_tel2)?$orderHeader->c_tel1:$orderHeader->c_tel2 ||
-                $order->province != $orderHeader->c_province ||
-                $order->city != $orderHeader->c_city ||
-                $order->district != $orderHeader->c_district ||
-                $order->address != $orderHeader->c_address1 ||
-                $order->client_code != $orderHeader->soreference1 ||
-                $order->wms_edittime != $orderHeader->edittime||
-                $order->warehouse_id!=$warehouse_id){
-                $updateParams[] = [
-                    'id'=>$order->id,
-                    'owner_id' => $owner_id,
-                    'wms_status' => $orderHeader->oracleBASCode_codename_c ?? '',
-                    'logistic_id' => $logistic_id,
-                    'shop_id' => $shop_id,
-                    'consignee_name' => $orderHeader->c_contact,
-                    'consignee_phone' => empty($orderHeader->c_tel2)?$orderHeader->c_tel1:$orderHeader->c_tel2,
-                    'province' => $orderHeader->c_province,
-                    'city' => $orderHeader->c_city,
-                    'district' => $orderHeader->c_district,
-                    'address' => $orderHeader->c_address1,
-                    'client_code' => $orderHeader->soreference1,
-                    'updated_at' =>$updated_at,
-                    'wms_edittime' =>$orderHeader->edittime,
-                    'warehouse_id'=>$warehouse_id];
-            }
+            $this->UpdateOrderParamBy($shop, $logistic, $owner, $warehouse, $order, $orderHeader, $updated_at, $updateParams);
         }
         if(count($updateParams) > 1){
             $this->batchUpdate($updateParams);
@@ -754,18 +762,18 @@ class OrderService
     }
 
     // TODO
-    public function createOrderInfo($orderHeaders)
+    public function syncOrder(&$orderHeaders)
     {
         /** @var OrderPackageService $packageService */
         $packageService = app("OrderPackageService");
-        $order_models = $this->createOrderByWMSOrderHeaders($orderHeaders);
-//        $packageService->createPackageInfo($orderHeaders);
-        return $order_models;
+        var_dump('syncOrderByWMSOrderHeaders',new Carbon());
+        $this->syncOrderByWMSOrderHeaders($orderHeaders);
+        $packageService->syncOrderPackage($orderHeaders);
     }
     // TODO
-    public function createOrderByWMSOrderHeaders($orderHeaders)
+    public function syncOrderByWMSOrderHeaders(&$orderHeaders)
     {
-        if($orderHeaders->isEmpty())return;
+        if($orderHeaders->isEmpty())return [];
         /**
          * @var OwnerService $ownerService
          * @var LogisticService $logisticService
@@ -782,13 +790,20 @@ class OrderService
         $shops = $shopService->getByWmsOrders($orderHeaders);
         $warehouses = $warehouseService->getByWmsOrders($orderHeaders);
         $orders = $this->getByWmsOrders($orderHeaders);
-        $created_order = $this->getCreateOrderModelsByWMSOrderHeaders($orderHeaders,$orders,$warehouses,$owners,$logistics,$shops);
+        $created_params = $this->getCreateOrderModelsByWMSOrderHeaders($orderHeaders,$orders,$warehouses,$owners,$logistics,$shops); //3s
         $update_order = $this->getUpdateOrderModelByWMSOrderHeaders($orderHeaders,$orders,$warehouses,$owners,$logistics,$shops);
-        $this->insert($created_order->map(function($item){
-            $array = $item->toArray();
-            unset($array['logisticNumbers'],$array['packages'],$array['commodityPackages'],$array['amount']);
-            return $array;
-        })->toArray());
+        // 转换插入 3s
+        if(count($created_params) > 0){
+            collect($created_params)->chunk(4000)->each(function($inner_params){
+                $this->insert($inner_params->toArray());
+            });
+        }
+//        $this->insert($created_params);
+//        $this->insert($created_order->map(function($item){
+//            $array = $item->toArray();
+//            unset($array['logisticNumbers'],$array['packages'],$array['commodityPackages'],$array['amount']);
+//            return $array;
+//        })->toArray());
 
         $update_params = [
             ['id','code','warehouse_id','owner_id','shop_id','logistic_id','consignee_name','consignee_phone','province','city','district','address','client_code','wms_status','created_at','updated_at','wms_edittime']
@@ -799,28 +814,31 @@ class OrderService
             $update_params[] =$item;
         });
         $this->batchUpdate($update_params);
-        return $created_order->concat($update_order);
     }
     // TODO
     public function getCreateOrderModelsByWMSOrderHeaders($orderHeaders,$orders,$warehouses,$owners,$logistics,$shops)
     {
         /** @var DataHandlerService $dataHandlerService */
         $dataHandlerService = app('DataHandlerService');
+
         $warehouse_map = $dataHandlerService->dataHeader(['code'],$warehouses);
         $owner_map = $dataHandlerService->dataHeader(['code'],$owners);
         $logistic_map = $dataHandlerService->dataHeader(['code'],$logistics);
         $shop_map = $dataHandlerService->dataHeader(['name','owner_id'],$shops);
         $order_map = $dataHandlerService->dataHeader(['code'],$orders);
 
-        $collect = collect();
+//        $collect = collect();
+        $inner_params  = [];
+        $date = (string)Carbon::now();
         foreach ($orderHeaders as $orderHeader) {
             $order_no = $orderHeader->orderno;
             $order = $dataHandlerService->getKeyValue(['code'=>$order_no],$order_map);
             if(isset($order))continue;
-            $order_model = $this->getCreateOrderModels($orderHeader,$warehouse_map,$owner_map,$logistic_map,$shop_map);
-            $collect->push($order_model);
+            $order_model = $this->getCreateOrderModels($orderHeader,$warehouse_map,$owner_map,$logistic_map,$shop_map,$date);
+            $inner_params[] = $order_model;
+//            $collect->push($order_model);
         }
-        return $collect;
+        return $inner_params;
     }
     // TODO
     public function getUpdateOrderModelByWMSOrderHeaders($orderHeaders,$orders,$warehouses,$owners,$logistics,$shops)
@@ -836,10 +854,11 @@ class OrderService
         $logistic_map = $dataHandlerService->dataHeader(['code'],$logistics);
         $shop_map = $dataHandlerService->dataHeader(['name','owner_id'],$shops);
         $collect = collect();
+        $date = (string)Carbon::now();
         foreach ($orders as $order) {
             $orderHeader = $dataHandlerService->getKeyValue(['orderno'=>$order->code],$orderHeader_map);
             if(!$orderHeader)continue;
-            $order_model = $this->getCreateOrderModels($orderHeader,$warehouse_map,$owner_map,$logistic_map,$shop_map);
+            $order_model = $this->getCreateOrderModels($orderHeader,$warehouse_map,$owner_map,$logistic_map,$shop_map,$date);
             if(!$order->isEquals($order_model)){
                 $order->assignValueByOrder($order_model);
                 $collect->push($order);
@@ -848,7 +867,7 @@ class OrderService
         return $collect;
     }
     // TODO
-    public function getCreateOrderModels($orderHeader,$warehouse_map,$owner_map,$logistic_map,$shop_map)
+    public function getCreateOrderModels(&$orderHeader,&$warehouse_map,&$owner_map,&$logistic_map,&$shop_map,$date)
     {
         /** @var DataHandlerService $dataHandlerService */
         $dataHandlerService = app('DataHandlerService');
@@ -856,25 +875,149 @@ class OrderService
         $owner = $dataHandlerService->getKeyValue(['code'=>$orderHeader->customerid],$owner_map);
         $logistic = $dataHandlerService->getKeyValue(['code'=>$orderHeader->userdefine1],$logistic_map);
         $shop = $dataHandlerService->getKeyValue(['name'=>$orderHeader->issuepartyname,'owner_id'=>$owner->id??null],$shop_map);
-        $date = Carbon::now();
-        return  new Order( [
-            'code'=>$orderHeader->orderno,
-            'warehouse_id' => $warehouse->id ?? null,
-            'owner_id' => $owner->id ?? null,
-            'shop_id' => $shop->id ?? null,
-            'logistic_id' =>$logistic->id ?? null,
-            'consignee_name' =>  $orderHeader->c_contact,
-            'consignee_phone' =>  empty($orderHeader->c_tel2)?$orderHeader->c_tel1:$orderHeader->c_tel2,
-            'province' => $orderHeader->c_province,
-            'city' =>  $orderHeader->c_city,
-            'district' => $orderHeader->c_district,
-            'address' => $orderHeader->c_address1,
-            'client_code' => $orderHeader->soreference1,
-            'wms_edittime' => $orderHeader->edittime,
-            'wms_status' => $orderHeader->oracleBASCode_codename_c ?? '',
+        return [
+            'code'=>$orderHeader['orderno'],
+            'warehouse_id' => $warehouse['id'] ?? null,
+            'owner_id' => $owner['id'] ?? null,
+            'shop_id' => $shop['id'] ?? null,
+            'logistic_id' =>$logistic['id'] ?? null,
+            'consignee_name' =>  $orderHeader['c_contact'],
+            'consignee_phone' => $orderHeader['c_tel2'] ?? $orderHeader['c_tel1'],
+            'province' => $orderHeader['c_province'],
+            'city' =>  $orderHeader['c_city'],
+            'district' => $orderHeader['c_district'],
+            'address' => $orderHeader['c_address1'],
+            'client_code' => $orderHeader['soreference1'],
+            'wms_edittime' => $orderHeader['edittime'],
+            'wms_status' => $orderHeader->oracleBASCode->codename_c??'',
             'updated_at' => $date,
-            'created_at' => $orderHeader->addtime,
-        ]);
+            'created_at' => $orderHeader['addtime']
+        ];
+    }
+
+    /**
+     * @param $shop
+     * @param $logistic
+     * @param $owner
+     * @param $warehouse
+     * @param $order
+     * @param $orderHeader
+     * @param string $updated_at
+     * @param $updateParams
+     * @return mixed
+     */
+    public function UpdateOrderParamBy($shop, $logistic, $owner, $warehouse, $order, $orderHeader, string $updated_at, &$updateParams)
+    {
+        $shop_id = $shop->id ?? null;
+        $logistic_id = $logistic->id ?? null;
+        $owner_id = $owner->id ?? null;
+        $warehouse_id = $warehouse->id ?? null;
+
+        if (($order->wms_status !== $orderHeader->oracleBASCode_codename_c) ||
+            ($order->logistic_id !== $logistic_id) ||
+            ($order->shop_id !== $shop_id) ||
+            ($order->owner_id !== $owner_id) ||
+            ($order->consignee_name !== $orderHeader->c_contact) ||
+            $order->consignee_phone !==( empty($orderHeader->c_tel2) ? $orderHeader->c_tel1 : $orderHeader->c_tel2) ||
+            $order->province !== ($orderHeader->c_province) ||
+            $order->city !== ($orderHeader->c_city) ||
+            $order->district !== ($orderHeader->c_district) ||
+            $order->address !== ($orderHeader->c_address1) ||
+            $order->client_code !== ($orderHeader->soreference1) ||
+            ($order->wms_edittime !== $orderHeader->edittime) ||
+            ($order->warehouse_id !== $warehouse_id)) {
+            $updateParams[] = ['id' => $order->id,
+                'owner_id' => $owner_id,
+                'wms_status' => $orderHeader->oracleBASCode_codename_c ?? '',
+                'logistic_id' => $logistic_id,
+                'shop_id' => $shop_id,
+                'consignee_name' => $orderHeader->c_contact,
+                'consignee_phone' => empty($orderHeader->c_tel2) ? $orderHeader->c_tel1 : $orderHeader->c_tel2,
+                'province' => $orderHeader->c_province,
+                'city' => $orderHeader->c_city,
+                'district' => $orderHeader->c_district,
+                'address' => $orderHeader->c_address1,
+                'client_code' => $orderHeader->soreference1,
+                'updated_at' => $updated_at,
+                'wms_edittime' => $orderHeader->edittime,
+                'warehouse_id' => $warehouse_id];
+        }
+    }
+
+    public function batchDeleteUnnecessaryOrder(){
+        $start_id = 0;
+        $step = 1000;
+        while(true){
+            $order_map = [];
+
+            $package_del = [];      $orderCommodities = [];         $bin = [];          $batch = [];            $order = [];
+            $package_update= [];    $orderCommodities_update= [];   $bin_update= [];    $batch_update= [];      $order_update = [];
+            $orders = Order::query()->with('packages.commodities','orderCommodities','bin','batch')->where('id','>',$start_id)->where('id','<',$start_id+$step)->get();
+            $this->getOrderMap($orders,$order_map);
+
+            if(count($order_map) == 0)continue;
+
+
+        }
+    }
+    // OrderPackages
+    public function batchDeleteUnnecessaryOrderPackages($order_map)
+    {
+        $packages = collect();
+        $del_packages= collect();
+        $update_packages = collect();
+        foreach ($order_map as $key =>$items) {
+            $orderPackage = null;
+            $items->packages->each(function($packages){
+
+            });
+        }
+    }
+    //  Batch
+    public function batchDeleteUnnecessaryBatch($order_map,&$batch_order_no_map)
+    {
+        foreach ($order_map as $items) {
+            collect($items)->each(function($order)use(&$batch_order_no_map){
+                $bin = $order->batch;
+                if($bin ?? false){
+                    $batch_order_no_map[$order->code][] = $bin;
+                }
+            });
+        }
+    }
+    // OrderCommodities
+    public function batchDeleteUnnecessaryOrderCommodities($order_map,&$orderCommodities_map)
+    {
+        foreach ($order_map as $items) {
+            collect($items)->each(function($order)use(&$orderCommodities_map){
+                $orderCommodities = $order->orderCommodities;
+                if($bin ?? false){
+                    $orderCommodities_map[$order->code][] = $orderCommodities;
+                }
+            });
+        }
+    }
+    // Bin
+    public function batchDeleteUnnecessaryBin($order_map,&$bin_order_no_map)
+    {
+        foreach ($order_map as $items) {
+            collect($items)->each(function($order)use(&$bin_order_no_map){
+                $bin = $order->bin;
+                if($bin ?? false){
+                    $bin_order_no_map[$order->code][] = $bin;
+                }
+            });
+        }
+    }
+
+    public function getOrderMap($orders,&$orderMap)
+    {
+        $orders->each(function($items,$key)use(&$orderMap){
+            // $items $order集合
+            if($items->count()>1){
+                $order_map[$key] = $items;  // 保留超过2个orders
+            }
+        });
     }
 
 }

+ 6 - 4
app/Services/OwnerService.php

@@ -7,6 +7,7 @@ use App\Owner;
 use App\User;
 use Carbon\Carbon;
 use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Support\Collection;
 use Illuminate\Support\Facades\Auth;
 
 Class OwnerService
@@ -22,10 +23,11 @@ Class OwnerService
      */
     public function getSelection(array $column = ['id', 'name'])
     {
-        return $this->cacheService->getOrExecute('OwnersAll_IdName',function()use($column){
-            return Owner::filterAuthorities()->select($column)->get();
+        $ownerIds=app('UserService')->getPermittingOwnerIds(Auth::user());
+        return $this->cacheService->getOrExecute('OwnersAll_IdName'.md5(json_encode($column).json_encode($ownerIds)),function()use($column,$ownerIds){
+            if(empty($ownerIds))return new Collection();
+            return Owner::query()->select($column)->whereIn('id', $ownerIds)->get();
         },config('cache.expirations.owners'));
-
     }
     public function getSelectionId($column = ['id'])
     {
@@ -133,7 +135,7 @@ Class OwnerService
         try {
             if (count($insert_params) > 0) {
                 $this->insert($insert_params);
-                app('LogService')->log(__METHOD__, __FUNCTION__, '批量创建 owner error' . count($insert_params) . json_encode($insert_params) );
+                app('LogService')->log(__METHOD__, __FUNCTION__, '批量创建 owner ' . count($insert_params) . json_encode($insert_params) );
             }
         } catch (\Exception $e) {
             app('LogService')->log(__METHOD__, __FUNCTION__, '批量创建 owner error' . json_encode($insert_params) . '||' . $e->getMessage() . '||' . $e->getTraceAsString());

+ 7 - 3
app/Services/RejectedBillService.php

@@ -29,11 +29,18 @@ Class RejectedBillService
 
     public function syncOrderIssue($rejectedBill)
     {
+        /**
+         * @var OrderIssue $orderIssue
+         */
         $orderIssue = $rejectedBill->orderIssue()->first();
         if(!$orderIssue && $rejectedBill['logistic_number'] === '原单退回'){   // 原单退回
             $orderIssue = OrderIssue::query()->with('order')->whereHas('order',function($query)use($rejectedBill){
                 $query->where('client_code',$rejectedBill['order_number']);
             })->first();
+        }else if(!$orderIssue  && isset($rejectedBill->logistic_number_return)){
+            $orderIssue = OrderIssue::query()->with('order.packages')->whereHas('order.packages',function($query)use($rejectedBill){
+                $query->where('logistic_number',$rejectedBill->logistic_number_return);
+            })->first();
         }
         if(!isset($orderIssue)){ // 没有对应的问题发货订单
             $orderHeader = OracleDOCOrderHeader::query()->where('soreference1',function($query)use($rejectedBill){
@@ -52,9 +59,6 @@ Class RejectedBillService
             if($orderIssue['logistic_number_return']!=$rejectedBill['logistic_number_return'])
                 $orderIssue->update(['logistic_number_return'=>$rejectedBill['logistic_number_return']]);
             //确认问题件有的时候需要更新状态和提示
-            /**
-             * @var OrderIssue $orderIssue
-             */
             $orderIssue->同步退单状态();
             $orderIssue->update(['is_new_rejecting' => '有']);
             app('LogService')->log(__METHOD__,__FUNCTION__,'退回单同步问题件'.json_encode($rejectedBill).json_encode($orderIssue));

+ 1 - 1
app/Services/ShopService.php

@@ -49,7 +49,7 @@ class ShopService
                    $params[] = $item;
             }
             $shops_list = $this->createByNameAndOwnerCode($params);
-            $shops->concat($shops_list);
+            $shops = $shops->concat($shops_list??[]);
         }
         return $shops;
     }

+ 2 - 1
app/Services/UserService.php

@@ -24,7 +24,8 @@ class UserService
         });
         return !!$roles->intersect($thisRoles)->count();
     }
-    function getPermittingOwnerIds($user){
+    function getPermittingOwnerIds($user=null){
+        if(!$user)return [];
         return $this->cacheService->getOrExecute("user{$user['id']}->getPermittingOwnerIds",function()use($user){
             return $user->getPermittingOwnerIdsAttribute() ?? [];
         });

+ 1 - 1
app/Services/WarehouseService.php

@@ -29,7 +29,7 @@ Class WarehouseService
                 }
             }
             $create_wareHouse=$this->syncWmsWareHouse($需要添加_仓库编码);
-            $wareHouses->concat($create_wareHouse);
+            $wareHouses = $wareHouses->concat($create_wareHouse ?? []);
         }
         return $wareHouses;
     }

+ 1 - 1
app/Services/common/DataHandlerService.php

@@ -75,7 +75,7 @@ class DataHandlerService
         return $mapKey;
     }
 
-    public function getKeyValue($keyValues,$data){
+    public function getKeyValue($keyValues,&$data){
          $mapkeys =  $data['mapkey'];
          $key = '';
          if(!$data){return null;}

+ 2 - 2
public/js/app.js

@@ -86472,8 +86472,8 @@ module.exports = tempTip;
 /*! no static exports found */
 /***/ (function(module, exports, __webpack_require__) {
 
-__webpack_require__(/*! D:\wamp64\www\bswas\resources\js\app.js */"./resources/js/app.js");
-module.exports = __webpack_require__(/*! D:\wamp64\www\bswas\resources\sass\app.scss */"./resources/sass/app.scss");
+__webpack_require__(/*! D:\Demo\bswas\resources\js\app.js */"./resources/js/app.js");
+module.exports = __webpack_require__(/*! D:\Demo\bswas\resources\sass\app.scss */"./resources/sass/app.scss");
 
 
 /***/ }),

+ 2 - 5
public/t.php

@@ -1,7 +1,4 @@
 <?php
 
-
-$str = '货号:yw2020110877入正品仓';
-$result=[];
-preg_match("/[a-zA-Z]{0,5}\d{6,20}/", $str, $result);
-var_dump($result);
+$ar=[5,3,22];
+echo array_key_last($ar);

+ 9 - 4
resources/js/queryForm/queryForm.js

@@ -558,7 +558,7 @@ const query = function getQueryForm(data) {
 
         let ul_div = $("<div class='pl-0 tooltipTarget' style='position: absolute;left: 100px;top:25px; max-height: 150px; overflow-y: scroll; border: 1px solid rgb(221, 221, 221); border-radius: 5px; text-align: center; transform: scale(0.9);z-index:1' tabindex='1'></div>");
         let ul = $("<ul name='" + condition.name + "' class='list-group pl-0 m-0 p-0 bg-white' style='list-style-type: none;width: 150px;top:35px; z-index: 100' ></ul>");
-        let check = $("<input type = 'checkbox' style='z-index:101;position:fixed;top:0;right: 0;border:1px green' >");
+        let check = $("<input id='multipleCheckBox' type = 'checkbox' style='z-index:101;position:fixed;top:0;right: 0;border:1px green' >");
         let isMouseenterCheckBox = false;
 
         select_div.append(input).append(ul_div.append(ul).append(check));
@@ -656,8 +656,10 @@ const query = function getQueryForm(data) {
         ul_div.mouseenter(function () {
             if(_data[condition.name].value.length>0){
                 setTimeout(()=> {
-                    ul_div.attr("title","移出多选区域即可自动提交");
-                    ul_div.tooltip('show');
+                    if (ul_div.is(':visible')){
+                        ul_div.attr("title","移出多选区域即可自动提交");
+                        ul_div.tooltip('show');
+                    }
                 },1000);
             }
         });
@@ -1042,7 +1044,10 @@ const query = function getQueryForm(data) {
                     dom.style.backgroundColor = "#FFFFFF";
                     $(dom).removeClass('active');
                 }
-            })
+            });
+            if (lis.length === select.length) {
+                $("#multipleCheckBox").prop("checked", true);
+            }
             isMultiple(ul.attr('name'));
         }
     }

+ 1 - 1
resources/views/inventory/stockInventory/mission.blade.php

@@ -77,7 +77,7 @@
                     <td >@{{ inventory.total }}</td>
                     <td >@{{ inventory.processed }}</td>
                     <td >@{{ inventory.surplus }}</td>
-                    <td >@{{ inventory.ignored }}</td>
+                    <td >@{{ inventory.ignored?inventory.ignored:0 }}</td>
                     <td>@{{ inventory.difference }}</td>
                     <td>@{{ inventory.returned }}</td>
                     <td v-if="inventory.processed">@{{ inventory.processed }}/@{{ inventory.total }}</td>

+ 14 - 1
resources/views/order/index/delivering.blade.php

@@ -732,17 +732,27 @@
                     }
                     tempTip.confirm("是否要生成“"+this.checkData+"”的退货单?",()=> {
                         let _this = this;
-                        axios.post('{{url('order/isRejectedBillExist')}}',{data:this.checkData})
+                        let arr = [];
+                        window.tempTip.setDuration(9999);
+                        window.tempTip.waitingTip("生成中,请稍等......")
+                        this.orders.forEach(order=> {
+                            if (this.checkData.includes(order.orderno))arr.push(order.soreference1);
+                        });
+                        axios.post('{{url('order/isRejectedBillExist')}}',{data:arr})
                             .then(function (response) {
                                 if (!response.data.success){
                                     tempTip.confirm(response.data.data+',已存在,是否仍要生成退货单?',function () {
                                         _this.createRejectedBill();
+                                        window.tempTip.cancelWaitingTip();
+                                    },function (){
+                                        window.tempTip.cancelWaitingTip();
                                     });
                                     return;
                                 }
                                 _this.createRejectedBill();
                             }).catch(function (error) {
                             tempTip.setDuration(3000);
+                            tempTip.cancelWaitingTip();
                             tempTip.show('网络错误:'+error);
                         });
                     });
@@ -752,14 +762,17 @@
                     axios.post(url,{data:this.checkData})
                         .then(res=>{
                             if (res.data.success){
+                                tempTip.cancelWaitingTip();
                                 tempTip.setDuration(2000);
                                 tempTip.showSuccess("生成退货单成功!");
                             }else{
+                                tempTip.cancelWaitingTip();
                                 tempTip.setDuration(3000);
                                 tempTip.show(res.data.data);
                             }
                         })
                         .catch(err=>{
+                            tempTip.cancelWaitingTip();
                             tempTip.setDuration(3000);
                             tempTip.show('网络错误:'+err);
                         });

+ 5 - 4
resources/views/test.blade.php

@@ -3,10 +3,11 @@
 </head>
 
 <body>
-<form method="get" action="{{url('test/test1')}}">
-    <input name="test">
-    <button type="submit">提交</button>
-</form>
+{{phpinfo()}}
+{{--<form method="get" action="{{url('test/test1')}}">--}}
+{{--    <input name="test">--}}
+{{--    <button type="submit">提交</button>--}}
+{{--</form>--}}
 <script>
 </script>
 </body>

+ 0 - 0
tests/Services/CacheService/GetOrExecuteTest/GetOrExecuteTest.php → tests/Services/CacheService/GetOrExecuteTest.php


+ 0 - 0
tests/Services/CityService/FindByNameTest/FindByNameTest.php → tests/Services/CityService/FindByNameTest.php


+ 60 - 0
tests/Services/CommodityBarcodeService/DestroyTest.php

@@ -0,0 +1,60 @@
+<?php
+
+namespace Tests\Services\CacheService\GetOrExecuteTest;
+
+use App\Commodity;
+use App\CommodityBarcode;
+use App\Services\CacheService;
+use App\Services\CommodityBarcodeService;
+use Illuminate\Database\Eloquent\Collection;
+use Illuminate\Support\Facades\Cache;
+use Tests\TestCase;
+
+class InsertMany_onCommoditiesTest extends TestCase
+{
+
+    /** @var CommodityBarcodeService $service */
+    public $service;
+    public $data=[];
+    public function setUp(): void
+    {
+        parent::setUp();
+        $this->service = app('CommodityBarcodeService');
+        ($this->data['commodity']=(new Commodity()))->save();
+        $this->data['barcodes']=['A1','B1','C2'];
+        $inserts=(function(){
+            $targets=[];
+            foreach ($this->data['barcodes'] as $barcode) {
+                $targets[]=['commodity_id'=>$this->data['commodity']['id'],'code'=>$barcode];
+            }
+            return $targets;
+        })();
+        CommodityBarcode::query()->insert($inserts);
+        $this->data['commodityBarcodes']=CommodityBarcode::query()
+            ->where('commodity_id',$this->data['commodity']['id'])
+            ->whereIn('code',$this->data['barcodes'])
+            ->get();
+    }
+
+    public function testDeleted(){
+        $this->assertGreaterThan(0,$this->data['commodityBarcodes']->count());
+        $destroyIds = $this->data['commodityBarcodes']->map(function ($commodityBarcode) {
+            return $commodityBarcode['id'];
+        });
+        $commodityBarcodes = CommodityBarcode::query()->whereIn('id', $destroyIds)->get();
+        $this->service->destroyCollections($commodityBarcodes);
+
+        $commodityBarcodesResult = CommodityBarcode::query()->whereIn('id', $destroyIds)->get();
+        $this->assertEquals(0, $commodityBarcodesResult->count());
+    }
+
+
+    public function tearDown(): void
+    {
+        $this->data['commodity']->delete();
+        CommodityBarcode::destroy($this->data['commodityBarcodes']->map(function ($commodityBarcode){
+            return $commodityBarcode['id'];
+        }));
+        parent::tearDown();
+    }
+}

+ 65 - 0
tests/Services/CommodityBarcodeService/InsertMany_onCommoditiesTest.php

@@ -0,0 +1,65 @@
+<?php
+
+namespace Tests\Services\CacheService\GetOrExecuteTest;
+
+use App\Commodity;
+use App\CommodityBarcode;
+use App\Services\CacheService;
+use App\Services\CommodityBarcodeService;
+use Illuminate\Database\Eloquent\Collection;
+use Illuminate\Support\Facades\Cache;
+use Tests\TestCase;
+
+class InsertMany_onCommoditiesTest extends TestCase
+{
+
+    /** @var CommodityBarcodeService $service */
+    public $service;
+    public $data=[];
+    public function setUp(): void
+    {
+        parent::setUp();
+        $this->service = app('CommodityBarcodeService');
+        ($this->data['commodity']=(new Commodity()))->save();
+        $this->data['barcodes']=['A1','B1','C2'];
+        $this->data['commodityBarcodes']=new Collection();
+    }
+
+    public function testInsert(){
+        $inputs=[
+            'commodity_id'=>$this->data['commodity']['id'],
+            'barcodes'=>$this->data['barcodes']
+        ];
+        $this->service->insertMany_onCommodities([$inputs]);
+        $this->data['commodityBarcodes']=CommodityBarcode::query()
+            ->where('commodity_id',$this->data['commodity']['id'])
+            ->whereIn('code',$this->data['barcodes'])
+            ->get();
+        $resultArr=$this->data['commodityBarcodes']->map(function ($commodityBarcode){
+            return [$commodityBarcode['commodity_id'],$commodityBarcode['code']];
+        });
+        $expectArr = (function () {
+            $arr=[];
+            foreach ($this->data['barcodes'] as $barcode) {
+                $arr[]=[
+                    $this->data['commodity']['id'],$barcode
+                ];
+            }
+            return $arr;
+        })();
+        $this->assertEquals(json_encode($expectArr),json_encode($resultArr));
+
+        $result=$this->service->insertMany_onCommodities([]);
+        $this->assertEquals(false,$result);
+    }
+
+
+    public function tearDown(): void
+    {
+        $this->data['commodity']->delete();
+        CommodityBarcode::destroy($this->data['commodityBarcodes']->map(function ($commodityBarcode){
+            return $commodityBarcode['id'];
+        }));
+        parent::tearDown();
+    }
+}

+ 98 - 0
tests/Services/CommodityService/SyncBarcodesTest.php

@@ -0,0 +1,98 @@
+<?php
+
+namespace Tests\Services\CacheService\GetOrExecuteTest;
+
+use App\Commodity;
+use App\CommodityBarcode;
+use App\Services\CacheService;
+use App\Services\CommodityBarcodeService;
+use App\Services\CommodityService;
+use Illuminate\Database\Eloquent\Collection;
+use Illuminate\Support\Facades\Cache;
+use Tests\TestCase;
+
+class InsertMany_onCommoditiesTest extends TestCase
+{
+
+    /** @var CommodityService $service */
+    public $service;
+    /** @var CommodityBarcodeService $commodityBarcodeService */
+    public $commodityBarcodeService;
+    public $data=[];
+    public function setUp(): void
+    {
+        parent::setUp();
+        $this->service = app('CommodityService');
+        $this->commodityBarcodeService = app('CommodityBarcodeService');
+        ($this->data['commodity']=(new Commodity(['owner_id'=>1,'sku'=>md5(microtime(true))])))->save();
+        $this->data['barcodes']=['A1','B1','C2'];
+        $this->data['commodityBarcodes']=new Collection();
+        $inputs=[
+            'commodity_id'=>$this->data['commodity']['id'],
+            'barcodes'=>$this->data['barcodes']
+        ];
+        $this->commodityBarcodeService->insertMany_onCommodities([$inputs]);
+    }
+
+    public function testLessBarcodesCommodity(){
+        $commodityBarcodes = $this->data['commodity']->load('barcodes')->barcodes;
+        $this->assertEquals(count($this->data['barcodes']),$commodityBarcodes->count());
+        $lastCode=array_pop($this->data['barcodes']);
+        $this->data['barcodesStr']=implode(',',$this->data['barcodes']);
+        $this->service->syncBarcodes($this->data['barcodesStr'], $this->data['commodity']->owner_id, $this->data['commodity']->sku);
+        $commodityBarcodes = $this->data['commodity']->load('barcodes')->barcodes;
+        $this->assertEquals(count($this->data['barcodes']),$commodityBarcodes->count());
+        $nullCommodityBarcode=CommodityBarcode::query()
+            ->where('commodity_id',$this->data['commodity']['id'])
+            ->where('code',$lastCode)
+            ->first();
+        $this->assertEquals(null,$nullCommodityBarcode);
+
+    }
+    public function testMoreBarcodesCommodity(){
+        $commodityBarcodes = $this->data['commodity']->load('barcodes')->barcodes;
+        $this->assertEquals(count($this->data['barcodes']),$commodityBarcodes->count());
+        $this->data['barcodes'][] = $newCode='FF';
+        $this->data['barcodesStr']=implode(',',$this->data['barcodes']);
+        $this->service->syncBarcodes($this->data['barcodesStr'], $this->data['commodity']->owner_id, $this->data['commodity']->sku);
+        $commodityBarcodes = $this->data['commodity']->load('barcodes')->barcodes;
+        $this->assertEquals(count($this->data['barcodes']),$commodityBarcodes->count());
+        $additionalCommodityBarcode=CommodityBarcode::query()
+            ->where('commodity_id',$this->data['commodity']['id'])
+            ->where('code',$newCode)
+            ->get();
+        $this->assertEquals(1,$additionalCommodityBarcode->count());
+
+    }
+    public function testDiffMoreBarcodesCommodity(){
+        $commodityBarcodes = $this->data['commodity']->load('barcodes')->barcodes;
+        $this->assertEquals(count($this->data['barcodes']),$commodityBarcodes->count());
+        $this->data['barcodes'][] = $newCode='FF';
+        $firstCode=array_shift($this->data['barcodes']);
+        $this->data['barcodesStr']=implode(',',$this->data['barcodes']);
+        $this->service->syncBarcodes($this->data['barcodesStr'], $this->data['commodity']->owner_id, $this->data['commodity']->sku);
+        $commodityBarcodes = $this->data['commodity']->load('barcodes')->barcodes;
+        $this->assertEquals(count($this->data['barcodes']),$commodityBarcodes->count());
+        $additionalCommodityBarcode=CommodityBarcode::query()
+            ->where('commodity_id',$this->data['commodity']['id'])
+            ->where('code',$newCode)
+            ->get();
+        $nullCommodityBarcode=CommodityBarcode::query()
+            ->where('commodity_id',$this->data['commodity']['id'])
+            ->where('code',$firstCode)
+            ->first();
+        $this->assertEquals(1,$additionalCommodityBarcode->count());
+        $this->assertEquals(null,$nullCommodityBarcode);
+
+    }
+
+
+    public function tearDown(): void
+    {
+        $this->service->destroyWithOffspring($this->data['commodity']);
+        CommodityBarcode::destroy($this->data['commodityBarcodes']->map(function ($commodityBarcode){
+            return $commodityBarcode['id'];
+        }));
+        parent::tearDown();
+    }
+}

+ 0 - 0
tests/Services/LogisticTimingService/FindByParamsTest/FindByParamsTest.php → tests/Services/LogisticTimingService/FindByParamsTest.php


+ 0 - 0
tests/Services/OracleDOCOrderHeaderService/GetWMSORderOnStartDateTest/GetWMSOrderOnStartDateTest.php → tests/Services/OracleDOCOrderHeaderService/GetWMSOrderOnStartDateTest.php


+ 0 - 0
tests/Services/OracleDOCOrderHeaderService/GetWmsOrderOnStartDateEditTest/GetWmsOrderOnStartDateEditTest.php → tests/Services/OracleDOCOrderHeaderService/GetWmsOrderOnStartDateEditTest.php


+ 0 - 2
tests/Services/OracleDOCOrderHeaderService/GetWmsOrderOnStartDateCreateTest/GetWmsOrderOnstartDateCreateTest.php → tests/Services/OracleDOCOrderHeaderService/GetWmsOrderOnstartDateCreateTest.php

@@ -23,9 +23,7 @@ class GetWmsOrderOnstartDateCreateTest extends TestCase
     public function testGetWmsOrderOnstartDateCreate()
     {
         $carbon =Carbon::now()->subHours(10);
-        var_dump(Carbon::now());
         $orderHeaders = $this->service->getWmsOrderOnStartDateCreate($carbon);
-        var_dump(Carbon::now());
         $this->assertNotNull($orderHeaders);
         $orderHeader = $orderHeaders->first();
         if($orderHeaders->count() == 0){

+ 0 - 0
tests/Services/OrderIssueService/OrderIssueTagTest/OrderIssueTagTest.php → tests/Services/OrderIssueService/OrderIssueTagTest.php


+ 10 - 8
tests/Services/OrderPackageCommoditiesService/RegroupOrderCommoditiesTest/RegroupOrderCommoditiesTest.php → tests/Services/OrderPackageCommoditiesService/RegroupOrderCommoditiesTest.php

@@ -34,25 +34,27 @@ class RegroupOrderCommoditiesTest extends TestCase
         * createOrderPackage($orderHeaders,$orders,$packages)
         * */
         $carbon =Carbon::now()->subHours(10);
-        $date = '2020-09-18 18:13:50';
-        $orderHeaders = $this->orderHeaderService->getWMSOrderOnStartDate($carbon);
+        $date = '2020-06-18 18:13:50';
+        $orderHeaders = $this->orderHeaderService->getWMSOrderOnStartDate($date);
         if($orderHeaders->count()==0){
             var_dump('查询数据为空');
             return;
         }
+        $order_nos = Order::all()->map(function($order){
+            return $order->code;
+        });
+        dd(Order::all()->map(function($order){
+            return $order->created_at;
+        }));
+
         $order_nos = data_get($orderHeaders,'*.orderno');
         $order_commodities = OrderPackageCommodities::query()->with(['commodity','package.order'])->whereHas('package',function($query)use($order_nos){
             $query->whereHas('order',function ($query)use($order_nos){
                 $query->whereIn('code',$order_nos);
             });
-        })->sql();
-        $order_commodities = OrderPackageCommodities::query()->with(['commodity','package.order'])->whereHas('package.order',function($query)use($order_nos){
-            $query->whereIn('code',$order_nos);
         })->get();
+        $orders = Order::query()->whereIn('code',$order_nos)->get();
 
-        $package = OrderPackage::query()->with('order')->where('order',function($query)use($order_nos){
-            $query->whereIn('code',$order_nos);
-        })->sql();
 
         $order = Order::query()->whereIn('code',$order_nos)->sql();
         $params = $this->service->regroupOrderCommodities($order_commodities);

+ 33 - 0
tests/Services/OrderPackageCommoditiesService/SyncOrderPackageCommoditiesTest.php

@@ -0,0 +1,33 @@
+<?php
+
+namespace Tests\Services\OrderPackageService\SyncOrderPackageCommoditiesTest;
+
+use App\Services\OracleDOCOrderHeaderService;
+use App\Services\OrderPackageCommoditiesService;
+use Illuminate\Foundation\Testing\RefreshDatabase;
+use Illuminate\Foundation\Testing\WithFaker;
+use Tests\TestCase;
+
+class SyncOrderPackageCommoditiesTest extends TestCase
+{
+    /**
+     * @var OrderPackageCommoditiesService $service
+     * @var OracleDOCOrderHeaderService $orderHeaderService
+     */
+    public $service;
+    public $orderHeaderService;
+
+    public function setUp(): void
+    {
+        parent::setUp();
+        $this->service = app('OrderPackageCommoditiesService');
+        $this->orderHeaderService = app('OracleDocOrderHeaderService');
+    }
+
+    public function testExample()
+    {
+        $response = $this->get('/');
+
+        $response->assertStatus(200);
+    }
+}

+ 0 - 46
tests/Services/OrderPackageService/CreatePackageInfoTest/CreatePackageInfoTest.php

@@ -1,46 +0,0 @@
-<?php
-
-namespace Tests\Services\OrderPackageService\CreatePackageInfoTest;
-
-use App\Services\OracleDOCOrderHeaderService;
-use App\Services\OrderPackageService;
-use App\Services\OrderService;
-use Carbon\Carbon;
-use Illuminate\Foundation\Testing\RefreshDatabase;
-use Illuminate\Foundation\Testing\WithFaker;
-use Tests\TestCase;
-
-class CreatePackageInfoTest extends TestCase
-{
-    /**
-     * @var OrderPackageService $service
-     * @var OracleDOCOrderHeaderService $orderHeaderService
-     * @var OrderService $orderService
-     */
-    public $service;
-    public $orderService;
-    public $orderHeaderService;
-
-    public function setUp(): void
-    {
-        parent::setUp();
-        $this->service = app('OrderPackageService');
-        $this->orderService = app('OrderService');
-        $this->orderHeaderService = app('OracleDOCOrderHeaderService');
-    }
-
-    public function testCreatePackageInfo()
-    {
-        /**
-         * createPackageByOrderHeader($orderHeaders)
-         */
-
-        $carbon =Carbon::now()->subHours(10);
-        $date = '2020-09-18 18:13:50';
-        $orderHeaders = $this->orderHeaderService->getWMSOrderOnStartDate($carbon);
-        if ($orderHeaders->count() == 0) {
-            var_dump('查询数据为空');
-        }
-        $this->service->createPackageInfo($orderHeaders);
-    }
-}

+ 0 - 0
tests/Services/OrderPackageService/DeleteUnnecessaryPackageTest/DeleteUnnecessaryPackageTest.php → tests/Services/OrderPackageService/DeleteUnnecessaryPackageTest.php


+ 0 - 0
tests/Services/OrderPackageService/GetInnerParamsTest/GetInnerParamsTest.php → tests/Services/OrderPackageService/GetInnerParamsTest.php


+ 6 - 10
tests/Services/OrderPackageService/CreateOrderPackageTest/CreateOrderPackageTest.php → tests/Services/OrderPackageService/SyncOrderPackageTest.php

@@ -1,8 +1,7 @@
 <?php
 
-namespace Tests\Services\OrderPackageService\CreateOrderPackageTest;
+namespace Tests\Services\OrderPackageService\SyncOrderPackageTest;
 
-use App\OracleDOCOrderHeader;
 use App\Services\OracleDOCOrderHeaderService;
 use App\Services\OrderPackageService;
 use App\Services\OrderService;
@@ -11,7 +10,7 @@ use Illuminate\Foundation\Testing\RefreshDatabase;
 use Illuminate\Foundation\Testing\WithFaker;
 use Tests\TestCase;
 
-class CreateOrderPackageTest extends TestCase
+class SyncOrderPackageTest extends TestCase
 {
     /**
      * @var OrderPackageService $service
@@ -29,12 +28,11 @@ class CreateOrderPackageTest extends TestCase
         $this->orderService = app('OrderService');
         $this->orderHeaderService = app('OracleDOCOrderHeaderService');
     }
-
-    public function testCreateOrderPackage()
+    public function testSyncOrderPackage()
     {
         /*
-         * createOrderPackage($orderHeaders,$orders,$packages)
-         * */
+       * createOrderPackage($orderHeaders,$orders,$packages)
+       * */
 
         $carbon =Carbon::now()->subHours(10);
         $date = '2020-09-18 18:13:50';
@@ -45,7 +43,7 @@ class CreateOrderPackageTest extends TestCase
         }
         $orders = $this->orderService->getByWmsOrders($orderHeaders);
         $packages = $this->service->getByWmsOrders($orderHeaders);
-        $this->service->createOrderPackage($orderHeaders,$orders,$packages);
+        $this->service->syncOrderPackage($orderHeaders,$orders,$packages);
         $exits_packages  = $this->service->getByWmsOrders($orderHeaders);
         $exits_count = $exits_packages->count();
         $logistic_numbers = data_get($orderHeaders,'*.actAllocationDetails.*.picktotraceid');
@@ -57,6 +55,4 @@ class CreateOrderPackageTest extends TestCase
             $this->assertEquals($exits_package->count(),1);
         }
     }
-
-
 }

+ 9 - 8
tests/Services/OrderPackageService/CreatePackageByOrderHeaderTest/CreatePackageByOrderHeaderTest.php → tests/Services/OrderPackageService/SyncPackageByOrderHeadersTest.php

@@ -1,6 +1,6 @@
 <?php
 
-namespace Tests\Services\OrderPackageService\CreatePackageByOrderHeaderTest;
+namespace Tests\Services\OrderPackageService\SyncPackageByOrderHeadersTest;
 
 use App\Services\OracleDOCOrderHeaderService;
 use App\Services\OrderPackageService;
@@ -10,7 +10,7 @@ use Illuminate\Foundation\Testing\RefreshDatabase;
 use Illuminate\Foundation\Testing\WithFaker;
 use Tests\TestCase;
 
-class CreatePackageByOrderHeaderTest extends TestCase
+class SyncPackageByOrderHeadersTest extends TestCase
 {
     /**
      * @var OrderPackageService $service
@@ -28,23 +28,24 @@ class CreatePackageByOrderHeaderTest extends TestCase
         $this->orderService = app('OrderService');
         $this->orderHeaderService = app('OracleDOCOrderHeaderService');
     }
-    public function testCreatePackageByOrderHeader()
+    public function testSyncPackageByOrderHeaders()
     {
         /**
-         * createPackageByOrderHeader($orderHeaders)
+         * createOrDeletePackageByOrderHeader($orderHeaders)
          */
-        $carbon =Carbon::now()->subHours(10);
+        $carbon = Carbon::now()->subHours(10);
         $date = '2020-09-18 18:13:50';
         $orderHeaders = $this->orderHeaderService->getWMSOrderOnStartDate($carbon);
         if ($orderHeaders->count() == 0) {
             var_dump('查询数据为空');
             return;
         }
-        $this->service->createPackageByOrderHeader($orderHeaders);
+        $this->service->syncPackageByOrderHeaders($orderHeaders);
         $packages = $this->service->getByWmsOrders($orderHeaders);
-        $order_nos =  array_unique(data_get($orderHeaders,'*.actAllocationDetails.*.picktotraceid'));
+        $order_nos = array_unique(data_get($orderHeaders, '*.actAllocationDetails.*.picktotraceid'));
         foreach ($order_nos as $order_no) {
-            $this->assertNotEmpty($packages->where('logistic_number',$order_no));
+            $this->assertNotEmpty($packages->where('logistic_number', $order_no));
+
         }
     }
 }

+ 0 - 40
tests/Services/OrderService/CreateOrderInfoTest/CreateOrderInfoTest.php

@@ -1,40 +0,0 @@
-<?php
-
-namespace Tests\Services\OrderService\CreateOrderInfoTest;
-
-use App\Services\OracleDOCOrderHeaderService;
-use App\Services\OrderService;
-use Carbon\Carbon;
-use Illuminate\Foundation\Testing\RefreshDatabase;
-use Illuminate\Foundation\Testing\WithFaker;
-use Tests\TestCase;
-
-class CreateOrderInfoTest extends TestCase
-{
-    /**
-     * @var OrderService $service
-     * @var OracleDOCOrderHeaderService $orderHeaderService
-     */
-    public $service;
-    public $orderHeaderService;
-    public function setUp(): void
-    {
-        parent::setUp();
-        $this->service=app('OrderService');
-        $this->orderHeaderService=app('OracleDOCOrderHeaderService');
-    }
-
-    public function testCreateOrderInfo()
-    {
-        $carbon =Carbon::now()->subHours(10);
-        $date = '2020-09-18 18:13:50';
-        $orderHeader = $this->orderHeaderService->getWMSOrderOnStartDate($carbon);
-        $order_models = $this->service->createOrderInfo($orderHeader);
-        $this->assertNotNull($order_models);
-//        var_dump($orderHeader->count());
-//        var_dump($order_models);
-        $order = $this->service->getByWmsOrders($orderHeader);
-        $this->assertNotNull($order);
-        $this->assertNotNull($orderHeader);
-    }
-}

+ 0 - 0
tests/Services/OrderService/FindOrCreateByClientCodeTest/FindOrCreateByClientCodeTest.php → tests/Services/OrderService/FindOrCreateByClientCodeTest.php


+ 0 - 0
tests/Services/OrderService/GetByWmsOrdersTest/GetByWmsOrdersTest.php → tests/Services/OrderService/GetByWmsOrdersTest.php


+ 0 - 0
tests/Services/OrderService/GetCreateOrderModelByWMSOrderHeadersTest/GetCreateOrderModelByWMSOrderHeadersTest.php → tests/Services/OrderService/GetCreateOrderModelByWMSOrderHeadersTest.php


+ 0 - 0
tests/Services/OrderService/GetCreateOrderModelsTest/GetCreateOrderModelsTest.php → tests/Services/OrderService/GetCreateOrderModelsTest.php


+ 0 - 0
tests/Services/OrderService/GetOrderByLogisticNumberTest/GetOrderByLogisticNumberTest.php → tests/Services/OrderService/GetOrderByLogisticNumberTest.php


+ 0 - 0
tests/Services/OrderService/GetParamByOrderHeaderTest/GetParamByOrderHeaderTest.php → tests/Services/OrderService/GetParamByOrderHeaderTest.php


+ 0 - 0
tests/Services/OrderService/GetUpdateOrderModelByWMSOrderHeadersTest/GetUpdateModelByWmsOrderHeadersTest.php → tests/Services/OrderService/GetUpdateModelByWmsOrderHeadersTest.php


+ 0 - 0
tests/Services/OrderService/LogisticNumberFirstOrCreateOrderTest/LogisticNumberFirstOrCreateOrderTest.php → tests/Services/OrderService/LogisticNumberFirstOrCreateOrderTest.php


+ 5 - 35
tests/Services/OrderService/CreateOrderByWMSOrderHeadersTest/CreateOrderByWMSOrderHeadersTest.php → tests/Services/OrderService/SyncOrderByWMSOrderHeaderTest.php

@@ -1,9 +1,8 @@
 <?php
 
-namespace Tests\Services\OrderService\CreateOrderByWMSOrderHeadersTest;
+namespace Tests\Services\OrderService\SyncOrderByWMSOrderHeaderTest;
 
 use App\Logistic;
-use App\Order;
 use App\Owner;
 use App\Services\common\DataHandlerService;
 use App\Services\LogisticService;
@@ -19,7 +18,7 @@ use Illuminate\Foundation\Testing\RefreshDatabase;
 use Illuminate\Foundation\Testing\WithFaker;
 use Tests\TestCase;
 
-class CreateOrderByWMSOrderHeadersTest extends TestCase
+class SyncOrderByWMSOrderHeaderTest extends TestCase
 {
     /**
      * @var OrderService $service
@@ -43,24 +42,15 @@ class CreateOrderByWMSOrderHeadersTest extends TestCase
         $this->service=app(OrderService::class);
         $this->orderHeaderService=app(OracleDOCOrderHeaderService::class);
     }
-
-    public function testCreateOrderByWMSOrderHeaders()
+    public function testCreateOrUpdateOrderByWMSOrderHeaders()
     {
         $carbon =Carbon::now()->subHours(10);
         $date = '2020-09-18 18:13:50';
         $orderHeaders = $this->orderHeaderService->getWMSOrderOnStartDate($carbon);
-        $orders = $this->service->createOrderByWMSOrderHeaders($orderHeaders);
+        $this->service->syncOrderByWMSOrderHeaders($orderHeaders);
         $existOrders = $this->service->getByWmsOrders($orderHeaders);
         $collect =null;
-        if($existOrders->count()!==$orders->count()){
-            $collect = $existOrders->map(function($order)use($orders){
-                $_order = $orders->where($order->code)->first();
-                return $_order ?? $order;
-            });
-            $this->assertEquals($collect->count(),$orderHeaders->count());
-        }else{
-            $this->assertEquals($orderHeaders->counts(),$orders->count());
-        }
+
         foreach ($orderHeaders as $orderHeader) {
             $code = $orderHeader->orderno;
             $order = $collect->where('code',$code)->first();
@@ -95,24 +85,4 @@ class CreateOrderByWMSOrderHeadersTest extends TestCase
             $this->assertEquals((string)$order->created_at ,(string)$orderHeader->addtime);
         }
     }
-
-    /*
-            'code'                      => $orderHeader->orderno,
-            'warehouse_id'              => $warehouse->id ?? null,
-            'owner_id'                  => $owner->id ?? null,
-            'shop_id'                   => $shop->id ?? null,
-            'logistic_id'               => $logistic->id ?? null,
-            'consignee_name'            => $orderHeader->c_contact,
-            'consignee_phone'           => empty($orderHeader->c_tel2)?$orderHeader->c_tel1:$orderHeader->c_tel2,
-            'province'                  => $orderHeader->c_province,
-            'city'                      => $orderHeader->c_city,
-            'district'                  => $orderHeader->c_district,
-            'address'                   => $orderHeader->c_address1,
-            'client_code'               => $orderHeader->soreference1,
-            'wms_edittime'              => $orderHeader->edittime,
-            'wms_status'                => $orderHeader->oracleBASCode_codename_c ?? '',
-            'updated_at'                => (string)$date,
-            'created_at'                => $orderHeader->addtime,
-        ]);*/
-
 }

+ 77 - 0
tests/Services/OrderService/SyncOrderTest.php

@@ -0,0 +1,77 @@
+<?php
+
+namespace Tests\Services\OrderService\SyncOrderTest;
+
+use App\Logistic;
+use App\Owner;
+use App\Services\common\DataHandlerService;
+use App\Services\LogisticService;
+use App\OracleDOCOrderHeader;
+use App\Services\OracleDOCOrderHeaderService;
+use App\Services\OrderService;
+use App\Services\OwnerService;
+use App\Services\ShopService;
+use App\Services\WarehouseService;
+use App\Shop;
+use App\Warehouse;
+use Carbon\Carbon;
+use Illuminate\Foundation\Testing\RefreshDatabase;
+use Illuminate\Foundation\Testing\WithFaker;
+use Tests\TestCase;
+
+class SyncOrderTest extends TestCase
+{
+    /**
+     * @var OrderService $service
+     * @var OracleDOCOrderHeaderService $orderHeaderService
+     * @var DataHandlerService $dataHandlerService
+     * @var OwnerService $ownerService
+     * @var LogisticService $logisticService
+     * @var ShopService $shopService
+     * @var WarehouseService $warehouseService
+     */
+    public $service;
+    public $orderHeaderService;
+    public $dataHandlerService;
+    public $ownerService;
+    public $logisticService;
+    public $shopService;
+    public $warehouseService;
+    public function setUp(): void
+    {
+        parent::setUp();
+        $this->service=app(OrderService::class);
+        $this->orderHeaderService=app(OracleDOCOrderHeaderService::class);
+    }
+    public function testCreateOrUpdateOrderInfo()
+    {
+        $carbon =Carbon::now()->subHours(1);
+        $date = '2020-05-18 18:13:50';
+        var_dump(((string)Carbon::now()));
+        //   SO201112029795
+//        $orderHeader = $this->orderHeaderService->getWMSOrderOnStartDate($carbon);
+        $orderHeader = OracleDOCOrderHeader::query()->selectRaw(implode(',',OracleDOCOrderHeaderService::$columns))
+            ->with(['oracleBASCustomer'=>function($query){
+                $query->selectRaw('BAS_CUSTOMER.CustomerID,BAS_CUSTOMER.Customer_Type,BAS_CUSTOMER.Descr_C,BAS_CUSTOMER.Active_Flag');
+            },'oracleDOCOrderDetails'=>function($query){
+                $query->selectRaw('doc_order_details.orderNo,doc_order_details.customerid,doc_order_details.sku,doc_order_details.QtyOrdered');
+            }, 'actAllocationDetails'=>function($query){
+                $query->selectRaw('ACT_Allocation_Details.AllocationDetailsID,ACT_Allocation_Details.OrderNo,ACT_Allocation_Details.Qty_Each,ACT_Allocation_Details.PickToTraceID,ACT_Allocation_Details.CustomerID,ACT_Allocation_Details.Sku');
+            },'oracleBASCode'=>function($query){
+                $query->selectRaw('BAS_Codes.CodeID,BAS_Codes.CodeName_C,BAS_Codes.Code');
+            }])
+//            ->where('DOC_Order_Header.addTime','>=',$startDate)
+//            ->where('orderno','SO201112029795')
+            ->where('DOC_Order_Header.addTime','>=',$carbon)
+            ->get();
+        var_dump($orderHeader->count());
+        var_dump((string)Carbon::now());
+
+        $this->service->syncOrder($orderHeader);
+        var_dump((string)Carbon::now());
+
+        $order = $this->service->getByWmsOrders($orderHeader);
+        $this->assertNotNull($order);
+        $this->assertNotNull($orderHeader);
+    }
+}

+ 0 - 0
tests/Services/OrderTrakingSerive/CustomizedOperationTest/CustomizedOperationTest.php → tests/Services/OrderTrakingSerive/CustomizedOperationTest.php


+ 0 - 0
tests/Services/OrderTrakingSerive/GetParamsByOrderHeaderAndOrderTest/GetParamsByOrderHeaderAndOrderTest.php → tests/Services/OrderTrakingSerive/GetParamsByOrderHeaderAndOrderTest.php


+ 0 - 0
tests/Services/ProvinceService/FindByNameTest/FindByNameTest.php → tests/Services/ProvinceService/FindByNameTest.php


+ 0 - 0
tests/Services/WarehouseService/GetByWmsOrdersTest/GetByWmsOrderTest.php → tests/Services/WarehouseService/GetByWmsOrderTest.php


+ 0 - 0
tests/Services/WarehouseService/SyncWmsWareHouseTest/SyncWmsWareHouseTest.php → tests/Services/WarehouseService/SyncWmsWareHouseTest.php


Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 0 - 1
tests/sortingFluxNewBatch.http


+ 4 - 1
文档/WAS项目规范.md

@@ -27,6 +27,7 @@
 	
 
 ##服务
+    服务不能传入Request,不能返回Builder。以可以明确测试,以及明确缓存
 	注册
 		必须在AppServiceProvicder中用app()->singleton绑定为单例;在控制器使用时可以在参数处依赖注入,也可以用app()实例化,使用app()实例化的,在其上用/**@var 类型 参数名 **/   进行注释以使其可以关联提示;服务中调用其他服务的,也用app()进行实例化并且用@var注释
 		注册字符串名称大写开头
@@ -78,7 +79,9 @@
 	每个需求修改提交一个commit
 ##测试
     每个Service方法均需写一个对应的测试
-    每个Service在Tests,Services文夹下,建立对应对名文件夹,一个方法对应一个测试文件
+    每个Service在Tests,Services文夹下,建立对应名文件夹,一个方法对应一个测试文件
+    每个方法可以超过一个文件,如果N个是在基镜中需要配置相同假数据的,可以放在一个文件,不需要或其他假数据的,可以再做一个文件
+    同方法的多文件,在后缀Test之前用下划线_标注区分
     windwos下调用测试,在命令行运行phpunit.bat ,空格后跟要测试的目标包(包可以phpunit.xml定义)
 ##缓存
     缓存在service层以上使用,模型层内不使用

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä