wangxinhui
2025-11-12 f54b7815d8451f362554e3d2d09b4991ce13d4ff
ÏîÄ¿´úÂë/WMS/WMSServices/WIDESEA_RecordService/Service/StockQuantityChangeRecordService.cs
@@ -16,78 +16,74 @@
{
    public partial class StockQuantityChangeRecordService : ServiceBase<Dt_StockQuantityChangeRecord, IStockQuantityChangeRecordRepository>, IStockQuantityChangeRecordService
    {
        public void AddStockChangeRecord(Dt_StockInfo stockInfo, List<Dt_StockInfoDetail> stockInfoDetails, float beforeQuantity, float totalQuantity, StockChangeTypeEnum changeType, int? taskNum = null)
        /// <summary>
        /// å·æ–™å˜åŠ¨åº“å­˜è®°å½•
        /// </summary>
        /// <param name="stockInfo">库存</param>
        /// <param name="beforeQuantity">变动前库存</param>
        /// <param name="changeQuantity">变动库存</param>
        /// <param name="changeType">变动类型</param>
        /// <param name="taskNum">任务号</param>
        /// <param name="orderNo">单据编号</param>
        /// <exception cref="Exception"></exception>
        public void AddStockChangeRecord(Dt_StockInfo stockInfo, decimal beforeQuantity, decimal changeQuantity, StockChangeTypeEnum changeType, int? taskNum = 0,string orderNo="")
        {
            try
            {
                List<Dt_StockQuantityChangeRecord> stockQuantityChangeRecords = new List<Dt_StockQuantityChangeRecord>();
                stockQuantityChangeRecords = _mapper.Map<List<Dt_StockQuantityChangeRecord>>(stockInfoDetails);
                int index = 0;
                float currentQuantity = 0;
                stockQuantityChangeRecords.ForEach(x =>
                Dt_StockQuantityChangeRecord stockQuantityChangeRecord = new Dt_StockQuantityChangeRecord()
                {
                    x.PalleCode = stockInfo.PalletCode;
                    x.BeforeQuantity = beforeQuantity;
                    if (totalQuantity >= beforeQuantity)
                    {
                        x.ChangeQuantity = stockInfoDetails[index].StockQuantity;
                        currentQuantity += stockInfoDetails[index].StockQuantity;
                        x.AfterQuantity = stockInfoDetails[index].StockQuantity + beforeQuantity;
                    }
                    else
                    {
                        x.ChangeQuantity = -stockInfoDetails[index].StockQuantity;
                        currentQuantity -= stockInfoDetails[index].StockQuantity;
                        x.AfterQuantity = beforeQuantity - stockInfoDetails[index].StockQuantity;
                    }
                    x.ChangeType = changeType.ObjToInt();
                    beforeQuantity += x.ChangeQuantity;
                    x.TaskNum = taskNum;
                    index++;
                });
                BaseDal.AddData(stockQuantityChangeRecords);
                    StockId = stockInfo.Id,
                    PalleCode = stockInfo.PalletCode,
                    MaterielCode=stockInfo.MaterielCode,
                    MaterielName=stockInfo.MaterielName,
                    BatchNo = "",
                    SerilNumber=$"{stockInfo.Id}",
                    OrderNo = orderNo,
                    TaskNum= taskNum,
                    ChangeType=changeType.ObjToInt(),
                    ChangeQuantity=changeQuantity,
                    BeforeQuantity=beforeQuantity,
                    AfterQuantity=beforeQuantity+changeQuantity,
                    Creater="System"
                };
                BaseDal.AddData(stockQuantityChangeRecord);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        public void AddStockChangeRecord(Dt_StockInfo stockInfo, List<Dt_StockInfoDetail> residueDetailList, List<Dt_StockInfoDetail> updateDetails, List<Dt_StockInfoDetail> deleteDetails, StockChangeTypeEnum changeType, int? taskNum = null)
        /// <summary>
        /// æˆå“è¾…料库存记录
        /// </summary>
        /// <param name="proStockInfo">库存</param>
        /// <param name="beforeQuantity">变动前库存</param>
        /// <param name="changeQuantity">变动库存</param>
        /// <param name="changeType">变动类型</param>
        /// <param name="taskNum">任务号</param>
        /// <param name="orderNo"></param>
        /// <exception cref="Exception"></exception>
        public void AddStockChangeRecord(Dt_ProStockInfo proStockInfo, decimal beforeQuantity, decimal changeQuantity, StockChangeTypeEnum changeType, int? taskNum = null, string orderNo = "")
        {
            try
            {
                List<Dt_StockQuantityChangeRecord> stockQuantityChangeRecords = new List<Dt_StockQuantityChangeRecord>();
                int index1 = 0;
                List<Dt_StockQuantityChangeRecord> records1 = _mapper.Map<List<Dt_StockQuantityChangeRecord>>(updateDetails);
                float beforeQuantity = updateDetails.Sum(x => x.OutboundQuantity + x.StockQuantity) + deleteDetails.Sum(x => x.StockQuantity) + residueDetailList.Sum(x => x.StockQuantity);
                records1.ForEach(x =>
                Dt_StockQuantityChangeRecord stockQuantityChangeRecord = new Dt_StockQuantityChangeRecord()
                {
                    x.PalleCode = stockInfo.PalletCode;
                    x.BeforeQuantity = beforeQuantity;
                    x.ChangeQuantity = -updateDetails[index1].OutboundQuantity;
                    x.AfterQuantity = beforeQuantity + x.ChangeQuantity;
                    beforeQuantity -= updateDetails[index1].OutboundQuantity;
                    index1++;
                });
                stockQuantityChangeRecords.AddRange(records1);
                int index2 = 0;
                List<Dt_StockQuantityChangeRecord> records2 = _mapper.Map<List<Dt_StockQuantityChangeRecord>>(deleteDetails);
                records2.ForEach(x =>
                {
                    x.PalleCode = stockInfo.PalletCode;
                    x.BeforeQuantity = beforeQuantity;
                    x.ChangeQuantity = -deleteDetails[index2].StockQuantity;
                    x.AfterQuantity = beforeQuantity + x.ChangeQuantity;
                    beforeQuantity -= deleteDetails[index2].StockQuantity;
                    index2++;
                });
                stockQuantityChangeRecords.AddRange(records2);
                BaseDal.AddData(stockQuantityChangeRecords);
                    StockId = proStockInfo.Id,
                    PalleCode = proStockInfo.PalletCode,
                    MaterielCode = proStockInfo.proStockInfoDetails?.FirstOrDefault()?.ProductCode ?? "",
                    MaterielName = proStockInfo.proStockInfoDetails?.FirstOrDefault()?.ProductName ?? "",
                    BatchNo = "",
                    SerilNumber = $"{proStockInfo.Id}",
                    OrderNo = orderNo,
                    TaskNum = taskNum,
                    ChangeType = changeType.ObjToInt(),
                    ChangeQuantity = changeQuantity,
                    BeforeQuantity = beforeQuantity,
                    AfterQuantity = beforeQuantity + changeQuantity,
                    Creater = "System"
                };
                BaseDal.AddData(stockQuantityChangeRecord);
            }
            catch (Exception ex)
            {