|
|
@@ -13,11 +13,14 @@ use App\RejectedBill;
|
|
|
use App\Services\common\BatchUpdateService;
|
|
|
use App\Services\common\DataHandlerService;
|
|
|
use App\Shop;
|
|
|
+use App\ValueStore;
|
|
|
use App\Warehouse;
|
|
|
use Carbon\Carbon;
|
|
|
use Illuminate\Support\Collection;
|
|
|
use Illuminate\Support\Facades\App;
|
|
|
+use Illuminate\Support\Facades\Cache;
|
|
|
use Illuminate\Support\Facades\DB;
|
|
|
+use Illuminate\Support\Facades\Redis;
|
|
|
|
|
|
class OrderService
|
|
|
{
|
|
|
@@ -544,7 +547,7 @@ class OrderService
|
|
|
$insert_params = $this->getParamsByOrderHeader($orderHeaders,$owners_code_map,$logistics_code_map,$shop_name_map,$warehouses_code_map);
|
|
|
$update_params = $this->getUpdateParams($orderHeaders,$owners_code_map,$logistics_code_map,$shop_name_map,$warehouses_code_map);
|
|
|
if(count($insert_params)> 0){
|
|
|
- $this->create($insert_params);
|
|
|
+ $this->insert($insert_params);
|
|
|
}
|
|
|
if(count($update_params)>1){
|
|
|
$this->batchUpdate($update_params);
|
|
|
@@ -563,6 +566,7 @@ class OrderService
|
|
|
foreach ($orders as $order) {
|
|
|
$order_code_map[$order->code]= $order;
|
|
|
}
|
|
|
+ $date = Carbon::now()->format('Y-m-d H:i:s');
|
|
|
foreach ($orderHeaders_map as $orderHeader) {
|
|
|
if($order_code_map[$orderHeader->orderno] ?? false)continue;
|
|
|
$owner = $owners_code_map[$orderHeader->customerid] ?? null;
|
|
|
@@ -575,6 +579,7 @@ class OrderService
|
|
|
'owner_id' => $owner->id ?? null,
|
|
|
'wms_status' => $orderHeader->oracleBASCode ? $orderHeader->oracleBASCode->codename_c : null,
|
|
|
'created_at' => $orderHeader->addtime,
|
|
|
+ 'updated_at' =>$date,
|
|
|
'logistic_id' => $logistic->id ?? null,
|
|
|
'shop_id' => $shop->id ?? null,
|
|
|
'consignee_name' => $orderHeader->c_contact,
|
|
|
@@ -797,6 +802,7 @@ class OrderService
|
|
|
$warehouses = $warehouseService->getByWmsOrders($orderHeaders);
|
|
|
$orders = $this->getByWmsOrders($orderHeaders);
|
|
|
$created_params = $this->getCreateOrderModelsByWMSOrderHeaders($orderHeaders,$orders,$warehouses,$owners,$logistics,$shops); //3s
|
|
|
+
|
|
|
$update_order = $this->getUpdateOrderModelByWMSOrderHeaders($orderHeaders,$orders,$warehouses,$owners,$logistics,$shops);
|
|
|
// 转换插入 3s
|
|
|
if(count($created_params) > 0){
|
|
|
@@ -804,13 +810,6 @@ class OrderService
|
|
|
$this->insert($inner_params->toArray());
|
|
|
});
|
|
|
}
|
|
|
-// $this->insert($created_params);
|
|
|
-// $this->insert($created_order->map(function($item){
|
|
|
-// $array = $item->toArray();
|
|
|
-// unset($array['logisticNumbers'],$array['packages'],$array['commodityPackages'],$array['amount']);
|
|
|
-// return $array;
|
|
|
-// })->toArray());
|
|
|
-
|
|
|
$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']
|
|
|
];
|
|
|
@@ -978,7 +977,8 @@ class OrderService
|
|
|
*/
|
|
|
$orderPackageService = app('OrderPackageService');
|
|
|
$orderPackageCommoditiesService = app('OrderPackageCommoditiesService');
|
|
|
- $orderHeaders = [$orderHeader];
|
|
|
+ $orderHeaders = collect();
|
|
|
+ $orderHeaders->push($orderHeader);
|
|
|
try {
|
|
|
$this->syncOrderByWMSOrderHeaders($orderHeaders);
|
|
|
$orderPackageService->syncOrderPackage($orderHeaders);
|
|
|
@@ -990,4 +990,123 @@ class OrderService
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ // TODO
|
|
|
+ public function setOrderSyncAt($key,$date,$bool=true){
|
|
|
+ if($bool){
|
|
|
+ ValueStore::query()->where('name',$key)->update(['value'=>Carbon::parse($date)->subSeconds(1)]);
|
|
|
+ } else {
|
|
|
+ ValueStore::query()->where('name',$key)->update(['value'=>$date]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // TODO
|
|
|
+ public function getOrderSyncAt($key,$type='newest'){
|
|
|
+ $keyValue = ValueStore::query()->where('name',$key)->first();
|
|
|
+ if($keyValue->value)return $keyValue->value;
|
|
|
+ if($type == 'newest') $order = Order::query()->orderByDesc('Created_At')->first();
|
|
|
+ else $order = Order::query()->orderByDesc('Wms_EditTime')->first();
|
|
|
+ if($order)return $order->created_at;
|
|
|
+ return Carbon::now()->subSeconds(65);
|
|
|
+ }
|
|
|
+ // TODO
|
|
|
+ public function pushOrderCache($orderHeaders,$prefixKey,$hasKey,$list_key){
|
|
|
+ $list = [];
|
|
|
+ try {
|
|
|
+ Redis::LLEN($list_key);
|
|
|
+ collect($orderHeaders)->each(function($item)use(&$list,$prefixKey){
|
|
|
+ $list[] =$item->orderno;
|
|
|
+ Cache::put($prefixKey.$item->orderno,true);
|
|
|
+ });
|
|
|
+ if(count($orderHeaders) > 0){
|
|
|
+ Cache::put($list_key,$list);
|
|
|
+ Cache::put($hasKey,true);
|
|
|
+ }
|
|
|
+ } catch (\Exception $e) {
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // TODO
|
|
|
+ public function filterOrderByCache($orderHeaders,$key)
|
|
|
+ {
|
|
|
+ /**
|
|
|
+ * @var OracleDOCOrderHeader $item
|
|
|
+ */
|
|
|
+ if(!$orderHeaders)return $orderHeaders;
|
|
|
+ if(!$key)return $orderHeaders;
|
|
|
+ try {
|
|
|
+ Redis::LLEN($key);
|
|
|
+ return array_filter($orderHeaders,function($item)use($key){
|
|
|
+ $bool = Cache::get($key.$item->orderno);
|
|
|
+ return !$bool;
|
|
|
+ });
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ return $orderHeaders;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // TODO
|
|
|
+ public function cancelOrderCache($key,string $prefix)
|
|
|
+ {
|
|
|
+ try {
|
|
|
+ $list = Cache::get($key);
|
|
|
+ collect($list)->each(function ($item)use($prefix) {
|
|
|
+ Cache::forget($prefix.$item);
|
|
|
+ });
|
|
|
+ Cache::put($key,[]);
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // TODO
|
|
|
+ public function syncCreatedOrder(){
|
|
|
+ /**
|
|
|
+ * @var OracleDOCOrderHeaderService $oracleDOCOrderHeaderService
|
|
|
+ * @var OrderService $orderService
|
|
|
+ */
|
|
|
+ $newest = config('sync.order_sync.cache_prefix.created_at');
|
|
|
+ $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');
|
|
|
+
|
|
|
+ $last_date = $orderService->getOrderSyncAt($newest,'newest'); // 获取时间点
|
|
|
+
|
|
|
+ $orderHeaders = $oracleDOCOrderHeaderService->getWmsOrderOnStartDateEdit($last_date); // WMS订单
|
|
|
+
|
|
|
+ $last_order = $orderHeaders->first(); // 时间点靠后的
|
|
|
+ $renewal_orders = $orderHeaders->where('addTime',$last_order->addtime);
|
|
|
+
|
|
|
+ $orderHeaders = $orderService->filterOrderByCache($orderHeaders,$newest_list); // 对比缓存
|
|
|
+
|
|
|
+ if(count($orderHeaders)>0 && count($orderHeaders) >0){
|
|
|
+ $orderService->syncOrder($orderHeaders); // 同步订单
|
|
|
+ $orderService->cancelOrderCache($newest_list); // 清除缓存
|
|
|
+ $orderService->pushOrderCache($renewal_orders,$prefixKey,$hasKey,$newest_list); // 添加缓存
|
|
|
+ $orderService->setOrderSyncAt($newest,$last_order->addTime,count($orderHeaders)>0); // 更新时间
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // TODO
|
|
|
+ public function syncUpdatedOrder(){
|
|
|
+ /**
|
|
|
+ * @var OracleDOCOrderHeaderService $oracleDOCOrderHeaderService
|
|
|
+ * @var OrderService $orderService
|
|
|
+ */
|
|
|
+ $renewal = config('sync.order_sync.cache_prefix.updated_at');
|
|
|
+ $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');
|
|
|
+
|
|
|
+ $last_date = $orderService->getOrderSyncAt($renewal,'renewal'); // 获取时间点
|
|
|
+
|
|
|
+ $orderHeaders = $oracleDOCOrderHeaderService->getWMSOrderOnStartDate($last_date); // WMS订单
|
|
|
+
|
|
|
+ $renewal_order = $orderHeaders->first(); // 时间点靠后的
|
|
|
+ $renewal_orders = $orderHeaders->where('addTime',$renewal_order->addtime);
|
|
|
+
|
|
|
+ $orderHeaders = $orderService->filterOrderByCache($orderHeaders,$renewal_list); // 对比缓存
|
|
|
+
|
|
|
+ if(count($renewal_orders)>0 && count($orderHeaders)>0){
|
|
|
+ $orderService->syncOrder($orderHeaders); // 同步订单
|
|
|
+ $orderService->cancelOrderCache($renewal_list); // 清除缓存
|
|
|
+ $orderService->pushOrderCache($renewal_orders,$prefixKey,$hasKey,$renewal_list); // 添加缓存
|
|
|
+ $orderService->setOrderSyncAt($renewal,$renewal_order->addTime,count($orderHeaders)>0); // 更新时间
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|