|
|
@@ -5,7 +5,6 @@ namespace App\Console\Commands;
|
|
|
use App\Order;
|
|
|
use App\OrderBin;
|
|
|
use App\Services\BatchService;
|
|
|
-use App\Services\CacheService;
|
|
|
use App\Services\common\BatchUpdateService;
|
|
|
use App\Services\DocWaveHeaderService;
|
|
|
use App\Services\LogService;
|
|
|
@@ -39,13 +38,37 @@ class SyncBatchTask extends Command
|
|
|
$this->disposeDetail();
|
|
|
}
|
|
|
|
|
|
- private function disposeHeader()
|
|
|
+ private function disposeHeader($date = null)
|
|
|
{
|
|
|
- //获取更新时间与WMS数据
|
|
|
- $date = $this->service->getSyncDate();
|
|
|
- $waves = $this->service->get(["edittime"=>$date],["edittime"=>"gtOrEqual"]);
|
|
|
- if (count($waves) < 1)return;
|
|
|
+ DB::transaction(function ()use($date){
|
|
|
+ //获取更新时间与WMS数据
|
|
|
+ if (!$date){
|
|
|
+ $valueStore = ValueStore::query()->where("name","wave_last_sync_date")->lockForUpdate()->first();
|
|
|
+ $date = $valueStore->value ?? Carbon::now()->subSeconds(65)->toDateTimeString();
|
|
|
+ }
|
|
|
+
|
|
|
+ $count = DB::connection("oracle")->selectOne(DB::raw("SELECT COUNT(*) count FROM DOC_WAVE_HEADER WHERE EDITTIME >= TO_DATE(?,'yyyy-mm-dd hh24:mi:ss')"),[$date]);
|
|
|
+
|
|
|
+ if ($count->count > 500){
|
|
|
+ $query = DB::raw(<<<sql
|
|
|
+ SELECT * FROM (SELECT header.*, ROWNUM AS rowno FROM (
|
|
|
+SELECT * FROM DOC_WAVE_HEADER WHERE EDITTIME >= TO_DATE(?,'yyyy-mm-dd hh24:mi:ss')
|
|
|
+ORDER BY EDITTIME)header WHERE ROWNUM <= 500)wave WHERE wave.rowno >= 0
|
|
|
+sql
|
|
|
+ );
|
|
|
+ $waves = DB::connection("oracle")->select($query,[$date]);
|
|
|
+ $this->headerExe($waves);
|
|
|
+ $this->disposeHeader($waves[count($waves)-1]->edittime);
|
|
|
+ }else{
|
|
|
+ $waves = $this->service->get(["edittime"=>$date],["edittime"=>"gtOrEqual"]);
|
|
|
+ $this->headerExe($waves);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
|
|
|
+ private function headerExe($waves)
|
|
|
+ {
|
|
|
+ if (count($waves) < 1)return;
|
|
|
//获取本地数据对比差异
|
|
|
$codes = array_column($waves->toArray(),"waveno");
|
|
|
$map = [];
|
|
|
@@ -92,18 +115,36 @@ class SyncBatchTask extends Command
|
|
|
$this->batchService->insert($insert);
|
|
|
LogService::log(__METHOD__,"SUCCESS-同步插入波次成功",json_encode($insert));
|
|
|
}
|
|
|
- $lastDate = $waves[0]->edittime;
|
|
|
- $this->service->setSyncDate($lastDate);
|
|
|
+ ValueStore::query()->where("name","wave_last_sync_date")->update(["value"=>$waves[count($waves)-1]->editime]);
|
|
|
}
|
|
|
|
|
|
- public function disposeDetail()
|
|
|
+ public function disposeDetail($date = null)
|
|
|
{
|
|
|
- $date = app(CacheService::class)->getOrExecute("wave_detail_last_sync_date",function (){
|
|
|
- $valueStore = ValueStore::query()->where("name","wave_detail_last_sync_date")->first();
|
|
|
- return $valueStore->value ?? Carbon::now()->subSeconds(65)->toDateTimeString();
|
|
|
+ DB::transaction(function ()use($date){
|
|
|
+ if (!$date){
|
|
|
+ $valueStore = ValueStore::query()->where("name","wave_detail_last_sync_date")->lockForUpdate()->first();
|
|
|
+ $date = $valueStore->value ?? Carbon::now()->subSeconds(65)->toDateTimeString();
|
|
|
+ }
|
|
|
+ $count = DB::connection("oracle")->selectOne(DB::raw("SELECT count(*) count FROM DOC_WAVE_DETAILS WHERE EDITTIME >= TO_DATE(?,'yyyy-mm-dd hh24:mi:ss')"),[$date]);
|
|
|
+ if ($count->count > 1000){
|
|
|
+ $sql = <<<sql
|
|
|
+ SELECT * FROM (SELECT ORDERNO,WAVENO,SEQNO,EDITTIME, ROWNUM AS rowno FROM (
|
|
|
+ SELECT * FROM DOC_WAVE_DETAILS WHERE EDITTIME >= TO_DATE(?,'yyyy-mm-dd hh24:mi:ss')
|
|
|
+ ORDER BY EDITTIME) WHERE ROWNUM <= 1000)wave WHERE wave.rowno >= 0
|
|
|
+sql;
|
|
|
+ $details = DB::connection("oracle")->select(DB::raw($sql),[$date]);
|
|
|
+ $this->detailExe($details);
|
|
|
+ $this->disposeDetail($details[count($details)-1]->edittime);
|
|
|
+ }else{
|
|
|
+ $sql = "SELECT ORDERNO,WAVENO,SEQNO FROM DOC_WAVE_DETAILS WHERE EDITTIME >= TO_DATE(?,'yyyy-mm-dd hh24:mi:ss')";
|
|
|
+ $details = DB::connection("oracle")->select(DB::raw($sql),[$date]);
|
|
|
+ $this->detailExe($details);
|
|
|
+ }
|
|
|
});
|
|
|
- $sql = "SELECT ORDERNO,WAVENO,SEQNO FROM DOC_WAVE_DETAILS WHERE EDITTIME > TO_DATE(?,'yyyy-mm-dd hh24:mi:ss')";
|
|
|
- $details = DB::connection("oracle")->select(DB::raw($sql),[$date]);
|
|
|
+ }
|
|
|
+
|
|
|
+ private function detailExe($details)
|
|
|
+ {
|
|
|
if (count($details) < 1)return;
|
|
|
$map = [];
|
|
|
$nos = [];
|
|
|
@@ -178,10 +219,8 @@ class SyncBatchTask extends Command
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-// $this->batchService->assignTasks($batches);
|
|
|
-
|
|
|
-
|
|
|
- ValueStore::query()->where("name","wave_detail_last_sync_date")->update(["value"=>Carbon::now()->subSeconds(1)->toDateTimeString()]);
|
|
|
+ // $this->batchService->assignTasks($batches);
|
|
|
+ ValueStore::query()->where("name","wave_detail_last_sync_date")->update(["value"=>$details[count($details)-1]->edittime]);
|
|
|
}
|
|
|
|
|
|
/**
|