ajun 5 gadi atpakaļ
vecāks
revīzija
47adc8a8c8

+ 1 - 34
app/Http/Controllers/OrderIssueController.php

@@ -24,6 +24,7 @@ use Illuminate\Http\Request;
 use Illuminate\Support\Arr;
 use Illuminate\Support\Facades\Auth;
 use Illuminate\Support\Facades\Cache;
+use Illuminate\Support\Facades\DB;
 use Illuminate\Support\Facades\Gate;
 use Illuminate\Support\Facades\Http;
 use Illuminate\Support\Facades\Validator;
@@ -788,38 +789,4 @@ class OrderIssueController extends Controller
         return ['success' =>true];
     }
 
-    public function joinRejectedBillApi(Request $request)
-    {
-        if (!Gate::allows('订单管理-问题件-编辑')) return ['success'=>false,'error'=>'没有对应权限'];
-        if(!$request->has('logistic_number_return'))return ['success' => false,'error','参数为空'];
-        /** @var OrderIssue $orderIssue */
-        $orderIssue = OrderIssue::query()->find($request['id']);
-        $orderIssue->joinRejectedBill($request['logistic_number_return']);
-        $rejectedBill = RejectedBill::query()->where('logistic_number_return',$request['logistic_number_return'])->first();
-        return ['success'=>true,'message' =>'添加成功','data'=>$rejectedBill];
-    }
-
-    public function unJoinRejectedBillApi(Request $request)
-    {
-        if (!Gate::allows('订单管理-问题件-编辑')) return ['success'=>false,'error'=>'没有对应权限'];
-        if(!$request->has('logistic_number_return'))return ['success' => false,'error','请校验删除对象是否存在'];
-        /** @var OrderIssue $orderIssue */
-        $orderIssue = OrderIssue::query()->find($request['id']);
-        $orderIssue->unJoinRejectedBill($request['logistic_number_return']);
-        return ['success'=>true,'message'=>'删除成功'];
-    }
-
-    public function reviseJoinRejectedBillApi(Request $request)
-    {
-        if (!Gate::allows('订单管理-问题件-编辑')) return ['success'=>false,'error'=>'没有对应权限'];
-        if(!$request->has('logistic_number_return'))return ['success' => false,'error','请校验被修改内容'];
-        if(!$request->has('logistic_number_return_update'))return ['success' => false,'error','请输入修改内容'];
-        /** @var OrderIssue $orderIssue */
-        $orderIssue = OrderIssue::query()->find($request['id']);
-        $orderIssue->rejectedBills();
-        $orderIssue->reviseJoinRejectedBill($request['logistic_number_return'],$request['logistic_number_return_update']);
-        $rejectedBill = RejectedBill::query()->where('logistic_number_return',$request['logistic_number_return'])->first();
-        return ['success'=>true,'message' => '修改成功','data'=>$rejectedBill];
-    }
-
 }

+ 52 - 0
app/Http/Controllers/OrderIssueRejectedBillController.php

@@ -0,0 +1,52 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\OrderIssue;
+use App\OrderIssueRejectedBill;
+use App\RejectedBill;
+use App\Services\OrderIssueRejectedBillService;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Gate;
+
+class OrderIssueRejectedBillController extends Controller
+{
+    public function joinRejectedBillApi(Request $request)
+    {
+        if (!Gate::allows('订单管理-问题件-编辑')) return ['success'=>false,'error'=>'没有对应权限'];
+        if(!$request->has('logistic_number_return'))return ['success' => false,'error'=>'参数为空'];
+        /** @var OrderIssue $orderIssue */
+        $orderIssue = OrderIssue::query()->find($request['id']);
+        if(!$orderIssue)return ['success' =>false,'error'=>'参数为空'];
+        $result =  app(OrderIssueRejectedBillService::class)->joinRejectedBill($orderIssue,$request['logistic_number_return']);
+        if(is_null($result))return ['success' => false,'error' => '已有对应的关联关系'];
+        if(!$result)return ['success' => false,'error' => '创建关联关系时出现异常'];
+        return ['success' => true,'data' => ['orderIssueRejectedBill' => $result,'orderIssue' => $orderIssue]];
+    }
+
+    public function unJoinRejectedBillApi(Request $request)
+    {
+        if (!Gate::allows('订单管理-问题件-编辑')) return ['success'=>false,'error'=>'没有对应权限'];
+        if(!$request->has('logistic_number_return') || !$request->has('id')) return ['success' => false,'error'=>'参数为空'];
+        /** @var OrderIssue $orderIssue */
+        $orderIssue = OrderIssue::query()->where('id',$request->id)->first();
+        if(!$orderIssue)return ['success' => false, 'message'=>'没有找到对应的记录'];
+        $result =  app(OrderIssueRejectedBillService::class)->unJoinRejectedBill($orderIssue,$request['logistic_number_return']);
+        if(is_null($result))return ['success' => false,'message' => '没有相对应的连接关系!请刷新页面后重试'];
+        return ['success' => true , 'orderIssue' => $orderIssue];
+    }
+
+    public function reviseJoinRejectedBillApi(Request $request)
+    {
+        if (!Gate::allows('订单管理-问题件-编辑')) return ['success'=>false,'error'=>'没有对应权限'];
+        if (!$request->has('logistic_number_return_update'))
+            return ['success' => false,'error' => '退回单号为空'];
+        /** @var OrderIssue $orderIssue */
+        $orderIssue = OrderIssue::query()->where('id',$request->id)->first();
+        if(!$orderIssue)return ['success' => false,'error' => '没有找到对应的记录'];
+        $result = app(OrderIssueRejectedBillService::class)->unJoinRejectedBill($orderIssue,$request['logistic_number_return'],$request['logistic_number_return_update']);
+        if(is_null($result))return ['success' => false,'error' =>  '需更新的对应关系不存在!请刷新页面后重试'];
+        if(!$result)return ['success' => false,'error' => '更新关联关系时出现异常'];
+        return ['success' => true,'data' => ['orderIssueRejectedBill' => $result,'orderIssue' => $orderIssue]];
+    }
+}

+ 116 - 15
app/OrderIssue.php

@@ -39,14 +39,7 @@ class OrderIssue extends Model
      * finance_confirm 财务确认
      * hidden_tag 隐藏标识
      */
-    protected $appends = [
-//        'secondLogisticNumber',
-//        'createLog',
-//        'endLog',
-//        'processingTime',
-//        'createUser',
-//        'endUser',
-    ];
+    protected $appends = [];
 
     public function order()
     {
@@ -58,6 +51,11 @@ class OrderIssue extends Model
         return $this->belongsToMany(RejectedBill::class,'order_issue_rejected_bill','order_issue_id','logistic_number_return','id','logistic_number_return');
     }
 
+    public function orderIssueRejectedBills()
+    {
+        return $this->hasMany(OrderIssueRejectedBill::class);
+    }
+
     public function issueType()
     {
         return $this->belongsTo('App\OrderIssueType', 'order_issue_type_id', 'id');
@@ -83,11 +81,6 @@ class OrderIssue extends Model
         return $this->hasOne('App\Order', 'client_code', 'second_client_no');
     }
 
-//    public function getSecondLogisticNumberAttribute()
-//    {
-//        return $this['secondOrder']['code'] ?? '';
-//    }
-
     public function getCreateLogAttribute()
     {
         return $this->logs->where('type', '创建')->first();
@@ -217,7 +210,106 @@ class OrderIssue extends Model
             $this->update(['rejecting_status' => '差异退回']);
     }
 
+    public function syncRejectingStatus()
+    {
+        if(!$this->order_id)return;
+        $rejectedItems = [];
+        $orderItems = [];
+        $rejectedBills = $this->rejectedBills;
+        if(!$rejectedBills)return;
+        $rejectedBillItems = RejectedBillItem::query()->with('quality')
+            ->whereIn('id_rejected_bill',function($query)use($rejectedBills){
+                $query->from('rejected_bills')->select('id')->whereIn('logistic_number_return',$rejectedBills->map(function($rejectedBil){
+                    return $rejectedBil->logistic_number_return;
+                }));
+        })->get();
+
+        if($rejectedBillItems->count()===0){
+            $this->update(['rejecting_status' => '未退回']);
+            return;
+        }
+
+        if($rejectedBillItems->where('quality.name','残次')->count()>0){
+            $this->update(['rejecting_status' => '差异退回']);
+            return;
+        }
+        $barcodeGoods = data_get($rejectedBillItems,'*.barcode_goods');
+        $commodityBarcodes = CommodityBarcode::query()->with('commodity')->whereIn('code',$barcodeGoods)->get();
+        $commodities = Commodity::query()->whereIn('sku',$barcodeGoods)->get();
+
+        foreach ($rejectedBillItems as $item) {
+            $barcode_goods = (string)$item->barcode_goods;
+            $commodity = $commodities->where('sku',$barcode_goods)->first();
+            if(!$commodity){
+                $commodityBarcode = $commodityBarcodes->where('code',$barcode_goods)->first();
+                $barcode_goods = $commodityBarcode->commodity->sku ?? $barcode_goods;
+            }
+            if (!isset($rejectedItems[$barcode_goods])){
+                $rejectedItems[$barcode_goods] = 0;
+            }
+            $rejectedItems[(string)$barcode_goods] += $item->amount;
+        }
+
+        $items = OrderPackageCommodities::query()->with('commodity')
+            ->whereIn('order_package_id',function($query){
+                $query->from('order_packages')->selectRaw('id')->where('order_id',$this->order_id);
+            })->get();
+
+        if(count($items) == 0){
+            $this->update(['rejecting_status' => '无']);
+            return;
+        }
+        if (count($items) > 0) {
+            foreach ($items as $item) {
+                $sku = $item['commodity']['sku'];
+                if (! isset($orderItems[$sku]) ?? false){
+                    $orderItems[$sku] = 0;
+                }
+                $orderItems[$sku] += $item->amount;
+            }
+        } else {
+            $this->update(['rejecting_status' => '无']);
+            return;
+        }
+        $rejectedExcess = 0;    // 退回差异
+        $rejectedReview = 0;    // 退回复核  $rejectedItems == $orderItems
+        foreach ($rejectedItems as $key => $items) {
+            if ($orderItems[$key] ?? false) {
+                if ($rejectedItems[$key] == $orderItems[$key])
+                    $rejectedReview++;
+            } else
+                $rejectedExcess++;
+        }
+        if ($rejectedExcess > 0) {
+            $this->update(['rejecting_status' => '差异退回']);
+            return;
+        }
+        // 全部退回 部分退回 超量退回 差异退回 未退回 无
+        $isExcess = 0; // 超量 $orderItems < $rejectedItems
+        $isDiff = 0;   // 部分 $orderItems > $rejectedItems
+        $isAccord = 0; // 相同 $orderItems == $rejectedItems
+        $isLack = 0;   // 缺少 $orderItems != $rejectedItems
+        foreach ($orderItems as $key => $item) {
+            if ($rejectedItems[$key] ?? false) {
+                if ($orderItems[$key] < $rejectedItems[$key])
+                    $isExcess++;
+                else if ($orderItems[$key] > $rejectedItems[$key])
+                    $isDiff++;
+                else if ($orderItems[$key] == $rejectedItems[$key])
+                    $isAccord++;
+            } else
+                $isLack++;
+        }
 
+        if($isAccord == $rejectedReview && $isLack == 0 && $isExcess == 0 && $isDiff==0 && $rejectedExcess == 0 )
+            $this->update(['rejecting_status' => '全部退回']);
+        else if($isExcess > 0 && $isAccord ==  $rejectedReview && $isDiff == 0 && $isLack == 0)
+            $this->update(['rejecting_status' => '超量退回']);
+        else if($isDiff >=0 && $isAccord == $rejectedReview && $isLack >=0 && $rejectedExcess ==0 && $isExcess==0)
+            $this->update(['rejecting_status' => '部分退回']);
+        else if($isLack >= 0 && $rejectedExcess>=0 && $isDiff>=0 && $isLack>=0 && $isExcess>=0 && $rejectedReview>=0)
+            $this->update(['rejecting_status' => '差异退回']);
+    }
 
     public function delete()
     {
@@ -244,14 +336,23 @@ class OrderIssue extends Model
         }
     }
 
+    /**
+     * @param array|string $logistic_number
+     * @return array|void
+     */
     public function joinRejectedBill($logistic_number)
     {
-        return $this->rejectedBills()->attach($this->id,$logistic_number);
+        if(!$logistic_number)return null;
+        if(is_array($logistic_number)){
+            return $this->rejectedBills()->sync($logistic_number,false);
+        }
+        $this->update(['is_new_rejecting' => '有']);
+        return $this->rejectedBills()->attach($logistic_number);
     }
 
     public function unJoinRejectedBill($logistic_number)
     {
-        return $this->rejectedBills()->detach($this->id,$logistic_number);
+        return $this->rejectedBills()->detach($logistic_number);
     }
 
     public function reviseJoinRejectedBill($logistic_number,$logistic_number_update)

+ 26 - 0
app/OrderIssueRejectedBill.php

@@ -0,0 +1,26 @@
+<?php
+
+namespace App;
+
+use Illuminate\Database\Eloquent\Model;
+
+use App\Traits\LogModelChanging;
+
+class OrderIssueRejectedBill extends Model
+{
+    use LogModelChanging;
+    protected $table='order_issue_rejected_bill';
+    protected $fillable = [
+        'order_issue_id','logistic_number_return'
+    ];
+
+    public function orderIssue()
+    {
+        return $this->belongsTo(OrderIssue::class,'order_issue_id','id');
+    }
+
+    public function rejectedBill()
+    {
+        return $this->belongsTo(RejectedBill::class,'logistic_number_return','logistic_number_return');
+    }
+}

+ 2 - 0
app/Providers/AppServiceProvider.php

@@ -33,6 +33,7 @@ use App\Services\InventoryDailyLogService;
 use App\Services\LogisticService;
 use App\Services\OracleActAllocationDetailService;
 use App\Services\OrderIssueProcessLogService;
+use App\Services\OrderIssueRejectedBillService;
 use App\Services\OrderIssueService;
 use App\Services\OrderPackageService;
 use App\Services\OrderService;
@@ -154,6 +155,7 @@ class AppServiceProvider extends ServiceProvider
         app()->singleton('OrderIssueProcessLogService',OrderIssueProcessLogService::class);
         app()->singleton('OrderCommodityService',OrderCommodityService::class);
         app()->singleton('OrderCommodityAssignService',OrderCommodityAssignService::class);
+        app()->singleton('OrderIssueRejectedBillService',OrderIssueRejectedBillService::class);
         app()->singleton('OrderIssuePerformanceService',OrderIssuePerformanceService::class);
         app()->singleton('OrderIssueService',OrderIssueService::class);
         app()->singleton('OrderIssueWorkLoadService',OrderIssueWorkLoadService::class);

+ 19 - 6
app/RejectedBill.php

@@ -64,12 +64,11 @@ class RejectedBill extends Model
         return $this->belongsTo('App\WMSReflectReceive','id','id_rejected_bill');
     }
 
-    function orderIssue(){
-        return $this->hasOne(OrderIssue::class,'logistic_number_return','logistic_number_return');
+    function orderIssue()
+    {
+        return $this->hasOneThrough(OrderIssue::class,OrderIssueRejectedBill::class,'logistic_number_return','id','logistic_number_return','order_issue_id');
     }
-//    function orderIssue(){
-//        return $this->belongsToMany(OrderIssue::class,'order_issue_rejected_bill','logistic_number_return','order_issue_id');
-//    }
+
     function setIsLoaded_toWaitConfirm(){
         if(config('api.jianshang_rejecteds_log_switch'))Controller::logS(__METHOD__,__FUNCTION__,"将待推单修改为待确认! 退单号:".$this['logistic_number_return'],Auth::user()['id']);
         $bill=RejectedBill::find($this['id']);
@@ -202,9 +201,23 @@ class RejectedBill extends Model
 
     public function delete()
     {
+        /** @var OrderIssue $orderIssue */
         $orderIssue = $this->orderIssue;
-        if($orderIssue)$orderIssue->update(['is_new_rejecting'=>'无','logistic_number_return'=>null]);
+        if($orderIssue){
+            $orderIssue->unJoinRejectedBill($this->logistic_number_return);
+            $orderIssue->update(['is_new_rejecting'=>'无']);
+        }
         return parent::delete(); // TODO: Change the autogenerated stub
     }
 
+    public function syncOrderInfo()
+    {
+        if(!$this['id'])return;
+        $order = $this->orderIssue->order ?? null;
+        if(!$order)return;
+        if($order->client_code)$this['order_number'] ?: $this['order_number'] =$order->client_code;
+        if($order->consignee_name)$this['sender'] ?: $this['sender'] = $order->consignee_name;
+        if($order->consignee_phone)$this['mobile_sender'] ?: $this['mobile_sender'] =$order->consignee_phone;
+        $this->save();
+    }
 }

+ 128 - 0
app/Services/OrderIssueRejectedBillService.php

@@ -0,0 +1,128 @@
+<?php
+
+namespace App\Services;
+
+use App\OracleDOCOrderHeader;
+use App\OrderIssue;
+use App\OrderIssueRejectedBill;
+use App\RejectedBill;
+use Illuminate\Database\Eloquent\Builder;
+use Illuminate\Database\Eloquent\Model;
+
+Class OrderIssueRejectedBillService
+{
+    /**
+     * @param $orderIssue
+     * @param $logistic_number_return
+     * @return Builder|Model|object|null|boolean
+     */
+    public function joinRejectedBill($orderIssue,$logistic_number_return)
+    {
+        $orderIssueRejectedBill = OrderIssueRejectedBill::query()
+            ->where('order_issue_id',$orderIssue->id)
+            ->where('logistic_number_return',$logistic_number_return)->first();
+        if($orderIssueRejectedBill)return null;
+        $orderIssue->joinRejectedBill($logistic_number_return);
+        return OrderIssueRejectedBill::query()->with('rejectedBill')
+                ->where('order_issue_id',$orderIssue->id)
+                ->where('logistic_number_return',$logistic_number_return)->first() ?? false;
+    }
+
+    /**
+     * @param OrderIssue $orderIssue
+     * @param $logistic_number_return
+     * @return void|null|boolean
+     */
+    public function unJoinRejectedBill($orderIssue,$logistic_number_return)
+    {
+        $orderIssueRejectedBill = OrderIssueRejectedBill::query()
+            ->where('order_issue_id',$orderIssue->id)
+            ->where('logistic_number_return',$logistic_number_return)->first();
+        if(!$orderIssueRejectedBill)return null;
+        return $orderIssue->unJoinRejectedBill($logistic_number_return);
+    }
+
+    /**
+     * @param  OrderIssue $orderIssue
+     * @param $logistic_number_return
+     * @param $logistic_number_return_update
+     * @return null|boolean|Builder|Model|object
+     */
+    public function reviseJoinRejectedBill($orderIssue,$logistic_number_return,$logistic_number_return_update)
+    {
+        $orderIssueRejectedBill = OrderIssueRejectedBill::query()->where('order_issue_id',$orderIssue->id)
+            ->where('logistic_number_return',$logistic_number_return)->first();
+        if($orderIssueRejectedBill) return null;
+        $orderIssue->reviseJoinRejectedBill($logistic_number_return,$logistic_number_return_update);
+        return OrderIssueRejectedBill::query()->with('rejectedBill')
+                ->where('order_issue_id',$orderIssue->id)
+                ->where('logistic_number_return',$logistic_number_return)->first() ?? false;
+    }
+
+    /**
+     * 退回件同步问题件
+     * @param RejectedBill $rejectedBill
+     */
+    public function syncOrderIssue($rejectedBill)
+    {
+        if(!$rejectedBill)return;
+        if(!$rejectedBill->logistic_number_return)return;
+        if(isset($rejectedBill->orderIssue))return;
+        /** @var OrderIssue $orderIssue */
+        $orderIssue = null;
+        // 原单退回
+        if($rejectedBill->logistic_number === '原单退回' || $rejectedBill->logistic_number_return){
+            $orderIssue = OrderIssue::query()->where('order_id',function ($query)use($rejectedBill){
+                $query->table('order_packages')->selectRaw('order_id')->where('logistic_number',$rejectedBill->logistic_number_return);
+            })->first();
+        }
+        if(!$orderIssue){
+            $orderHeader = OracleDOCOrderHeader::query()->selectRaw('OrderNO')->where('SoReference1', function ($query) use ($rejectedBill) {
+                $query->select('AsnReference2')->from('DOC_ASN_HEADER')->where('AsnReference3', $rejectedBill->logistic_number_return)->first();
+            })->first();
+            if(!$orderHeader)return;
+            $orderIssue = OrderIssue::query()->where('order_id',function($query)use($orderHeader){
+                $query->table('orders')->select('id')->where('code',$orderHeader->orderno);
+            })->first();
+        }
+        if(!$orderIssue)return;
+        $orderIssue->joinRejectedBill($rejectedBill->logistic_number_return);
+        $this->syncOrderIssueRejectingStatus($orderIssue);
+    }
+
+    /**
+     * 问题件同步退回件
+     * @param OrderIssue $orderIssue
+     */
+    public function syncRejectedBill($orderIssue)
+    {
+        if(!$orderIssue)return;
+        $order_packages = $orderIssue->order->packages ?? collect();
+        if(!$order_packages)return;
+        $logistic_number_return = RejectedBill::query()->whereIn('logistic_number_return',$order_packages->map(function($rejectedBill){
+            return $rejectedBill->logistic_number_return;
+        }))->get();
+        $orderIssue->joinRejectedBill($logistic_number_return);
+        $this->syncOrderIssueRejectingStatus($orderIssue);
+    }
+
+    /**
+     * 问题件更新退单状态
+     * @param OrderIssue $orderIssue
+     */
+    public function syncOrderIssueRejectingStatus($orderIssue)
+    {
+        $orderIssue->syncRejectingStatus();
+    }
+
+    /**
+     * 根据问题件信息
+     * @param RejectedBill $rejectedBill
+     */
+    public function updateByOrderIssue($rejectedBill)
+    {
+        $rejectedBill->syncOrderInfo();
+    }
+
+
+}

+ 1 - 1
app/Services/OrderIssueService.php

@@ -48,7 +48,7 @@ class OrderIssueService
             $query->with(['shop', 'logistic', 'owner', 'packages.commodities.commodity' => function ($query) {
                 $query->with('barcodes');
             }]);
-        }, 'rejectedBills' => function ($query) {
+        }, 'orderIssueRejectedBills.rejectedBill' => function ($query) {
             $query->with(['items.quality']);
         }, 'secondOrder' => function ($query) {
             $query->with(['shop', 'logistic', 'owner', 'packages.commodities.commodity' => function ($query) {

+ 80 - 59
resources/views/order/issue/index.blade.php

@@ -314,15 +314,15 @@
                                         <button class="btn btn-sm btn-primary" @click="joinRejectedBill(orderIssue,$event)">添加</button>
                                     </div>
                                 </div>
-                                <div class="form-inline" v-for="rejected_bill in orderIssue.rejected_bills">
+                                <div class="form-inline" v-for="orderIssueRejectedBill in orderIssue.order_issue_rejected_bills">
                                     {{--修改--}}
-                                    <input type="text" class="form-control form-control-sm mt-1 mr-1" :value="rejected_bill.logistic_number_return" @change="reviseJoinRejectedBill(orderIssue,rejected_bill.logistic_number_return,$event)" @focus="displayDelBtn(true,$event)" @blur="displayDelBtn(false,$event)">
+                                    <input type="text" class="form-control form-control-sm mt-1 mr-1" :value="orderIssueRejectedBill.logistic_number_return" @change="reviseJoinRejectedBill(orderIssue,orderIssueRejectedBill.logistic_number_return,$event)" @focus="displayDelBtn(true,$event)" @blur="displayDelBtn(false,$event)">
                                     {{--删除--}}
-                                    <button type="button" class="btn btn-sm btn-outline-danger mt-1 d-none" @click="unJoinRejectedBill(orderIssue,rejected_bill.logistic_number_return)">删</button>
+                                    <button type="button" class="btn btn-sm btn-outline-danger mt-1 d-none" @click="unJoinRejectedBill(orderIssue,orderIssueRejectedBill.logistic_number_return)">删</button>
                                 </div>
                             @else
-                                <span v-for="rejected_bill in orderIssue.rejected_bills">
-                                    <span class="d-inline-block w-100">@{{ rejected_bill.logistic_number_return }}</span>
+                                <span v-for="order_issue_rejected_bill in orderIssue.order_issue_rejected_bills">
+                                    <span class="d-inline-block w-100" >@{{ order_issue_rejected_bill.logistic_number_return }}</span>
                                 </span>
                             @endcan
                         </td>
@@ -332,21 +332,35 @@
                         </td>
 
                         <td class="p-0 child-layer-3-hide align-center" :id="orderIssue.id+'rejectedBill'" colspan="5" v-if="isShowRejectedBill">
-                            <div v-if="orderIssue.rejected_bill" class="m-0 p-0">
-                                <table v-if="orderIssue.rejected_bill.items" class="table table-sm  m-0" :class="orderIssue.rejected_bill.items.length > 1 ? 'collapse' : '' " :id="'rejectedBill'+orderIssue.id">
-                                    <tr class="align-center" v-for="item in orderIssue.rejected_bill.items" @click="removeFocusing($event)" v-show="isShowRejectedBill">
-                                        <td style="min-width: 75px">@{{ item.barcode_goods }}</td>
-                                        <td style="min-width: 100px" >
-                                            <div class="text-truncate text-primary tooltipTarget" style="width: 100px;cursor:pointer;text-decoration: underline" title="双击展开" @dblclick="nowrapText($event)">@{{ item.name_goods }}</div>
-                                            <div class="text-nowrap m-0 p-0 tooltipTarget"  style="display: none;cursor:pointer" @dblclick="truncateText($event)" title="双击收起">@{{ item.name_goods }}</div>
-                                        </td>
-                                        <td style="min-width: 50px">@{{ item.amount }}</td>
-                                        <td style="min-width: 50px">@{{ item.quality_label }}</td>
-                                        <td style="min-width: 100px">@{{ item.remark }}</td>
-                                    </tr>
+                            <div v-if="orderIssue.order_issue_rejected_bills" class="m-0 p-0">
+                                <table class="table table-sm m-0" :class="orderIssue.rejected_bill_type_numbers > 2 ? 'collapse' : '' " :id="'rejectedBill'+orderIssue.id">
+                                    <template v-for="order_issue_rejected_bill in orderIssue.order_issue_rejected_bills">
+                                        <template v-if="order_issue_rejected_bill.rejected_bill">
+                                            <tr v-for="item in order_issue_rejected_bill.rejected_bill.items"  @click="removeFocusing($event)" v-show="isShowRejectedBill">
+                                                <td class="w-50">@{{ item.barcode_goods }}</td>
+                                                <td>
+                                                    <div class="text-truncate text-primary tooltipTarget w-100" style="cursor:pointer;text-decoration: underline" title="双击展开" @dblclick="nowrapText($event)">@{{ item.name_goods }}</div>
+                                                    <div class="text-nowrap m-0 p-0 tooltipTarget"  style="display: none;cursor:pointer" @dblclick="truncateText($event)" title="双击收起">@{{ item.name_goods }}</div>
+                                                </td>
+                                                <td class="w-25">@{{ item.amount }}</td>
+                                                <td class="w-25">@{{ item.quality_label }}</td>
+                                                <td class="w-auto">@{{ item.remark }}</td>
+                                            </tr>
+                                        </template>
+                                    </template>
+{{--                                    <tr class="align-center" v-for="item in orderIssue.rejected_bill.items" @click="removeFocusing($event)" v-show="isShowRejectedBill">--}}
+{{--                                        <td style="min-width: 75px">@{{ item.barcode_goods }}</td>--}}
+{{--                                        <td style="min-width: 100px">--}}
+{{--                                            <div class="text-truncate text-primary tooltipTarget" style="width: 100px;cursor:pointer;text-decoration: underline" title="双击展开" @dblclick="nowrapText($event)">@{{ item.name_goods }}</div>--}}
+{{--                                            <div class="text-nowrap m-0 p-0 tooltipTarget"  style="display: none;cursor:pointer" @dblclick="truncateText($event)" title="双击收起">@{{ item.name_goods }}</div>--}}
+{{--                                        </td>--}}
+{{--                                        <td style="min-width: 50px">@{{ item.amount }}</td>--}}
+{{--                                        <td style="min-width: 50px">@{{ item.quality_label }}</td>--}}
+{{--                                        <td style="min-width: 100px">@{{ item.remark }}</td>--}}
+{{--                                    </tr>--}}
                                 </table>
-                                <button v-if="orderIssue.rejected_bill_type_numbers>1" type="button" class="btn btn-sm btn-outline-primary align-middle mt-1" :id="'rejectedBillBtn'+orderIssue.id"
-                                        data-toggle="collapse" :data-target="'#rejectedBill'+orderIssue.id" @click="toggleRejectedBill(orderIssue.id,orderIssue.rejectedCount)">
+                                <button v-if="orderIssue.rejected_bill_type_numbers > 1" type="button" class="btn btn-sm btn-outline-primary align-middle mt-1" :id="'rejectedBillBtn'+orderIssue.id"
+                                        data-toggle="collapse" :data-target="'#rejectedBill'+orderIssue.id" @click="toggleRejectedBill(orderIssue.id,orderIssue.rejected_bill_amounts)">
                                     商品@{{ orderIssue.rejected_bill_amounts }}件,点击展开
                                 </button>
                             </div>
@@ -390,15 +404,16 @@
                             @endcan
                             <template v-if="orderIssue.logs && orderIssue.logs.length > 0" class="p-0 m-0 ">
                                 <table class="table table-sm p-0 m-0 " :id="'logs'+orderIssue.id">
-                                    <tr class="align-center position-static" v-for="(log,index) in orderIssue.logs" v-show="index > 1 && orderIssue.logShow" @click="removeFocusing($event)"
+                                    <tr class="align-center position-static" v-for="(log,index) in orderIssue.logs" v-show="(index > 1 || orderIssue.logs.length < 2)  && orderIssue.logShow"
+                                        @click="removeFocusing($event)"
                                         v-on:mouseover="showDelBtn($event)" v-on:mouseleave="hideDelBtn($event)" >
                                         <td style="min-width: 200px">@{{ log.content }}</td>
                                         <td class="text-muted" style="min-width: 120px">@{{ log.user.name }}</td>
                                         <td class="text-muted" style="min-width: 170px">@{{ log.created_at }}</td>
                                         @can('订单管理-问题件-处理结果删除')
-                                        <td style="" class="m-0 p-0 border-0">
-                                            <button type="button" class="btn btn-sm btn-outline-danger m-0 del-btn invisible" @click="deleteOrderIssueLog(log.id,orderIssue.id)">删</button>
-                                        </td>
+                                            <td style="" class="m-0 p-0 border-0">
+                                                <button type="button" class="btn btn-sm btn-outline-danger m-0 del-btn invisible" @click="deleteOrderIssueLog(log.id,orderIssue.id)">删</button>
+                                            </td>
                                         @endcan
                                     </tr>
                                 </table>
@@ -406,7 +421,7 @@
                                     记录共@{{ orderIssue.logs.length }}条,点击展开
                                 </button>
                             </template>
-                            <div v-else  class="w-auto" style="height: 55px">
+                            <div v-else  class="w-auto h-50">
 
                             </div>
                         </td>
@@ -858,14 +873,16 @@
                 },
                 regroupRejectedBill(orderIssue){
                     if(!orderIssue)return;
-                    if(!orderIssue.rejectedBills)return;
+                    if(!orderIssue.order_issue_rejected_bills)return;
                     let amounts = 0;// 商品总数
                     let type_numbers = 0; // 商品类型数量
-                    $.each(orderIssue.rejectedBills,function(i,rejectedBill){
-                        $.each(rejectedBill.items,function (i,item) {
-                            type_numbers++;
-                            amounts+=item.amount;
-                        });
+                    $.each(orderIssue.order_issue_rejected_bills,function(i,order_issue_rejected_bill){
+                        if(order_issue_rejected_bill.rejected_bill){
+                            $.each(order_issue_rejected_bill.rejected_bill.items,function (i,item) {
+                                type_numbers++;
+                                amounts+=item.amount;
+                            });
+                        }
                     });
                     orderIssue.rejected_bill_amounts = amounts;
                     orderIssue.rejected_bill_type_numbers = type_numbers;
@@ -873,10 +890,16 @@
                 regroupLogs(orderIssue){
                     if(orderIssue.logs && orderIssue.logs.length > 2) orderIssue.logShow = true;
                     else orderIssue.logShow = false;
+
+                    orderIssue.logCount = orderIssue.logs.length;
                 },
                 displayDelBtn(bool,e){
                     if(bool)$(e.target).next().removeClass('d-none');
-                    else $(e.target).next().addClass('d-none');
+                    else {
+                        setTimeout(function(){
+                            $(e.target).next().addClass('d-none');
+                        },100);
+                    }
                 },
                 selectedColor(orderno,e) {
                     $('.table-body').removeClass('focusing')
@@ -1068,9 +1091,6 @@
                             tempTip.setDuration(3000)
                             tempTip.showSuccess('订单已处理')
                             let logs = response.data.logs;
-                            $.each(response.data.logs,function(i,log){
-
-                            });
                             for (let i = 0; i < logs.length; i++) {
                                 let log = logs[i]
                                 let orderIssue = orderIssues[log['order_issue_id']]
@@ -1192,7 +1212,7 @@
                 },
                 toggleLogs(orderIssue, e) {
                     if ( orderIssue.logShow  === false) {
-                        $(e.target).text("记录共" + $(e.target).attr('data-value') + "条,点击展开");
+                        $(e.target).text("记录共" + orderIssue.logs.length + "条,点击展开");
                     } else {
                         $(e.target).text('点击收起');
                     }
@@ -1395,7 +1415,7 @@
                                 orderIssue.second_order = response.data.order
                                 orderIssue.second_client_no = response.data.order.client_code
                             }
-                            if(response.data.second_logistic_number != null){
+                            if(response.data.second_logistic_number != null ){
                                 orderIssue.second_logistic_number = response.data.second_logistic_number
                             }
                             _this.edit.orderIssue.id = ''
@@ -1502,52 +1522,54 @@
                         });
                 },
                 joinRejectedBill(orderIssue,e){
-                    let logistic_number = $(e.target).val();
+                    let logistic_number = $(e.target).prev().val();this
+                    let is_return = false;
                     if(logistic_number===null){
                         tempTip.show('请输入需要关联的退回单号');
-                        return;
+                        is_return= true;
                     }
+                    orderIssue.order_issue_rejected_bills.forEach(function(order_issue_rejected_bill){
+                        if(order_issue_rejected_bill.logistic_number_return === logistic_number){
+                            tempTip.show('已有对应的退回单号');
+                            is_return= true;
+                        }
+                    });
+                    if(is_return)return;
                     let _this = this;
-                    axios.post('{{url('apiLocal/order/issue/rejectedBill/join')}}', {id:orderIssue.id,logistic_number_return})
+                    axios.post('{{url('apiLocal/order/issue/rejectedBill/join')}}', {id:orderIssue.id,logistic_number_return:logistic_number})
                         .then(function(response){
                             if(response.data.success){
                                 tempTip.setDuration(2000);
                                 tempTip.showSuccess('关联成功');
-                                if(response.data.data){
-                                    if(orderIssue.rejected_bills===null)orderIssue.rejected_bills=[];
-                                    orderIssue.rejected_bills.push(response.data.data);
-                                    _this.regroupRejectedBill(orderIssue);
-                                }
+                                if(orderIssue.order_issue_rejected_bills===null)orderIssue.order_issue_rejected_bills=[];
+                                orderIssue.order_issue_rejected_bills.push(response.data.data.orderIssueRejectedBill);
+                                $(e.target).prev().val('');
+                                _this.regroupRejectedBill(orderIssue);
                                 return;
                             }
                             tempTip.setDuration(2000);
                             tempTip.show(response.data.error);
                         })
                         .catch(function(error){
-                            tempTip.cancelWaitingTip();
                             tempTip.setDuration(2000);
                             tempTip.show(error);
                         });
                 },
                 unJoinRejectedBill(orderIssue,logistic_number){
-                    console.log(orderIssue,logistic_number);
                     if(logistic_number===null)return;
                     let _this = this;
-                    axios.post('{{url('apiLocal/order/issue/rejectedBill/unJoin')}}', {id:orderIssue.id,logistic_number_return})
+                    axios.post('{{url('apiLocal/order/issue/rejectedBill/unJoin')}}', {id:orderIssue.id,logistic_number_return:logistic_number})
                         .then(function(response){
                             if(response.data.success){
                                 tempTip.setDuration(2000);
-                                tempTip.showSuccess('取消');
-                                if(response.data.data){
-                                    if(orderIssue.rejected_bills===null)return;
-                                    $.each(orderIssue.rejected_bills,function(i,rejecetd_bill){
-                                        if(rejecetd_bill.logistic_number_return === logistic_number){
-                                            orderIssue.rejected_bills.splice(i,1);
-                                            _this.regroupRejectedBill(orderIssue);
-                                            return;
-                                        }
-                                    });
-                                }
+                                tempTip.showSuccess('退回单号取消关联成功');
+                                if(orderIssue.rejected_bills===null)return;
+                                $.each(orderIssue.order_issue_rejected_bills,function(i,order_issue_rejected_bills){
+                                    if(order_issue_rejected_bills.rejected_bill.logistic_number_return === logistic_number){
+                                        orderIssue.order_issue_rejected_bills.splice(i,1);
+                                        _this.regroupRejectedBill(orderIssue);
+                                    }
+                                });
                                 return;
                             }
                             tempTip.setDuration(2000);
@@ -1578,7 +1600,6 @@
                                             orderIssue.rejected_bills.splice(i,1);
                                             orderIssue.rejected_bills.push(response.data.data);
                                             _this.regroupRejectedBill(orderIssue);
-                                            return;
                                         }
                                     });
                                 }

+ 5 - 3
routes/apiLocal.php

@@ -33,6 +33,8 @@ Route::post('waybill/changeCharge', 'WaybillController@changeCharge');
 Route::post('rejectedBill/getRejectedByLogisticNumberReturn','RejectedController@apiGetRejectedByLogisticNumberReturn');
 
 Route::group(['prefix' => 'order'], function () {
+
+
     Route::group(['prefix'=>'issue'],function(){
 
         Route::post('orderIssueHasClientCode', 'OrderIssueController@apiOrderIssueHasClientCode');
@@ -56,9 +58,9 @@ Route::group(['prefix' => 'order'], function () {
         Route::post('financeConfirm','OrderIssueController@financeConfirmApi');
 
         Route::group(['prefix'=>'rejectedBill'],function(){
-            Route::post('join','OrderIssueController@joinRejectedBillApi');
-            Route::post('unJoin','OrderIssueController@unJoinRejectedBillApi');
-            Route::post('reviseJoin','OrderIssueController@reviseJoinRejectedBillApi');
+            Route::post('join','OrderIssueRejectedBillController@joinRejectedBillApi');
+            Route::post('unJoin','OrderIssueRejectedBillController@unJoinRejectedBillApi');
+            Route::post('reviseJoin','OrderIssueRejectedBillController@reviseJoinRejectedBillApi');
         });
 
          Route::group(['prefix'=>'onTop'],function(){