service = app(DocWaveHeaderService::class); $this->batchService = app(BatchService::class); } public function handle() { $this->disposeHeader(); $this->disposeDetail(); } private function disposeHeader() { //获取更新时间与WMS数据 $date = $this->service->getSyncDate(); $waves = $this->service->get(["edittime"=>$date],["edittime"=>"gtOrEqual"]); if (count($waves) < 1)return; //获取本地数据对比差异 $codes = array_column($waves->toArray(),"waveno"); $map = []; $batches = $this->batchService->get(["code"=>$codes]); if ($batches){ foreach ($batches as $batch)$map[$batch->code] = $batch->id; } $update = [["id","status","remark","updated_at"]]; $insert = []; foreach ($waves as $wave){ $status = $wave->wavestatus == '40' ? "未处理" : ($wave->wavestatus == '90' ? '取消' : '已处理'); if (isset($map[$wave->waveno])){ $update[] = [ "id" => $map[$wave->waveno], "status" => $status, "remark"=>$wave->descr, "updated_at"=>$wave->edittime, ]; continue; } $owner = app("OwnerService")->codeGetOwner($wave->customerid); $insert[] = [ "code" => $wave->waveno, "status" => $status, "remark"=>$wave->descr, "created_at"=>$wave->addtime, "updated_at"=>$wave->edittime, "owner_id"=>$owner->id, ]; } //存在则更新 if (count($update)>1){ $bool = app(BatchUpdateService::class)->batchUpdate("batches",$update); if ($bool)LogService::log(__METHOD__,"SUCCESS-同步更新波次成功",json_encode($update)); else{ LogService::log(__METHOD__,"ERROR-同步更新波次失败",json_encode($update)); return; } } //不存在则录入 if ($insert){ $this->batchService->insert($insert); LogService::log(__METHOD__,"SUCCESS-同步插入波次成功",json_encode($insert)); } $lastDate = $waves[0]->edittime; $this->service->setSyncDate($lastDate); } public function disposeDetail() { $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(); }); $sql = "SELECT WM_CONCAT(ORDERNO) orderno,WAVENO FROM DOC_WAVE_DETAILS WHERE EDITTIME > TO_DATE(?,'yyyy-mm-dd hh24:mi:ss') GROUP BY WAVENO"; $details = DB::connection("oracle")->select(DB::raw($sql),[$date]); if (count($details) < 1)return; $map = []; $nos = []; foreach ($details as $detail){ $map[$detail->waveno] = explode(",",$detail->orderno); $nos[] = $detail->waveno; } $batches = $this->batchService->get(["code"=>$nos]); foreach ($batches as $batch){ app("OrderService")->update(["code"=>$map[$batch->code]],["batch_id"=>$batch->id]); unset($map[$batch->code]); } if ($map){ $waveCodes = array_keys($map); $waves = $this->service->get(["waveno"=>$waveCodes],["waveno"=>"in"]); $insert = []; foreach ($waves as $wave){ $status = $wave->wavestatus == '40' ? "未处理" : ($wave->wavestatus == '90' ? '取消' : '已处理'); $owner = app("OwnerService")->codeGetOwner($wave->customerid); $insert[] = [ "code" => $wave->waveno, "status" => $status, "remark"=>$wave->descr, "created_at"=>$wave->addtime, "updated_at"=>$wave->edittime, "owner_id"=>$owner->id, ]; } if ($insert){ $this->batchService->insert($insert); LogService::log(__METHOD__,"SUCCESS-同步插入波次成功",json_encode($insert)); $batches = $this->batchService->get(["code"=>$waveCodes]); foreach ($batches as $batch){ app("OrderService")->update(["code"=>$map[$batch->code]],["batch_id"=>$batch->id]); } } } ValueStore::query()->where("name","wave_last_sync_date")->update(["value"=>Carbon::now()->subSeconds(1)->toDateTimeString()]); } }