Pārlūkot izejas kodu

Merge branch 'zengjun'

zhouzhendong 4 gadi atpakaļ
vecāks
revīzija
a654bf09c0

+ 5 - 2
app/Console/Commands/SyncWMSOrderTask.php

@@ -9,6 +9,7 @@ use App\ValueStore;
 use Carbon\Carbon;
 use Illuminate\Console\Command;
 use Illuminate\Support\Facades\Cache;
+use Illuminate\Support\Facades\Log;
 
 class SyncWMSOrderTask extends Command
 {
@@ -61,11 +62,13 @@ class SyncWMSOrderTask extends Command
         $start = (string)$start;
         Cache::put($this->last_start_key,$start);
         ValueStore::query()->where('name',$this->last_start_key)->update(['value'=>$start]);
+        Log::info("订单同步开始时间",['date' => $start]);
         $this->syncCreatedOrder();
         $this->syncUpdatedOrder();
         $end = (string)Carbon::now();
         Cache::put($this->last_end_key,$end);
         ValueStore::query()->where('name',$this->last_end_key)->update(['value'=>$end]);
+        Log::info("订单同步结束时间",['date' => $end]);
     }
 
     public function syncCreatedOrder()
@@ -89,7 +92,7 @@ class SyncWMSOrderTask extends Command
             ->orderBy('DOC_Order_Header.addTime')->get();
 
         if($orderHeaders->count()==0)return;
-        $orderHeaderList = $orderHeaders->chunk(1000);
+        $orderHeaderList = $orderHeaders->chunk(200);
         foreach ($orderHeaderList as $item) {
             $item = $oracleDOCOrderHeaderService->loadMissing($item);
             $last_order = $item->last();                                                               // 时间点靠后的
@@ -126,7 +129,7 @@ class SyncWMSOrderTask extends Command
 
         if($orderHeaders->count()==0)return;
 
-        $orderHeaderList = $orderHeaders->chunk(1000);
+        $orderHeaderList = $orderHeaders->chunk(200);
         foreach ($orderHeaderList as $item) {
             $item  = $oracleDOCOrderHeaderService->loadMissing($item);
             $renewal_order = $item->last();                                                            // 时间点靠后的

+ 66 - 0
app/Http/Controllers/TestController.php

@@ -57,6 +57,7 @@ use App\Services\BatchService;
 use App\Services\CacheShelfService;
 use App\Services\ForeignHaiRoboticsService;
 use App\Services\NotificationService;
+use App\Services\OracleDOCOrderHeaderService;
 use App\Services\OrderPackageReceivedSyncService;
 use App\Services\OrderPackageService;
 use App\Services\OrderService;
@@ -569,4 +570,69 @@ sql;
 
         \App\LaborCompanyDispatchDetail::query()->truncate();
     }
+
+    public function testChange()
+    {
+        $last_start_key = config('sync.order_sync.cache_prefix.last_start_at');
+        $last_end_key = config('sync.order_sync.cache_prefix.last_end_at');
+        Cache::put($last_start_key,Carbon::make('2021-10-12 06:23:37'));
+        Cache::put($last_end_key,Carbon::make('2021-10-12 06:23:38'));
+        ValueStore::query()->where('name','order_last_created_sync_at')->update(['value' => '2021-10-12 06:23:37']);
+        ValueStore::query()->where('name','order_last_updated_sync_at')->update(['value' => '2021-10-12 06:23:37']);
+        ValueStore::query()->where('name','last_order_sync_task_start_at')->update(['value' => '2021-10-12 06:23:37']);
+        ValueStore::query()->where('name','last_order_sync_task_end_at')->update(['value' => '2021-10-12 06:23:38']);
+    }
+
+    public function syncOrders()
+    {
+        $last_start_key = config('sync.order_sync.cache_prefix.last_start_at');
+        $last_end_key = config('sync.order_sync.cache_prefix.last_end_at');
+        ini_set('max_execution_time',2500);
+        ini_set('memory_limit','1526M');
+        $service = new OracleDOCOrderHeaderService();
+        $orderService = new OrderService();
+        $start_data = Carbon::make('2021-10-12 06:23:37');
+        for ($i = 0;$i < 7;$i++){
+            $last_start_data=  Carbon::now();
+            $end_data = Carbon::parse($start_data)->addHours(1);
+            $editHeaders =  $service->getQuery()->where('DOC_Order_Header.EditTime','>=',$start_data)
+                ->where('DOC_Order_Header.EditTime',"<=",$end_data)
+                ->orderByDesc('DOC_Order_Header.EditTime')
+                ->get();
+            $editHeaderArray = $editHeaders->chunk(200);
+            foreach ($editHeaderArray as &$array){
+                $orderService->syncOrder($array);
+            }
+            $addHeaders =  $service->getQuery()->where('DOC_Order_Header.addTime','>=',$start_data)
+                ->where('DOC_Order_Header.addTime',"<=",$end_data)
+                ->orderByDesc('DOC_Order_Header.addTime')
+                ->get();
+
+            $addHeadersArray = $addHeaders->chunk(200);
+            foreach ($addHeadersArray as &$array){
+                $orderService->syncOrder($array);
+            }
+
+            $start_data = $end_data;
+            $last_end_data  = Carbon::now();
+
+            Cache::put($last_start_key,$last_start_data);
+            ValueStore::query()->where('name','order_last_created_sync_at')->update(['value' => $addHeaders->first()->addtime]);
+            ValueStore::query()->where('name','last_order_sync_task_start_at')->update(['value' => $last_start_data]);
+            Cache::put($last_end_key,$last_end_data);
+            ValueStore::query()->where('name','order_last_updated_sync_at')->update(['value' => $editHeaders->first()->edittime]);
+            ValueStore::query()->where('name','last_order_sync_task_end_at')->update(['value' => $last_end_data]);
+            unset($editHeaderArray,$editHeaders);
+            unset($addHeadersArray,$addHeaders);
+        }
+    }
+
+    public function syncOrder()
+    {
+        $code = \request("code");
+        $service = new OracleDOCOrderHeaderService();
+        $orderService = new OrderService();
+        $orderHeaders = $service->getQuery()->where('DOC_Order_Header.WaveNo',$code)->get();
+        $orderService->syncOrder($orderHeaders);
+    }
 }

+ 2 - 2
app/Services/OrderPackageService.php

@@ -99,7 +99,7 @@ class OrderPackageService
 
     public function getByOrderNos($orderNos)
     {
-        return OrderPackage::query()->with('order')
+        return OrderPackage::query()->with('order.logistic')
             ->whereIn('order_id', function ($query) use ($orderNos) {
                 $query->from('orders')->select('id')->whereIn('code', $orderNos);
             })->get();
@@ -164,7 +164,7 @@ class OrderPackageService
         /** 批量添加 */
         if (count($inner_params) > 0) {
             try {
-                $inner_array = array_chunk($inner_params, 5000);
+                $inner_array = array_chunk($inner_params, 200);
                 foreach ($inner_array as $params) {
                     $bool = $this->insert($params);
                     $bool ? LogService::log(__METHOD__, __FUNCTION__, '批量添加 OrderPackage ' . count($inner_params) . ' || ' . json_encode($inner_params)) : null;

+ 4 - 4
app/Services/WorkOrderImageService.php

@@ -49,7 +49,7 @@ class WorkOrderImageService
         foreach ($images as $image) {
             $this->createWorkOrderCommodityImage($workOrder,$image);
         }
-        if ($isLoadMissing)$workOrder->loadMissing('packageImages');
+        if ($isLoadMissing)$workOrder->loadMissing('commodityImages');
     }
 
     /**
@@ -74,7 +74,7 @@ class WorkOrderImageService
     public function createWorkOrderDealImages($workOrder,$images, bool $isLoadMissing = true)
     {
         foreach ($images as $image) {
-            $this->createWorkOrderCommodityImage($workOrder,$image);
+            $this->createWorkOrderDealImage($workOrder,$image);
         }
         if ($isLoadMissing)$workOrder->loadMissing('dealImages');
     }
@@ -82,7 +82,7 @@ class WorkOrderImageService
     public function createWorkOrderDealImage($workOrder,$image)
     {
         /** @var UploadedFile  $image */
-        $count = $workOrder->commodityImages()->count();
+        $count = $workOrder->dealImages()->count();
         /** @var WorkOrderImage $workOrderImage */
         $workOrderImage = $workOrder->dealImages()->create(['type' => 3, 'number' => ++$count]);
         $workOrderImage->saveFile($image);
@@ -97,7 +97,7 @@ class WorkOrderImageService
     public function createWorkOrderRefundImages($workOrder, $images, bool $isLoadMissing = true)
     {
         foreach ($images as $image) {
-            $this->createWorkOrderCommodityImage($workOrder,$image);
+            $this->createWorkOrderRefundImage($workOrder,$image);
         }
         if ($isLoadMissing)$workOrder->loadMissing('refundImages');
     }

+ 5 - 1
app/Services/WorkOrderService.php

@@ -230,7 +230,11 @@ class WorkOrderService
             ];
         }
         if (!isset($inner_params)) return ['success' => false, 'message' => '创建问题件失败'];
-        return app('OrderIssueService')->buildOrderIssue($inner_params);
+        try {
+            return app('OrderIssueService')->buildOrderIssue($inner_params);
+        } catch (\Exception $e) {
+            return ['success'=>false,'message' => '刷新页面后重试'];
+        }
     }
 
     /**

+ 1 - 1
config/sync.php

@@ -43,7 +43,7 @@ return [
         'interval' => 1,   // 时间以分为单位
         'start_at'=> '',    // 开始同步WMS的时间  时间格式: yyyy-MM-dd HH:mm:ss 如 2020-09-05 13:15:16
         'cache_prefix' => [
-            'restart' => 10,  // 重新启动时间 已分钟为单位
+            'restart' => 40,  // 重新启动时间 已分钟为单位
             'last_start_at' => 'last_order_sync_task_start_at' ,
             'last_end_at' => 'last_order_sync_task_end_at' ,
             'last_err_at' => 'last_order_sync_task_error_at' ,

+ 33 - 47
resources/views/order/issue/index.blade.php

@@ -86,7 +86,7 @@
                             colspan="8">
                             原始运单
                         </th>
-                        <th class="font-weight-bolder header-3 text-center" colspan="14">
+                        <th class="font-weight-bolder header-3 text-center" colspan="15">
                             情况说明
                         </th>
                         @cannot('订单管理-问题件-客户不可见')
@@ -178,15 +178,15 @@
                         <th class="three-layer bg-whit  align-middle" rowspan="2" style="min-width: 180px">情况说明</th>
                         <th class="three-layer align-middle" rowspan="2" style="min-width: 115px">问题类别</th>
                         <th class="three-layer align-middle" colspan="4" style="min-width: 155px">处理结果</th>
+
+                        <th class="three-layer align-middle " rowspan="2"
+                            style="max-width: 500px;min-width: 400px;">快递路由
+                        </th>
                         @cannot('订单管理-问题件-客户不可见')
                             <th class="three-layer  align-middle" rowspan="2"
                                 style="width:50px">@{{ isShowSecondOrderInfo ? '隐藏':'展开' }}
                             </th>
 
-                            <th class="three-layer align-middle " rowspan="2"
-                                style="max-width: 500px;min-width: 400px;"
-                                v-show="isShowSecondOrderInfo">快递路由
-                            </th>
                             <th class="three-layer align-middle" rowspan="2"
                                 style="min-width: 120px;"
                                 v-show="isShowSecondOrderInfo">二次客户订单号
@@ -707,8 +707,33 @@
                         {{--情况说明 结束--}}
 
                         {{--客户编辑 开启--}}
-
-
+                        <td>
+                            <div class="alert alert-light " v-for="(item,i) in orderIssue.order.packages">
+                                <div class="text-left">
+                                    <span v-text="item.logistic_number"></span>
+                                    <span class="float-right" v-if="item['transfer_status'].length === 0">暂无路由信息</span>
+                                    <button type="button" class="btn btn-sm btn-outline-primary float-right" v-if="item['transfer_status'].length > 0 && selectOrderPackage!==item.id" @click="selectOrderPackage = item.id">展开</button>
+                                    <button type="button" class="btn btn-sm btn-outline-primary float-right" v-if="selectOrderPackage === item.id" @click="selectOrderPackage = null">收起</button>
+                                </div>
+                                <div class="text-left" v-if="selectOrderPackage === item.id">
+                                    <div v-for="transfer in item['transfer_status']">
+                                        <div >
+                                            <hr>
+                                            <span class="mr-1 text-monospace">时间:</span>
+                                            <span v-text="transfer['accept_time']"></span>
+                                        </div>
+                                        <div>
+                                            <span class="mr-1 text-monospace">到达地:</span>
+                                            <span v-text="transfer['accept_address']"></span>
+                                        </div>
+                                        <div>
+                                            <span class="mr-1 text-monospace">详情:</span>
+                                            <span v-text="transfer['remark']"></span>
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
+                        </td>
                     @cannot('订单管理-问题件-客户不可见')
                             <td class="p-0 m-0 child-layer-3" style="min-width:50px;"
                                 v-if="index===0"
@@ -719,45 +744,7 @@
                                       @click="toggleSeCondeOrder"
                                       v-text="isShowSecondOrderInfo ? '隐藏运单列' : '展开运单列'"></span>
                             </td>
-                            <td v-show="isShowSecondOrderInfo">
-                                <div v-if=""></div>
-                                <div v-show="selectOrderIssue !== orderIssue.id">
-                                    <div>
-                                        <button class="btn btn-sm btn-outline-primary" @click="selectOrderIssue = orderIssue.id">展开</button>
-                                    </div>
-                                </div>
-                                <div v-show="selectOrderIssue === orderIssue.id">
-                                    <div class="alert alert-light " v-for="(item,i) in orderIssue.order.packages">
-                                        <div class="text-left">
-                                            <span v-text="item.logistic_number"></span>
-                                            <span class="float-right" v-if="item['transfer_status'].length === 0">暂无路由信息</span>
-                                            <button type="button" class="btn btn-sm btn-outline-primary float-right" v-if="item['transfer_status'].length > 0 && selectOrderPackage!==item.id" @click="selectOrderPackage = item.id">展开</button>
-                                            <button type="button" class="btn btn-sm btn-outline-primary float-right" v-if="selectOrderPackage === item.id" @click="selectOrderPackage = null">收起</button>
-                                        </div>
-                                        <div class="text-left" v-if="selectOrderPackage === item.id">
-                                            <div v-for="transfer in item['transfer_status']">
-                                                <div >
-                                                    <hr>
-                                                    <span class="mr-1 text-monospace">时间:</span>
-                                                    <span v-text="transfer['accept_time']"></span>
-                                                </div>
-                                                <div>
-                                                    <span class="mr-1 text-monospace">到达地:</span>
-                                                    <span v-text="transfer['accept_address']"></span>
-                                                </div>
-                                                <div>
-                                                    <span class="mr-1 text-monospace">详情:</span>
-                                                    <span v-text="transfer['remark']"></span>
-                                                </div>
-                                            </div>
-                                        </div>
-                                    </div>
-                                    <div>
-                                        <button class="btn btn-sm btn-outline-primary" @click="selectOrderIssue = null">收起</button>
-                                    </div>
-                                </div>
 
-                            </td>
                             <td class="child-layer-3-hide" v-show="isShowSecondOrderInfo">
                                 @can('订单管理-问题件-编辑')
                                     <input class="form-control form-control-sm"
@@ -1250,7 +1237,6 @@
                 },
                 toggleBtnHeight: null,
                 selectOrderPackage: null,
-                selectOrderIssue:null,
             },
             created() {
                 let _this = this;
@@ -1521,7 +1507,7 @@
                 isShowSecondOrderInfo(newValue) {
                     let _this = this;
                     setTimeout(function () {
-                        $('.header-3').attr('colspan', 14 + (newValue ? 6 : 0) + (_this.isShowRejectedBill ? 6 : 0));
+                        $('.header-3').attr('colspan', 15 + (newValue ? 6 : 0) + (_this.isShowRejectedBill ? 6 : 0));
                     }, 2);
                 },
             },

+ 4 - 0
resources/views/order/workOrder/_work_order_details.blade.php

@@ -70,6 +70,7 @@
                          v-for="(dealImage,i) in item['deal_images']">
                         <div class="">
                             <a  target="_blank"
+                                v-if="dealImage.upload_file"
                                 :href="filePrefix+dealImage.upload_file.url + '.'+dealImage.upload_file.type">
                                 <img class="image-w"
                                      :src="filePrefix+dealImage.upload_file.url + '.'+dealImage.upload_file.type"
@@ -88,6 +89,7 @@
                     <div class="card-body col-sm-6"
                          v-for="(refundImage,i) in item['refund_images']">
                         <a target="_blank"
+                           v-if="refundImage.upload_file"
                            :href="filePrefix+refundImage.upload_file.url + '.'+refundImage.upload_file.type">
                             <img class="image-w"
                                  :src="filePrefix+refundImage.upload_file.url + '.'+refundImage.upload_file.type"
@@ -105,6 +107,7 @@
                     <div class="card-body col-sm-6"
                          v-for="(packageImage,i) in item['package_images']">
                         <a target="_blank"
+                           v-if="packageImage.upload_file"
                            :href="filePrefix+packageImage.upload_file.url + '.'+packageImage.upload_file.type">
                             <img class="image-w"
                                  :src="filePrefix+packageImage.upload_file.url + '.'+packageImage.upload_file.type"
@@ -122,6 +125,7 @@
                     <div class="card-body col-sm-6"
                          v-for="(commodityImage,i) in item['commodity_images']">
                         <a target="_blank"
+                           v-if="commodityImage.upload_file"
                            :href="filePrefix+commodityImage.upload_file.url  + '.'+commodityImage.upload_file.type">
                             <img class="image-w"
                                  :src="filePrefix+commodityImage.upload_file.url + '.'+commodityImage.upload_file.type"

+ 27 - 29
resources/views/order/workOrder/index.blade.php

@@ -268,39 +268,37 @@
                                     </template>
                                 </td>
                                 <td class="text-center">
-                                    <template v-if="item.review_at">
-                                        <div v-if="item.order && item.order.packages">
-                                            <template v-for="package in item.order.packages">
-                                                <template
-                                                    v-if="package.transfer_status && package.transfer_status.length > 0">
-                                                    <div v-if="selectOrderPackage === package.id">
-                                                        <template v-for="transfer in package.transfer_status">
-                                                            <p>@{{
-                                                                transfer['accept_time']+':'+transfer['accept_address']
-                                                                }}</p>
-                                                        </template>
-                                                    </div>
-                                                    <div v-else>
-                                                        @{{
-                                                        package.transfer_status[0]['accept_time']+':'+package.transfer_status[0]['accept_address']
-                                                        }}
-                                                    </div>
-                                                    <button class="btn btn-sm btn-outline-primary"
-                                                            v-if="selectOrderPackage !== package.id"
-                                                            @click="selectOrderPackage = package.id">展开
-                                                    </button>
-                                                    <button class="btn btn-sm btn-outline-primary" v-else
-                                                            @click="selectOrderPackage = null">收起
-                                                    </button>
-                                                </template>
+                                    <div v-if="item.order && item.order.packages">
+                                        <template v-for="package in item.order.packages">
+                                            <template
+                                                v-if="package.transfer_status && package.transfer_status.length > 0">
+                                                <div v-if="selectOrderPackage === package.id">
+                                                    <template v-for="transfer in package.transfer_status">
+                                                        <p>@{{
+                                                            transfer['accept_time']+':'+transfer['accept_address']
+                                                            }}</p>
+                                                    </template>
+                                                </div>
+                                                <div v-else>
+                                                    @{{
+                                                    package.transfer_status[0]['accept_time']+':'+package.transfer_status[0]['accept_address']
+                                                    }}
+                                                </div>
+                                                <button class="btn btn-sm btn-outline-primary"
+                                                        v-if="selectOrderPackage !== package.id"
+                                                        @click="selectOrderPackage = package.id">展开
+                                                </button>
+                                                <button class="btn btn-sm btn-outline-primary" v-else
+                                                        @click="selectOrderPackage = null">收起
+                                                </button>
                                             </template>
-                                        </div>
-                                    </template>
+                                        </template>
+                                    </div>
                                 </td>
                                 <td class="text-center">@{{ item.creator ? item.creator.name : '' }}</td>
-                                <td class="text-center">@{{ item.created_at | dataTime}}</td>
+                                <td class="text-center">@{{ item.created_at}}</td>
                                 <td>@{{ item.reviewer ? item.reviewer.name : ''}}</td>
-                                <td>@{{ item.review_at |dataTime}}</td>
+                                <td>@{{ item.review_at}}</td>
                                 @can('订单管理-工单处理-删除')
                                     <td>
                                         <button class="btn btn-sm btn-outline-danger"