1
yangpeixing
2026-02-04 e4a391c581aaca1fa7b0239bc96375d0c0cb8de6
1
已添加1个文件
已修改14个文件
604 ■■■■ 文件已修改
WMS/WIDESEA_WMSServer/WIDESEA_Common/HouseInbound.cs 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_Common/NewHouseInboundPassBack.cs 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/OrderEnum.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrderService.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_InboundService/Base/InboundOrderService.cs 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_CPInboundOrderDetail.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/Dt_StockInfoDetailCP.cs 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/OutboundOrderService.cs 144 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Service/NewOutboundOrderDetailService.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_StockService/Service/StockInfoService.cs 51 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/NewPartialTaskService_Outbound.cs 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs 182 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderController.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WMS/WIDESEA_WMSServer/WIDESEA_Common/HouseInbound.cs
@@ -31,8 +31,11 @@
        /// <summary>
        /// å‡ºå…¥åº“类型
        /// </summary>
        public int InoutType { get; set; }
        public decimal InoutType { get; set; }
        /// <summary>
        /// åˆ›å»ºè€…
        /// </summary>
        public string CreateBy { get; set; }
        /// <summary>
        /// æŽ¨å•系统
        /// </summary>
@@ -88,7 +91,7 @@
    public class BoxList
    {
        public float BoxId { get; set; }
        public double BoxId { get; set; }
        public string BoxCode { get; set; }
@@ -96,10 +99,14 @@
        public string PartNum { get; set; }
        public float JobId { get; set; }
        public decimal JobId { get; set; }
        public float QtyOfpcs { get; set; }
        public decimal QtyOfpcs { get; set; }
        public float QtyOfxout { get; set; }
        public decimal QtyOfxout { get; set; }
        public string LPNNO { get; set; }
        public string OrinalLocation { get; set; }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_Common/NewHouseInboundPassBack.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,89 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static WIDESEA_Common.NewHouseInboundPassBack.Parame.Syncretism;
namespace WIDESEA_Common
{
    public class NewHouseInboundPassBack
    {
        public List<Parame> Parameters = new List<Parame>();
        public string ApiType { get; set; }
        public string Method { get; set; }
        public Dictionary<string, string> Context { get; set; }
        public class Parame
        {
            public Syncretism Value = new Syncretism();
            public class Syncretism
            {
                public string OrderNo { get; set; }
                public List<details> Details = new List<details>();
                public class details
                {
                    /// <summary>
                    /// åŽŸå§‹LPN
                    /// </summary>
                    public string Lpn { get; set; }
                    /// <summary>
                    /// ç§»åº“单类型
                    /// </summary>
                    public int MoveType { get; set; }
                    /// <summary>
                    /// ä»“库 (发货仓库)
                    /// </summary>
                    public string WareHouseCode { get; set; }
                    /// <summary>
                    /// ç‰©æ–™ç¼–码
                    /// </summary>
                    public string ItemCode { get; set; }
                    /// <summary>
                    /// ç§»åº“数量
                    /// </summary>
                    public decimal MoveNumber { get; set; }
                    /// <summary>
                    /// ç‰©æ–™æ‰¹æ¬¡
                    /// </summary>
                    public string LotNo { get; set; }
                    /// <summary>
                    /// ç”Ÿäº§æ‰¹æ¬¡
                    /// </summary>
                    public string WipBatch { get; set; }
                    /// <summary>
                    /// æ¥æºåº“位
                    /// </summary>
                    public string LocationName { get; set; }
                    /// <summary>
                    /// ç›®æ ‡åº“位
                    /// </summary>
                    public string TargetLocName { get; set; }
                    /// <summary>
                    /// ç›®æ ‡LPN
                    /// </summary>
                    public string TargetLpn { get; set; }
                }
            }
        }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_Core/Enums/OrderEnum.cs
@@ -225,6 +225,12 @@
        /// </summary>
        [Description("生产入库单")]
        works = 2,
        /// <summary>
        /// è°ƒæ‹¨å‡ºåº“单
        /// </summary>
        [Description("调拨出库单")]
        Allocate = 4,
        /// <summary>
        /// ç”Ÿäº§è¿”工单
        /// </summary>
@@ -243,11 +249,7 @@
        [Description("采购退货单")]
        ProcureReturn = 210,
        /// <summary>
        /// è°ƒæ‹¨å‡ºåº“单
        /// </summary>
        [Description("调拨出库单")]
        Allocate = 215,
        /// <summary>
        /// é”€å”®å‡ºåº“单
WMS/WIDESEA_WMSServer/WIDESEA_IOutboundService/IOutboundOrderService.cs
@@ -20,6 +20,7 @@
        WebResponseContent CancelOut(HouseCancelOut houseCancelOut);
        WebResponseContent NewCancelOut(HouseCancelOut houseCancelOut);
        WebResponseContent Save(OutboundOrderAddDTO orderAddDTO);
        WebResponseContent GetCodeByWarehouse(int warehouseId);
WMS/WIDESEA_WMSServer/WIDESEA_InboundService/Base/InboundOrderService.cs
@@ -553,7 +553,7 @@
        /// <param name="materielGroupDTO"></param>
        /// <returns></returns>
        #region
        public WebResponseContent CP1MaterielGroup(SaveModel saveModel)
        public WebResponseContent CPMaterielGroup(SaveModel saveModel)
        {
            WebResponseContent content = new WebResponseContent();
            try
@@ -762,6 +762,8 @@
                            QtyOfpcs = item.QtyOfpcs,
                            QtyOfxout = item.QtyOfxout,
                            CPStockDetailStatus = (int)StockStatusEmun.组盘暂存,
                            LPNNO = item.LPNNO,
                            OrinalLocation = item.OrinalLocation,
                            Creater = "上游WMS",
                        };
                        stockInfoDetailCP.Add(stockInfoDetailCP1);
@@ -854,7 +856,7 @@
        #endregion
        public WebResponseContent CPMaterielGroup(SaveModel saveModel)
        public WebResponseContent CP1MaterielGroup(SaveModel saveModel)
        {
            WebResponseContent content = new WebResponseContent();
            try
@@ -1127,6 +1129,7 @@
        }
        public string ReceiveWMSTaskin = WIDESEA_Core.Helper.AppSettings.Configuration["ReceiveWMSTaskin"];
        /// <summary>
        /// ç»„盘合托
        /// </summary>
@@ -1407,10 +1410,6 @@
                    }
                    if (warehouse.WarehouseCode.Contains("CP"))
                    {
                        if (item.SupplierBatch == null)
                        {
                            return content.Error("供应商批次不可为空");
                        }
                        Dt_InboundOrder inboundOrderOld = BaseDal.Db.Queryable<Dt_InboundOrder>().Where(x => x.UpperOrderNo == model.AsnNo).Includes(x => x.Details).First();
                        if (inboundOrderOld != null)
@@ -1442,6 +1441,8 @@
                                        QtyOfpcs = (float)list.QtyOfpcs,
                                        QtyOfxout = (float)list.QtyOfxout,
                                        CPOrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(),
                                        LPNNO = list.LPNNO,
                                        OrinalLocation = list.OrinalLocation,
                                        Creater = "上游WMS",
                                    };
                                    cPInboundOrderDetail.Add(cPInboundOrderDetail1);
@@ -1484,6 +1485,8 @@
                                    QtyOfpcs = (float)list.QtyOfpcs,
                                    QtyOfxout = (float)list.QtyOfxout,
                                    CPOrderDetailStatus = OrderDetailStatusEnum.New.ObjToInt(),
                                    LPNNO = list.LPNNO,
                                    OrinalLocation = list.OrinalLocation,
                                    Creater = "上游WMS",
                                };
                                cPInboundOrderDetail.Add(cPInboundOrderDetail1);
@@ -1506,7 +1509,6 @@
                                OrinalLocation = item.OrinalLocation,
                                CPDetails = cPInboundOrderDetail
                            };
                            Dt_InboundOrder inboundOrder = new Dt_InboundOrder()
                            {
                                OrderNo = model.AsnNo,
@@ -1544,10 +1546,10 @@
                    }
                    else
                    {
                        if (item.SupplierBatch == null)
                        {
                            return content.Error("供应商批次不可为空");
                        }
                        //if (item.SupplierBatch == null)
                        //{
                        //    return content.Error("供应商批次不可为空");
                        //}
                        Dt_InboundOrder inboundOrderOld = BaseDal.Db.Queryable<Dt_InboundOrder>().Where(x => x.UpperOrderNo == model.AsnNo).Includes(x => x.Details).First();
                        if (inboundOrderOld != null)
WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Inbound/Dt_CPInboundOrderDetail.cs
@@ -40,5 +40,11 @@
        [SugarColumn(IsNullable = false, ColumnDescription = "状态")]
        public int CPOrderDetailStatus { get; set; }
        [SugarColumn(IsNullable = true, ColumnDescription = "LPNNO")]
        public string LPNNO { get; set; }
        [SugarColumn(IsNullable = true, ColumnDescription = "WMS源库位")]
        public string  OrinalLocation { get; set; }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_Model/Models/Stock/Dt_StockInfoDetailCP.cs
@@ -41,5 +41,11 @@
        [SugarColumn(IsNullable = false, ColumnDescription = "状态")]
        public int CPStockDetailStatus { get; set; }
        
        [SugarColumn(IsNullable = true, ColumnDescription = "LPNNO")]
        public string LPNNO { get; set; }
        [SugarColumn(IsNullable = true, ColumnDescription = "WMS源库位")]
        public string OrinalLocation { get; set; }
    }
}
WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Base/OutboundOrderService.cs
@@ -187,6 +187,7 @@
                        return WebResponseContent.Instance.Error("此单据已开始执行,不允许取消");
                    }
                    oldOutboundOrder.OrderStatus = OutboundStatusEnum.取消.ObjToInt();
                    _unitOfWorkManage.BeginTran();
                    BaseDal.UpdateData(oldOutboundOrder);
                    Dt_OutboundOrder_Hty inboundOrder_Hty = new Dt_OutboundOrder_Hty
@@ -223,31 +224,134 @@
                    }
                    BaseDal.DeleteData(oldOutboundOrder);
                }
                Dt_NewOutboundOrder dt_NewOutboundOrder = BaseDal.Db.Queryable<Dt_NewOutboundOrder>().Where(x => x.OrderNo == orderAddDTO1.OrderNo).Includes(x => x.Details).First();
                if (dt_NewOutboundOrder == null)
                {
                    return WebResponseContent.Instance.Error("未找到此出库单据");
                }
                if (dt_NewOutboundOrder != null)
                {
                _unitOfWorkManage.CommitTran();
                //Dt_NewOutboundOrder dt_NewOutboundOrder = BaseDal.Db.Queryable<Dt_NewOutboundOrder>().Where(x => x.OrderNo == orderAddDTO1.OrderNo).Includes(x => x.Details).First();
                //if (dt_NewOutboundOrder == null)
                //{
                //    return WebResponseContent.Instance.Error("未找到此出库单据");
                //}
                //if (dt_NewOutboundOrder != null)
                //{
                    if (dt_NewOutboundOrder.OrderStatus > OutOrderStatusEnum.未开始.ObjToInt())
                    {
                        return WebResponseContent.Instance.Error("此单据已开始执行,不允许取消");
                    }
                    List<Dt_NewOutboundOrderDetail> newOutboundOrderDetail = BaseDal.Db.Queryable<Dt_NewOutboundOrderDetail>().Where(x => x.OrderId == dt_NewOutboundOrder.Id).ToList();
                    dt_NewOutboundOrder.OrderStatus = OutboundStatusEnum.取消.ObjToInt();
                    foreach (var item in newOutboundOrderDetail)
                    {
                        item.OrderDetailStatus = OutboundStatusEnum.取消.ObjToInt();
                    }
                    _newOutboundOrderService.UpdateData(dt_NewOutboundOrder);
                    _newOutboundOrderDetailService.UpdateData(newOutboundOrderDetail);
                }
                //    if (dt_NewOutboundOrder.OrderStatus > OutOrderStatusEnum.未开始.ObjToInt())
                //    {
                //        return WebResponseContent.Instance.Error("此单据已开始执行,不允许取消");
                //    }
                //    List<Dt_NewOutboundOrderDetail> newOutboundOrderDetail = BaseDal.Db.Queryable<Dt_NewOutboundOrderDetail>().Where(x => x.OrderId == dt_NewOutboundOrder.Id).ToList();
                //    dt_NewOutboundOrder.OrderStatus = OutboundStatusEnum.取消.ObjToInt();
                //    foreach (var item in newOutboundOrderDetail)
                //    {
                //        item.OrderDetailStatus = OutboundStatusEnum.取消.ObjToInt();
                //    }
                //    _newOutboundOrderService.UpdateData(dt_NewOutboundOrder);
                //    _newOutboundOrderDetailService.UpdateData(newOutboundOrderDetail);
                //}
                content = WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                content = WebResponseContent.Instance.Error(ex.Message);
            }
            finally
            {
            }
            return content;
        }
        /// <summary>
        /// æˆå“å‡ºåº“单据取消
        /// </summary>
        /// <param name="houseCancelOut"></param>
        /// <returns></returns>
        public WebResponseContent NewCancelOut(HouseCancelOut houseCancelOut)
        {
            WebResponseContent content = new();
            try
            {
                OutboundOrderAddDTO orderAddDTO1 = new OutboundOrderAddDTO();
                orderAddDTO1.OrderNo = houseCancelOut.No;
                orderAddDTO1.Details = houseCancelOut.DetailList.DicToIEnumerable<OutboundOrderDetailAddDTO>();
                Dt_NewOutboundOrder? oldOutboundOrder = BaseDal.Db.Queryable<Dt_NewOutboundOrder>().Where(x => x.OrderNo == orderAddDTO1.OrderNo).Includes(x => x.Details).First();
                if (oldOutboundOrder == null)
                {
                    return WebResponseContent.Instance.Error("未找到此出库单据");
                }
                if (oldOutboundOrder != null)
                {
                    Dt_NewOutboundOrderDetail OutboundOrderDetail = BaseDal.Db.Queryable<Dt_NewOutboundOrderDetail>().Where(x => x.OrderId == oldOutboundOrder.Id).First();
                    if (oldOutboundOrder.OrderStatus > OutOrderStatusEnum.未开始.ObjToInt())
                    {
                        return WebResponseContent.Instance.Error("此单据已开始执行,不允许取消");
                    }
                    oldOutboundOrder.OrderStatus = OutboundStatusEnum.取消.ObjToInt();
                    _unitOfWorkManage.BeginTran();
                    _newOutboundOrderService.UpdateData(oldOutboundOrder);
                    Dt_OutboundOrder_Hty inboundOrder_Hty = new Dt_OutboundOrder_Hty
                    {
                        OrderStatus = oldOutboundOrder.OrderStatus,
                        CreateType = oldOutboundOrder.CreateType,
                        //SourceId = oldOutboundOrder.SourceId,
                        UpperOrderNo = oldOutboundOrder.UpperOrderNo,
                        OrderNo = oldOutboundOrder.OrderNo,
                        OutWareHouse = oldOutboundOrder.OutWareHouse,
                        TransactionCode = oldOutboundOrder.TransactionCode,
                        InoutType = oldOutboundOrder.InoutType,
                        OrderType = oldOutboundOrder.OrderType,
                        Creater = "WMS",
                        CreateDate = DateTime.Now,
                    };
                    _outboundOrder_HtyService.AddData(inboundOrder_Hty);
                    foreach (var item in oldOutboundOrder.Details)
                    {
                        Dt_OutboundOrderDetail_Hty dt_InboundOrderDetail_Hty = new Dt_OutboundOrderDetail_Hty
                        {
                            OrderId = OutboundOrderDetail.OrderId,
                            MaterielCode = OutboundOrderDetail.MaterielCode,
                            MaterielName = OutboundOrderDetail.MaterielName,
                            BatchNo = OutboundOrderDetail.BatchNo,
                            OrderQuantity = OutboundOrderDetail.OrderQuantity,
                            OrderDetailStatus = OutboundOrderDetail.OrderDetailStatus,
                            Creater = "WMS",
                            CreateDate = DateTime.Now,
                        };
                        _outboundOrderDetail_HtyService.AddData(dt_InboundOrderDetail_Hty);
                        _newOutboundOrderDetailService.DeleteData(item);
                    }
                    _newOutboundOrderService.DeleteData(oldOutboundOrder);
                }
                _unitOfWorkManage.CommitTran();
                //Dt_NewOutboundOrder dt_NewOutboundOrder = BaseDal.Db.Queryable<Dt_NewOutboundOrder>().Where(x => x.OrderNo == orderAddDTO1.OrderNo).Includes(x => x.Details).First();
                //if (dt_NewOutboundOrder == null)
                //{
                //    return WebResponseContent.Instance.Error("未找到此出库单据");
                //}
                //if (dt_NewOutboundOrder != null)
                //{
                //    if (dt_NewOutboundOrder.OrderStatus > OutOrderStatusEnum.未开始.ObjToInt())
                //    {
                //        return WebResponseContent.Instance.Error("此单据已开始执行,不允许取消");
                //    }
                //    List<Dt_NewOutboundOrderDetail> newOutboundOrderDetail = BaseDal.Db.Queryable<Dt_NewOutboundOrderDetail>().Where(x => x.OrderId == dt_NewOutboundOrder.Id).ToList();
                //    dt_NewOutboundOrder.OrderStatus = OutboundStatusEnum.取消.ObjToInt();
                //    foreach (var item in newOutboundOrderDetail)
                //    {
                //        item.OrderDetailStatus = OutboundStatusEnum.取消.ObjToInt();
                //    }
                //    _newOutboundOrderService.UpdateData(dt_NewOutboundOrder);
                //    _newOutboundOrderDetailService.UpdateData(newOutboundOrderDetail);
                //}
                content = WebResponseContent.Instance.OK();
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                content = WebResponseContent.Instance.Error(ex.Message);
            }
            finally
WMS/WIDESEA_WMSServer/WIDESEA_OutboundService/Service/NewOutboundOrderDetailService.cs
@@ -64,7 +64,7 @@
                foreach (var stockInfoDetail in dt_StockInfoDetails)
                {
                    dt_StockInfo = _stockService.StockInfoService.Repository.QueryFirst(x => x.Id == stockInfoDetail.StockId && x.StockStatus == StockStatusEmun.入库完成.ObjToInt());
                    if (dt_StockInfo != null)
                    if (dt_StockInfo != null && !PalletCodes.Any(x => x == dt_StockInfo.PalletCode))
                    {
                        PalletCodes.Add(dt_StockInfo.PalletCode);
                    }
@@ -127,7 +127,7 @@
                            decimal needQuantity = originalNeedQuantity - item.LockQuantity;
                            item.LockQuantity += needQuantity - residueQuantity.NewNeendQuantity;
                            //item.LockQuantity += needQuantity - residueQuantity.NewNeendQuantity;
                            decimal assignQuantity = needQuantity - residueQuantity.NewNeendQuantity;
WMS/WIDESEA_WMSServer/WIDESEA_StockService/Service/StockInfoService.cs
@@ -342,10 +342,12 @@
        {
            List<Dt_StockInfo> outStocks = new List<Dt_StockInfo>();
            List<IStockInfoService.residueQuantity> newresidueQantity = new List<IStockInfoService.residueQuantity>();
            List<Dt_StockInfo> notStocks = new List<Dt_StockInfo>(); ;
            List<Dt_StockInfo> notStocks = new List<Dt_StockInfo>();
            foreach (var dt_OutboundOrderDetail in dt_OutboundOrderDetails)
            {
                notStocks = stockInfos.Where(x => x.Details.Any(x =>x.MaterielCode == dt_OutboundOrderDetail.MaterielCode)).OrderBy(x => x.Id).ToList();
                if (notStocks.Count > 0)
                {
                    decimal stockTotalQuantity = stockInfos.SelectMany(x => x.Details).Where(d => d.MaterielCode == dt_OutboundOrderDetail.MaterielCode).Sum(v => v.StockQuantity - v.OutboundQuantity);
@@ -357,48 +359,51 @@
                        {
                            Dt_StockInfo stockInfo = stockInfos[index];
                            Dt_StockInfoDetail dt_StockInfoDetail = new Dt_StockInfoDetail();
                            List<Dt_StockInfoDetail> dt_StockInfoDetails = new List<Dt_StockInfoDetail>();
                            foreach (var detail in stockInfo.Details)
                            {
                                if (detail.MaterielCode == dt_OutboundOrderDetail.MaterielCode)
                                {
                                    dt_StockInfoDetail = detail;
                                    dt_StockInfoDetails.Add(detail);
                                }
                            }
                            foreach(var dt_StockInfoDetail in dt_StockInfoDetails)
                            {
                            decimal useableStockQuantity = dt_StockInfoDetail.StockQuantity - dt_StockInfoDetail.OutboundQuantity;
                            if (useableStockQuantity < needQuantity)
                            {
                                stockInfo.Details.ForEach(x =>
                                    foreach (var item in stockInfo.Details)
                                {
                                    if (x.MaterielCode == dt_OutboundOrderDetail.MaterielCode)
                                        if(item.MaterielCode == dt_OutboundOrderDetail.MaterielCode && dt_StockInfoDetail.BatchNo == item.BatchNo)
                                    {
                                        x.OutboundQuantity = x.StockQuantity;
                                            item.OutboundQuantity = item.StockQuantity;
                                    }
                                });
                                    }
                                needQuantity -= useableStockQuantity;
                            }
                            else
                            {
                                stockInfo.Details.ForEach(x =>
                                    foreach (var item in stockInfo.Details)
                                {
                                    if (x.StockQuantity > x.OutboundQuantity && x.MaterielCode == dt_OutboundOrderDetail.MaterielCode)
                                        if(item.StockQuantity > item.OutboundQuantity && item.MaterielCode == dt_StockInfoDetail.MaterielCode && item.BatchNo == dt_StockInfoDetail.BatchNo)
                                    {
                                        if (x.StockQuantity - x.OutboundQuantity >= needQuantity)
                                            if (item.StockQuantity - item.OutboundQuantity >= needQuantity)
                                        {
                                            x.OutboundQuantity += needQuantity;
                                                dt_StockInfoDetail.OutboundQuantity += needQuantity;
                                            needQuantity = 0;
                                        }
                                        else
                                        {
                                            needQuantity -= (x.StockQuantity - x.OutboundQuantity);
                                            x.OutboundQuantity = x.StockQuantity;
                                                needQuantity -= (item.StockQuantity - item.OutboundQuantity);
                                                item.OutboundQuantity = item.StockQuantity;
                                        }
                                    }
                                });
                                    }
                            }
                            outStocks.Add(stockInfo);
                            index++;
                                if (needQuantity == 0) break;
                            }
                        }
                    }
                    else
@@ -411,7 +416,7 @@
                            {
                                if (detail.MaterielCode == dt_OutboundOrderDetail.MaterielCode)
                                {
                                    useableStockQuantity = detail.StockQuantity - detail.OutboundQuantity;
                                    useableStockQuantity += detail.StockQuantity - detail.OutboundQuantity;
                                }
                            }
@@ -427,22 +432,22 @@
                            }
                            else
                            {
                                stockInfo.Details.ForEach(x =>
                                foreach (var detail in stockInfo.Details)
                                {
                                    if (x.StockQuantity > x.OutboundQuantity && x.MaterielCode == dt_OutboundOrderDetail.MaterielCode)
                                    if(detail.StockQuantity > detail.OutboundQuantity && detail.MaterielCode == dt_OutboundOrderDetail.MaterielCode)
                                    {
                                        if (x.StockQuantity - x.OutboundQuantity >= needQuantity)
                                        if(detail.StockQuantity - detail.OutboundQuantity >= needQuantity)
                                        {
                                            x.OutboundQuantity += needQuantity;
                                            detail.OutboundQuantity += needQuantity;
                                            needQuantity = 0;
                                        }
                                        else
                                        {
                                            needQuantity -= (x.StockQuantity - x.OutboundQuantity);
                                            x.OutboundQuantity = x.StockQuantity;
                                            needQuantity -= (detail.StockQuantity - detail.OutboundQuantity);
                                            detail.OutboundQuantity = detail.StockQuantity;
                                        }
                                    }
                                });
                                }
                            }
                            outStocks.Add(stockInfo);
                        }
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/NewPartialTaskService_Outbound.cs
@@ -39,7 +39,7 @@
                {
                    throw new Exception("所选出库单明细存在出库中或已完成");
                }
                if (outboundOrderDetails.FirstOrDefault()?.LPNNo == null)
                if (outboundOrderDetails.FirstOrDefault()?.LPNNo == null || outboundOrderDetails.FirstOrDefault()?.LPNNo == "")
                {
                    outboundOrderDetails.Clear();
                    try
@@ -412,9 +412,39 @@
                    if (stockInfoDetailCPList != null)
                    {
                        _stockInfoDetailCPRepository.DeleteAndMoveIntoHty(stockInfoDetailCPList, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
                        foreach(var stockLPNO in houseStockDetail.DetailList)
                        {
                            Dt_StockInfo dt_StockInfo = BaseDal.Db.Queryable<Dt_StockInfo>().Where(x => x.PalletCode == stockLPNO.LPNNo).Includes(x => x.Details).First();
                            for (int i = 0; i<stockInfoDetailCPList.Count(); i++)
                            {
                                foreach (var item1 in dt_StockInfo.Details)
                                {
                                    foreach (var batchNos in houseStockDetail.DetailList)
                                    {
                                        if (stockInfoDetailCPList[i].PartNum == item1.MaterielCode && batchNos.BatchNo == item.BatchNo)
                                        {
                                            item1.StockQuantity-=(decimal)stockInfoDetailCPList[i].QtyOfpcs;
                                            item1.OutboundQuantity = 0;
                                            _stockInfoDetailRepository.UpdateData(item1);
                    }
                                        if (item1.StockQuantity == 0)
                                        {
                                            _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(item1, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
                                        }
                                        //全部都出库 åˆ é™¤åº“å­˜
                                        if (dt_StockInfo.Details.Sum(x => x.StockQuantity) == 0)
                                        {
                                            _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(dt_StockInfo, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
                                        }
                                    }
                                }
                            }
                        }
                }
                _unitOfWorkManage.CommitTran();
                }
            }
            catch (Exception ex)
            {
@@ -466,11 +496,17 @@
                    });
                    result.Item2.ForEach(x =>
                    {
                        x.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
                        foreach(var item in result.Item2)
                        {
                            if(item.LockQuantity > 0)
                            {
                                item.OrderDetailStatus = OrderDetailStatusEnum.Outbound.ObjToInt();
                            }
                        }
                    });
                    result.Item3.ForEach(x =>
                    {
                        x.Status = OutStockStatus.出库中.ObjToInt();
                    });
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Inbound.cs
@@ -26,6 +26,7 @@
    public partial class TaskService
    {
        /// <summary>
        /// ä»…申请任务,让WCS根据路由确定下一地址
        /// </summary>
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_Outbound.cs
@@ -333,6 +333,16 @@
                    inboundOrder.CreateDate = DateTime.Now;
                    inboundOrder.CreateType = CreateType.UpperSystemPush.ObjToInt();
                    _unitOfWorkManage.BeginTran();
                    Dt_NewOutboundOrder dt_NewOutboundOrder = BaseDal.Db.Queryable<Dt_NewOutboundOrder>().Where(x => x.OrderNo == inboundOrder.OrderNo).Includes(x => x.Details).First();
                    if(dt_NewOutboundOrder != null)
                    {
                        if (dt_NewOutboundOrder.OrderStatus > 0)
                        {
                            return WebResponseContent.Instance.Error($"该出库单在进行中,无法更新该出库单");
                        }
                        Db.DeleteNav(dt_NewOutboundOrder).Include(x => x.Details).ExecuteCommand();
                    }
                    bool a = BaseDal.Db.InsertNav(inboundOrder).Include(x => x.Details).ExecuteCommand();
                    foreach (var item in orderAddDTO1.Details)
@@ -684,7 +694,7 @@
            }
        }
        /// <summary>
        /// ç”Ÿæˆå‡ºåº“任务
        /// ç”Ÿæˆâ€˜ä»»åŠ¡
        /// </summary>
        /// <param name="orderDetailId"></param>
        /// <param name="stockSelectViews"></param>
WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -20,20 +20,30 @@
using Microsoft.AspNetCore.SignalR;
using Newtonsoft.Json;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Database;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
using Org.BouncyCastle.Asn1.Tsp;
using Spire.Pdf;
using SqlSugar;
using System;
using System;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Diagnostics.CodeAnalysis;
using System.Drawing.Printing;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Reflection;
using System.Reflection.Metadata;
using System.Text;
using System.Threading.Tasks;
using System.Threading.Tasks;
using WIDESEA_BasicRepository;
using WIDESEA_Common;
using WIDESEA_Common.Log;
using WIDESEA_Common.OrderEnum;
using WIDESEA_Common.TaskEnum;
using WIDESEA_Core;
@@ -43,6 +53,7 @@
using WIDESEA_Core.Helper;
using WIDESEA_Core.TaskEnum;
using WIDESEA_DTO.Basic;
using WIDESEA_DTO.ERP;
using WIDESEA_DTO.Inbound;
using WIDESEA_DTO.Stock;
using WIDESEA_DTO.Task;
@@ -50,6 +61,7 @@
using WIDESEA_IBasicService;
using WIDESEA_IInboundRepository;
using WIDESEA_IInboundService;
using WIDESEA_InboundRepository;
using WIDESEA_IOutboundRepository;
using WIDESEA_IOutboundService;
using WIDESEA_IRecordService;
@@ -59,28 +71,19 @@
using WIDESEA_ITaskInfoService;
using WIDESEA_Model.Models;
using WIDESEA_Model.Models.Inbound;
using WIDESEA_OutboundRepository;
using WIDESEA_StockRepository;
using WIDESEA_TaskInfoRepository;
using static WIDESEA_Common.Authentication;
using static WIDESEA_Common.HouseBackboundPassBack;
using static WIDESEA_Common.HouseInboundPassBack;
using static WIDESEA_Common.HouseInboundPassBack.data.data1;
using static WIDESEA_Common.HouseoutboundPassBack;
using static WIDESEA_Common.InventoryAllocate;
using static WIDESEA_Common.NewHouseInboundPassBack;
using static WIDESEA_Common.NewHouseInboundPassBack.Parame.Syncretism;
using static WIDESEA_ITaskInfoService.ITaskService;
using Parameter = WIDESEA_Common.Parameter;
using WIDESEA_DTO.ERP;
using WIDESEA_OutboundRepository;
using System.ComponentModel.DataAnnotations;
using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
using Spire.Pdf;
using WIDESEA_InboundRepository;
using System.Drawing.Printing;
using System;
using WIDESEA_Common.Log;
using static WIDESEA_Common.HouseInboundPassBack.data.data1;
namespace WIDESEA_TaskInfoService
{
@@ -720,6 +723,7 @@
                                }
                                if (inboundOrder.OrderStatus == InboundStatusEnum.入库完成.ObjToInt() && inboundOrder.OrderType == 0 && inboundOrder.System.Equals("SMOM"))
                                {
                                    List<Dt_StockInfo> StockInfos = _stockRepository.StockInfoRepository.Db
                                        .Queryable<Dt_StockInfo>()
                                        .Includes(x => x.Details, d => d.StockDetails)
@@ -872,7 +876,79 @@
                                        }
                                    }
                                }
                                else if (inboundOrder.OrderStatus == InboundStatusEnum.入库完成.ObjToInt() && inboundOrder.OrderType == 5 && inboundOrder.System.Equals("SMOM"))
                                {
                                    List<Dt_StockInfo> StockInfos = _stockRepository.StockInfoRepository.Db
                                         .Queryable<Dt_StockInfo>()
                                         .Includes(x => x.Details, d => d.StockDetails)
                                         .Where(x => x.WarehouseId == task.WarehouseId &&
                                                     x.Details.Any(v => v.OrderNo == inboundOrder.OrderNo))
                                         .ToList();
                                    Dt_InboundOrder? dt_InboundOrder = _inboundService.InbounOrderService.Db.Queryable<Dt_InboundOrder>().Where(x => x.OrderNo == inboundOrder.OrderNo).Includes(x => x.Details).First();
                                    if (StockInfos.Count  == 0) throw new Exception("未找到库存信息");
                                    var houseSyncretism = new NewHouseInboundPassBack
                                    {
                                        ApiType = "InventoryMoveController",
                                        Method = "AsrsUnPickingDatas",
                                        Parameters = new List<NewHouseInboundPassBack.Parame>
                                        {
                                            new NewHouseInboundPassBack.Parame
                                            {
                                                Value =  new Parame.Syncretism
                                                    {
                                                        OrderNo = inboundOrder.OrderNo,
                                                        Details =   StockInfos.SelectMany(stockInfo =>
                                                    stockInfo.Details.Select(g =>
                                                    {
                                                       //var InboundOrderde1=dt_InboundOrder.Details.FirstOrDefault;
                                                       return new Parame.Syncretism.details
                                                       {
                                                        MoveType = 0,
                                                        WareHouseCode = warehouse.WarehouseCode,
                                                        ItemCode = g.MaterielCode,
                                                        MoveNumber = g.StockQuantity,
                                                        LotNo = g.BatchNo,
                                                        WipBatch = g.BatchNo,
                                                        Lpn = g.StockDetails.FirstOrDefault().LPNNO,
                                                        LocationName = g.StockDetails.FirstOrDefault().OrinalLocation,
                                                        TargetLocName = stockInfo.LocationCode, // æ·»åŠ null检查
                                                        TargetLpn = stockInfo.PalletCode, // æ·»åŠ null检查
                                                       };
                                                    })).ToList()
                                                    }
                                            }
                                        }
                                    };
                                    var authResult = AuthenticateWithWMS();
                                    if (authResult.IsSuccess)
                                    {
                                        houseSyncretism.Context = new Dictionary<string, string>
                                            {
                                                { "Ticket", authResult.Ticket },
                                                { "InvOrgId", authResult.InvOrgId }
                                            };
                                        var response = HttpHelper.Post<MomRequestContent>(ReceiveWMSTaskin, houseSyncretism, "立库入库数量回传WMS");
                                        if (!response.Success)
                                        {
                                            throw new Exception($"操作失败: {response.Message ?? "未提供错误信息"}");
                                        }
                                    }
                                }
                                _unitOfWorkManage.CommitTran();
                                return WebResponseContent.Instance.OK();
                            }
@@ -1686,10 +1762,13 @@
                                       x.LocationName == stockInfo.LocationCode &&
                                       x.LPNNo == stockInfo.PalletCode)
                                .ToList();
                            List<Dt_NewOutboundOrderDetail> outboundOrderDetails1 = _outboundService.NewOutboundOrderDetailService.Db.Queryable<Dt_NewOutboundOrderDetail>()
                            List<Dt_NewOutboundOrderDetail> outboundOrderDetails1 = new List<Dt_NewOutboundOrderDetail>();
                            if (outboundOrderDetails == null || outboundOrderDetails.Count == 0)
                            {
                                outboundOrderDetails1 = _outboundService.NewOutboundOrderDetailService.Db.Queryable<Dt_NewOutboundOrderDetail>()
                                .Where(x => x.OrderId == outboundOrder.Id)                                 
                                .ToList();
                            }
                            if ((outboundOrderDetails == null && outboundOrderDetails1 == null) || (outboundOrderDetails.Count == 0  && outboundOrderDetails1.Count == 0))
                            {
                                throw new Exception($"未找到托盘 {stockInfo.PalletCode} åœ¨è´§ä½ {stockInfo.LocationCode} ä¸Šçš„出库单明细");
@@ -1698,6 +1777,7 @@
                            var stockInfoDetails = stockInfo.Details.ToList();
                            int overCount = outboundOrder.Details.Count(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt());
                            if (outboundOrderDetails == null || outboundOrderDetails.Count == 0)
                            {
                                foreach (var stockDetail in stockInfoDetails)
@@ -1858,7 +1938,7 @@
                                        }
                                        // è°ƒæ‹¨å‡ºåº“
                                        if (outboundOrder.OrderType == 2)
                                        if (outboundOrder.OrderType == 4)
                                        {
                                            var allocate = new InventoryAllocate
                                            {
@@ -2090,7 +2170,7 @@
                                        }
                                        // è°ƒæ‹¨å‡ºåº“
                                        if (outboundOrder.OrderType == 2)
                                        if (outboundOrder.OrderType == 4)
                                        {
                                            var allocate = new InventoryAllocate
                                            {
@@ -2954,9 +3034,9 @@
                            }
                        }
                        // åªå‡åŽ»å•æ®æ˜Žç»†ä¸­çš„æ•°é‡
                        matchedStockDetail.OutboundQuantity = 0;
                        matchedStockDetail.StockQuantity = outDetail.OrderQuantity;
                        matchedStockDetail.OrderNo = returnOrder.OrderNo;
                        //matchedStockDetail.OutboundQuantity = 0;
                        //matchedStockDetail.StockQuantity = outDetail.OrderQuantity;
                        //matchedStockDetail.OrderNo = returnOrder.OrderNo;
                        // æ›´æ–°åŒ¹é…çš„æ˜Žç»†
                        _stockService.StockInfoDetailService.Repository.UpdateData(matchedStockDetail);
                    }
@@ -2979,9 +3059,14 @@
                    decimal totalOutboundQuantity = outboundOrderDetails.Sum(x => x.OrderQuantity);
                    decimal totalStockQuantity = stockInfoDetails.Sum(x => x.StockQuantity);
                    foreach (var detail in stockInfo.Details)
                    {
                    foreach (var groupeDetail in groupedDetails)
                    {
                        var outboundDetail = groupeDetail.First();
                            if (outboundDetail.MaterielCode == detail.MaterielCode)
                            {
                        decimal totalOrderQuantity = groupeDetail.Sum(x => x.OrderQuantity);
                        var matchedStockDetail = stockInfoDetails.FirstOrDefault(x => x.MaterielCode == outboundDetail.MaterielCode && x.BatchNo == outboundDetail.BatchNo);
                        if (matchedStockDetail == null)
@@ -3023,38 +3108,21 @@
                            // æ·»åŠ è¿”åº“å•
                            returnOrders.Add(returnOrder);
                            // æ›´æ–°å½“前批次明细:只保留出库数量,其余返库
                            matchedStockDetail.StockQuantity = remainingQuantity;
                            matchedStockDetail.OutboundQuantity = outboundDetail.OrderQuantity;
                            //matchedStockDetail.OrderNo = returnOrder.OrderNo;
                        }
                        else if (remainingQuantity == 0)
                        {
                            // å½“前批次正好出完
                            matchedStockDetail.OutboundQuantity = matchedStockDetail.StockQuantity;
                            if (matchedStockDetail.StockQuantity == totalOrderQuantity)
                            {
                                _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(
                                    matchedStockDetail, App.User.UserId == 0 ? OperateType.自动完成 : OperateType.人工完成);
                            }
                            else
                            {
                                matchedStockDetail.StockQuantity = 0;
                                _stockService.StockInfoDetailService.Repository.UpdateData(matchedStockDetail);
                            }
                        }
                        else
                                if (remainingQuantity < 0 && matchedStockDetail.StockQuantity < matchedStockDetail.OutboundQuantity)
                        {
                            throw new Exception($"出库数量 {outboundDetail.OrderQuantity} å¤§äºŽåº“存数量 {matchedStockDetail.StockQuantity}");
                        }
                        processedStockDetails.Add(matchedStockDetail);
                    }
                    // å¤„理其他批次的库存明细(全部返库)
                    var otherBatchDetails = stockInfoDetails
                        .Where(x => !processedStockDetails.Contains(x) && x.StockQuantity > 0)
                                    .Where(x => !processedStockDetails.Contains(x) && x.StockQuantity > 0 && x.OutboundQuantity == 0)
                        .ToList();
                                if (returnOrders == null || returnOrders.Count == 0)
                                {
                    if (otherBatchDetails.Count > 0)
                    {
                        decimal totalOtherQuantity = otherBatchDetails.Sum(x => x.StockQuantity);
@@ -3082,9 +3150,19 @@
                        {
                            otherReturnOrder.LocationCode = stockInfo.LocationCode;
                        }
                        returnOrders.Add(otherReturnOrder);
                                    }
                                }
                                else
                                {
                                    decimal totalOtherQuantity = otherBatchDetails.Sum(x => x.StockQuantity);
                                    foreach (var item in returnOrders)
                                    {
                                        item.OrderQuantity = totalOrderQuantity;
                                        item.ReceiptQuantity = totalOrderQuantity;
                                        item.Remark = $"多批次返库,共{otherBatchDetails.Count}个批次";
                                    }
                    }
                    // æ‰¹é‡æ›´æ–°å·²å¤„理的库存明细
@@ -3102,7 +3180,7 @@
                    // æ›´æ–°åº“存主表状态
                    decimal returnQuantity = totalStockQuantity - totalOutboundQuantity;
                    if (returnQuantity == 0)
                                if (returnQuantity == 0 || stockInfo.Details.All(x => x.StockQuantity == x.OutboundQuantity))
                    {
                        if (outboundOrder.System == "SMOM" && stockInfo.LocationCode != null)
                        {
@@ -3111,11 +3189,11 @@
                            _basicRepository.LocationInfoRepository.UpdateData(dt_LocationInfo);
                        }
                        // å…¨éƒ¨å‡ºåº“,删除库存
                        DeleteAndMoveIntoHtStockStatus(stockInfo);
                        foreach (var item in stockInfo.Details)
                        {
                            BaseDal.Db.Deleteable(item.StockDetails).ExecuteCommand();
                        }
                                    //DeleteAndMoveIntoHtStockStatus(stockInfo);
                                    //foreach (var item in stockInfo.Details)
                                    //{
                                    //    BaseDal.Db.Deleteable(item.StockDetails).ExecuteCommand();
                                    //}
                    }
                    else if (returnQuantity > 0)
                    {
@@ -3125,10 +3203,14 @@
                        stockInfo.Remark = $"余料退库,共{returnOrders.Count}个返库单";
                        _stockService.StockInfoService.Repository.UpdateData(stockInfo);
                    }
                            }
                        }
                }
                _unitOfWorkManage.CommitTran();
            }
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
WMS/WIDESEA_WMSServer/WIDESEA_WMSServer/Controllers/Outbound/OutboundOrderController.cs
@@ -27,6 +27,17 @@
        {
            return Service.CancelOut(houseCancelOut);
        }
        /// <summary>
        /// æˆå“å‡ºåº“单据取消
        /// </summary>
        /// <param name="houseCancelOut"></param>
        /// <returns></returns>
        [HttpPost, Route("NewCancelOut"), AllowAnonymous]
        public WebResponseContent NewCancelOut([FromBody] HouseCancelOut houseCancelOut)
        {
            return Service.NewCancelOut(houseCancelOut);
        }
        [HttpPost, Route("Save"), AllowAnonymous]
        public WebResponseContent Save([FromBody] OutboundOrderAddDTO orderAddDTO)