Эх сурвалжийг харах

Merge remote-tracking branch 'origin/master'

yuang 4 жил өмнө
parent
commit
19b0687ab8

+ 3 - 0
app/Http/ApiControllers/InventoryController.php

@@ -10,6 +10,7 @@ use App\InventoryAccountMission;
 use App\Services\AndroidInventoryService;
 use App\Services\InventoryAccountService;
 use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Log;
 
 class InventoryController
 {
@@ -176,6 +177,7 @@ class InventoryController
      */
     public function stockInventory(Request $request)
     {
+        Log::error('执行开始',[now()->toDateTimeString()]);
         $task_item_id = $request->input("task_item_id");
         $verified_amount = $request->input("verified_amount");
         /**
@@ -196,6 +198,7 @@ class InventoryController
             $stockService->updateInventory($task_id);
         }
         $notStocktakingList=$service->getUnInventoryTaskList($task_id);
+        Log::error('执行结束',[now()->toDateTimeString()]);
         $this->response($notStocktakingList);
     }
 

+ 2 - 1
app/Http/Controllers/OrderController.php

@@ -48,12 +48,13 @@ class OrderController extends Controller
         $result = $orderService->paginate($request);
         $picktotraceids = $result['picktotraceids'];
         $orders = $result['orders'];
+        $orderService->tagOrderByOrderIssue($orders);
         app('WorkOrderService')->tagWorkOrder($orders);
         $commodities = $result['commodities'];
         $customers = app(OwnerService::class)->getQuery()->select("code","name")->get();
         $page = $request["page"] ?? 1;
         $codes = DB::connection('oracle')->table('BAS_CODES')->select('code', 'codename_c')->where('codeid', 'SO_STS')->orderBy('code', 'asc')->get();
-        $orderIssueType = $this->orderIssueTypeService->getOwnerOrderIssueType();
+        $orderIssueType = $this->orderIssueTypeService->getOrderIssueTypes();
         return view('order/index/delivering', compact('orders', 'customers', 'request', 'codes', 'commodities', 'page', 'picktotraceids', 'orderIssueType', 'logistics'));
     }
 

+ 5 - 3
app/Http/Controllers/RejectedBillController.php

@@ -13,6 +13,7 @@ use App\RejectedBill;
 use App\Services\LogService;
 use App\Services\RejectedBillItemService;
 use App\Services\RejectedBillService;
+use App\Services\WorkOrderService;
 use Illuminate\Contracts\View\Factory;
 use Illuminate\Http\RedirectResponse;
 use Illuminate\Http\Request;
@@ -95,8 +96,6 @@ class RejectedBillController extends Controller
         $rejectedBillService=app(RejectedBillService::class);
         $rejectedBillService->joinOrderIssue($rejectedBill);
         $rejectedBillService->updateCheckedStatusByWms($request->input('logistic_number_return'));
-//        $rejectedBill->同步问题件退件状态();
-
         app('LogService')->log(__METHOD__,__FUNCTION__.'_'.$rejectedBill['id'],json_encode($request->toArray()),Auth::user()['id']);
         return ['success'=>'true','id'=>$rejectedBill['id']];
     }
@@ -118,11 +117,14 @@ class RejectedBillController extends Controller
         $rejectedBill->save();
         /**
          * @var RejectedBillService $rejectedBillService
+         * @var WorkOrderService $workOrderService
          */
         $rejectedBillService=app(RejectedBillService::class);
+        $workOrderService=app(WorkOrderService::class);
+
         $rejectedBillService->syncOrderIssue($rejectedBill);
+        $workOrderService->syncWorkOrder($rejectedBill);
         $rejectedBillService->updateCheckedStatusByWms($rejectedBill->logistic_number_return);
-//        $rejectedBill->同步问题件退件状态();
 
         app('LogService')->log(__METHOD__,__FUNCTION__.'_'.$rejectedBill['id'],json_encode($request->toArray()),Auth::user()['id']);
         return ['success'=>'true'];

+ 28 - 1
app/Http/Controllers/TestController.php

@@ -52,6 +52,7 @@ use App\OrderBin;
 use App\OrderCommodity;
 use App\OrderIssue;
 use App\OrderIssueProcessLog;
+use App\OrderIssueType;
 use App\OrderPackage;
 use App\Owner;
 use App\OwnerAreaReport;
@@ -233,8 +234,34 @@ class TestController extends Controller
     }
 
     public function test123(){
+        $rejected_bill = RejectedBill::query()->find(2);
+        $service = new WorkOrderService();
+        $service->syncWorkOrder($rejected_bill);
+    }
+
+    public function changeWorkOrder(){
+        $type = OrderIssueType::query()->where('name' ,'拦截')->first();
+
+        WorkOrder::query()->where('order_issue_type_id',$type->id)
+            ->where('status',[4,5])
+            ->where('process_progress','拦截成功')
+            ->update(['process_progress' => '成功已退回,不赔偿']);
+
+        WorkOrder::query()->where('order_issue_type_id',$type->id)
+            ->whereIn('status',[4,5])
+            ->where('process_progress','拦截失败')
+            ->update(['process_progress' => '无法拦截']);
+
+
+        WorkOrderDetail::query()->where('order_issue_type_id',$type->id)
+            ->where('status',[4,5])
+            ->where('process_progress','拦截成功')
+            ->update(['process_progress' => '成功已退回,不赔偿']);
 
-//        dd(WorkOrderDetail::query()->orderByDesc('id')->first());
+        WorkOrderDetail::query()->where('order_issue_type_id',$type->id)
+            ->whereIn('status',[4,5])
+            ->where('process_progress','拦截失败')
+            ->update(['process_progress' => '无法拦截']);
     }
 
 

+ 1 - 1
app/Services/RejectedBillService.php

@@ -63,7 +63,7 @@ class RejectedBillService
      * 同步退回单号
      * @param RejectedBill $rejectedBill
      */
-    public function syncOrderIssue($rejectedBill)
+    public function syncOrderIssue(RejectedBill $rejectedBill)
     {
         $rejectedBill->syncOrderIssue();
     }

+ 6 - 1
app/Services/RejectedService.php

@@ -16,10 +16,15 @@ use App\Traits\ServiceAppAop;
 class RejectedService
 {
     use ServiceAppAop;
-    /** @var CacheService $cacheService */
+    /**
+     * @var CacheService $cacheService
+     * @var WorkOrderInterceptService $workOrderInterceptService
+     */
     private $cacheService;
+    private $workOrderInterceptService;
     function __construct(){
         $this->instant($this->cacheService,'CacheService');
+        $this->instant($this->workOrderInterceptService,'WorkOrderInterceptService');
     }
     private function  conditionQuery(array $param)
     {

+ 21 - 4
app/Services/WorkOrderInterceptService.php

@@ -44,8 +44,8 @@ class WorkOrderInterceptService extends WorkOrderService
     /*
     * 拦截工单处理流程
     * 1:创建
-    * 2:承运商处理   [已处理,已签收];
-    * 3:宝时终审     [拦截成功,拦截失败]
+    * 2:承运商处理   [`拦截失败`,`拦截成功`];
+    * 3:宝时终审     [`无法拦截`,`成功已退回,不赔偿`,`拦截在途丢件,赔偿`]
     */
 
     /**
@@ -63,8 +63,11 @@ class WorkOrderInterceptService extends WorkOrderService
         $this->logService->createLog($detail, '创建', '创建');
     }
 
-
-
+    /**
+     * 承运商处理 和  编辑承运商已处理
+     * @param WorkOrderDetail $detail
+     * @param $params
+     */
     public function logisticHandler(WorkOrderDetail $detail,$params)
     {
         $this->logService->createLog($detail, '处理', '承运商处理');
@@ -84,4 +87,18 @@ class WorkOrderInterceptService extends WorkOrderService
         $detail->workOrder->clearWorkOrderStatus();                     // 清除创建标记
     }
 
+    /**
+     * 自动终审
+     * @param WorkOrder $workOrder
+     */
+    public function autoReviewIntercept(WorkOrder $workOrder)
+    {
+        $issueType = $this->issueTypeService->firstOrCreate(['name' => '拦截']);
+        $detail = $workOrder->details()->where('order_issue_type_id',$issueType->id)->orderByDesc('created_at')->first();
+        if (!$detail) return;
+        $this->logService->createLog($detail, '终审', '自动终审');
+        $detail->change('待货主完结','成功已退回,不赔偿','宝时终审');
+        $detail->workOrder->change('待货主完结','成功已退回,不赔偿','宝时终审');
+        $detail->workOrder->clearWorkOrderStatus();
+    }
 }

+ 36 - 3
app/Services/WorkOrderService.php

@@ -2,6 +2,8 @@
 
 namespace App\Services;
 
+use App\OracleDOCOrderHeader;
+use App\Order;
 use App\OrderIssue;
 use App\OrderIssueType;
 use App\OrderPackage;
@@ -9,7 +11,6 @@ use App\Traits\ServiceAppAop;
 use App\WorkOrder;
 use App\WorkOrderDetail;
 use Illuminate\Support\Facades\Auth;
-use Illuminate\Support\Facades\Gate;
 
 class WorkOrderService
 {
@@ -108,8 +109,8 @@ class WorkOrderService
     public function ownerEndWorkOrderDetail(WorkOrderDetail $detail)
     {
         $this->logService->createLog($detail, '完结', '货主完结');
-        $detail->change('完成','完成','待货主完结');
-        $detail->workOrder->change('完成','完成','待货主完结');
+        $detail->change('完成', '完成', '待货主完结');
+        $detail->workOrder->change('完成', '完成', '待货主完结');
         $detail->workOrder->clearWorkOrderStatus();                     // 清除创建标记
         $this->detailService->endDetail($detail);                       // 标记为处理过
     }
@@ -271,4 +272,36 @@ class WorkOrderService
     {
         $detail->logisticTagHandle();
     }
+
+    public function syncWorkOrder($rejectedBill)
+    {
+        $logistic_number_return  = $rejectedBill->logistic_number_return;
+        /**
+         * @var WorkOrder $workOrder
+         */
+        $workOrder = WorkOrder::query()->where('order_id', function ($query)use($logistic_number_return) {
+            $query->from('order_packages')->selectRaw('order_id')->where('logistic_number', $logistic_number_return);
+        })->orderByDesc('id')->first();
+        if (!$workOrder){
+            $orderHeader = OracleDOCOrderHeader::query()->selectRaw('OrderNO')->where('SoReference1', function ($query) use ($logistic_number_return) {
+                $query->select('AsnReference2')->from('DOC_ASN_HEADER')->where('AsnReference3', $logistic_number_return)->first();
+            })->first();
+            if (!$orderHeader) return;
+            $workOrder = WorkOrder::query()->where('order_id', function ($query) use ($orderHeader) {
+                $query->from('orders')->select('id')->where('code', $orderHeader->orderno);
+            })->orderByDesc('id')->first();
+        }
+        if($workOrder){
+            $workOrder->is_new_rejecting =1;
+            $workOrder->save();
+            $orderIssue = $rejectedBill->orderIssue;
+            if($orderIssue->rejecting_status == '全部退回') {
+                /**
+                 * @var WorkOrderInterceptService $workOrderInterceptService
+                 */
+                $workOrderInterceptService = app(WorkOrderInterceptService::class);
+                $workOrderInterceptService->autoReviewIntercept($workOrder);
+            }
+        }
+    }
 }

+ 23 - 1
app/WorkOrder.php

@@ -32,7 +32,7 @@ class WorkOrder extends Model
         'last_handler_id',          // 上一个处理人
         'order_issue_type_id',      // 问题件类型
         'process_progress',         // 处理进度 -----------------------------------
-                                    // 拦截:       承运商->[已处理,已签收]         宝时审核->[拦截成功,拦截失败]
+                                    // 拦截:       承运商->[已处理,已签收]         宝时审核->[`无法拦截`,`成功已退回,不赔偿`,`拦截在途丢件,赔偿`]
                                     // 信息更改:    承运商->[已处理,无法更改]       宝时审核->[更改成功,更改失败]
                                     // 快递异常:    承运商->[已处理,已拦截]         宝时审核->[丢件赔偿,签收成功]
                                     // 错漏发:      宝时处理->[已核实]            商家处理->[补发,不补发]
@@ -48,6 +48,8 @@ class WorkOrder extends Model
         'logistic_tag',             // 待承运商处理标记
         'bao_shi_tag',              // 待宝时处理标记
         'owner_tag',                // 待货主处理标记
+        "is_new_rejecting "         // 回库标记
+
     ];
 
     static public $process_progress = [
@@ -81,6 +83,10 @@ class WorkOrder extends Model
             '完成' => 5,
             '待货主完结' => 6,
         ],
+        'is_new_rejecting'=> [
+            '' => 0,
+            '回库' => 1,
+        ],
     ];
 
     function __construct(array $attributes = [])
@@ -91,6 +97,22 @@ class WorkOrder extends Model
         parent::__construct($attributes);
     }
 
+    public function getIsNewRejectingAttribute($value)
+    {
+        if (!$value) return '';
+        return self::$enums['is_new_rejecting'][$value];
+    }
+
+    public function setIsNewRejectingAttribute($value)
+    {
+        if (!$value) return;
+        if (is_numeric($value)) {
+            $this->attributes['is_new_rejecting'] = $value;
+        } else {
+            $this->attributes['is_new_rejecting'] = self::$enums['is_new_rejecting'][$value];
+        }
+    }
+
     public function getStatusAttribute($value)
     {
         if (!$value) return '';

+ 32 - 0
database/migrations/2021_12_18_102015_work_orders_add_is_new_rejecting.php

@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Database\Migrations\Migration;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Support\Facades\Schema;
+
+class WorkOrdersAddIsNewRejecting extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('work_orders', function (Blueprint $table) {
+            $table->integer('is_new_rejecting')->comment('回库标记');
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('work_orders', function (Blueprint $table) {
+            $table->dropColumn('is_new_rejecting');
+        });
+    }
+}

+ 32 - 15
resources/views/order/workOrder/index.blade.php

@@ -10,29 +10,28 @@
         <div>
             <div class="">
                 <div id="form_div" style="min-width: 1220px;"></div>
-                <div class="form-inline mt-1" id="btn">
+                <div class="ml-3 form-inline" id="btn">
                     @can('订单管理-订单问题件生成')
                         <button type="button"
-                                class="ml-1 btn btn-outline-dark btn-sm form-control-sm tooltipTarget"
+                                class="ml-2 btn  btn-sm btn-outline-dark "
                                 @click="createOrderIssue(null,false)" style="background: #dad7e8;">生成问题件
                         </button>
                     @endcan
                     @can('订单管理-订单问题件生成')
                         <button type="button"
-                                class="ml-1 btn btn-outline-primary btn-sm form-control-sm tooltipTarget"
+                                class="ml-1 btn btn-outline-primary btn-sm  "
                                 @click="exportText()">导出文本
                         </button>
                     @endcan
                     @can('订单管理-工单处理-审核')
                     @endcan
                     <button type="button"
-                            class="ml-1 btn btn-outline-dark btn-sm form-control-sm tooltipTarget"
+                            class="ml-1 btn btn-outline-dark btn-sm"
                             @click="copyLogisticNumber()" style="background: #dad7e8;">批量复制单号
                     </button>
                     @can('订单管理-工单处理-审核')
                     @endcan
                 </div>
-
                 <div>
                     <table class="table table-sm table-striped table-hover table-bordered td-min-width-80 " id="table">
                         <tbody>
@@ -48,6 +47,10 @@
                                     <span v-show="isLogisticHandler(item)" class="badge badge-success">
                                     </span>
+
+                                    <span v-show="item.is_new_rejecting ==='回库'" class="badge badge-danger">
+                                        退
+                                    </span>
                                 </td>
                                 <td>
                                     <span v-text="item.id"></span>
@@ -182,6 +185,7 @@
                         </template>
                         </tbody>
                     </table>
+                    <div class="text-info h5 btn btn">{{$workOrders->count()}}/@{{ total }}</div>
                     {{ $workOrders->withQueryString()->links() }}
                 </div>
             </div>
@@ -303,6 +307,7 @@
                 isBaoShi: false,
                 orderIssueVue: orderIssueVue,
                 workOrders: {!! $workOrders->toJson() !!}['data'],
+                total: {!!  $workOrders->toJson() !!}['total'],
                 form: null,
                 logistics: [
                         @foreach($logistics as $logistic)
@@ -343,6 +348,7 @@
                     logistic_number: null,          // 丢件快递单号
                     commodities: [],
                     process_progress: null,
+                    prev_process_progress: null,
                     is_edit: false,
                 },
                 ownerEditWorkOrder: {
@@ -404,6 +410,9 @@
             },
             computed: {},
             mounted() {
+                $(".up").slideUp();
+                $(".tooltipTarget").tooltip({'trigger': 'hover'});
+                $("#list").removeClass('d-none');
                 let data = [[
                     {name: 'created_at_start', type: 'time', tip: ['工单创建开始日期', '时间']},
                     {name: 'created_at_end', type: 'time', tip: ['工单创建结束日期', '时间']},
@@ -481,6 +490,7 @@
                 this.form = new query({
                     el: '#form_div',
                     condition: data,
+                    appendDom: "btn",
                 });
                 this.form.init();
                 let column = [
@@ -520,12 +530,11 @@
                 ];
                 new Header({
                     el: "table",
-                    name: "workOrders",
+                    name: "work_orders",
                     column: column,
                     data: this.workOrders,
-                    fixedTop: ($('#form_div').height()) + 2,
+                    fixedTop: ($('#form_div').height()) + ($('#btn').height()) + 1,
                 }).init();
-                $("#list").removeClass("d-none");
             },
             created() {
                 this.workOrders.forEach(item => {
@@ -1170,15 +1179,16 @@
                     }
                 },
                 baoShiShowDispose(item, index) {
-                    let {status} = item;
+                    let {status,process_progress} = item;
                     let {issue_type_name, detail_id, commodities} = item.pending_detail;
                     this.baoShiEditWorkOrder.is_edit = false;
                     this.selectIndex = index;
                     this.baoShiEditWorkOrder.issue_type_name = issue_type_name;
                     this.baoShiEditWorkOrder.detail_id = detail_id;
                     this.baoShiEditWorkOrder.status = status;
-
+                    this.baoShiEditWorkOrder.process_progress = null;
                     if ("拦截" === issue_type_name) {
+                        this.baoShiEditWorkOrder.prev_process_progress = process_progress ;
                         this.dialogShowBaoShiVisible = true
                     } else if ("信息更改" === issue_type_name) {
                         this.dialogShowBaoShiVisible = true
@@ -1411,9 +1421,9 @@
                     });
                 },
                 getBaoShiProcessProgress() {
-                    let {issue_type_name} = this.baoShiEditWorkOrder;
+                    let {issue_type_name,process_progress,prev_process_progress } = this.baoShiEditWorkOrder;
                     let items = [
-                        {issue_type_name: '拦截', option: ['拦截成功,不赔偿', '拦截失败,赔偿']},
+                        {issue_type_name: '拦截', option: {success: ['成功已退回,不赔偿','拦截在途丢件,赔偿'],failed:['无法拦截']}},
                         {issue_type_name: '取消拦截', option: ['已签收', '已退回']},
                         {issue_type_name: '信息更改', option: ['更改成功', '更改失败'],},
                         {issue_type_name: '快递异常', option: ['丢件赔偿', '签收成功']},
@@ -1421,6 +1431,10 @@
                         {issue_type_name: '破损', option: ['全部赔偿', '部分赔偿', '不赔偿'],},
                     ];
                     let item = items.find(e => e.issue_type_name === issue_type_name);
+                    if (issue_type_name === '拦截') {
+                        if (['拦截成功','已处理','拦截退回中'].includes(prev_process_progress)) return item.option.success;
+                        else if (['拦截失败','已签收'].includes(prev_process_progress)) return item.option.failed;
+                    }
                     return item ? item.option : [];
                 },
                 getBaoShiProcessResults() {
@@ -2566,8 +2580,7 @@
                         issue_type,
                         price,
                         status,
-                        reissue_logistic_number
-                        ,
+                        reissue_logistic_number,
                         return_logistic_number,
                         return_address,
                         return_phone,
@@ -2679,7 +2692,11 @@
                     let baoShi = @can('订单管理-工单处理-客服编辑') true
                     @else false @endcan;
                     let {logistic_tag, bao_shi_tag, owner_tag} = item;
-                    if (logistic && logistic_tag === '1') return true;
+                    if (logistic && logistic_tag === '1'){
+                        let logistic_handle_tag = item.pending_detail ?  item.pending_detail.logistic_handle_tag : '';
+                        if('承运商处理中' === logistic_handle_tag) return false;
+                        return '取消标记' !== logistic_handle_tag;
+                    }
                     if (owner && owner_tag === '1') return true;
                     if (baoShi && bao_shi_tag === '1') return true;
                     return false;