From e3cfda747bd53f4550904d60cd13aa8f4e525739 Mon Sep 17 00:00:00 2001
From: wangxinhui <wangxinhui@hnkhzn.com>
Date: 星期一, 01 十二月 2025 18:52:17 +0800
Subject: [PATCH] 更新WMS接口等

---
 项目代码/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs |  148 +++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 123 insertions(+), 25 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 bc33716..d7eea4a 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"
@@ -15,6 +15,7 @@
  *----------------------------------------------------------------*/
 #endregion << 鐗� 鏈� 娉� 閲� >>
 using AutoMapper;
+using Microsoft.AspNetCore.Mvc;
 using Newtonsoft.Json;
 using NPOI.SS.Formula.Functions;
 using SqlSugar;
@@ -37,6 +38,7 @@
 using WIDESEAWCS_DTO.Agv;
 using WIDESEAWCS_DTO.TaskInfo;
 using WIDESEAWCS_IBasicInfoRepository;
+using WIDESEAWCS_IBasicInfoService;
 using WIDESEAWCS_ITaskInfoRepository;
 using WIDESEAWCS_ITaskInfoService;
 using WIDESEAWCS_Model.Models;
@@ -59,6 +61,7 @@
         private readonly IRouterRepository _routerRepository;
         private readonly IApiInfoRepository _apiInfoRepository;
         private readonly ILocationInfoRepository _locationInfoRepository;
+        private readonly ILocationInfoService _locationInfoService;
 
         private Dictionary<string, OrderByType> _taskOrderBy = new()
             {
@@ -76,7 +79,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) : 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) : base(BaseDal)
         {
             _mapper = mapper;
             _cacheService = cacheService;
@@ -88,6 +91,7 @@
             _apiInfoRepository = apiInfoRepository;
             _locationInfoRepository = locationInfoRepository;
             _unitOfWorkManage = unitOfWorkManage;
+            _locationInfoService = locationInfoService;
         }
         static object lock_taskReceive = new object();
         /// <summary>
@@ -111,7 +115,7 @@
                     List<Dt_StationManger> stationMangers = _stationMangerRepository.QueryData();
                     //涓嬪彂浠诲姟缁�
                     string taskGroup= taskDTO.TaskGroupCode.IsNullOrEmpty() ? Guid.NewGuid().ToString().Replace("-","") : taskDTO.TaskGroupCode;
-                    foreach (var item in taskDTO.Tasks)
+                    foreach (var item in taskDTO.Tasks.OrderBy(x=>x.ToStationCode))
                     {
                         if (item.ToStationCode.IsNullOrEmpty()) throw new Exception($"浠诲姟{item.TaskCode}鍑哄簱鐩爣鎿嶄綔鍙颁笉鑳戒负绌�");
                         //鑾峰彇鎿嶄綔鍙�
@@ -126,7 +130,7 @@
                         task.GroupId = taskGroup;
                         task.TaskType = TaskTypeEnum.Outbound.ObjToInt();
                         task.Roadway = locationInfo.RoadwayNo;
-                        task.DeviceCode = "AGV";
+                        task.DeviceCode = stationManger.CraneCode;
                         task.TaskState = TaskStatusEnum.AGV_Execute.ObjToInt();
                         tasks.Add(task);
                     }
@@ -152,7 +156,89 @@
             }
             return content;
         }
-       
+        static object lock_containerFlow = new object();
+        /// <summary>
+        /// 瀹瑰櫒鍏ュ簱鍒涘缓浠诲姟
+        /// </summary>
+        /// <returns></returns>
+        public WebResponseContent ContainerFlow(ContainerFlowDTO containerFlowDTO, string deviceCode)
+        {
+            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)!=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;
+        }
+        static object lock_requestInTask = new object();
+        /// <summary>
+        /// 鐢宠鍏ュ簱
+        /// </summary>
+        /// <returns></returns>
+        public WebResponseContent RequestInTask(string stationCode,string barCode)
+        {
+            WebResponseContent content = new WebResponseContent();
+            try
+            {
+                lock (lock_requestInTask)
+                {
+                    Dt_Task task = BaseDal.QueryFirst(x => x.PalletCode == barCode && 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($"鍙敤璐т綅涓嶈冻!");
+                    task.NextAddress = locationInfo.LocationCode;
+                    task.TargetAddress = locationInfo.LocationCode;
+                    task.CurrentAddress = stationCode;
+                    task.DeviceCode = "AGV";
+                    task.TaskState = TaskStatusEnum.AGV_Execute.ObjToInt();
+                    locationInfo.LocationStatus = LocationStatusEnum.Lock.ObjToInt();
+                    //鏇存柊浠诲姟鍜岃揣浣嶆暟鎹�
+                    _unitOfWorkManage.BeginTran();
+                    BaseDal.UpdateData(task);
+                    _locationInfoRepository.UpdateData(locationInfo);
+                    _unitOfWorkManage.CommitTran();
+                    _taskExecuteDetailService.AddTaskExecuteDetail(new List<int>() { task.TaskNum }, $"鍒嗛厤璐т綅{locationInfo.LocationCode}");
+
+                    content.OK("鎴愬姛");
+                }
+            }
+            catch (Exception ex)
+            {
+                _unitOfWorkManage.RollbackTran();
+                content.Error($"閿欒淇℃伅:{ex.Message}");
+            }
+            return content;
+        }
+
         public static string Post(string serviceAddress, string requestJson = "", string contentType = "application/json", Dictionary<string, string>? headers = null)
         {
             string result = string.Empty;
@@ -208,7 +294,7 @@
                 task.ModifyDate = DateTime.Now;
                 BaseDal.UpdateData(task);
 
-                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskNum, task.ExceptionMessage);
+                _taskExecuteDetailService.AddTaskExecuteDetail(task, task.ExceptionMessage);
 
                 content = WebResponseContent.Instance.OK();
             }
@@ -250,7 +336,7 @@
 
                 BaseDal.UpdateData(task);
 
-                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskNum, $"浜哄伐鎭㈠鎸傝捣浠诲姟,鎭㈠鎸傝捣鏃朵换鍔$姸鎬併�恵task.TaskState}銆�");
+                _taskExecuteDetailService.AddTaskExecuteDetail(task, $"浜哄伐鎭㈠鎸傝捣浠诲姟,鎭㈠鎸傝捣鏃朵换鍔$姸鎬併�恵task.TaskState}銆�");
 
                 content = WebResponseContent.Instance.OK();
             }
@@ -291,7 +377,7 @@
 
                 BaseDal.UpdateData(task);
 
-                _taskExecuteDetailService.AddTaskExecuteDetail(task.TaskNum, $"浜哄伐灏嗕换鍔$姸鎬佷粠銆恵oldState}銆戝洖婊氬埌銆恵task.TaskState}銆�");
+                _taskExecuteDetailService.AddTaskExecuteDetail(task, $"浜哄伐灏嗕换鍔$姸鎬佷粠銆恵oldState}銆戝洖婊氬埌銆恵task.TaskState}銆�");
 
                 content = WebResponseContent.Instance.OK();
             }
@@ -339,7 +425,7 @@
                 AgvTaskFlowDTO agvTaskFlowDTO = new AgvTaskFlowDTO()
                 {
                     RequestId = Guid.NewGuid().ToString().Replace("-", ""),
-                    ContainerCode = code
+                    MissionCode = code
                 };
                 string request = JsonConvert.SerializeObject(agvTaskFlowDTO, settings);
                 string response = HttpHelper.Post(url, request);
@@ -409,25 +495,37 @@
                 }
                 else if(task != null && task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup)//鍏ュ簱浠诲姟閫昏緫
                 {
-                    string? url = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMSInBoundBack.ToString())?.ApiAddress;
-                    if (string.IsNullOrEmpty(url))
+                    //string? url = _apiInfoRepository.QueryFirst(x => x.ApiCode == APIEnum.WMSInBoundBack.ToString())?.ApiAddress;
+                    //if (string.IsNullOrEmpty(url))
+                    //{
+                    //    _taskExecuteDetailService.AddTaskExecuteDetail(taskNum, $"鏈壘鍒癢MS鍏ュ簱涓婃姤鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+                    //    UpdateTaskExceptionMessage(taskNum, $"鏈壘鍒癢MS鍏ュ簱涓婃姤鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+                    //    return content.Error($"{taskNum},鏈壘鍒癢MS鍏ュ簱涓婃姤鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+                    //}
+                    //ContainerInFinishDTO containerInFinishDTO = new ContainerInFinishDTO()
+                    //{
+                    //    TaskCode= task.TaskNum.ToString(),
+                    //    ContainerCode = task.PalletCode,
+                    //    FromStationCode = task.SourceAddress,
+                    //    ToLocationCode = task.TargetAddress
+                    //};
+                    //string request = JsonConvert.SerializeObject(containerInFinishDTO, settings);
+                    ////璋冪敤鎺ュ彛
+                    //string response = HttpHelper.Post(url, request);
+                    //WMSResponseContent wMSResponse = JsonConvert.DeserializeObject<WMSResponseContent>(response) ??throw new Exception($"{taskNum},鏈帴鏀跺埌WMS鍏ュ簱涓婃姤杩斿洖鍊�");
+                    //if (wMSResponse.Code!="0") throw new Exception($"鍏ュ簱浠诲姟{task.TaskNum}WMS鍏ュ簱涓婃姤閿欒,淇℃伅:{wMSResponse.Msg}");
+                    Dt_LocationInfo locationInfo = _locationInfoRepository.QueryFirst(x => x.LocationCode == task.TargetAddress);
+                    if (locationInfo.LocationStatus != LocationStatusEnum.Lock.ObjToInt())
                     {
-                        _taskExecuteDetailService.AddTaskExecuteDetail(taskNum, $"鏈壘鍒癢MS鍏ュ簱涓婃姤鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
-                        UpdateTaskExceptionMessage(taskNum, $"鏈壘鍒癢MS鍏ュ簱涓婃姤鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
-                        return content.Error($"{taskNum},鏈壘鍒癢MS鍏ュ簱涓婃姤鎺ュ彛,璇锋鏌ユ帴鍙i厤缃�");
+                        return content.Error($"{locationInfo.LocationCode}璐т綅鐘舵�佷笉姝g‘");
                     }
-                    ContainerInFinishDTO containerInFinishDTO = new ContainerInFinishDTO()
-                    {
-                        TaskCode= task.TaskNum.ToString(),
-                        ContainerCode = task.PalletCode,
-                        FromStationCode = task.SourceAddress,
-                        ToLocationCode = task.TargetAddress
-                    };
-                    string request = JsonConvert.SerializeObject(containerInFinishDTO, settings);
-                    //璋冪敤鎺ュ彛
-                    string response = HttpHelper.Post(url, request);
-                    WMSResponseContent wMSResponse = JsonConvert.DeserializeObject<WMSResponseContent>(response) ??throw new Exception($"{taskNum},鏈帴鏀跺埌WMS鍏ュ簱涓婃姤杩斿洖鍊�");
-                    if (wMSResponse.Code!="0") throw new Exception($"鍏ュ簱浠诲姟{task.TaskNum}WMS鍏ュ簱涓婃姤閿欒,淇℃伅:{wMSResponse.Msg}");
+                    task.TaskState = TaskStatusEnum.Finish.ObjToInt();
+                    locationInfo.LocationStatus = LocationStatusEnum.InStock.ObjToInt();
+                    locationInfo.PalletCode = task.PalletCode;
+                    _unitOfWorkManage.BeginTran();
+                    _locationInfoRepository.UpdateData(locationInfo);
+                    BaseDal.DeleteAndMoveIntoHty(task, App.User?.UserId == 0 ? OperateTypeEnum.鑷姩瀹屾垚 : OperateTypeEnum.浜哄伐瀹屾垚);
+                    _unitOfWorkManage.CommitTran();
                 }
                 content.OK("浠诲姟瀹屾垚");
             }

--
Gitblit v1.9.3