Bladeren bron

复核临时提交

ANG YU 4 jaren geleden
bovenliggende
commit
ab929e8d4c

+ 167 - 2
app/Http/Controllers/StoreOutReviewController.php

@@ -3,11 +3,176 @@
 namespace App\Http\Controllers;
 
 use Illuminate\Http\Request;
+use Illuminate\Support\Facades\DB;
 
 class StoreOutReviewController extends Controller
 {
-    public function index()
+    public function index(Request $request)
     {
-        return view('storeOut.storeOutReview.index');
+        return view("storeOut.storeOutReview.index");
+    }
+
+
+    public function apiGetOrderDetail(Request $request)
+    {
+        $orderno = $request->input('orderno');
+        $orderDetail = DB::connection("oracle")->select(
+            "
+            SELECT
+        rtrim( 'ACT_ALLOCATION_DETAILS.SKU=' || cast( act_allocation_details.SKU AS VARCHAR2 ( 100 ) ) ) || ',' || rtrim( 'ACT_ALLOCATION_DETAILS.ALLOCATIONDETAILSID=' || cast( act_allocation_details.ALLOCATIONDETAILSID AS VARCHAR2 ( 100 ) ) ) PKEY,
+        act_allocation_details.OrderNo,
+        act_allocation_details.Orderlineno,
+        act_allocation_details.skulineno,
+        act_allocation_details.customerId,
+        act_allocation_details.SKU,
+        bas_sku.DESCR_C SKUDESCRC,
+        bas_sku.DESCR_E SKUDESCRE,
+        doc_order_header.ROUTE,
+        DOC_Order_Details.ERPCancelFlag,
+        act_allocation_details.PACKID,
+        b1.descr UOM_EACH_NAME,
+        act_allocation_details.Palletize,
+        doc_order_header.notes AS ORDERNOTES,
+        doc_order_header.CarrierID,
+        doc_order_header.OrderType,
+        rdc.CartonGroup AS CARTONGROUP1,
+        act_allocation_details.PICKTOTRACEID,
+        act_allocation_details.LOCATION,
+        act_allocation_details.AllocationDetailsID,
+        bas_sku.SerialNoCatch,
+        bas_sku.OutboundSerialNoQtyControl,
+        bas_sku.SecondSerialNoCatch,
+        bas_sku.CHK_SCN_UOM,
+        bas_sku.ScanWhenCasePicking,
+        bas_sku.SCANWHENCHECK,
+        bas_sku.SKU_Group1,
+        bas_sku.GROSSWEIGHT,
+        bas_sku.ScanWhenReceive,
+        bas_sku.ScanWhenPutaway,
+        bcf.SerialNo_RuleID,
+        bcf.SubSerialNo_RuleID,
+        bcf.SN_BCH,
+        bcf.SN_INC,
+        doc_order_header.SerialNoCatch AS ORDERSERIALNOCATCH,
+        doc_order_header.InvoicePrintFlag,
+        doc_order_header.OrderHandleInstruction,
+        doc_order_header.CartonGroup AS CARTONGROUPORDERHEADER,
+        doc_order_header.CartonID AS CARTONIDORDERHEADER,
+        act_allocation_details.LOTNUM,
+        act_allocation_details.qty_each AS QTY,
+        act_allocation_details.LOTNUM,
+        act_allocation_details.qty_each AS UNCHECKQTY,
+        act_allocation_details.notes,
+        bas_sku.CARTONGROUP,
+        act_allocation_details.status,
+        c5.CODENAME_C AS ROUTE_NAME,
+        c.CODENAME_C AS STATUS_NAME,
+        bas_sku.ALTERNATE_SKU1,
+        bas_sku.ALTERNATE_SKU2,
+        bas_sku.ALTERNATE_SKU3,
+        bas_sku.ALTERNATE_SKU4,
+        bas_sku.ALTERNATE_SKU5,
+        act_allocation_details.PACKFLAG,
+        bas_sku.ImageAddress,
+        bas_sku.cube,
+        '' AS SKU_LABEL,
+        SUM( CASE WHEN act_allocation_details.PackFlag = 'Y' THEN act_allocation_details.Qty_Each ELSE 0 END ) over ( partition BY act_allocation_details.orderno ) AS PACKEDQTY,
+        SUM( CASE WHEN act_allocation_details.PackFlag = 'Y' THEN 0 ELSE act_allocation_details.Qty_Each END ) over ( partition BY act_allocation_details.orderno ) AS UNPACKQTY,
+        SUM( CASE WHEN act_allocation_details.PackFlag = 'Y' THEN 0 ELSE act_allocation_details.Cubic END ) over ( partition BY act_allocation_details.orderno ) AS TOTALCUBIC,
+        INV_LOT_ATT.QCREPORTFILENAME AS QCREPORTFILENAME,
+        INV_LOT_ATT.LotAtt01 AS LotAtt01,
+        INV_LOT_ATT.LotAtt02 AS LotAtt02,
+        INV_LOT_ATT.LotAtt03 AS LotAtt03,
+        INV_LOT_ATT.LotAtt04 AS LotAtt04,
+        INV_LOT_ATT.LotAtt05 AS LotAtt05,
+        INV_LOT_ATT.LotAtt06 AS LotAtt06,
+        INV_LOT_ATT.LotAtt07 AS LotAtt07,
+        INV_LOT_ATT.LotAtt08 AS LotAtt08,
+        INV_LOT_ATT.LotAtt09 AS LotAtt09,
+        INV_LOT_ATT.LotAtt10 AS LotAtt10,
+        INV_LOT_ATT.LotAtt11 AS LotAtt11,
+        INV_LOT_ATT.LotAtt12 AS LotAtt12,
+        doc_order_header.CONSIGNEEID,
+        doc_order_header.CONSIGNEENAME CONSIGNEEID_NAME,
+        BAS_Customer.IMAGEADDRESS AS CONSIGNEEIMAGEADDRESS,
+        act_allocation_details.uom,
+        doc_order_header.CustomerID,
+        BAS_Customer_OW.Descr_C AS CUSTOMERID_NAME,
+        doc_order_header.CONSIGNEENAME AS CONSIGNEENAME,
+        doc_order_header.C_Address1 AS C_ADDRESS1,
+        doc_order_header.C_Contact AS CONSIGNEECONTACT,
+        doc_order_header.C_Tel1 AS CONSIGNEETEL1,
+        doc_order_header.SOREFERENCE1,
+        doc_order_header.SOREFERENCE2,
+        doc_order_header.SOREFERENCE3,
+        doc_order_header.SOREFERENCE4,
+        doc_order_header.SOREFERENCE5,
+        BAS_Customer_OW.SKUANALYSISFIELDS,
+        bas_sku.LotID,
+        DOC_Order_Details.FreeGift,
+        doc_order_header.Warehouseid,
+        doc_order_header.waveNo,
+        act_allocation_details.pickedWho,
+        TO_CHAR( act_allocation_details.pickedtime, 'yyyy-MM-dd HH24:MI' ) AS PICKEDTIME,
+        BAS_Location.WorkingArea
+FROM
+    ACT_Allocation_Details act_allocation_details
+        LEFT JOIN BAS_SKU bas_sku ON bas_sku.SKU = act_allocation_details.SKU
+        AND bas_sku.CUSTOMERID = act_allocation_details.CUSTOMERID
+        LEFT JOIN INV_LOT_ATT INV_LOT_ATT ON INV_LOT_ATT.LOTNUM = act_allocation_details.LOTNUM
+        LEFT JOIN view_cod_so_sts c ON act_allocation_details.status = c.code
+        LEFT JOIN doc_order_header doc_order_header ON doc_order_header.OrderNo = act_allocation_details.OrderNo
+        LEFT JOIN DOC_Order_Details DOC_Order_Details ON act_allocation_details.OrderNo = DOC_Order_Details.OrderNo
+        AND act_allocation_details.OrderLineNo = DOC_Order_Details.OrderLineNo
+        LEFT JOIN BAS_Customer BAS_Customer ON doc_order_header.CONSIGNEEID = BAS_Customer.CustomerID
+        AND BAS_Customer.Customer_Type = 'CO'
+        LEFT JOIN BAS_Customer BAS_Customer_OW ON doc_order_header.CustomerID = BAS_Customer_OW.CustomerID
+        AND BAS_Customer_OW.Customer_Type = 'OW'
+        LEFT JOIN VIEW_COD_ROU_COD c5 ON doc_order_header.ROUTE = c5.code
+        LEFT JOIN view_uom b1 ON b1.uom = 'EA'
+        AND act_allocation_details.packid = b1.packid
+        LEFT JOIN BAS_CustomerFreight bcf ON bas_sku.customerid = bcf.customerid
+        AND bas_sku.FreightClass = bcf.FreightCode
+        LEFT JOIN RUL_Delivery_Config rdc ON doc_order_header.Warehouseid = rdc.WarehouseID
+        AND doc_order_header.CustomerID = rdc.CustomerID
+        AND doc_order_header.CarrierID = rdc.CarrierID
+        LEFT JOIN BAS_Location BAS_Location ON act_allocation_details.Location = BAS_Location.locationId
+WHERE
+        1 = 1
+  AND ( act_allocation_details.Status >= '40' AND act_allocation_details.Status <= '60' )   --分配完成 | 部分拣货 |拣货完成
+  AND act_allocation_details.ORDERNO = ?
+  AND act_allocation_details.PackFlag <> 'Y'
+ORDER BY
+    act_allocation_details.PACKFLAG,
+    act_allocation_details.status DESC,
+    act_allocation_details.sku,
+    act_allocation_details.ALLOCATIONDETAILSID
+", [$orderno]);
+        return ['success' => true, 'data' => $orderDetail];
+    }
+
+    public function review(Request $request)
+    {
+        DB::transaction(function ($request) {
+            //普通复核的长宽高由WAS回写
+            //               ('202108160001','SO21081000004','',1.00000,3,0,0,0,1.00000,sysdate,'liutengfei',sysdate,'liutengfei')
+            $TRACEID = $request->input('traceid');
+            $ORDERNO = $request->input('orderno');
+            $CARTONGROUP = '';
+            $GROSSWEIGHT = $request->input('grossweight');//总重
+            $QTY = $request->input('qty');//数量
+            $LENGTH = 0;
+            $WIDTH = 0;
+            $HEIGHT = 0;
+            $STANDARDWEIGHT = $request->input('standardweight');
+            $ADDTIME = now()->toDateTimeString();
+            $ADDWHO = auth()->user()->name;
+            $EDITTIME = now()->toDateTimeString();
+            $EDITWHO = auth()->user()->name;
+            DB::insert("
+        INSERT INTO DOC_Order_Packing_Summary
+            (TRACEID,ORDERNO,CARTONGROUP,GROSSWEIGHT,QTY,LENGTH,WIDTH,HEIGHT,STANDARDWEIGHT,ADDTIME,ADDWHO,EDITTIME,EDITWHO)
+        VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?)", [$TRACEID, $ORDERNO, $CARTONGROUP, $GROSSWEIGHT, $QTY, $LENGTH, $WIDTH, $HEIGHT, $STANDARDWEIGHT, $ADDTIME, $ADDWHO, $EDITTIME, $EDITWHO,]);
+        });
     }
 }

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

@@ -44,6 +44,7 @@ use App\Services\OwnerLogisticFeeReportService;
 use App\Services\OwnerPriceOperationService;
 use App\Services\OwnerStoreFeeReportService;
 use App\Services\OwnerStoreOutFeeReportService;
+use App\Services\ReviewService;
 use App\Services\StationService;
 use App\Services\StorageService;
 use App\Station;

+ 18 - 0
app/OracleDOCOrderPackings.php

@@ -0,0 +1,18 @@
+<?php
+
+namespace App;
+
+use App\Traits\ModelTimeFormat;
+use Illuminate\Database\Eloquent\Model;
+
+use App\Traits\ModelLogChanging;
+
+class OracleDOCOrderPackings extends Model
+{
+    use ModelLogChanging;
+    use ModelTimeFormat;
+
+    protected $connection="oracle";
+    protected $table="DOC_Order_Packing";
+    public $timestamps=false;
+}

+ 2 - 0
app/Providers/AppServiceProvider.php

@@ -85,6 +85,7 @@ use App\Services\ProvinceService;
 use App\Services\RealtimePendingOrdersService;
 use App\Services\RejectedBillItemService;
 use App\Services\RejectedBillService;
+use App\Services\ReviewService;
 use App\Services\ShopService;
 use App\Services\RejectedService;
 use App\Services\StationRuleBatchService;
@@ -209,6 +210,7 @@ class AppServiceProvider extends ServiceProvider
     }
 
     private function loadingService(){
+        app()->singleton('ReviewService',ReviewService::class);
         app()->singleton('AllInventoryService',AllInventoryService::class);
         app()->singleton('AuthorityService',AuthorityService::class);
         app()->singleton('BatchService',BatchService::class);

+ 237 - 0
app/Services/ReviewService.php

@@ -0,0 +1,237 @@
+<?php
+
+namespace App\Services;
+
+use App\OracleActAllocationDetails;
+use App\OracleDOCOrderHeader;
+use App\OracleDOCOrderPackings;
+use App\Traits\ServiceAppAop;
+use Doctrine\DBAL\Driver\PDOConnection;
+use Illuminate\Support\Collection;
+use Illuminate\Support\Facades\DB;
+use PDO;
+
+class ReviewService
+{
+    use ServiceAppAop;
+
+    //单品复核
+
+
+    /**
+     * @param $IN_Warehouse
+     * @param $IN_CustomerID
+     * @param $IN_WaveNo
+     * @param $IN_SKU
+     * @param $IN_CheckModule
+     * @param $IN_WorkStation
+     * @param $IN_Language
+     * @param $IN_UserID
+     * @param $OUT_AllocationDetailsID
+     * @param $OUT_TOID
+     * @param $OUT_OrderNo
+     * @param $OUT_Return_Code
+     */
+    public function single($IN_Warehouse, $IN_CustomerID, $IN_WaveNo, $IN_SKU, $IN_CheckModule, $IN_WorkStation, $IN_Language, $IN_UserID, $OUT_AllocationDetailsID, $OUT_TOID, $OUT_OrderNo, $OUT_Return_Code)
+    {
+
+        DB::beginTransaction();
+
+
+        try {
+            $r_CurrentTime = now()->toDateTimeString();
+            $r_SGL_ORD_PCK = $this->getsys_configuration($IN_Warehouse, '*', '*', 'SGL_ORD_PCK');//防止并发错误
+            $sql = <<<sql
+Select a.OrderNo,AllocationDetailsID,a.SKU,PickToTraceID
+                          ,c.CarrierID, requiredeliveryno, nvl(c.channel,' * ')
+                         ,c.Erpcancelflag
+                   From ACT_Allocation_Details a inner join
+                    DOC_Order_Details b on a.OrderNo=b.OrderNo and a.OrderLineNo=b.OrderLineNo inner join
+                     DOC_Order_Header c on b.OrderNo=c.OrderNo
+sql;
+            if ((!empty($IN_WaveNo)) && $IN_WaveNo !== '*') {
+                $sql .= " inner join DOC_Wave_Details d on d.OrderNo=c.OrderNo  and d.WaveNo=:WaveNo  and a.WaveNo=:WaveNo ";
+            }
+            $sql .= " Where a.CustomerID=:CustomerID and a.SKU=:SKU and c.SingleMatch='Y'
+                     and b.CommingleSKU='N' and a.PackFlag='N'
+                     and c.releasestatus <> 'H'
+                     and c.Warehouseid = :Warehouse
+                     AND c.Sostatus < '80' ";
+            if ($r_SGL_ORD_PCK === 'N' || $r_SGL_ORD_PCK === 'NO') {
+                $sql .= " and a.status <'80' ";
+            } else {
+                $sql .= " and a.status <'60' ";
+            }
+            $sql .= " and not exists(select 1 from SYS_Check_Exception where AllocationDetailsID = a.AllocationDetailsID and  taskprocess<>'99' )
+                     and rownum = 1 for update";
+            $result = DB::connection('oracle')->selectOne(DB::raw($sql), [
+                'WaveNo' => $IN_WaveNo,
+                'CustomerID' => $IN_CustomerID,
+                'Warehouse' => $IN_Warehouse,
+            ]);
+            $OUT_OrderNo = $result->OrderNo;
+            $OUT_AllocationDetailsID = $result->AllocationDetailsID;
+            $r_SKU = $result->SKU;
+            $r_PickToTraceID = $result->PickToTraceID;
+            $r_CarrierID = $result->CarrierID;
+            $r_requiredeliveryno = $result->requiredeliveryno;
+            $r_channel = $result->channel;
+            $r_Erpcancelflag = $result->Erpcancelflag;
+            //更新分配详情
+            OracleActAllocationDetails::query()
+                ->where('allocationdetailsid', $OUT_AllocationDetailsID)
+                ->update([
+                    'CheckModule' => $IN_CheckModule,
+                ]);
+            if ($r_Erpcancelflag === 'Y') {
+                $OUT_Return_Code = '000CANCEL';
+            }
+            //如果复核时没有使用新的ID,则取分配明细的ID
+            if (empty($OUT_TOID) || $OUT_TOID === '*') {
+                $r_DEL_DOC_SN = $this->lock($IN_Warehouse, $IN_CustomerID, '*', 'DEL_DOC_SN#');
+                if ($r_DEL_DOC_SN === 'C' && $r_requiredeliveryno === 'Y') {
+                    $OUT_Return_Code = '*_*';
+                    $r_ParaTemp = 'DELIVERYNO' . $OUT_OrderNo;
+                    // 获取数据表的ID(PO, ASN, SO...)
+                    list($IN_Warehouse, $IN_Language, $r_ParaTemp, $OUT_TOID, $OUT_Return_Code) = $this->SPCOM_GetIDSequence($IN_Warehouse, $IN_Language, $r_ParaTemp, $OUT_TOID, $OUT_Return_Code);
+                    if (substr($OUT_Return_Code, 0, 3) !== '000') {
+                        return;
+                    }
+                } else {
+                    $OUT_TOID = $r_PickToTraceID;
+                }
+            }
+            //取消装箱确认
+            OracleDOCOrderPackings::query()
+                ->where('TraceID', $OUT_TOID)
+                ->delete();
+
+            OracleDOCOrderPackings::query()->create([
+                'TraceID' => $OUT_TOID,
+                'SKU' => $IN_SKU,
+                'OrderNo' => $OUT_OrderNo,
+                'Qty' => 1,
+                'AddTime' => $r_CurrentTime,
+                'AddWho' => $IN_UserID,
+                'EditTime' => $r_CurrentTime,
+                'EditWho' => $IN_UserID,
+                'AllocationDetailsID' => $OUT_AllocationDetailsID,
+                'FROMTRACEID' => $OUT_TOID,
+            ]);
+            DB::commit();
+            $OUT_Return_Code = '*_*SINGLE';
+
+
+            list ($IN_Warehouse, $IN_CHK_TYP, $IN_TraceID, $IN_CheckModule, $IN_WorkStation, $IN_Language, $IN_UserID, $OUT_Return_Code) =
+                $this->SPSO_Cartonization_Process($IN_Warehouse, 'ORDER', $OUT_TOID, $IN_CheckModule, $IN_WorkStation, $IN_Language, $IN_UserID, $OUT_Return_Code);
+            if (substr($OUT_Return_Code, 1, 3) !== '000') {
+                DB::rollBack();
+                return;
+            }
+            if (!OracleActAllocationDetails::query()->where('orderno', $OUT_OrderNo)->where('PackFlag', 'N')->where('rownum', 1)->exists()) {
+                OracleDOCOrderHeader::query()
+                    ->where('orderno', $OUT_OrderNo)
+                    ->update([
+                        'ReleaseStatus' => 'Y',
+                    ]);
+            }
+            DB::commit();
+            $OUT_Return_Code = '000';
+        } catch (\Exception $e) {
+            DB::rollBack();
+        }
+    }
+
+    public function getsys_configuration($IN_WarehouseID, $IN_CustomerID, $IN_OrderType, $IN_ConfigID, $IN_DefaultValue = 'N', $IN_ValueType = 'C')
+    {
+        $conn = $this->getOciConnection();
+        $sql_sp = "begin GETSYS_configuration(
+        :IN_WarehouseID,
+        :IN_CustomerID,
+        :IN_OrderType,
+        :IN_ConfigID,
+        :IN_DefaultValue,
+        :IN_ValueType
+        ); end;";
+        $stmt = oci_parse($conn, $sql_sp);
+        oci_bind_by_name($stmt, ':IN_WarehouseID', $IN_WarehouseID);
+        oci_bind_by_name($stmt, ':IN_CustomerID', $IN_CustomerID);
+        oci_bind_by_name($stmt, ':IN_OrderType', $IN_OrderType);
+        oci_bind_by_name($stmt, ':IN_ConfigID', $IN_ConfigID);
+        oci_bind_by_name($stmt, ':IN_DefaultValue', $IN_DefaultValue);
+        oci_bind_by_name($stmt, ':IN_ValueType', $IN_ValueType);
+        $r_SGL_ORD_PCK =  oci_execute($stmt);
+        oci_close($conn);
+        return $r_SGL_ORD_PCK;
+    }
+
+    public function SPSO_Cartonization_Process($IN_Warehouse, $IN_CHK_TYP, $IN_TraceID, $IN_CheckModule, $IN_WorkStation, $IN_Language, $IN_UserID, $OUT_Return_Code): array
+    {
+        $conn = $this->getOciConnection();
+        $sql_sp = "begin SPCOM_GetIDSequence(
+        :IN_Warehouse,
+        :IN_CHK_TYP,
+        :IN_TraceID,
+        :IN_CheckModule,
+        :IN_WorkStation
+        :IN_Language
+        :IN_UserID
+        :OUT_Return_Code
+        ); end;";
+        $stmt = oci_parse($conn, $sql_sp);
+        oci_bind_by_name($stmt, ':IN_Warehouse', $IN_Warehouse);
+        oci_bind_by_name($stmt, ':IN_CHK_TYP', $IN_CHK_TYP);
+        oci_bind_by_name($stmt, ':IN_TraceID', $IN_TraceID);
+        oci_bind_by_name($stmt, ':IN_CheckModule', $IN_CheckModule);
+        oci_bind_by_name($stmt, ':IN_WorkStation', $IN_WorkStation);
+        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', $OUT_Return_Code);
+        oci_execute($stmt);
+        oci_close($conn);
+        return array($IN_Warehouse, $IN_CHK_TYP, $IN_TraceID, $IN_CheckModule, $IN_WorkStation, $IN_Language, $IN_UserID, $OUT_Return_Code);
+    }
+
+
+    /**
+     * 获取数据表的ID(PO, ASN, SO...)
+     * @param $IN_Warehouse
+     * @param $IN_Language
+     * @param $r_ParaTemp
+     * @param $OUT_TOID
+     * @param $OUT_Return_Code
+     * @return array
+     */
+    public function SPCOM_GetIDSequence($IN_Warehouse, $IN_Language, $r_ParaTemp, $OUT_TOID, $OUT_Return_Code): array
+    {
+        $conn = $this->getOciConnection();
+        $sql_sp = "begin SPCOM_GetIDSequence(
+        :IN_Warehouse,
+        :IN_Language,
+        :r_ParaTemp,
+        :OUT_TOID,
+        :OUT_Return_Code
+        ); end;";
+        $stmt = oci_parse($conn, $sql_sp);
+        oci_bind_by_name($stmt, ':IN_Warehouse', $IN_Warehouse);
+        oci_bind_by_name($stmt, ':IN_Language', $IN_Language);
+        oci_bind_by_name($stmt, ':r_ParaTemp', $r_ParaTemp);
+        oci_bind_by_name($stmt, ':OUT_TOID', $OUT_TOID);
+        oci_bind_by_name($stmt, ':OUT_Return_Code', $OUT_Return_Code);
+        oci_execute($stmt);
+        oci_close($conn);
+        return array($IN_Warehouse, $IN_Language, $r_ParaTemp, $OUT_TOID, $OUT_Return_Code);
+    }
+
+    /**
+     * @return false|resource
+     */
+    private function getOciConnection()
+    {
+        $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');
+        return oci_connect($username, $password, $host . '/' . $service_name, 'utf8'); //连接oracle数据库
+    }
+}

+ 174 - 317
resources/views/storeOut/storeOutReview/index.blade.php

@@ -2,6 +2,20 @@
 @section('title','出库复核')
 @section('head')
     <style>
+        /*查询容器*/
+        .select-wrapper {
+            margin: 30px 20px;
+            width: 100%;
+            height: 50px;
+            font-size: 32px;
+            line-height: 50px;
+        }
+
+        .select-wrapper > div {
+            float: left;
+            margin-left: 30px;
+        }
+
         table {
             margin: 10px;
             width: 100%;
@@ -26,7 +40,7 @@
 
         /*}*/
 
-        table .body .action .more-action:focus +  .more-action-list  {
+        table .body .action .more-action:focus + .more-action-list {
             display: block !important;
             /*background-color: red;*/
         }
@@ -47,12 +61,11 @@
 
         .info-wrapper {
             min-width: 768px;
-            height: 730px;
             overflow: hidden;
         }
 
         .commodity-all-wrapper {
-            height: 200px;
+            max-height: 300px;
             margin-bottom: 10px;
             overflow: scroll;
         }
@@ -62,7 +75,7 @@
         }
 
         .reviewed-commodity-wrapper {
-            min-height: 380px;
+            max-height: 300px;
             margin-bottom: 10px;
         }
 
@@ -188,10 +201,33 @@
     @include('shared._error')
     <div id="list" class="d-none">
         <div class="container-fluid">
-            <div id="form_div"></div>
             <div class="info-wrapper">
+                <div class="select-wrapper">
+                    <div class="input-wrapper">
+                        <label for="orderno">订单号:</label>
+                        <input autofocus @keydown.enter="apiGetOrderDetail()" type="text" id="orderno"
+                               v-model="selectParameters.orderno">
+                    </div>
+                    <div class="input-wrapper">
+                        <label for="waveno">波次号:</label>
+                        <input @keydown.enter="apiGetOrderDetail()" type="text" id="waveno"
+                               v-model="selectParameters.waveno">
+                    </div>
+                    <div class="input-wrapper">
+                        <label for="expressno">快递单号:</label>
+                        <input @keydown.enter="apiGetOrderDetail()" type="text" id="expressno"
+                               v-model="selectParameters.expressno">
+                    </div>
+                    <div class="btn-wrapper">
+                        <button @click="apiGetOrderDetail()" type="button" class="btn btn-primary btn-lg"
+                                id="btn-search">查询
+                        </button>
+                        <button @click="clearSelectParameters()" type="button" class="btn btn-primary btn-lg">清除
+                        </button>
+                    </div>
+                </div>
                 <div class="commodity-all-wrapper">
-                    <table>
+                    <table class="table  table-bordered table-hover">
                         <tr class="header">
                             <td>行号</td>
                             <td>产品代码</td>
@@ -208,278 +244,23 @@
                             <td>产品条码</td>
                             <td>操作</td>
                         </tr>
-                        <tr>
-                            <td>1</td>
-                            <td>A44551122444</td>
-                            <td>买家秀</td>
-                            <td>分配完成</td>
-                            <td>N</td>
-                            <td>1</td>
-                            <td>0</td>
-                            <td>1</td>
-                            <td>ZP</td>
-                            <td></td>
-                            <td></td>
-                            <td></td>
-                            <td>A44551122444</td>
-                            <td>操作1 更多</td>
-                        </tr>
-                        <tr>
-                            <td>1</td>
-                            <td>A44551122444</td>
-                            <td>买家秀</td>
-                            <td>分配完成</td>
-                            <td>N</td>
-                            <td>1</td>
-                            <td>0</td>
-                            <td>1</td>
-                            <td>ZP</td>
-                            <td></td>
-                            <td></td>
-                            <td></td>
-                            <td>A44551122444</td>
-                            <td>操作1 更多</td>
-                        </tr>
-                        <tr>
-                            <td>1</td>
-                            <td>A44551122444</td>
-                            <td>买家秀</td>
-                            <td>分配完成</td>
-                            <td>N</td>
-                            <td>1</td>
-                            <td>0</td>
-                            <td>1</td>
-                            <td>ZP</td>
-                            <td></td>
-                            <td></td>
-                            <td></td>
-                            <td>A44551122444</td>
-                            <td>操作1 更多</td>
-                        </tr>
-                        <tr>
-                            <td>1</td>
-                            <td>A44551122444</td>
-                            <td>买家秀</td>
-                            <td>分配完成</td>
-                            <td>N</td>
-                            <td>1</td>
-                            <td>0</td>
-                            <td>1</td>
-                            <td>ZP</td>
-                            <td></td>
-                            <td></td>
-                            <td></td>
-                            <td>A44551122444</td>
-                            <td>操作1 更多</td>
-                        </tr>
-                        <tr>
-                            <td>1</td>
-                            <td>A44551122444</td>
-                            <td>买家秀</td>
-                            <td>分配完成</td>
-                            <td>N</td>
-                            <td>1</td>
-                            <td>0</td>
-                            <td>1</td>
-                            <td>ZP</td>
-                            <td></td>
-                            <td></td>
-                            <td></td>
-                            <td>A44551122444</td>
-                            <td>操作1 更多</td>
-                        </tr>
-                        <tr>
-                            <td>1</td>
-                            <td>A44551122444</td>
-                            <td>买家秀</td>
-                            <td>分配完成</td>
-                            <td>N</td>
-                            <td>1</td>
-                            <td>0</td>
-                            <td>1</td>
-                            <td>ZP</td>
-                            <td></td>
-                            <td></td>
-                            <td></td>
-                            <td>A44551122444</td>
-                            <td>操作1 更多</td>
-                        </tr>
-                        <tr>
-                            <td>1</td>
-                            <td>A44551122444</td>
-                            <td>买家秀</td>
-                            <td>分配完成</td>
-                            <td>N</td>
-                            <td>1</td>
-                            <td>0</td>
-                            <td>1</td>
-                            <td>ZP</td>
-                            <td></td>
-                            <td></td>
-                            <td></td>
-                            <td>A44551122444</td>
-                            <td>操作1 更多</td>
-                        </tr>
-                        <tr>
-                            <td>1</td>
-                            <td>A44551122444</td>
-                            <td>买家秀</td>
-                            <td>分配完成</td>
-                            <td>N</td>
-                            <td>1</td>
-                            <td>0</td>
-                            <td>1</td>
-                            <td>ZP</td>
-                            <td></td>
-                            <td></td>
-                            <td></td>
-                            <td>A44551122444</td>
-                            <td>操作1 更多</td>
-                        </tr>
-                        <tr>
-                            <td>1</td>
-                            <td>A44551122444</td>
-                            <td>买家秀</td>
-                            <td>分配完成</td>
-                            <td>N</td>
-                            <td>1</td>
-                            <td>0</td>
-                            <td>1</td>
-                            <td>ZP</td>
-                            <td></td>
-                            <td></td>
-                            <td></td>
-                            <td>A44551122444</td>
-                            <td>操作1 更多</td>
-                        </tr>
-                        <tr>
-                            <td>1</td>
-                            <td>A44551122444</td>
-                            <td>买家秀</td>
-                            <td>分配完成</td>
-                            <td>N</td>
-                            <td>1</td>
-                            <td>0</td>
-                            <td>1</td>
-                            <td>ZP</td>
-                            <td></td>
-                            <td></td>
-                            <td></td>
-                            <td>A44551122444</td>
-                            <td>操作1 更多</td>
-                        </tr>
-                        <tr>
-                            <td>1</td>
-                            <td>A44551122444</td>
-                            <td>买家秀</td>
-                            <td>分配完成</td>
-                            <td>N</td>
-                            <td>1</td>
-                            <td>0</td>
-                            <td>1</td>
-                            <td>ZP</td>
-                            <td></td>
-                            <td></td>
-                            <td></td>
-                            <td>A44551122444</td>
-                            <td>操作1 更多</td>
-                        </tr>
-                        <tr>
-                            <td>1</td>
-                            <td>A44551122444</td>
-                            <td>买家秀</td>
-                            <td>分配完成</td>
-                            <td>N</td>
-                            <td>1</td>
-                            <td>0</td>
-                            <td>1</td>
-                            <td>ZP</td>
-                            <td></td>
-                            <td></td>
-                            <td></td>
-                            <td>A44551122444</td>
-                            <td>操作1 更多</td>
-                        </tr>
-                        <tr>
-                            <td>1</td>
-                            <td>A44551122444</td>
-                            <td>买家秀</td>
-                            <td>分配完成</td>
-                            <td>N</td>
-                            <td>1</td>
-                            <td>0</td>
-                            <td>1</td>
-                            <td>ZP</td>
-                            <td></td>
-                            <td></td>
-                            <td></td>
-                            <td>A44551122444</td>
-                            <td>操作1 更多</td>
-                        </tr>
-                        <tr>
-                            <td>1</td>
-                            <td>A44551122444</td>
-                            <td>买家秀</td>
-                            <td>分配完成</td>
-                            <td>N</td>
-                            <td>1</td>
-                            <td>0</td>
-                            <td>1</td>
-                            <td>ZP</td>
-                            <td></td>
-                            <td></td>
-                            <td></td>
-                            <td>A44551122444</td>
-                            <td>操作1 更多</td>
-                        </tr>
-                        <tr>
-                            <td>1</td>
-                            <td>A44551122444</td>
-                            <td>买家秀</td>
-                            <td>分配完成</td>
-                            <td>N</td>
-                            <td>1</td>
-                            <td>0</td>
-                            <td>1</td>
-                            <td>ZP</td>
-                            <td></td>
-                            <td></td>
-                            <td></td>
-                            <td>A44551122444</td>
-                            <td>操作1 更多</td>
-                        </tr>
-                        <tr>
-                            <td>1</td>
-                            <td>A44551122444</td>
-                            <td>买家秀</td>
-                            <td>分配完成</td>
-                            <td>N</td>
-                            <td>1</td>
-                            <td>0</td>
-                            <td>1</td>
-                            <td>ZP</td>
-                            <td></td>
-                            <td></td>
-                            <td></td>
-                            <td>A44551122444</td>
-                            <td>操作1 更多</td>
-                        </tr>
-                        <tr>
-                            <td>1</td>
-                            <td>A44551122444</td>
-                            <td>买家秀</td>
-                            <td>分配完成</td>
-                            <td>N</td>
-                            <td>1</td>
-                            <td>0</td>
-                            <td>1</td>
-                            <td>ZP</td>
-                            <td></td>
-                            <td></td>
-                            <td></td>
-                            <td>A44551122444</td>
-                            <td>操作1 更多</td>
+                        <tr v-for="(v,k) of orderDetails" @click="clickCurrentDetail(v)">
+                            <td>@{{ k+1 }}</td> {{--行号--}}
+                            <td>@{{ v.sku }}</td> {{--产品代码--}}
+                            <td>@{{ v.skudescrc }}</td> {{--中文描述--}}
+                            <td>@{{ v.status_name }}</td> {{--状态--}}
+                            <td>@{{ v.packflag }}</td> {{--装箱--}}
+                            <td>@{{ v.qty }}</td> {{--分配数--}}
+                            <td>@{{ v.packedqty }}</td> {{--复核数--}}
+                            <td>@{{ v.qty - v.packedqty }}</td> {{--未复核数--}}
+                            <td>@{{ v.lotatt08 }}</td> {{--质量状态--}}
+                            <td>-</td> {{--备注--}}
+                            <td>@{{ v.location }}</td> {{--拣货库位--}}
+                            <td>@{{ v.sku }}</td> {{--英文描述--}}
+                            <td>@{{ v.alternate_sku1 }}</td> {{--产品条码--}}
+                            <td>操作1 更多</td> {{--操作 --}}
                         </tr>
+
                     </table>
                 </div>
                 <div class="reviewed-commodity-wrapper">
@@ -500,25 +281,13 @@
                                     <td>操作</td>
                                 </tr>
 
-                                <tr class="body">
-                                    <td>A121212</td>
-                                    <td>PDD</td>
-                                    <td></td>
-                                    <td>1</td>
+                                <tr class="body" v-for="(v,k) of reviewedSkus">
+                                    <td>@{{ v.sku }}</td>
+                                    <td>@{{ v.skudescrc }}</td>
+                                    <td>@{{ v.sku }}</td>
+                                    <td>@{{ v.inputQty }}</td>
                                     <td class="action">
                                         <a href="javascript:;">操作1</a>
-                                        <a class="more-action" href="javascript:;">
-                                            更多
-                                            <i class="fa fa-angle-down"></i>
-                                        </a>
-                                        <div class="more-action-list">
-                                            <a class="more-action-item" href="javascript:;">更多1</a>
-                                            <a class="more-action-item" href="javascript:;">更多2</a>
-                                            <a class="more-action-item" href="javascript:;">更多3</a>
-                                            <a class="more-action-item" href="javascript:;">更多4</a>
-                                            <a class="more-action-item" href="javascript:;">更多5</a>
-                                            <a class="more-action-item" href="javascript:;">更多6</a>
-                                        </div>
                                     </td>
                                 </tr>
                             </table>
@@ -527,34 +296,34 @@
                     <div class="commodity-info">
                         <div class="info-item">
                             <label for="commodity-code">产品编码: </label>
-                            <input type="text" id="commodity-code" value="A5544511">
+                            <input type="text" id="commodity-code" v-model="currentDetail.alternate_sku1">
                         </div>
                         <div class="info-item">
                             <label for="amount">数量: </label>
-                            <input type="number" id="amount" value="0">
+                            <input @keydown.enter="reviewSku()" type="number" id="amount" v-model="currentDetail.qty">
                         </div>
                         <div class="info-item">
                             <label for="unit">单位: </label>
-                            <input disabled="true" type="text" id="unit" value="件">
+                            <input disabled="true" type="text" id="unit" v-model="currentDetail.uom">
                         </div>
                     </div>
                 </div>
                 <div class="review-status-wrapper row col-8">
                     <div class="review-status-item col">
                         <span class="description">产品总数</span>
-                        <span class="commodity-total-number">2</span>
+                        <span class="commodity-total-number">@{{ reviewStatus.qty }}</span>
                     </div>
                     <div class="review-status-item col">
                         <span class="description">已装箱数</span>
-                        <span class="commodity-packed-number">2</span>
+                        <span class="commodity-packed-number">@{{ reviewStatus.packedqty }}</span>
                     </div>
                     <div class="review-status-item col">
                         <span class="description">未装箱数</span>
-                        <span class="commodity-unpacked-number">2</span>
+                        <span class="commodity-unpacked-number">@{{ reviewStatus.unpackedqty }}</span>
                     </div>
                     <div class="review-status-item col">
                         <span class="description">扫描数量</span>
-                        <span class="commodity-scan-number">2</span>
+                        <span class="commodity-scan-number">@{{ reviewStatus.scanedqty }}</span>
                     </div>
                 </div>
                 <div class="button-list">
@@ -568,30 +337,118 @@
     </div>
 @endsection
 @section('lastScript')
-    <script type="text/javascript" src="{{mix('js/queryForm/queryForm.js')}}"></script>
     <script>
         let vue = new Vue({
             el: "#list",
-            data: {},
+            data: {
+                selectParameters: {
+                    orderno: '',
+                    waveno: '',
+                    expressno: ''
+                },
+                orderDetails: [],
+                currentDetail: {
+                    alternate_sku1: null,
+                    qty: 1,
+                    uom: null,
+                },
+                reviewStatus: {
+                    qty: 0,
+                    packedqty: 0,
+                    unpackedqty: 0,
+                    scanedqty: 0,
+                },
+                reviewedSkus: []
+            },
             created() {
+
             },
             mounted() {
                 $('#list').removeClass('d-none');
-                let _this = this;
-                $(".up").slideUp();
-                let data = [
-                    [
-                        {name: 'order_no', type: 'input', tip: '订单号,不支持模糊搜索', placeholder: '订单号'},
-                    ]
-                ];
-                _this.form = new query({
-                    el: '#form_div',
-                    condition: data,
-                    appendDom: "btn",
-                });
-                _this.form.init();
             },
-            methods: {},
+            methods: {
+                apiGetOrderDetail() {
+                    //查询条件不能为空
+                    let preg = '[a-zA-z0-9]+';//包含任意字母,数字
+                    if (
+                        (!this.selectParameters.orderno.match(preg)) &&
+                        (!this.selectParameters.waveno.match(preg)) &&
+                        (!this.selectParameters.expressno.match(preg))
+                    ) {
+                        tempTip.setDuration(3000);
+                        tempTip.show("查询条件不能为空");
+                        return;
+                    }
+                    //拼接查询条件
+                    let url = '{{ url('apiLocal/storeOut/storeOutReview/apiGetOrderDetail/?') }}';
+                    if (this.selectParameters.orderno.match(preg)) {
+                        url += ("orderno=" + this.selectParameters.orderno.trim());
+                    } else if (this.selectParameters.waveno.match(preg)) {
+                        url += ("waveno=" + this.selectParameters.waveno.trim());
+                    } else if (this.selectParameters.expressno.match(preg)) {
+                        url += ("expressno=" + this.selectParameters.expressno.trim());
+                    }
+                    document.getElementById('btn-search').disabled = true;
+                    tempTip.setDuration(2000);
+                    tempTip.showSuccess('查询中请稍后!');
+                    axios.get(url).then(res => {
+                        if (res.data.success) {
+                            tempTip.setDuration(2000);
+                            tempTip.showSuccess('成功!');
+                            /*orderDetails 赋值*/
+                            this.orderDetails = res.data.data;
+                            /*reviewStatus 赋值*/
+                            this.reviewStatus.qty = this.orderDetails.reduce((sum, item) => sum + Number(item.qty), 0);
+                            this.reviewStatus.packedqty = this.orderDetails.reduce((sum, item) => sum + Number(item.packedqty), 0);
+                            this.reviewStatus.packedqty = this.reviewStatus.qty - this.reviewStatus.packedqty;
+                            /*产品编码自动获取焦点*/
+                            document.getElementById('commodity-code').focus();
+                        }
+                        document.getElementById('btn-search').disabled = false;
+                    }).catch(err => {
+                        document.getElementById('btn-search').disabled = false;
+                        tempTip.setDuration(2000);
+                        tempTip.show('系统异常' + err);
+                    });
+                },
+                /*清空查询输入*/
+                clearSelectParameters() {
+                    this.selectParameters.orderno = '';
+                    this.selectParameters.waveno = '';
+                    this.selectParameters.expressno = '';
+                },
+                /*点击选中商品*/
+                clickCurrentDetail(currentDetail) {
+                    this.currentDetail.alternate_sku1 = currentDetail.alternate_sku1;
+                    this.currentDetail.uom = currentDetail.uom;
+                    document.getElementById('amount').focus();
+                },
+                reviewSku() {
+                    //查询输入的产品编码
+                    let selectedSkuIndex = this.orderDetails.findIndex(item => {
+                        return item.alternate_sku1 === this.currentDetail.alternate_sku1;
+                    });
+                    console.log(selectedSkuIndex);
+                    //添加inputQty属性
+                    if (selectedSkuIndex !== -1) this.orderDetails[selectedSkuIndex].inputQty = this.currentDetail.qty;
+
+                    if (this.currentDetail.qty === 0) {
+                        tempTip.setDuration(2000);
+                        tempTip.show('数量不能为0!');
+                    } else if (selectedSkuIndex === -1) {
+                        tempTip.setDuration(2000);
+                        tempTip.show('输入产品编码有误!');
+                    } else if (this.currentDetail.qty > (this.orderDetails[selectedSkuIndex].qty - this.orderDetails[selectedSkuIndex].packedqty)) {
+                        tempTip.setDuration(2000);
+                        tempTip.show('输入数量不能大于未复核数!');
+                    } else {
+                        this.reviewedSkus.unshift(this.orderDetails[selectedSkuIndex]);//添加到头部
+                        tempTip.setDuration(2000);
+                        tempTip.showSuccess('成功!');
+                        this.orderDetails.splice(selectedSkuIndex, 1);
+                    }
+                }
+            },
             filters: {},
         });
     </script>

+ 7 - 0
routes/apiLocal.php

@@ -268,3 +268,10 @@ Route::prefix('workOrder')->group(function(){
     Route::post('updateIssueType','WorkOrderController@updateIssueTypeApi')->name('workOrder.updateIssueTypeApi'); // 修改问题类型
     Route::post('batchUpdateIssueType','WorkOrderController@batchUpdateIssueTypeApi')->name('workOrder.batchUpdateIssueTypeApi'); // 修改问题类型
  });
+/*出库*/
+Route::group(['prefix'=>'storeOut'],function(){
+    /*复核*/
+    Route::group(['prefix'=>'storeOutReview'], function () {
+        Route::get('apiGetOrderDetail', 'StoreOutReviewController@apiGetOrderDetail')->name('StoreOutReview.apiGetOrderDetail');
+    });
+});

+ 1 - 1
tests/Services/LogisticSFSync/HandleTest.php

@@ -30,7 +30,7 @@ class HandleTest extends TestCase
      */
     public function handle_test()
     {
-//        LogisticSFSync::dispatch('SF1333381646256');
+        LogisticSFSync::dispatch('SF1320174725157');
         $this->assertTrue(true);
     }
 }