|
|
@@ -206,7 +206,7 @@ class OrderPackageCommoditiesService
|
|
|
public function getByWmsOrder($orderHeaders){
|
|
|
$order_no = data_get($orderHeaders,'*.orderno');
|
|
|
return OrderPackageCommodities::query()
|
|
|
- ->with('package.order')
|
|
|
+ ->with('package.order','commodity')
|
|
|
->whereHas('package.order',function($query) use ($order_no){
|
|
|
$query->whereIn('code',$order_no);
|
|
|
})->get();
|
|
|
@@ -590,4 +590,210 @@ class OrderPackageCommoditiesService
|
|
|
}
|
|
|
return $commodity_map;
|
|
|
}
|
|
|
+
|
|
|
+ public function deleteUnnecessaryOrderCommodities($ids)
|
|
|
+ {
|
|
|
+ if(!$ids)return;
|
|
|
+ OrderPackageCommodities::query()->whereHas('package',function($query)use($ids){
|
|
|
+ $query->whereIn('id',$ids);
|
|
|
+ })->delete();
|
|
|
+ }
|
|
|
+ // TODO
|
|
|
+ public function createOrderCommodity($orderHeaders)
|
|
|
+ {
|
|
|
+ if(!$orderHeaders)return ;
|
|
|
+ $order_nos = data_get($orderHeaders,'*.orderno');
|
|
|
+ $orderCommodities = OrderPackageCommodities::query()
|
|
|
+ ->with(['package.order','commodity'])
|
|
|
+ ->whereHas('package.order',function($query)use($order_nos){
|
|
|
+ $query->whereIn('code',$order_nos);
|
|
|
+ })->get();
|
|
|
+
|
|
|
+ $orderCommodities = $this->regroupOrderCommodities($orderCommodities);
|
|
|
+ $orderAllocationDetails = $this->regroupWmsOrderAllocationDetails($orderHeaders);
|
|
|
+ $this->filterExistParams($orderAllocationDetails,$orderCommodities);
|
|
|
+ $inner_params = $this->filterInnerParams($orderAllocationDetails,$orderCommodities);
|
|
|
+ $update_params =$this->filterUpdateParams($orderAllocationDetails,$orderCommodities);
|
|
|
+ $delete_params = $this->filterDeleteParams($orderAllocationDetails,$orderCommodities);
|
|
|
+ if($inner_params){
|
|
|
+ $package = [];
|
|
|
+ foreach ($orderCommodities as $orderCommodity) {
|
|
|
+ $order_package = $orderCommodity->package;
|
|
|
+ if(!isset($package[$order_package->logistic_number]))
|
|
|
+ $package[$order_package->logistic_number] = $order_package;
|
|
|
+ }
|
|
|
+ $this->createOrderCommodities($inner_params,$package);
|
|
|
+ }
|
|
|
+ if(!$update_params)
|
|
|
+ $this->updateOrderCommodities($update_params);
|
|
|
+
|
|
|
+ if(!$delete_params)
|
|
|
+ $this->deleteOrderCommodities($delete_params);
|
|
|
+ }
|
|
|
+ // TODO
|
|
|
+ public function regroupOrderCommodities($orderCommodities)
|
|
|
+ {
|
|
|
+ $params = [];
|
|
|
+ $orderCommodities->each(function($orderCommodity)use(&$params){
|
|
|
+ $order_no = $orderCommodity->pacakge->order->code ?? '';
|
|
|
+ dd($orderCommodity->pacakge->order ?? '');
|
|
|
+ $logistic_number = $orderCommodity->package->logistic_number ?? '';
|
|
|
+ $sku = $orderCommodity->commodity->sku ?? '';
|
|
|
+ $key = ' orderno='.$order_no.' logsitic_number='.$logistic_number.' sku='.$sku.' ';
|
|
|
+ $params[$key] = [
|
|
|
+ 'id' =>$orderCommodity->id,
|
|
|
+ 'orderno'=>$order_no,
|
|
|
+ 'logistic_number'=>$logistic_number,
|
|
|
+ 'sku' => $sku,
|
|
|
+ 'amount' => $orderCommodity->amount
|
|
|
+ ];
|
|
|
+ });
|
|
|
+ return $params;
|
|
|
+ }
|
|
|
+ // TODO
|
|
|
+ public function regroupWmsOrderAllocationDetails($orderHeaders)
|
|
|
+ {
|
|
|
+ $params =[];
|
|
|
+ foreach ($orderHeaders as $orderHeader) {
|
|
|
+ $order_no = $orderHeader->orderno;
|
|
|
+ $actAllocationDetails = $orderHeader->actAllocationDetails ?? [];
|
|
|
+ foreach ($actAllocationDetails as $item) {
|
|
|
+ if($item)continue;
|
|
|
+ $logistic_number = $item->picktotraceid;
|
|
|
+ $sku = $item->sku;
|
|
|
+ $key = ' orderno='.$order_no.' logsitic_number='.$logistic_number.' sku='.$sku.' ';
|
|
|
+ if(isset($params[$key])){
|
|
|
+ $params[$key]->amount += $item->qty_each;
|
|
|
+ }else{
|
|
|
+ $params[$key] = [
|
|
|
+ 'orderno'=>$item->orderno,
|
|
|
+ 'logistic_number'=>$item->picktotraceid,
|
|
|
+ 'sku' => $sku,
|
|
|
+ 'amount' => $item->qty_each,
|
|
|
+ 'owner_code' => $item->customerid
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $params;
|
|
|
+ }
|
|
|
+ // TODO
|
|
|
+ public function filterExistParams(&$orderAllocationDetails,&$orderCommodities)
|
|
|
+ {
|
|
|
+ foreach ($orderCommodities as $key=>$orderCommodity) {
|
|
|
+ if(isset($orderAllocationDetails[$key])){
|
|
|
+ unset($orderCommodity,$orderAllocationDetails[$key]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // TODO
|
|
|
+ public function filterInnerParams(&$orderAllocationDetails,&$orderCommodities)
|
|
|
+ {
|
|
|
+ $inner_params = [];
|
|
|
+ foreach ($orderAllocationDetails as $key=>$orderAllocationDetail) {
|
|
|
+ if($orderCommodities[$key]){
|
|
|
+ $inner_params[] = $orderAllocationDetail;
|
|
|
+ unset($orderCommodities[$key],$orderAllocationDetail);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $inner_params;
|
|
|
+ }
|
|
|
+ // TODO
|
|
|
+ public function filterUpdateParams(&$orderAllocationDetails,&$orderCommodities)
|
|
|
+ {
|
|
|
+ $update_params = [];
|
|
|
+ foreach ($orderCommodities as $key => $orderCommodity) {
|
|
|
+ if(isset($orderAllocationDetails[$key])){
|
|
|
+ if($orderCommodity->amount != $orderAllocationDetails[$key]->amount){
|
|
|
+ $update_params[$key] = $orderCommodity[$key]->amount = $orderAllocationDetails[$key]->amount;
|
|
|
+ unset($orderCommodity,$orderAllocationDetails[$key]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $update_params;
|
|
|
+ }
|
|
|
+ // TODO
|
|
|
+ public function filterDeleteParams(&$orderAllocationDetails,&$orderCommodities)
|
|
|
+ {
|
|
|
+ $del_params = [];
|
|
|
+ foreach ($orderCommodities as $key => $orderCommodity) {
|
|
|
+ if(!isset($orderAllocationDetails[$key])){
|
|
|
+ $del_params[] = $orderCommodity;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return $del_params;
|
|
|
+ }
|
|
|
+ // TODO
|
|
|
+ public function createOrderCommodities($inner_params,$packages)
|
|
|
+ {
|
|
|
+ /** @var DataHandlerService $dataHandlerService */
|
|
|
+ $dataHandlerService = app('DataHandlerService');
|
|
|
+ $package_map = $dataHandlerService->dataHeader(['logistic_number'],$packages);
|
|
|
+ $sku = [];$owners = [];
|
|
|
+ foreach ($inner_params as $inner_param) {
|
|
|
+ $sku_code = $inner_param['sku'];$owner_code = $inner_param['owner_code'];
|
|
|
+ if(!isset($sku[$sku_code]))
|
|
|
+ $sku[$sku_code] = $sku_code;
|
|
|
+ if(!isset($owner_code[$owner_code]))
|
|
|
+ $owners[$owner_code] = $owner_code;
|
|
|
+ }
|
|
|
+ $commodities = Commodity::query()->with('owner')->whereHas('owner',function ($query)use($owners){
|
|
|
+ $query->whereIn('code',$owners);
|
|
|
+ })->whereIn('sku',$sku)->get();
|
|
|
+ $commodity_map = [];
|
|
|
+ foreach ($commodities as $commodity) {
|
|
|
+ $key = ' owner='.$commodity->owner->code.' sku='.$commodity->sku;
|
|
|
+ $commodity_map[$key] = $commodity;
|
|
|
+ }
|
|
|
+ $create_params =[];
|
|
|
+ $date = Carbon::now();
|
|
|
+ foreach ($inner_params as $inner_param) {
|
|
|
+ $package = $dataHandlerService->getKeyValue(['logistic_number'=>$inner_param],$package_map);
|
|
|
+ $commodity = $commodity_map[' owner='.$inner_param['owner_code'].' sku='.$inner_param['sku']] ?? null;
|
|
|
+ $create_params[] = [
|
|
|
+ 'order_package_id'=>$package->id,
|
|
|
+ 'commodity_id'=>$commodity->id ?? null,
|
|
|
+ 'amount' => $inner_param['amount'],
|
|
|
+ 'created_at' => $date,
|
|
|
+ 'updated_at' => $date
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ if(count($create_params)>0){
|
|
|
+ try {
|
|
|
+ $bool = OrderPackageCommodities::query()->insert($create_params);
|
|
|
+ LogService::log(__METHOD__,__FUNCTION__,'批量添加 orderCommodity --'. $bool ." || ".count($create_params).' || '.json_encode($create_params));
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ LogService::log(__METHOD__,__FUNCTION__.'error','批量添加 orderCommodity error'." || ".count($create_params).' || '.json_encode($create_params));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // TODO
|
|
|
+ public function updateOrderCommodities($orderCommodities)
|
|
|
+ {
|
|
|
+ if(!$orderCommodities)return ;
|
|
|
+ $updated_at = Carbon::now();
|
|
|
+ $update_params = [['id','order_package_id','commodity_id','amount','updated_at']];
|
|
|
+ foreach ($orderCommodities as $orderCommodity) {
|
|
|
+ $update_params[] = [
|
|
|
+ 'id' => $orderCommodity->id,
|
|
|
+ 'order_package_id'=>$orderCommodity->order_package_id,
|
|
|
+ 'commodity_id'=>$orderCommodity->commodity_id,
|
|
|
+ 'amount' => $orderCommodity->amount,
|
|
|
+ 'updated_at' => $updated_at
|
|
|
+ ];
|
|
|
+ }
|
|
|
+ if(count($update_params)>0)
|
|
|
+ $this->batchUpdate($update_params);
|
|
|
+ }
|
|
|
+ // TODO
|
|
|
+ public function deleteOrderCommodities($orderCommodities){
|
|
|
+ if(!$orderCommodities)return;
|
|
|
+ try {
|
|
|
+ $bool = OrderPackageCommodities::query()->whereIn('id', data_get($orderCommodities, '*.id'))->delete();
|
|
|
+ LogService::log(__METHOD__, __FUNCTION__, '批量删除 OrderCommodity -- ' . $bool . '||' . $orderCommodities->count() . ' || ' . json_encode($orderCommodities->toArray()));
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ LogService::log(__METHOD__, __FUNCTION__.' error', '批量删除 OrderCommodity Error-- ' . $e->getMessage() . '||' . $e->getTraceAsString() );
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
}
|