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

添加修改orderTracking 对应的同步序列号逻辑

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

+ 190 - 0
app/Filters/OrderTrackFilters.php

@@ -0,0 +1,190 @@
+<?php
+
+
+namespace App\Filters;
+
+
+use App\Commodity;
+use App\Order;
+use App\OrderPackage;
+use App\OrderPackageCommodities;
+use App\Traits\ModelSearchWay;
+use App\User;
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Auth;
+
+class OrderTrackFilters
+{
+    use ModelSearchWay;
+
+    protected $request;
+    protected $queryBuilder;
+    protected $params = [];
+    protected $filters = ['client_code', 'order_client_code_wms',
+        'logistic_id', 'client', 'web_order_number', 'sku', 'logistic_number','remark','ids',
+        'start_at', 'end_at', 'start_planning_sent_at', 'end_planning_sent_at'];
+    protected $array_filter;
+
+    /** @var Builder $orderPackageCommodityQuery */
+    protected $commodityQuery;
+    /** @var Builder $orderPackageCommodityQuery */
+    protected $orderPackageCommodityQuery;
+    /** @var Builder $orderPackageQuery */
+    protected $orderPackageQuery;
+    /** @var Builder $orderQuery */
+    protected $orderQuery;
+
+    public function __construct(Request $request)
+    {
+        $this->request = $request;
+        $this->params = $request->all();
+        $this->array_filter = array_filter($this->request->only($this->filters));
+    }
+
+    public function apply($builder)
+    {
+        $this->queryBuilder = $builder;
+        $this->afterApply();
+        foreach ($this->array_filter as $filter => $value) {
+            if (method_exists($this, $filter)) {
+                $this->$filter($value, $this->queryBuilder);
+            }
+        }
+        $this->beforeApply();
+        return $this->queryBuilder;
+    }
+
+    public function afterApply()
+    {
+        if(isset($this->params['data']))
+            $this->id($this->params['data']);
+
+
+        // 货主
+        $user = Auth::user();
+        $owner_ids = $user ? app('UserService')->getPermittingOwnerIds($user) : [];
+        if (isset($this->params['owner_id'])) {
+            $ownerIds = explode(",", $this->params['owner_id']);
+            $owner_ids = array_intersect($owner_ids, $ownerIds);
+        }
+        $this->ownerId($owner_ids);
+    }
+
+    public function getCommodityQuery()
+    {
+        if(!$this->commodityQuery)
+            $this->commodityQuery = Commodity::query()->selectRaw('id');
+        return $this->commodityQuery;
+    }
+
+    public function getOrderPackageCommodityQuery()
+    {
+        if(!$this->orderPackageCommodityQuery)
+            $this->orderPackageCommodityQuery = OrderPackageCommodities::query()->selectRaw('id');
+        return $this->orderPackageCommodityQuery;
+    }
+
+    public function getOrderPackageQuery()
+    {
+        if(!$this->orderPackageQuery)
+            $this->orderPackageQuery = OrderPackage::query()->selectRaw('id');
+        return $this->orderPackageQuery;
+    }
+
+    public function getOrderQuery()
+    {
+        if(!$this->orderQuery)
+            $this->orderQuery = Order::query()->selectRaw('id');
+        return $this->orderQuery;
+    }
+
+    public function client_code($client_code)
+    {
+        $this->searchWay($this->queryBuilder,$client_code,'Order_Trackings.Order_Client_Code');
+    }
+
+    public function order_client_code_wms($order_client_code_wms)
+    {
+        $this->searchWay($this->queryBuilder,$order_client_code_wms,'Order_Trackings.Order_Client_Code_WMS');
+    }
+
+    public function logistic_id($logistic_id)
+    {
+        $this->queryBuilder->where('Order_Trackings.Logistic_Id',$logistic_id);
+    }
+
+    public function client($client)
+    {
+        $this->queryBuilder->where('Order_Trackings.Client','like',$client.'%');
+    }
+
+    public function web_order_number($web_order_number)
+    {
+        $this->queryBuilder->where('Order_Trackings.Web_Order_Number','like',$web_order_number.'%');
+    }
+
+    public function sku($sku)
+    {
+        $this->getCommodityQuery()->selectRaw('id')->where('sku',$sku);
+        $this->getOrderPackageCommodityQuery()->selectRaw('id')->where('commodity_id',$this->getCommodityQuery());
+    }
+
+    public function logistic_number($logistic_number)
+    {
+        $this->getOrderPackageQuery()->where('logistic_number',$logistic_number);
+    }
+
+    public function remark($remark)
+    {
+        $this->queryBuilder->where('Order_Trackings.Remark','like','%'.$remark.'%');
+    }
+
+    public function id($id)
+    {
+        if(is_array($id))$this->queryBuilder->whereIn('Order_Trackings.Remark.id',$id);
+        $this->queryBuilder->where('Order_Trackings.Remark.id',$id);
+    }
+
+    public function ownerId($ids)
+    {
+        $this->getOrderQuery()->whereIn('Orders.owner_id',$ids);
+    }
+
+
+    public function start_at($start_at)
+    {
+        $this->queryBuilder->where('Order_Trackings.Pick_Up_At','>=',$start_at.' 00:00:00');
+    }
+
+    public function end_at($end_at)
+    {
+        $this->queryBuilder->where('Order_Trackings.Pick_Up_At','<=',$end_at.' 23:59:59');
+    }
+
+    public function start_planning_sent_at($start_planning_sent_at)
+    {
+        $this->queryBuilder->where('Order_Trackings.Planning_Sent_At','>=',$start_planning_sent_at.' 00:00:00');
+    }
+
+    public function end_planning_sent_at($end_planning_sent_at)
+    {
+        $this->queryBuilder->where('Order_Trackings.Planning_Sent_At','<=',$end_planning_sent_at.' 23:59:59');
+    }
+
+    public function beforeApply()
+    {
+        if($this->orderQuery)
+            $this->getOrderPackageQuery()->whereIn('order_packages.order_id',$this->orderQuery);
+
+        if($this->orderPackageQuery)
+            $this->getOrderPackageCommodityQuery()->whereIn('order_package_commodities.order_package_id',$this->getOrderPackageQuery());
+
+        if($this->commodityQuery)
+            $this->getOrderPackageCommodityQuery()->whereIn('order_package_commodities.commodity_id',$this->commodityQuery);
+
+        if($this->orderPackageCommodityQuery)
+            $this->queryBuilder->whereIn('order_trackings.order_package_commodity_id',$this->getOrderPackageCommodityQuery());
+
+    }
+}

+ 5 - 1
app/Http/Controllers/OrderTrackingController.php

@@ -2,6 +2,7 @@
 
 namespace App\Http\Controllers;
 
+use App\Filters\OrderTrackFilters;
 use App\Logistic;
 use App\Order;
 use App\OrderTracking;
@@ -18,7 +19,7 @@ use Ramsey\Uuid\Uuid;
 class OrderTrackingController extends Controller
 {
 
-    public function index(Request $request)
+    public function index(Request $request,OrderTrackFilters $filters)
     {
         /**
          * @var OrderTrackingService $service
@@ -26,6 +27,9 @@ class OrderTrackingController extends Controller
         if (!Gate::allows('订单管理-跟踪'))
             return redirect(url('/'));
         $owners =  app(OwnerService::class)->getAuthorizedOwners();
+
+        $trackOrders = OrderTracking::query()->filter($filters)->defaultQuery()->defaultWith()->paginate($request['paginate'] ?? 50);
+
         $service = app('OrderTrackingService');
         $service->fillInOrderTracking();
         $trackOrders = $service->paginate($request->input());

+ 22 - 0
app/Http/Controllers/TestController.php

@@ -49,6 +49,7 @@ use App\OracleDOCASNHeader;
 use App\OracleDOCOrderDetail;
 use App\OracleDOCOrderHeader;
 use App\OracleDocOrderPackingSummary;
+use App\OracleDocOrderSerialNo;
 use App\OracleDOCWaveDetails;
 use App\OracleDOCWaveHeader;
 use App\OracleInvLotLocId;
@@ -1297,4 +1298,25 @@ where purch.islower=1 and deliver.id>'.$id);
         $service->updateByWmsOrderHeaders($orderHeaders);
 
     }
+
+    public function testArr()
+    {
+        $serialNos = OracleDocOrderSerialNo::query()->selectRaw('OrderNo')->get();
+        $orderNos  = data_get($serialNos,'*.orderno');
+        $service = app(OrderTrackingService::class);
+        $orderHeadService = app(OracleDOCOrderHeaderService::class);
+        $orderHeaders = $orderHeadService->getOrderTracking()->whereIn('DOC_Order_Header.OrderNo',$orderNos)->get();
+        app(OrderService::class)->syncOrderByWMSOrderHeaders($orderHeaders);
+        app("OrderCommodityService")->syncOrderCommodity($orderHeaders);
+        app('OrderPackageService')->syncOrderPackage($orderHeaders);
+        app("OrderPackageCommoditiesService")->syncOrderPackageCommodities($orderHeaders);
+        app('OrderPackageCommoditySerialNumberService')->syncOrderPackageCommoditySerialNumbers($orderHeaders);
+        $service->createByWmsOrderHeader($orderHeaders);
+    }
+    public function testArray1()
+    {
+        $arr = (array)'update_at';
+        dd($arr);
+    }
 }
+

+ 12 - 1
app/OracleActAllocationDetails.php

@@ -2,13 +2,17 @@
 
 namespace App;
 
+use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Model;
 
 use App\Traits\ModelLogChanging;
+use Illuminate\Database\Eloquent\Relations\BelongsTo;
+use Illuminate\Database\Eloquent\Relations\HasMany;
 
 class OracleActAllocationDetails extends Model
 {
     use ModelLogChanging;
+    use ModelTimeFormat;
 
     protected $connection="oracle";
     protected $primaryKey="ALLOCATIONDETAILSID";
@@ -16,7 +20,14 @@ class OracleActAllocationDetails extends Model
     public $timestamps=false;
     public function getIncrementing(){ return false;}
 
-    public function oracleDocOrderHeader(){
+    public function oracleDocOrderHeader(): BelongsTo
+    {
         return $this->belongsTo('App\OracleDOCOrderHeader','orderno','orderno');
     }
+
+    public function oracleDocOrderSerialNos(): HasMany
+    {
+        return $this->hasMany(OracleDocOrderSerialNo::class,'allocationdetailsid','allocationdetailsid');
+    }
+
 }

+ 13 - 3
app/OrderPackageCommodities.php

@@ -6,6 +6,9 @@ use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Model;
 
 use App\Traits\ModelLogChanging;
+use Illuminate\Database\Eloquent\Relations\BelongsTo;
+use Illuminate\Database\Eloquent\Relations\BelongsToMany;
+use Illuminate\Database\Eloquent\Relations\HasMany;
 
 class OrderPackageCommodities extends Model
 {
@@ -22,16 +25,23 @@ class OrderPackageCommodities extends Model
     ];
 
 
-    public function package(){
+    public function package(): BelongsTo
+    {
         return $this->belongsTo(OrderPackage::class,'order_package_id','id');
     }
 
-    public function commodity(){
+    public function commodity(): BelongsTo
+    {
         return $this->belongsTo(Commodity::class,'commodity_id','id');
     }
 
-    public function orderTracking(){
+    public function orderTracking(): BelongsTo
+    {
         return $this->belongsTo(OrderTracking::class,'id','order_package_commodity_id');
     }
 
+    public function serialNumbers(): HasMany
+    {
+        return $this->hasMany(OrderPackageCommoditySerialNumber::class,'order_package_commodity_id','id');
+    }
 }

+ 21 - 3
app/OrderTracking.php

@@ -4,15 +4,14 @@ namespace App;
 
 use App\Traits\ModelTimeFormat;
 use Illuminate\Database\Eloquent\Model;
-
+use Illuminate\Database\Eloquent\Builder;
 use App\Traits\ModelLogChanging;
 
 class OrderTracking extends Model
 {
     use ModelLogChanging;
-
-
     use ModelTimeFormat;
+
     protected $fillable = [
         'order_package_commodity_id','owner_id','logistic_id',
         'web_order_number',
@@ -85,4 +84,23 @@ class OrderTracking extends Model
     public function getOrderClientNumberAttribute(){
         return $this->commodities->package->order['client_code'] ?? '';
     }
+
+    public function scopeFilter($query, $filters)
+    {
+        return $filters->apply($query);
+    }
+
+    public function scopeDefaultQuery($query): Builder
+    {
+        return $query->orderByDesc('order_trackings.pick_up_at')
+            ->orderBy('order_trackings.order_client_code');
+    }
+
+    public function scopeDefaultWith($query)
+    {
+        return $query->with(['commodities'=>function($query){
+            $query->with(['commodity.barcodes','serialNumbers','package.order']);
+        },'owner','logistic','uploadFile']);
+    }
+
 }

+ 19 - 0
app/Services/OracleDOCOrderHeaderService.php

@@ -44,6 +44,25 @@ class OracleDOCOrderHeaderService
             }]);
     }
 
+    public function getOrderTracking()
+    {
+        return OracleDOCOrderHeader::query()->selectRaw(implode(',',self::$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,doc_order_details.Location,doc_order_details.OrderLineNo,doc_order_details.d_edi_03');
+            }, 'actAllocationDetails'=>function($query){
+                $query->with(['oracleDocOrderSerialNos'=>function($query){
+                    $query->selectRaw('SerialNo,OrderNo,Sku,AllocationDetailsId');
+                }]);
+                $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,ACT_Allocation_Details.Location,ACT_Allocation_Details.SkuLineNo,ACT_Allocation_Details.OrderLineno,ACT_Allocation_Details.CheckTime');
+            },'oracleBASCode'=>function($query){
+                $query->selectRaw('BAS_Codes.CodeID,BAS_Codes.CodeName_C,BAS_Codes.Code');
+            },'orderType'=>function($query){
+                $query->selectRaw('BAS_Codes.CodeID,BAS_Codes.CodeName_C,BAS_Codes.Code');
+            }]);
+    }
+
     function first(array $params){
         $order = OracleDOCOrderHeader::query();
         foreach ($params as $column => $value){

+ 2 - 0
app/Services/OrderTrackingService.php

@@ -172,6 +172,7 @@ class OrderTrackingService
         app("OrderCommodityService")->syncOrderCommodity($orderHeaders);
         app('OrderPackageService')->syncOrderPackage($orderHeaders);
         app("OrderPackageCommoditiesService")->syncOrderPackageCommodities($orderHeaders);
+        app('OrderPackageCommoditySerialNumberService')->syncOrderPackageCommoditySerialNumbers($orderHeaders);
         $this->createByWmsOrderHeader($orderHeaders);
     }
 
@@ -182,6 +183,7 @@ class OrderTrackingService
         app("OrderCommodityService")->syncOrderCommodity($orderHeaders);
         app('OrderPackageService')->syncOrderPackage($orderHeaders);
         app("OrderPackageCommoditiesService")->syncOrderPackageCommodities($orderHeaders);
+        app('OrderPackageCommoditySerialNumberService')->syncOrderPackageCommoditySerialNumbers($orderHeaders);
         $this->updateByWmsOrderHeaders($orderHeaders);
     }
 

+ 15 - 0
tests/Services/OrderPackageCommoditySerialNumberService/GetInnerParams.php

@@ -0,0 +1,15 @@
+<?php
+
+
+namespace Tests\Services\OrderPackageCommoditySerialNumberService;
+
+use App\Services\OrderPackageCommoditiesService;
+use \Tests\TestCase;
+
+class GetInnerParams extends TestCase
+{
+    /** @var OrderPackageCommoditiesService $service */
+    protected $service ;
+    private $data = [];
+
+}