From c72afdd7ece074901405158fce8df69ee56cd36e Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期日, 12 一月 2025 19:24:49 +0800
Subject: [PATCH] WMS添加指定平库出库功能

---
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs            |  152 ++++++++++++++++++++++++++++++
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs              |    4 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderDetailService.cs      |    3 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoService.cs                 |    1 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs            |    4 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs   |   12 ++
 代码管理/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/StockSelect.vue              |   47 +++++---
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs                   |    1 
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs                   |   43 ++++++++
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoController.cs |   19 +++
 10 files changed, 260 insertions(+), 26 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/StockSelect.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/StockSelect.vue"
index 86d7f1c..c4dcc64 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/StockSelect.vue"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/extension/outbound/extend/StockSelect.vue"
@@ -10,7 +10,7 @@
       <div class="box-head">
         <el-alert :closable="false" style="width: 100%">
           <el-row>
-            <el-col :span="20">
+            <el-col :span="16">
               <span class="less-style">鐗╂枡鍚嶇О锛� {{ row.materielName }} </span>
               <el-divider direction="vertical"></el-divider>
               <span class="less-style">鐗╂枡缂栧彿锛� {{ row.materielCode }} </span>
@@ -23,24 +23,29 @@
                 >宸查�夋暟閲忥細 {{ selectionSum }}
               </span>
             </el-col>
-            <el-col :span="2">
+            <el-col :span="8">
               <el-link
                 type="primary"
                 size="small"
                 style="float: right; height: 20px"
+                @click="getData(false)"
+                >{{ kcname }}</el-link
+              >
+              <el-link
+                type="primary"
+                size="small"
+                style="float: right; height: 20px; margin-right: 10px"
                 @click="getData"
                 >鍒锋柊</el-link
-              ></el-col
-            >
-            <el-col :span="2">
+              >
               <el-link
                 type="primary"
                 size="small"
-                style="float: right; height: 20px"
+                style="float: right; height: 20px; margin-right: 10px"
                 @click="revokeAssign"
                 >鎾ら攢鍒嗛厤</el-link
-              ></el-col
-            >
+              >
+            </el-col>
           </el-row>
         </el-alert>
       </div>
@@ -102,11 +107,14 @@
 </template>
 <script>
 import VolBox from "@/components/basic/VolBox.vue";
+import { fa } from "element-plus/es/locales.mjs";
 export default {
   components: { VolBox },
   data() {
     return {
       row: null,
+      kcname: "",
+      pkcx: false,
       showDetialBox: false,
       tableData: [],
       tableColumns: [
@@ -179,15 +187,14 @@
         });
     },
     outbound() {
-      if(this.selection.length<=0){
+      if (this.selection.length <= 0) {
         return this.$message.error("璇峰嬀閫�");
       }
+      let url = this.pkcx
+        ? "api/Task/GeneratePKOutboundTask?orderDetailId="
+        : "api/Task/GenerateOutboundTask?orderDetailId=";
       this.http
-        .post(
-          "api/Task/GenerateOutboundTask?orderDetailId=" + this.row.id,
-          this.selection,
-          "鏁版嵁澶勭悊涓�"
-        )
+        .post(url + this.row.id, this.selection, "鏁版嵁澶勭悊涓�")
         .then((x) => {
           if (!x.status) return this.$message.error(x.message);
           this.$message.success("鎿嶄綔鎴愬姛");
@@ -197,13 +204,15 @@
           });
         });
     },
-    getData() {
+    getData(a) {
+      if (!a) this.pkcx = !this.pkcx;
+      let url = this.pkcx
+        ? "api/StockInfo/GetPKStockSelectViews?materielCode="
+        : "api/StockInfo/GetStockSelectViews?materielCode=";
+      this.kcname = this.pkcx ? "绔嬪簱搴撳瓨" : "骞冲簱搴撳瓨";
       this.http
         .post(
-          "api/StockInfo/GetStockSelectViews?materielCode=" +
-            this.row.materielCode +
-            "&orderId=" +
-            this.row.orderId,
+          url + this.row.materielCode + "&orderId=" + this.row.orderId,
           null,
           "鏌ヨ涓�"
         )
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoService.cs"
index fde161f..6447126 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_IStockService/IStockInfoService.cs"
@@ -16,6 +16,7 @@
         IStockInfoRepository Repository { get; }
 
         List<StockSelectViewDTO> GetStockSelectViews(int orderId, string materielCode);
+        List<StockSelectViewDTO> GetPKStockSelectViews(int orderId, string materielCode);
 
         List<Dt_StockInfo> GetOutboundStocks(List<Dt_StockInfo> stockInfos, string materielCode, float needQuantity, out float residueQuantity);
 
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs"
index 8d0a9e8..97fd35c 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs"
@@ -218,5 +218,6 @@
         /// <param name="task"></param>
         /// <returns></returns>
         WebResponseContent UpdateTaskInfo(WCSTaskDTO task);
+        WebResponseContent GeneratePKOutboundTask(int orderDetailId, List<StockSelectViewDTO> stockSelectViews);
     }
 }
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs"
index 524e624..b4686f5 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_InboundService/InboundOrderService.cs"
@@ -119,11 +119,11 @@
                 List<Dt_InboundOrder> dt_ReceiveOrders = new List<Dt_InboundOrder>();
                 if (string.IsNullOrEmpty(orderNo))
                 {
-                    dt_ReceiveOrders = Db.Queryable<Dt_InboundOrder>().Where(x => x.OrderStatus < InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt() && x.WarehouseId == warehouseId).ToPageList(pageNo, 5);
+                    dt_ReceiveOrders = Db.Queryable<Dt_InboundOrder>().Where(x => x.OrderStatus < InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt() && x.WarehouseId == warehouseId).OrderByDescending(x => x.CreateDate).ToPageList(pageNo, 5);
                 }
                 else
                 {
-                    dt_ReceiveOrders = Db.Queryable<Dt_InboundOrder>().Where(x => (x.InboundOrderNo.Contains(orderNo)) && x.OrderStatus < InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt() && x.WarehouseId == warehouseId).ToPageList(pageNo, 5);
+                    dt_ReceiveOrders = Db.Queryable<Dt_InboundOrder>().Where(x => (x.InboundOrderNo.Contains(orderNo)) && x.OrderStatus < InOrderStatusEnum.鍏ュ簱瀹屾垚.ObjToInt() && x.WarehouseId == warehouseId).OrderByDescending(x => x.CreateDate).ToPageList(pageNo, 5);
                 }
 
                 content.OK(data: dt_ReceiveOrders);
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderDetailService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderDetailService.cs"
index 8aa4a5d..c53d8e3 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderDetailService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderDetailService.cs"
@@ -1,4 +1,5 @@
-锘縰sing OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
+锘縰sing MailKit.Search;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
 using System;
 using System.Collections.Generic;
 using System.Linq;
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs"
index ba1c64e..ddaeff6 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundOrderService.cs"
@@ -82,11 +82,11 @@
                 List<Dt_OutboundOrder> dt_ReceiveOrders = new List<Dt_OutboundOrder>();
                 if (string.IsNullOrEmpty(orderNo))
                 {
-                    dt_ReceiveOrders = Db.Queryable<Dt_OutboundOrder>().Where(x => x.OrderStatus < OutLockStockStatusEnum.鍑哄簱瀹屾垚.ObjToInt() && x.WarehouseId == warehouseId).ToPageList(pageNo, 5);
+                    dt_ReceiveOrders = Db.Queryable<Dt_OutboundOrder>().Where(x => x.OrderStatus < OutLockStockStatusEnum.鍑哄簱瀹屾垚.ObjToInt() && x.WarehouseId == warehouseId).OrderByDescending(x => x.CreateDate).ToPageList(pageNo, 5);
                 }
                 else
                 {
-                    dt_ReceiveOrders = Db.Queryable<Dt_OutboundOrder>().Where(x => (x.OrderNo.Contains(orderNo)) && x.OrderStatus < OutLockStockStatusEnum.鍑哄簱瀹屾垚.ObjToInt() && x.WarehouseId == warehouseId).ToPageList(pageNo, 5);
+                    dt_ReceiveOrders = Db.Queryable<Dt_OutboundOrder>().Where(x => (x.OrderNo.Contains(orderNo)) && x.OrderStatus < OutLockStockStatusEnum.鍑哄簱瀹屾垚.ObjToInt() && x.WarehouseId == warehouseId).OrderByDescending(x => x.CreateDate).ToPageList(pageNo, 5);
                 }
 
                 content.OK(data: dt_ReceiveOrders);
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs"
index 47bcaf4..0e31f7b 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs"
@@ -37,6 +37,12 @@
             _outboundRepository = outboundRepository;
         }
 
+        /// <summary>
+        /// 鏌ヨ璁㈠崟绔嬪簱搴撳瓨瑙嗗浘
+        /// </summary>
+        /// <param name="orderId"></param>
+        /// <param name="materielCode"></param>
+        /// <returns></returns>
         public List<StockSelectViewDTO> GetStockSelectViews(int orderId, string materielCode)
         {
             try
@@ -71,6 +77,43 @@
             }
 
         }
+        /// <summary>
+        /// 鏌ヨ璁㈠崟骞冲簱搴撳瓨瑙嗗浘
+        /// </summary>
+        /// <param name="orderId"></param>
+        /// <param name="materielCode"></param>
+        /// <returns></returns>
+        public List<StockSelectViewDTO> GetPKStockSelectViews(int orderId, string materielCode)
+        {
+            try
+            {
+                Dt_OutboundOrder outboundOrder = _outboundRepository.OutboundOrderRepository.QueryFirst(x => x.Id == orderId);
+                if (outboundOrder == null)
+                {
+                    throw new Exception($"鏈壘鍒板嚭搴撳崟淇℃伅");
+                }
+                return BaseDal.QueryTabs<Dt_StockInfo, Dt_StockInfoDetail, StockSelectViewDTO>((a, b) => a.Id == b.StockId && a.WarehouseId == outboundOrder.WarehouseId, (a, b) => new StockSelectViewDTO
+                {
+                    LocationCode = a.LocationCode,
+                    MaterielCode = b.MaterielCode,
+                    MaterielName = b.MaterielName,
+                    PalletCode = a.PalletCode,
+                    UseableQuantity = b.StockQuantity - b.OutboundQuantity
+                }, a => a.LocationCode == "骞冲簱浣�", b => b.StockQuantity > b.OutboundQuantity && b.MaterielCode == materielCode, x => true).GroupBy(x => x.PalletCode).Select(x => new StockSelectViewDTO
+                {
+                    LocationCode = x.FirstOrDefault()?.LocationCode ?? "",
+                    MaterielCode = x.FirstOrDefault()?.MaterielCode ?? "",
+                    MaterielName = x.FirstOrDefault()?.MaterielName ?? "",
+                    PalletCode = x.Key,
+                    UseableQuantity = x.Sum(x => x.UseableQuantity)
+                }).ToList();
+            }
+            catch (Exception ex)
+            {
+                return null;
+            }
+        }
+
         public WebResponseContent StockQueryData(SaveModel saveModel)
         {
             try
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs"
index 67f133f..acdd339 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService_Outbound.cs"
@@ -15,6 +15,8 @@
 using WIDESEA_Common.StockEnum;
 using WIDESEA_Common.CommonEnum;
 using WIDESEA_Common.LocationEnum;
+using MailKit.Search;
+using WIDESEA_External.Model;
 
 namespace WIDESEA_TaskInfoService
 {
@@ -30,13 +32,13 @@
             WebResponseContent content = new WebResponseContent();
             try
             {
-                Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x=>x.Id==id).Includes(x=>x.Details).First();
+                Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.Db.Queryable<Dt_StockInfo>().Where(x => x.Id == id).Includes(x => x.Details).First();
                 if (stockInfo == null)
                 {
                     return content.Error($"鏈壘鍒板簱瀛�");
                 }
                 Dt_LocationInfo locationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.LocationCode == stockInfo.LocationCode);
-                if (locationInfo!=null && (locationInfo.EnableStatus == EnableStatusEnum.OnlyOut.ObjToInt() || locationInfo.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && locationInfo.LocationStatus==LocationStatusEnum.InStock.ObjToInt() && stockInfo.StockStatus==StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt())
+                if (locationInfo != null && (locationInfo.EnableStatus == EnableStatusEnum.OnlyOut.ObjToInt() || locationInfo.EnableStatus == EnableStatusEnum.Normal.ObjToInt()) && locationInfo.LocationStatus == LocationStatusEnum.InStock.ObjToInt() && stockInfo.StockStatus == StockStatusEmun.鍏ュ簱瀹屾垚.ObjToInt())
                 {
                     List<Dt_Task> tasks = GetTasks(new List<Dt_StockInfo>() { stockInfo }, TaskTypeEnum.Outbound);
                     if (tasks == null || tasks.Count <= 0)
@@ -253,6 +255,152 @@
         }
 
         /// <summary>
+        /// 骞冲簱鐩存帴鍑哄簱
+        /// </summary>
+        /// <param name="orderDetailId"></param>
+        /// <param name="stockSelectViews"></param>
+        /// <returns></returns>
+        public WebResponseContent GeneratePKOutboundTask(int orderDetailId, List<StockSelectViewDTO> stockSelectViews)
+        {
+            try
+            {
+                Dt_OutboundOrderDetail OrderDetail = _outboundService.OutboundOrderDetailService.Repository.QueryFirst(x => x.Id == orderDetailId);
+
+                if (OrderDetail == null)
+                {
+                    throw new Exception("鏈壘鍒板嚭搴撳崟鏄庣粏淇℃伅");
+                }
+                if (OrderDetail.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt())
+                    throw new Exception("鍑哄簱鍗曞凡瀹屾垚");
+                Dt_OutboundOrder outboundOrder = BaseDal.Db.Queryable<Dt_OutboundOrder>().Where(x => x.Id == OrderDetail.OrderId).Includes(x => x.Details).First();
+                if (outboundOrder == null)
+                {
+                    return WebResponseContent.Instance.Error($"鏈壘鍒板嚭搴撳崟淇℃伅");
+                }
+                Dt_Warehouse warehouse = _basicService.WarehouseService.Repository.QueryFirst(x => x.WarehouseId == outboundOrder.WarehouseId);
+                List<Dt_StockInfo> outStocks = _stockService.StockInfoService.Repository.GetStockInfosByPalletCodes(stockSelectViews.Select(x => x.PalletCode).ToList());
+                if (outStocks.Count < 1) return WebResponseContent.Instance.Error($"搴撳瓨涓嶈冻");
+                List<Dt_OutStockLockInfo> outStockLockInfos = new List<Dt_OutStockLockInfo>();
+                List<Dt_StockInfo> upStocks = new List<Dt_StockInfo>();
+                List<Dt_StockInfo> deStocks = new List<Dt_StockInfo>();
+                List<Dt_StockInfoDetail> upstockDetails = new List<Dt_StockInfoDetail>();
+                List<Dt_StockInfoDetail> destockDetails = new List<Dt_StockInfoDetail>();
+                outStocks.ForEach(x =>
+                {
+                    x.Details.Where(x => x.MaterielCode == OrderDetail.MaterielCode).ToList().ForEach(v =>
+                    {
+                        float OriginalQuantity = v.StockQuantity;
+                        float assignQuantity = 0;//鍒嗛厤鏁伴噺
+                        float assignAmount = OrderDetail.OrderQuantity - OrderDetail.OverOutQuantity;//寰呭嚭鏁伴噺
+                        if (assignAmount > 0)
+                        {
+                            if (v.StockQuantity >= assignAmount)
+                            {
+                                assignQuantity = assignAmount;
+                                v.StockQuantity -= assignAmount;
+                                OrderDetail.OverOutQuantity += assignAmount;
+                                OrderDetail.LockQuantity += assignAmount;
+                                upstockDetails.Add(v);
+                            }
+                            else
+                            {
+                                assignQuantity = v.StockQuantity;
+                                OrderDetail.OverOutQuantity += v.StockQuantity;
+                                OrderDetail.LockQuantity += v.StockQuantity;
+                                v.StockQuantity = 0;
+                                destockDetails.Add(v);
+                            }
+                            Dt_OutStockLockInfo outStockLockInfo = new Dt_OutStockLockInfo()
+                            {
+                                PalletCode = x.PalletCode,
+                                AssignQuantity = assignQuantity,
+                                MaterielCode = OrderDetail.MaterielCode,
+                                BatchNo = v.BatchNo,
+                                LocationCode = x.LocationCode,
+                                MaterielName = v.MaterielName,
+                                OrderDetailId = OrderDetail.Id,
+                                OrderNo = outboundOrder.OrderNo,
+                                OrderType = outboundOrder.OrderType,
+                                OriginalQuantity = OriginalQuantity,
+                                Status = OutLockStockStatusEnum.鍑哄簱瀹屾垚.ObjToInt(),
+                                StockId = x.Id,
+                                TaskNum = 0,
+                                OrderQuantity = OrderDetail.OrderQuantity,
+                                Unit = OrderDetail.Unit
+                            };
+                            outStockLockInfos.Add(outStockLockInfo);
+                        }
+                    });
+                    int overCount = x.Details.Where(x => x.StockQuantity == 0).Count();
+                    if (overCount == x.Details.Count) deStocks.Add(x);
+                    else upStocks.Add(x);
+                });
+                outboundOrder.OrderStatus = OutOrderStatusEnum.鍑哄簱涓�.ObjToInt();
+                OrderDetail.OrderDetailStatus = OrderDetail.OrderQuantity > OrderDetail.OverOutQuantity ? OrderDetailStatusEnum.AssignOverPartial.ObjToInt() : OrderDetailStatusEnum.Over.ObjToInt();
+                if (OrderDetail.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt())
+                {
+                    int overCount = outboundOrder.Details.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).Count();
+                    if (outboundOrder.Details.Count - 1 == overCount)
+                        outboundOrder.OrderStatus = OutOrderStatusEnum.鍑哄簱瀹屾垚.ObjToInt();
+                }
+                _unitOfWorkManage.BeginTran();
+                _outboundService.OutboundStockLockInfoService.AddData(outStockLockInfos);
+                _outboundService.OutboundOrderService.UpdateData(outboundOrder);
+                _outboundService.OutboundOrderDetailService.UpdateData(OrderDetail);
+                _stockRepository.StockInfoRepository.UpdateData(upStocks);
+                _stockRepository.StockInfoRepository.DeleteData(deStocks);
+                _stockRepository.StockInfoDetailRepository.UpdateData(upstockDetails);
+                _stockRepository.StockInfoDetailRepository.DeleteData(destockDetails);
+                _unitOfWorkManage.CommitTran();
+
+                #region 涓婃姤ERP
+                List<ERPPickModel> eRPPickModels = new List<ERPPickModel>();
+                outStockLockInfos.ForEach(x =>
+                {
+                    ERPPickItemModel pickItemModel = new ERPPickItemModel()
+                    {
+                        Lotno = x.BatchNo,
+                        Qty = x.AssignQuantity.ToString(),
+                        Location = warehouse.WarehouseCode
+                    };
+                    ERPPickModel pickModel = new ERPPickModel()
+                    {
+                        Rowindex = OrderDetail.RowNo,
+                        Material = OrderDetail.MaterielCode,
+                        Qty = pickItemModel.Qty,
+                        Dataitem = new List<ERPPickItemModel> { pickItemModel }
+                    };
+                    eRPPickModels.Add(pickModel);
+                });
+                ERPIssueItemModel issueItemModel = new ERPIssueItemModel()
+                {
+                    Pickcode = outboundOrder.UpperOrderNo,
+                    PickList = eRPPickModels
+                };
+                ERPIssueModel issueModel = new ERPIssueModel()
+                {
+                    UniqueTag = outboundOrder.Id.ToString(),
+                    Code = outboundOrder.OrderNo,
+                    WarehouseCode = warehouse.WarehouseCode,
+                    Docremark = "",
+                    Deptno = outboundOrder.DepartmentCode,
+                    Deptname = outboundOrder.DepartmentName,
+                    Createtime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
+                    Createuser = App.User.UserName,
+                    Issitem = new List<ERPIssueItemModel>() { issueItemModel }
+                };
+                _invokeERPService.InvokeOutStandardsApi(issueModel);
+                #endregion
+
+                return WebResponseContent.Instance.OK();
+            }
+            catch (Exception ex)
+            {
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+
+        /// <summary>
         /// 鐢熸垚鍑哄簱浠诲姟鍚庢暟鎹洿鏂板埌鏁版嵁搴�
         /// </summary>
         /// <param name="tasks"></param>
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoController.cs"
index 530fa23..a06defd 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoController.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Stock/StockInfoController.cs"
@@ -22,11 +22,30 @@
         {
         }
 
+        /// <summary>
+        /// 鏌ヨ璁㈠崟绔嬪簱搴撳瓨瑙嗗浘
+        /// </summary>
+        /// <param name="orderId"></param>
+        /// <param name="materielCode"></param>
+        /// <returns></returns>
         [HttpPost, HttpGet, Route("GetStockSelectViews")]
         public List<StockSelectViewDTO> GetStockSelectViews(int orderId, string materielCode)
         {
             return Service.GetStockSelectViews(orderId, materielCode);
         }
+
+        /// <summary>
+        /// 鏌ヨ璁㈠崟骞冲簱搴撳瓨瑙嗗浘
+        /// </summary>
+        /// <param name="orderId"></param>
+        /// <param name="materielCode"></param>
+        /// <returns></returns>
+        [HttpPost, HttpGet, Route("GetPKStockSelectViews")]
+        public List<StockSelectViewDTO> GetPKStockSelectViews(int orderId, string materielCode)
+        {
+            return Service.GetPKStockSelectViews(orderId, materielCode);
+        }
+
         /// <summary>
         /// 鏍规嵁鎵樼洏鍜屽簱鍖烘煡璇㈠簱瀛樹俊鎭�
         /// </summary>
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs"
index db78b1a..98f8469 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs"
@@ -109,6 +109,18 @@
         }
 
         /// <summary>
+        /// 骞冲簱鐩存帴鍑哄簱
+        /// </summary>
+        /// <param name="orderDetailId"></param>
+        /// <param name="stockSelectViews"></param>
+        /// <returns></returns>
+        [HttpPost, HttpGet, Route("GeneratePKOutboundTask"), AllowAnonymous]
+        public WebResponseContent GeneratePKOutboundTask(int orderDetailId, [FromBody] List<StockSelectViewDTO> stockSelectViews)
+        {
+            return Service.GeneratePKOutboundTask(orderDetailId, stockSelectViews);
+        }
+
+        /// <summary>
         /// 鐢熸垚鍑哄簱浠诲姟
         /// </summary>
         /// <param name="keys"></param>

--
Gitblit v1.9.3