From 6d3ea08855337c0cfcc60df2903d3431611c7097 Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期六, 13 十二月 2025 17:36:56 +0800
Subject: [PATCH] 优化程序,输送线入库按钮对接

---
 项目代码/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs |  126 +++++++++++++++++++++++++++++++----------
 1 files changed, 95 insertions(+), 31 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs"
index b640cce..c3526ee 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs"
@@ -24,8 +24,10 @@
 using System.Linq;
 using System.Net.Http.Headers;
 using System.Security.Policy;
+using System.Threading.Tasks;
 using WIDESEA_DTO.Agv;
 using WIDESEA_External.Model;
+using WIDESEAWCS_BasicInfoService;
 using WIDESEAWCS_Common;
 using WIDESEAWCS_Common.APIEnum;
 using WIDESEAWCS_Common.TaskEnum;
@@ -63,6 +65,7 @@
         private readonly IApiInfoRepository _apiInfoRepository;
         private readonly ILocationInfoRepository _locationInfoRepository;
         private readonly ILocationInfoService _locationInfoService;
+        private readonly ILocationStatusChangeRecordService _locationStatusChangeRecordService;
 
         private Dictionary<string, OrderByType> _taskOrderBy = new()
             {
@@ -80,7 +83,7 @@
 
         public List<int> TaskRelocationTypes => typeof(TaskTypeEnum).GetEnumIndexList().Where(x => x >= 900 && x < 1000).ToList();
 
-        public TaskService(ITaskRepository BaseDal, IMapper mapper, ICacheService cacheService, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository, IApiInfoRepository apiInfoRepository,ILocationInfoRepository locationInfoRepository,IUnitOfWorkManage unitOfWorkManage, ILocationInfoService locationInfoService) : base(BaseDal)
+        public TaskService(ITaskRepository BaseDal, IMapper mapper, ICacheService cacheService, IRouterService routerService, ITaskExecuteDetailService taskExecuteDetailService, ITaskExecuteDetailRepository taskExecuteDetailRepository, IStationMangerRepository stationMangerRepository, IRouterRepository routerRepository, IApiInfoRepository apiInfoRepository,ILocationInfoRepository locationInfoRepository,IUnitOfWorkManage unitOfWorkManage, ILocationInfoService locationInfoService,ILocationStatusChangeRecordService locationStatusChangeRecordService) : base(BaseDal)
         {
             _mapper = mapper;
             _cacheService = cacheService;
@@ -93,6 +96,7 @@
             _locationInfoRepository = locationInfoRepository;
             _unitOfWorkManage = unitOfWorkManage;
             _locationInfoService = locationInfoService;
+            _locationStatusChangeRecordService=locationStatusChangeRecordService;
         }
         static object lock_taskReceive = new object();
         /// <summary>
@@ -156,9 +160,8 @@
                     BaseDal.AddData(tasks);
                     _locationInfoRepository.UpdateData(locationInfos);
                     _unitOfWorkManage.CommitTran();
-
                     _taskExecuteDetailService.AddTaskExecuteDetail(tasks.Select(x => x.TaskNum).ToList(), "鎺ユ敹WMS浠诲姟");
-
+                    _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfos, LocationStatusEnum.InStock, LocationStatusEnum.Lock, LocationChangeType.OutboundAssignLocation, tasks.Select(x => x.TaskNum).ToList());
                     content = tasks.Count > 0 ? content.OK("鎴愬姛!"+(errorMsg.IsNullOrEmpty()? "": errorMsg)) : content.Error("澶辫触");
                 }
             }
@@ -168,46 +171,105 @@
             }
             return content;
         }
-        static object lock_containerFlow = new object();
+        
         /// <summary>
         /// 瀹瑰櫒鍏ュ簱鍒涘缓浠诲姟
         /// </summary>
         /// <returns></returns>
-        public WebResponseContent ContainerFlow(ContainerFlowDTO containerFlowDTO, string deviceCode)
+        public WebResponseContent ContainerFlow(ContainerFlowDTO containerFlowDTO, string deviceCode, string stationCode)
         {
             WebResponseContent content = new WebResponseContent();
             try
             {
-                lock (lock_containerFlow)
+                List<Dt_LocationInfo> locationInfos = _locationInfoRepository.QueryData();
+                Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x => x.PalletCode == containerFlowDTO.ContainerCode);
+                if (locationInfo != null) throw new Exception($"搴撲綅鏂欑鍙穥containerFlowDTO.ContainerCode}宸插瓨鍦�");
+                if (BaseDal.QueryFirst(x => x.PalletCode == containerFlowDTO.ContainerCode && x.TaskType == TaskTypeEnum.Inbound.ObjToInt() && x.TaskState == TaskStatusEnum.CL_Executing.ObjToInt() && x.DeviceCode== deviceCode) != null)
                 {
-                    List<Dt_LocationInfo> locationInfos = _locationInfoRepository.QueryData();
-                    Dt_LocationInfo? locationInfo = locationInfos.FirstOrDefault(x=>x.PalletCode== containerFlowDTO.ContainerCode);
-                    if (locationInfo != null) throw new Exception($"搴撲綅鏂欑鍙穥containerFlowDTO.ContainerCode}宸插瓨鍦�");
-                    if (BaseDal.QueryFirst(x=>x.PalletCode==containerFlowDTO.ContainerCode)!=null) throw new Exception($"鏂欑鍙穥containerFlowDTO.ContainerCode}浠诲姟宸插瓨鍦�");
-                    Dt_LocationInfo? noInLocation = locationInfos.FirstOrDefault(x => x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus == EnableStatusEnum.Normal.ObjToInt());
-                    if (noInLocation == null) throw new Exception($"鍙敤璐т綅涓嶈冻!");
-                    Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.StationType == StationTypeEnum.StationType_OnlyInbound.ObjToInt() && x.StationDeviceCode == deviceCode);
-                    //鍒涘缓浠诲姟
-                    Dt_Task task = new Dt_Task();
-                    task.PalletCode = containerFlowDTO.ContainerCode;
-                    task.SourceAddress = containerFlowDTO.SlotCode;
-                    task.CurrentAddress = containerFlowDTO.SlotCode;
-                    task.NextAddress = stationManger.StationCode;
-                    task.TargetAddress = "";
-                    task.WMSId = "";
-                    task.TaskType = TaskTypeEnum.Inbound.ObjToInt();
-                    task.Roadway = noInLocation.RoadwayNo;
-                    task.DeviceCode = stationManger.StationDeviceCode;
-                    task.TaskState = TaskStatusEnum.CL_Executing.ObjToInt();
-                    //娣诲姞浠诲姟
-                    BaseDal.AddData(task);
-                    _taskExecuteDetailService.AddTaskExecuteDetail(new List<int>() { task.TaskNum }, "鍒涘缓鍏ュ簱浠诲姟");
-                    content.OK("鎴愬姛");
+                    return content.OK();
                 }
+                else if(BaseDal.QueryFirst(x => x.PalletCode == containerFlowDTO.ContainerCode) != null)
+                {
+                    throw new Exception($"鏂欑鍙穥containerFlowDTO.ContainerCode}浠诲姟宸插瓨鍦�");
+                }
+                Dt_LocationInfo? noInLocation = locationInfos.FirstOrDefault(x => x.LocationStatus == LocationStatusEnum.Free.ObjToInt() && x.EnableStatus == EnableStatusEnum.Normal.ObjToInt());
+                if (noInLocation == null) throw new Exception($"鍙敤璐т綅涓嶈冻!");
+                Dt_StationManger stationManger = _stationMangerRepository.QueryFirst(x => x.StationType == StationTypeEnum.StationType_OnlyInbound.ObjToInt() && x.StationDeviceCode == deviceCode);
+                //鍒涘缓浠诲姟
+                Dt_Task task = new Dt_Task();
+                task.PalletCode = containerFlowDTO.ContainerCode;
+                task.SourceAddress = containerFlowDTO.SlotCode;
+                task.CurrentAddress = containerFlowDTO.SlotCode;
+                task.NextAddress = stationManger.StationCode;
+                task.TargetAddress = "";
+                task.WMSId = "";
+                task.TaskType = TaskTypeEnum.Inbound.ObjToInt();
+                task.Roadway = noInLocation.RoadwayNo;
+                task.DeviceCode = stationManger.StationDeviceCode;
+                task.TaskState = TaskStatusEnum.CL_Executing.ObjToInt();
+                //娣诲姞浠诲姟
+                BaseDal.AddData(task);
+                _taskExecuteDetailService.AddTaskExecuteDetail(new List<int>() { task.TaskNum }, "鍒涘缓鍏ュ簱浠诲姟");
+                content.OK("鎴愬姛");
             }
             catch (Exception ex)
             {
                 content.Error($"閿欒淇℃伅:{ex.Message}");
+            }
+            return content;
+        }
+        /// <summary>
+        /// 鎾澧欏垵濮嬪寲
+        /// </summary>
+        /// <returns></returns>
+        public WebResponseContent InitLight()
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                EPLightContent lightContent = INITIALIZATION();
+                if (lightContent.Result != "0") throw new Exception($"{lightContent.Msg}");
+                content.OK();
+            }
+            catch (Exception ex)
+            {
+                content.Error(ex.Message);
+            }
+            return content;
+        }
+        /// <summary>
+        /// 缁撴潫浣滀笟
+        /// </summary>
+        /// <returns></returns>
+        public WebResponseContent EndLight()
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                EPLightContent lightContent = ENDWORK();
+                if (lightContent.Result != "0") throw new Exception($"{lightContent.Msg}");
+                content.OK();
+            }
+            catch (Exception ex)
+            {
+                content.Error(ex.Message);
+            }
+            return content;
+        }
+        /// <summary>
+        /// 鎾澧欎寒鐏�
+        /// </summary>
+        /// <returns></returns>
+        public WebResponseContent SendLight(TaskSendLight taskSendLight)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                EPLightContent pLightContent = new EPLightContent();
+            }
+            catch (Exception ex)
+            {
+                content.Error(ex.Message);
             }
             return content;
         }
@@ -223,7 +285,7 @@
             {
                 lock (lock_requestInTask)
                 {
-                    Dt_Task task = BaseDal.QueryFirst(x => x.PalletCode == barCode && x.NextAddress == stationCode && x.TaskState == TaskStatusEnum.CL_Executing.ObjToInt());
+                    Dt_Task task = BaseDal.QueryFirst(x => x.PalletCode == barCode && x.TaskType==TaskTypeEnum.Inbound.ObjToInt() && x.NextAddress == stationCode && x.TaskState == TaskStatusEnum.CL_Executing.ObjToInt());
                     if (task == null) throw new Exception($"{barCode}鏂欑鏈壘鍒颁换鍔�!");
                     Dt_LocationInfo? locationInfo = _locationInfoService.AssignLocation();
                     if (locationInfo == null) throw new Exception($"鍙敤璐т綅涓嶈冻!");
@@ -239,7 +301,7 @@
                     _locationInfoRepository.UpdateData(locationInfo);
                     _unitOfWorkManage.CommitTran();
                     _taskExecuteDetailService.AddTaskExecuteDetail(new List<int>() { task.TaskNum }, $"鍒嗛厤璐т綅{locationInfo.LocationCode}");
-
+                    _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, LocationStatusEnum.Free, LocationStatusEnum.Lock, LocationChangeType.InboundAssignLocation, task.TaskNum);
                     content.OK("鎴愬姛");
                 }
             }
@@ -513,6 +575,7 @@
                     _locationInfoRepository.UpdateData(locationInfo);
                     BaseDal.DeleteAndMoveIntoHty(task, App.User?.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
                     _unitOfWorkManage.CommitTran();
+                    _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, LocationStatusEnum.Lock, LocationStatusEnum.Free, LocationChangeType.OutboundCompleted, task.TaskNum);
                 }
                 else if(task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)//鍏ュ簱浠诲姟瀹屾垚閫昏緫
                 {
@@ -548,6 +611,7 @@
                     _locationInfoRepository.UpdateData(locationInfo);
                     BaseDal.DeleteAndMoveIntoHty(task, App.User?.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
                     _unitOfWorkManage.CommitTran();
+                    _locationStatusChangeRecordService.AddLocationStatusChangeRecord(locationInfo, LocationStatusEnum.Lock, LocationStatusEnum.InStock, LocationChangeType.InboundCompleted, task.TaskNum);
                 }
                 content.OK("浠诲姟瀹屾垚");
             }

--
Gitblit v1.9.3