فهرست منبع

入库同步问题解决

haozi 4 سال پیش
والد
کامیت
8bdf671420
3فایلهای تغییر یافته به همراه77 افزوده شده و 45 حذف شده
  1. 72 0
      app/Http/Controllers/TestController.php
  2. 2 25
      app/Services/StoreItemService.php
  3. 3 20
      app/Services/StoreService.php

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

@@ -56,6 +56,7 @@ use App\Services\OwnerStoreOutFeeReportService;
 use App\Services\ReviewService;
 use App\Services\StationService;
 use App\Services\StorageService;
+use App\Services\StoreService;
 use App\Station;
 use App\StationTask;
 use App\StationTaskMaterialBox;
@@ -412,4 +413,75 @@ sql;
 //            ->pluck('logistic_number');
 //        $service->syncLogisticRouteByAliJiSu($logistic_numbers);
     }
+
+    public function store()
+    {
+        ini_set('max_execution_time', 0);
+        ini_set('memory_limit', '1024M');
+        $now = Carbon::now();
+        $startDate = $this->getDate();
+        $diffDay = 360; // 天数
+        for($i = 0;$i<=$diffDay;$i++){
+            $endDate = Carbon::parse($startDate)->addMinutes(1)->toDateTimeString();
+            $doc_asn_headers = $this->getDocAsnHeader($startDate,$endDate);
+            if (count($doc_asn_headers)>0){
+                $this->syncStores($doc_asn_headers);
+                $this->syncDate($endDate);
+            }
+            $startDate = $endDate;
+        }
+        ValueStore::query()->updateOrCreate([
+            'name' => 'last_asn_sync_task_end_at',
+        ], [
+            'name' => 'last_asn_sync_task_end_at',
+            'value' => $now,
+        ]);
+    }
+
+
+
+    public function getDocAsnHeader($startDate,$endDate)
+    {
+        return OracleDOCASNHeader::query()
+            ->with(['asnType', 'asnStatus'])
+            ->select('asnno','asnstatus','asntype','addtime','edittime','customerid','notes','warehouseid','asnreference3','asnreference2')
+            ->where('EditTime', '>=', $startDate)
+            ->where('EditTime', '<=', $endDate)
+            ->whereColumn('EditTime', '<>', 'addTime')
+            ->orderByDesc('EditTime')
+            ->get();
+    }
+
+    public function getDate(){
+        return ValueStore::query()->where('name','asn_last_updated_sync_at')->value('value');
+    }
+
+    public function syncStores($doc_asn_headers){
+        $service = new StoreService();
+        $service->createStore($doc_asn_headers,"update");
+        $service->updateStore($doc_asn_headers);
+        $service->createStoreRejected($doc_asn_headers);
+        unset($doc_asn_headers);
+    }
+
+    public function syncDate($date)
+    {
+        // 同步更新时间
+        ValueStore::query()->updateOrCreate([
+            'name' => 'asn_last_updated_sync_at',
+        ], [
+            'name' => 'asn_last_updated_sync_at',
+            'value' => $date,
+        ]);
+    }
+
+    public function clearCache()
+    {
+        $service = new StoreService();
+        $update_set = config('sync.asn_sync.cache_prefix.update_set');
+        $update_keys = config('sync.asn_sync.cache_prefix.update_keys');
+        $service->deleteCacheKey($update_set, $update_keys);
+        // 清空保存 ans  号的栈
+        // 清除 更新时间 开始 结束
+    }
 }

+ 2 - 25
app/Services/StoreItemService.php

@@ -40,34 +40,11 @@ class StoreItemService
             $asnnos->add($asnHerder->asnno);
         }
         $asnnos = $asnnos->unique()->toArray();
-        $asnDetails=OracleDOCASNDetail::query()
+        return 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;
     }
 
     public function createStoreItem($asnDetails)
@@ -85,7 +62,7 @@ class StoreItemService
 
     }
 
-    public function getParamsByAsnDetails($asnDetails, $store_asn_code_map)
+    public function getParamsByAsnDetails($asnDetails, $store_asn_code_map): array
     {
         /**
          * @var DataHandlerService $dataHandlerService

+ 3 - 20
app/Services/StoreService.php

@@ -92,15 +92,10 @@ class StoreService
         $last_time = $asnHerders->first()['edittime'];
         $last_records = $asnHerders->where('edittime', $last_time);
         $this->createStore($asnHerders,"update");
-
         $this->updateStore($asnHerders);
-
         $this->createStoreRejected($asnHerders);
-
         $this->deleteCacheKey($update_set, $update_keys);
-
         $this->setLastRecordsByRedis($update_key, $update_set, $update_keys, $last_records);
-
         $this->setAsnLastSyncAt($updated_at, $last_time);
 
     }
@@ -137,9 +132,8 @@ class StoreService
         $rejectedBillService = app(RejectedBillService::class);
         $rejectedBillService->syncLoadedStatusByAsnHerder($asnHerders);
         if (!$isUpdate)$this->pushJob($asnHerders);
-        app('LogService')
-            ->log(__METHOD__, __FUNCTION__, '11 更新中创建createStore:'.$isUpdate . $asnHerders );
-        unset($asnHerders, $owners_code_map, $warehouses_code_map);
+        if (!$isUpdate) unset($asnHerders);
+        unset($owners_code_map, $warehouses_code_map);
     }
 
     public function getParamsByAsnHeader($asnHerders, $owners_code_map, $warehouses_code_map)
@@ -233,11 +227,7 @@ class StoreService
                 ];
             }
         }
-        if (count($updateParams) > 1) {
-            $res=$this->batchUpdate($updateParams);
-            app('LogService')
-                ->log(__METHOD__, __FUNCTION__, '11 批量更新:' . $res . ' | '.json_encode($updateParams));
-        }
+        if (count($updateParams) > 1) {$this->batchUpdate($updateParams);}
         /** @var StoreItemService $storeItemService */
         $storeItemService = app(StoreItemService::class);
         $storeItemService->storeItemUpdateByWms($asnHerders);
@@ -245,8 +235,6 @@ class StoreService
         $rejectedBillService = app(RejectedBillService::class);
         $rejectedBillService->syncLoadedStatusByAsnHerder($asnHerders);
         $this->pushJob($asnHerders);
-        app('LogService')
-            ->log(__METHOD__, __FUNCTION__, '11 updateStore:'.$updateParams);
         unset($updateParams, $asnHerders);
     }
 
@@ -295,7 +283,6 @@ class StoreService
             'name' => $key,
             'value' => $last_time,
         ]);
-        LogService::log(__METHOD__, __FUNCTION__, '11 setAsnLastSyncAt' . $key . json_encode($asnLastSyncAt));
         return $asnLastSyncAt;
     }
 
@@ -309,8 +296,6 @@ class StoreService
             }
             Cache::forget($keys);
         }
-        app('LogService')
-            ->log(__METHOD__, __FUNCTION__, '11 deleteCacheKey:' );
     }
 
     public function setLastRecordsByRedis($prefixKey, $set, $keys, $last_records)
@@ -322,8 +307,6 @@ class StoreService
         }
         Cache::put($keys, $cacheKeys);
         Cache::put($set, true);
-        app('LogService')
-            ->log(__METHOD__, __FUNCTION__, '11 setLastRecordsByRedis:'. $prefixKey.'||'. $set.'||'. $keys.'||'. $last_records);
     }
 
     public function createInstantBill(Store $store): bool