|
|
@@ -2,6 +2,7 @@
|
|
|
|
|
|
namespace App\Services;
|
|
|
|
|
|
+use App\Logistic;
|
|
|
use App\OracleActAllocationDetails;
|
|
|
use App\OracleDOCOrderDetail;
|
|
|
use App\OracleDOCOrderHeader;
|
|
|
@@ -125,18 +126,25 @@ class OrderPackageService
|
|
|
if(!$orderHeaders)return;
|
|
|
/**
|
|
|
* @var DataHandlerService $dataHandlerService
|
|
|
+ * @var LogisticService $logsitcService
|
|
|
*/
|
|
|
+ $logisticService = app(LogisticService::class);
|
|
|
$dataHandlerService = app(DataHandlerService::class);
|
|
|
$orderHeaders_map = $dataHandlerService->dataHeader(['orderno'],$orderHeaders);
|
|
|
$packages_maps = $dataHandlerService->dataHeader(['logistic_number'],$packages);
|
|
|
$inner_params = [];
|
|
|
+
|
|
|
+ /** 定制京东快递的订单 */
|
|
|
+ $logistic = $logisticService->getLogisticByCodes(['JDKD']);
|
|
|
foreach ($orders as $order){
|
|
|
$orderHeader = $dataHandlerService->getKeyValue(['orderno'=>$order->code],$orderHeaders_map);
|
|
|
if(!$orderHeader)continue;
|
|
|
if($orderHeader->sotatus == 90)continue;
|
|
|
- $params = $this->getInnerParams($orderHeader,$order,$packages_maps);
|
|
|
+ $params = $this->getInnerParams($orderHeader,$order,$packages_maps,$logistic);
|
|
|
$inner_params = array_merge($inner_params,$params);
|
|
|
}
|
|
|
+
|
|
|
+ /** 批量添加 */
|
|
|
if(count($inner_params)>0){
|
|
|
try {
|
|
|
$inner_array = array_chunk($inner_params,5000);
|
|
|
@@ -150,31 +158,43 @@ class OrderPackageService
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public function getInnerParams($orderHeader,$order,$packages_maps)
|
|
|
+ public function getInnerParams($orderHeader,$order,$packages_maps,$logistic): array
|
|
|
{
|
|
|
/**
|
|
|
* @var DataHandlerService $dataHandlerService
|
|
|
*/
|
|
|
$dataHandlerService = app('DataHandlerService');
|
|
|
$logistic_numbers = array_diff(array_unique(data_get($orderHeader->actAllocationDetails,'*.picktotraceid')),['','*']);
|
|
|
+ $date = Carbon::now()->format('Y-m-d H:i:s');
|
|
|
$inner_params = [];
|
|
|
+ $sentAtMap = [];
|
|
|
+
|
|
|
if($orderHeader['sostatus'] == '90'){
|
|
|
if($orderHeader['soreference5']=='')$logistic_numbers = [$orderHeader['orderno']];
|
|
|
else $logistic_numbers = [$orderHeader['soreference5']];
|
|
|
}
|
|
|
- $date = Carbon::now()->format('Y-m-d H:i:s');
|
|
|
- $sentAtMap = [];
|
|
|
+
|
|
|
+ /** sent_at checktime */
|
|
|
foreach ($orderHeader->actAllocationDetails as $item){
|
|
|
$sentAtMap[$item->picktotraceid] = $item;
|
|
|
}
|
|
|
+
|
|
|
+ /** 承运商是京东时的定制操作 */
|
|
|
+ if($order['id'] == $logistic['id'] && count($logistic_numbers) == 1){
|
|
|
+ $logistic_numbers = [$orderHeader['soreference5']];
|
|
|
+ $sentAtMap[$orderHeader['soreference5']] = $orderHeader->actAllocationDetails->first() ?? null;
|
|
|
+ }
|
|
|
+
|
|
|
foreach ($logistic_numbers as $logistic_number){
|
|
|
$package = $dataHandlerService->getKeyValue(['logistic_number'=>$logistic_number],$packages_maps);
|
|
|
+
|
|
|
if(isset($package))continue;
|
|
|
try {
|
|
|
$data = $sentAtMap[$logistic_number];
|
|
|
} catch (\Exception $e) {
|
|
|
$data = null;
|
|
|
}
|
|
|
+
|
|
|
$inner_params[] = [
|
|
|
'order_id' => $order->id,
|
|
|
'logistic_number' => $logistic_number,
|
|
|
@@ -188,6 +208,7 @@ class OrderPackageService
|
|
|
return $inner_params;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
public function deleteUnnecessaryPackage($orderHeaders,$packages)
|
|
|
{
|
|
|
/**
|
|
|
@@ -197,23 +218,39 @@ class OrderPackageService
|
|
|
*/
|
|
|
$dataHandlerService = app(DataHandlerService::class);
|
|
|
$orderPackageCommoditiesService = app('OrderPackageCommoditiesService');
|
|
|
- $logistic_numbers = data_get($orderHeaders,'*.actAllocationDetails.*.picktotraceid'); // 获取picktotraceid (运单的快递单号)
|
|
|
+
|
|
|
+ /** 获取所有的 picktotraceid WMS快递单号*/
|
|
|
+ $logistic_numbers = data_get($orderHeaders,'*.actAllocationDetails.*.picktotraceid');
|
|
|
+
|
|
|
+ /** WMS定制化操作 订单取消 和 京东快递*/
|
|
|
foreach ($orderHeaders as $orderHeader) {
|
|
|
if($orderHeader['sostatus'] == '90'){
|
|
|
if($orderHeader['soreference5']=='')$logistic_numbers[] =$orderHeader['orderno'];
|
|
|
else $logistic_numbers[] = $orderHeader['soreference5'];
|
|
|
}
|
|
|
+ if($orderHeader['userdefine1'] == 'JDKD'){
|
|
|
+ $logistic_numbers[] = $orderHeader['soreference5'];
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
+ /** WMS快递单号唯一化 剔除 '',' ','*'*/
|
|
|
$logistic_numbers = array_unique(array_values($logistic_numbers));
|
|
|
$logistic_numbers = array_diff($logistic_numbers,['',' ','*']);
|
|
|
+
|
|
|
+ /** WAS数据库中已有的快递单号*/
|
|
|
$packages_maps = $dataHandlerService->dataHeader(['logistic_number'],$packages);
|
|
|
$exits_number = data_get($packages,'*.logistic_number');
|
|
|
+
|
|
|
+ /** WMS快递单号 和 WAS的快递单号 的差集*/
|
|
|
$packages = [];
|
|
|
$diff_number = array_diff($exits_number,$logistic_numbers);
|
|
|
+ /** 记录差集对应的OrderPackage的id*/
|
|
|
foreach ($diff_number as $number) {
|
|
|
$package = $dataHandlerService->getKeyValue(['logistic_number'=>$number],$packages_maps);
|
|
|
if($package ?? false)$packages[]=$package->id;
|
|
|
}
|
|
|
+
|
|
|
+ /** 删除 OrderPackage 和 OrderPackageCommodities*/
|
|
|
if(count($packages)==0)return;
|
|
|
try {
|
|
|
$bool = OrderPackage::query()->whereIn('id', $packages)->delete();
|