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

Merge branch 'Haozi' of ssh://47.103.131.176:10022/var/git/bswas into ajun_test

 Conflicts:
	app/Http/Controllers/TestController.php
ajun 5 лет назад
Родитель
Сommit
3928fc96db

+ 2 - 2
app/Http/Controllers/PriceModelController.php

@@ -269,8 +269,8 @@ class PriceModelController extends Controller
             $service->insertRule($insert);
         }
         //录入中间表
-        /** @var OwnerPriceOperation $model */
-        if ($request->input("owner_id"))$model->ownerPriceOperationOwners()->sync($request->input("owner_id"));
+        /** @var OwnerPriceOperation $ownerPriceOperation */
+        if ($request->input("owner_id"))$ownerPriceOperation->ownerPriceOperationOwners()->sync($request->input("owner_id"));
         LogService::log(__METHOD__,"计费模型-录入作业计费",json_encode($request->input(),JSON_UNESCAPED_UNICODE));
         return response()->redirectTo("maintenance/priceModel/operation")->with("successTip","创建“".$request->input("name")."”成功");
     }

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

@@ -4,9 +4,6 @@ namespace App\Http\Controllers;
 
 use App\Depository;
 use App\Owner;
-use App\Services\LogService;
-use App\Services\OracleDocAsnDetailService;
-use App\Services\OracleDocAsnHerderService;
 use App\Services\StoreService;
 use App\Store;
 use App\StoreItems;
@@ -23,10 +20,8 @@ use Illuminate\Routing\Redirector;
 use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Gate;
 use Illuminate\Support\Facades\Validator;
-use Illuminate\Support\Str;
 use Illuminate\View\View;
 use App\Http\Controllers\Api\thirdPart\flux\StoreController as FStoreController;
-use Ramsey\Uuid\Uuid;
 
 class StoreController extends Controller
 {
@@ -37,7 +32,7 @@ class StoreController extends Controller
         $storeService=app(StoreService::class);
         $stores=$storeService->paginate($request->input());
         $warehouses=Warehouse::query()->get();
-        $owners=Owner::query()->select('id','name')->get();
+        $owners=app("OwnerService")->getIntersectPermitting();
         return view('store.inStorage.index',compact('stores','warehouses','owners'));
     }
     /**

+ 128 - 130
app/Http/Controllers/TestController.php

@@ -16,6 +16,7 @@ use App\LaborReport;
 use App\Log;
 use App\Logistic;
 use App\OracleActAllocationDetails;
+use App\OracleBasSKU;
 use App\OracleDOCOrderHeader;
 use App\OracleDocOrderPackingSummary;
 use App\OracleDOCWaveDetails;
@@ -34,6 +35,7 @@ use App\ProcessStatistic;
 use App\RejectedBill;
 use App\RejectedBillItem;
 use App\Services\CacheService;
+use App\Services\CommodityService;
 use App\Services\common\BatchUpdateService;
 use App\Services\common\DataHandlerService;
 use App\Services\DocWaveHeaderService;
@@ -86,24 +88,26 @@ class TestController extends Controller
     {
         return call_user_func([$this, $method], $request);
     }
-    public function updateInventory(){
-        $inventoryAccounts=InventoryAccount::query()->get();
+
+    public function updateInventory()
+    {
+        $inventoryAccounts = InventoryAccount::query()->get();
         $updateParams = [[
-            'id','processed','ignored','updated_at'
+            'id', 'processed', 'ignored', 'updated_at'
         ]];
-        $updated_at=Carbon::now()->toDateTimeString();
-        foreach ($inventoryAccounts as $inventoryAccount){
-            if ($inventoryAccount->getIgnoredAmount()>0){
+        $updated_at = Carbon::now()->toDateTimeString();
+        foreach ($inventoryAccounts as $inventoryAccount) {
+            if ($inventoryAccount->getIgnoredAmount() > 0) {
                 $updateParams[] = [
-                    'id'=>$inventoryAccount->id,
-                    'processed'=>$inventoryAccount->getProcessedAmount(),
+                    'id' => $inventoryAccount->id,
+                    'processed' => $inventoryAccount->getProcessedAmount(),
                     'ignored' => $inventoryAccount->getIgnoredAmount(),
-                    'updated_at'=>$updated_at,
+                    'updated_at' => $updated_at,
                 ];
             }
         }
-        if(count($updateParams) > 1){
-            app(BatchUpdateService::class)->batchUpdate('inventory_accounts',$updateParams);
+        if (count($updateParams) > 1) {
+            app(BatchUpdateService::class)->batchUpdate('inventory_accounts', $updateParams);
         }
     }
     public function zzd()
@@ -239,7 +243,6 @@ sql;
         Cache::put('storedTest', $today);
         return "cacheing:'$today'<script>localStorage.setItem('storedTest','{$today}')</script>";
     }
-
     function getCache(Request $request)
     {
         $cache = Cache::get('storedTest');
@@ -270,11 +273,8 @@ sql;
             oci_bind_by_name($stmt, ':IN_UserID', $IN_UserID);
             oci_bind_by_name($stmt, ':OUT_Return_Code', $OUT_Return_Code);
             return oci_execute($stmt);
-
         }
     }
-
-
     function packageT(Request $request)
     {
         $package = Package::where('created_at', '<', '2020-07-08')->whereNotNull('logistic_number')->first();
@@ -317,29 +317,6 @@ sql;
         }
     }
 
-    public function delme()
-    {
-        $fields = [
-            'doc_order_header.userdefine1',
-            'doc_order_header.userdefine2',
-            'doc_order_header.SOReference5',
-            'doc_order_header.waveno',
-            'doc_order_header.orderno',
-            'doc_order_header.customerid',
-            'doc_order_header.Consigneename'
-        ];
-        if ('') {
-            $resultOracleObj = OracleDOCOrderHeader::select($fields)->where('orderno', 'SO200603004708');
-        } else {
-            $resultOracleObj = OracleActAllocationDetails::select($fields);
-            $resultOracleObj->where('picktotraceid', '546152742096');
-            $resultOracleObj->leftJoin('DOC_Order_Header', 'act_allocation_details.orderno', 'doc_order_header.orderno');
-        }
-        $_temOracleInfo = $resultOracleObj->first();
-
-        dd($_temOracleInfo);
-    }
-
     public function mergerPackageData()
     {
         ini_set('max_execution_time', 36000);
@@ -671,14 +648,14 @@ where (c.code,c.commodity_id) in (select code,commodity_id from commodity_barcod
             dump($commodity);
         }
         die();
-        $commodityBuilder = Commodity::query();
-        $commodityBuilder->where('owner_id', 4)->first();
-        $commodityBuilder->whereHas('barcodes', function (Builder $query) use ($barcode, $codes) {
-            foreach ($codes as $code) {
-                $query->orWhere('code', $code);
-            }
-        });
-        dd($commodity, $codes, $commodityBuilder->get());
+        $commodityBuilder=Commodity::query();
+        $commodityBuilder->where('owner_id',4)->first();
+            $commodityBuilder->whereHas('barcodes', function (Builder $query)use($barcode,$codes){
+                foreach($codes as $code){
+                    $query->orWhere('code',$code);
+                }
+            });
+        dd($commodity, $codes,$commodityBuilder->get());
     }
 
     public function correctCommodity()
@@ -824,26 +801,6 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
     }
 
 
-    public function test11()
-    {
-        $rejectedBills = RejectedBill::query()
-            ->where('created_at', '>=', '2020-11-10 18:00:22')
-            ->where('created_at', '<=', '2020-11-11 00:00:00')
-            ->get();
-        $update = [['id', 'logistic_number']];
-        $rejectedBills->each(function ($rejectedBill) use (&$update) {
-            if ($rejectedBill->logistic_number == '原单退回') {
-                $details = OracleActAllocationDetails::query()->with('oracleDocOrderHeader')->whereHas('oracleDocOrderHeader', function ($query) use ($rejectedBill) {
-                    $query->where('SOReference1', $rejectedBill->order_number);
-                })->get()->groupBy('picktotraceid');
-                if ($details->count() == 1) {
-                    $update[] = ['id' => $rejectedBill->id, 'logistic_number' => $rejectedBill->logistic_number_return];
-                }
-            }
-        });
-        app('RejectedBillService')->batchUpdate($update);
-    }
-
     public function output()
     {
         /** @var CacheService $cacheService */
@@ -925,52 +882,6 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
         $service = app('OrderIssueService');
         $service->updateByWmsOrders($orderHeaders);
     }
-    public function testCollectMethod()
-    {
-        $startDate=Carbon::parse('2020-11-11 23:59:59')->subSeconds(65)->format('Y-m-d H:i:s');
-        $asnHerders=app(OracleDocAsnHerderService::class)->getWmsAsnOnStartDateCreate($startDate);
-        if ($asnHerders->isEmpty())return null;
-        /**
-         * @var OwnerService $ownerService
-         * @var WarehouseService $wareHouseService
-         */
-        $ownerService = app(OwnerService::class);
-        $owners=$ownerService->getByWmsOrders($asnHerders);
-        $wareHouseService=app(WarehouseService::class);
-        $warehouses=$wareHouseService->getByWms($asnHerders);
-        foreach ($owners as $owner) {
-            $owners_code_map[$owner->code] = $owner;
-        }
-        foreach ($warehouses as $warehouse) {
-            $warehouses_code_map[$warehouse->code] = $warehouse;
-        }
-        var_dump('createStoreParam_start',Carbon::now());
-        $params=app(StoreService::class)->getParamsByAsnHeader($asnHerders,$owners_code_map,$warehouses_code_map);
-        var_dump('createStoreParam_end',Carbon::now());
-
-        var_dump('insertStore_start',Carbon::now());
-        if(count($params)> 0){
-            //app(StoreService::class)->insertStore($params);
-            DB::table('stores')->insert($params);
-        }
-        var_dump('insertStore_end',Carbon::now());
-    }
-    public function testMethodSecond(){
-        $param=[
-            "asn_code" => "ASN2011120516",
-            "warehouse_id" => 2,
-            "owner_id" => 35,
-            "stored_method" => "退货入库",
-            "status" => "订单创建",
-            "remark" => null,
-            "created_at" => "2020-11-12 14:12:42",
-            "updated_at" => "2020-11-12 14:12:42",
-            ];
-        var_dump('start',Carbon::now());
-        //Store::query()->insert($param);
-        app(StoreService::class)->insertStore($param);
-        var_dump('end',Carbon::now());
-    }
 
     public function changeOrder()
     {
@@ -1183,7 +1094,7 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
         $orderService = app(OrderService::class);
         /*$owners = app(OrderTrackingOwnerService::class)->getTrackingOrderOwner();*/
         /*$startDate = \Illuminate\Support\Carbon::parse('2020-10-28 00:00:00')->toDateTimeString();*/
-        $orderNos = ['SO201205001735', 'SO201204003891', 'SO201204003706', 'SO201204002877', 'SO201203003771'];
+        $orderNos = ['SO201205001735','SO201204003891','SO201204003706','SO201204002877','SO201203003771'];
         $orderHeaders = OracleDOCOrderHeader::query()->with(['oracleDOCOrderDetails', 'actAllocationDetails', 'oracleBASCode'])
             ->whereIn('orderno',$orderNos)
             ->get();
@@ -1203,23 +1114,6 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
         dump(memory_get_peak_usage()/1024/1024);
         return view('test');
     }
-    function testUpdateStores(){
-        $stores=Store::query()->where('stored_method','快速入库')->get();
-        $updated_at=Carbon::now()->toDateTimeString();
-        $updateParams = [[
-            'id', 'is_fast_stored','updated_at'
-        ]];
-        foreach ($stores as $store){
-            if ($store->stored_method!='快速入库') continue;
-            $updateParams[] = [
-                'id' => $store->id,
-                'is_fast_stored' =>'快速入库',
-                'updated_at' =>$updated_at,
-            ];
-        }
-        if (count($updateParams) > 1) app(BatchUpdateService::class)->batchUpdate('stores', $updateParams);
-    }
-
     public function testSyncWaveNo()
     {
         $waveHeader = OracleDOCWaveHeader::query()->where('waveno','W201209000024')->first();
@@ -1292,6 +1186,110 @@ where (commodities.owner_id,commodity_barcodes.code) in (select commodities.owne
         unset($orderTrackings,$orderTracking_arr);
     }
 
+    public function testUpdateSkuNameBarcodeToCommodity_id()
+    {
+        $amount = 1000;
+        $storeItem = StoreItems::query()->orderByDesc('id')->first();
+        $sum = $storeItem->id;
+        $number = ceil($sum / $amount);
+        for ($i = 0; $i < $number; $i++) {
+            $storeItems = StoreItems::query()->with('store')
+                ->where('id', '>=', $i * $amount)
+                ->where('id', '<', ($i * $amount + $amount))
+                ->get();
+            if (count($storeItems) < 1) continue;
+            $owner_ids = array_diff(array_unique(data_get($storeItems, '*.store.owner_id')), ['', ' ', '*', null]);
+            $skus = array_diff(array_unique(data_get($storeItems, '*.sku')), ['', ' ', '*', null]);
+            $this->addCommodityIdToStoreItem($owner_ids, $skus, $storeItems);
+        }
+    }
+
+    private function addCommodityIdToStoreItem($owner_ids, $skus, $storeItems)
+    {
+        /**
+         * @var CommodityService $commodityService
+         * @var DataHandlerService $dataHandlerService
+         */
+        $commodityService = app(CommodityService::class);
+        $dataHandlerService = app(DataHandlerService::class);
+        $commodities = $commodityService->get_($owner_ids, $skus, [], true);
+        $commodities_map = $dataHandlerService->dataHeader(['owner_id', 'sku'], $commodities);
+        $updateParams = [[
+            'id', 'commodity_id', 'updated_at'
+        ]];
+        foreach ($storeItems as $storeItem) {
+            $commodity = $dataHandlerService
+                ->getKeyValue(['owner_id' => $storeItem->store->owner_id, 'sku' => $storeItem->sku], $commodities_map);
+            if (!$commodity) continue;
+            $updateParams[] = [
+                'id' => $storeItem->id,
+                'commodity_id' => $commodity->id,
+                'updated_at' => Carbon::now()->toDateTimeString(),
+            ];
+        }
+        if (count($updateParams) > 0) app(BatchUpdateService::class)->batchUpdate('store_items', $updateParams);
+    }
+
+    function testUpdateStores()
+    {
+        $stores = Store::query()->where('stored_method', '快速入库')->get();
+        $updated_at = Carbon::now()->toDateTimeString();
+        $updateParams = [[
+            'id', 'is_fast_stored', 'updated_at'
+        ]];
+        foreach ($stores as $store) {
+            if ($store->stored_method != '快速入库') continue;
+            $updateParams[] = [
+                'id' => $store->id,
+                'is_fast_stored' => '快速入库',
+                'updated_at' => $updated_at,
+            ];
+        }
+        if (count($updateParams) > 1) app(BatchUpdateService::class)->batchUpdate('stores', $updateParams);
+    }
+
+    public function testSyncAsn()
+    {
+        dump('start' . (string)Carbon::now());
+//       $start=ValueStore::query()->where('name','asn_last_created_sync_at')->value('value');
+//       app(OracleDocAsnHerderService::class)->getWmsAsnOnStartDateCreate($start);
+        app(StoreService::class)->storeCreateByWms();
+        app(StoreService::class)->storeUpdateByWms();
+        dump('end' . (string)Carbon::now());
+    }
+
+    public function testSyncCommodity()
+    {
+        dump('start' . (string)Carbon::now());
+        /**@var  CommodityService $commodityService */
+        $commodityService = app(CommodityService::class);
+        $commodityService->syncCommodityCreated();
+        $commodityService->syncCommodityUpdated();
+        dump('end' . (string)Carbon::now());
+    }
+
+    public function testSyncCommodityByMaps()
+    {
+//        $skus = ['5211900982001','5211900982002','5211900982003','5211900982004','5211200641701','5211200641702','5211200641703','5211200641704',
+//            '5211800945001','5211800945002','5211800945003','5211800945004','5215300281002','5215300281003','5215300281004',
+//            '5215300281005','5215300281006','5215300283102','5215300283103',];
+//        $ownerIds=['2'];
+        dump('get_start' . (string)Carbon::now());
+        $bas_skus = OracleBasSKU::query()->where('addTime', '>=', '2020-12-14 00:00:00')->select('customerid', 'sku')->get();
+
+        $ownerIds = Owner::query()->whereIn('code', data_get($bas_skus, '*.customerid'))->get()->map(function ($owner) {
+            return $owner->id;
+        })->toArray();
+        $ownerIds = array_unique($ownerIds);
+        $skus = array_unique(data_get($bas_skus, '*.sku'));
+        dump('get_end' . (string)Carbon::now());
+        /**@var  CommodityService $commodityService */
+        $commodityService = app(CommodityService::class);
+        dump('start' . (string)Carbon::now());
+        $commodities = $commodityService->get_($ownerIds, $skus,[],true);
+        dump('end' . (string)Carbon::now());
+    }
+
     public function editOrderSyncAt()
     {
         ValueStore::query()->where('name','order_last_created_sync_at')->update(['value'=>'2020-12-20 09:00:00']);

+ 102 - 76
app/LaborReport.php

@@ -28,6 +28,7 @@ class LaborReport extends Model
         'sequence',
         'amountOfJoined',
     ];
+    public static $withoutAppends = true;
 
     static function tokenOfBroadcastEnterAndLeave(){
         return md5('tokenOfListAll'.Carbon::now()->format('Y-m-d'));
@@ -85,58 +86,69 @@ class LaborReport extends Model
     }
     //总在线时长
     public function getTotalOnlineTimeAttribute(){
-        $laborReports=LaborReport::where('enter_number',$this['enter_number'])->get();
-        $totalOnlineTime=$laborReports->reduce(function ($value,$laborReport){
-            return ($value??0)+$laborReport['thisRecordOnlineTime'];
-        });
-        return $totalOnlineTime;
+        if(self::$withoutAppends) {
+            $laborReports = LaborReport::where('enter_number', $this['enter_number'])->get();
+            $totalOnlineTime = $laborReports->reduce(function ($value, $laborReport) {
+                return ($value ?? 0) + $laborReport['thisRecordOnlineTime'];
+            });
+            return $totalOnlineTime;
+        }
     }
     //总工作时长
     public function getTotalWorkingTimeAttribute(){
-        $laborReports=LaborReport::where('enter_number',$this['enter_number'])->orderBy('id','asc')->get();
-        $totalWorkingTime=$laborReports->reduce(function ($value,$laborReport){
-            return ($value??0)+$laborReport['thisRecordWorkingTime'];
-        });
-        return $totalWorkingTime;
+        if(self::$withoutAppends) {
+            $laborReports = LaborReport::where('enter_number', $this['enter_number'])->orderBy('id', 'asc')->get();
+            $totalWorkingTime = $laborReports->reduce(function ($value, $laborReport) {
+                return ($value ?? 0) + $laborReport['thisRecordWorkingTime'];
+            });
+            return $totalWorkingTime;
+        }
     }
     //本轮工作起始时间
     public function getThisRoundOnlineStartTimeAttribute(){
-        $laborReports=LaborReport::where('enter_number',$this['enter_number'])->orderBy('id','asc')->get();
-        foreach ($laborReports as $laborReport){
-            if ($laborReport['enter_at']&&$laborReport['check_in_at'])
-                return $laborReport['check_in_at'];
+        if(self::$withoutAppends) {
+            $laborReports = LaborReport::where('enter_number', $this['enter_number'])->orderBy('id', 'asc')->get();
+            foreach ($laborReports as $laborReport) {
+                if ($laborReport['enter_at'] && $laborReport['check_in_at'])
+                    return $laborReport['check_in_at'];
+            }
         }
     }
     //本轮工作结束时间
     public function getThisRoundOnlineEndTimeAttribute(){
-        $laborReports=LaborReport::where('enter_number',$this['enter_number'])->get();
-        foreach ($laborReports as $laborReport){
-            if ($laborReport['exit_at']&&$laborReport['check_out_at'])
-                return $laborReport['check_out_at'];
+        if(self::$withoutAppends) {
+            $laborReports = LaborReport::where('enter_number', $this['enter_number'])->get();
+            foreach ($laborReports as $laborReport) {
+                if ($laborReport['exit_at'] && $laborReport['check_out_at'])
+                    return $laborReport['check_out_at'];
+            }
         }
     }
     //本次在线时长
     public function getThisRecordOnlineTimeAttribute(){
-        if($this['enter_at']&&!$this['check_out_at']&&!$this['exit_at'])
-            return round(Carbon::parse(Carbon::now())->diffInSeconds(Carbon::parse($this['enter_at']))/3600,2);
-        if ($this['enter_at']&&$this['check_out_at']&&!$this['exit_at'])
-            return round(Carbon::parse($this['check_out_at'])->diffInSeconds(Carbon::parse($this['enter_at']))/3600,2);
-        if ($this['enter_at']&&$this['exit_at'])
-            return round(Carbon::parse($this['exit_at'])->diffInSeconds(Carbon::parse($this['enter_at']))/3600,2);
-        if ($this['check_in_at']&&!$this['enter_at']&&!$this['check_out_at']&&!$this['exit_at'])
-            return round(Carbon::parse(Carbon::now())->diffInSeconds(Carbon::parse($this['check_in_at']))/3600,2);
-        if ($this['check_in_at']&&!$this['enter_at']&&$this['check_out_at']&&!$this['exit_at'])
-            return round(Carbon::parse($this['check_out_at'])->diffInSeconds(Carbon::parse($this['check_in_at']))/3600,2);
-        if ($this['check_in_at']&&!$this['enter_at']&&$this['exit_at'])
-            return round(Carbon::parse($this['exit_at'])->diffInSeconds(Carbon::parse($this['check_in_at']))/3600,2);
+
+            if ($this['enter_at'] && !$this['check_out_at'] && !$this['exit_at'])
+                return round(Carbon::parse(Carbon::now())->diffInSeconds(Carbon::parse($this['enter_at'])) / 3600, 2);
+            if ($this['enter_at'] && $this['check_out_at'] && !$this['exit_at'])
+                return round(Carbon::parse($this['check_out_at'])->diffInSeconds(Carbon::parse($this['enter_at'])) / 3600, 2);
+            if ($this['enter_at'] && $this['exit_at'])
+                return round(Carbon::parse($this['exit_at'])->diffInSeconds(Carbon::parse($this['enter_at'])) / 3600, 2);
+            if ($this['check_in_at'] && !$this['enter_at'] && !$this['check_out_at'] && !$this['exit_at'])
+                return round(Carbon::parse(Carbon::now())->diffInSeconds(Carbon::parse($this['check_in_at'])) / 3600, 2);
+            if ($this['check_in_at'] && !$this['enter_at'] && $this['check_out_at'] && !$this['exit_at'])
+                return round(Carbon::parse($this['check_out_at'])->diffInSeconds(Carbon::parse($this['check_in_at'])) / 3600, 2);
+            if ($this['check_in_at'] && !$this['enter_at'] && $this['exit_at'])
+                return round(Carbon::parse($this['exit_at'])->diffInSeconds(Carbon::parse($this['check_in_at'])) / 3600, 2);
+
     }
     //本次工作时长
     public function getThisRecordWorkingTimeAttribute(){
-        if ($this['check_in_at']&&!$this['check_out_at']&&!$this['relax_time']){
-            $workingTime=round(Carbon::parse(Carbon::now())->diffInSeconds(Carbon::parse($this['check_in_at']))/3600,2);
-            $checkInTime=Carbon::parse($this['check_in_at']);
-            $checkOutTime=Carbon::parse(Carbon::now())->format('H');
-            return  $this->minusLunchTime($checkInTime,$checkOutTime,$workingTime);
+
+        if ($this['check_in_at']&&!$this['check_out_at']&&!$this['relax_time']) {
+            $workingTime = round(Carbon::parse(Carbon::now())->diffInSeconds(Carbon::parse($this['check_in_at'])) / 3600, 2);
+            $checkInTime = Carbon::parse($this['check_in_at']);
+            $checkOutTime = Carbon::parse(Carbon::now())->format('H');
+            return $this->minusLunchTime($checkInTime, $checkOutTime, $workingTime);
         }
         if ($this['check_in_at']&&$this['check_out_at']&&!$this['relax_time']){
             $workingTime=round(Carbon::parse($this['check_out_at'])->diffInSeconds(Carbon::parse($this['check_in_at']))/3600,2);
@@ -150,27 +162,30 @@ class LaborReport extends Model
             $checkOutTime=Carbon::parse($this['check_out_at'])->format('H');
             return  $this->minusLunchTime($checkInTime,$checkOutTime,$workingTime)-$this['relax_time']/60;
         }
+
     }
     //本次取整工作时长
     public function getThisRoundRecordWorkingTimeAttribute(){
-        if ($this['round_check_in_at']&&!$this['round_check_out_at']&&!$this['relax_time']){
-            $workingTime=round(Carbon::parse(Carbon::now())->diffInSeconds(Carbon::parse($this['round_check_in_at']))/3600,2);
-            $checkInTime=Carbon::parse($this['round_check_in_at']);
-            $checkOutTime=Carbon::parse(Carbon::now())->format('H');
-            return  $this->minusLunchTime($checkInTime,$checkOutTime,$workingTime);
-        }
-        if ($this['round_check_in_at']&&$this['round_check_out_at']&&!$this['relax_time']){
-            $workingTime=round(Carbon::parse($this['round_check_out_at'])->diffInSeconds(Carbon::parse($this['round_check_in_at']))/3600,2);
-            $checkInTime=Carbon::parse($this['round_check_in_at']);
-            $checkOutTime=Carbon::parse($this['round_check_out_at'])->format('H');
-            return  $this->minusLunchTime($checkInTime,$checkOutTime,$workingTime);
-        }
-        if ($this['round_check_in_at']&&$this['round_check_out_at']&&$this['relax_time']){
-            $workingTime=round(Carbon::parse($this['round_check_out_at'])->diffInSeconds(Carbon::parse($this['round_check_in_at']))/3600,2);
-            $checkInTime=Carbon::parse($this['round_check_in_at']);
-            $checkOutTime=Carbon::parse($this['round_check_out_at'])->format('H');
-            return  $this->minusLunchTime($checkInTime,$checkOutTime,$workingTime)-$this['relax_time']/60;
-        }
+
+            if ($this['round_check_in_at'] && !$this['round_check_out_at'] && !$this['relax_time']) {
+                $workingTime = round(Carbon::parse(Carbon::now())->diffInSeconds(Carbon::parse($this['round_check_in_at'])) / 3600, 2);
+                $checkInTime = Carbon::parse($this['round_check_in_at']);
+                $checkOutTime = Carbon::parse(Carbon::now())->format('H');
+                return $this->minusLunchTime($checkInTime, $checkOutTime, $workingTime);
+            }
+            if ($this['round_check_in_at'] && $this['round_check_out_at'] && !$this['relax_time']) {
+                $workingTime = round(Carbon::parse($this['round_check_out_at'])->diffInSeconds(Carbon::parse($this['round_check_in_at'])) / 3600, 2);
+                $checkInTime = Carbon::parse($this['round_check_in_at']);
+                $checkOutTime = Carbon::parse($this['round_check_out_at'])->format('H');
+                return $this->minusLunchTime($checkInTime, $checkOutTime, $workingTime);
+            }
+            if ($this['round_check_in_at'] && $this['round_check_out_at'] && $this['relax_time']) {
+                $workingTime = round(Carbon::parse($this['round_check_out_at'])->diffInSeconds(Carbon::parse($this['round_check_in_at'])) / 3600, 2);
+                $checkInTime = Carbon::parse($this['round_check_in_at']);
+                $checkOutTime = Carbon::parse($this['round_check_out_at'])->format('H');
+                return $this->minusLunchTime($checkInTime, $checkOutTime, $workingTime) - $this['relax_time'] / 60;
+            }
+
     }
 
     //工作时长减午饭休息时间
@@ -184,45 +199,54 @@ class LaborReport extends Model
     //转场序号
     public function getSequenceAttribute()
     {
-        if(Arr::has($this->tempFields,'sequence'))return $this->tempFields['sequence'];
-        $laborReports=LaborReport::where('enter_number',$this['enter_number'])->orderBy('id','asc')->get();
-        foreach($laborReports as $i=>$laborReport){
-            if($laborReport['id']==$this['id']){
-                $this->tempFields['sequence']=$i+1;
-                return $this->tempFields['sequence'];
+        if(self::$withoutAppends) {
+            if (Arr::has($this->tempFields, 'sequence')) return $this->tempFields['sequence'];
+            $laborReports = LaborReport::where('enter_number', $this['enter_number'])->orderBy('id', 'asc')->get();
+            foreach ($laborReports as $i => $laborReport) {
+                if ($laborReport['id'] == $this['id']) {
+                    $this->tempFields['sequence'] = $i + 1;
+                    return $this->tempFields['sequence'];
+                }
             }
         }
     }
     public function getAmountOfJoinedAttribute()
     {
-        if(Arr::has($this->tempFields,'amountOfJoined'))return $this->tempFields['amountOfJoined'];
-        $this->tempFields['amountOfJoined']=LaborReport::where('enter_number',$this['enter_number'])->orderBy('id','asc')->count();
-        return $this->tempFields['amountOfJoined'];
+        if(self::$withoutAppends) {
+            if (Arr::has($this->tempFields, 'amountOfJoined')) return $this->tempFields['amountOfJoined'];
+            $this->tempFields['amountOfJoined'] = LaborReport::where('enter_number', $this['enter_number'])->orderBy('id', 'asc')->count();
+            return $this->tempFields['amountOfJoined'];
+        }
     }
 
     //进场时间
     public function getEnterAtAttribute()
     {
-        $laborReportStatus=LaborReportStatus::where('labor_report_id',$this['id'])->where('status','未审核')->orderBy('id','desc')->first();
-        if (empty($laborReportStatus))return null;
-        return Carbon::parse($laborReportStatus['created_at'])->format('Y-m-d H:i:s');
+        if(self::$withoutAppends) {
+            $laborReportStatus = LaborReportStatus::where('labor_report_id', $this['id'])->where('status', '未审核')->orderBy('id', 'desc')->first();
+            if (empty($laborReportStatus)) return null;
+            return Carbon::parse($laborReportStatus['created_at'])->format('Y-m-d H:i:s');
+        }
     }
 
     public function getEnteringRecordAttribute()
     {
-        $laborReport=LaborReport::with(['laborReportStatus'=>function($query){
-            return $query->whereIn('status',['已入场','未审核']);
-        }])->where('user_id',$this['user_id'])->orderBy('id','desc')->first();
-        if(empty($laborReport))return null;
-        return $laborReport;
-
+        if(self::$withoutAppends) {
+            $laborReport = LaborReport::with(['laborReportStatus' => function ($query) {
+                return $query->whereIn('status', ['已入场', '未审核']);
+            }])->where('user_id', $this['user_id'])->orderBy('id', 'desc')->first();
+            if (empty($laborReport)) return null;
+            return $laborReport;
+        }
     }
 
     public function getExitAtAttribute()
     {
-        $laborReportStatus=LaborReportStatus::where('labor_report_id',$this['id'])->where('status','已退场')->orderBy('id','desc')->first();
-        if (empty($laborReportStatus))return null;
-        return Carbon::parse($laborReportStatus['created_at'])->format('Y-m-d H:i:s');
+        if(self::$withoutAppends) {
+            $laborReportStatus = LaborReportStatus::where('labor_report_id', $this['id'])->where('status', '已退场')->orderBy('id', 'desc')->first();
+            if (empty($laborReportStatus)) return null;
+            return Carbon::parse($laborReportStatus['created_at'])->format('Y-m-d H:i:s');
+        }
     }
 
     //创建或获取进场编号
@@ -236,8 +260,10 @@ class LaborReport extends Model
     }
 
     public function getIsExportAttribute(){
-        $laborReportStatus=$this->laborReportStatus()->where('labor_report_id',$this['id'])->orderBy('id','desc')->first();
-        return $laborReportStatus['status']=='已退场'?true:false;
+        if(self::$withoutAppends) {
+            $laborReportStatus = $this->laborReportStatus()->where('labor_report_id', $this['id'])->orderBy('id', 'desc')->first();
+            return $laborReportStatus['status'] == '已退场' ? true : false;
+        }
     }
     //出场更新临时工报表信息
     static function exitAndChangeLaborReport($laborReport,$userDutyCheck){

+ 1 - 7
app/OracleDOCASNDetail.php

@@ -11,9 +11,7 @@ class OracleDOCASNDetail extends Model
     protected $connection="oracle";
     protected $table="Doc_ASN_Details";
 
-    public function sku(){
-        return OracleBasSKU::query()->where(['sku'=>$this->sku,'customerId'=>$this->customerId])->get();
-    }
+
     public function oracleDocAsnHeader(){
         return $this->belongsTo('App\OracleDOCASNHeader','asnno','asnno');
     }
@@ -27,8 +25,4 @@ class OracleDOCASNDetail extends Model
         return $this->hasOne(OracleBasCode::class,'code','lotatt08')
             ->where('codeid','QLT_STS');
     }
-    public function basSku()
-    {
-        return $this->hasOne(OracleBasSKU::class,'sku','sku');
-    }
 }

+ 2 - 2
app/Services/CommodityBarcodeService.php

@@ -128,8 +128,8 @@ Class CommodityBarcodeService
                 try {
                     $bool = $this->insert($item);
                     if ($bool) {
-                        app('LogService')->log(__METHOD__, __FUNCTION__, "批量添加 CommodityBarcode Success " . count($insert_params) . ' || ' . json_encode($insert_params));
-                    } else app('LogService')->log(__METHOD__, __FUNCTION__, "批量添加 CommodityBarcode FAILED " . ' || ' . json_encode($insert_params));
+                        app('LogService')->log(__METHOD__, __FUNCTION__, "批量添加 CommodityBarcode Success " . count($item) . ' || ' . json_encode($item));
+                    } else app('LogService')->log(__METHOD__, __FUNCTION__, "批量添加 CommodityBarcode FAILED " . ' || ' . json_encode($item));
                 } catch (\Exception $e) {
                     app('LogService')->log(__METHOD__, __FUNCTION__, "批量添加 CommodityBarcode ERROR " . ' || ' . json_encode($insert_params) . ' || ' . json_encode($e->getMessage()) . ' || ' . json_encode($e->getTraceAsString()));
                 }

+ 152 - 43
app/Services/CommodityService.php

@@ -11,6 +11,7 @@ use App\Services\common\BatchUpdateService;
 use App\Services\common\DataHandlerService;
 use App\ValueStore;
 use Carbon\Carbon;
+use Doctrine\DBAL\Query\QueryBuilder;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Database\Eloquent\Collection;
 use Illuminate\Support\Facades\Cache;
@@ -273,7 +274,7 @@ Class CommodityService
 //        if ($commodities->first()){
 //            $commodity=$commodities->first();
 //        }else{
-            $commodity = $this->firstOrCreate(['owner_id' => $ownerId, 'sku' => $sku]);
+        $commodity = $this->firstOrCreate(['owner_id' => $ownerId, 'sku' => $sku]);
 //        }
         $commodityBarcodes = $commodity['barcodes'] ?? new Collection();
 
@@ -431,10 +432,10 @@ Class CommodityService
         $last_time = $basSkus->first()['addtime'];
         $last_records = $basSkus->where('addtime', $last_time);
         if (!$basSkus) return;
-            $this->syncCreateCommodity($basSkus);
-            $this->deleteCacheKey($create_set, $create_keys);
-            $this->setLastRecordsByRedis($create_key, $create_set, $create_keys, $last_records);
-            $this->setAsnLastSyncAt($created_at, $last_time);
+        $this->syncCreateCommodity($basSkus);
+        $this->deleteCacheKey($create_set, $create_keys);
+        $this->setLastRecordsByRedis($create_key, $create_set, $create_keys, $last_records);
+        $this->setAsnLastSyncAt($created_at, $last_time);
     }
 
     public function syncCommodityUpdated()
@@ -450,10 +451,10 @@ Class CommodityService
         $last_time = $basSkus->first()['edittime'];
         $last_records = $basSkus->where('edittime', $last_time);
         if (!$basSkus) return;
-            $this->syncUpdateCommodity($basSkus);
-            $this->deleteCacheKey($update_set, $update_keys);
-            $this->setLastRecordsByRedis($update_key, $update_set, $update_keys, $last_records);
-            $this->setAsnLastSyncAt($updated_at, $last_time);
+        $this->syncUpdateCommodity($basSkus);
+        $this->deleteCacheKey($update_set, $update_keys);
+        $this->setLastRecordsByRedis($update_key, $update_set, $update_keys, $last_records);
+        $this->setAsnLastSyncAt($updated_at, $last_time);
     }
 
     public function syncCreateCommodity($addBasSkus)
@@ -464,7 +465,8 @@ Class CommodityService
         $this->insertCommodities($insert_params);
         /** @var CommodityBarcodeService $commodityBarcodeService */
         $commodityBarcodeService = app(CommodityBarcodeService::class);
-        $commodityBarcodeService->createBarcodeByWms($addBasSkus);
+        if (count($insert_params) > 0) $commodityBarcodeService->createBarcodeByWms($addBasSkus);
+
     }
 
     public function insertCommodities($insert_params)
@@ -475,13 +477,13 @@ Class CommodityService
         $skus = array_unique(data_get($insert_params, '*.sku'));
         sort($skus);
         try {
-            $bool = Commodity::query()->insert($insert_params);
+            $bool = $this->insert($insert_params);
             if ($bool) {
                 app('LogService')->log(__METHOD__, __FUNCTION__, "批量添加 Commodity Success " . count($insert_params) . ' || ' . json_encode($insert_params));
-                $commodities = Commodity::query()->with('owner')->whereIn('owner_id', $ownerIds)->whereIn('sku', $skus)->get();
+                $commodities = Commodity::query()->whereIn('owner_id', $ownerIds)->whereIn('sku', $skus)->get();
                 $md5 = md5(json_encode([$skus, $ownerIds]));
                 if (Cache::has('commodity_' . $md5)) Cache::forget('commodity_' . $md5);
-                $this->pushToCache($commodities);
+                if(count($commodities)>0) $this->pushToCache($commodities);
             } else app('LogService')->log(__METHOD__, __FUNCTION__, "批量添加 Commodity FAILED " . ' || ' . json_encode($insert_params));
         } catch (\Exception $e) {
             app('LogService')->log(__METHOD__, __FUNCTION__, "批量添加 Commodity ERROR " . ' || ' . json_encode($insert_params) . ' || ' . json_encode($e->getMessage()) . ' || ' . json_encode($e->getTraceAsString()));
@@ -611,11 +613,13 @@ Class CommodityService
             'id', 'name', 'sku', 'owner_id', 'length', 'width', 'height', 'volumn', 'pack_spec', 'updated_at', 'created_at'
         ]];
         $insert_params = [];
+        $updateBasSkus=collect();
         foreach ($addBasSkus as $basSku) {
             $commodity = Cache::get("owner_code_{$basSku['customerid']}_sku_{$basSku['sku']}");
             if (!$commodity) {
                 $commodity = $dataHandlerService->getKeyValue(['owner_id' => $owner_map[$basSku['customerid']], 'sku' => $basSku['sku']], $commodities_map);
                 if (!$commodity) {
+                    $updateBasSkus->add($basSku);
                     $insert_params[] = [
                         'owner_id' => $owner_map[$basSku['customerid']] ?? '',
                         'sku' => $basSku->sku,
@@ -631,15 +635,18 @@ Class CommodityService
                     continue;
                 };
             }
-            if ($commodity->sku != $basSku->sku ||
-                $commodity->name != $basSku->descr_c ||
-                $commodity->length != $basSku->skulength ||
-                $commodity->width != $basSku->skuwidth ||
-                $commodity->height != $basSku->skuhigh ||
-                $commodity->volumn != $basSku->cube ||
-                $commodity->created_at != $basSku->addtime ||
-                $commodity->updated_at != $basSku->edittime ||
-                $commodity->pack_spec != $basSku->pickid) {
+            if (
+                /*  $commodity->sku != $basSku->sku ||
+                  $commodity->name != $basSku->descr_c ||
+                  $commodity->length != $basSku->skulength ||
+                  $commodity->width != $basSku->skuwidth ||
+                  $commodity->height != $basSku->skuhigh ||
+                  $commodity->volumn != $basSku->cube ||
+                  $commodity->created_at != $basSku->addtime ||
+                  $commodity->pack_spec != $basSku->pickid*/
+                $commodity->updated_at != $basSku->edittime
+            ) {
+                $updateBasSkus->add($basSku);
                 $updateParams[] = [
                     'id' => $commodity->id,
                     'owner_id' => $owner_map[$basSku['customerid']] ?? '',
@@ -659,14 +666,19 @@ Class CommodityService
         if (count($updateParams) > 0) $this->updateCommodities($updateParams);
         /** @var CommodityBarcodeService $commodityBarcodeService */
         $commodityBarcodeService = app(CommodityBarcodeService::class);
-        $commodityBarcodeService->updateBarcodeByWms($addBasSkus);
+        if (count($updateParams) > 0) $commodityBarcodeService->updateBarcodeByWms($updateBasSkus);
     }
 
     private function pushToCache($commodities)
     {
+        $owners=Owner::query()->whereIn('id',array_unique(data_get($commodities,'*.owner_id')))->get();
+        $owner_map=[];
+        foreach ($owners as $owner){
+            $owner_map[$owner->id]=$owner->code;
+        }
         if (count($commodities) < 1) return null;
         foreach ($commodities as $commodity) {
-            $commodity_key = "owner_code_{$commodity['owner']['code']}_sku_{$commodity['sku']}";
+            $commodity_key = "owner_code_{$owner_map[$commodity['owner_id']]}_sku_{$commodity['sku']}";
             Cache::put($commodity_key, $commodity);
         }
     }
@@ -696,6 +708,7 @@ Class CommodityService
         LogService::log(__METHOD__, __FUNCTION__, '修改或更新' . $key . json_encode($asnLastSyncAt));
         return $asnLastSyncAt;
     }
+
     public function deleteCacheKey($set, $keys)
     {
         if (Cache::get($set)) {
@@ -729,8 +742,8 @@ Class CommodityService
         $this->batchUpdate($updateParams);
         $md5 = md5(json_encode([$skus, $ownerIds]));
         if (Cache::has('commodity_' . $md5)) Cache::forget('commodity_' . $md5);
-        $commodities = Commodity::query()->with('owner')->whereIn('owner_id', $ownerIds)->whereIn('sku', $skus)->get();
-        $this->pushToCache($commodities);
+        $commodities = Commodity::query()->whereIn('owner_id', $ownerIds)->whereIn('sku', $skus)->get();
+        if(count($commodities)>0) $this->pushToCache($commodities);
     }
 
     // TODO
@@ -740,7 +753,7 @@ Class CommodityService
      * @param array $skus
      * @param array $barcodes
      * @param bool $isSyncWms 是否开启同步wms数据  开启则必须给定 $ownerIds 和 $skus
-     * @param int $paginate   分页只对  货主$ownerIds 条件
+     * @param int $paginate 分页只对  货主$ownerIds 条件
      * @param int $page
      * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator|mixed|null
      */
@@ -759,28 +772,17 @@ Class CommodityService
             case $status == '有SKU':
                 if ($isSyncWms) {
                     if (!$ownerIds) return null;
-                    $owners = Owner::query()->whereIn('id', $ownerIds)->select('id', 'code')->get();
-                    if (!$owners) return null;
-                    foreach ($owners as $owner) {
-                        $ownerCodes[] = $owner->code;
-                    }
-                    $bas_skus = OracleBasSKU::query()
-                        ->select('customerid', 'sku', 'descr_c', 'alternate_sku1', 'alternate_sku2', 'alternate_sku3', 'skulength', 'skuwidth', 'skuhigh', 'cube', 'packid', 'addtime', 'edittime')
-                        ->whereIn('customerid', $ownerCodes)->whereIn('sku', $skus)
-                        ->get();
-                    if (!$bas_skus) return null;
-                    $this->syncUpdateCommodity($bas_skus);
+                    return $this->getCommoditiesByOwnerIdsAndSKu($ownerIds,$skus);
                 }
                 sort($skus);
                 //在取出的记录用 $ownerIds和$barcodes筛选
                 $commodities = Commodity::query()
-                    ->with(['barcodes', 'owner'])
                     ->whereIn('sku', $skus)->get();
                 if ($ownerIds) {
                     sort($ownerIds);
 //                    $md5 = md5(json_encode([$skus, $ownerIds]));
 //                    return Cache::remember('commodity_' . $md5, $time, function () use ($skus, $ownerIds, $commodities) {
-                        return $commodities->whereIn('owner_id', $ownerIds);
+                    return $commodities->whereIn('owner_id', $ownerIds);
 //                    });
                 }
                 if ($barcodes && !$ownerIds) {
@@ -788,7 +790,6 @@ Class CommodityService
                     $md5 = md5(json_encode([$skus, $barcodes]));
                     return Cache::remember('commodity_' . $md5, $time, function () use ($skus, $barcodes) {
                         return Commodity::query()
-                            ->with(['barcodes', 'owner'])
                             ->whereIn('id', function ($query) use ($barcodes) {
                                 $query->from('commodity_barcodes')->select('commodity_id')->whereIn('code', $barcodes);
                             })
@@ -800,7 +801,6 @@ Class CommodityService
             case $status == '有条码没SKU':
                 sort($barcodes);
                 $commodities = Commodity::query()
-                    ->with(['barcodes', 'owner'])
                     ->whereIn('id', function ($query) use ($barcodes) {
                         $query->from('commodity_barcodes')->select('commodity_id')->whereIn('code', $barcodes);
                     })->get();
@@ -821,7 +821,6 @@ Class CommodityService
                 if (is_null($commodities))//如果缓存已失效或者无缓存则重新缓存
                 {
                     $commodities = Commodity::query()
-                        ->with(['barcodes', 'owner'])
                         ->whereIn('owner_id', $ownerIds)
                         ->orderBy('owner_id', 'asc')
                         ->paginate($paginate, '*', 'page', $page);
@@ -831,4 +830,114 @@ Class CommodityService
                 return $commodities;
         }
     }
+
+
+    public function getCommoditiesByOwnerIdsAndSKu($owner_ids, $skus)
+    {
+        $owner_codes = Owner::query()->whereIn('id', $owner_ids)->get()->map(function ($owner) {return $owner->code;});
+        $basSkus = OracleBasSKU::query()->whereIn('sku', $skus)->whereIn('customerid', $owner_codes)
+            ->select('customerid', 'sku', 'descr_c', 'alternate_sku1', 'alternate_sku2', 'alternate_sku3', 'skulength', 'skuwidth', 'skuhigh', 'cube', 'packid', 'addtime', 'edittime')->get();
+        $maps = [];
+        foreach ($basSkus as $basSku) {
+            $value = [
+                'owner_code' => $basSku['customerid'],
+                'sku' => $basSku['sku']
+            ];
+            $maps[json_encode($value)] = $value;
+        }
+        return $this->getCommoditiesByMaps($maps, $basSkus);
+    }
+
+    /**
+     * @param $maps
+     * @param null $basSkus
+     * @return \Illuminate\Support\Collection|\Tightenco\Collect\Support\Collection
+     * 参数maps格式 $maps[json_encode(['owner_code' => $basSku['customerid'],'sku' => $basSku['sku']])]=['owner_code' => $basSku['customerid'],'sku' => $basSku['sku']];
+     */
+    public function getCommoditiesByMaps($maps, $basSkus = null)
+    {
+        $commodities = $this->getCommodityByCacheMaps($maps);
+        if (count($maps) == 0) return $commodities;
+        $commoditiesInDB=$this->getCommodityByMaps($maps);
+        $commodities = $commodities->concat($commoditiesInDB);
+        if (count($maps) == 0) return $commodities;
+        $owners = Owner::query()->whereIn('code', array_unique(data_get($maps, '*.owner_code')))->get();
+        $owner_map = [];
+        $owner_id_map = [];
+        foreach ($owners as $owner) {
+            $owner_map[$owner->id] = $owner->code;
+            $owner_id_map[$owner->code] = $owner->id;
+        }
+        $mapOwnerCodes = [];
+        $mapSkus = [];
+        foreach ($maps as $map) {
+            $mapSkus[] = $map['sku'];
+            $mapOwnerCodes[] = $map['owner_code'];
+        }
+        $basSkus = OracleBasSKU::query()->whereIn('sku', $mapSkus)->whereIn('customerid', $mapOwnerCodes)
+                ->select('customerid', 'sku', 'descr_c', 'alternate_sku1', 'alternate_sku2', 'alternate_sku3', 'skulength', 'skuwidth', 'skuhigh', 'cube', 'packid', 'addtime', 'edittime')->get();
+        if (count($basSkus) < 1) return $commodities;
+        $insert_params = [];
+        $owner_ids = [];
+        $skus = [];
+        foreach ($basSkus as $basSku) {
+            $commodity = Cache::get("owner_code_{$basSku['customerid']}_sku_{$basSku['sku']}");
+            if ($commodity) continue;
+            if ($basSku->sku=='NOSKU')continue;
+            $owner_id = $owner_id_map[$basSku['customerid']] ?? '';
+            $owner_ids[] = $owner_id;
+            $skus[] = $basSku->sku;
+            $insert_params[] = [
+                'owner_id' => $owner_id,
+                'sku' => $basSku->sku,
+                'name' => $basSku->descr_c,
+                'length' => $basSku->skulength,
+                'width' => $basSku->skuwidth,
+                'height' => $basSku->skuhigh,
+                'volumn' => $basSku->cube,
+                'created_at' => $basSku->addtime,
+                'updated_at' => $basSku->edittime,
+                'pack_spec' => $basSku->packid == 'STANDARD' ? 0 : explode("/", $basSku->packid)[1],
+            ];
+        }
+        $this->insert($insert_params);
+        app('LogService')->log(__METHOD__, __FUNCTION__, "批量添加 Commodity Success " . count($insert_params) . ' || ' . json_encode($insert_params));
+        $insertCommodities = Commodity::query()->whereIn('owner_id',array_unique($owner_ids))->whereIn('sku',array_unique($skus))->get();
+        if(count($insertCommodities)>0) $this->pushToCache($insertCommodities);
+        $commodities = $commodities->concat($insertCommodities);
+        return $commodities;
+    }
+
+    public function getCommodityByCacheMaps(&$maps)
+    {
+        $commodities = collect();
+        foreach ($maps as $key => $map) {
+            $commodity = Cache::get("owner_code_{$map['owner_code']}_sku_{$map['sku']}");
+            if (isset($commodity)) {
+                $commodities->push($commodity);
+                unset($maps[$key]);
+            }
+        }
+        return $commodities;
+    }
+
+    public function getCommodityByMaps(&$maps, $owners = null)
+    {
+        $count=count($maps);
+        if ($owners == null) $owners = Owner::query()->whereIn('code', array_unique(data_get($maps, '*.owner_code')))->get();
+        $owner_map=[];
+        foreach ($owners as $owner){
+            $owner_map[$owner->id]=$owner->code;
+        }
+        $commodities = Commodity::query()
+            ->whereIn('owner_id', data_get($owners, '*.id'))
+            ->whereIn('sku', array_unique(data_get($maps, '*.sku')))
+            ->get();
+        foreach ($commodities as $commodity) {
+            $key = json_encode(['owner_code'=>$owner_map[$commodity->owner_id],'sku'=>$commodity->sku]);
+            if(isset($maps[$key]))unset($maps[$key]);
+        }
+        if(count($maps)!=$count) $this->pushToCache($commodities);
+        return $commodities;
+    }
 }

+ 4 - 0
app/Services/LaborReportsCountingRecordService.php

@@ -14,6 +14,10 @@ use Ramsey\Uuid\Type\Integer;
 
 class LaborReportsCountingRecordService
 {
+    public function __construct(LaborReport $laborReport)
+    {
+        $laborReport::$withoutAppends = false;
+    }
     public function userGroupsCount($start, $end)
     {
         $resultByCache = Cache::remember('userGroupsCount_' . $start . '_' . $end, 600, function () use ($start, $end) {

+ 4 - 7
app/Services/OracleDocAsnHerderService.php

@@ -9,23 +9,20 @@ Class OracleDocAsnHerderService
     public function getWmsAsnOnStartDateCreate($startDate)
     {
         if (!$startDate) return null;
-        return OracleDOCASNHeader::query()
-            ->with(['asnType', 'asnStatus', 'asnDetails' => function ($query) {
-                $query->with(['lineStatus', 'qualityStatus','basSku']);
-            }])
+        $oracleDocAsnHerder= OracleDOCASNHeader::query()
+            ->with(['asnType', 'asnStatus'])
             ->select('asnno','asnstatus','asntype','addtime','edittime','customerid','notes','warehouseid','asnreference3')
             ->where('addTime', '>=', $startDate)
             ->orderByDesc('addtime')
             ->get();
+        return $oracleDocAsnHerder;
     }
 
     public function getWmsAsnOnStartDateEdit($startDate)
     {
         if (!$startDate) return null;
         $oracleDocAsnHerder= OracleDOCASNHeader::query()
-            ->with(['asnType', 'asnStatus', 'asnDetails' => function ($query) {
-                $query->with(['lineStatus', 'qualityStatus','basSku']);
-            }])
+            ->with(['asnType', 'asnStatus'])
             ->select('asnno','asnstatus','asntype','addtime','edittime','customerid','notes','warehouseid','asnreference3')
             ->where('EditTime', '>=', $startDate)
             ->whereColumn('EditTime', '<>', 'addTime')

+ 127 - 57
app/Services/StoreItemService.php

@@ -2,11 +2,14 @@
 
 namespace App\Services;
 
+use App\OracleDOCASNDetail;
+use App\Owner;
 use App\Services\common\BatchUpdateService;
 use App\Services\common\DataHandlerService;
 use App\Store;
 use App\StoreItems;
 use Carbon\Carbon;
+use Doctrine\DBAL\Query\QueryBuilder;
 use Illuminate\Support\Facades\DB;
 
 Class StoreItemService
@@ -26,65 +29,108 @@ Class StoreItemService
     public function storeItemUpdateByWms($asnHerders)
     {
         if (!$asnHerders) return null;
-//        if (count($KSRK)>0) $asnHerders=$asnHerders->filter(function ($asnHerder)use($KSRK){
-//            return !in_array($asnHerder->asnno,$KSRK);
-//        });
         $asnDetails = $this->getAsnDetailsByAsnHerder($asnHerders);
         $this->updateStoreItem($asnDetails);
     }
 
     public function getAsnDetailsByAsnHerder($asnHerders)
     {
-        $asnDetails = collect();
-        $asnHerders->each(function ($asnHeader) use ($asnDetails) {
-            $asnHeader->asnDetails->each(function ($asnDetail) use ($asnDetails) {
-                $asnDetails->add($asnDetail);
-            });
-        });
+        $asnnos = collect();
+        foreach ($asnHerders as $asnHerder) {
+            $asnnos->add($asnHerder->asnno);
+        }
+        $asnnos = $asnnos->unique()->toArray();
+        $asnDetails=OracleDOCASNDetail::query()
+            ->with(['lineStatus', 'qualityStatus'])
+            ->whereIn('asnno',$asnnos)
+            ->select('asnno','asnlineno','customerid','sku','skudescrc','linestatus','lotatt08','lotatt05','receivedqty','expectedqty','addtime','edittime')
+            ->get();
+        //dd($asnDetails->first());
+//        $db = DB::connection('oracle');
+//        $sql = <<<sql
+//            SELECT d.asnno,d.ASNLINENO,d.SKUDESCRC,d.CUSTOMERID,d.SKU,c.CODENAME_C as lotatt08,b.CODENAME_C as linestatus,d.lotatt05,
+//            d.receivedqty,d.expectedqty,d.addtime,d.edittime FROM DOC_ASN_DETAILS d
+//            LEFT JOIN BAS_CODES b ON d.linestatus = b.code AND 'ASN_STS' = b.codeid
+//            LEFT JOIN BAS_CODES c ON d.lotatt08 = c.code AND 'QLT_STS' = c.codeid WHERE d.ASNNO in (
+//sql;
+//        $asno_str = '';
+//        foreach ($asnnos as $str) $asno_str .= "'" . $str . "',";
+//        $asno_str = rtrim($asno_str, ',');
+//        $sql=$sql.$asno_str.")";
+//        $asnDetails = $db->select(DB::raw($sql));
+//        $asnDetails=collect($asnDetails);
+
+
+//        $asnDetails = collect();
+//        $asnHerders->each(function ($asnHeader) use ($asnDetails) {
+//            $asnHeader->asnDetails->each(function ($asnDetail) use ($asnDetails) {
+//                $asnDetails->add($asnDetail);
+//            });
+//        });
         return $asnDetails;
     }
-
+    //TODO
     public function createStoreItem($asnDetails)
     {
 
         if ($asnDetails->isEmpty()) return null;
-        ini_set('memory_limit','512M');
+        ini_set('memory_limit', '512M');
         $stores = Store::query()->whereIn('asn_code', array_unique(data_get($asnDetails, '*.asnno')))->get();
-        $store_asn_code_map = [];
 
+        $store_asn_code_map = [];
         foreach ($stores as $store) {
             $store_asn_code_map[$store->asn_code] = $store;
         }
         $params = $this->getParamsByAsnDetails($asnDetails, $store_asn_code_map);
-        if (count($params) > 0) {
-            $this->insertStoreItem($params);
-        }
+        if (count($params) > 0) $this->insertStoreItem($params);
+
     }
 
     public function getParamsByAsnDetails($asnDetails, $store_asn_code_map)
     {
-        /** @var DataHandlerService $dataHandlerService */
+        /**
+         * @var DataHandlerService $dataHandlerService
+         * @var CommodityService $commodityService
+         */
         $dataHandlerService = app(DataHandlerService::class);
+        $commodityService = app(CommodityService::class);
+        $owners = Owner::query()->whereIn('code', array_unique(data_get($asnDetails,'*.customerid')))->get();
+        $owner_map=[];
+        foreach ($owners as $owner){
+            $owner_map[$owner->code]=$owner->id;
+        }
+        $maps = [];
+        foreach ($asnDetails as $asnDetail) {
+            $value = [
+                'owner_code' => $asnDetail->customerid,
+                'sku' => $asnDetail->sku,
+            ];
+            $maps[json_encode($value)] = $value;
+        }
+        $commodities=$commodityService->getCommoditiesByMaps($maps);
+        $commodities_map= $dataHandlerService->dataHeader(['owner_id','sku'], $commodities);
         $storeItems = $this->getByWms($asnDetails);
-        $storeItem_map = $dataHandlerService->dataHeader(['store_asn_code', 'asn_line_code', 'sku'], $storeItems);
+        $storeItem_map = $dataHandlerService->dataHeader(['store_asn_code', 'asn_line_code', 'commodity_id'], $storeItems);
         $params = [];
         foreach ($asnDetails as $asnDetail) {
+            $commodity=$dataHandlerService->getKeyValue(['owner_id'=>$owner_map[$asnDetail->customerid],'sku'=>$asnDetail->sku],$commodities_map);
+            if (!$commodity)continue;
             $storeItem = $dataHandlerService
-                ->getKeyValue(['store_asn_code' => $asnDetail->asnno, 'asn_line_code' => $asnDetail->asnlineno, 'sku' => $asnDetail->sku], $storeItem_map);
+                ->getKeyValue(['store_asn_code' => $asnDetail->asnno, 'asn_line_code' => $asnDetail->asnlineno, 'commodity_id' => $commodity->id], $storeItem_map);
             if ($storeItem ?? false) continue;
-            $status=null;
-            if ($asnDetail->lineStatus && $asnDetail->lineStatus->codename_c=='完全收货') $status='已入库';
-            if ($asnDetail->lineStatus && $asnDetail->lineStatus->codename_c=='订单创建') $status='未入库';
+            $status = null;
+            if ($asnDetail->lineStatus && $asnDetail->lineStatus->codename_c == '完全收货') $status = '已入库';
+            if ($asnDetail->lineStatus && $asnDetail->lineStatus->codename_c == '订单创建') $status = '未入库';
             //if (empty($store_asn_code_map[$asnDetail->asnno])) continue;
             $params[] = [
                 'store_id' => $store_asn_code_map[$asnDetail->asnno]['id'],
                 'asn_line_code' => (string)$asnDetail->asnlineno,
+                'commodity_id' => $commodity->id,
                 'name' => $asnDetail->skudescrc,
                 'sku' => $asnDetail->sku,
-                'barcode' => $asnDetail->basSku ? $asnDetail->basSku->alternate_sku1 : '',
                 'amount' => $asnDetail->receivedqty ?? 0,
-                'quality' => $asnDetail->qualityStatus ? $asnDetail->qualityStatus->codename_c : '',
-                'status' => $status ? $status :$asnDetail->lineStatus->codename_c,
+                'quality' => $asnDetail->qualityStatus ?$asnDetail->qualityStatus->codename_c :' ',
+                'status' => $status ? $status : $asnDetail->lineStatus->codename_c,
                 'created_at' => $asnDetail->addtime ?? null,
                 'updated_at' => $asnDetail->edittime ?? null,
             ];
@@ -94,64 +140,88 @@ Class StoreItemService
 
     public function insertStoreItem(array $params)
     {
-        if (count($params) === 0) return [];
-        try {
-            $this->insert($params);
-            LogService::log(__METHOD__, __FUNCTION__, '批量创建 store_item success' . count($params) . json_encode($params));
-        } catch (\Exception $e) {
-            LogService::log(__METHOD__, __FUNCTION__, '批量创建 store_item error' . json_encode($params) . '||' . $e->getMessage() . '||' . $e->getTraceAsString());
+        if (count($params) === 0) return;
+        foreach (array_chunk($params, 1000) as $item) {
+            try {
+                $bool = $this->insert($item);
+                if ($bool) {
+                    app('LogService')->log(__METHOD__, __FUNCTION__, "批量创建 store_item success " . count($item) . ' || ' . json_encode($item));
+                } else app('LogService')->log(__METHOD__, __FUNCTION__, "批量添加 store_item FAILED " . ' || ' . json_encode($item));
+            } catch (\Exception $e) {
+                app('LogService')->log(__METHOD__, __FUNCTION__, "批量添加 store_item ERROR " . ' || ' . json_encode($params) . ' || ' . json_encode($e->getMessage()) . ' || ' . json_encode($e->getTraceAsString()));
+            }
         }
     }
-
+    //TODO
     public function updateStoreItem($asnDetails)
     {
         if (!$asnDetails || $asnDetails->count() == 0) {
             return null;
         }
-        /** @var DataHandlerService $dataHandlerService */
+        /**
+         * @var DataHandlerService $dataHandlerService
+         * @var CommodityService $commodityService
+         */
         $dataHandlerService = app(DataHandlerService::class);
+        $commodityService = app(CommodityService::class);
+        $owners = Owner::query()->whereIn('code', array_unique(data_get($asnDetails,'*.customerid')))->get();
+        $owner_map=[];
+        foreach ($owners as $owner){
+            $owner_map[$owner->id]=$owner->code;
+        }
+        $maps = [];
+        foreach ($asnDetails as $asnDetail) {
+            $value = [
+                'owner_code' => $asnDetail->customerid,
+                'sku' => $asnDetail->sku,
+            ];
+            $maps[json_encode($value)] = $value;
+        }
+        $commodities=$commodityService->getCommoditiesByMaps($maps);
+        $commodities_map= $dataHandlerService->dataHeader(['id'], $commodities);
         $storeItems = $this->getByWms($asnDetails);
-        $asnDetails_map = $dataHandlerService->dataHeader(['asnno', 'asnlineno', 'sku'], $asnDetails);
+        $asnDetails_map = $dataHandlerService->dataHeader(['asnno', 'asnlineno','customerid','sku'], $asnDetails);
         $updateParams = [[
             'id', 'store_id', 'asn_line_code', 'name', 'sku', 'barcode', 'amount', 'quality', 'status', 'created_at', 'updated_at'
         ]];
         $delete_storeItems = [];
         foreach ($storeItems as $storeItem) {
+            $commodity=$dataHandlerService->getKeyValue(['id'=>$storeItem->commodity_id],$commodities_map);if (!$commodity)continue;
             $asnDetail = $dataHandlerService
-                ->getKeyValue(['asnno' => $storeItem->store_asn_code, 'asnlineno' => $storeItem->asn_line_code, 'sku' => $storeItem->sku], $asnDetails_map);
+                ->getKeyValue(['asnno' => $storeItem->store_asn_code, 'asnlineno' => $storeItem->asn_line_code,'customerid'=>$owner_map[$commodity->owner_id],'sku' => $commodity->sku], $asnDetails_map);
             if (!$asnDetail) {
                 array_push($delete_storeItems, $storeItem);
                 continue;
             }
-            $status=null;
-            if ($asnDetail->lineStatus && $asnDetail->lineStatus->codename_c=='完全收货') $status='已入库';
-            if ($asnDetail->lineStatus && $asnDetail->lineStatus->codename_c=='订单创建') $status='未入库';
-            if ($storeItem->asn_line_code != $asnDetail['asnlineno'] ||
-                $storeItem->name != $asnDetail['skudescrc'] ||
-                $storeItem->sku != $asnDetail['sku'] ||
-                $storeItem->barcode != $asnDetail['basSku']['alternate_sku1'] ||
-                $storeItem->amount != $asnDetail['receivedqty'] ||
-                $storeItem->quality != $asnDetail['qualityStatus'] ?? $asnDetail['qualityStatus']['codename_c'] ||
-                $storeItem->status != $asnDetail['lineStatus'] ?? $asnDetail['lineStatus']['codename_c'] ||
-                $storeItem->created_at != $asnDetail['addtime'] ||
-                $storeItem->updated_at != $asnDetail['edittime']) {
+            $status = null;
+            if ($asnDetail->lineStatus && $asnDetail->lineStatus->codename_c == '完全收货') $status = '已入库';
+            if ($asnDetail->lineStatus && $asnDetail->lineStatus->codename_c == '订单创建') $status = '未入库';
+            if ($storeItem->updated_at != $asnDetail->edittime) {
                 $updateParams[] = [
                     'id' => $storeItem->id,
                     'store_id' => $storeItem->store->id,
-                    'asn_line_code' => (string)$asnDetail['asnlineno'],
-                    'name' => $asnDetail['skudescrc'],
-                    'sku' => $asnDetail['sku'],
-                    'barcode' => $asnDetail['basSku'] ? $asnDetail['basSku']['alternate_sku1'] : '',
-                    'amount' => $asnDetail['receivedqty'] ?? 0,
-                    'quality' => $asnDetail['qualityStatus'] ? $asnDetail['qualityStatus']['codename_c'] : '',
-                    'status' => $status ? $status :$asnDetail['lineStatus']['codename_c'],
-                    'created_at' => $asnDetail['addtime'] ?? null,
-                    'updated_at' => $asnDetail['edittime'],
+                    'asn_line_code' => (string)$asnDetail->asnlineno,
+                    'name' => $asnDetail->skudescrc,
+                    'sku' => $asnDetail->sku,
+                    'amount' => $asnDetail->receivedqty ?? 0,
+                    'quality' => $asnDetail->qualityStatus ?$asnDetail->qualityStatus->codename_c :' ',
+                    'status' => $status ? $status : $asnDetail->lineStatus->codename_c,
+                    'created_at' => $asnDetail->addtime ?? null,
+                    'updated_at' => $asnDetail->edittime ?? null,
                 ];
             }
         }
-        if (count($updateParams) > 1) {
-            $this->batchUpdate($updateParams);
+        if (count($updateParams) > 0) {
+            foreach (array_chunk($updateParams, 1000) as $item) {
+                try {
+                    $bool = $this->batchUpdate($item);
+                    if ($bool) {
+                        app('LogService')->log(__METHOD__, __FUNCTION__, "批量修改 store_item success " . count($item) . ' || ' . json_encode($item));
+                    } else app('LogService')->log(__METHOD__, __FUNCTION__, "批量修改 store_item FAILED " . ' || ' . json_encode($item));
+                } catch (\Exception $e) {
+                    app('LogService')->log(__METHOD__, __FUNCTION__, "批量修改 store_item ERROR " . ' || ' . json_encode($updateParams) . ' || ' . json_encode($e->getMessage()) . ' || ' . json_encode($e->getTraceAsString()));
+                }
+            }
         }
         if (count($delete_storeItems) > 0) $this->deleteStoreItem($delete_storeItems);
         unset($updateParams, $asnDetails, $delete_storeItems);

+ 26 - 18
app/Services/StoreService.php

@@ -15,7 +15,7 @@ Class StoreService
 {
     private function conditionQuery(array $params)
     {
-        $stores = Store::query()->with(['storeItems.store', 'warehouse', 'owner'])->whereNotIn('stored_method', ['快速入库', '正常'])->orderBy('id', 'DESC');
+        $stores = Store::query()->with(['storeItems.store', 'warehouse', 'owner'])->where('is_fast_stored', '无')->orderBy('id', 'DESC');
         $columnQueryRules = [
             'asn_code' => ['like' => ''],
             'created_at_start' => ['alias' => 'created_at', 'startDate' => ' 00:00:00'],
@@ -107,9 +107,7 @@ Class StoreService
             $warehouses_code_map[$warehouse->code] = $warehouse;
         }
         $params = $this->getParamsByAsnHeader($asnHerders, $owners_code_map, $warehouses_code_map);
-        if (count($params) > 0) {
-            $this->insertStore($params);
-        }
+        if (count($params) > 0) $this->insertStore($params);
         /** @var StoreItemService $storeItemService */
         $storeItemService = app(StoreItemService::class);
         $storeItemService->storeItemCreateByWms($asnHerders);
@@ -150,12 +148,16 @@ Class StoreService
 
     public function insertStore(array $params)
     {
-        if (count($params) === 0) return [];
-        try {
-            $this->insert($params);
-            LogService::log(__METHOD__, __FUNCTION__, '批量创建 store success' . count($params) . json_encode($params));
-        } catch (\Exception $e) {
-            LogService::log(__METHOD__, __FUNCTION__, '批量创建 store error' . json_encode($params) . '||' . json_encode($e->getMessage()) . '||' . $e->getTraceAsString());
+        if (count($params) === 0) return;
+        foreach (array_chunk($params, 1000) as $item) {
+            try {
+                $bool = $this->insert($item);
+                if ($bool) {
+                    app('LogService')->log(__METHOD__, __FUNCTION__, "批量创建 store success " . count($item) . ' || ' . json_encode($item));
+                } else app('LogService')->log(__METHOD__, __FUNCTION__, "批量添加 store FAILED " . ' || ' . json_encode($item));
+            } catch (\Exception $e) {
+                app('LogService')->log(__METHOD__, __FUNCTION__, "批量添加 store ERROR " . ' || ' . json_encode($params) . ' || ' . json_encode($e->getMessage()) . ' || ' . json_encode($e->getTraceAsString()));
+            }
         }
     }
 
@@ -187,14 +189,9 @@ Class StoreService
         $updateParams = [[
             'id', 'asn_code', 'warehouse_id', 'owner_id', 'stored_method', 'status', 'remark', 'updated_at'
         ]];
-//        $KSRK = [];
         foreach ($asnHerders as $asnHerder) {
             $store = $dataHandlerService->getKeyValue(['asn_code' => $asnHerder->asnno], $store_asn_code_map);
             if (!$store) continue;
-//            if ($store && $store->stored_method == '快速入库') {
-//                array_push($KSRK, $store['asn_code']);
-//                continue;
-//            }
             $owner = $dataHandlerService->getKeyValue(['code' => $asnHerder->customerid], $owner_code_map);
             $warehouse = $dataHandlerService->getKeyValue(['code' => $asnHerder->warehouseid], $warehouses_map);
             $owner_id = $owner->id ?? null;
@@ -220,10 +217,21 @@ Class StoreService
                 ];
             }
         }
-        if (count($updateParams) > 1) $this->batchUpdate($updateParams);
+        if (count($updateParams) > 1) {
+            foreach (array_chunk($updateParams, 1000) as $item) {
+                try {
+                    $bool=$this->batchUpdate($item);
+                    if ($bool) {
+                        app('LogService')->log(__METHOD__, __FUNCTION__, "批量修改 store success " . count($item) . ' || ' . json_encode($item));
+                    } else app('LogService')->log(__METHOD__, __FUNCTION__, "批量修改 store FAILED " . ' || ' . json_encode($item));
+                } catch (\Exception $e) {
+                    app('LogService')->log(__METHOD__, __FUNCTION__, "批量修改 store ERROR " . ' || ' . json_encode($updateParams) . ' || ' . json_encode($e->getMessage()) . ' || ' . json_encode($e->getTraceAsString()));
+                }
+            }
+        }
         /** @var StoreItemService $storeItemService */
-        $storeItemService = app(StoreItemService::class);
-        $storeItemService->storeItemUpdateByWms($asnHerders);
+        //$storeItemService = app(StoreItemService::class);
+        //$storeItemService->storeItemUpdateByWms($asnHerders);
         /** @var RejectedBillService $rejectedBillService */
         $rejectedBillService = app(RejectedBillService::class);
         $rejectedBillService->syncLoadedStatusByAsnHerder($asnHerders);

+ 2 - 2
database/migrations/2020_11_03_180029_change_store_items_status_column.php

@@ -14,7 +14,7 @@ class ChangeStoreItemsStatusColumn extends Migration
      */
     public function up()
     {
-//        DB::statement("ALTER TABLE store_items MODIFY COLUMN status enum ('无需入库','已入库','未入库','待推单','完全收货','部分收货','已码盘','订单创建','ASN关闭','等待释放','收货取消') default null");
+        DB::statement("ALTER TABLE store_items MODIFY COLUMN status enum ('无需入库','已入库','未入库','待推单','完全收货','部分收货','已码盘','订单创建','ASN关闭','等待释放','收货取消') default null");
         Schema::table('store_items', function (Blueprint $table) {
         });
     }
@@ -26,7 +26,7 @@ class ChangeStoreItemsStatusColumn extends Migration
      */
     public function down()
     {
-//        DB::statement("ALTER TABLE store_items MODIFY COLUMN status enum ('无需入库','已入库','未入库','待推单') default null");
+        DB::statement("ALTER TABLE store_items MODIFY COLUMN status enum ('无需入库','已入库','未入库','待推单') default null");
         Schema::table('store_items', function (Blueprint $table) {
         });
     }

+ 32 - 0
database/migrations/2020_12_16_131735_add_commodity_id_column_to_store_items.php

@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class AddCommodityIdColumnToStoreItems extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('store_items', function (Blueprint $table) {
+            $table->string('commodity_id')->index()->nullable()->comment('商品id');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('store_items', function (Blueprint $table) {
+            $table->dropColumn('commodity_id');
+        });
+    }
+}

+ 0 - 88
tests/Services/CommodityService/GetCommodityByOwnerCodeAndSKUTest.php

@@ -1,88 +0,0 @@
-<?php
-
-namespace Tests\Feature\Services\CommodityService;
-
-use App\Commodity;
-use App\OracleBasSKU;
-use App\Owner;
-use App\Services\CommodityService;
-use App\Services\OracleBasSkuService;
-use Illuminate\Foundation\Testing\RefreshDatabase;
-use Tests\TestCase;
-
-class GetCommodityByOwnerCodeAndSKUTest extends TestCase
-{
-    /**
-     * @var CommodityService $service
-     */
-    private $service;
-    private $data = [];
-
-    public function setUp(): void
-    {
-        parent::setUp(); // TODO: Change the autogenerated stub
-        $this->service = app('CommodityService');
-        $owner =  factory(Owner::class)->create();
-        $basSKU = factory(OracleBasSKU::class)->make(['customerid'=>$owner->code]);
-        $this->data['owner'] = $owner;
-        $this->data['basSKU'] = $basSKU;
-        $this->data['commodity1'] = factory(Commodity::class)->create([
-            'owner_id' => $this->data['owner']['id'] ?? '',
-            'sku' => $this->data['basSKU']['sku'],
-            'name' =>$this->data['basSKU']['descr_c'],
-            'length' =>$this->data['basSKU']['skulength'],
-            'width' => $this->data['basSKU']['skuwidth'],
-            'height' => $this->data['basSKU']['skuhigh'],
-            'volumn' => $this->data['basSKU']['cube']
-        ]);
-        $this->mock(OracleBasSkuService::class,function($mock)use($basSKU){
-            $mock->shouldReceive('first')->andReturn($basSKU);
-        });
-
-    }
-
-    /**
-     * @test
-     */
-    public function getCommodityByOwnerCodeAndSKU()
-    {
-        $owner_code = $this->data['owner']['code'];
-        $sku = $this->data['basSKU']['sku'];
-        $commodity = $this->service->getCommodityByOwnerCodeAndSKU($owner_code,$sku);
-        $this->data['commodity'] = $commodity;
-        $this->assertEquals($commodity['owner_id'],$this->data['owner']['id']);
-        $this->assertEquals($commodity['sku'],$this->data['basSKU']['sku']);
-        $this->assertEquals($commodity['name'],$this->data['basSKU']['descr_c']);
-        $this->assertEquals($commodity['length'],$this->data['basSKU']['skulength']);
-        $this->assertEquals($commodity['width'],$this->data['basSKU']['skuwidth']);
-        $this->assertEquals($commodity['height'],$this->data['basSKU']['skuhigh']);
-        $this->assertEquals($commodity['volumn'],$this->data['basSKU']['cube']);
-    }
-
-    /**
-     * @test
-     */
-    public function commodityIsNotExist()
-    {
-        $this->data['commodity1']->delete();
-        $owner_code = $this->data['owner']['code'];
-        $sku = $this->data['basSKU']['sku'];
-        $commodity = $this->service->getCommodityByOwnerCodeAndSKU($owner_code,$sku);
-        $this->assertNotNull($commodity->owner_id);
-        $this->assertEquals($commodity['owner_id'],$this->data['owner']['id']);
-        $this->assertEquals($commodity['sku'],$this->data['basSKU']['sku']);
-        $this->assertEquals($commodity['name'],$this->data['basSKU']['descr_c']);
-        $this->assertEquals($commodity['length'],$this->data['basSKU']['skulength']);
-        $this->assertEquals($commodity['width'],$this->data['basSKU']['skuwidth']);
-        $this->assertEquals($commodity['height'],$this->data['basSKU']['skuhigh']);
-        $this->assertEquals($commodity['volumn'],$this->data['basSKU']['cube']);
-    }
-
-    public function tearDown(): void
-    {
-        $this->data['owner']->delete();
-        $this->data['commodity1']->delete();
-        if(isset($this->data['commodity1']))$this->data['commodity1']->delete();
-        parent::tearDown(); // TODO: Change the autogenerated stub
-    }
-}

+ 47 - 0
tests/Services/CommodityService/Get_HasOwnerIdsAndSkusTest.php

@@ -0,0 +1,47 @@
+<?php
+
+
+namespace Tests\Services\CommodityService;
+
+
+use App\Commodity;
+use App\CommodityBarcode;
+use App\OracleBasSKU;
+use App\Owner;
+use App\Services\CommodityService;
+use Tests\TestCase;
+
+class Get_HasOwnerIdsAndSkusTest extends TestCase
+{
+    /** @var CommodityService $service */
+    private $service;
+    private $data = [];
+    public function setUp(): void
+    {
+        parent::setUp(); // TODO: Change the autogenerated stub
+        cache()->flush();
+        $this->service = app('CommodityService');
+        $owner =  factory(Owner::class)->create();
+        $commodity=factory(Commodity::class)->create(['owner_id'=>$owner->id]);
+        $this->data['owner'] = $owner;
+        $this->data['commodity'] = $commodity;
+        $this->data['basSku']=OracleBasSKU::query()->orderByDesc('edittime')->first();
+    }
+
+
+    public function testGet_HasOwnerIdsAndSkus()
+    {
+        $commodities=$this->service->get_([$this->data['commodity']['owner_id']],[$this->data['commodity']['sku']]);
+        $this->assertEquals(1,count($commodities));
+    }
+    public function tearDown(): void
+    {
+        $commodity_id=Commodity::query()->where('owner_id',$this->data['commodity']['owner_id'])->value('id');
+        Commodity::query()->where('owner_id',$this->data['owner']['id'])->delete();
+        CommodityBarcode::query()->where('commodity_id',$commodity_id)->delete();
+        $this->data['owner']->delete();
+        $this->data['commodity']->delete();
+        cache()->flush();
+        parent::tearDown(); // TODO: Change the autogenerated stub
+    }
+}

+ 45 - 0
tests/Services/CommodityService/Get_OnlyownerIdsTest.php

@@ -0,0 +1,45 @@
+<?php
+
+
+namespace Tests\Services\CommodityService;
+
+
+use App\Commodity;
+use App\CommodityBarcode;
+use App\OracleBasSKU;
+use App\Owner;
+use App\Services\CommodityService;
+use Tests\TestCase;
+
+class Get_OnlyOwnerIdsTest extends TestCase
+{
+    /** @var CommodityService $service */
+    private $service;
+    private $data = [];
+    public function setUp(): void
+    {
+        parent::setUp(); // TODO: Change the autogenerated stub
+        $this->service = app('CommodityService');
+        $owner =  factory(Owner::class)->create();
+        $commodity=factory(Commodity::class)->create(['owner_id'=>$owner->id]);
+        $this->data['owner'] = $owner;
+        $this->data['commodity'] = $commodity;
+    }
+
+    public function testGet_OnlyOwnerIds()
+    {
+        $commodities=$this->service->get_([$this->data['commodity']['owner_id']]);
+        $this->assertNotNull($commodities);
+        $this->assertEquals($this->data['commodity']['sku'],$commodities->first()['sku']);
+    }
+    public function tearDown(): void
+    {
+        $commodity_id=Commodity::query()->where('owner_id',$this->data['commodity']['owner_id'])->value('id');
+        Commodity::query()->where('owner_id',$this->data['owner']['id'])->delete();
+        CommodityBarcode::query()->where('commodity_id',$commodity_id)->delete();
+        $this->data['owner']->delete();
+        $this->data['commodity']->delete();
+        cache()->flush();
+        parent::tearDown(); // TODO: Change the autogenerated stub
+    }
+}

+ 6 - 18
tests/Services/CommodityService/Get_Test.php → tests/Services/CommodityService/Get_SyncAndSelectTest.php

@@ -11,7 +11,7 @@ use App\Owner;
 use App\Services\CommodityService;
 use Tests\TestCase;
 
-class Get_Test extends TestCase
+class Get_SyncAndSelect_Test extends TestCase
 {
     /** @var CommodityService $service */
     private $service;
@@ -28,33 +28,21 @@ class Get_Test extends TestCase
         $this->data['commodity'] = $commodity;
         $this->data['basSku']=OracleBasSKU::query()->orderByDesc('edittime')->first();
     }
-
-    public function testGet_OnlyOwnerIds()
-    {
-        $commodities=$this->service->get_([$this->data['commodity']['owner_id']]);
-        $this->assertNotNull($commodities);
-        $this->assertEquals($this->data['commodity']['sku'],$commodities->first()['sku']);
-    }
-    public function testGet_HasOwnerIdsAndSkus()
-    {
-        $commodities=$this->service->get_([$this->data['commodity']['owner_id']],[$this->data['commodity']['sku']]);
-        $this->assertEquals(1,count($commodities));
-    }
     public function testGet_SyncAndSelect()
     {
-        if ($this->data['basSku']) $this->assertNotNull($this->data['basSku']);
+        //if ($this->data['basSku']) $this->assertNotNull($this->data['basSku']);
         $this->owner_id=Owner::query()->where('code',$this->data['basSku']['customerid'])->value('id');
-        $commodities=$this->service->get_([ $this->owner_id],[$this->data['basSku']['sku']],[],true);
+        $commodities=$this->service->get_([$this->owner_id],[$this->data['basSku']['sku']],[],true);
         $this->assertEquals($this->data['basSku']['sku'],$commodities->first()['sku']);
     }
 
     public function tearDown(): void
     {
-        $this->data['owner']->delete();
-        $this->data['commodity']->delete();
         $commodity_id=Commodity::query()->where('owner_id',$this->owner_id)->value('id');
-        Commodity::query()->where('id',$commodity_id)->delete();
+        Commodity::query()->whereIn('owner_id',[$this->owner_id,$this->data['owner']['id']])->delete();
         CommodityBarcode::query()->where('commodity_id',$commodity_id)->delete();
+        $this->data['owner']->delete();
+        $this->data['commodity']->delete();
         cache()->flush();
         parent::tearDown(); // TODO: Change the autogenerated stub
     }