|
|
@@ -2,6 +2,7 @@
|
|
|
|
|
|
namespace App\Services;
|
|
|
|
|
|
+use App\Jobs\OrderCreateInstantBill;
|
|
|
use App\Logistic;
|
|
|
use App\OracleActAllocationDetails;
|
|
|
use App\OracleDOCASNHeader;
|
|
|
@@ -27,6 +28,25 @@ use Illuminate\Support\Facades\Redis;
|
|
|
|
|
|
class OrderService
|
|
|
{
|
|
|
+ /**
|
|
|
+ * @var OracleDOCOrderHeaderService $oracleDOCOrderHeaderService
|
|
|
+ * @var OrderPackageService $packageService
|
|
|
+ * @var OrderCommodityService $orderCommodityService
|
|
|
+ * @var BatchService $batchService
|
|
|
+ */
|
|
|
+ private $oracleDOCOrderHeaderService;
|
|
|
+ private $packageService;
|
|
|
+ private $orderCommodityService;
|
|
|
+ private $batchService;
|
|
|
+
|
|
|
+ public function __construct()
|
|
|
+ {
|
|
|
+ $this->oracleDOCOrderHeaderService = app('OracleDocOrderHeaderService');
|
|
|
+ $this->packageService = app('OrderPackageService');
|
|
|
+ $this->orderCommodityService = app('OrderCommodityService');
|
|
|
+ $this->batchService = app('BatchService');
|
|
|
+ }
|
|
|
+
|
|
|
public function batchUpdate($params){
|
|
|
return app(BatchUpdateService::class)->batchUpdate('orders',$params);
|
|
|
}
|
|
|
@@ -788,8 +808,19 @@ class OrderService
|
|
|
$orderCommodityService->syncOrderCommodities($orderHeaders);
|
|
|
|
|
|
$packageService->syncOrderPackage($orderHeaders);
|
|
|
+
|
|
|
+ $this->pushQueue($orderHeaders);
|
|
|
}
|
|
|
|
|
|
+ public function pushQueue($orderHeaders){
|
|
|
+ $orders = Order::query()->with(["logistic","packages.commodities.commodity"])->where('wms_status','订单完成')->whereIn('code',data_get($orderHeaders,'*.code'))->get();
|
|
|
+
|
|
|
+ $orders->each(function($order){
|
|
|
+ dispatch(new OrderCreateInstantBill($order));
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
public function syncOrderByWMSOrderHeaders(&$orderHeaders)
|
|
|
{
|
|
|
if($orderHeaders->isEmpty())return;
|
|
|
@@ -803,8 +834,10 @@ class OrderService
|
|
|
$logisticService = app("LogisticService");
|
|
|
$shopService = app('ShopService');
|
|
|
$warehouseService = app('WarehouseService');
|
|
|
- $owner_codes = [];$logistic_codes = [];$warehouse_codes = [];$shop_names = [];
|
|
|
+ $owner_codes = [];$logistic_codes = [];$warehouse_codes = [];$shop_names = [];$batch_codes = [];
|
|
|
foreach ($orderHeaders as $orderHeader) {
|
|
|
+ if(!empty($orderHeader['waveno']))
|
|
|
+ $batch_codes[$orderHeader['waveno']] = $orderHeader['waveno'];
|
|
|
if(!empty($orderHeader['customerid']))
|
|
|
$owner_codes[$orderHeader['customerid']] = $orderHeader['customerid'];
|
|
|
if(!empty($orderHeader['warehouseid']))
|
|
|
@@ -821,12 +854,13 @@ class OrderService
|
|
|
$logistics = $logisticService->getLogisticByCodes($logistic_codes);
|
|
|
$shops = $shopService->getShopByCodeMap($shop_names);
|
|
|
$warehouses = $warehouseService->getWareHouseByCodes($warehouse_codes);
|
|
|
+ $batches = $this->batchService->getBatchByCodes($batch_codes);
|
|
|
|
|
|
$orders = $this->getByWmsOrders($orderHeaders);
|
|
|
|
|
|
- $created_params = $this->getCreateOrderModelsByWMSOrderHeaders($orderHeaders,$orders,$warehouses,$owners,$logistics,$shops); //3s
|
|
|
+ $created_params = $this->getCreateOrderModelsByWMSOrderHeaders($orderHeaders,$orders,$warehouses,$owners,$logistics,$shops,$batches); //3s
|
|
|
|
|
|
- $update_order = $this->getUpdateOrderModelByWMSOrderHeaders($orderHeaders,$orders,$warehouses,$owners,$logistics,$shops);
|
|
|
+ $update_order = $this->getUpdateOrderModelByWMSOrderHeaders($orderHeaders,$orders,$warehouses,$owners,$logistics,$shops,$batches);
|
|
|
|
|
|
|
|
|
// 转换插入 3s
|
|
|
@@ -836,7 +870,7 @@ class OrderService
|
|
|
});
|
|
|
}
|
|
|
$update_params = [
|
|
|
- ['id','code','warehouse_id','owner_id','shop_id','logistic_id','consignee_name','consignee_phone','province','city','district','address','client_code','wms_status','created_at','updated_at','wms_edittime','order_type']
|
|
|
+ ['id','code','warehouse_id','owner_id','batch_id','shop_id','logistic_id','consignee_name','consignee_phone','province','city','district','address','client_code','wms_status','created_at','updated_at','wms_edittime','order_type']
|
|
|
];
|
|
|
|
|
|
$update_order->each(function($item)use(&$update_params){
|
|
|
@@ -847,7 +881,7 @@ class OrderService
|
|
|
$this->batchUpdate($update_params);
|
|
|
}
|
|
|
|
|
|
- public function getCreateOrderModelsByWMSOrderHeaders(&$orderHeaders,&$orders,&$warehouses,&$owners,&$logistics,&$shops)
|
|
|
+ public function getCreateOrderModelsByWMSOrderHeaders(&$orderHeaders,&$orders,&$warehouses,&$owners,&$logistics,&$shops,&$batches)
|
|
|
{
|
|
|
/** @var DataHandlerService $dataHandlerService */
|
|
|
$dataHandlerService = app('DataHandlerService');
|
|
|
@@ -857,20 +891,20 @@ class OrderService
|
|
|
$logistic_map = $dataHandlerService->dataHeader(['code'],$logistics);
|
|
|
$shop_map = $dataHandlerService->dataHeader(['name','owner_id'],$shops);
|
|
|
$order_map = $dataHandlerService->dataHeader(['code'],$orders);
|
|
|
-
|
|
|
+ $batch_map = $dataHandlerService->dataHeader(['code'],$batches);
|
|
|
$inner_params = [];
|
|
|
$date = (string)Carbon::now();
|
|
|
foreach ($orderHeaders as $orderHeader) {
|
|
|
$order_no = $orderHeader->orderno;
|
|
|
$order = $dataHandlerService->getKeyValue(['code'=>$order_no],$order_map);
|
|
|
if(isset($order))continue;
|
|
|
- $order_model = $this->getCreateOrderModels($orderHeader,$warehouse_map,$owner_map,$logistic_map,$shop_map,$date);
|
|
|
+ $order_model = $this->getCreateOrderModels($orderHeader,$warehouse_map,$owner_map,$logistic_map,$shop_map,$batch_map,$date);
|
|
|
$inner_params[] = $order_model;
|
|
|
}
|
|
|
return $inner_params;
|
|
|
}
|
|
|
|
|
|
- public function getUpdateOrderModelByWMSOrderHeaders(&$orderHeaders,&$orders,&$warehouses,&$owners,&$logistics,&$shops)
|
|
|
+ public function getUpdateOrderModelByWMSOrderHeaders(&$orderHeaders,&$orders,&$warehouses,&$owners,&$logistics,&$shops,&$batches)
|
|
|
{
|
|
|
/**
|
|
|
* @var DataHandlerService $dataHandlerService
|
|
|
@@ -882,12 +916,13 @@ class OrderService
|
|
|
$owner_map = $dataHandlerService->dataHeader(['code'],$owners);
|
|
|
$logistic_map = $dataHandlerService->dataHeader(['code'],$logistics);
|
|
|
$shop_map = $dataHandlerService->dataHeader(['name','owner_id'],$shops);
|
|
|
+ $batch_map = $dataHandlerService->dataHeader(['code'],$batches);
|
|
|
$collect = collect();
|
|
|
$date = (string)Carbon::now();
|
|
|
foreach ($orders as $order) {
|
|
|
$orderHeader = $dataHandlerService->getKeyValue(['orderno'=>$order->code],$orderHeader_map);
|
|
|
if(!$orderHeader)continue;
|
|
|
- $order_model = $this->getCreateOrderModels($orderHeader,$warehouse_map,$owner_map,$logistic_map,$shop_map,$date);
|
|
|
+ $order_model = $this->getCreateOrderModels($orderHeader,$warehouse_map,$owner_map,$logistic_map,$shop_map,$batch_map,$date);
|
|
|
if(!$order->isEquals($order_model)){
|
|
|
$order->assignValueByOrder($order_model);
|
|
|
$collect->push($order);
|
|
|
@@ -896,19 +931,21 @@ class OrderService
|
|
|
return $collect;
|
|
|
}
|
|
|
|
|
|
- public function getCreateOrderModels(&$orderHeader,&$warehouse_map,&$owner_map,&$logistic_map,&$shop_map,$date)
|
|
|
+ public function getCreateOrderModels(&$orderHeader,&$warehouse_map,&$owner_map,&$logistic_map,&$shop_map,&$batch_map,$date)
|
|
|
{
|
|
|
/** @var DataHandlerService $dataHandlerService */
|
|
|
$dataHandlerService = app('DataHandlerService');
|
|
|
$warehouse = $dataHandlerService->getKeyValue(['code'=>$orderHeader->warehouseid],$warehouse_map);
|
|
|
$owner = $dataHandlerService->getKeyValue(['code'=>$orderHeader->customerid],$owner_map);
|
|
|
$logistic = $dataHandlerService->getKeyValue(['code'=>$orderHeader->userdefine1],$logistic_map);
|
|
|
+ $batch = $dataHandlerService->getKeyValue(['code'=>$orderHeader->waveno],$batch_map);
|
|
|
$shop['id'] = null;
|
|
|
if($orderHeader->issuepartyname != null && $orderHeader->issuepartyname != '' ){
|
|
|
$shop = $dataHandlerService->getKeyValue(['name'=>$orderHeader->issuepartyname ?? '','owner_id'=>$owner->id??''],$shop_map);
|
|
|
}
|
|
|
return [
|
|
|
'code'=>$orderHeader['orderno'],
|
|
|
+ 'batch_id' =>$batch['id'] ?? null,
|
|
|
'warehouse_id' => $warehouse['id'] ?? null,
|
|
|
'owner_id' => $owner['id'] ?? null,
|
|
|
'shop_id' => $shop['id'] ?? null,
|
|
|
@@ -1089,21 +1126,25 @@ class OrderService
|
|
|
$newest_list = config('sync.order_sync.cache_prefix.newest_list');
|
|
|
$hasKey = config('sync.order_sync.cache_prefix.newest_has');
|
|
|
$prefixKey = config('sync.order_sync.cache_prefix.newest');
|
|
|
+ ini_set('memory_limit', '512M');
|
|
|
+ $orderService = app('OrderService');
|
|
|
+ $oracleDOCOrderHeaderService = app('OracleDocOrderHeaderService');
|
|
|
|
|
|
- $last_date = $orderService->getOrderSyncAt($newest,'newest'); // 获取时间点
|
|
|
-
|
|
|
- $orderHeaders = $oracleDOCOrderHeaderService->getWmsOrderOnStartDateEdit($last_date); // WMS订单
|
|
|
+ $last_date = $orderService->getOrderSyncAt($newest,'newest'); // 获取时间点
|
|
|
|
|
|
+ $orderHeaders = $oracleDOCOrderHeaderService->getWMSOrderOnStartDate($last_date); // WMS订单
|
|
|
+ if($orderHeaders->count()==0)return;
|
|
|
$last_order = $orderHeaders->first(); // 时间点靠后的
|
|
|
- $renewal_orders = $orderHeaders->where('addTime',$last_order->addtime);
|
|
|
+ $newest_orders = $orderHeaders->where('addtime',$last_order->addtime);
|
|
|
|
|
|
$orderHeaders = $orderService->filterOrderByCache($orderHeaders,$newest_list); // 对比缓存
|
|
|
|
|
|
- if(count($orderHeaders)>0 && count($orderHeaders) >0){
|
|
|
+ if(count($newest_orders)>0 && count($orderHeaders) >0){
|
|
|
+
|
|
|
$orderService->syncOrder($orderHeaders); // 同步订单
|
|
|
$orderService->cancelOrderCache($newest_list,$prefixKey); // 清除缓存
|
|
|
- $orderService->pushOrderCache($renewal_orders,$prefixKey,$hasKey,$newest_list); // 添加缓存
|
|
|
- $orderService->setOrderSyncAt($newest,$last_order->addTime,count($orderHeaders)>0); // 更新时间
|
|
|
+ $orderService->pushOrderCache($newest_orders,$prefixKey,$hasKey,$newest_list); // 添加缓存
|
|
|
+ $orderService->setOrderSyncAt($newest,$last_order->addtime,count($orderHeaders)>0); // 更新时间
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -1116,24 +1157,54 @@ class OrderService
|
|
|
$renewal_list = config('sync.order_sync.cache_prefix.renewal_list');
|
|
|
$hasKey = config('sync.order_sync.cache_prefix.renewal_has');
|
|
|
$prefixKey = config('sync.order_sync.cache_prefix.renewal');
|
|
|
+ ini_set('memory_limit', '512M');
|
|
|
+
|
|
|
+ $orderService = app('OrderService');
|
|
|
+ $oracleDOCOrderHeaderService = app('OracleDocOrderHeaderService');
|
|
|
|
|
|
$last_date = $orderService->getOrderSyncAt($renewal,'renewal'); // 获取时间点
|
|
|
|
|
|
- $orderHeaders = $oracleDOCOrderHeaderService->getWMSOrderOnStartDate($last_date); // WMS订单
|
|
|
+ $orderHeaders = $oracleDOCOrderHeaderService->getWMSOrderOnEditDate($last_date); // WMS订单
|
|
|
|
|
|
+ if($orderHeaders->count()==0)return;
|
|
|
$renewal_order = $orderHeaders->first(); // 时间点靠后的
|
|
|
- $renewal_orders = $orderHeaders->where('addTime',$renewal_order->addtime);
|
|
|
+ $renewal_orders = $orderHeaders->where('edittime',$renewal_order->edittime);
|
|
|
|
|
|
$orderHeaders = $orderService->filterOrderByCache($orderHeaders,$renewal_list); // 对比缓存
|
|
|
|
|
|
if(count($renewal_orders)>0 && count($orderHeaders)>0){
|
|
|
+
|
|
|
$orderService->syncOrder($orderHeaders); // 同步订单
|
|
|
$orderService->cancelOrderCache($renewal_list,$prefixKey); // 清除缓存
|
|
|
$orderService->pushOrderCache($renewal_orders,$prefixKey,$hasKey,$renewal_list); // 添加缓存
|
|
|
- $orderService->setOrderSyncAt($renewal,$renewal_order->addTime,count($orderHeaders)>0); // 更新时间
|
|
|
+ $orderService->setOrderSyncAt($renewal,$renewal_order->edittime,count($orderHeaders)>0); // 更新时间
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public function syncOrderByWmsOrderNos($orderNos)
|
|
|
+ {
|
|
|
+ if(empty($orderNos))return ;
|
|
|
+ if(count($orderNos)==0)return;
|
|
|
+ $orderHeaders = $this->oracleDOCOrderHeaderService->getOrderByOrderNos($orderNos);
|
|
|
+ $this->syncOrderByWMSOrderHeaders($orderHeaders);
|
|
|
+ }
|
|
|
+
|
|
|
+ public function syncOrderInfoByWmsOrderNos($orderNos)
|
|
|
+ {
|
|
|
+ if(empty($orderNos))return ;
|
|
|
+ if(count($orderNos)==0)return;
|
|
|
+ $orderHeaders = $this->oracleDOCOrderHeaderService->getOrderInfoByOrderNos($orderNos);
|
|
|
+ $this->syncOrderInfoByWMSOrderHeaders($orderHeaders);
|
|
|
+ }
|
|
|
+
|
|
|
+ public function syncOrderInfoByWMSOrderHeaders($orderHeaders){
|
|
|
+ if(empty($orderNos))return ;
|
|
|
+ if(count($orderNos)==0)return;
|
|
|
+ $this->syncOrderByWMSOrderHeaders($orderHeaders);
|
|
|
+ $this->orderCommodityService->syncOrderCommodities($orderHeaders);
|
|
|
+ $this->packageService->syncOrderPackage($orderHeaders);
|
|
|
+ }
|
|
|
+
|
|
|
public function update(array $params, array $values)
|
|
|
{
|
|
|
$query = Order::query();
|
|
|
@@ -1218,4 +1289,5 @@ class OrderService
|
|
|
]))return true;
|
|
|
return false;
|
|
|
}
|
|
|
+
|
|
|
}
|