1
dengjunjie
2025-12-29 8adbc609ea7b5982d5c7bd3c47beb2fa775c5399
1
已添加11个文件
已修改6个文件
483 ■■■■■ 文件已修改
WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/INewOutboundOrderDetailRepository.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/INewOutboundOrderRepository.cs 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/INewOutboundOrderDetailService.cs 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/INewOutboundOrderService.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutStockLockInfoService.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundService.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_ITaskInfoService/ITaskService.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_NewOutboundOrder.cs 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_NewOutboundOrderDetail.cs 103 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/NewOutboundOrderDetailRepository.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/NewOutboundOrderRepository.cs 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/NewOutboundOrderDetailService.cs 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/NewOutboundOrderService.cs 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Service/OutStockLockInfoService.cs 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/NewPartialTaskService_Outbound.cs 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/TaskInfo/TaskController.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/INewOutboundOrderDetailRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
using 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>
    {
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_IOutboundRepository/INewOutboundOrderRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
using 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>
    {
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/INewOutboundOrderDetailService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
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.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; }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/INewOutboundOrderService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
using 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; }
    }
}
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);
    }
}
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; }
    }
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);
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_NewOutboundOrder.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,60 @@
using 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; }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Outbound/Dt_NewOutboundOrderDetail.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,103 @@
using 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; }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/NewOutboundOrderDetailRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
using 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)
        {
        }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_OutboundRepository/NewOutboundOrderRepository.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
using 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)
        {
        }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/NewOutboundOrderDetailService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
using 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;
        }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/NewOutboundOrderService.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,49 @@
using 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;
        }
    }
}
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;
        }
    }
}
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;
        }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/NewPartialTaskService_Outbound.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,83 @@
using 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);
            }
        }
    }
}
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>