From 9ec715d2deb18a269dd49c48da91a36632d08c81 Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期三, 18 六月 2025 00:56:26 +0800
Subject: [PATCH] 最新代码上传,优化功能等

---
 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs |   81 ++++++++++++++++++++++++++++++++++++----
 1 files changed, 73 insertions(+), 8 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
index 5c6ee66..4f51249 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/TaskService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/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;
@@ -75,6 +76,7 @@
         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()
@@ -87,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, IProInStatisticsRepository proInStatisticsRepository, IProInStatisticsService proInStatisticsService) : 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;
@@ -106,13 +108,14 @@
             _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
             {
@@ -120,6 +123,7 @@
                 taskDTOs.ForEach(x =>
                 {
                     x.AGVArea = agvDescription;
+                    x.AGVTaskNum = agvtaskNum;
                 });
                 string url = AppSettings.Get("WCS");
                 if (string.IsNullOrEmpty(url))
@@ -510,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();
@@ -622,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($"鏈壘鍒板嚭搴撹鎯呬俊鎭�");
                 }
@@ -635,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();
@@ -659,6 +670,7 @@
                         }
                         else
                         {
+                            //鑾峰彇鍑哄簱鍗曟槑缁�
                             Dt_OutboundOrderDetail outboundOrderDetail = _outboundService.OutboundOrderDetailService.Repository.QueryFirst(x => x.Id == item.OrderDetailId);
                             if (outboundOrderDetail != null)
                             {
@@ -668,7 +680,32 @@
                                     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();
                     }
@@ -678,12 +715,22 @@
                 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();
@@ -691,20 +738,38 @@
                     {
                         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.浜哄伐瀹屾垚);
+                }
                 _outboundService.OutboundStockLockInfoService.Repository.UpdateData(outStockLockInfos);
 
                 int beforeStatus = locationInfo.LocationStatus;

--
Gitblit v1.9.3