|
|
@@ -27,120 +27,6 @@ class OrderPackageService
|
|
|
return OrderPackage::query()->insert($params);
|
|
|
}
|
|
|
|
|
|
- public function createdByOrder($order)
|
|
|
- {
|
|
|
- /** @var OrderPackageCommoditiesService $orderPackageCommoditiesService */
|
|
|
- $orderPackageCommoditiesService = app('OrderPackageCommoditiesService');
|
|
|
- $oracleActAllocationDetails = OracleActAllocationDetails::query()->where('OrderNo', $order['code'])->get();
|
|
|
- $orderHeader = OracleDOCOrderHeader::query()->where('OrderNo', $order['code'])->first();
|
|
|
- $oracleDOCOrderDetail = OracleDOCOrderDetail::query()->where('OrderNo', $order['code'])->get();
|
|
|
- $logistic_number = null;
|
|
|
- if ($oracleActAllocationDetails->count() == 0) { // 通过oracle Order Detail
|
|
|
- $logistic_number = $orderHeader['soreference5'];
|
|
|
- if ($oracleDOCOrderDetail->count() == 0) {
|
|
|
- return null;
|
|
|
- }
|
|
|
- if ($logistic_number == null || $logistic_number == '*') {
|
|
|
- return null;
|
|
|
- }
|
|
|
- try {
|
|
|
- $orderPackage = OrderPackage::query()->firstOrCreate(['order_id' => $order['id'], 'logistic_number' => $logistic_number]);
|
|
|
- $orderPackageCommoditiesService->basedOnOracleDetailsStore($orderHeader['orderno'], $orderPackage);
|
|
|
- app('LogService')->log(__METHOD__, __FUNCTION__, '创建订单包裹orderPackage' . json_encode($orderPackage));
|
|
|
- } catch (\Exception $e) {
|
|
|
- app('LogService')->log(__METHOD__, __FUNCTION__, '创建订单包裹orderPackage失败' . $e->getMessage() . $e->getTraceAsString());
|
|
|
- }
|
|
|
- } else if ($oracleActAllocationDetails->count() > 0) {
|
|
|
- $count = $oracleActAllocationDetails->where('OrderNo', $order['code'])->whereNull('picktotraceid')->count();
|
|
|
- if ($count > 0) { // 快递单号为空
|
|
|
- if (($orderHeader['soreference5'] ?? false) && $orderHeader['soreference5'] == '*') {
|
|
|
- return null;
|
|
|
- }
|
|
|
- $logistic_number = $orderHeader['soreference5'];
|
|
|
-
|
|
|
- try {
|
|
|
- $orderPackage = OrderPackage::query()->firstOrCreate(['order_id' => $order['id'], 'logistic_number' => $logistic_number]);
|
|
|
- $orderPackageCommoditiesService->basedOnOracleDetailsStore($order, $orderPackage);
|
|
|
- app('LogService')->log(__METHOD__, __FUNCTION__, '创建订单包裹orderPackage' . json_encode($orderPackage));
|
|
|
- } catch (\Exception $e) {
|
|
|
- app('LogService')->log(__METHOD__, __FUNCTION__, '创建订单包裹orderPackage失败' . $e->getMessage() . $e->getTraceAsString());
|
|
|
- }
|
|
|
- } else {
|
|
|
- $ActAllocationDetails = $oracleActAllocationDetails->where('orderno', $order['code']);
|
|
|
- $picktotraceids = data_get($ActAllocationDetails,'*.picktotraceid');
|
|
|
- $picktotraceids = array_unique($picktotraceids);
|
|
|
- foreach ($picktotraceids as $picktotraceid) {
|
|
|
- $logistic_number = $picktotraceid;
|
|
|
- if ($logistic_number == null || $logistic_number == '*') {
|
|
|
- $logistic_number = $orderHeader['soreference5'];
|
|
|
- if ($logistic_number == null || $logistic_number == '*') {
|
|
|
- return null;
|
|
|
- }
|
|
|
- $orderPackage = OrderPackage::query()->where(['order_id' => $order['id'], 'logistic_number' => $logistic_number])->first();
|
|
|
- if ($orderPackage) {
|
|
|
- $orderPackageCommoditiesService->basedOnActAllocationDetailsStoreByOrderNo($order['code'], $orderPackage);
|
|
|
- continue;
|
|
|
- }
|
|
|
- try {
|
|
|
- $orderPackage = OrderPackage::query()->create(['order_id' => $order['id'], 'logistic_number' => $logistic_number]);
|
|
|
- $orderPackageCommoditiesService->basedOnActAllocationDetailsStoreByOrderNo($order['code'], $orderPackage);
|
|
|
- app('LogService')->log(__METHOD__, __FUNCTION__, '创建订单orderPackage' . json_encode($orderPackage));
|
|
|
- } catch (\Exception $e) {
|
|
|
- app('LogService')->log(__METHOD__, __FUNCTION__, '创建订单orderPackage失败' . json_encode($e->getMessage()) . json_encode($e->getTraceAsString()));
|
|
|
- }
|
|
|
- continue;
|
|
|
- }
|
|
|
- $orderPackage = OrderPackage::query()->where('order_id', $order['id'])->where('logistic_number', $logistic_number)->first();
|
|
|
- if ($orderPackage) {
|
|
|
- $orderPackageCommoditiesService->basedOnActAllocationDetailsStore($orderPackage);
|
|
|
- continue;
|
|
|
- }
|
|
|
- try {
|
|
|
- $orderPackage = OrderPackage::query()->create(['order_id' => $order['id'], 'logistic_number' => $logistic_number]);
|
|
|
- $orderPackageCommoditiesService->basedOnActAllocationDetailsStore($orderPackage);
|
|
|
- app('LogService')->log(__METHOD__, __FUNCTION__, '创建订单' . json_encode($orderPackage));
|
|
|
- } catch (\Exception $e) {
|
|
|
- app('LogService')->log(__METHOD__, __FUNCTION__, '创建订单orderPackage失败' . json_encode($e->getMessage()) . json_encode($e->getTraceAsString()));
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- unset($oracleActAllocationDetails,$oracleDOCOrderDetail);
|
|
|
- }
|
|
|
- // 需删除
|
|
|
-// public function updateOrderPackageInfo(Order $order)
|
|
|
-// {
|
|
|
-// $orderHeader = OracleDOCOrderHeader::where('orderNo', $order['code'])->first();
|
|
|
-// if ($orderHeader['oracleBASCode_codename_c'] == $order['wam_status']) {
|
|
|
-// return;
|
|
|
-// }
|
|
|
-// $orderPackages = OrderPackage::where('order_id', $order['id'])->get();
|
|
|
-// $orderPackageCommodities = OrderPackageCommodities::with('commodity')->whereIn('order_package_id', data_get($orderPackages, '*.id'))->get();
|
|
|
-// $actAllocationDetails = OracleActAllocationDetails::where('orderNo', $order['client_code'])->get();
|
|
|
-// if (count($orderPackageCommodities) < count($actAllocationDetails)) {
|
|
|
-// $actAllocationDetails = $actAllocationDetails->reject(function ($value, $key) use (&$orderPackageCommodities) {
|
|
|
-// $bool = false;
|
|
|
-// $count = 0;
|
|
|
-// $orderPackageCommodities->reject(function ($value1, $key1) use ($value, &$bool, $count) {
|
|
|
-// if ($count > 0) {
|
|
|
-// return false;
|
|
|
-// }
|
|
|
-// if ($value1->commodity['sku'] == $value['sku'] && $value1['amount'] == intval($value['qty'])) {
|
|
|
-// $bool = true;
|
|
|
-// $count++;
|
|
|
-// return true;
|
|
|
-// } else {
|
|
|
-// return false;
|
|
|
-// }
|
|
|
-// });
|
|
|
-// return $bool;
|
|
|
-// });
|
|
|
-// }
|
|
|
-// $orderPackageCommoditiesService = app('OrderPackageCommoditiesService');
|
|
|
-// $orderPackageCommoditiesService->basedOnActAllocationDetail($order, $orderHeader, $actAllocationDetails);
|
|
|
-// $order['wam_status'] = $orderHeader['oracleBASCode_codename_c'];
|
|
|
-// $order->save();
|
|
|
-// }
|
|
|
/**
|
|
|
* @param string $logistic_number
|
|
|
* @param array $values
|
|
|
@@ -177,127 +63,6 @@ class OrderPackageService
|
|
|
->paginate($paginate);
|
|
|
}
|
|
|
|
|
|
- public function createByWmsOrder($orderHeaders)
|
|
|
- {
|
|
|
- /**
|
|
|
- * @var OrderService $orderService
|
|
|
- * @var DataHandlerService $dataHandlerService
|
|
|
- * @var OrderPackageCommoditiesService $orderPackageCommodityService
|
|
|
- */
|
|
|
- $orderService = app(OrderService::class);
|
|
|
- $dataHandlerService = app(DataHandlerService::class);
|
|
|
- $orderPackageCommodityService = app(OrderPackageCommoditiesService::class);
|
|
|
-
|
|
|
- if(!$orderHeaders ){return ;}
|
|
|
- $orders = $orderService->getByWmsOrders($orderHeaders);
|
|
|
- if(!$orders){return ;}
|
|
|
- $order_packages = OrderPackage::query()->whereIn('order_id',data_get($orders,'*.id'))->get();
|
|
|
-
|
|
|
- $order_packages_logistic_number_map=$dataHandlerService->dataHeader(['order_id','logistic_number'],$order_packages);
|
|
|
- $order_headers_orderNo_map = $dataHandlerService->dataHeader(['orderno'],$orderHeaders);
|
|
|
-
|
|
|
- $insert_params = [];
|
|
|
- foreach ($orders as $order) {
|
|
|
- $orderHeader = $dataHandlerService->getKeyValue(['orderno'=>$order->code],$order_headers_orderNo_map);
|
|
|
- if(!$orderHeader){ continue;}
|
|
|
- if(!$orderHeader->sostatus == 90){ continue;}
|
|
|
- $params = $this->getParamsByOrderHeader($orderHeader,$order,$order_packages_logistic_number_map);
|
|
|
- if(!$params){continue;}
|
|
|
- foreach ($params as $param) {
|
|
|
- $key = ['order_id'=>$param['order_id'],'logistic_number'=>$param['logistic_number']];
|
|
|
- $orderPackage = $dataHandlerService->getKeyValue($key,$order_packages_logistic_number_map);
|
|
|
- if(isset($orderPackage)){
|
|
|
- continue;
|
|
|
- }else{
|
|
|
- $insert_params[] = $param;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if(count($insert_params)>0){
|
|
|
- $order_packages = $this->create($insert_params);
|
|
|
- }
|
|
|
- unset($orders_code_map,$order_packages_logistic_number_ma,$insert_params,$order_packages,$order_package_commodities);
|
|
|
- $orderPackageCommodityService->createByWmsOrder($orderHeaders);
|
|
|
- unset($orderHeaders);
|
|
|
- }
|
|
|
-
|
|
|
- public function getParamsByOrderHeader($orderHeader,$order,$order_packages_logistic_number_map)
|
|
|
- {
|
|
|
- /** @var DataHandlerService $dataHandlerService */
|
|
|
- $dataHandlerService = app(DataHandlerService::class);
|
|
|
- $actAllocationDetails = $orderHeader->actAllocationDetails;
|
|
|
- $logistic_numbers = array_diff(array_unique(data_get($actAllocationDetails,'*.picktotraceid')),['','*',null]);
|
|
|
- $params = [];
|
|
|
- $created_at = Carbon::now()->format('Y-m-d H:i:s');
|
|
|
- $updated_at = Carbon::now()->format('Y-m-d H:i:s');
|
|
|
- foreach ($logistic_numbers as $logistic_number) {
|
|
|
-// if($logistic_number == $orderHeader->orderno)continue;
|
|
|
- $key = ['order_id'=>$order->id,'logistic_number'=>$logistic_number];
|
|
|
- $orderPackage = $dataHandlerService->getKeyValue($key,$order_packages_logistic_number_map);
|
|
|
- if(isset($orderPackage)){ continue;}
|
|
|
- $params[] = [
|
|
|
- 'order_id' => $order->id, 'logistic_number' => $logistic_number,'created_at' => $created_at,'updated_at' => $updated_at
|
|
|
- ];
|
|
|
- }
|
|
|
- return $params;
|
|
|
- }
|
|
|
-
|
|
|
-// public function getUpdateParamsByOrderHeader($orderHeader,$order,$orderPackages)
|
|
|
-// {
|
|
|
-// $updated_at = Carbon::now()->format('Y-m-d H:i:s');
|
|
|
-// /** @var DataHandlerService $dataHandlerService */
|
|
|
-// $dataHandlerService = app(DataHandlerService::class);
|
|
|
-// $wms_logistic_number = app(OracleDOCOrderHeaderService::class)->getLogisticNumbers($orderHeader);
|
|
|
-// $order_packages = $orderPackages->where('order_id',$order->id)->get();
|
|
|
-// $was__logistic_number = data_get($order_packages,'*.logistic_number');
|
|
|
-// $arr1= array_diff($was__logistic_number,$wms_logistic_number);
|
|
|
-// $arr2= array_diff($wms_logistic_number,$was__logistic_number);
|
|
|
-// if(count($arr2) > 0 && count($arr1) == 0){
|
|
|
-// return [
|
|
|
-// 'id'=>$order_packages->first()->id,
|
|
|
-// 'logistic_number' => $arr1[0],
|
|
|
-// 'updated_at'=> $updated_at,
|
|
|
-// ];
|
|
|
-// }
|
|
|
-// return null;
|
|
|
-// }
|
|
|
-
|
|
|
- public function updateOrderPackageByWmsOrder($orderHeaders){
|
|
|
- /** @var OrderPackageCommoditiesService $orderPackageCommoditiesService */
|
|
|
- $orderPackageCommoditiesService = app(OrderPackageCommoditiesService::class);
|
|
|
- /** @var DataHandlerService $dataHandlerService */
|
|
|
- $dataHandlerService = app(DataHandlerService::class);
|
|
|
- if(!$orderHeaders){return;}
|
|
|
-
|
|
|
- $orders = Order::query()->with('packages')->whereIn('code',data_get($orderHeaders,'*.orderno'))->get();
|
|
|
- $orders_code_map = $dataHandlerService->dataHeader(['code'],$orders);
|
|
|
-
|
|
|
- $orderPackages =$this->getByWmsOrders($orderHeaders);
|
|
|
- $order_packages_logistic_number_map = $dataHandlerService->dataHeader(['order_id','logistic_number'],$orderPackages);
|
|
|
-
|
|
|
- $insertParams = [];
|
|
|
- foreach ($orderHeaders as $orderHeader) {
|
|
|
- $order = $dataHandlerService->getKeyValue(['code'=>$orderHeader->orderno ?? ''],$orders_code_map);
|
|
|
- if(!$order){continue;}
|
|
|
- $order_packages = $order->packages ?? null;
|
|
|
- if(!$order_packages){continue;}
|
|
|
- $params =$this->getParamsByOrderHeader($orderHeader,$order,$order_packages_logistic_number_map);
|
|
|
- if(count($params) > 0){
|
|
|
- foreach ($params as $param) {
|
|
|
- $key = ['order_id'=>$param['order_id'],'logistic_number'=>$param['logistic_number']];
|
|
|
- $order_package = $dataHandlerService->getKeyValue($key,$order_packages_logistic_number_map);
|
|
|
- if($order_package){continue;}
|
|
|
- $insertParams[] = $param;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- if(count($insertParams)>0){
|
|
|
- $this->create($insertParams);
|
|
|
- }
|
|
|
- $orderPackageCommoditiesService->updateByWmsOrder($orderHeaders);
|
|
|
- $this->删除多余的订单包裹_根据WMS订单($orderHeaders);
|
|
|
- }
|
|
|
-
|
|
|
public function getByWmsOrders($orderHeaders){
|
|
|
$order_nos = data_get($orderHeaders,'*.orderno');
|
|
|
return OrderPackage::query()->with('order')
|
|
|
@@ -321,29 +86,6 @@ class OrderPackageService
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * @param OracleDOCOrderHeader $orderHeaders
|
|
|
- */
|
|
|
- public function 删除多余的订单包裹_根据WMS订单($orderHeaders)
|
|
|
- {
|
|
|
- if(!isset($orderHeaders)){return;}
|
|
|
- if(is_array($orderHeaders) && count($orderHeaders) == 0){return;}
|
|
|
- $orderPackages = $this->getByWmsOrders($orderHeaders);
|
|
|
- $Was_logistic_number = data_get($orderPackages,'*.logistic_number');
|
|
|
- $Wms_logistic_number = array_unique(data_get($orderHeaders,'*.actAllocationDetails.*.picktotraceid'));
|
|
|
- $delete_logistic_number = array_diff($Was_logistic_number,$Wms_logistic_number);
|
|
|
- if(count($delete_logistic_number) == 0){return;}
|
|
|
- $delete_orderPackages = OrderPackage::query()->wherein('logistic_number',$delete_logistic_number)->get();
|
|
|
- $delete_ids = app(OrderPackageCommoditiesService::class)->删除包裹商品信息_根据快递单号($delete_logistic_number);
|
|
|
- try {
|
|
|
- OrderPackage::query()->whereIn('logistic_number', $delete_logistic_number)->delete();
|
|
|
- app('LogService')->log(__METHOD__,__FUNCTION__,'删除多余OrderPackage '.$delete_orderPackages->count().json_encode($delete_orderPackages),null);
|
|
|
- $orderTracking = OrderTracking::query()->whereIn('order_package_commodity_id', $delete_ids)->get();
|
|
|
- app(OrderTrackingService::class)->deleteOrderTracings($orderTracking);
|
|
|
- } catch (\Exception $e) {
|
|
|
- app('LogService')->log(__METHOD__,__FUNCTION__,'删除多余OrderPackage error'.$delete_orderPackages->count().json_encode($delete_orderPackages).$e->getMessage().$e->getTraceAsString(),null);
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
/**
|
|
|
* @param array $orderNos
|
|
|
@@ -392,34 +134,14 @@ class OrderPackageService
|
|
|
|
|
|
public function syncPackageByOrderHeaders(&$orderHeaders)
|
|
|
{
|
|
|
- /**
|
|
|
- * @var OrderService $orderService
|
|
|
- * @var OrderPackageCommoditiesService $orderPackageCommodityService
|
|
|
- * @var OrderTrackingService $orderTrackingService
|
|
|
- */
|
|
|
+ /** @var OrderService $orderService */
|
|
|
$orderService = app('OrderService');
|
|
|
- $orderPackageCommodityService= app('OrderPackageCommoditiesService');
|
|
|
-// $orderTrackingService = app('OrderTrackingService');
|
|
|
if(!$orderHeaders)return;
|
|
|
-
|
|
|
$orders = $orderService->getByWmsOrders($orderHeaders);
|
|
|
-
|
|
|
$packages = $this->getByOrderNos(data_get($orderHeaders,'*.orderno')); // 已有
|
|
|
-
|
|
|
$this->createOrderPackage($orderHeaders,$orders,$packages); // 创建package
|
|
|
- $del_ids = $this->deleteUnnecessaryPackage($orderHeaders,$packages); // 删除package
|
|
|
+ $this->deleteUnnecessaryPackage($orderHeaders,$packages); // 删除package
|
|
|
unset($orders,$packages); // 手动清除
|
|
|
- if(count($del_ids)==0)return;
|
|
|
- OrderPackageCommodities::query()->whereIn('order_package_id',$del_ids)->delete();
|
|
|
- $orderPackageCommodityService->deleteUnnecessaryOrderCommodities($del_ids); // 删除 orderCommodity
|
|
|
- unset($del_ids);
|
|
|
-// $orderTracking = OrderTracking::query()->whereIn('order_package_commodity_id',function($query)use($del_ids){
|
|
|
-// $query->from('order_package_commodities')->select('order_package_commodities.id')->whereIn('order_package_id',$del_ids);
|
|
|
-// })->get();
|
|
|
-// if($orderTracking->count()==0)return;
|
|
|
-//
|
|
|
-// $orderTrackingService->deleteOrderTracings($orderTracking); // 删除追踪件+
|
|
|
-// unset($orderTracking); // 手动清除
|
|
|
}
|
|
|
|
|
|
public function createOrderPackage($orderHeaders,$orders,$packages)
|
|
|
@@ -479,12 +201,14 @@ class OrderPackageService
|
|
|
{
|
|
|
/**
|
|
|
* @var DataHandlerService $dataHandlerService
|
|
|
+ * @var OrderTrackingService $orderTrackingService
|
|
|
+ * @var OrderPackageCommoditiesService $orderPackageCommoditiesService
|
|
|
*/
|
|
|
$dataHandlerService = app(DataHandlerService::class);
|
|
|
+ $orderPackageCommoditiesService = app('OrderPackageCommoditiesService');
|
|
|
$logistic_numbers = data_get($orderHeaders,'*.actAllocationDetails.*.picktotraceid'); // 获取picktotraceid (运单的快递单号)
|
|
|
$logistic_numbers = array_unique($logistic_numbers);
|
|
|
$logistic_numbers = array_diff($logistic_numbers,['',' ','*']);
|
|
|
-
|
|
|
$packages_maps = $dataHandlerService->dataHeader(['logistic_number'],$packages);
|
|
|
$exits_number = data_get($packages,'*.logistic_number');
|
|
|
$packages = [];
|
|
|
@@ -496,11 +220,12 @@ class OrderPackageService
|
|
|
if(count($packages)==0)return $packages;
|
|
|
try {
|
|
|
$bool = OrderPackage::query()->whereIn('id', $packages)->delete();
|
|
|
+ $orderPackageCommodities = OrderPackageCommodities::query()->where('order_package_id',$packages)->get();
|
|
|
+ $orderPackageCommoditiesService->deleteOrderCommodities($orderPackageCommodities);
|
|
|
$bool ? LogService::log(__METHOD__,__FUNCTION__,'删除多余包裹 ids:'.json_encode($packages)) : null;
|
|
|
- return $bool ? $packages : collect();
|
|
|
} catch (\Exception $e) {
|
|
|
LogService::log(__METHOD__,__FUNCTION__,'删除多余包裹 ids:'.json_encode($packages).$e->getMessage());
|
|
|
- return collect();
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
}
|