|
|
@@ -150,49 +150,50 @@ class OrderPackageCommoditiesService
|
|
|
public function createByWmsOrder($orderHeaders)
|
|
|
{
|
|
|
if(!$orderHeaders){ return [];}
|
|
|
- /** @var DataHandlerService $dataHandlerService */
|
|
|
- $dataHandlerService = app(DataHandlerService::class);
|
|
|
-
|
|
|
- $order_packages = app(OrderPackageService::class)->getByWmsOrders($orderHeaders);
|
|
|
- $order_packages_logistic_number_map = $dataHandlerService->dataHeader(['logistic_number'],$order_packages);
|
|
|
-
|
|
|
- $commodities = app(CommodityService::class)->getByWmsOrders($orderHeaders);
|
|
|
- $commodity_owner_id_sku_map = $dataHandlerService->dataHeader(['owner_id','sku'],$commodities);
|
|
|
-
|
|
|
- $owners = app(OwnerService::class)->getByWmsOrders($orderHeaders);
|
|
|
- $owner_code_map = $dataHandlerService->dataHeader(['code'],$owners);
|
|
|
-
|
|
|
- $order_packages_commodities = $this->getByWmsOrder($orderHeaders);
|
|
|
- $map = [];
|
|
|
- foreach ($order_packages_commodities as $item) {
|
|
|
- $key = ' commodity_id='.$item->commodity_id.' order_package_id'.$item->order_package_id.' amount='.$item->amount;
|
|
|
- $map[$key][] = $item;
|
|
|
- }
|
|
|
- $insert_params = [];
|
|
|
- foreach ($orderHeaders as $orderHeader) {
|
|
|
- $actAllocationDetails = $orderHeader->actAllocationDetails;
|
|
|
- $logistic_numbers = array_diff(array_unique(data_get($actAllocationDetails,'*.picktotraceid')),['*','',null]);
|
|
|
- if(count($logistic_numbers) > 0){
|
|
|
- $params = $this->getParamsByActAllocationDetails($actAllocationDetails,
|
|
|
- $order_packages_logistic_number_map,
|
|
|
- $owner_code_map,
|
|
|
- $commodity_owner_id_sku_map,
|
|
|
- $logistic_numbers);
|
|
|
- foreach ($params as $key =>$param) {
|
|
|
- $mapkey = ' commodity_id='.($param['commodity_id'] ?? '').' order_package_id'.($param['order_package_id'] ?? '').' amount='.($param['amount'] ?? '');
|
|
|
- if(($map[$mapkey] ?? false) && count($map[$mapkey]) >0){
|
|
|
- array_shift($map[$mapkey]);
|
|
|
- unset($params[$key]);
|
|
|
- }
|
|
|
- }
|
|
|
- $insert_params = array_merge($insert_params,$params);
|
|
|
- unset($params);
|
|
|
- }
|
|
|
- }
|
|
|
- if(count($insert_params) > 0){
|
|
|
- $this->create($insert_params);
|
|
|
- }
|
|
|
- unset($orderHeaders,$order_packages,$owner_code_map,$commodities,$insert_params);
|
|
|
+ $this->更新OPC_根据WMS订单($orderHeaders);
|
|
|
+// /** @var DataHandlerService $dataHandlerService */
|
|
|
+// $dataHandlerService = app(DataHandlerService::class);
|
|
|
+//
|
|
|
+// $order_packages = app(OrderPackageService::class)->getByWmsOrders($orderHeaders);
|
|
|
+// $order_packages_logistic_number_map = $dataHandlerService->dataHeader(['logistic_number'],$order_packages);
|
|
|
+//
|
|
|
+// $commodities = app(CommodityService::class)->getByWmsOrders($orderHeaders);
|
|
|
+// $commodity_owner_id_sku_map = $dataHandlerService->dataHeader(['owner_id','sku'],$commodities);
|
|
|
+//
|
|
|
+// $owners = app(OwnerService::class)->getByWmsOrders($orderHeaders);
|
|
|
+// $owner_code_map = $dataHandlerService->dataHeader(['code'],$owners);
|
|
|
+//
|
|
|
+// $order_packages_commodities = $this->getByWmsOrder($orderHeaders);
|
|
|
+// $map = [];
|
|
|
+// foreach ($order_packages_commodities as $item) {
|
|
|
+// $key = ' commodity_id='.$item->commodity_id.' order_package_id'.$item->order_package_id.' amount='.$item->amount;
|
|
|
+// $map[$key][] = $item;
|
|
|
+// }
|
|
|
+// $insert_params = [];
|
|
|
+// foreach ($orderHeaders as $orderHeader) {
|
|
|
+// $actAllocationDetails = $orderHeader->actAllocationDetails;
|
|
|
+// $logistic_numbers = array_diff(array_unique(data_get($actAllocationDetails,'*.picktotraceid')),['*','',null]);
|
|
|
+// if(count($logistic_numbers) > 0){
|
|
|
+// $params = $this->getParamsByActAllocationDetails($actAllocationDetails,
|
|
|
+// $order_packages_logistic_number_map,
|
|
|
+// $owner_code_map,
|
|
|
+// $commodity_owner_id_sku_map,
|
|
|
+// $logistic_numbers);
|
|
|
+// foreach ($params as $key =>$param) {
|
|
|
+// $mapkey = ' commodity_id='.($param['commodity_id'] ?? '').' order_package_id'.($param['order_package_id'] ?? '').' amount='.($param['amount'] ?? '');
|
|
|
+// if(($map[$mapkey] ?? false) && count($map[$mapkey]) >0){
|
|
|
+// array_shift($map[$mapkey]);
|
|
|
+// unset($params[$key]);
|
|
|
+// }
|
|
|
+// }
|
|
|
+// $insert_params = array_merge($insert_params,$params);
|
|
|
+// unset($params);
|
|
|
+// }
|
|
|
+// }
|
|
|
+// if(count($insert_params) > 0){
|
|
|
+// $this->create($insert_params);
|
|
|
+// }
|
|
|
+// unset($orderHeaders,$order_packages,$owner_code_map,$commodities,$insert_params);
|
|
|
}
|
|
|
|
|
|
public function getParamsByActAllocationDetails($details,array $order_packages_logistic_number_map,array $owner_code_map,array $commodity_owner_id_sku_map,array $logistic_numbers){
|
|
|
@@ -242,97 +243,98 @@ class OrderPackageCommoditiesService
|
|
|
|
|
|
public function updateByWmsOrder($orderHeaders){
|
|
|
if(!$orderHeaders){return ;}
|
|
|
- /** @var DataHandlerService $dataHandlerService*/
|
|
|
- $dataHandlerService = app(DataHandlerService::class);
|
|
|
- $commodities = app(CommodityService::class)->getByWmsOrders($orderHeaders);
|
|
|
- $owners = app(OwnerService::class)->getByWmsOrders($orderHeaders);
|
|
|
- $owners_id_map = $dataHandlerService->dataHeader(['id'],$owners);
|
|
|
- $owner_code_map = $dataHandlerService->dataHeader(['code'],$owners);
|
|
|
- $commodity_owner_id_sku_map = $dataHandlerService->dataHeader(['owner_id','sku'],$commodities);
|
|
|
-
|
|
|
- $commodities_owner_code_code_map = [];
|
|
|
- foreach ($commodities as $commodity) {
|
|
|
- $owner = $dataHandlerService->getKeyValue(['id'=>$commodity->owner_id],$owners_id_map);
|
|
|
- $commodities_owner_code_code_map[' owner_code='.$owner->code.' code='.$commodity->code] = $commodity;
|
|
|
- }
|
|
|
-
|
|
|
- $order_nos = data_get($orderHeaders,'*.orderno');
|
|
|
- $order_package_commodities = OrderPackageCommodities::query()->with('package.order','commodity')
|
|
|
- ->whereHas('package.order',function($query) use ($order_nos){
|
|
|
- $query->whereIn('code',$order_nos);
|
|
|
- })->get();
|
|
|
-
|
|
|
- $order_packages = OrderPackage::query()->with('order')->whereHas('order',function($query) use ($order_nos){
|
|
|
- $query->whereIn('code',$order_nos);
|
|
|
- })->get();
|
|
|
-
|
|
|
- $order_package_logistic_numbers_map = $dataHandlerService->dataHeader(['logistic_number'],$order_packages);
|
|
|
- $order_no_map = [];
|
|
|
- foreach ($order_package_commodities as $order_package_commodity) {
|
|
|
- $order = $order_package_commodity->package->order;
|
|
|
- $order_no_map[$order->code][] = $order_package_commodity;
|
|
|
- }
|
|
|
-
|
|
|
- $insertParams = [];
|
|
|
- $updateParams = [['id','order_package_id'.'commodity_id','amount','updated_at']];
|
|
|
- $updated_at = Carbon::now()->toDateTimeString();
|
|
|
- $created_at = Carbon::now()->toDateTimeString();
|
|
|
- foreach ($orderHeaders as $orderHeader) {
|
|
|
- $order_package_commodities = $order_no_map[$orderHeader->orderno] ?? false;
|
|
|
- $actAllocationDetails = $orderHeader->actAllocationDetails;
|
|
|
- $logistic_numbers = array_unique(array_diff(data_get($actAllocationDetails,'*.picktotraceid'),['','*',null])) ;
|
|
|
- if(!$order_package_commodities){
|
|
|
- $params = $this->getParamsByActAllocationDetails($actAllocationDetails,$order_package_logistic_numbers_map, $owner_code_map, $commodity_owner_id_sku_map, $logistic_numbers);
|
|
|
- foreach ($params as $param) {
|
|
|
- $insertParams[] = $param;
|
|
|
- }
|
|
|
- continue;
|
|
|
- }
|
|
|
- if($actAllocationDetails->count() > count($order_package_commodities)){
|
|
|
- $deleteKey = [];
|
|
|
- foreach ($actAllocationDetails as $key1=>$actAllocationDetail) {
|
|
|
- foreach ( $order_package_commodities as $key=>$item) {
|
|
|
- $commodity = $item->commodity;
|
|
|
- if($actAllocationDetail->sku == $commodity->sku && $item->amount == $actAllocationDetail->qty_each){
|
|
|
- unset($order_package_commodities[$key]);
|
|
|
- unset($actAllocationDetails[$key1]);
|
|
|
- $deleteKey[] = $key1;
|
|
|
- break;
|
|
|
- }else if($item ->sku == $commodity->sku && $item->amount != $actAllocationDetail->qty_each){
|
|
|
- $updateParams[] = [
|
|
|
- 'id' => $item->id,
|
|
|
- 'commodity_id' => $commodity->id,
|
|
|
- 'amount' => $actAllocationDetail->qty_each,
|
|
|
- 'updated_at' => $updated_at
|
|
|
- ];
|
|
|
- $deleteKey[] = $key1;
|
|
|
- unset($actAllocationDetails[$key1]);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- $actAllocationDetails =$actAllocationDetails->filter(function ($value, $key) use($deleteKey) {
|
|
|
- return !in_array($key, $deleteKey);
|
|
|
- });
|
|
|
- $params = $this->getParamsByActAllocationDetails($actAllocationDetails,$order_package_logistic_numbers_map, $owner_code_map, $commodity_owner_id_sku_map, $logistic_numbers);
|
|
|
- foreach ($params as $param) {
|
|
|
- $insertParams[] = $param;
|
|
|
- }
|
|
|
- continue;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if(count($updateParams) > 0){
|
|
|
- $this->batchUpdate($updateParams);
|
|
|
- }
|
|
|
-
|
|
|
- if(count($insertParams) > 0){
|
|
|
- try {
|
|
|
- $this->insert($insertParams);
|
|
|
- LogService::log(__METHOD__,__FUNCTION__,'批量添加 OrderPackageCommodities '. count($insertParams) .json_encode($insertParams));
|
|
|
- } catch (\Exception $e) {
|
|
|
- LogService::log(__METHOD__,__FUNCTION__,'批量添加 OrderPackageCommodities error'.json_encode($insertParams)."||".$e->getMessage().'||'.$e->getTraceAsString());
|
|
|
- }
|
|
|
- }
|
|
|
+ $this->更新OPC_根据WMS订单($orderHeaders);
|
|
|
+// /** @var DataHandlerService $dataHandlerService*/
|
|
|
+// $dataHandlerService = app(DataHandlerService::class);
|
|
|
+// $commodities = app(CommodityService::class)->getByWmsOrders($orderHeaders);
|
|
|
+// $owners = app(OwnerService::class)->getByWmsOrders($orderHeaders);
|
|
|
+// $owners_id_map = $dataHandlerService->dataHeader(['id'],$owners);
|
|
|
+// $owner_code_map = $dataHandlerService->dataHeader(['code'],$owners);
|
|
|
+// $commodity_owner_id_sku_map = $dataHandlerService->dataHeader(['owner_id','sku'],$commodities);
|
|
|
+//
|
|
|
+// $commodities_owner_code_code_map = [];
|
|
|
+// foreach ($commodities as $commodity) {
|
|
|
+// $owner = $dataHandlerService->getKeyValue(['id'=>$commodity->owner_id],$owners_id_map);
|
|
|
+// $commodities_owner_code_code_map[' owner_code='.$owner->code.' code='.$commodity->code] = $commodity;
|
|
|
+// }
|
|
|
+//
|
|
|
+// $order_nos = data_get($orderHeaders,'*.orderno');
|
|
|
+// $order_package_commodities = OrderPackageCommodities::query()->with('package.order','commodity')
|
|
|
+// ->whereHas('package.order',function($query) use ($order_nos){
|
|
|
+// $query->whereIn('code',$order_nos);
|
|
|
+// })->get();
|
|
|
+//
|
|
|
+// $order_packages = OrderPackage::query()->with('order')->whereHas('order',function($query) use ($order_nos){
|
|
|
+// $query->whereIn('code',$order_nos);
|
|
|
+// })->get();
|
|
|
+//
|
|
|
+// $order_package_logistic_numbers_map = $dataHandlerService->dataHeader(['logistic_number'],$order_packages);
|
|
|
+// $order_no_map = [];
|
|
|
+// foreach ($order_package_commodities as $order_package_commodity) {
|
|
|
+// $order = $order_package_commodity->package->order;
|
|
|
+// $order_no_map[$order->code][] = $order_package_commodity;
|
|
|
+// }
|
|
|
+//
|
|
|
+// $insertParams = [];
|
|
|
+// $updateParams = [['id','order_package_id'.'commodity_id','amount','updated_at']];
|
|
|
+// $updated_at = Carbon::now()->toDateTimeString();
|
|
|
+// $created_at = Carbon::now()->toDateTimeString();
|
|
|
+// foreach ($orderHeaders as $orderHeader) {
|
|
|
+// $order_package_commodities = $order_no_map[$orderHeader->orderno] ?? false;
|
|
|
+// $actAllocationDetails = $orderHeader->actAllocationDetails;
|
|
|
+// $logistic_numbers = array_unique(array_diff(data_get($actAllocationDetails,'*.picktotraceid'),['','*',null])) ;
|
|
|
+// if(!$order_package_commodities){
|
|
|
+// $params = $this->getParamsByActAllocationDetails($actAllocationDetails,$order_package_logistic_numbers_map, $owner_code_map, $commodity_owner_id_sku_map, $logistic_numbers);
|
|
|
+// foreach ($params as $param) {
|
|
|
+// $insertParams[] = $param;
|
|
|
+// }
|
|
|
+// continue;
|
|
|
+// }
|
|
|
+// if($actAllocationDetails->count() > count($order_package_commodities)){
|
|
|
+// $deleteKey = [];
|
|
|
+// foreach ($actAllocationDetails as $key1=>$actAllocationDetail) {
|
|
|
+// foreach ( $order_package_commodities as $key=>$item) {
|
|
|
+// $commodity = $item->commodity;
|
|
|
+// if($actAllocationDetail->sku == $commodity->sku && $item->amount == $actAllocationDetail->qty_each){
|
|
|
+// unset($order_package_commodities[$key]);
|
|
|
+// unset($actAllocationDetails[$key1]);
|
|
|
+// $deleteKey[] = $key1;
|
|
|
+// break;
|
|
|
+// }else if($item ->sku == $commodity->sku && $item->amount != $actAllocationDetail->qty_each){
|
|
|
+// $updateParams[] = [
|
|
|
+// 'id' => $item->id,
|
|
|
+// 'commodity_id' => $commodity->id,
|
|
|
+// 'amount' => $actAllocationDetail->qty_each,
|
|
|
+// 'updated_at' => $updated_at
|
|
|
+// ];
|
|
|
+// $deleteKey[] = $key1;
|
|
|
+// unset($actAllocationDetails[$key1]);
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+// $actAllocationDetails =$actAllocationDetails->filter(function ($value, $key) use($deleteKey) {
|
|
|
+// return !in_array($key, $deleteKey);
|
|
|
+// });
|
|
|
+// $params = $this->getParamsByActAllocationDetails($actAllocationDetails,$order_package_logistic_numbers_map, $owner_code_map, $commodity_owner_id_sku_map, $logistic_numbers);
|
|
|
+// foreach ($params as $param) {
|
|
|
+// $insertParams[] = $param;
|
|
|
+// }
|
|
|
+// continue;
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// if(count($updateParams) > 0){
|
|
|
+// $this->batchUpdate($updateParams);
|
|
|
+// }
|
|
|
+//
|
|
|
+// if(count($insertParams) > 0){
|
|
|
+// try {
|
|
|
+// $this->insert($insertParams);
|
|
|
+// LogService::log(__METHOD__,__FUNCTION__,'批量添加 OrderPackageCommodities '. count($insertParams) .json_encode($insertParams));
|
|
|
+// } catch (\Exception $e) {
|
|
|
+// LogService::log(__METHOD__,__FUNCTION__,'批量添加 OrderPackageCommodities error'.json_encode($insertParams)."||".$e->getMessage().'||'.$e->getTraceAsString());
|
|
|
+// }
|
|
|
+// }
|
|
|
}
|
|
|
|
|
|
public function getByWmsOrder($orderHeaders){
|
|
|
@@ -396,48 +398,46 @@ class OrderPackageCommoditiesService
|
|
|
* @param Order $order
|
|
|
* @return array|Collection|\Tightenco\Collect\Support\Collection
|
|
|
*/
|
|
|
- public function 返回创建数组($orderHeader,$order)
|
|
|
+ public function 返回创建数组($orderHeader)
|
|
|
{
|
|
|
- /** @var DataHandlerService $dataHandlerService */
|
|
|
- $dataHandlerService = app(DataHandlerService::class);
|
|
|
if($orderHeader->sostatus == 90){return [];}
|
|
|
$actAllocationDetails = $orderHeader->actAllocationDetails->collect();
|
|
|
- $orderPackages = $dataHandlerService->dataHeader(['logistic_number'],$order->packages);
|
|
|
$innerParams = collect();
|
|
|
- $actAllocationDetails->each(function($detail)use($orderPackages,$dataHandlerService,$innerParams){
|
|
|
- $orderPackage = $dataHandlerService->getKeyValue(['logistic_number'=>$detail->picktotraceid],$orderPackages);
|
|
|
+ $actAllocationDetails->each(function($detail)use(&$innerParams){
|
|
|
$sku = $detail->sku;
|
|
|
$amount = $detail->qty_each;
|
|
|
- $order_package_id = $orderPackage->id ?? '';
|
|
|
$logistic_number = $detail->picktotraceid;
|
|
|
$params = [
|
|
|
- 'ownerCode' > $detail->customerid,
|
|
|
+ 'ownerCode' => $detail->customerid,
|
|
|
'orderNo' => $detail->orderno,
|
|
|
'sku' => $sku,
|
|
|
'amount' => $amount,
|
|
|
'logistic_number' => $logistic_number,
|
|
|
];
|
|
|
- $innerParam = $innerParams->where('logistic_number',$orderPackage->id ?? '')->where('sku',$sku)->first();
|
|
|
- if(!$innerParam){
|
|
|
- $innerParams->push($params);
|
|
|
+
|
|
|
+ $innerParam = $innerParams->where('logistic_number',$logistic_number)->where('sku',$sku)->first();
|
|
|
+ if($innerParam ?? false){
|
|
|
+ $bool = false;
|
|
|
+ $innerParams = $innerParams->map(function($param)use($innerParam,$amount,&$bool){
|
|
|
+ if($innerParam['logistic_number'] == $param['logistic_number'] &&
|
|
|
+ $innerParam['sku'] == $param['sku'] && !$bool){
|
|
|
+ $param['amount'] += $amount;
|
|
|
+ $bool = !$bool;
|
|
|
+ }
|
|
|
+ return $param;
|
|
|
+ });
|
|
|
}else{
|
|
|
- $innerParam['amount'] += $amount;
|
|
|
+ $innerParams->push($params);
|
|
|
}
|
|
|
});
|
|
|
return $innerParams;
|
|
|
}
|
|
|
|
|
|
- public function 返回创建数组_WMS订单_WAS订单($orderHeaders,$orders)
|
|
|
+ public function 返回创建数组_WMS订单($orderHeaders)
|
|
|
{
|
|
|
- $map = [];
|
|
|
- foreach ($orders as $order) {
|
|
|
- $key = $order->code;
|
|
|
- $map[$key] = $order;
|
|
|
- }
|
|
|
$innerParams = [];
|
|
|
foreach ($orderHeaders as $orderHeader) {
|
|
|
- $order = $map[$orderHeader->orderno];
|
|
|
- $innerParam = $this->返回创建数组($orderHeader,$order);
|
|
|
+ $innerParam = $this->返回创建数组($orderHeader);
|
|
|
foreach ($innerParam as $param) {
|
|
|
$innerParams[] = $param;
|
|
|
}
|
|
|
@@ -446,30 +446,22 @@ class OrderPackageCommoditiesService
|
|
|
}
|
|
|
/**
|
|
|
* @param array $innerParams
|
|
|
- * @param OracleDOCOrderHeader $orderHeaders
|
|
|
* @return array
|
|
|
*/
|
|
|
- public function 生成OrderPackageCommodities_基于创建数组($innerParams,$orderHeaders)
|
|
|
+ public function 生成OrderPackageCommodities_基于创建数组($innerParams)
|
|
|
{
|
|
|
- /** @var DataHandlerService $dataHandlerService */
|
|
|
- $dataHandlerService = app(DataHandlerService::class);
|
|
|
- $commodities = app(CommodityService::class)->getByWmsOrder($orderHeaders);
|
|
|
- $owners = app(OwnerService::class)->getByWmsOrders($orderHeaders);
|
|
|
- $owner_id_map = $dataHandlerService->dataHeader(['id'],$owners);
|
|
|
- $commodities_owner_code_sku_map = [];
|
|
|
- foreach ($commodities as $commodity) {
|
|
|
- $owner_code = $dataHandlerService->getKeyValue(['id'=>$commodity->owner_id],$owner_id_map);
|
|
|
- $key = ' owner_code='.$owner_code.' sku='.$commodity->sku;
|
|
|
- $commodities_owner_code_sku_map[$key] = $commodity;
|
|
|
- }
|
|
|
-
|
|
|
- $dataTime = Carbon::now()->format('Y-m-d H:i:s');
|
|
|
+ if(!$innerParams){return [];}
|
|
|
+ if(is_array($innerParams) && count($innerParams) == 0){return [];}
|
|
|
+ $commodity_map = $this->返回Commodity数组_根据数组中sku($innerParams);
|
|
|
+ $orderPackages_map = app(OrderPackageService::class)->返回OrderPackage数组_根据数组中的快递单号($innerParams);
|
|
|
$createParams = [];
|
|
|
+ $dataTime = Carbon::now()->format('Y-m-d H:i:s');
|
|
|
foreach ($innerParams as $innerParam) {
|
|
|
- $key = ' owner_code='.$innerParam['ownerCode'].' sku='.$innerParam['sku'];
|
|
|
- $commodity = $commodities_owner_code_sku_map[$key] ?? null;
|
|
|
+ $key = ' ownerCode='.($innerParam['ownerCode'] ?? '').' sku='.($innerParam['sku'] ?? '');
|
|
|
+ $commodity = $commodity_map[$key] ?? null;
|
|
|
+ $orderPackage = $orderPackages_map[$innerParam['logistic_number']] ?? '';
|
|
|
$createParams[] = [
|
|
|
- 'order_package_id' => $innerParam['order_package_id'],
|
|
|
+ 'order_package_id' => $orderPackage->id ?? '',
|
|
|
'commodity_id' => $commodity->id ?? null,
|
|
|
'amount' => $innerParam['amount'],
|
|
|
'created_at' => $dataTime,
|
|
|
@@ -479,29 +471,63 @@ class OrderPackageCommoditiesService
|
|
|
return $createParams;
|
|
|
}
|
|
|
|
|
|
+ public function createByOrderHeader($orderHeaders)
|
|
|
+ {
|
|
|
+ $orderPackageCommodities = $this->getByWmsOrder($orderHeaders);
|
|
|
+ $OPCCollects = $this->将orderPackageCommodity抽象成数组($orderPackageCommodities);
|
|
|
+ $creatParams = $this->返回创建数组_WMS订单($orderHeaders);
|
|
|
+ $this->数据重组($OPCCollects,$creatParams);
|
|
|
+ $collect = $this->删选需要修改的OrderPackageCommodities($OPCCollect,$creatParam);
|
|
|
+ $ids = $this->删选出删除的OrderPackageCommodities($OPCCollect,$creatParam);
|
|
|
+ $insertParam = $this->删选出需要添加的OrderPackageCommodities($OPCCollect,$creatParam);
|
|
|
+ $updateParams = [];
|
|
|
+ foreach ($collect as $item) {
|
|
|
+ $updateParams[] = $item;
|
|
|
+ }
|
|
|
+ $this->根据更新数组进行更新($updateParams);
|
|
|
+ $this->删除OPC以及对应的追踪件($ids);
|
|
|
+ $creatParams = $this->生成OrderPackageCommodities_基于创建数组($insertParam);
|
|
|
+ $this->create($creatParams);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param $orderHeaders
|
|
|
+ */
|
|
|
public function 更新OPC_根据WMS订单($orderHeaders)
|
|
|
{
|
|
|
if(!$orderHeaders){return ;}
|
|
|
if(count($orderHeaders) == 0){return ;}
|
|
|
- $orders = app(OrderService::class)->getOrderInfoByWmsOrder($orderHeaders);
|
|
|
$orderPackageCommodities = $this->getByWmsOrder($orderHeaders);
|
|
|
$OPCCollects = $this->将orderPackageCommodity抽象成数组($orderPackageCommodities);
|
|
|
- $creatParams = $this->返回创建数组_WMS订单_WAS订单($orderHeaders,$orders);
|
|
|
+ $creatParams = $this->返回创建数组_WMS订单($orderHeaders);
|
|
|
$orderNos = $this->数据重组($OPCCollects,$creatParams);
|
|
|
- dd($orderNos,$creatParams['SO200901002558'],$OPCCollects['SO200901002558'] ?? null);
|
|
|
- $retains = [];$updateParams= collect();$deleteIds = [];
|
|
|
+ $updateParams= collect();$deleteIds = [];$insertParams =[];
|
|
|
foreach ($orderNos as $orderNo) {
|
|
|
- $OPCCollect = $OPCCollects[$orderNo];
|
|
|
+ $OPCCollect = $OPCCollects[$orderNo] ?? null;
|
|
|
$creatParam = $creatParams[$orderNo];
|
|
|
$retain[] = $this->删选可以保留的OrderPackageCommodities($OPCCollect,$creatParam);
|
|
|
+
|
|
|
$collect = $this->删选需要修改的OrderPackageCommodities($OPCCollect,$creatParam);
|
|
|
+
|
|
|
$ids = $this->删选出删除的OrderPackageCommodities($OPCCollect,$creatParam);
|
|
|
- array_merge($deleteIds,$ids);
|
|
|
+
|
|
|
+ $insertParam = $this->删选出需要添加的OrderPackageCommodities($OPCCollect,$creatParam);
|
|
|
+
|
|
|
+ $deleteIds = array_merge($deleteIds,$ids);
|
|
|
+
|
|
|
foreach ($collect as $item) {
|
|
|
$updateParams->push($item);
|
|
|
}
|
|
|
+ foreach ($insertParam as $item) {
|
|
|
+ $insertParams[]= $item;
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
- dd($retains,$updateParams,$deleteIds);
|
|
|
+ $this->根据更新数组进行更新($updateParams);
|
|
|
+ $this->删除OPC以及对应的追踪件($deleteIds);
|
|
|
+ $creatParams = $this->生成OrderPackageCommodities_基于创建数组($insertParams);
|
|
|
+ $this->create($creatParams);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -531,11 +557,11 @@ class OrderPackageCommoditiesService
|
|
|
return $collect;
|
|
|
}
|
|
|
|
|
|
- public function 数据重组(&$orderPackageCommoditiesCollect,&$params)
|
|
|
+ public function 数据重组(&$OPCCollects,&$params)
|
|
|
{
|
|
|
$collect_map = [];$params_map = [];$order_no_map = [];
|
|
|
|
|
|
- foreach ($orderPackageCommoditiesCollect as $item) {
|
|
|
+ foreach ($OPCCollects as $item) {
|
|
|
$orderNo = $item['orderNo'];
|
|
|
if(!isset($collect_map[$orderNo])){$collect_map[$orderNo] = collect();}
|
|
|
$collect_map[$orderNo]->push($item);
|
|
|
@@ -548,7 +574,7 @@ class OrderPackageCommoditiesService
|
|
|
$params_map[$orderNo]->push($param);
|
|
|
}
|
|
|
$order_no_map = array_unique($order_no_map);
|
|
|
- $orderPackageCommoditiesCollect = $collect_map;
|
|
|
+ $OPCCollects = $collect_map;
|
|
|
$params = $params_map;
|
|
|
return $order_no_map;
|
|
|
}
|
|
|
@@ -557,10 +583,11 @@ class OrderPackageCommoditiesService
|
|
|
public function 删选可以保留的OrderPackageCommodities(&$OPCCollect,&$params)
|
|
|
{
|
|
|
$retain = collect();
|
|
|
+ if($OPCCollect == null){return $retain;}
|
|
|
$map = [];
|
|
|
foreach ($params as $param) {
|
|
|
$key = ' logistic_number='.$param['logistic_number'].' sku='.$param['sku'].' amount='.$param['amount'];
|
|
|
- if(!$map[$key] ?? false){
|
|
|
+ if(! isset($map[$key])){
|
|
|
$map[$key] = [];
|
|
|
}
|
|
|
$map[$key][] = $param;
|
|
|
@@ -570,13 +597,14 @@ class OrderPackageCommoditiesService
|
|
|
$key = ' logistic_number='.$item['logistic_number'].' sku='.$item['sku'].' amount='.$item['amount'];
|
|
|
if(isset($map[$key]) && count($map[$key]) > 0){
|
|
|
$value = $map[$key][0];
|
|
|
- array_shift($map);
|
|
|
+ array_shift($map[$key]);
|
|
|
$params->filter(function($param)use($value){
|
|
|
return count(array_diff_assoc($param,$value)) != 0 ;
|
|
|
});
|
|
|
$retain->push($value);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
return $retain;
|
|
|
}
|
|
|
|
|
|
@@ -584,6 +612,7 @@ class OrderPackageCommoditiesService
|
|
|
{
|
|
|
$innerParam = [];
|
|
|
$OPCmap = [];
|
|
|
+ if($OPCCollect == null){return $params;}
|
|
|
foreach ($OPCCollect as $item) {
|
|
|
$key = ' logistic_number='.$item['logistic_number'].' sku='.$item['sku'].' amount='.$item['amount'];
|
|
|
if(!isset($OPCmap[$key])){
|
|
|
@@ -602,12 +631,11 @@ class OrderPackageCommoditiesService
|
|
|
$paramsCopy = $params->collect();
|
|
|
foreach ($paramsCopy as $param) {
|
|
|
$key = ' logistic_number='.$param['logistic_number'].' sku='.$param['sku'].' amount='.$param['amount'];
|
|
|
- if(!isset($OPCmap[$key]) && count($OPCmap[$key]) == 0){
|
|
|
+ if(!(isset($OPCmap[$key]) && count($OPCmap[$key]) == 0)){
|
|
|
$innerParam[] = $param;
|
|
|
- $params->filter(function($item)use($param){
|
|
|
- return count(array_diff_assoc($item,$param)) != 0 ;
|
|
|
+ $OPCCollect->filter(function($item)use($param){
|
|
|
+ return !($item['logistic_number'] == $param['logistic_number'] &&$item['sku'] == $param['sku'] &&$item['amount'] == $param['amount']) ;
|
|
|
});
|
|
|
- unset($param);
|
|
|
}
|
|
|
}
|
|
|
return $innerParam;
|
|
|
@@ -618,36 +646,37 @@ class OrderPackageCommoditiesService
|
|
|
{
|
|
|
$update = collect();
|
|
|
$map = [];
|
|
|
+ if($OPCCollect == null){return $update;}
|
|
|
foreach ($OPCCollect as $item) {
|
|
|
$key = ' logistic_number='.$item['logistic_number'].' sku='.$item['sku'];
|
|
|
- if(!isset($map[$key])){
|
|
|
- $map[$key] = [];
|
|
|
- }
|
|
|
+ if(!isset($map[$key])){$map[$key] = [];}
|
|
|
$map[$key][] = $item;
|
|
|
}
|
|
|
-
|
|
|
- foreach ($params as $param) {
|
|
|
+ $paramsCopy = $params->collect();
|
|
|
+ foreach ($paramsCopy as $param) {
|
|
|
$key = ' logistic_number='.$param['logistic_number'].' sku='.$param['sku'];
|
|
|
- if(isset($map[$key]) && count($map[$key]) > 0){
|
|
|
- $item = $map[$key][0];
|
|
|
- array_shift($map[$key]);
|
|
|
- $params->filter(function($value)use($param){
|
|
|
- return count(array_diff_assoc($param,$value)) != 0 ;
|
|
|
- });
|
|
|
- $OPCCollect->filter(function($opc)use($item){
|
|
|
- return $item!=$opc;
|
|
|
- });
|
|
|
- $item['amount'] = $param['sku'];
|
|
|
- $update->push($item);
|
|
|
+ if(!isset($map[$key])){continue;}
|
|
|
+ $item = array_shift($map[$key]);
|
|
|
+ $params = $params->filter(function($value)use($item){
|
|
|
+ return !($value['logistic_number'] == $item['logistic_number'] && $value['sku'] == $item['sku']) ;
|
|
|
+ });
|
|
|
+ $OPCCollect = $OPCCollect->filter(function($opc)use($item){
|
|
|
+ return !($opc['logistic_number'] == $item['logistic_number'] && $opc['sku'] == $item['sku'] && $opc['amount'] == $item['amount'] && $item['id'] == $opc['id']);
|
|
|
+ });
|
|
|
+ if($item['amount']!= $param['amount']){
|
|
|
+ $param['id'] = $item['id'];
|
|
|
+ $update->push($param);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
return $update;
|
|
|
}
|
|
|
|
|
|
public function 删选出删除的OrderPackageCommodities(&$OPCCollect,&$params)
|
|
|
{
|
|
|
- $delteIds = [];
|
|
|
+ $deleteIds = [];
|
|
|
$map = [];
|
|
|
+ if($OPCCollect == null){return $deleteIds;}
|
|
|
foreach ($params as $item) {
|
|
|
$key = ' logistic_number='.$item['logistic_number'].' sku='.$item['sku'].' amount='.$item['amount'];
|
|
|
if(!isset($map[$key])){
|
|
|
@@ -655,14 +684,14 @@ class OrderPackageCommoditiesService
|
|
|
}
|
|
|
$map[$key][] = $item;
|
|
|
}
|
|
|
-
|
|
|
foreach ($OPCCollect as $opc) {
|
|
|
$key = ' logistic_number='.$opc['logistic_number'].' sku='.$opc['sku'].' amount='.$opc['amount'];
|
|
|
- if(!isset($map[$key]) || count($map[$key]) ==0) {
|
|
|
- $delteIds[] = $opc['id'];
|
|
|
+ if(!isset($map[$key]) || count($map[$key])==0){
|
|
|
+ $deleteIds[] = $opc['id'];
|
|
|
}
|
|
|
}
|
|
|
- return $delteIds;
|
|
|
+
|
|
|
+ return $deleteIds;
|
|
|
}
|
|
|
|
|
|
public function 删除OPC以及对应的追踪件($ids)
|
|
|
@@ -680,5 +709,38 @@ class OrderPackageCommoditiesService
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public function 根据更新数组进行更新($updateParams)
|
|
|
+ {
|
|
|
+ if(!isset($updateParams)){return;}
|
|
|
+ if(is_array($updateParams) && count($updateParams)==0){return;}
|
|
|
+ $commodity_map = $this->返回Commodity数组_根据数组中sku($updateParams);
|
|
|
+ $orderPackages_map = app(OrderPackageService::class)->返回OrderPackage数组_根据数组中的快递单号($updateParams);
|
|
|
+ $dataTime = Carbon::now()->format('Y-m-d H:i:s');
|
|
|
+ $update_params = [['id','commodity_id','order_package_id','amount','updated_at']];
|
|
|
+ foreach ($updateParams as $updateParam) {
|
|
|
+ $commodity_key = ' ownerCode='.($updateParam['ownerCode'] ?? '').' sku='.($updateParam['sku'] ?? '');
|
|
|
+ $commodity = $commodity_map[$commodity_key] ?? '';
|
|
|
+ $orderPackage = $orderPackages_map[$updateParam['logistic_number']] ?? '';
|
|
|
+ $update_params[] = [
|
|
|
+ 'id' => $updateParam['id'],
|
|
|
+ 'commodity_id' => $commodity->id ?? '',
|
|
|
+ 'order_package_id' => $orderPackage->id ?? '',
|
|
|
+ 'amount' => $updateParam['amount'],
|
|
|
+ 'updated_at' => $dataTime
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ $this->batchUpdate($update_params);
|
|
|
+ }
|
|
|
|
|
|
+ private function 返回Commodity数组_根据数组中sku($params)
|
|
|
+ {
|
|
|
+ $skus = array_unique(data_get($params,'*.sku'));
|
|
|
+ $commodities = Commodity::query()->with('owner')->whereIn('sku',$skus)->get();
|
|
|
+ $commodity_map = [];
|
|
|
+ foreach ($commodities as $commodity) {
|
|
|
+ $key = ' ownerCode='.($commodity->owner->code ?? '').' sku='.$commodity->sku;
|
|
|
+ $commodity_map[$key] = $commodity;
|
|
|
+ }
|
|
|
+ return $commodity_map;
|
|
|
+ }
|
|
|
}
|