From 7803a1f8d35c9b80ae07f14c60f871a74a5aebd6 Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期二, 31 三月 2026 15:28:00 +0800
Subject: [PATCH] 更新领料判断

---
 项目代码/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService.cs |  162 +++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 153 insertions(+), 9 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService.cs"
index ac1956f..56634a7 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WMS/WMSServices/WIDESEA_TaskInfoService/TaskService.cs"
@@ -18,11 +18,13 @@
 using AutoMapper;
 using Microsoft.AspNetCore.Mvc.ApiExplorer;
 using Newtonsoft.Json;
+using OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
 using SqlSugar;
 using System.Reflection.Emit;
 using System.Threading.Tasks;
 using WIDESEA_Common.CommonEnum;
 using WIDESEA_Common.LocationEnum;
+using WIDESEA_Common.MaterielEnum;
 using WIDESEA_Common.OrderEnum;
 using WIDESEA_Common.StockEnum;
 using WIDESEA_Common.TaskEnum;
@@ -33,13 +35,21 @@
 using WIDESEA_Core.Enums;
 using WIDESEA_Core.Helper;
 using WIDESEA_DTO;
+using WIDESEA_DTO.ERP;
 using WIDESEA_DTO.Inbound;
+using WIDESEA_DTO.Outbound;
 using WIDESEA_DTO.Stock;
 using WIDESEA_DTO.Task;
 using WIDESEA_External.ERPService;
+using WIDESEA_External.MESService;
 using WIDESEA_External.Model;
 using WIDESEA_IBasicRepository;
 using WIDESEA_IBasicService;
+using WIDESEA_IInboundRepository;
+using WIDESEA_IInboundService;
+using WIDESEA_InboundRepository;
+using WIDESEA_IOutboundRepository;
+using WIDESEA_IOutboundService;
 using WIDESEA_IRecordService;
 using WIDESEA_IStockRepository;
 using WIDESEA_IStockService;
@@ -54,15 +64,17 @@
     {
         private readonly IMapper _mapper;
         private readonly IUnitOfWorkManage _unitOfWorkManage;
-        private readonly IStockRepository _stockRepository;
-        private readonly IBasicService _basicService;
         private readonly IRecordService _recordService;
+        private readonly IStockRepository _stockRepository;
         private readonly IStockService _stockService;
         private readonly IBasicRepository _basicRepository;
-        private readonly IApiInfoRepository _apiInfoRepository;
+        private readonly IBasicService _basicService;
         private readonly IInvokeERPService _invokeERPService;
-        private readonly IPalletTypeInfoRepository _palletTypeInfoRepository;
-        private readonly IAGVStationInfoRepository _agvStationInfoRepository;
+        private readonly IInvokeMESService _invokeMESService;
+        private readonly IOutboundRepository _outboundRepository;
+        private readonly IOutboundService _outboundService;
+        private readonly IInboundRepository _inboundRepository;
+        private readonly IInboundService _inboundService;
         public ITaskRepository Repository => BaseDal;
 
         private Dictionary<string, OrderByType> _taskOrderBy = new()
@@ -75,7 +87,7 @@
 
         public List<int> TaskOutboundTypes => typeof(TaskTypeEnum).GetEnumIndexList().Where(x => x >= 100 && x < 500).ToList();
 
-        public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IStockRepository stockRepository, IBasicService basicService, IRecordService recordService, IStockService stockService, IBasicRepository basicRepository, IApiInfoRepository apiInfoRepository, IInvokeERPService invokeERPService, IPalletTypeInfoRepository palletTypeInfoRepository, IAGVStationInfoRepository agvStationInfoRepository) : base(BaseDal)
+        public TaskService(ITaskRepository BaseDal, IMapper mapper, IUnitOfWorkManage unitOfWorkManage, IStockRepository stockRepository, IBasicService basicService, IRecordService recordService, IStockService stockService, IBasicRepository basicRepository, IInvokeERPService invokeERPService,  IOutboundRepository outboundRepository, IOutboundService outboundService, IInboundRepository inboundRepository,IInboundService inboundService,IInvokeMESService invokeMESService) : base(BaseDal)
         {
             _mapper = mapper;
             _unitOfWorkManage = unitOfWorkManage;
@@ -84,10 +96,12 @@
             _recordService = recordService;
             _stockService = stockService;
             _basicRepository = basicRepository;
-            _apiInfoRepository = apiInfoRepository;
             _invokeERPService = invokeERPService;
-            _palletTypeInfoRepository = palletTypeInfoRepository;
-            _agvStationInfoRepository = agvStationInfoRepository;
+            _invokeMESService = invokeMESService;
+            _outboundRepository = outboundRepository;
+            _outboundService = outboundService;
+            _inboundRepository = inboundRepository;
+            _inboundService = inboundService;
         }
 
         /// <summary>
@@ -98,6 +112,10 @@
         {
             try
             {
+                if (tasks==null || tasks.Count == 0)
+                {
+                    return WebResponseContent.Instance.Error($"浼犲叆浠诲姟涓虹┖");
+                }
                 List<WMSTaskDTO> taskDTOs = _mapper.Map<List<WMSTaskDTO>>(tasks);
                 taskDTOs.ForEach(x =>
                 {
@@ -115,6 +133,28 @@
             catch (Exception ex)
             {
                 return WebResponseContent.Instance.Error(ex.Message);
+            }
+        }
+        /// <summary>
+        /// 浠诲姟淇℃伅鎺ㄩ�佽嚦WCS
+        /// </summary>
+        /// <returns></returns>
+        public List<string> ExistRoadwaysError()
+        {
+            try
+            {
+                string url = AppSettings.Get("WCS");
+                if (string.IsNullOrEmpty(url))
+                {
+                    return null;
+                }
+                string response = HttpHelper.Get($"{url}/api/Task/ExistRoadwaysError");
+
+                return JsonConvert.DeserializeObject<List<string>>(response) ?? throw new Exception("杩斿洖閿欒");
+            }
+            catch (Exception ex)
+            {
+                return null;
             }
         }
         /// <summary>
@@ -140,5 +180,109 @@
                 return WebResponseContent.Instance.Error(ex.Message);
             }
         }
+        private readonly static object lockerAddSG = new object();
+        public WebResponseContent AddOutSGOrder(List<SGOutOrderDTO> outOrderDTOs)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                lock (lockerAddSG)
+                {
+                    int outDetailId = _outboundRepository.OutSGOrderDetailRepository.QueryData().OrderByDescending(x=>x.Id).FirstOrDefault()?.Id ?? 0;
+                    content = _outboundService.OutSGOrderService.AddOutSGOrder(outOrderDTOs);
+                    if (!content.Status)
+                    {
+                        return content;
+                    }
+                    //鑾峰彇鎵�鏈夌殑鍑哄簱璇︽儏鍒ゆ柇鏄惁婊¤冻鍑哄簱閲忓皬浜�5涓囦笖灏忎簬17鍗�
+                    //List<Dt_OutStockLockInfo> outStockLockInfos = _outboundRepository.OutStockLockInfoRepository.QueryData(x=>x.OrderType==OutOrderTypeEnum.OutSGPick.ObjToInt() && x.Status<OutLockStockStatusEnum.鍏抽棴.ObjToInt());
+                    //decimal sumAssignQty = outStockLockInfos.Sum(x => x.AssignQuantity);
+                    //int outCount= outStockLockInfos.Select(x=>x.PalletCode).Distinct().Count();
+                    //if (sumAssignQty < AppSettings.Get("OutSGLength").ObjToInt() && outCount < AppSettings.Get("OutSGCount").ObjToInt())
+                    //{
+                        List<int> ints = _outboundRepository.OutSGOrderDetailRepository.QueryData(x => x.Id > outDetailId).Select(x => x.Id).ToList();
+                        int[] reseponse = new int[ints.Count];
+                        for (int i = 0; i < ints.Count; i++)
+                        {
+                            reseponse[i] = ints[i];
+                        }
+                        content.Message = CreateSGOutboundTasks(reseponse).Message;
+                    //}
+                    //else
+                    //{
+                    //    return content.Error($"褰撳墠鍑哄簱閲忥細{sumAssignQty},褰撳墠鍑哄簱鍗锋暟锛歿outCount},涓嶆弧瓒冲皬浜�5涓囦笖灏忎簬17鍗峰嚭搴撴潯浠�");
+                    //}
+                }
+
+            }
+            catch (Exception ex)
+            {
+                content.Error(ex.Message);
+            }
+            return content;
+        }
+        
+        /// <summary>
+        /// 鍚敤
+        /// </summary>
+        /// <returns></returns>
+        public WebResponseContent EnableStatus(int[] keys)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                List<Dt_Task> tasks = BaseDal.QueryData(x => x.TaskType < TaskTypeEnum.Inbound.ObjToInt());
+                List<Dt_AGVStationInfo> stationInfos = _basicRepository.AGVStationInfoRepository.QueryData(x => keys.Contains(x.Id));
+                foreach (var station in stationInfos)
+                {
+                    Dt_Task? taskOld = tasks.FirstOrDefault(x => x.TargetAddress == station.AGVStationCode);
+                    if (taskOld!=null)
+                    {
+                        content.Message+= $"{station.AGVStationCode}鍑哄簱{taskOld.TaskNum}浠诲姟鎵ц涓�;";
+                        continue;
+                    }
+                    if (station.StationArea==StationAreaEnum.涓�妤兼殏瀛樻灦.ToString())
+                    {
+                        Dt_StockInfo stockInfo = _stockRepository.StockInfoRepository.QueryFirst(x=>x.LocationCode==station.AGVStationCode);
+                        if (stockInfo!=null)
+                        {
+                            content.Message += $"{station.AGVStationCode}{stockInfo.PalletCode}搴撳瓨缁戝畾;";
+                            continue;
+                        }
+                    }
+                    station.IsOccupied = WhetherEnum.False.ObjToInt();
+                }
+                _basicRepository.AGVStationInfoRepository.UpdateData(stationInfos);
+                content.OK(content.Message.IsNullOrEmpty() ? "鎴愬姛" : $"閮ㄥ垎鎴愬姛鍚敤!{content.Message}鏃犳硶鍚敤");
+            }
+            catch (Exception ex)
+            {
+                content.Error(ex.Message);
+            }
+            return content;
+        }
+        /// <summary>
+        /// 绂佺敤
+        /// </summary>
+        /// <returns></returns>
+        public WebResponseContent DisableStatus(int[] keys)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                List<Dt_AGVStationInfo> stationInfos = _basicRepository.AGVStationInfoRepository.QueryData(x => keys.Contains(x.Id));
+                stationInfos.ForEach(x =>
+                {
+                    x.IsOccupied = WhetherEnum.True.ObjToInt();
+                });
+                _basicRepository.AGVStationInfoRepository.UpdateData(stationInfos);
+                content.OK("鎴愬姛");
+            }
+            catch (Exception ex)
+            {
+                content.Error(ex.Message);
+            }
+            return content;
+        }
     }
 }

--
Gitblit v1.9.3