|
|
@@ -47,6 +47,7 @@ use App\ProcurementDeliverie;
|
|
|
use App\ProcurementQuotation;
|
|
|
use App\ProcurementTotalBill;
|
|
|
use App\RejectedBillItem;
|
|
|
+use App\Services\BatchService;
|
|
|
use App\Services\CacheService;
|
|
|
use App\Services\CommodityService;
|
|
|
use App\Services\common\BatchUpdateService;
|
|
|
@@ -180,52 +181,200 @@ class TestController extends Controller
|
|
|
}
|
|
|
return $wms_status;
|
|
|
}
|
|
|
- public function test()
|
|
|
- {
|
|
|
- $batches = Batch::query()->where("created_at",'>=',"2021-05-28 11:00:00")->get();
|
|
|
+ /** @var DocWaveHeaderService $service */
|
|
|
+ private $service;
|
|
|
+ /** @var BatchService $batchService */
|
|
|
+ private $batchService;
|
|
|
+
|
|
|
+ private function detailExe($details)
|
|
|
+ {
|
|
|
+ $this->service = app(DocWaveHeaderService::class);
|
|
|
+ $this->batchService = app(BatchService::class);
|
|
|
+ if (count($details) < 1)return;
|
|
|
+ $map = [];
|
|
|
+ $nos = [];
|
|
|
+ $orderCodes = [];
|
|
|
+ $seqnos = [];
|
|
|
+ $batchMapping = [];
|
|
|
+ foreach ($details as $detail){
|
|
|
+ if (isset($map[$detail->waveno]))$map[$detail->waveno][] = $detail->orderno;
|
|
|
+ else {
|
|
|
+ $map[$detail->waveno] = [$detail->orderno];
|
|
|
+ $nos[] = $detail->waveno;
|
|
|
+ }
|
|
|
+ $orderCodes[] = $detail->orderno;
|
|
|
+ $seqnos[$detail->orderno] = $detail->seqno;
|
|
|
+ $batchMapping[$detail->orderno] = $detail->waveno;
|
|
|
+ }
|
|
|
+ $orders = Order::query()->select("id","batch_id","code")->whereIn("code",$orderCodes)->get();
|
|
|
+ if (count($orderCodes) != count($orders))LogService::log(__CLASS__,"格口号-订单存在差异",json_encode($orderCodes));
|
|
|
+ if ($orders){
|
|
|
+ $orderIds = [];
|
|
|
+ $orderMap = [];
|
|
|
+ $existOrder = [];
|
|
|
+ foreach ($orders as $order){
|
|
|
+ $orderIds[] = $order->id;
|
|
|
+ $orderMap[$order->id] = $seqnos[$order->code];
|
|
|
+ $existOrder[$order->code] = $order->batch_id;
|
|
|
+ }
|
|
|
+ $updateBin = [["id","number"]];
|
|
|
+ $insertBin = [];
|
|
|
+ $deleteBin = [];
|
|
|
+ $orderBins = OrderBin::query()->select("id","order_id","number")->whereIn("order_id",$orderIds)->get();
|
|
|
+ foreach ($orderBins as $orderBin){
|
|
|
+ if (!isset($orderMap[$orderBin->order_id])){
|
|
|
+ $deleteBin[] = $orderBin->id;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if ($orderBin->number != $orderMap[$orderBin->order_id])$updateBin[]=["id"=>$orderBin->id,"number"=>$orderMap[$orderBin->order_id]];
|
|
|
+ unset($orderMap[$orderBin->order_id]);
|
|
|
+ }
|
|
|
+ $d = date('Y-m-d H:i:s');
|
|
|
+ foreach ($orderMap as $orderId=>$binNumber){
|
|
|
+ $insertBin[]=[
|
|
|
+ "order_id"=>$orderId,
|
|
|
+ "number"=>$binNumber,
|
|
|
+ 'created_at' => $d
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ if (count($updateBin)>1){
|
|
|
+ app(BatchUpdateService::class)->batchUpdate("order_bins",$updateBin);
|
|
|
+ LogService::log(__METHOD__,"波次同步-更新订单格口号",json_encode($updateBin));
|
|
|
+ }
|
|
|
+ if ($insertBin){
|
|
|
+ OrderBin::query()->insert($insertBin);
|
|
|
+ LogService::log(__METHOD__,"波次同步-录入订单格口号",json_encode($insertBin));
|
|
|
+ }
|
|
|
+ if ($deleteBin){
|
|
|
+ OrderBin::destroy($deleteBin);
|
|
|
+ LogService::log(__METHOD__,"波次同步-删除订单格口号",json_encode($deleteBin));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $batches = $this->batchService->get(["code"=>$nos]);
|
|
|
+ $batchDiff = array_keys(array_flip(array_diff($nos,array_column($batches->toArray(),"code"))));
|
|
|
+ if (count($batchDiff)>0){
|
|
|
+ $sql = <<<sql
|
|
|
+SELECT * FROM DOC_WAVE_HEADER WHERE WAVENO IN (''
|
|
|
+sql;
|
|
|
+ foreach ($batchDiff as $bd)$sql .= ",'".$bd."'";
|
|
|
+ $sql .= ')';
|
|
|
+ $wmsBatches = DB::connection("oracle")->select(DB::raw($sql));
|
|
|
+ $this->headerExe($wmsBatches);
|
|
|
+ $batches = $this->batchService->get(["code"=>$nos]);
|
|
|
+ }
|
|
|
+ $updateOrder = [["code","batch_id"]];
|
|
|
+ $updatingBatches = [];
|
|
|
foreach ($batches as $batch){
|
|
|
- $code = $batch->code;
|
|
|
- $wave = DB::connection("oracle")->selectOne(DB::raw("select * from DOC_WAVE_HEADER where WAVENO = ?"),[$code]);
|
|
|
- if (!$wave){
|
|
|
- $error[] = $code."FLUX无波次";
|
|
|
+ $mark = false;
|
|
|
+ foreach ($map[$batch->code] as $on){
|
|
|
+ if ((!isset($existOrder[$on])) || $existOrder[$on]!=$batch->id){
|
|
|
+ $updateOrder[] = [
|
|
|
+ "code"=>$on,
|
|
|
+ "batch_id"=>$batch->id
|
|
|
+ ];
|
|
|
+ $mark = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if ($mark)$updatingBatches[] = $batch;
|
|
|
+ unset($map[$batch->code]);
|
|
|
+ }
|
|
|
+ if (count($updateOrder)>1){
|
|
|
+ app("OrderService")->batchUpdate($updateOrder);//反向修改订单
|
|
|
+ LogService::log(__METHOD__,"波次同步-修改订单波次号",json_encode($updateOrder));
|
|
|
+ app("BatchService")->checkBatchOrderInfo($updatingBatches);
|
|
|
+ dump($updatingBatches);
|
|
|
+ }
|
|
|
+ if ($map){
|
|
|
+ $waveCodes = array_keys($map);
|
|
|
+ $waves = $this->service->get(["waveno"=>$waveCodes],["waveno"=>"in"]);
|
|
|
+ $insert = [];
|
|
|
+ foreach ($waves as $wave){
|
|
|
+ $owner = app("OwnerService")->codeGetOwner($wave->customerid);
|
|
|
+ $insert[] = [
|
|
|
+ "code" => $wave->waveno,
|
|
|
+ "status" => '未处理',
|
|
|
+ "wms_status" => $this->wms_status($wave),
|
|
|
+ "wms_type"=>$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]);
|
|
|
+ }
|
|
|
+ app("BatchService")->checkBatchOrderInfo($batches);
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ValueStore::query()->where("name","wave_detail_last_sync_date")->update(["value"=>$details[count($details)-1]->edittime]);
|
|
|
+ }
|
|
|
+ private function headerExe($waves)
|
|
|
+ {
|
|
|
+ if (count($waves) < 1)return;
|
|
|
+ //获取本地数据对比差异
|
|
|
+ $codes = [];
|
|
|
+ foreach ($waves as $wave){
|
|
|
+ $codes[] = $wave->waveno;
|
|
|
+ }
|
|
|
+ $map = [];
|
|
|
+ $batches = $this->batchService->get(["code"=>$codes]);
|
|
|
+ if ($batches){
|
|
|
+ foreach ($batches as $index=>$batch)$map[$batch->code] = $index;
|
|
|
+ }
|
|
|
+ $update = [["id","wms_status","wms_type","updated_at"]];
|
|
|
+ $insert = [];
|
|
|
+
|
|
|
+ foreach ($waves as $wave){
|
|
|
+ if (isset($map[$wave->waveno])){
|
|
|
+ $bat = $batches[$map[$wave->waveno]];
|
|
|
+ $wms_status = $this->wms_status($wave);
|
|
|
+ if ($bat->wms_status != $wms_status || $bat->wms_type != $wave->descr){
|
|
|
+ $update[] = [
|
|
|
+ "id" => $bat->id,
|
|
|
+ "wms_status" => $this->wms_status($wave),
|
|
|
+ "wms_type"=>$wave->descr,
|
|
|
+ "updated_at"=>$wave->edittime,
|
|
|
+ ];
|
|
|
+ }
|
|
|
continue;
|
|
|
}
|
|
|
$owner = app("OwnerService")->codeGetOwner($wave->customerid);
|
|
|
- $obj = [
|
|
|
- "wms_status" => $this->wms_status($wave),
|
|
|
+ $insert[] = [
|
|
|
+ "code" => $wave->waveno,
|
|
|
"wms_type"=>$wave->descr,
|
|
|
- "created_at"=>date("Y-m-d H:i:s"),
|
|
|
- "wms_created_at"=>$wave->addtime,
|
|
|
+ "status" => '未处理',
|
|
|
+ "wms_status" => $this->wms_status($wave),
|
|
|
+ "created_at"=>$wave->addtime,
|
|
|
"updated_at"=>$wave->edittime,
|
|
|
"owner_id"=>$owner->id,
|
|
|
];
|
|
|
- $wave = Batch::query()->where("code",$code)->first();
|
|
|
- if (!$wave){
|
|
|
- $error[] = $code."本地无波次";
|
|
|
- $obj["code"] = $code;
|
|
|
- $wave = Batch::query()->create($obj);
|
|
|
- }else{
|
|
|
- Batch::query()->where("code",$code)->update($obj);
|
|
|
- }
|
|
|
- $ordernos = array_column(DB::connection("oracle")->select(DB::raw("select orderno from DOC_WAVE_DETAILS where WAVENO = ?"),[$code]),"orderno");
|
|
|
- $count = Order::query()->whereIn("code",$ordernos)->count();
|
|
|
- if (count($ordernos)!=$count)$error[] = $code."本地订单缺失";
|
|
|
- Order::query()->whereIn("code",$ordernos)->update([
|
|
|
- "batch_id"=>$wave->id
|
|
|
- ]);
|
|
|
- Order::query()->with(["batch","bin"])->whereIn("code",$ordernos)->get()->each(function ($order){
|
|
|
- if (!$order->bin){
|
|
|
- $bin = DB::connection("oracle")->selectOne(DB::raw("select seqno from DOC_WAVE_DETAILS where waveno = ? and orderno = ?"),[$order->batch->code,$order->code]);
|
|
|
- if ($bin){
|
|
|
- OrderBin::query()->create([
|
|
|
- 'order_id' => $order->id,
|
|
|
- 'number' => $bin->seqno,
|
|
|
- ]);
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
}
|
|
|
- dd("OK");
|
|
|
+
|
|
|
+ //存在则更新
|
|
|
+ if (count($update)>1){
|
|
|
+ $bool = app(BatchUpdateService::class)->batchUpdate("batches",$update);
|
|
|
+ if ($bool!==false)LogService::log(__METHOD__,"SUCCESS-同步更新波次成功",json_encode($update));
|
|
|
+ else LogService::log(__METHOD__,"ERROR-同步更新波次失败",json_encode($update));
|
|
|
+ }
|
|
|
+
|
|
|
+ //不存在则录入
|
|
|
+ if ($insert){
|
|
|
+ $this->batchService->insert($insert);
|
|
|
+ LogService::log(__METHOD__,"SUCCESS-同步插入波次成功",json_encode($insert));
|
|
|
+ }
|
|
|
+ ValueStore::query()->where("name","wave_last_sync_date")->update(["value"=>$waves[count($waves)-1]->edittime]);
|
|
|
+ }
|
|
|
+ public function test()
|
|
|
+ {
|
|
|
+ $sql = "SELECT ORDERNO,WAVENO,SEQNO,EDITTIME FROM DOC_WAVE_DETAILS WHERE WAVENO = 'W210526000315'";
|
|
|
+ $details = DB::connection("oracle")->select(DB::raw($sql));
|
|
|
+ $this->detailExe($details);
|
|
|
+ dd();
|
|
|
$asnno = "ASN2105240178";
|
|
|
$query = DB::raw("SELECT b.ALTERNATE_SKU1,h.WAREHOUSEID,h.asnno,d.ASNLINENO,d.SKUDESCRC,h.CUSTOMERID,d.SKU,d.PACKID,d.RECEIVEDQTY_EACH,d.EXPECTEDQTY_EACH,d.LOTATT01,d.LOTATT02,d.lotatt04,".
|
|
|
"d.lotatt05,d.lotatt08,d.USERDEFINE1,d.USERDEFINE2,d.USERDEFINE3,d.USERDEFINE4,d.USERDEFINE5,d.RECEIVINGLOCATION FROM DOC_ASN_DETAILS d ".
|