فهرست منبع

出库商品序列号 对应控制器,service,model,factory,seeder

ajun 5 سال پیش
والد
کامیت
ce2897ed79

+ 85 - 0
app/Http/Controllers/OrderPackageCommoditySerialNumberController.php

@@ -0,0 +1,85 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\OrderPackageCommoditySerialNumber;
+use Illuminate\Http\Request;
+
+class OrderPackageCommoditySerialNumberController extends Controller
+{
+    /**
+     * Display a listing of the resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function index()
+    {
+        //
+    }
+
+    /**
+     * Show the form for creating a new resource.
+     *
+     * @return \Illuminate\Http\Response
+     */
+    public function create()
+    {
+        //
+    }
+
+    /**
+     * Store a newly created resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @return \Illuminate\Http\Response
+     */
+    public function store(Request $request)
+    {
+        //
+    }
+
+    /**
+     * Display the specified resource.
+     *
+     * @param  \App\OrderPackageCommoditySerialNumber  $orderPackageCommoditySerialNumber
+     * @return \Illuminate\Http\Response
+     */
+    public function show(OrderPackageCommoditySerialNumber $orderPackageCommoditySerialNumber)
+    {
+        //
+    }
+
+    /**
+     * Show the form for editing the specified resource.
+     *
+     * @param  \App\OrderPackageCommoditySerialNumber  $orderPackageCommoditySerialNumber
+     * @return \Illuminate\Http\Response
+     */
+    public function edit(OrderPackageCommoditySerialNumber $orderPackageCommoditySerialNumber)
+    {
+        //
+    }
+
+    /**
+     * Update the specified resource in storage.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \App\OrderPackageCommoditySerialNumber  $orderPackageCommoditySerialNumber
+     * @return \Illuminate\Http\Response
+     */
+    public function update(Request $request, OrderPackageCommoditySerialNumber $orderPackageCommoditySerialNumber)
+    {
+        //
+    }
+
+    /**
+     * Remove the specified resource from storage.
+     *
+     * @param  \App\OrderPackageCommoditySerialNumber  $orderPackageCommoditySerialNumber
+     * @return \Illuminate\Http\Response
+     */
+    public function destroy(OrderPackageCommoditySerialNumber $orderPackageCommoditySerialNumber)
+    {
+        //
+    }
+}

+ 28 - 0
app/OracleDocOrderSerialNo.php

@@ -0,0 +1,28 @@
+<?php
+
+namespace App;
+
+use App\Traits\ModelTimeFormat;
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations;
+use App\Traits\ModelLogChanging;
+
+class OracleDocOrderSerialNo extends Model
+{
+    use ModelLogChanging;
+    use ModelLogChanging;
+    use ModelTimeFormat;
+
+    protected $connection="oracle";
+    protected $table="Doc_Order_SerialNo";
+    protected $primaryKey="SerialNo";
+    public $timestamps=false;
+
+    public function getIncrementing(){ return false;}
+
+    public function actAllocationDetail(): Relations\HasOne
+    {
+        return $this->hasOne(OracleActAllocationDetails::class,'allocationdetailsid','allocationdetailsid');
+    }
+    //
+}

+ 23 - 0
app/OrderPackageCommoditySerialNumber.php

@@ -0,0 +1,23 @@
+<?php
+
+namespace App;
+
+use App\Traits\ModelTimeFormat;
+use App\Traits\ModelLogChanging;
+
+use Illuminate\Database\Eloquent\Model;
+use Illuminate\Database\Eloquent\Relations\HasOne;
+
+class OrderPackageCommoditySerialNumber extends Model
+{
+    use ModelLogChanging;
+    use ModelTimeFormat;
+
+    protected $fillable = ['order_package_commodity_id','serial_number'];
+    //
+
+    public function orderPackageCommodity(): HasOne
+    {
+        return $this->hasOne(OrderPackageCommodities::class);
+    }
+}

+ 161 - 0
app/Services/OrderPackageCommoditySerialNumberService.php

@@ -0,0 +1,161 @@
+<?php
+
+namespace App\Services;
+
+use App\Order;
+use App\OrderPackage;
+use App\Services\common\BatchUpdateService;
+use App\Services\common\DataHandlerService;
+use App\Traits\ServiceAppAop;
+use App\OrderPackageCommoditySerialNumber;
+use Illuminate\Support\Carbon;
+
+class OrderPackageCommoditySerialNumberService
+{
+    use ServiceAppAop;
+
+    protected $modelClass = OrderPackageCommoditySerialNumber::class;
+
+    public function batchUpdate(array $params)
+    {
+        return app(BatchUpdateService::class)->batchUpdate('order_packages_commodity_serial_numbers',$params);
+    }
+
+    public function syncOrderPackageCommoditySerialNumbers($orderHeaders)
+    {
+        $orderQuery = Order::query()->selectRaw('id')->whereIn('code', data_get($orderHeaders, '*.orderno'));
+        $orderPackages = OrderPackage::query()->with(['commodities' => function ($query) {
+            $query->with('commodity', 'serialNumbers');
+        }])->whereIn('Order_Packages.Order_id', $orderQuery)->get();
+
+        $createdModels = $this->getCreateModelBy($orderHeaders, $orderPackages);
+
+        $regroupParams = $this->regroupOrderPackage($orderPackages);
+
+        $this->deletedModelBy($createdModels,$regroupParams);
+        $this->createdModelBy($createdModels,$regroupParams);
+    }
+
+    public function regroupOrderPackage($orderPackages): array
+    {
+        $regroupArr = [];
+        if (!$orderPackages) return $regroupArr;
+        foreach ($orderPackages as $orderPackage) {
+            $logistic_number = $orderPackage['logistic_number'];
+            $regroupArr[$logistic_number] = [];
+            foreach ($orderPackage['commodities'] as $commodity) {
+                $sku = $commodity['commodity']['sku'] ?? null;
+                $regroupArr[$logistic_number][$sku] = [];
+                foreach ($commodity['serialNumbers'] as $serialNumber) {
+                    $serial_number = $serialNumber['serial_number'];
+                    $id = $serialNumber['id'];
+                    $regroupArr[$logistic_number][$sku][$serial_number]
+                        = ['id'=>$id,'order_package_commodity_id' => $commodity['id'], 'serial_number' => $serial_number];
+                }
+            }
+        }
+        return $regroupArr;
+    }
+
+    public function createdModelBy($createdModels, $regroupParams)
+    {
+        $innerParams = [];
+        foreach ($createdModels as $key => $createdParams) {
+            foreach ($createdParams as $sku => $params) {
+                foreach ($params as $serialNumber =>$param) {
+                    if(!isset($regroupParams[$key][$sku][$serialNumber])){
+                        $innerParams[] = $param;
+                    }
+                }
+            }
+        }
+        OrderPackageCommoditySerialNumber::query()->insert($innerParams);
+    }
+
+//    public function updatedModelBy($createdModels, $regroupParams)
+//    {
+//        $updateParams = [['id','serial_number']];
+//        if (count($updateParams) == 0) return;
+//        $this->batchUpdate($updateParams);
+//    }
+
+    public function deletedModelBy($createdModels, $regroupParams)
+    {
+        $deleteParams = [];
+        foreach ($regroupParams as $key => $params) {
+            if (!isset($regroupParams[$key])) continue;
+            foreach ($params as $sku => $items) {
+                foreach ($items as $serialNumber=>$item) {
+                    if (!isset($createdModels[$key][$sku][$serialNumber])){
+                        $deleteParams[] = $item;
+                    }
+                }
+            }
+        }
+        if (count($deleteParams)==0) return;
+        $delete = OrderPackageCommoditySerialNumber::query()->whereIn('id',data_get($deleteParams,'*.id'))->delete();
+        if($delete>0)LogService::log(__CLASS__,'Delete OrderPackageCommoditySerialNumber',json_encode($deleteParams));
+    }
+
+    public function getCreateModelBy($orderHeaders, $orderPackages): array
+    {
+        /** @var DataHandlerService $dataHandlerService */
+        $dataHandlerService = app(DataHandlerService::class);
+
+        $orderPackageMaps = $dataHandlerService->dataHeader(['logistic_number'], $orderPackages);
+
+        $orderPackageSerialNumbers = [];
+
+        foreach ($orderHeaders as $orderHeader) {
+            if(!isset($orderHeader['actAllocationDetails']))continue;
+            foreach ($orderHeader['actAllocationDetails'] as $actAllocationDetail) {
+                $logisticNumber = $actAllocationDetail['picktotraceid'];
+
+                if ($dataHandlerService->getKeyValue(['logistic_number' => $orderHeader['soreference5']], $orderPackageMaps)) $logisticNumber = $orderHeader['soreference5'];
+
+                if (!$logisticNumber) continue;
+
+                $orderPackage = $dataHandlerService->getKeyValue(['logistic_number' => $logisticNumber], $orderPackageMaps);
+
+                if (!$orderPackage) continue;
+
+                $orderPackageCommodityMap = [];
+                if(!isset($orderPackage['commodities']))continue;
+                foreach ($orderPackage['commodities'] as $orderPackageCommodity) {
+                    $sku = $orderPackageCommodity['commodity']['sku'] ?? '';
+                    if($sku === '')continue;
+                    $orderPackageCommodityMap[$sku] = $orderPackageCommodity;
+                }
+
+                foreach ($actAllocationDetail['oracleDocOrderSerialNos'] as $oracleDocOrderSerialNo) {
+                    $sku = $oracleDocOrderSerialNo['sku'];
+
+                    $createParams = $this->getCreateModel($oracleDocOrderSerialNo, $orderPackageCommodityMap);
+
+                    if (count($createParams) == 0) continue;
+                    if (isset($orderPackageSerialNumbers[$logisticNumber])) $orderPackageSerialNumbers[$logisticNumber] = [];
+                    if (isset($orderPackageSerialNumbers[$logisticNumber][$sku])) $orderPackageSerialNumbers[$logisticNumber][$sku] = [];
+
+                    $orderPackageSerialNumbers[$logisticNumber][$sku][$createParams['serial_number']] = $createParams;
+                }
+            }
+        }
+        return $orderPackageSerialNumbers;
+    }
+
+    public function getCreateModel($oracleDocOrderSerialNo, $orderPackageCommodityMap): array
+    {
+        $orderPackageCommodity = $orderPackageCommodityMap[$oracleDocOrderSerialNo['sku']];
+
+        if (!$orderPackageCommodity) return [];
+        $created_At = Carbon::now();
+        return [
+            'order_package_commodity_id' => $orderPackageCommodity['id'],
+            'serial_number' => $oracleDocOrderSerialNo['serialno'],
+            'created_at' => $created_At,
+            'updated_at' => $created_At
+        ];
+    }
+
+
+}

+ 12 - 0
database/factories/OrderPackageCommoditySerialNumberFactory.php

@@ -0,0 +1,12 @@
+<?php
+
+/** @var \Illuminate\Database\Eloquent\Factory $factory */
+
+use App\OrderPackageCommoditySerialNumber;
+use Faker\Generator as Faker;
+
+$factory->define(OrderPackageCommoditySerialNumber::class, function (Faker $faker) {
+    return [
+        //
+    ];
+});

+ 16 - 0
database/seeds/OrderPackageCommoditySerialNumberSeeder.php

@@ -0,0 +1,16 @@
+<?php
+
+use Illuminate\Database\Seeder;
+
+class OrderPackageCommoditySerialNumberSeeder extends Seeder
+{
+    /**
+     * Run the database seeds.
+     *
+     * @return void
+     */
+    public function run()
+    {
+        //
+    }
+}