Sfoglia il codice sorgente

Merge branch 'zengjun'

# Conflicts:
#	app/Http/Controllers/api/thirdPart/flux/StoreController.php
LD 5 anni fa
parent
commit
533ba3a967

+ 0 - 207
app/Http/Controllers/api/thirdPart/flux/StoreController.php

@@ -160,211 +160,4 @@ class StoreController extends Controller
         }
         return ['success'=>false, 'data'=>"失败!请检查错误日志"];
     }
-
-    public function quickStorage($asnno,$quality,$depository_code)
-    {
-        $db = DB::connection('oracle');
-        $query = DB::raw("SELECT * FROM DOC_ASN_HEADER WHERE ASNNO = ?");
-        $asn = $db->selectOne($query,[$asnno]);
-        if (!$asn) return ['success'=>false, 'data'=>"单据号不存在"];
-        if ($asn->asnstatus != '00')return ['success'=>false, 'data'=>'单据号状态非创建订单'];
-        if (array_search($asn->customerid,array_values(config('stores.owners'))) === false)return ['success'=>false, 'data'=>"不允许该货主快速入库"];
-        if (array_search($asn->asntype,array_values(config('stores.types'))) === false)return ['success'=>false, 'data'=>"该单据类型不允许被入库"];
-        $query = DB::raw("SELECT b.ALTERNATE_SKU1,h.WAREHOUSEID,h.asnno,d.ASNLINENO,d.SKUDESCRC,h.CUSTOMERID,d.SKU,d.PACKID,d.RECEIVEDQTY_EACH,d.EXPECTEDQTY_EACH,d.LOTATT01,d.LOTATT02,d.lotatt04,".
-            "d.lotatt05,d.lotatt08,d.USERDEFINE1,d.USERDEFINE2,d.USERDEFINE3,d.USERDEFINE4,d.USERDEFINE5,d.RECEIVINGLOCATION FROM DOC_ASN_DETAILS d ".
-            " LEFT JOIN BAS_SKU b ON d.CUSTOMERID = b.CUSTOMERID AND d.SKU = b.SKU INNER JOIN DOC_ASN_HEADER h ON d.ASNNO = h.ASNNO WHERE h.ASNNO = ?");
-        $details = $db->select($query,[$asnno]);
-
-        $username = config('database.connections.oracle.username');
-        $password = config('database.connections.oracle.password');
-        $host = config('database.connections.oracle.host');
-        $service_name = config('database.connections.oracle.service_name');
-        $conn = oci_connect($username, $password, $host . '/' . $service_name,"utf8");
-        $sql_sp = "begin SPASN_Receiving_Process(:IN_Warehouse, :In_Process_Action, :In_ASNNo_C, :In_ASNLineNo_C, :In_FMTraceID_C, :In_New_TraceID_C, :In_ProductStatus," .
-            ":In_ProductStatus_Descr, :In_HoldRejectCode_C, :In_HoldRejectReason_C, :In_PONo_C, :In_CustomerID, :In_SKU, :In_ReceivedQty, :In_RejectedQty,:In_UOM, :In_PackID," .
-            " :In_ContainerID, :In_LotAtt01_C, :In_LotAtt02_C, :In_LotAtt03_C, :In_LotAtt04_C, :In_LotAtt05_C, :In_LotAtt06_C," .
-            ":In_LotAtt07_C, :In_LotAtt08_C, :In_LotAtt09_C, :In_LotAtt10_C, :In_LotAtt11_C, :In_LotAtt12_C," .
-            ":In_TotalCubic, :In_TotalGrossWeight, :In_TotalNetWeight, :In_TotalPrice, :In_UserDefine1, :In_UserDefine2,:In_UserDefine3, :In_UserDefine4, :In_UserDefine5, :In_FMLocation," .
-            ":In_TOLocation_C,:In_QC_Type_C, :In_PlanToLoc_C,:In_ReceivingTime, :In_LPN, :In_Operator, :IN_RCVModule, :IN_RCVStation, :In_Language, :In_UserID, :OUT_Return_Code); end;";
-        $items = [];
-        $toDay = Carbon::now()->toDateTimeString();
-        $depositories = [];
-        foreach ($details as $detail) {
-            $result = $this->executeSP($detail,$asnno,$depository_code,$db,$quality,$conn,$sql_sp);
-            if (substr($result, 0, 3) != '000') {
-                oci_close($conn);
-                LogService::log(__METHOD__,"快速入库-FLUX收货失败","ASNNO:".$asnno.";ERROR:".$result);
-                return ['success' => false, 'data' => $detail->asnlineno.'收货失败,错误代码:'.$result];
-            }
-            if (!isset($depositories[$detail->lotatt05])){
-                $depository = app('depositoryService')->firstOrCreate(["code"=>$detail->lotatt05],["code"=>$detail->lotatt05,"name"=>$detail->lotatt05]);
-                $depositories[$detail->lotatt05] = $depository->id;
-            }
-            $items[] = [
-                "asn_line_code" => $detail->asnlineno,
-                "name" => $detail->skudescrc,
-                "sku" => $detail->sku,
-                "barcode" => $detail->alternate_sku1,
-                "depository_id" => $depositories[$detail->lotatt05],
-                "amount" => $detail->expectedqty_each,
-                "quality" => $quality == 'ZP' ? '正品' : '残次',
-                "status" => "已入库",
-                "created_at" => $toDay
-            ];
-        }
-        oci_close($conn);
-        $warehouse = app('warehouseService')->firstOrCreate(["code"=>$asn->warehouseid],["code"=>$asn->warehouseid,"name"=>$asn->warehouseid]);
-        $owner = app('ownerService')->firstOrCreate(['code'=>$asn->customerid],['code'=>$asn->customerid,"name"=>$asn->customerid]);
-        $store = app('storeService')->create([
-            'asn_code'=>$asnno,
-            'warehouse_id'=>$warehouse->id,
-            'owner_id'=>$owner->id,
-            'stored_method'=>'快速入库',
-            'status'=>'已入库',
-            'remark'=>$asn->notes,
-        ]);
-        LogService::log(__METHOD__,"快速入库",json_encode($store));
-        foreach ($items as $item){
-            $item["store_id"] = $store->id;
-        }
-        app('storeItemService')->insert($items);
-        return ['success'=>true,"data"=>"已成功将“".$asnno."”入库"];
-    }
-
-    private function executeSP($detail, $asnno, $depository_code, $db, $quality, $conn, $sql_sp){
-        $IN_Warehouse = $detail->warehouseid ?? '';
-        $In_Process_Action = '3';
-        $In_ASNNo_C = $detail->asnno ?? '';
-        $In_ASNLineNo_C = $detail->asnlineno ?? '';
-        $In_FMTraceID_C = '';
-        $In_New_TraceID_C = '';
-        $In_ProductStatus = '00';
-        $In_ProductStatus_Descr = '正常';
-        $In_HoldRejectCode_C = 'OK';
-        $In_HoldRejectReason_C = '正常';
-        $In_PONo_C = '';
-        $In_CustomerID = $detail->customerid ?? '';
-        $In_SKU = $detail->sku ?? '';
-        $In_ReceivedQty = (string)((int)$detail->expectedqty_each - (int)$detail->receivedqty_each) ?? '';
-        $In_RejectedQty = '';
-        $In_UOM = 'EA';
-        $In_PackID = $detail->packid ?? '';
-        $In_ContainerID = '';
-        $In_LotAtt01_C = $detail->lotatt01 ?? '';
-        $In_LotAtt02_C = $detail->lotatt02 ?? '';
-        $In_LotAtt03_C = '';
-        $In_LotAtt04_C = $detail->lotatt04 ?? '';
-        $In_LotAtt05_C = $detail->lotatt05 ?? '';
-        $In_LotAtt06_C = '';
-        $In_LotAtt07_C = '';
-        $In_LotAtt08_C = $detail->lotatt08 ?? '';
-        $In_LotAtt09_C = '';
-        $In_LotAtt10_C = '';
-        $In_LotAtt11_C = '';
-        $In_LotAtt12_C = '';
-        $In_TotalCubic = '0.00';
-        $In_TotalGrossWeight = '0.00';
-        $In_TotalNetWeight = '0.00';
-        $In_TotalPrice = '0.00';
-        $In_UserDefine1 = $detail->userdefine1 ?? '';
-        $In_UserDefine2 = $detail->userdefine2 ?? '';
-        $In_UserDefine3 = $detail->userdefine3 ?? '';
-        $In_UserDefine4 = $detail->userdefine4 ?? '';
-        $In_UserDefine5 = $detail->userdefine5 ?? '';
-        $In_FMLocation = 'STAGE' . $detail->warehouseid;
-        $In_TOLocation_C = 'STAGE' . $detail->warehouseid;
-        $In_QC_Type_C = 'OK';
-        $In_PlanToLoc_C = '';
-        $In_ReceivingTime = '';
-        $In_LPN = '*';
-        $In_Operator = 'WCS';
-        $IN_RCVModule = '';
-        $IN_RCVStation = '';
-        $In_Language = 'cn';
-        $In_UserID = 'WCS';
-        $result = '';
-        if ($depository_code && (strtoupper($depository_code) != strtoupper($detail->receivinglocation))){
-            $query = DB::raw("UPDATE DOC_ASN_DETAILS SET RECEIVINGLOCATION = ?  WHERE ASNNO = ? AND ASNLINENO = ?");
-            $db->update($query,[$depository_code,$detail->asnno,$detail->asnlineno]);
-            $db->commit();
-            LogService::log(__METHOD__,"快速入库-修改FULX属性仓","ASNNO:".$asnno.";原仓:".$detail->receivinglocation.";修改为:".$depository_code);
-        }
-        if ($quality && ($quality != $detail->lotatt08)){
-            $query = DB::raw("UPDATE DOC_ASN_DETAILS SET LOTATT08 = ?  WHERE ASNNO = ? AND ASNLINENO = ?");
-            $db->update($query,[$quality,$detail->asnno,$detail->asnlineno]);
-            $db->commit();
-            LogService::log(__METHOD__,"快速入库-修改FULX质量状态","ASNNO:".$asnno.";原质量:".$detail->lotatt08.";修改为:".$quality);
-            $In_LotAtt08_C = $quality;
-        }
-        $stmt = oci_parse($conn, $sql_sp);
-        oci_bind_by_name($stmt, ':IN_Warehouse', $IN_Warehouse);
-        oci_bind_by_name($stmt, ':In_Process_Action', $In_Process_Action);
-        oci_bind_by_name($stmt, ':In_ASNNo_C', $In_ASNNo_C);
-        oci_bind_by_name($stmt, ':In_ASNLineNo_C', $In_ASNLineNo_C);
-        oci_bind_by_name($stmt, ':In_FMTraceID_C', $In_FMTraceID_C);
-        oci_bind_by_name($stmt, ':In_New_TraceID_C', $In_New_TraceID_C);
-        oci_bind_by_name($stmt, ':In_ProductStatus', $In_ProductStatus);
-        oci_bind_by_name($stmt, ':In_ProductStatus_Descr', $In_ProductStatus_Descr);
-        oci_bind_by_name($stmt, ':In_HoldRejectCode_C', $In_HoldRejectCode_C);
-        oci_bind_by_name($stmt, ':In_HoldRejectReason_C', $In_HoldRejectReason_C);
-        oci_bind_by_name($stmt, ':In_PONo_C', $In_PONo_C);
-        oci_bind_by_name($stmt, ':In_CustomerID', $In_CustomerID);
-        oci_bind_by_name($stmt, ':In_SKU', $In_SKU);
-        oci_bind_by_name($stmt, ':In_ReceivedQty', $In_ReceivedQty);
-        oci_bind_by_name($stmt, ':In_RejectedQty', $In_RejectedQty);
-        oci_bind_by_name($stmt, ':In_UOM', $In_UOM);
-        oci_bind_by_name($stmt, ':In_PackID', $In_PackID);
-        oci_bind_by_name($stmt, ':In_ContainerID', $In_ContainerID);
-        oci_bind_by_name($stmt, ':In_LotAtt01_C', $In_LotAtt01_C);
-        oci_bind_by_name($stmt, ':In_LotAtt02_C', $In_LotAtt02_C);
-        oci_bind_by_name($stmt, ':In_LotAtt03_C', $In_LotAtt03_C);
-        oci_bind_by_name($stmt, ':In_LotAtt04_C', $In_LotAtt04_C);
-        oci_bind_by_name($stmt, ':In_LotAtt05_C', $In_LotAtt05_C);
-        oci_bind_by_name($stmt, ':In_LotAtt06_C', $In_LotAtt06_C);
-        oci_bind_by_name($stmt, ':In_LotAtt07_C', $In_LotAtt07_C);
-        oci_bind_by_name($stmt, ':In_LotAtt08_C', $In_LotAtt08_C);
-        oci_bind_by_name($stmt, ':In_LotAtt09_C', $In_LotAtt09_C);
-        oci_bind_by_name($stmt, ':In_LotAtt10_C', $In_LotAtt10_C);
-        oci_bind_by_name($stmt, ':In_LotAtt11_C', $In_LotAtt11_C);
-        oci_bind_by_name($stmt, ':In_LotAtt12_C', $In_LotAtt12_C);
-        oci_bind_by_name($stmt, ':In_TotalCubic', $In_TotalCubic);
-        oci_bind_by_name($stmt, ':In_TotalGrossWeight', $In_TotalGrossWeight);
-        oci_bind_by_name($stmt, ':In_TotalNetWeight', $In_TotalNetWeight);
-        oci_bind_by_name($stmt, ':In_TotalPrice', $In_TotalPrice);
-        oci_bind_by_name($stmt, ':In_UserDefine1', $In_UserDefine1);
-        oci_bind_by_name($stmt, ':In_UserDefine2', $In_UserDefine2);
-        oci_bind_by_name($stmt, ':In_UserDefine3', $In_UserDefine3);
-        oci_bind_by_name($stmt, ':In_UserDefine4', $In_UserDefine4);
-        oci_bind_by_name($stmt, ':In_UserDefine5', $In_UserDefine5);
-        oci_bind_by_name($stmt, ':In_FMLocation', $In_FMLocation);
-        oci_bind_by_name($stmt, ':In_TOLocation_C', $In_TOLocation_C);
-        oci_bind_by_name($stmt, ':In_QC_Type_C', $In_QC_Type_C);
-        oci_bind_by_name($stmt, ':In_PlanToLoc_C', $In_PlanToLoc_C);
-        oci_bind_by_name($stmt, ':In_ReceivingTime', $In_ReceivingTime);
-        oci_bind_by_name($stmt, ':In_LPN', $In_LPN);
-        oci_bind_by_name($stmt, ':In_Operator', $In_Operator);
-        oci_bind_by_name($stmt, ':IN_RCVModule', $IN_RCVModule);
-        oci_bind_by_name($stmt, ':IN_RCVStation', $IN_RCVStation);
-        oci_bind_by_name($stmt, ':In_Language', $In_Language);
-        oci_bind_by_name($stmt, ':In_UserID', $In_UserID);
-        oci_bind_by_name($stmt, ':OUT_Return_Code', $result,300);
-        oci_execute($stmt);
-        return $result;
-    }
-
-
-    public function validator(Request $request){
-        $validator=Validator::make($request->input(),[
-            'asn_code'=>['required'],
-            'quality'=>['required'],
-            'depository_code'=>['nullable','string'],
-        ],[
-            'required'=>':attribute 为必填项',
-            'unique'=>':attribute 已存在',
-        ],[
-            'asn_code'=>'ASN编号',
-            'quality'=>'货物类型'
-        ])->validate();
-        return $validator;
-    }
 }

+ 6 - 0
app/Order.php

@@ -15,6 +15,12 @@ class Order extends Model
         'logistic_id', 'consignee_name', 'consignee_phone', 'province',
         'city', 'district', 'address', 'wms_status'];
 
+    /*
+     * wms订单号     code=>DOC_ORDER_HEADER[orderno]
+     * 客户订单号     client_code=>DOC_ORDER_HEADER['soreference1']
+     * wms订单状态    wms_status=>
+     */
+
     protected $appends = [
         'logisticNumbers',
         'amount',

+ 2 - 0
app/Services/OrderService.php

@@ -509,6 +509,7 @@ class OrderService
             $shop_name_map[$key] = $shop;
         }
         $insert_params = $this->getParamsByOrderHeader($orderHeaders,$owners_code_map,$logistics_code_map,$shop_name_map);
+
         if(count($insert_params)> 0){
             $this->create($insert_params);
         }
@@ -535,6 +536,7 @@ class OrderService
             $logistic =  $logistics_code_map[$orderHeader->userdefine1] ?? null;
             $key = ' owner_code='.$orderHeader->customerid.' name='.$orderHeader->issuepartyname ?? '';
             $shop = $shop_name_map[$key] ?? '';
+
             // 自提 转 新杰物流
             if($logistic!= null && $logistic->name == '自提'){
                 $logistic = $logistic_XJWL;

+ 22 - 8
app/Services/OrderTrackingService.php

@@ -3,6 +3,7 @@
 namespace App\Services;
 
 use App\Exports\Export;
+use App\OracleBasSKU;
 use App\OracleDOCOrderHeader;
 use App\Order;
 use App\OrderPackageCommodities;
@@ -13,7 +14,6 @@ use App\Services\common\QueryService;
 use Illuminate\Support\Carbon;
 use Illuminate\Support\Collection;
 use Illuminate\Support\Facades\Auth;
-use Maatwebsite\Excel\Facades\Excel;
 
 class OrderTrackingService
 {
@@ -237,7 +237,7 @@ class OrderTrackingService
             if(preg_match('/^O[\d]/',$order_header['soreference1'] ?? '') > 0){
                 $web_order_number = $order_header['soreference1'];
             }
-
+            $param = $this->getParamsByOrderHeaderAndOrder($order_header,$order);
             $owner = $dataService->getKeyValue(['id'=>$order->owner_id],$owner_id_map);
             $basSkU = $dataService->getKeyValue(['customerid'=>$owner->code,'sku'=>$item->commodity->sku],$BasSKUs_code_sku_map);
             $gross_weight = round($basSkU->grossweight * $item->amount, 2);
@@ -252,7 +252,8 @@ class OrderTrackingService
                 'pick_up_at' => $order_header->lastshipmenttime, // 提货时间,
                 'web_order_number' => $web_order_number,
                 'gross_weight'=> $gross_weight,
-                'bulk'=> $bulk
+                'bulk'=> $bulk,
+                'planning_sent_at' => $param['planning_sent_at'] ?? ''
             ];
         }
 
@@ -299,7 +300,7 @@ class OrderTrackingService
         $BasSKUs_code_sku_map = $dataService->dataHeader(['customerid','sku'],$BasSKUs);
 
         $update_params = [];
-        $update_params[0] =['id','client','pick_up_at','order_remark','gross_weight','bulk'];
+        $update_params[0] =['id','client','pick_up_at','order_remark','gross_weight','bulk','planning_sent_at'];
         foreach ($orderHeaders as $orderHeader) {
             if($orderHeader->sostatus == '90'){continue;}
             $order_package_commodity_list = $order_package_commodity_order_code_map[$orderHeader->orderno] ?? false;
@@ -375,8 +376,8 @@ class OrderTrackingService
      * @param Order $order
      * @return array
      */
-    public function getParamsByOrderHeaderAndOrder($orderHeader,$order){
-
+    public function getParamsByOrderHeaderAndOrder($orderHeader,$order)
+    {
         $client = null;
         $order_remark = null;
         if ($orderHeader['notes'] ?? false) {
@@ -398,7 +399,7 @@ class OrderTrackingService
         if(isset($pick_up_at)){
              $logisticTiming = app(LogisticTimingService::class)->findByParams($orderHeader['c_city']??'',$orderHeader['c_province']??'',$order->logistic_id);
              if($logisticTiming){
-                 $planning_sent_at = Carbon::create($planning_sent_at)->addDays($logisticTiming->days_at_working);
+                 $planning_sent_at = Carbon::parse((string)$planning_sent_at)->addDays($logisticTiming->days_at_working);
              }
         }
         return [
@@ -408,7 +409,7 @@ class OrderTrackingService
             'order_remark' => $order_remark,
             'pick_up_at' => $orderHeader->lastshipmenttime, // 提货时间
             'web_order_number' =>$web_order_number,
-            'planning_sent_at' => $planning_sent_at
+            'planning_sent_at' => (string)$planning_sent_at
         ];
     }
 
@@ -450,4 +451,17 @@ class OrderTrackingService
         }
     }
 
+    /**
+     * @param OracleBasSKU $basSkU
+     * @param OrderPackageCommodities $orderPackageCommodity
+     * @return array
+     */
+    public function getGrossWeightAndBulk($basSkU,$orderPackageCommodity)
+    {
+        return [
+            'gross_weight' =>round($basSkU->grossweight * $orderPackageCommodity->amount, 2),
+            'bulk' =>round($basSkU->cube * $orderPackageCommodity->amount, 2),
+        ];
+    }
+
 }

+ 16 - 15
app/Services/RejectedBillService.php

@@ -30,26 +30,27 @@ Class RejectedBillService
     public function syncOrderIssue($rejectedBill)
     {
         $orderIssue = $rejectedBill->orderIssue()->first();
-        if(!isset($orderIssue)){
-            if(isset($rejectedBill->order_number) && trim($rejectedBill->order_number) != ''){
-                $orderIssue = OrderIssue::query()->with('order')->whereHas('order',function($query)use($rejectedBill){
-                    $query->where('client_code',$rejectedBill->order_number);
-                })->first();
-            }
-            if(isset($rejectedBill->logistic_number_return) && !isset($orderIssue)){
-                $orderHeader = OracleDOCOrderHeader::query()->where('soreference1',function($query)use($rejectedBill){
-                    $query->select('asnreference2')->from('DOC_ASN_HEADER')->where('asnreference3',$rejectedBill->logistic_number_return)->first();
-                })->first();
+        if($rejectedBill['logistic_number'] === '原单退回'){   // 原单退回
+            $orderIssue = OrderIssue::query()->with('order')->whereHas('order',function($query)use($rejectedBill){
+                $query->where('client_code',$rejectedBill['order_number']);
+            })->first();
+        }
+        if(!isset($orderIssue)){ // 有对应的问题发货订单
+            $orderHeader = OracleDOCOrderHeader::query()->where('soreference1',function($query)use($rejectedBill){
+                $query->select('asnreference2')->from('DOC_ASN_HEADER')->where('asnreference3',$rejectedBill->logistic_number_return)->first();
+            })->first();
 //                $orderHeader = OracleDOCOrderHeader::query()->where('soreference1',function($query)use($rejectedBill){
 //                    $query->select('asnreference2')->from('DOC_ASN_HEADER')->where('asnreference3',$rejectedBill->logistic_number_return)->first();
 //                })->first();
-                if(!isset($orderHeader))return;
-                $orderIssue = OrderIssue::query()->with('order')->whereHas('order',function($query)use($orderHeader){
-                    $query->where('code',$orderHeader->orderno);
-                })->first();
-            }
+            if(!isset($orderHeader))return;
+            $orderIssue = OrderIssue::query()->with('order')->whereHas('order',function($query)use($orderHeader){
+                $query->where('code',$orderHeader->orderno);
+            })->first();
         }
         if(isset($orderIssue)){
+            // 更新问题件的退回单号
+            if($orderIssue['logistic_number_return']!=$rejectedBill['logistic_number_return'])
+                $orderIssue->update(['logistic_number_return'=>$rejectedBill['logistic_number_return']]);
             //确认问题件有的时候需要更新状态和提示
             $orderIssue->同步退单状态();
             $orderIssue->update(['is_new_rejecting' => '有']);

+ 10 - 53
app/Services/ShopService.php

@@ -25,71 +25,28 @@ class ShopService
     {
         return app(BatchUpdateService::class)->batchUpdate('shops',$params);
     }
-    public function 根据追踪的WMS订单返回商铺($WMSOrderHeaders, $owners = null)
-    {
-        if ($owners == null) {
-            /** @var $ownerService OwnerService */
-            $ownerService = app('ownerService');
-            $owners = $ownerService->获取订单跟踪的货主();
-        }
-        if(count($WMSOrderHeaders) == 0){
-            return [];
-        }
-        $issuePartyNames = [];
-        foreach ($WMSOrderHeaders as $WMSOrderHeader) {
-            $issuePartyNames[$WMSOrderHeader['issuepartyname']] = $WMSOrderHeader;
-        }
-        $issuePartyNames = array_unique($issuePartyNames);
-        $issuePartyNames = array_diff($issuePartyNames,['','*',null]);
-
-        $shops = Shop::query()->whereIn('name',array_keys($issuePartyNames))->get();
-        $insert_params = [];
-
-        if (count($shops) < count($issuePartyNames)) {
-            $shopNames = data_get($shops, '*.name');
-            $shopDiff = array_diff($issuePartyNames, $shopNames);
-            foreach ($shopDiff as $key=>$item) {
-                if($key === '' ){
-                    continue;
-                }
-                $owner = $owners->where('code', $item['customerid'])->first();
-                if($owner === null || $item['issuepartyname'] ?? false)
-                    continue;
-                array_push($insert_params,['owner_id' => $owner['id'], 'name' => $item['issuepartyname']]);
-            }
-        }
-        try {
-            if(count($insert_params) > 0){
-                Shop::query()->insert($insert_params);
-                LogService::log(__METHOD__, __FUNCTION__, '批量创建 shop' .json_encode($insert_params));
-            }
-        } catch (\Exception $e) {
-            LogService::log(__METHOD__, __FUNCTION__, '创建创建 shop error' .json_encode($insert_params) . $e->getMessage(),$e->getTraceAsString());
-        }
-        return Shop::query()->whereIn('name',array_keys($issuePartyNames))->get();
-    }
 
-    public function getByWmsOrders($orderHeaders){
-        //issuepartyname
+    public function getByWmsOrders($orderHeaders)
+    {    //issuepartyname
         $maps = [];
         foreach ($orderHeaders as $orderHeader) {
             $value = ['owner_code'=>$orderHeader->customerid,'issuepartyname'=>$orderHeader->issuepartyname];
-            if(!in_array($value,$maps)){
+            if(!in_array($value,$maps))
                 $maps[] = $value;
-            }
         }
-        $issuepartynames = array_diff(array_unique(data_get($maps,'*.issuepartyname')),['','*',null])  ;
-        $shops = Shop::query()
-            ->whereIn('name',$issuepartynames)
-            ->get();
+        $issuepartynames = array_diff(array_unique(data_get($maps,'*.issuepartyname')),['','*',null]);
+        $owner_codes = array_diff(array_unique(data_get($maps,'*.owner_code')),['','*',null]);
+        $shops = Shop::query()->with('owner')
+            ->whereHas('owner',function($query)use($owner_codes){
+                $query->whereIn('code',$owner_codes);
+            })->whereIn('name',$issuepartynames)->get();
         if($shops->count() < count($issuepartynames)){
             $shops_code = data_get($shops,'*.name');
             $issuepartynames = array_diff($issuepartynames,$shops_code);
             $params = [];
             foreach ($maps as $item){
-               if(in_array($item['issuepartyname'],$issuepartynames)){
+               if(in_array($item['issuepartyname'],$issuepartynames))
                    $params[] = $item;
-               }
             }
             $shops_list = $this->createByNameAndOwnerCode($params);
             $shops->concat($shops_list);

+ 6 - 0
app/Shop.php

@@ -11,4 +11,10 @@ class Shop extends Model
     use ModelTimeFormat;
 
     protected $fillable = ['name','owner_id'];
+
+    public function owner()
+    {
+        return $this->belongsTo(Owner::class);
+    }
+
 }

+ 31 - 0
database/migrations/2020_10_27_113358_add_order_issue_authority.php

@@ -0,0 +1,31 @@
+<?php
+
+use App\Authority;
+use Illuminate\Database\Migrations\Migration;
+
+class AddOrderIssueAuthority extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Authority::query()->firstOrCreate(['name'=>'订单管理-问题件-处理结果添加','alias_name'=>'订单管理-问题件-处理结果添加']);
+        Authority::query()->firstOrCreate(['name'=>'订单管理-问题件-处理结果删除','alias_name'=>'订单管理-问题件-处理结果删除']);
+        Authority::query()->firstOrCreate(['name'=>'订单管理-问题件-客户自定义订单号','alias_name'=>'订单管理-问题件-客户自定义订单号','permission'=>'禁止']);
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Authority::query()->where('name','订单管理-问题件-处理结果添加')->delete();
+        Authority::query()->where('name','订单管理-问题件-处理结果删除')->delete();
+        Authority::query()->where('name','订单管理-问题件-客户自定义订单号')->delete();
+    }
+}

+ 28 - 5
resources/views/maintenance/role/create.blade.php

@@ -29,8 +29,7 @@
                     <div class="form-group row">
                         <label for="authority" class="col-2 col-form-label text-md-right">允许权限</label>
                         <div class="col-8">
-                        <input type="text"  class="form-control tooltipTarget" placeholder="定位权限"
-                               @input="seekAuthority($event)" title="输入关键词快速定位下拉列表" ></div>
+                        <input type="text"  class="form-control tooltipTarget" placeholder="定位权限" @input="filterAuthority($event)" title="输入关键词快速定位下拉列表" ></div>
                     </div>
                     <div class="form-group row">
                         <label class="col-2"></label>
@@ -38,7 +37,7 @@
                             <input name="authority" hidden   v-model="authorities" >
                             <div class="input-group" style="max-height: 245px; overflow-y: scroll;border-radius:5px;opacity:0.5;text-align: center;">
                                 <ul class="list-group tooltipTarget" style="width: 100%"  onselectstart="return false;">
-                                    <li  :data-original-title="authority.style ? '双击删除权限' :'双击添加权限'"    v-for="authority in authoritiesAll" v-if="authority.permission=='允许'" :id="authority.name" class="tooltipTarget list-group-item list-group-item-action pt-0 pb-0"
+                                    <li  :data-original-title="authority.style ? '双击删除权限' :'双击添加权限'"    v-for="authority in authoritiesAllFilter" v-if="authority.permission=='允许'" :id="authority.name" class="tooltipTarget list-group-item list-group-item-action pt-0 pb-0"
                                          @dblclick="selectedAuthority(authority)" :class="authority.style ? 'active' :''"><span style="cursor: default;" > @{{ authority.name }}  </span></li>
                                 </ul>
                             </div>
@@ -61,14 +60,14 @@
                         <label for="authority" class="col-2 col-form-label text-md-right">禁止权限</label>
                         <div class="col-8">
                             <input type="text"  class="form-control tooltipTarget" placeholder="定位权限"
-                                   @change="seekAuthority($event)" title="输入关键词快速定位下拉列表"></div>
+                                   @input="filterForbiddenPermissions($event)" title="输入关键词快速定位下拉列表"></div>
                     </div>
                     <div class="form-group row">
                         <label class="col-2"></label>
                         <div class="col-5">
                             <div class="input-group" style="max-height: 150px; overflow-y: scroll;border-radius:5px;opacity:0.5;text-align: center;">
                                 <ul class="list-group tooltipTarget" style="width: 100%"  >
-                                    <li  :data-original-title="authority.style ? '双击删除权限' :'双击添加权限'"    v-for="authority in authoritiesAll" v-if="authority.permission=='禁止'" :id="authority.name" class="tooltipTarget list-group-item list-group-item-action pt-0 pb-0"
+                                    <li  :data-original-title="authority.style ? '双击删除权限' :'双击添加权限'"    v-for="authority in authoritiesFilter" v-if="authority.permission=='禁止'" :id="authority.name" class="tooltipTarget list-group-item list-group-item-action pt-0 pb-0"
                                          @dblclick="selectedAuthority(authority)" :class="authority.style ? 'active' :''"><span style="cursor: default;" > @{{ authority.name }}  </span></li>
                                 </ul>
                             </div>
@@ -103,6 +102,8 @@
                     {id:'{{$authority->id}}',name:'{{$authority->alias_name}}',style:false,permission:'{{$authority->permission}}'},
                     @endforeach
                 ],
+                authoritiesAllFilter:[],
+                authoritiesFilter:[],
                 authorities:[{{old('authority')}}],
                 authoritiesList:[],
             },
@@ -123,6 +124,8 @@
                         });
                     }
                 }
+                this.authoritiesAllFilter=this.authoritiesAll
+                this.authoritiesFilter=this.authoritiesAll
             },
             methods:{
                 selectedAuthority:function (e) {
@@ -186,6 +189,26 @@
                         if(bool){ $(e.target).focus();}
                     },10)
                 },
+                filterAuthority(e){
+                    let _arr = [];
+                    let value = $(e.target).val();
+                    this.authoritiesAll.forEach(item=>{
+                        if(item.name.includes(value)){
+                            _arr.push(item)
+                        }
+                    })
+                    this.authoritiesAllFilter = _arr
+                },
+                filterForbiddenPermissions(e){
+                    let _arr = [];
+                    let value = $(e.target).val();
+                    this.authoritiesAll.forEach(item=>{
+                        if(item.name.includes(value)){
+                            _arr.push(item)
+                        }
+                    })
+                    this.authoritiesFilter = _arr
+                }
             },
         });
 

+ 17 - 20
resources/views/order/index/delivering.blade.php

@@ -749,7 +749,6 @@
                 },
                 createRejectedBill() {
                     let url = '{{url('order/createRejectedBill')}}';
-
                     axios.post(url,{data:this.checkData})
                         .then(res=>{
                             if (res.data.success){
@@ -809,31 +808,18 @@
                 setLogisticInfo(){
                     let content = ''
                     let _this = this
-                    this.tagOrders.forEach(function(order){
-                        let picktotraceids = _this.picktotraceidMap[order.orderno];
-                        if($.type(picktotraceids) ==='array'){
-                            picktotraceids.forEach(function(picktotraceid,index,array){
-                                if(array.length ===index+1)content+=picktotraceid;
-                                else content+=picktotraceid+','
-                            });
-                        }else{content+=order.soreference5}
-                        content+=' '+order.c_contact+order.c_tel2+order.c_province+order.c_city+' '+order.c_district+order.c_address1+'/'+_this.result_explain+"\n"
+                    this.tagOrders.forEach(order=>{
+                        content+=_this.getOrderLogisticNumbers(order)
+                        content+=' '+order.c_contact+order.c_tel2+order.c_province+order.c_city+' '+order.c_district+order.c_address1+'\n'+_this.result_explain+"\n"
                     })
                     this.tagOrder.logisticInfo = content
                 },
                 setMerchantInfo(){
                     let content = ''
                     let _this = this
-                    this.tagOrders.forEach(function(order){
-                        content+=order.customer_descr_c+' '+order.soreference1+' '
-                        let picktotraceids = _this.picktotraceidMap[order.orderno];
-                        if($.type(picktotraceids) ==='array'){
-                            picktotraceids.forEach(function(picktotraceid,index,array){
-                                if(array.length ===index+1)content+=picktotraceid;
-                                else content+=picktotraceid+','
-                            });
-                        }else {content+=order.soreference5}
-                        content += '/'+_this.result_explain+ "\n";
+                    this.tagOrders.forEach(order=>{
+                        content+=order.issuepartyname+' '+order.customer_descr_c+' '+order.soreference1+' '+_this.getOrderLogisticNumbers(order)
+                        content += '\n'+_this.result_explain+ "\n"
                     })
                     this.tagOrder.merchantInfo = content
                 },
@@ -855,6 +841,17 @@
                         tempTip.setDuration(2000)
                         tempTip.showSuccess('复制失败:'+e)
                     }
+                },
+                getOrderLogisticNumbers(order){
+                    let char = '';
+                    let picktotraceids = this.picktotraceidMap[order.orderno];
+                    if($.type(picktotraceids) ==='array'){
+                        picktotraceids.forEach(function(picktotraceid,index,array){
+                            if(array.length ===index+1)char+=picktotraceid;
+                            else char+=picktotraceid+','
+                        });
+                    }else {char+=order.soreference5}
+                    return char;
                 }
             },
         });

+ 24 - 25
resources/views/order/issue/index.blade.php

@@ -108,7 +108,7 @@
                         <th class="three-layer   align-middle" rowspan="2" v-if="!isShowRejectedBill" style="min-width:50px">展开</th>
                         <th class="three-layer align-middle" rowspan="2" v-if="isShowRejectedBill" style="min-width:220px">退回单号</th>
                         <th class="three-layer   align-middle" colspan="5" v-if="isShowRejectedBill" style="min-width: 450px">返回商品明细</th>
-                        <th class="three-layer bg-whit  align-middle" rowspan="2" style="min-width: 115px">情况说明</th>
+                        <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>
                         @cannot('订单管理-问题件-客户不可见')
@@ -118,7 +118,9 @@
                             <th class="three-layer  align-middle" rowspan="2" v-if="isShowSecondOrderInfo" style=" min-width: 200px;">二次运单号</th>
                             <th class="three-layer" colspan="3" style="min-width: 300px" v-if="isShowSecondOrderInfo" style=" min-width: 350px;">二次商品明细</th>
                         @endcannot
+                        @cannot('订单管理-问题件-客户自定义订单号')
                         <th class="three-layer  align-middle" rowspan="2" style="min-width: 120px">自定义订单号</th>
+                        @endcannot
                         @cannot('订单管理-问题件-客户不可见')
                             <th class="three-layer  align-middle" rowspan="2" style="min-width: 120px">承运商赔偿金额</th>
                             <th class="three-layer  align-middle" rowspan="2" style="min-width: 120px">承运商快递减免</th>
@@ -245,7 +247,6 @@
                         <td class="td-yellow p-0 m-0 child-layer-2" v-if="!isShowOrderInfo && index===0" style="width:50px" :rowspan="orderIssues.length">
                             <span class="btn btn-outline-secondary "  @click="showOrderInfo" :style="orderIssues.length>4 ?'{height: 200px;line-height: 100px':''" >展开运单列</span>
                         </td>
-
                         <td class="td-yellow child-layer-2-hide" v-if="isShowOrderInfo">@{{ orderIssue.order.consignee_name }}</td>
                         <td class="td-yellow child-layer-2-hide" v-if="isShowOrderInfo">@{{ orderIssue.order.consignee_phone }}</td>
                         <td class="td-yellow child-layer-2-hide" v-if="isShowOrderInfo">@{{ orderIssue.order.province }}</td>
@@ -284,7 +285,7 @@
                         </td>
 
                         <td class="p-0 m-0 child-layer-3" v-if="!isShowRejectedBill && index === 0 " style="width:50px;" :rowspan="orderIssues.length" >
-                            <span class="btn btn-outline-secondary"  @click="showRejectedBill"  :style="orderIssues.length>4 ?'{height: 200px;line-height: 100px':''" >展开退单列</span>
+                            <span class="btn  btn-outline-secondary "  @click="showRejectedBill"  :style="orderIssues.length>4 ?'{height: 200px;line-height: 100px':''" >展开退单列</span>
                         </td>
 
                         <td class="p-0 child-layer-3-hide" :id="orderIssue.id+'rejectedBill'" valign="middle" align="center" colspan="5" v-if="isShowRejectedBill">
@@ -312,9 +313,13 @@
 
                         <td class="child-layer-3">
                             @can('订单管理-问题件-编辑')
-                            <textarea class="form-control form-control-sm"  @change="updateOrderIssue(orderIssue,'result_explain',$event)" data-toggle="tooltip" data-placement="bottom" :title="orderIssue.result_explain">@{{ orderIssue.result_explain }}</textarea>
+                                <textarea class="form-control form-control-sm"  @change="updateOrderIssue(orderIssue,'result_explain',$event)"
+                                          data-toggle="tooltip" data-placement="bottom" :title="orderIssue.result_explain"
+                                          :cols="orderIssue.result_explain==null?'': (orderIssue.result_explain.length>10?10:orderIssue.result_explain.length)"
+                                          :rows="orderIssue.result_explain==null?'': (orderIssue.result_explain.length>10?(Math.ceil(orderIssue.result_explain.length)/10):1)"
+                                >@{{ orderIssue.result_explain }}</textarea>
                             @else
-                            @{{ orderIssue.result_explain}}
+                                @{{ orderIssue.result_explain}}
                             @endcan
                         </td>
                         <td class="child-layer-3">
@@ -329,23 +334,19 @@
                         </td>
 
                         <td class=" m-0 p-0 log-td child-layer-3" valign="middle" align="center" v-on:mouseover="showAddBtn($event)" v-on:mouseleave="hideAddBtn($event)" colspan="4">
+                            @can('订单管理-问题件-处理结果添加')
                             <div class="addLogDiv row m-0 p-0 form-group" :id="'AddLog_'+orderIssue.id" style="display: none;">
                                 <input type="hidden" name="id" :value="orderIssue.id">
                                 <div style="width: 45px"></div>
                                 <div class="form-inline m-2">
                                     <input type="text" name="content" class="form-control" style="width: 300px" required >
-                                    <button type="button" class="btn btn-primary ml-2"
-                                            @click="addOrderIssueLog('AddLog_'+orderIssue.id,orderIssue)">添加
-                                    </button>
+                                    <button type="button" class="btn btn-primary ml-2" @click="addOrderIssueLog('AddLog_'+orderIssue.id,orderIssue)">添加</button>
                                 </div>
                             </div>
-
                             <div style="position: absolute;display: none;margin-top: -35px" class="add-btn" :id="'AddBtn'+orderIssue.id">
-                                <button type="button" class="btn  btn-primary "
-                                        @click="showAddDiv('AddLog_'+orderIssue.id)">新
-                                </button>
+                                <button type="button" class="btn  btn-primary " @click="showAddDiv('AddLog_'+orderIssue.id)">新</button>
                             </div>
-
+                            @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" :data-value="orderIssue.logShow = true">
                                     <tr style="position:static" align="center" v-for="(log,index) in orderIssue.logs"
@@ -355,9 +356,11 @@
                                         <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>
+                                        @endcan
                                     </tr>
                                 </table>
                                 <button type="button" class="btn btn-sm btn-outline-primary align-middle mt-1" v-if="orderIssue.logs.length > 2"
@@ -390,16 +393,12 @@
                             </td>
                             <td class="log-td p-0 child-layer-3-hide" v-if="isShowSecondOrderInfo" v-on:mouseover="edit.orderIssue.id=orderIssue.id" v-on:mouseleave="edit.orderIssue.id = null">
                                 <div class="row position-absolute p-0 m-0" v-if="edit.orderIssue.id === orderIssue.id" :class="edit.orderIssue.id === orderIssue.id ? '':'d-none'">
-                                    <button type="button" class="btn btn-primary " style="margin-top: -35px" @click="edit.orderIssue.showId === orderIssue.id ? edit.orderIssue.showId='':edit.orderIssue.showId=orderIssue.id">
-                                        新
-                                    </button>
+                                    <button type="button" class="btn btn-primary " style="margin-top: -35px" @click="edit.orderIssue.showId === orderIssue.id ? edit.orderIssue.showId='':edit.orderIssue.showId=orderIssue.id">新</button>
                                 </div>
                                 <div class="row p-0 m-0" v-if="edit.orderIssue.showId === orderIssue.id ">
                                     <div class="form-inline">
                                         <input class="form-control" :id="'secondLogisticNumber-'+orderIssue.id">
-                                        <button type="button" class="btn btn-sm btn-primary" @click="addSecondLogisticNumber(orderIssue)">
-                                            添加
-                                        </button>
+                                        <button type="button" class="btn btn-sm btn-primary" @click="addSecondLogisticNumber(orderIssue)">添加</button>
                                     </div>
                                 </div>
 
@@ -427,9 +426,7 @@
                                 <template v-if="orderIssue.second_order!==null" class=" p-0">
                                     <div class="m-0 p-0" :class="orderIssue.secondeOrderCount > 1 ? 'collapse':''"
                                          :id="'secondOrder'+orderIssue.id">
-                                        <table class="table table-sm  m-0 "
-                                               :data-count="orderIssue.secondeOrderCount = 0"
-                                               :data-value="orderIssue.secondeOrderItems = 0">
+                                        <table class="table table-sm  m-0 " :data-count="orderIssue.secondeOrderCount = 0" :data-value="orderIssue.secondeOrderItems = 0">
                                             <template v-for="packages in orderIssue.second_order.packages">
                                                 <tr v-for="item in packages.commodities" :data-value="orderIssue.secondeOrderCount += 1" v-if="item.commodity" >
                                                     <td >@{{ item.commodity.sku }}</td>
@@ -452,9 +449,11 @@
                                 </template>
                             </td>
                         @endcannot
-                        <td class="child-layer-3">
-                            <input type="text" class="form-control form-control-sm" :value="orderIssue.custom_code" @change="updateOrderIssue(orderIssue,'custom_code',$event)">
-                        </td>
+                        @cannot('订单管理-问题件-客户自定义订单号')
+                            <td>
+                                <input class="form-control form-control-sm" :value="orderIssue.custom_code" @change="updateOrderIssue(orderIssue,'custom_code',$event)">
+                            </td>
+                        @endcan
                         @cannot('订单管理-问题件-客户不可见')
                             <td class="child-layer-3">
                                 @can('订单管理-问题件-编辑')