|
|
@@ -10,10 +10,12 @@ use App\OracleDOCOrderHeader;
|
|
|
use App\Order;
|
|
|
use App\OrderPackage;
|
|
|
use App\OrderPackageCommodities;
|
|
|
+use App\OrderTracking;
|
|
|
use App\Owner;
|
|
|
use App\Services\common\BatchUpdateService;
|
|
|
use App\Services\common\DataHandlerService;
|
|
|
use Carbon\Carbon;
|
|
|
+use Illuminate\Support\Collection;
|
|
|
|
|
|
class OrderPackageCommoditiesService
|
|
|
{
|
|
|
@@ -37,7 +39,7 @@ class OrderPackageCommoditiesService
|
|
|
public function basedOnActAllocationDetailsStoreByOrderNo($orderNo,$orderPackage){
|
|
|
$details = OracleActAllocationDetails::query()->where('orderno', $orderNo)->get();
|
|
|
$orderPackageCommodities = OrderPackageCommodities::query()->where('order_package_id',$orderPackage['id'])->get();
|
|
|
- $this->根据详情更新OrderPackage下的商品信息($orderPackage,$orderPackageCommodities,$details,'qty');
|
|
|
+ $this->根据详情更新OrderPackage下的商品信息($orderPackage,$orderPackageCommodities,$details,'qty_each');
|
|
|
unset($details,$orderPackageCommodities);
|
|
|
}
|
|
|
|
|
|
@@ -103,7 +105,7 @@ class OrderPackageCommoditiesService
|
|
|
{
|
|
|
$details = OracleActAllocationDetails::query()->where('picktotraceid', $orderPackage->logistic_number)->get();
|
|
|
$orderPackageCommodities = OrderPackageCommodities::query()->where('order_package_id',$orderPackage['id'])->get();
|
|
|
- $this->根据详情更新OrderPackage下的商品信息($orderPackage,$orderPackageCommodities,$details,'qty');
|
|
|
+ $this->根据详情更新OrderPackage下的商品信息($orderPackage,$orderPackageCommodities,$details,'qty_each');
|
|
|
unset($details,$orderPackageCommodities);
|
|
|
}
|
|
|
|
|
|
@@ -133,9 +135,9 @@ class OrderPackageCommoditiesService
|
|
|
$commodity = Commodity::query()->create(['sku' => $sku, 'owner_id' => $owner_id, 'name' => $basSku->descr_c]);
|
|
|
}
|
|
|
try {
|
|
|
- $count = OrderPackageCommodities::query()->where(['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qty']])->count();
|
|
|
+ $count = OrderPackageCommodities::query()->where(['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qty_each']])->count();
|
|
|
if($count == 0){
|
|
|
- $orderPackageCommodities = OrderPackageCommodities::query()->firstOrCreate(['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qty']]);
|
|
|
+ $orderPackageCommodities = OrderPackageCommodities::query()->firstOrCreate(['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qty_each']]);
|
|
|
LogService::log(__METHOD__,__FUNCTION__,'创建订单包裹详情'.json_encode($orderPackageCommodities));
|
|
|
}
|
|
|
} catch (\Exception $e) {
|
|
|
@@ -145,311 +147,53 @@ class OrderPackageCommoditiesService
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public function getOrderPackageCommoditiesByOrderId($orderId)
|
|
|
- {
|
|
|
- $order = Order::query()->where('id', $orderId)->first();
|
|
|
- if (!$order) {
|
|
|
- return null;
|
|
|
- }
|
|
|
- $orderPackageIds = OrderPackage::query()->select('id')->where('order_id', $order['id'])->get();
|
|
|
- if (!$orderPackageIds) {
|
|
|
- return null;
|
|
|
- }
|
|
|
- return OrderPackageCommodities::query()->with('commodity')->whereIn('order_package_id', $orderPackageIds)->get();
|
|
|
- }
|
|
|
-
|
|
|
- public function createByOrderDetail(OracleDOCOrderDetail $detail, OrderPackage $orderPackage)
|
|
|
- {
|
|
|
- $owner = Owner::query()->where('code', $detail['customerid'])->first(); // 货主
|
|
|
- $sku = $detail->sku; // sku
|
|
|
- $owner_id = $owner->id; // 货主id
|
|
|
- $commodity = Commodity::query()->where('sku', $sku)->where('owner_id', $owner_id)->first(); // 商品
|
|
|
- if ($commodity == null) {
|
|
|
- $basSku = OracleBasSKU::query()->where('sku', $sku)->where('customerid' , $detail->customerid)->first(); // 没有找到对应的商品信息
|
|
|
- $commodity = Commodity::query()->create(['sku' => $sku, 'owner_id' => $owner_id, 'name' => $basSku->descr_c]);
|
|
|
- }
|
|
|
- return OrderPackageCommodities::query()->create(['order_package_id' => $orderPackage['id'], 'commodity_id' => $commodity['id'], 'amount' => $detail['qtyordered']]);
|
|
|
- }
|
|
|
-
|
|
|
- public function 根据WMS订单信息创建WAS订单包裹商品($orderHeaders,$oracleDOCOrderDetails,$actAllocationDetails,$orders)
|
|
|
- {
|
|
|
- /** @var CommodityService $commodityService */
|
|
|
- $commodityService = app('commodityService');
|
|
|
- $commodities = $commodityService->getWASCommoditiesByWMSOrderHeaders($orderHeaders); // 商品
|
|
|
-
|
|
|
- $orderPackages = [];
|
|
|
- $orderList = [];
|
|
|
- foreach ($orders as $order) {
|
|
|
- $orderList[$order['id']] = $order;
|
|
|
- $packages = $order['packages'] ?? [];
|
|
|
- foreach ($packages as $package) {
|
|
|
- $orderPackages[$package['logistic_number']] = $package;
|
|
|
- }
|
|
|
- }
|
|
|
- $fillables = [];
|
|
|
- foreach ($orderPackages as $key=>$orderPackage) {
|
|
|
- $logistic_number = $key;
|
|
|
- $order = $orderList[$orderPackage['order_id']];
|
|
|
- $details1 = $actAllocationDetails[strval($logistic_number)] ?? [];
|
|
|
- $details2 = [];
|
|
|
- if(count($details1)== 0){
|
|
|
- $details2 = $actAllocationDetails[$order['code']] ?? [];
|
|
|
- }
|
|
|
- if(count($details1) > 0 || count($details2) > 0){
|
|
|
- $items = $this->根据订单分配详情返回创建数组($details1,$orderPackage,$commodities,$order);
|
|
|
- foreach ($items as $item){
|
|
|
- $fillables[] = $item;
|
|
|
- }
|
|
|
- $items = $this->根据订单分配详情返回创建数组($details2,$orderPackage,$commodities,$order);
|
|
|
- foreach ($items as $item){
|
|
|
- $fillables[] = $item;
|
|
|
- }
|
|
|
- continue;
|
|
|
- }
|
|
|
- $details = $oracleDOCOrderDetails[$order['code']] ?? [];
|
|
|
- if($details->count() >0){
|
|
|
- $items = $this->根据订单详情返回创建数组($details,$orderPackage,$commodities,$order);
|
|
|
- foreach ($items as $item){
|
|
|
- $fillables[] = $item;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- try {
|
|
|
- if(count($fillables) > 0){
|
|
|
- OrderPackageCommodities::query()->insert($fillables);
|
|
|
- LogService::log(__METHOD__,__FUNCTION__,'批量创建 OrderPackageCommodities'.count($fillables).json_encode($fillables));
|
|
|
- }
|
|
|
- } catch (\Exception $e) {
|
|
|
- LogService::log(__METHOD__,__FUNCTION__,'批量创建异常 OrderPackageCommodities error '.json_encode($fillables).$e->getMessage().$e->getTraceAsString());
|
|
|
- } finally {
|
|
|
- $orderIds = data_get($orders,'*.id');
|
|
|
- return Order::query()->with('packages.commodities')->whereIn('id',$orderIds)->get();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // XXX 逻辑优化 删除不存在未完成
|
|
|
- public function 更新WAS订单快递打包商品信息($orderHeaders,$orders,$commodities)
|
|
|
- {
|
|
|
- $newItems = $this->获取WMS订单打包信息($orderHeaders,$commodities,$orders);
|
|
|
- $orderPackagesCommodities = $this->basedOrdersReturnOrderPackageCommodities($orders);
|
|
|
-
|
|
|
- $multipleData = [['id','order_package_id','commodity_id']];
|
|
|
- $packageCommodity_list_amount = [];
|
|
|
- $packageCommodity_list = [];
|
|
|
-
|
|
|
- foreach ($orderPackagesCommodities as $item) {
|
|
|
- $key = 'order_package_id='.$item['order_package_id'].' commodity_id='.$item['commodity_id'].' amount='.$item['amount'];
|
|
|
- if(!($packageCommodity_list_amount[$key] ?? false)){
|
|
|
- $packageCommodity_list_amount[$key] = [];
|
|
|
- }
|
|
|
- $packageCommodity_list_amount[$key][] = $item;
|
|
|
- $key2 = 'order_package_id'.$item['order_package_id'].' commodity_id='.$item['commodity_id'];
|
|
|
- if($packageCommodity_list[$key2] ?? false){
|
|
|
- $packageCommodity_list[$key2] = [];
|
|
|
- }
|
|
|
- $packageCommodity_list[$key2][] = $item;
|
|
|
- }
|
|
|
- foreach ($newItems as $key=>$newItem) {
|
|
|
- $key1 = 'order_package_id='.$newItem['order_package_id'].' commodity_id='.$newItem['commodity_id'].' amount='.$newItem['amount'];
|
|
|
- $packageCommodity = $packageCommodity_list_amount[$key1][0] ?? false;
|
|
|
- if($packageCommodity ?? false){
|
|
|
- unset($newItems[$key]);
|
|
|
- array_shift($packageCommodity_list_amount[$key1]);
|
|
|
- }else{
|
|
|
- $key2 = 'order_package_id'.$newItem['order_package_id'].' commodity_id='.$newItem['commodity_id'];
|
|
|
- $packageCommodity = $packageCommodity_list[$key2][0] ?? false;
|
|
|
- if($packageCommodity ?? false) {
|
|
|
- $amount = intval($newItem['amount']);
|
|
|
- if($packageCommodity['amount'] !== $amount){
|
|
|
- $data = [
|
|
|
- 'order_package_id' => $packageCommodity['order_package_id'],
|
|
|
- 'commodity_id' => $packageCommodity['commodity_id'],
|
|
|
- 'amount' => $amount,
|
|
|
- ];
|
|
|
- $multipleData[] = $data;
|
|
|
- }
|
|
|
- array_shift($packageCommodity_list[$key2]);
|
|
|
- unset($newItems[$key]);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- try {
|
|
|
- if (count($newItems) > 0) {
|
|
|
- OrderPackageCommodities::query()->insert($newItems);
|
|
|
- LogService::log(__METHOD__, __FUNCTION__, '添加打包信息' . json_encode($newItems));
|
|
|
- }
|
|
|
- }catch (\Exception $e) {
|
|
|
- LogService::log(__METHOD__, __FUNCTION__, '添加打包信息失败' . json_encode($newItems).$e->getMessage().$e->getTraceAsString());
|
|
|
- }
|
|
|
-
|
|
|
- if(count($multipleData) > 1){
|
|
|
- try {
|
|
|
- /** @var BatchUpdateService $batchUpdateService */
|
|
|
- $batchUpdateService = app('batchUpdateService');
|
|
|
- $batchUpdateService->batchUpdate('order_package_commodities', $multipleData);
|
|
|
- LogService::log(__METHOD__,__FUNCTION__,'批量更新'.count($multipleData).json_encode($multipleData));
|
|
|
- } catch (\Exception $e) {
|
|
|
- LogService::log(__METHOD__,__FUNCTION__,'批量更新失败'.json_encode($multipleData).$e->getMessage(),$e->getTraceAsString());
|
|
|
- } finally {
|
|
|
- unset($multipleData);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private function 获取WMS订单打包信息($orderHeaders,$commodities,$orders){
|
|
|
- $newItems = [];
|
|
|
-
|
|
|
- $commodities_list = [];
|
|
|
- foreach ($commodities as $commodity) {
|
|
|
- $key = 'sku='.$commodity['sku'].' owner_id='.$commodity['owner_id'];
|
|
|
- $commodities_list[$key] = $commodity;
|
|
|
- }
|
|
|
- foreach ($orderHeaders as $orderHeader) {
|
|
|
- $order = $orders[$orderHeader['orderno']] ?? null;
|
|
|
- if(!isset($order)){
|
|
|
- continue;
|
|
|
- }
|
|
|
- $orderPackages = $order['packages'];
|
|
|
- $oracleDOCOrderDetails = $orderHeader['oracleDOCOrderDetails'] ?? [];
|
|
|
- $actAllocationDetails = $orderHeader['actAllocationDetails'] ?? [];
|
|
|
-
|
|
|
- if($actAllocationDetails->count() > 0){
|
|
|
- foreach ($orderPackages as $orderPackage) {
|
|
|
- $details = [];
|
|
|
- if($orderPackage['logistic_number'] == $orderHeader['soreference5'] ){
|
|
|
- foreach ($actAllocationDetails as $detail) {
|
|
|
- if($detail['picktotraceid'] == '*' || $detail['picktotraceid'] == $orderHeader['soreference5'])
|
|
|
- $details[] = $detail;
|
|
|
- }
|
|
|
- }else{
|
|
|
- $logistic_number = $orderPackage['logistic_number'];
|
|
|
- foreach ($actAllocationDetails as $detail) {
|
|
|
- if($detail['picktotraceid'] == $logistic_number)
|
|
|
- $details[] = $detail;
|
|
|
- }
|
|
|
- }
|
|
|
- $addArr = $this->basedDetailsReturnFillables($details,$orderPackage,$commodities_list,$order,'qty');
|
|
|
- $newItems = array_merge($newItems,$addArr);
|
|
|
- }
|
|
|
- }elseif($oracleDOCOrderDetails->count() > 0){
|
|
|
- foreach ($orderPackages as $orderPackage) {
|
|
|
- $details = [];
|
|
|
- $logistic_number = $orderPackage['logistic_number'];
|
|
|
- foreach ($actAllocationDetails as $detail) {
|
|
|
- if($detail['dropid'] == $logistic_number){
|
|
|
- array_push($details,$detail);
|
|
|
- }
|
|
|
- }
|
|
|
- $addArr = $this->basedDetailsReturnFillables($details,$orderPackage,$commodities_list,$order,'qtyordered');
|
|
|
- $newItems = array_merge($newItems,$addArr);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return $newItems;
|
|
|
- }
|
|
|
-
|
|
|
- public function 根据订单详情返回创建数组($details,$orderPackage,$commodities,$order){
|
|
|
- $orderPackagerCommodities = [];
|
|
|
- foreach ($details as $detail) {
|
|
|
- $commodity = $commodities->where('sku', $detail['sku'])->where('owner_id', $order['owner_id'])->first();
|
|
|
- $fillable = [
|
|
|
- 'order_package_id' => $orderPackage['id'] ?? '',
|
|
|
- 'commodity_id' => $commodity['id'] ?? '',
|
|
|
- 'amount' => $detail['qtyordered'],
|
|
|
- ];
|
|
|
- $orderPackagerCommodities[] = $fillable;
|
|
|
- }
|
|
|
- return $orderPackagerCommodities;
|
|
|
- }
|
|
|
-
|
|
|
- public function 根据订单分配详情返回创建数组($details,$orderPackage,$commodities,$order){
|
|
|
- $orderPackagerCommodities = [];
|
|
|
- foreach ($details as $detail) {
|
|
|
-
|
|
|
- $commodity = $commodities->where('sku', $detail['sku'])->where('owner_id', $order['owner_id'])->first();
|
|
|
- $fillable = [
|
|
|
- 'order_package_id' => $orderPackage['id'] ?? '',
|
|
|
- 'commodity_id' => $commodity['id'] ?? '',
|
|
|
- 'amount' => $detail['qty'] ?? '',
|
|
|
- ];
|
|
|
- array_push($orderPackagerCommodities,$fillable);
|
|
|
- }
|
|
|
- return $orderPackagerCommodities;
|
|
|
- }
|
|
|
-
|
|
|
- public function basedOrdersReturnOrderPackageCommodities($orders){
|
|
|
- $orderPackageCommodities = [];
|
|
|
- foreach ($orders as $order) {
|
|
|
- foreach ($order['packages'] as $package) {
|
|
|
- foreach ($package['commodities'] as $commodity) {
|
|
|
- $orderPackageCommodities[] = $commodity;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return $orderPackageCommodities;
|
|
|
- }
|
|
|
-
|
|
|
- public function basedDetailsReturnFillables($details,$orderPackage,$commoditiesMap,$order,$column){
|
|
|
- $orderPackagerCommodities = [];
|
|
|
- foreach ($details as $detail) {
|
|
|
- $key = 'sku='.$detail['sku'].' owner_id='.$order['owner_id'];
|
|
|
- $commodity = $commoditiesMap[$key] ?? '';
|
|
|
- $fillable = [
|
|
|
- 'order_package_id' => $orderPackage['id'] ?? '',
|
|
|
- 'commodity_id' => $commodity['id'] ?? '',
|
|
|
- 'amount' => $detail[$column] ?? '',
|
|
|
- ];
|
|
|
- array_push($orderPackagerCommodities,$fillable);
|
|
|
- }
|
|
|
- return $orderPackagerCommodities;
|
|
|
- }
|
|
|
-
|
|
|
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){
|
|
|
@@ -471,7 +215,7 @@ class OrderPackageCommoditiesService
|
|
|
$params[] = [
|
|
|
'commodity_id' =>$commodity->id,
|
|
|
'order_package_id' =>$orderPackage->id,
|
|
|
- 'amount' => $actAllocationDetail->qty,
|
|
|
+ 'amount' => $actAllocationDetail->qty_each,
|
|
|
'created_at' => $create_at
|
|
|
];
|
|
|
}
|
|
|
@@ -480,7 +224,6 @@ class OrderPackageCommoditiesService
|
|
|
return $params;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
public function create(array $params){
|
|
|
if(!$params){return [];}
|
|
|
try {
|
|
|
@@ -500,110 +243,504 @@ 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;
|
|
|
- }
|
|
|
+ $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());
|
|
|
+// }
|
|
|
+// }
|
|
|
+ }
|
|
|
|
|
|
- $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);
|
|
|
+ public function getByWmsOrder($orderHeaders){
|
|
|
+ $order_no = data_get($orderHeaders,'*.orderno');
|
|
|
+ return OrderPackageCommodities::query()
|
|
|
+ ->with('package.order')
|
|
|
+ ->whereHas('package.order',function($query) use ($order_no){
|
|
|
+ $query->whereIn('code',$order_no);
|
|
|
})->get();
|
|
|
+ }
|
|
|
+
|
|
|
+ public function batchUpdateItself($column, array $params)
|
|
|
+ {
|
|
|
+ return app(BatchUpdateService::class)->batchUpdateItself('order_package_commodities', $column, $params);
|
|
|
+ }
|
|
|
|
|
|
- $order_packages = OrderPackage::query()->with('order')->whereHas('order',function($query) use ($order_nos){
|
|
|
- $query->whereIn('code',$order_nos);
|
|
|
+ /**
|
|
|
+ * @param array $logistic_numbers
|
|
|
+ * @return array|mixed
|
|
|
+ */
|
|
|
+ public function 删除包裹商品信息_根据快递单号($logistic_numbers)
|
|
|
+ {
|
|
|
+ $orderPackageCommodities = OrderPackageCommodities::query()->with('package')->whereHas('package',function($query)use($logistic_numbers){
|
|
|
+ $query->whereIn('logistic_number',$logistic_numbers);
|
|
|
})->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;
|
|
|
+ $ids = data_get($orderPackageCommodities, '*.id');
|
|
|
+ if(count($ids) == 0){return [];}
|
|
|
+ try {
|
|
|
+ OrderPackageCommodities::query()->whereIn('id', $ids)->delete();
|
|
|
+ LogService::log(__METHOD__,__FUNCTION__,'删除多余OrderPackageCommodities '.$orderPackageCommodities->count().json_encode($orderPackageCommodities),null);
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ LogService::log(__METHOD__,__FUNCTION__,'删除多余OrderPackageCommodities error'.$orderPackageCommodities->count().json_encode($orderPackageCommodities).$e->getMessage().$e->getTraceAsString(),null);
|
|
|
+ return [];
|
|
|
}
|
|
|
+ return $ids;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param array $orderNos
|
|
|
+ * @return \Illuminate\Database\Eloquent\Builder[]|\Illuminate\Database\Eloquent\Collection
|
|
|
+ */
|
|
|
+ public function getByOrderNos($orderNos)
|
|
|
+ {
|
|
|
+ return OrderPackageCommodities::query()->with('package.order','commodity')
|
|
|
+ ->whereHas('package.order',function($query) use ($orderNos){
|
|
|
+ $query->whereIn('code',$orderNos);
|
|
|
+ })->get();
|
|
|
+ }
|
|
|
|
|
|
- $insertParams = [];
|
|
|
- $updateParams = [['id','order_package_id'.'commodity_id','amount','updated_at']];
|
|
|
- $updated_at = Carbon::now()->toDateTimeString();
|
|
|
- $created_at = Carbon::now()->toDateTimeString();
|
|
|
+ /**
|
|
|
+ * @param Collection $orders
|
|
|
+ * @return \Illuminate\Database\Eloquent\Builder[]|\Illuminate\Database\Eloquent\Collection
|
|
|
+ */
|
|
|
+ public function getByOrders($orders)
|
|
|
+ {
|
|
|
+ return $this->getByOrderNos(data_get($orders,'*.code'));
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param OracleDOCOrderHeader $orderHeader
|
|
|
+ * @param Order $order
|
|
|
+ * @return array|Collection|\Tightenco\Collect\Support\Collection
|
|
|
+ */
|
|
|
+ public function 返回创建数组($orderHeader)
|
|
|
+ {
|
|
|
+ if($orderHeader->sostatus == 90){return [];}
|
|
|
+ $actAllocationDetails = $orderHeader->actAllocationDetails->collect();
|
|
|
+ $innerParams = collect();
|
|
|
+ $actAllocationDetails->each(function($detail)use(&$innerParams){
|
|
|
+ $sku = $detail->sku;
|
|
|
+ $amount = $detail->qty_each;
|
|
|
+ $logistic_number = $detail->picktotraceid;
|
|
|
+ $params = [
|
|
|
+ 'ownerCode' => $detail->customerid,
|
|
|
+ 'orderNo' => $detail->orderno,
|
|
|
+ 'sku' => $sku,
|
|
|
+ 'amount' => $amount,
|
|
|
+ 'logistic_number' => $logistic_number,
|
|
|
+ ];
|
|
|
+
|
|
|
+ $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{
|
|
|
+ $innerParams->push($params);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return $innerParams;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function 返回创建数组_WMS订单($orderHeaders)
|
|
|
+ {
|
|
|
+ $innerParams = [];
|
|
|
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;
|
|
|
+ $innerParam = $this->返回创建数组($orderHeader);
|
|
|
+ foreach ($innerParam as $param) {
|
|
|
+ $innerParams[] = $param;
|
|
|
}
|
|
|
- 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){
|
|
|
- unset($order_package_commodities[$key]);
|
|
|
- unset($actAllocationDetails[$key1]);
|
|
|
- $deleteKey[] = $key1;
|
|
|
- break;
|
|
|
- }else if($item ->sku == $commodity->sku && $item->amount != $actAllocationDetail->qty){
|
|
|
- $updateParams[] = [
|
|
|
- 'id' => $item->id,
|
|
|
- 'commodity_id' => $commodity->id,
|
|
|
- 'amount' => $actAllocationDetail->qty,
|
|
|
- 'updated_at' => $updated_at
|
|
|
- ];
|
|
|
- $deleteKey[] = $key1;
|
|
|
- unset($actAllocationDetails[$key1]);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- $actAllocationDetails =$actAllocationDetails->filter(function ($value, $key) use($deleteKey) {
|
|
|
- return !in_array($key, $deleteKey);
|
|
|
+ }
|
|
|
+ return $innerParams;
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * @param array $innerParams
|
|
|
+ * @return array
|
|
|
+ */
|
|
|
+ public function 生成OrderPackageCommodities_基于创建数组($innerParams)
|
|
|
+ {
|
|
|
+ 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 = ' ownerCode='.($innerParam['ownerCode'] ?? '').' sku='.($innerParam['sku'] ?? '');
|
|
|
+ $commodity = $commodity_map[$key] ?? null;
|
|
|
+ $orderPackage = $orderPackages_map[$innerParam['logistic_number']] ?? '';
|
|
|
+ $createParams[] = [
|
|
|
+ 'order_package_id' => $orderPackage->id ?? '',
|
|
|
+ 'commodity_id' => $commodity->id ?? null,
|
|
|
+ 'amount' => $innerParam['amount'],
|
|
|
+ 'created_at' => $dataTime,
|
|
|
+ 'updated_at' => $dataTime,
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ 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 ;}
|
|
|
+ $orderPackageCommodities = $this->getByWmsOrder($orderHeaders);
|
|
|
+ $OPCCollects = $this->将orderPackageCommodity抽象成数组($orderPackageCommodities);
|
|
|
+ $creatParams = $this->返回创建数组_WMS订单($orderHeaders);
|
|
|
+ $orderNos = $this->数据重组($OPCCollects,$creatParams);
|
|
|
+ $updateParams= collect();$deleteIds = [];$insertParams =[];
|
|
|
+ foreach ($orderNos as $orderNo) {
|
|
|
+ $OPCCollect = $OPCCollects[$orderNo] ?? null;
|
|
|
+ $creatParam = $creatParams[$orderNo];
|
|
|
+ $retain[] = $this->删选可以保留的OrderPackageCommodities($OPCCollect,$creatParam);
|
|
|
+
|
|
|
+ $collect = $this->删选需要修改的OrderPackageCommodities($OPCCollect,$creatParam);
|
|
|
+
|
|
|
+ $ids = $this->删选出删除的OrderPackageCommodities($OPCCollect,$creatParam);
|
|
|
+
|
|
|
+ $insertParam = $this->删选出需要添加的OrderPackageCommodities($OPCCollect,$creatParam);
|
|
|
+
|
|
|
+ $deleteIds = array_merge($deleteIds,$ids);
|
|
|
+
|
|
|
+ foreach ($collect as $item) {
|
|
|
+ $updateParams->push($item);
|
|
|
+ }
|
|
|
+ foreach ($insertParam as $item) {
|
|
|
+ $insertParams[]= $item;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ $this->根据更新数组进行更新($updateParams);
|
|
|
+ $this->删除OPC以及对应的追踪件($deleteIds);
|
|
|
+ $creatParams = $this->生成OrderPackageCommodities_基于创建数组($insertParams);
|
|
|
+ $this->create($creatParams);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param Collection $orderPackageCommodities
|
|
|
+ * @return Collection|\Tightenco\Collect\Support\Collection
|
|
|
+ */
|
|
|
+ public function 将orderPackageCommodity抽象成数组($orderPackageCommodities)
|
|
|
+ {
|
|
|
+ /** @var DataHandlerService $dataHandlerService */
|
|
|
+ $dataHandlerService = app(DataHandlerService::class);
|
|
|
+ $collect = collect();
|
|
|
+ $ownerIds = array_unique(data_get($orderPackageCommodities,'*.commodity.owner_id'));
|
|
|
+ $owners = Owner::query()->whereIn('id',$ownerIds)->get();
|
|
|
+ $owner_id_map = $dataHandlerService->dataHeader(['id'],$owners);
|
|
|
+ foreach ($orderPackageCommodities as $orderPackageCommodity) {
|
|
|
+ $owner = $dataHandlerService->getKeyValue(['id'=>$orderPackageCommodity->commodity->owner_id],$owner_id_map);
|
|
|
+ $params = [
|
|
|
+ 'id' => $orderPackageCommodity->id,
|
|
|
+ 'ownerCode' => $owner->code,
|
|
|
+ 'orderNo' => $orderPackageCommodity->package->order->code,
|
|
|
+ 'sku' => $orderPackageCommodity->commodity->sku,
|
|
|
+ 'amount' => $orderPackageCommodity->amount,
|
|
|
+ 'logistic_number' => $orderPackageCommodity->package->logistic_number,
|
|
|
+ ];
|
|
|
+ $collect->push($params);
|
|
|
+ }
|
|
|
+ return $collect;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function 数据重组(&$OPCCollects,&$params)
|
|
|
+ {
|
|
|
+ $collect_map = [];$params_map = [];$order_no_map = [];
|
|
|
+
|
|
|
+ foreach ($OPCCollects as $item) {
|
|
|
+ $orderNo = $item['orderNo'];
|
|
|
+ if(!isset($collect_map[$orderNo])){$collect_map[$orderNo] = collect();}
|
|
|
+ $collect_map[$orderNo]->push($item);
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach ($params as $param) {
|
|
|
+ $orderNo = $param['orderNo'];
|
|
|
+ if(!isset($params_map[$orderNo])){$params_map[$orderNo] = collect();}
|
|
|
+ $order_no_map[] = $orderNo;
|
|
|
+ $params_map[$orderNo]->push($param);
|
|
|
+ }
|
|
|
+ $order_no_map = array_unique($order_no_map);
|
|
|
+ $OPCCollects = $collect_map;
|
|
|
+ $params = $params_map;
|
|
|
+ return $order_no_map;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ 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(! isset($map[$key])){
|
|
|
+ $map[$key] = [];
|
|
|
+ }
|
|
|
+ $map[$key][] = $param;
|
|
|
+ }
|
|
|
+
|
|
|
+ foreach ($OPCCollect as $item) {
|
|
|
+ $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[$key]);
|
|
|
+ $params->filter(function($param)use($value){
|
|
|
+ return count(array_diff_assoc($param,$value)) != 0 ;
|
|
|
});
|
|
|
- $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;
|
|
|
+ $retain->push($value);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if(count($updateParams) > 0){
|
|
|
- $this->batchUpdate($updateParams);
|
|
|
+ return $retain;
|
|
|
+ }
|
|
|
+
|
|
|
+ public function 删选出需要添加的OrderPackageCommodities(&$OPCCollect,&$params)
|
|
|
+ {
|
|
|
+ $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])){
|
|
|
+ $OPCmap[$key][] = [];
|
|
|
+ }
|
|
|
+ $OPCmap[$key][] = $item;
|
|
|
}
|
|
|
+ $paramsMap = [];
|
|
|
+ foreach ($params as $param) {
|
|
|
+ $key = ' logistic_number='.$param['logistic_number'].' sku='.$param['sku'].' amount='.$param['amount'];
|
|
|
+ if(!isset($OPCmap[$key])){
|
|
|
+ $paramsMap[$key][] = [];
|
|
|
+ }
|
|
|
+ $paramsMap[$key][] = $param;
|
|
|
+ }
|
|
|
+ $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)){
|
|
|
+ $innerParam[] = $param;
|
|
|
+ $OPCCollect->filter(function($item)use($param){
|
|
|
+ return !($item['logistic_number'] == $param['logistic_number'] &&$item['sku'] == $param['sku'] &&$item['amount'] == $param['amount']) ;
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $innerParam;
|
|
|
+ }
|
|
|
|
|
|
- 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 删选需要修改的OrderPackageCommodities(&$OPCCollect,&$params)
|
|
|
+ {
|
|
|
+ $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] = [];}
|
|
|
+ $map[$key][] = $item;
|
|
|
+ }
|
|
|
+ $paramsCopy = $params->collect();
|
|
|
+ foreach ($paramsCopy as $param) {
|
|
|
+ $key = ' logistic_number='.$param['logistic_number'].' sku='.$param['sku'];
|
|
|
+ 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 getByWmsOrder($orderHeaders){
|
|
|
- $order_no = data_get($orderHeaders,'*.orderno');
|
|
|
- return OrderPackageCommodities::query()
|
|
|
- ->with('package.order')
|
|
|
- ->whereHas('package.order',function($query) use ($order_no){
|
|
|
- $query->whereIn('code',$order_no);
|
|
|
- })->get();
|
|
|
+ public function 删选出删除的OrderPackageCommodities(&$OPCCollect,&$params)
|
|
|
+ {
|
|
|
+ $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])){
|
|
|
+ $map[$key] = [];
|
|
|
+ }
|
|
|
+ $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){
|
|
|
+ $deleteIds[] = $opc['id'];
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return $deleteIds;
|
|
|
}
|
|
|
|
|
|
+ public function 删除OPC以及对应的追踪件($ids)
|
|
|
+ {
|
|
|
+ if(!$ids){return;}
|
|
|
+ $OPCs = OrderPackageCommodities::query()->whereIn('id', $ids)->get();
|
|
|
+ if($OPCs->count() == 0){return;}
|
|
|
+ try {
|
|
|
+ OrderPackageCommodities::query()->whereIn('id', $ids)->delete();
|
|
|
+ LogService::log(__METHOD__, __FUNCTION__, '删除OrderPackageCommodities ' . count($ids) . json_encode($OPCs));
|
|
|
+ $orderTracking = OrderTracking::query()->whereIn('order_package_commodity_id',$ids)->get();
|
|
|
+ app(OrderTrackingService::class)->deleteOrderTracings($orderTracking);
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ LogService::log(__METHOD__, __FUNCTION__, '删除OrderPackageCommodities ' . count($ids) . json_encode($OPCs).$e->getMessage().$e->getTraceAsString());
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- public function batchUpdateItself($column, array $params)
|
|
|
+ public function 根据更新数组进行更新($updateParams)
|
|
|
{
|
|
|
- return app(BatchUpdateService::class)->batchUpdateItself('order_package_commodities', $column, $params);
|
|
|
+ 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;
|
|
|
}
|
|
|
}
|