wangxinhui
4 天以前 9ec715d2deb18a269dd49c48da91a36632d08c81
´úÂë¹ÜÀí/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs
@@ -41,6 +41,7 @@
using WIDESEA_External.Model;
using WIDESEA_IBasicRepository;
using WIDESEA_IBasicService;
using WIDESEA_ICheckRepository;
using WIDESEA_IInboundRepository;
using WIDESEA_IInboundService;
using WIDESEA_IOutboundRepository;
@@ -73,6 +74,9 @@
        private readonly IPalletTypeInfoRepository _palletTypeInfoRepository;
        private readonly IOutProStockInfoRepository _outProStockInfoRepository;
        private readonly IOutboundRepository _outboundRepository;
        private readonly IProInStatisticsRepository _proInStatisticsRepository;
        private readonly IProInStatisticsService _proInStatisticsService;
        private readonly ICheckOrderRepository _checkOrderRepository;
        public ITaskRepository Repository => BaseDal;
        private Dictionary<string, OrderByType> _taskOrderBy = new()
@@ -85,7 +89,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, IOutProStockInfoRepository outProStockInfoRepository, IOutboundRepository outboundRepository) : 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, IProInStatisticsRepository proInStatisticsRepository, IProInStatisticsService proInStatisticsService, ICheckOrderRepository checkOrderRepository) : base(BaseDal)
        {
            _mapper = mapper;
            _unitOfWorkManage = unitOfWorkManage;
@@ -102,13 +106,16 @@
            _palletTypeInfoRepository = palletTypeInfoRepository;
            _outProStockInfoRepository = outProStockInfoRepository;
            _outboundRepository = outboundRepository;
            _proInStatisticsRepository = proInStatisticsRepository;
            _proInStatisticsService = proInStatisticsService;
            _checkOrderRepository = checkOrderRepository;
        }
        /// <summary>
        /// ä»»åŠ¡ä¿¡æ¯æŽ¨é€è‡³WCS
        /// </summary>
        /// <returns></returns>
        public WebResponseContent PushTasksToWCS(List<Dt_Task> tasks, string agvDescription = "")
        public WebResponseContent PushTasksToWCS(List<Dt_Task> tasks, string agvDescription = "",string agvtaskNum="")
        {
            try
            {
@@ -116,6 +123,7 @@
                taskDTOs.ForEach(x =>
                {
                    x.AGVArea = agvDescription;
                    x.AGVTaskNum = agvtaskNum;
                });
                string url = AppSettings.Get("WCS");
                if (string.IsNullOrEmpty(url))
@@ -136,7 +144,7 @@
        /// </summary>
        /// <param name="code"></param>
        /// <returns></returns>
        public WebResponseContent PutFinish(string code)
        public WebResponseContent PutFinish(string code, string barCode = "", string taskNum = "")
        {
            try
            {
@@ -145,7 +153,7 @@
                {
                    return WebResponseContent.Instance.Error($"未找到WCSAApi地址,请检查配置文件");
                }
                string response = HttpHelper.Post($"{url}/api/CTU_AGV/PutFinish?code=" + code);
                string response = HttpHelper.Post($"{url}/api/CTU_AGV/PutFinish?code={code}&barCode={barCode}&taskNum={taskNum}" );
                return JsonConvert.DeserializeObject<WebResponseContent>(response) ?? WebResponseContent.Instance.Error("返回错误");
            }
@@ -202,7 +210,9 @@
                    TaskType = TaskTypeEnum.OutAllocate.ObjToInt(),
                    TaskStatus = TaskStatusEnum.New.ObjToInt(),
                    WarehouseId = stockInfo.WarehouseId,
                    PalletType = stockInfo.PalletType
                    PalletType = stockInfo.PalletType,
                    MaterielCode = stockInfo.Details.Where(x => x.StockId == stockInfo.Id).FirstOrDefault()?.MaterielCode,
                    Quantity = (float)stockInfo.Details.Where(x => x.StockId == stockInfo.Id).FirstOrDefault()?.StockQuantity,
                };
                _unitOfWorkManage.BeginTran();
                BaseDal.AddData(newTask);
@@ -370,6 +380,7 @@
                });
                //更新任务状态
                task.TaskStatus = TaskStatusEnum.Finish.ObjToInt();
                FeedBackWCSTaskCompleted(taskNum);
                _unitOfWorkManage.BeginTran();
                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId > 0 ? OperateTypeEnum.人工完成 : OperateTypeEnum.自动完成);
                _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, stockInfo.PalletType, LocationStatusEnum.InStock, stockInfo.WarehouseId);
@@ -419,7 +430,7 @@
                switch (task.TaskType)
                {
                    case (int)TaskTypeEnum.EmptyProductBack:
                        EmptyProBackCompleted(task);
                        content = EmptyProBackCompleted(task);
                        break;
                    case (int)TaskTypeEnum.InProduct:
                        content = InProCompleted(task);
@@ -503,6 +514,11 @@
                {
                    x.ProOutDetailStatus = StockStatusEmun.入库完成.ObjToInt();
                });
                #region todo:临时更新所有研发转成品
                proStockInfo.ProStockAttribute=ProStockAttributeEnum.成品.ObjToInt();
                proStockInfo.WarehouseId = locationInfo.WarehouseId;
                #endregion
                //更新入库状态
                task.TaskStatus = TaskStatusEnum.Finish.ObjToInt();
                _unitOfWorkManage.BeginTran();
@@ -514,8 +530,8 @@
                _inboundRepository.MesProInOrderDetailRepository.UpdateData(mesProInOrder.Details);
                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, lastStatus, LocationStatusEnum.InStock, LocationChangeType.InboundCompleted);
                _unitOfWorkManage.CommitTran();
                //上传ERP
                _inboundOrderService.FeedbackProIn(mesProInOrder);
                ////上传ERP
                //_inboundOrderService.FeedbackProIn(mesProInOrder);
                content.OK();
            }
            catch (Exception ex)
@@ -615,7 +631,9 @@
                List<Dt_OutboundOrderDetail> outboundOrderDetails = new List<Dt_OutboundOrderDetail>();
                List<Dt_MesOutboundOrder> mesOutboundOrders = new List<Dt_MesOutboundOrder>();
                List<Dt_MesPPOutboundOrder> mesPPOutboundOrders = new List<Dt_MesPPOutboundOrder>();
                if ((outStockLockInfos == null || outStockLockInfos.Count == 0) && warehouse.WarehouseCode != WarehouseEnum.HA64.ToString() && (task.TaskType != TaskTypeEnum.OutEmpty.ObjToInt()))
                Dt_CheckOrder? checkOrder = null;
                Dt_OutboundOrder? outboundOrder = null;
                if ((outStockLockInfos == null || outStockLockInfos.Count == 0) && warehouse.WarehouseCode != WarehouseEnum.HA64.ToString() && warehouse.WarehouseCode != WarehouseEnum.HA154.ToString() && (task.TaskType != TaskTypeEnum.OutEmpty.ObjToInt()))
                {
                    return WebResponseContent.Instance.Error($"未找到出库详情信息");
                }
@@ -628,7 +646,7 @@
                            Dt_MesOutboundOrder mesOutboundOrder = _outboundService.MesOutboundOrderService.Repository.QueryFirst(x => x.TaskNo == item.OrderNo);
                            if (mesOutboundOrder != null)
                            {
                                mesOutboundOrder.OverOutQuantity = item.AssignQuantity;
                                mesOutboundOrder.OverOutQuantity += item.AssignQuantity;
                                if (mesOutboundOrder.OverOutQuantity == mesOutboundOrder.OrderQuantity)
                                {
                                    mesOutboundOrder.OrderStatus = OrderDetailStatusEnum.Over.ObjToInt();
@@ -652,6 +670,7 @@
                        }
                        else
                        {
                            //获取出库单明细
                            Dt_OutboundOrderDetail outboundOrderDetail = _outboundService.OutboundOrderDetailService.Repository.QueryFirst(x => x.Id == item.OrderDetailId);
                            if (outboundOrderDetail != null)
                            {
@@ -661,21 +680,57 @@
                                    outboundOrderDetail.OrderDetailStatus = OrderDetailStatusEnum.Over.ObjToInt();
                                }
                                outboundOrderDetails.Add(outboundOrderDetail);
                                //获取出库单
                                outboundOrder = _outboundRepository.OutboundOrderRepository.Db.Queryable<Dt_OutboundOrder>().Where(x => x.Id == outboundOrderDetail.OrderId).Includes(x => x.Details).First() ?? throw new Exception("未找到出库单");
                                if (task.TaskType == TaskTypeEnum.OutQuality.ObjToInt())
                                {
                                    Dt_MaterielInfo materielInfo = _basicRepository.MaterielInfoRepository.QueryFirst(x=>x.MaterielCode== outboundOrderDetail.MaterielCode);
                                    checkOrder = new Dt_CheckOrder
                                    {
                                        ReceivedQuantity = item.OriginalQuantity,
                                        OrderType = CheckTypeEnum.InspectCheck.ObjToInt(),
                                        ReceiveOrderNo = outboundOrder.OrderNo,
                                        LotNo= item.BatchNo,
                                        Result = CheckAcceptEnum.NotCheckAccept.ToString(),
                                        QualifiedQuantity = 0,
                                        ReceiveDetailRowNo = item.Id,
                                        WarehouseId = outboundOrder.WarehouseId,
                                        ScrappedQuantity = 0,
                                        MaterielCode=materielInfo.MaterielCode,
                                        MaterielSpec = materielInfo.MaterielSpec,
                                        Unit = materielInfo.MaterielUnit,
                                        ReturnQuantity = 0,
                                        DefectedQuantity = 0
                                    };
                                }
                            }
                        }
                        item.Status = OutLockStockStatusEnum.出库完成.ObjToInt();
                    }
                }
                task.TaskStatus = TaskStatusEnum.Finish.ObjToInt();
                FeedBackWCSTaskCompleted(taskNum);
                _unitOfWorkManage.BeginTran();
                if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt() || task.TaskType == TaskTypeEnum.OutAllocate.ObjToInt() || task.TaskType == TaskTypeEnum.MesHandPickOutbound.ObjToInt() || task.TaskType == TaskTypeEnum.MesHandOutbound.ObjToInt())
                if (task.TaskType == TaskTypeEnum.Outbound.ObjToInt() || task.TaskType == TaskTypeEnum.OutQuality.ObjToInt() || task.TaskType == TaskTypeEnum.OutAllocate.ObjToInt() || task.TaskType == TaskTypeEnum.MesHandPickOutbound.ObjToInt() || task.TaskType == TaskTypeEnum.MesHandOutbound.ObjToInt())
                {
                    //处理出库详情
                    //处理出库详情以及库存状态
                    if (outboundOrderDetails.Count > 0)
                    {
                        _outboundService.OutboundOrderDetailService.Repository.UpdateData(outboundOrderDetails);
                        //更新出库单状态
                        if (task.TaskType == TaskTypeEnum.OutQuality.ObjToInt() || task.TaskType == TaskTypeEnum.OutAllocate.ObjToInt())
                        {
                            int detailCount = outboundOrderDetails.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).ToList().Count;
                            if ((outboundOrder.Details.Where(x => x.OrderDetailStatus == OrderDetailStatusEnum.Over.ObjToInt()).ToList().Count + detailCount) == outboundOrder.Details.Count)
                            {
                                outboundOrder.OrderStatus = OutOrderStatusEnum.出库完成.ObjToInt();
                                _outboundRepository.OutboundOrderRepository.UpdateData(outboundOrder);
                            }
                        }
                    }
                    stockInfo.LocationCode = "";
                    stockInfo.StockStatus = StockStatusEmun.出库完成.ObjToInt();
@@ -683,17 +738,35 @@
                    {
                        x.Status = StockStatusEmun.出库完成.ObjToInt();
                    });
                    if (stockInfo.StockLength>0)
                    {
                        stockInfo.StockLength = 0;
                    }
                    if (checkOrder!=null)
                    {
                        stockInfo.StockStatus = StockStatusEmun.送检完成.ObjToInt();
                        stockInfo.Details.ForEach(x =>
                        {
                            x.Status = StockStatusEmun.送检完成.ObjToInt();
                        });
                        _checkOrderRepository.AddData(checkOrder);
                    }
                    _stockRepository.StockInfoRepository.UpdateData(stockInfo);
                    _stockRepository.StockInfoDetailRepository.UpdateData(stockInfo.Details);
                }
                else if (task.TaskType == TaskTypeEnum.OutEmpty.ObjToInt())
                else if (task.TaskType == TaskTypeEnum.OutEmpty.ObjToInt())//辅料空箱出库完成
                {
                    _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, stockInfo.PalletType, LocationStatusEnum.Free, stockInfo.WarehouseId);
                    _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                }
                else if (task.TaskType == TaskTypeEnum.MesOutbound.ObjToInt())
                else if (task.TaskType == TaskTypeEnum.MesOutbound.ObjToInt())//板料Mes出库完成逻辑
                {
                    _outboundService.MesOutboundOrderService.Repository.UpdateData(mesOutboundOrders);
                    _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                    _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(stockInfo.Details, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                }
                else if (warehouse.WarehouseCode == WarehouseEnum.HA154.ToString())
                {
                    _stockService.StockInfoService.Repository.DeleteAndMoveIntoHty(stockInfo, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                    _stockService.StockInfoDetailService.Repository.DeleteAndMoveIntoHty(stockInfo.Details, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                }
@@ -702,7 +775,6 @@
                int beforeStatus = locationInfo.LocationStatus;
                locationInfo.LocationStatus = LocationStatusEnum.Free.ObjToInt();
                _basicService.LocationInfoService.UpdateLocationStatus(locationInfo, stockInfo.PalletType, LocationStatusEnum.Free, stockInfo.WarehouseId);
                BaseDal.DeleteAndMoveIntoHty(task, App.User.UserId == 0 ? OperateTypeEnum.自动完成 : OperateTypeEnum.人工完成);
                _recordService.LocationStatusChangeRecordSetvice.AddLocationStatusChangeRecord(locationInfo, (LocationStatusEnum)beforeStatus, LocationStatusEnum.Free, LocationChangeType.OutboundCompleted, stockInfo.Details.FirstOrDefault()?.OrderNo ?? "", task.TaskNum);