From 8adbc609ea7b5982d5c7bd3c47beb2fa775c5399 Mon Sep 17 00:00:00 2001
From: dengjunjie <dengjunjie@hnkhzn.com>
Date: 星期一, 29 十二月 2025 18:43:08 +0800
Subject: [PATCH] 1

---
 WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundService.cs                     |    2 
 WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_NewOutboundOrder.cs             |   60 ++++++
 WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs                       |    8 
 WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Service/OutStockLockInfoService.cs       |   28 +++
 WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/INewOutboundOrderDetailService.cs       |   22 ++
 WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/INewOutboundOrderDetailRepository.cs |   14 +
 WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/NewOutboundOrderDetailRepository.cs   |   18 ++
 WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/INewOutboundOrderRepository.cs       |   14 +
 WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs         |    6 
 WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/INewOutboundOrderService.cs             |   19 ++
 WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutStockLockInfoService.cs             |    1 
 WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_NewOutboundOrderDetail.cs       |  103 +++++++++++
 WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/NewOutboundOrderRepository.cs         |   18 ++
 WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/NewOutboundOrderService.cs          |   49 +++++
 WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs                         |    1 
 WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/NewPartialTaskService_Outbound.cs        |   83 +++++++++
 WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/NewOutboundOrderDetailService.cs    |   37 ++++
 17 files changed, 482 insertions(+), 1 deletions(-)

diff --git a/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/INewOutboundOrderDetailRepository.cs b/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/INewOutboundOrderDetailRepository.cs
new file mode 100644
index 0000000..41a49ee
--- /dev/null
+++ b/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/INewOutboundOrderDetailRepository.cs
@@ -0,0 +1,14 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IOutboundRepository
+{
+    public interface INewOutboundOrderDetailRepository : IRepository<Dt_NewOutboundOrderDetail>
+    {
+    }
+}
diff --git a/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/INewOutboundOrderRepository.cs b/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/INewOutboundOrderRepository.cs
new file mode 100644
index 0000000..c5f1ebe
--- /dev/null
+++ b/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/INewOutboundOrderRepository.cs
@@ -0,0 +1,14 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IOutboundRepository
+{
+    public interface INewOutboundOrderRepository : IRepository<Dt_NewOutboundOrder>
+    {
+    }
+}
diff --git a/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/INewOutboundOrderDetailService.cs b/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/INewOutboundOrderDetailService.cs
new file mode 100644
index 0000000..78422f6
--- /dev/null
+++ b/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/INewOutboundOrderDetailService.cs
@@ -0,0 +1,22 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Enums;
+using WIDESEA_DTO.Stock;
+using WIDESEA_IOutboundRepository;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IOutboundService
+{
+    public interface INewOutboundOrderDetailService : IService<Dt_NewOutboundOrderDetail>
+    {
+        INewOutboundOrderDetailRepository Repository { get; }
+
+        
+    }
+}
diff --git a/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/INewOutboundOrderService.cs b/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/INewOutboundOrderService.cs
new file mode 100644
index 0000000..8b076cf
--- /dev/null
+++ b/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/INewOutboundOrderService.cs
@@ -0,0 +1,19 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Common;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_DTO.Outbound;
+using WIDESEA_IOutboundRepository;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_IOutboundService
+{
+    public interface INewOutboundOrderService : IService<Dt_NewOutboundOrder>
+    {
+        INewOutboundOrderRepository Repository { get; }
+    }
+}
diff --git a/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutStockLockInfoService.cs b/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutStockLockInfoService.cs
index c894e2e..b52dac0 100644
--- a/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutStockLockInfoService.cs
+++ b/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutStockLockInfoService.cs
@@ -30,5 +30,6 @@
         /// <param name="taskNum"></param>
         /// <returns></returns>
         Dt_OutStockLockInfo GetOutStockLockInfo(Dt_OutboundOrder outboundOrder, Dt_OutboundOrderDetail outboundOrderDetail, Dt_StockInfo outStock, decimal assignQuantity, int? taskNum = null);
+        Dt_OutStockLockInfo GetOutStockLockInfo(Dt_NewOutboundOrder outboundOrder, Dt_NewOutboundOrderDetail outboundOrderDetail, Dt_StockInfo outStock, decimal assignQuantity, int? taskNum = null);
     }
 }
diff --git a/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundService.cs b/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundService.cs
index 7e86e2f..6befb8f 100644
--- a/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundService.cs
+++ b/WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundService.cs
@@ -10,8 +10,10 @@
     public interface IOutboundService:IDependency
     {
         IOutboundOrderDetailService OutboundOrderDetailService { get; }
+        INewOutboundOrderDetailService NewOutboundOrderDetailService { get; }
 
         IOutboundOrderService OutboundOrderService { get; }
+        INewOutboundOrderService NewOutboundOrderService { get; }
 
         IOutStockLockInfoService OutboundStockLockInfoService { get; }
     }
diff --git a/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs b/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs
index 5087b00..3314a18 100644
--- a/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs
+++ b/WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs
@@ -96,5 +96,6 @@
         /// <param name="stockViews"></param>
         /// <returns></returns>
         WebResponseContent TakeOutbound(List<StockViewDTO> stockViews);
+        WebResponseContent WMSGenerateNewOutboundTask(int[] keys);
     }
 }
diff --git a/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_NewOutboundOrder.cs b/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_NewOutboundOrder.cs
new file mode 100644
index 0000000..ff92b6e
--- /dev/null
+++ b/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_NewOutboundOrder.cs
@@ -0,0 +1,60 @@
+锘縰sing Magicodes.ExporterAndImporter.Core;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.Attributes;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    [SugarTable(nameof(Dt_NewOutboundOrder), "鍑哄簱鍗�")]
+    public class Dt_NewOutboundOrder : BaseEntity
+    {
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鍗曟嵁缂栧彿", IsOnlyIgnoreUpdate = true)]
+        public string OrderNo { get; set; }
+
+        [SugarColumn(IsNullable = true, Length = 50, ColumnDescription = "涓婃父鍗曟嵁缂栧彿", IsOnlyIgnoreUpdate = true)]
+        public string UpperOrderNo { get; set; }
+
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍗曟嵁绫诲瀷", IsOnlyIgnoreUpdate = true)]
+        public int OrderType { get; set; }
+
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍗曟嵁鐘舵��")]
+        public int OrderStatus { get; set; }
+
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍒涘缓鏂瑰紡", IsOnlyIgnoreUpdate = true)]
+        public int CreateType { get; set; }
+
+        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "澶囨敞")]
+        public string Remark { get; set; }
+        /// <summary>
+        /// 鎺ㄥ崟绯荤粺
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 10, ColumnDescription = "鎺ㄥ崟绯荤粺")]
+        public string System { get; set; }
+
+
+        [ImporterHeader(Name = "浠撳簱缂栫爜")]
+        [ExporterHeader(DisplayName = "浠撳簱缂栫爜")]
+        [SugarColumn(IsNullable = true, ColumnDescription = "浠撳簱缂栫爜")]
+        public string OutWareHouse { get; set; }
+
+        [ImporterHeader(Name = "鍗曟嵁灏忕被")]
+        [ExporterHeader(DisplayName = "鍗曟嵁灏忕被")]
+        [SugarColumn(IsNullable = true, ColumnDescription = "鍗曟嵁灏忕被", Length = 50)]
+        public string TransactionCode { get; set; }
+        [ImporterHeader(Name = "鍑哄叆搴撶被鍨�")]
+        [ExporterHeader(DisplayName = "鍑哄叆搴撶被鍨�")]
+        [SugarColumn(IsNullable = true, ColumnDescription = "鍑哄叆搴撶被鍨�",Length = 50)]
+        public string InoutType { get; set; }
+
+        [Navigate(NavigateType.OneToMany, nameof(Dt_OutboundOrderDetail.OrderId), nameof(Id))]
+        public List<Dt_OutboundOrderDetail> Details { get; set; }
+    }
+}
diff --git a/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_NewOutboundOrderDetail.cs b/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_NewOutboundOrderDetail.cs
new file mode 100644
index 0000000..2d81f54
--- /dev/null
+++ b/WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_NewOutboundOrderDetail.cs
@@ -0,0 +1,103 @@
+锘縰sing SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.DB.Models;
+
+namespace WIDESEA_Model.Models
+{
+    [SugarTable(nameof(Dt_NewOutboundOrderDetail), "鍑哄簱鍗曟槑缁�")]
+    public class Dt_NewOutboundOrderDetail : BaseEntity
+    {
+        /// <summary>
+        /// 涓婚敭
+        /// </summary>
+        [SugarColumn(IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "涓婚敭")]
+        public int Id { get; set; }
+        /// <summary>
+        /// 鍑哄簱鍗曚富閿�
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鍑哄簱鍗曚富閿�")]
+        public int OrderId { get; set; }
+        /// <summary>
+        /// 鐗╂枡缂栧彿
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 50, ColumnDescription = "鐗╂枡缂栧彿")]
+        public string MaterielCode { get; set; }
+        /// <summary>
+        /// 鐗╂枡鍚嶇О
+        /// </summary>
+        [SugarColumn(IsNullable = true, Length = 200, ColumnDescription = "鐗╂枡鍚嶇О")]
+        public string MaterielName { get; set; }
+        /// <summary>
+        /// 鎵规鍙�
+        /// </summary>
+        [SugarColumn(IsNullable = false, Length = 20, ColumnDescription = "鎵规鍙�")]
+        public string BatchNo { get; set; }
+        /// <summary>
+        /// 鍗曟嵁鏁伴噺
+        /// </summary>
+        [SugarColumn(IsNullable = false, DecimalDigits = 2, ColumnDescription = "鍗曟嵁鏁伴噺")]
+        public decimal OrderQuantity { get; set; }
+        /// <summary>
+        /// 閿佸畾鏁伴噺
+        /// </summary>
+        [SugarColumn(IsNullable = false, DecimalDigits = 2, ColumnDescription = "閿佸畾鏁伴噺", DefaultValue = "0")]
+        public decimal LockQuantity { get; set; }
+        /// <summary>
+        /// 宸插嚭鏁伴噺
+        /// </summary>
+        [SugarColumn(IsNullable = false, DecimalDigits = 2, ColumnDescription = "宸插嚭鏁伴噺", DefaultValue = "0")]
+        public decimal OverOutQuantity { get; set; }
+        /// <summary>
+        /// 鍗曟嵁鏄庣粏鐘舵��
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "璁㈠崟鏄庣粏鐘舵��")]
+        public int OrderDetailStatus { get; set; }
+        /// <summary>
+        /// 鐗╂枡瑙勬牸
+        /// </summary>
+        [SugarColumn(IsNullable = false, ColumnDescription = "鐗╂枡瑙勬牸")]
+        public string MaterieSpec { get; set; }
+        /// <summary>
+        /// 澶囨敞
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "澶囨敞")]
+        public string Remark { get; set; }
+        /// <summary>
+        /// 鏄庣粏id
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "鏄庣粏id")]
+        public string LinId { get; set; }
+        /// <summary>
+        /// LPN鍙�
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "LPN鍙�")]
+        public string LPNNo { get; set; }
+        /// <summary>
+        /// 浠撳簱
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "浠撳簱")]
+        public string WarehouseCode { get; set; }
+        /// <summary>
+        /// 搴撳尯
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "搴撳尯")]
+        public string StorageAreaCode { get; set; }
+        /// <summary>
+        /// 搴撲綅
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "搴撲綅")]
+        public string StorageLocationCode { get; set; }
+        /// <summary>
+        /// SMOM鎸囧畾鍑哄簱璐т綅
+        /// </summary>
+        [SugarColumn(IsNullable = true, ColumnDescription = "SMOM鎸囧畾鍑哄簱璐т綅")]
+        public string LocationName { get; set; }
+
+        [SugarColumn(IsNullable = true, ColumnDescription = "渚涘簲鍟嗘壒娆�")]
+        public string SupplierBatch { get; set; }
+    }
+}
diff --git a/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/NewOutboundOrderDetailRepository.cs b/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/NewOutboundOrderDetailRepository.cs
new file mode 100644
index 0000000..a6cc7ef
--- /dev/null
+++ b/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/NewOutboundOrderDetailRepository.cs
@@ -0,0 +1,18 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_IOutboundRepository;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_OutboundRepository
+{
+    public class NewOutboundOrderDetailRepository : RepositoryBase<Dt_NewOutboundOrderDetail>, INewOutboundOrderDetailRepository
+    {
+        public NewOutboundOrderDetailRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
+        {
+        }
+    }
+}
diff --git a/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/NewOutboundOrderRepository.cs b/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/NewOutboundOrderRepository.cs
new file mode 100644
index 0000000..1090eba
--- /dev/null
+++ b/WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/NewOutboundOrderRepository.cs
@@ -0,0 +1,18 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_IOutboundRepository;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_OutboundRepository
+{
+    public class NewOutboundOrderRepository : RepositoryBase<Dt_NewOutboundOrder>, INewOutboundOrderRepository
+    {
+        public NewOutboundOrderRepository(IUnitOfWorkManage unitOfWorkManage) : base(unitOfWorkManage)
+        {
+        }
+    }
+}
diff --git a/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/NewOutboundOrderDetailService.cs b/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/NewOutboundOrderDetailService.cs
new file mode 100644
index 0000000..fc851f0
--- /dev/null
+++ b/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/NewOutboundOrderDetailService.cs
@@ -0,0 +1,37 @@
+锘縰sing OfficeOpenXml.FormulaParsing.Excel.Functions.RefAndLookup;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.Enums;
+using WIDESEA_Core.Helper;
+using WIDESEA_DTO.Stock;
+using WIDESEA_IBasicRepository;
+using WIDESEA_IBasicService;
+using WIDESEA_IOutboundRepository;
+using WIDESEA_IOutboundService;
+using WIDESEA_IRecordService;
+using WIDESEA_IStockRepository;
+using WIDESEA_IStockService;
+using WIDESEA_Model.Models;
+using WIDESEA_StockRepository;
+
+namespace WIDESEA_OutboundService
+{
+    public partial class NewOutboundOrderDetailService : ServiceBase<Dt_NewOutboundOrderDetail, INewOutboundOrderDetailRepository>, INewOutboundOrderDetailService
+    {
+        private readonly IUnitOfWorkManage _unitOfWorkManage;
+
+        public INewOutboundOrderDetailRepository Repository => BaseDal;
+
+        public NewOutboundOrderDetailService(INewOutboundOrderDetailRepository BaseDal, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
+        {
+            _unitOfWorkManage = unitOfWorkManage;
+        }
+    }
+}
diff --git a/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/NewOutboundOrderService.cs b/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/NewOutboundOrderService.cs
new file mode 100644
index 0000000..ddd7fbb
--- /dev/null
+++ b/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/NewOutboundOrderService.cs
@@ -0,0 +1,49 @@
+锘縰sing AutoMapper;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Serialization;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Common;
+using WIDESEA_Common.OrderEnum;
+using WIDESEA_Core;
+using WIDESEA_Core.BaseRepository;
+using WIDESEA_Core.BaseServices;
+using WIDESEA_Core.CodeConfigEnum;
+using WIDESEA_Core.DB;
+using WIDESEA_Core.Enums;
+using WIDESEA_Core.Helper;
+using WIDESEA_Core.Seed;
+using WIDESEA_Core.Utilities;
+using WIDESEA_DTO.Inbound;
+using WIDESEA_DTO.Outbound;
+using WIDESEA_DTO.Stock;
+using WIDESEA_IBasicService;
+using WIDESEA_IOutboundRepository;
+using WIDESEA_IOutboundService;
+using WIDESEA_IStockService;
+//using WIDESEA_ITaskInfoRepository;
+//using WIDESEA_ITaskInfoService;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_OutboundService
+{
+    public partial class NewOutboundOrderService : ServiceBase<Dt_NewOutboundOrder, INewOutboundOrderRepository>, INewOutboundOrderService
+    {
+        private readonly IMapper _mapper;
+        private readonly IUnitOfWorkManage _unitOfWorkManage;
+
+        public INewOutboundOrderRepository Repository => BaseDal;
+
+        public NewOutboundOrderService(INewOutboundOrderRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal)
+        {
+            _mapper = mapper;
+            _unitOfWorkManage = unitOfWorkManage;
+        }
+
+
+    }
+}
diff --git a/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs b/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs
index 4b48024..b78724f 100644
--- a/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs
+++ b/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs
@@ -15,11 +15,17 @@
 
         public IOutStockLockInfoService OutboundStockLockInfoService { get; }
 
-        public OutboundService(IOutboundOrderDetailService outboundOrderDetailService, IOutboundOrderService outboundOrderService, IOutStockLockInfoService outboundStockLockInfoService)
+        public INewOutboundOrderDetailService NewOutboundOrderDetailService { get; }
+
+        public INewOutboundOrderService NewOutboundOrderService { get; }
+
+        public OutboundService(IOutboundOrderDetailService outboundOrderDetailService, IOutboundOrderService outboundOrderService, IOutStockLockInfoService outboundStockLockInfoService, INewOutboundOrderDetailService newOutboundOrderDetailService, INewOutboundOrderService newOutboundOrderService)
         {
             OutboundOrderDetailService = outboundOrderDetailService;
             OutboundOrderService = outboundOrderService;
             OutboundStockLockInfoService = outboundStockLockInfoService;
+            NewOutboundOrderDetailService= newOutboundOrderDetailService;
+            NewOutboundOrderService = newOutboundOrderService;
         }
     }
 }
diff --git a/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Service/OutStockLockInfoService.cs b/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Service/OutStockLockInfoService.cs
index 8ff3be0..cea3190 100644
--- a/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Service/OutStockLockInfoService.cs
+++ b/WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Service/OutStockLockInfoService.cs
@@ -40,5 +40,33 @@
 
             return outStockLockInfo;
         }
+
+        public Dt_OutStockLockInfo GetOutStockLockInfo(Dt_NewOutboundOrder outboundOrder, Dt_NewOutboundOrderDetail outboundOrderDetail, Dt_StockInfo outStock, decimal assignQuantity, int? taskNum = null)
+        {
+
+            Dt_OutStockLockInfo outStockLockInfo = new Dt_OutStockLockInfo()
+            {
+                PalletCode = outStock.PalletCode,
+                AssignQuantity = assignQuantity,
+                MaterielCode = outboundOrderDetail.MaterielCode,
+                BatchNo = outboundOrderDetail.BatchNo ?? outStock.Details.FirstOrDefault()?.BatchNo,
+                LocationCode = outStock.LocationCode,
+                MaterielName = outboundOrderDetail.MaterielName,
+                OrderDetailId = outboundOrderDetail.Id,
+                OrderNo = outboundOrder.OrderNo,
+                OrderType = outboundOrder.OrderType,
+                OriginalQuantity = outStock.Details.Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode).Sum(x => x.StockQuantity),
+                //Status = taskNum == null ? OutLockStockStatusEnum.宸插垎閰�.ObjToInt() : OutLockStockStatusEnum.鍑哄簱涓�.ObjToInt(),
+                StockId = outStock.Id,
+                TaskNum = taskNum,
+                OrderQuantity = outboundOrderDetail.OrderQuantity,
+                LinId = outboundOrderDetail.LinId,
+                //Unit = outboundOrderDetail.Unit,
+                //ProductionDate = outStock.Details.Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode).FirstOrDefault()?.ProductionDate,
+                //EffectiveDate = outStock.Details.Where(x => x.MaterielCode == outboundOrderDetail.MaterielCode).FirstOrDefault()?.EffectiveDate
+            };
+
+            return outStockLockInfo;
+        }
     }
 }
diff --git a/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/NewPartialTaskService_Outbound.cs b/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/NewPartialTaskService_Outbound.cs
new file mode 100644
index 0000000..0f9506a
--- /dev/null
+++ b/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/NewPartialTaskService_Outbound.cs
@@ -0,0 +1,83 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using WIDESEA_Core;
+using WIDESEA_Core.Enums;
+using WIDESEA_Core.Helper;
+using WIDESEA_Model.Models;
+
+namespace WIDESEA_TaskInfoService
+{
+    public partial class TaskService
+    {
+        public WebResponseContent WMSGenerateNewOutboundTask(int[] keys)
+        {
+            try
+            {
+                List<Dt_Task> tasks = new List<Dt_Task>();
+                List<Dt_LocationInfo> locationInfos = new List<Dt_LocationInfo>();
+                List<Dt_OutStockLockInfo> outStockLockInfos = new List<Dt_OutStockLockInfo>();
+
+                List<Dt_NewOutboundOrderDetail> outboundOrderDetails = _outboundService.NewOutboundOrderDetailService.Repository.QueryData(x => keys.Contains(x.OrderId));
+                if (outboundOrderDetails == null || outboundOrderDetails.Count == 0)
+                {
+                    throw new Exception("鏈壘鍒板嚭搴撳崟鏄庣粏淇℃伅");
+                }
+                if (outboundOrderDetails.FirstOrDefault(x => x.OrderDetailStatus > OrderDetailStatusEnum.New.ObjToInt() && x.OrderDetailStatus != OrderDetailStatusEnum.AssignOverPartial.ObjToInt()) != null)
+                {
+                    throw new Exception("鎵�閫夊嚭搴撳崟鏄庣粏瀛樺湪鍑哄簱涓垨宸插畬鎴�");
+                }
+                List<Dt_NewOutboundOrder> outboundOrders = _outboundService.NewOutboundOrderService.Repository.QueryData(x => keys.Contains(x.Id));
+                List<Dt_StockInfo> stockInfos = _stockService.StockInfoService.Repository.QueryData(x => outboundOrderDetails.Select(s => s.LPNNo).Contains(x.PalletCode));
+                if (outboundOrderDetails == null || outboundOrderDetails.Count == 0)
+                {
+                    throw new Exception("鏈壘鍒板簱瀛樹俊鎭�");
+                }
+                var Newtasks = GetTasks(stockInfos, TaskTypeEnum.OutProduct);
+                List<Dt_StockInfoDetail> stockInfoDetails = _stockService.StockInfoDetailService.Repository.QueryData(x => stockInfos.Select(x => x.Id).Contains(x.StockId));
+                foreach (var item in outboundOrderDetails)
+                {
+                    Dt_StockInfo? stockInfo = stockInfos.FirstOrDefault(x => x.PalletCode == item.LPNNo);
+                    if (stockInfo == null) continue;
+                    Dt_StockInfoDetail? stockInfoDetail = stockInfoDetails.FirstOrDefault(x => x.StockId == stockInfo.Id && x.BatchNo == item.BatchNo);
+                    if (stockInfoDetail == null) continue;
+                    stockInfoDetail.OutboundQuantity += item.OrderQuantity;
+                    item.LockQuantity += item.OrderQuantity;
+                    var outboundOrder = outboundOrders.FirstOrDefault(x => x.Id == item.OrderId);
+                    Dt_OutStockLockInfo outStockLockInfo = _outboundService.OutboundStockLockInfoService.GetOutStockLockInfo(outboundOrder, item, stockInfo, item.OrderQuantity);
+                    outStockLockInfo.Status = OutStockStatus.鍑哄簱涓�.ObjToInt();
+                    item.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
+                    outboundOrder.OrderStatus = OutboundStatusEnum.鍑哄簱涓�.ObjToInt();
+                    var task = Newtasks.FirstOrDefault(x => x.PalletCode == item.LPNNo);
+                    task.OrderNo = outboundOrder.OrderNo;
+                    tasks.Add(task);
+                    outStockLockInfo.TaskNum = task.TaskNum;
+                    outStockLockInfos.Add(outStockLockInfo);
+                }
+                locationInfos.AddRange(_basicService.LocationInfoService.Repository.GetLocationInfos(stockInfos.Select(x => x.LocationCode).ToList()));
+
+                _unitOfWorkManage.BeginTran();
+
+                BaseDal.AddData(tasks);
+                _stockService.StockInfoService.Repository.UpdateData(stockInfos);
+                _stockService.StockInfoDetailService.Repository.UpdateData(stockInfoDetails);
+                _outboundService.NewOutboundOrderDetailService.Repository.UpdateData(outboundOrderDetails);
+                _outboundService.NewOutboundOrderService.Repository.UpdateData(outboundOrders);
+                _outboundService.OutboundStockLockInfoService.Repository.AddData(outStockLockInfos);
+                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfos, LocationStatusEnum.Lock.ObjToInt(), StockChangeType.Outbound.ObjToInt(), "", tasks?.Select(x => x.TaskNum).ToList());
+                _basicService.LocationInfoService.Repository.UpdateLocationStatus(locationInfos, LocationStatusEnum.Lock);
+
+                _unitOfWorkManage.CommitTran();
+                //灏嗕换鍔℃帹閫佸埌WCS
+                return PushTasksToWCS(tasks);
+            }
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+    }
+}
diff --git a/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs b/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs
index 929f2b2..026bc56 100644
--- a/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs
+++ b/WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs
@@ -41,6 +41,12 @@
         {
             return Service.WMSGenerateOutboundTask(keys);
         }
+
+        [HttpPost, Route("WMSGenerateNewOutboundTask"), AllowAnonymous]
+        public WebResponseContent WMSGenerateNewOutboundTask([FromBody] int[] keys)
+        {
+            return Service.WMSGenerateNewOutboundTask(keys);
+        }
         /// <summary>
         /// WCS鐢宠鍏ュ簱浠诲姟
         /// </summary>

--
Gitblit v1.9.3