heshaofeng
2026-03-31 a846d73009c695f51ef507f53f14b3b8c73e59d8
ÏîÄ¿´úÂë/WMSÎÞ²Ö´¢°æ/WIDESEA_WMSServer/WIDESEA_OutboundService/OutboundService.cs
@@ -70,6 +70,7 @@
        public readonly IRepository<Dt_InboundOrder> _inboundOrderRepository;
        public readonly IRepository<Dt_WarehouseArea> _warehouseAreaRepository;
        public readonly IRepository<Dt_LocationType> _locationTypeRepository;
        public readonly IRepository<Dt_OutboundOrderDetail> _outboundOrderDetailRepository;
        private Dictionary<string, string> stations = new Dictionary<string, string>
        {
@@ -83,7 +84,7 @@
            {"3-1","3-5" },
        };
        public OutboundService(IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_OutboundOrderDetail> detailRepository, IRepository<Dt_OutboundOrder> outboundRepository, IRepository<Dt_OutStockLockInfo> outboundLockInfoRepository, IRepository<Dt_StockInfo> stockInfoRepository, IRepository<Dt_StockInfoDetail> stockDetailRepository, IRepository<Dt_StockQuantityChangeRecord> stockChangeRepository, IRepository<Dt_StockInfoDetail_Hty> stockDetailHistoryRepository, IBasicService basicService, IOutboundOrderDetailService outboundOrderDetailService, IOutboundOrderService outboundOrderService, IOutStockLockInfoService outboundStockLockInfoService, IFeedbackMesService feedbackMesService, IRepository<Dt_Task> taskRepository, ILocationInfoService locationInfoService, IESSApiService eSSApiService, IRepository<Dt_AllocateOrder> allocateOrderRepository, IRepository<Dt_AllocateMaterialInfo> allocateMaterialInfoRepository, IRepository<Dt_InboundOrderDetail> inboundOrderDetailRepository, IRepository<Dt_InboundOrder> inboundOrderRepository, IRepository<Dt_LocationType> locationTypeRepository, IRepository<Dt_WarehouseArea> warehouseAreaRepository)
        public OutboundService(IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IRepository<Dt_OutboundOrderDetail> detailRepository, IRepository<Dt_OutboundOrder> outboundRepository, IRepository<Dt_OutStockLockInfo> outboundLockInfoRepository, IRepository<Dt_StockInfo> stockInfoRepository, IRepository<Dt_StockInfoDetail> stockDetailRepository, IRepository<Dt_StockQuantityChangeRecord> stockChangeRepository, IRepository<Dt_StockInfoDetail_Hty> stockDetailHistoryRepository, IBasicService basicService, IOutboundOrderDetailService outboundOrderDetailService, IOutboundOrderService outboundOrderService, IOutStockLockInfoService outboundStockLockInfoService, IFeedbackMesService feedbackMesService, IRepository<Dt_Task> taskRepository, ILocationInfoService locationInfoService, IESSApiService eSSApiService, IRepository<Dt_AllocateOrder> allocateOrderRepository, IRepository<Dt_AllocateMaterialInfo> allocateMaterialInfoRepository, IRepository<Dt_InboundOrderDetail> inboundOrderDetailRepository, IRepository<Dt_InboundOrder> inboundOrderRepository, IRepository<Dt_LocationType> locationTypeRepository, IRepository<Dt_WarehouseArea> warehouseAreaRepository, IRepository<Dt_OutboundOrderDetail> outboundOrderDetailRepository)
        {
            _mapper = mapper;
            _unitOfWorkManage = unitOfWorkManage;
@@ -110,6 +111,7 @@
            _inboundOrderRepository = inboundOrderRepository;
            _locationTypeRepository = locationTypeRepository;
            _warehouseAreaRepository = warehouseAreaRepository;
            _outboundOrderDetailRepository = outboundOrderDetailRepository;
        }
        public WebResponseContent PrintFromData (string barcode)
@@ -1376,9 +1378,13 @@
                        Func<Dt_OutStockLockInfo, bool> wareWhere = x => string.IsNullOrEmpty(outboundOrderDetails.First().WarehouseCode) ? true : x.WarehouseCode == outboundOrderDetails.First().WarehouseCode;
                        List<Dt_OutStockLockInfo> stockLockInfos = _outboundLockInfoRepository.QueryData(x =>
                                x.OrderNo == request.OrderNo &&
                                x.MaterielCode == stockInfoDetail.MaterielCode).Where(supWhere).Where(wareWhere).ToList();
                        var stockLockInfos = _outboundLockInfoRepository.QueryData(x =>
                            x.OrderDetailIds == lockInfo.OrderDetailIds &&
                            x.OrderNo == request.OrderNo &&
                            x.MaterielCode == stockInfoDetail.MaterielCode)
                            .Where(supWhere)
                            .Where(wareWhere)
                            .ToList();
                        if (stockLockInfos != null && stockLockInfos.Any())
                        {
                            _outboundLockInfoRepository.DeleteAndMoveIntoHty(stockLockInfos, WIDESEA_Core.Enums.OperateTypeEnum.自动删除);
@@ -1804,9 +1810,13 @@
                        Func<Dt_OutStockLockInfo, bool> wareWhere = x => string.IsNullOrEmpty(outboundOrderDetails.First().WarehouseCode) ? true : x.WarehouseCode == outboundOrderDetails.First().WarehouseCode;
                        List<Dt_OutStockLockInfo> stockLockInfos = _outboundLockInfoRepository.QueryData(x =>
                                x.OrderNo == request.OrderNo &&
                                x.MaterielCode == stockDetail.MaterielCode).Where(supWhere).Where(wareWhere).ToList();
                        var stockLockInfos = _outboundLockInfoRepository.QueryData(x =>
                            x.OrderDetailIds == lockInfo.OrderDetailIds &&
                            x.OrderNo == request.OrderNo &&
                            x.MaterielCode == stockDetail.MaterielCode)
                            .Where(supWhere)
                            .Where(wareWhere)
                            .ToList();
                        if (stockLockInfos != null && stockLockInfos.Any())
                        {
                            _outboundLockInfoRepository.DeleteAndMoveIntoHty(stockLockInfos, WIDESEA_Core.Enums.OperateTypeEnum.自动删除);
@@ -2496,10 +2506,9 @@
                Dt_StockInfoDetail_Hty historyDetail = _stockDetailHistoryRepository.QueryFirst(x =>
                    x.Barcode == request.Barcode &&
                    (x.OperateType == "出库完成" || x.OperateType == "拆包-原始记录"));
                if(historyDetail != null)
                if (historyDetail != null)
                {
                    double minutesDiff = (DateTime.Now - historyDetail.InsertTime).TotalMinutes;
                    if (minutesDiff >= 30)
@@ -2522,6 +2531,41 @@
                {
                    return WebResponseContent.Instance.Error("该托盘已全部拣选完,不允许撤销");
                }
               var details = _outboundOrderDetailRepository.QueryData(x => x.OrderId == outboundOrder.Id);
                var outboundDetails = details
                    .Where(x =>
                        x.MaterielCode == historyDetail.MaterielCode
                        &&
                        !string.IsNullOrEmpty(lockInfo.OrderDetailIds)
                        &&
                        lockInfo.OrderDetailIds.Split(",")
                            .Any(idStr => idStr.Trim() == x.Id.ToString())
                    ).ToList();
                var detail = outboundDetails.FirstOrDefault();
                if (detail != null && !string.IsNullOrEmpty(detail.ReturnJsonData))
                {
                    try
                    {
                        string deleteBarcode = request.Barcode;
                        var list = JsonConvert.DeserializeObject<List<BarcodeItem>>(detail.ReturnJsonData);
                        if (list != null)
                        {
                            var filteredList = list.Where(x => x.barcode != deleteBarcode).ToList();
                            detail.ReturnJsonData = JsonConvert.SerializeObject(filteredList);
                            _outboundOrderDetailRepository.UpdateData(detail);
                        }
                    }
                    catch
                    {
                    }
                }
                _unitOfWorkManage.BeginTran();
                try
                {
@@ -2534,21 +2578,11 @@
                    {
                        ReverseFullOutboundOperation(historyDetail, stockInfo, request);
                    }
                    RollbackOutboundOrderDetails(historyDetail.MaterielCode, request.OrderNo, historyDetail.StockQuantity, stockInfo.Id);
                    if (lockInfo != null)
                    {
                        lockInfo.SortedQuantity = Math.Max(0, (decimal)(lockInfo.SortedQuantity - historyDetail.StockQuantity));
                        if (lockInfo.SortedQuantity == 0)
                        {
                            _outboundLockInfoRepository.UpdateData(lockInfo);
                        }
                        else
                        {
                            _outboundLockInfoRepository.UpdateData(lockInfo);
                        }
                    }
                    lockInfo.SortedQuantity = Math.Max(0, (decimal)(lockInfo.SortedQuantity - historyDetail.StockQuantity));
                    _outboundLockInfoRepository.UpdateData(lockInfo);
                    _stockDetailHistoryRepository.DeleteData(historyDetail);
@@ -2761,4 +2795,35 @@
       
    }
    /// <summary>
    /// æ¡ç æ˜Žç»†å®žä½“
    /// </summary>
    public class BarcodeItem
    {
        /// <summary>
        /// æ¡ç 
        /// </summary>
        public string barcode { get; set; }
        /// <summary>
        /// æ•°é‡
        /// </summary>
        public decimal qty { get; set; }
        /// <summary>
        /// ä¾›åº”商编码
        /// </summary>
        public string supplyCode { get; set; }
        /// <summary>
        /// æ‰¹æ¬¡å·
        /// </summary>
        public string batchNo { get; set; }
        /// <summary>
        /// å•位
        /// </summary>
        public string unit { get; set; }
    }
}