xiazhengtongxue
21 小时以前 595b44f79c7580b3d95c63194b1df4f00600f926
Code/WMS/WIDESEA_WMSServer/WIDESEA_StockService/StockInfoService.cs
@@ -30,6 +30,8 @@
        /// </summary>
        private readonly IWarehouseService _warehouseService;
        private readonly IRecordService _recordService;
        private readonly IUnitOfWorkManage _unitOfWorkManage;
        private readonly IStockInfoDetailService _stockInfoDetailService;
        /// <summary>
        /// 构造函数
@@ -39,11 +41,15 @@
            IRepository<Dt_StockInfo> baseDal,
            ILocationInfoService locationInfoService,
            IWarehouseService warehouseService,
            IRecordService recordService) : base(baseDal)
            IRecordService recordService,
            IUnitOfWorkManage unitOfWorkManage,
            IStockInfoDetailService stockInfoDetailService) : base(baseDal)
        {
            _locationInfoService = locationInfoService;
            _warehouseService = warehouseService;
            _recordService = recordService;
            _unitOfWorkManage = unitOfWorkManage;
            _stockInfoDetailService = stockInfoDetailService;
        }
        /// <summary>
@@ -316,5 +322,64 @@
                Locations = locationItems
            };
        }
        /// <summary>
        /// 使用事务删除库存和明细信息(先查询再删除)
        /// </summary>
        /// <param name="stockId">库存ID</param>
        /// <returns>删除结果</returns>
        public async Task<WebResponseContent> DeleteStockWithDetailsAsync(int stockId)
        {
            if (stockId <= 0)
                return WebResponseContent.Instance.Error("库存ID无效");
            _unitOfWorkManage.BeginTran();
            try
            {
                // 先查询库存信息(包含明细)
                var stockInfo = await BaseDal.QueryDataNavFirstAsync(x => x.Id == stockId);
                if (stockInfo == null)
                {
                    _unitOfWorkManage.RollbackTran();
                    return WebResponseContent.Instance.Error("库存记录不存在");
                }
                // 查询并删除库存明细记录
                var existingDetails = await _stockInfoDetailService.Repository.QueryDataAsync(x => x.StockId == stockId);
                if (existingDetails != null && existingDetails.Any())
                {
                    var deleteDetailResult = await _stockInfoDetailService.Repository.DeleteDataAsync(existingDetails);
                    if (!deleteDetailResult)
                    {
                        _unitOfWorkManage.RollbackTran();
                        return WebResponseContent.Instance.Error("删除库存明细记录失败");
                    }
                }
                // 删除库存主记录
                var deleteStockResult = await BaseDal.DeleteDataAsync(stockInfo);
                if (!deleteStockResult)
                {
                    _unitOfWorkManage.RollbackTran();
                    return WebResponseContent.Instance.Error("删除库存主记录失败");
                }
                _unitOfWorkManage.CommitTran();
                // 记录库存变更日志
                var saveRecordResult = await _recordService.AddStockChangeRecordAsync(stockInfo, null, StockChangeTypeEnum.Outbound, remark: "库存删除");
                if (!saveRecordResult)
                {
                    return WebResponseContent.Instance.Error("库存变更记录保存失败");
                }
                return WebResponseContent.Instance.OK("库存删除成功");
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                return WebResponseContent.Instance.Error($"删除库存和明细时发生异常: {ex.Message}");
            }
        }
    }
}