helongyang
2025-03-21 3a1a5e58e9ac1b4a8449601db8c6608897877746
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -50,6 +50,7 @@
using WIDESEA_ITaskInfoRepository;
using WIDESEA_ITaskInfoService;
using WIDESEA_Model.Models;
using WIDESEA_OutboundRepository;
using WIDESEA_TaskInfoRepository;
namespace WIDESEA_TaskInfoService
@@ -69,7 +70,8 @@
        private readonly IInboundRepository _inboundRepository;
        private readonly IInboundOrderService _inboundOrderService;
        private readonly IPalletTypeInfoRepository _palletTypeInfoRepository;
        private readonly IOutProStockInfoRepository _outProStockInfoRepository;
        private readonly IOutboundRepository _outboundRepository;
        public ITaskRepository Repository => BaseDal;
        private Dictionary<string, OrderByType> _taskOrderBy = new()
@@ -82,7 +84,7 @@
        public List<int> TaskOutboundTypes => typeof(TaskTypeEnum).GetEnumIndexList();
        public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IStockRepository stockRepository, IBasicService basicService, IRecordService recordService, IOutboundService outboundService, IStockService stockService, IBasicRepository basicRepository, IApiInfoRepository apiInfoRepository, IInvokeERPService invokeERPService, IInboundRepository inboundRepository, IInboundOrderService inboundOrderService, IPalletTypeInfoRepository palletTypeInfoRepository) : base(BaseDal)
        public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IStockRepository stockRepository, IBasicService basicService, IRecordService recordService, IOutboundService outboundService, IStockService stockService, IBasicRepository basicRepository, IApiInfoRepository apiInfoRepository, IInvokeERPService invokeERPService, IInboundRepository inboundRepository, IInboundOrderService inboundOrderService, IPalletTypeInfoRepository palletTypeInfoRepository, IOutProStockInfoRepository outProStockInfoRepository, IOutboundRepository outboundRepository) : base(BaseDal)
        {
            _mapper = mapper;
            _unitOfWorkManage = unitOfWorkManage;
@@ -97,6 +99,8 @@
            _inboundRepository = inboundRepository;
            _inboundOrderService = inboundOrderService;
            _palletTypeInfoRepository = palletTypeInfoRepository;
            _outProStockInfoRepository = outProStockInfoRepository;
            _outboundRepository = outboundRepository;
        }
        /// <summary>
@@ -403,7 +407,7 @@
            }
        }
        /// <summary>
        /// æˆå“ä»“任务完成
        /// æˆå“ä»“入库任务完成
        /// </summary>
        public WebResponseContent InProductCompleted(Dt_Task task)
        {
@@ -480,7 +484,12 @@
                {
                    return WebResponseContent.Instance.Error($"未找到任务信息");
                }
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == task.WarehouseId);
                //成品出库任务完成
                if (warehouse.WarehouseCode==WarehouseEnum.HA71.ToString())
                {
                    return OutProCompleted(task);
                }
                Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.GetStockInfo(task.PalletCode);
                Dt_LocationInfo locationInfo = _basicService.LocationInfoService.Repository.QueryFirst(x => x.LocationCode == task.SourceAddress);
@@ -492,7 +501,6 @@
                {
                    return WebResponseContent.Instance.Error($"未找到货位信息");
                }
                Dt_Warehouse warehouse = _basicRepository.WarehouseRepository.QueryFirst(x => x.WarehouseId == task.WarehouseId);
                List<Dt_OutStockLockInfo> outStockLockInfos = _outboundService.OutboundStockLockInfoService.Repository.QueryData(x => x.TaskNum == taskNum);
                List<Dt_OutboundOrderDetail> outboundOrderDetails = new List<Dt_OutboundOrderDetail>();
                List<Dt_MesOutboundOrder> mesOutboundOrders = new List<Dt_MesOutboundOrder>();
@@ -611,6 +619,109 @@
                return WebResponseContent.Instance.Error(ex.Message);
            }
        }
        //成品出库任务完成
        public WebResponseContent OutProCompleted(Dt_Task task)
        {
            WebResponseContent content = new WebResponseContent();
            try
            {
                //获取货位
                Dt_LocationInfo locationInfo = _basicRepository.LocationInfoRepository.QueryFirst(x => x.LocationCode == task.SourceAddress);
                if (locationInfo==null)
                {
                    return content.Error("未找到货位信息");
                }
                //根据任务获取成品出库详情任务及物料信息
                Dt_OutProStockInfo outProStockInfo = _outProStockInfoRepository.QueryFirst(x=>x.TaskNum==task.TaskNum);
                if (outProStockInfo == null)
                {
                    return content.Error("未找到成品出库详情");
                }
                //获取成品出库订单
                Dt_ProOutOrder proOutOrder = _outboundService.ProOutOrderService.Repository.Db.Queryable<Dt_ProOutOrder>().Where(x => x.ProOutOrderNo == outProStockInfo.OrderNo).Includes(x => x.Details).First();
                if (proOutOrder==null)
                {
                    return content.Error("未找到成品出库订单");
                }
                //获取成品库存
                Dt_ProStockInfo proStockInfo = _stockRepository.ProStockInfoRepository.Db.Queryable<Dt_ProStockInfo>().Where(x=>x.PalletCode==task.PalletCode).Includes(x=>x.proStockInfoDetails).First();
                if (proStockInfo==null)
                {
                    return content.Error("未找到成品库存信息");
                }
                List<Dt_ProStockInfoDetail> proStockInfoDetails = proStockInfo.proStockInfoDetails;
                if (proStockInfoDetails.Count<=0)
                {
                    return content.Error("成品库存明细");
                }
                proStockInfoDetails.ForEach(x =>
                {
                    x.OutboundQuantity = 0;
                    x.ProOutDetailStatus = StockStatusEmun.出库完成.ObjToInt();
                });
                //处理库存数据
                //List<Dt_ProStockInfoDetail>? deleteStockDetails = null;
                //List<Dt_ProStockInfoDetail>? updateStockDetails = null;
                //(List<Dt_ProStockInfoDetail>?, List<Dt_ProStockInfoDetail>?) result = _stockService.ProStockInfoService.HandleOutProStock(proStockInfo);
                //if (result.Item1!=null && result.Item1.Count>0)
                //{
                //    deleteStockDetails.AddRange(result.Item1);
                //}
                //if (result.Item1 != null && result.Item1.Count > 0)
                //{
                //    updateStockDetails.AddRange(updateStockDetails);
                //}
                //获取成品出库单明细
                Dt_ProOutOrderDetail? proOutOrderDetail = proOutOrder.Details.FirstOrDefault(x=>x.Id== outProStockInfo.OrderDetailId);
                if (proOutOrderDetail==null)
                {
                    return content.Error("未找到对应任务成品订单明细");
                }
                //if (deleteStockDetails?.Sum(x=>x.StockPcsQty)== proStockInfo.proStockInfoDetails.Sum(x=>x.StockPcsQty))
                //{
                proStockInfo.StockStatus = StockStatusEmun.出库完成.ObjToInt();
                proStockInfo.LocationCode = "出至成品待发货区";
                //}
                task.TaskStatus = TaskStatusEnum.Finish.ObjToInt();
                outProStockInfo.Status = OutLockStockStatusEnum.出库完成.ObjToInt();
                _unitOfWorkManage.BeginTran();
                //货位变动记录
                int beforeStatus = locationInfo.LocationStatus;
                locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
                _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, proStockInfo.PalletType, LocationStatusEnum.Free, proStockInfo.WarehouseId);
                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, (LocationStatusEnum)beforeStatus, LocationStatusEnum.Free, LocationChangeType.OutboundCompleted, proOutOrder?.ProOutOrderNo ?? "", task.TaskNum);
                if (proOutOrder.ProOrderStatus == OutOrderStatusEnum.未开始.ObjToInt())
                {
                    proOutOrder.ProOrderStatus = OutOrderStatusEnum.出库中.ObjToInt();
                    _outboundService.ProOutOrderService.UpdateData(proOutOrder);
                }
                //if (deleteStockDetails!=null && deleteStockDetails.Count>0)
                //{
                //    _stockRepository.ProStockInfoDetailRepository.DeleteAndMoveIntoHty(deleteStockDetails, OperateTypeEnum.自动完成);
                //}
                //if (updateStockDetails!=null && updateStockDetails.Count>0)
                //{
                _stockRepository.ProStockInfoRepository.UpdateData(proStockInfo);
                _stockRepository.ProStockInfoDetailRepository.UpdateData(proStockInfoDetails);
                _outProStockInfoRepository.UpdateData(outProStockInfo);
                //}
                //else
                //{
                //_stockRepository.ProStockInfoRepository.DeleteAndMoveIntoHty(proStockInfo, OperateTypeEnum.自动完成);
                //}
                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                _unitOfWorkManage.CommitTran();
                //MES成品出库同步
                ShipmentOrderSync(MesOutSync(outProStockInfo, proOutOrderDetail));
                content.OK();
            }
            catch (Exception ex)
            {
                _unitOfWorkManage.RollbackTran();
                content.Error(ex.Message);
            }
            return content;
        }
    }
}