From ca529041b8113b3684c387ba71471d47aa59cdef Mon Sep 17 00:00:00 2001 From: huangxiaoqiang <huangxiaoqiang@hnkhzn.com> Date: 星期四, 11 九月 2025 16:24:51 +0800 Subject: [PATCH] 代码提交 --- 项目代码/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs | 419 ++++++++++++++++++++++++++++++++++++++++------------------- 1 files changed, 283 insertions(+), 136 deletions(-) diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs" index 17eb286..7088e2c 100644 --- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs" +++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WCSServices/WIDESEAWCS_TaskInfoService/TaskService.cs" @@ -14,21 +14,10 @@ * *----------------------------------------------------------------*/ #endregion << 鐗� 鏈� 娉� 閲� >> - using AutoMapper; -using HslCommunication.Enthernet; using Newtonsoft.Json; -using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; using SqlSugar; -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; using System.Diagnostics.CodeAnalysis; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Threading.Tasks; using WIDESEA_DTO.Agv; using WIDESEAWCS_Common; using WIDESEAWCS_Common.APIEnum; @@ -37,18 +26,15 @@ using WIDESEAWCS_Core.BaseServices; using WIDESEAWCS_Core.Enums; using WIDESEAWCS_Core.Helper; -using WIDESEAWCS_DTO.BasicInfo; -using WIDESEAWCS_DTO.System; +using WIDESEAWCS_Core.LogHelper; using WIDESEAWCS_DTO.TaskInfo; using WIDESEAWCS_IBasicInfoRepository; using WIDESEAWCS_ITaskInfoRepository; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; -using WIDESEAWCS_QuartzJob; using WIDESEAWCS_QuartzJob.Models; using WIDESEAWCS_QuartzJob.Repository; using WIDESEAWCS_QuartzJob.Service; -using WIDESEAWCS_TaskInfoRepository; using ICacheService = WIDESEAWCS_Core.Caches.ICacheService; namespace WIDESEAWCS_TaskInfoService @@ -79,6 +65,8 @@ public List<int> TaskInboundTypes => typeof(TaskTypeEnum).GetEnumIndexList().Where(x => x >= 500 && x < 900).ToList(); public List<int> TaskOutboundTypes => typeof(TaskTypeEnum).GetEnumIndexList().Where(x => x >= 100 && x < 500).ToList(); + + 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) : base(BaseDal) { @@ -139,53 +127,6 @@ return WebResponseContent.Instance.Error(ex.Message); } } - public WebResponseContent AgvCarrying(int row,int startColumn, int endColumn, int startlayer,int targetLayer) - { - try - { - List<Dt_Task> tasks = new List<Dt_Task>(); - for (int i = startColumn; i <= endColumn; i++) - { - string column = i.ToString(); - if (i<10) - { - column = "0" + i.ToString(); - } - string layer = targetLayer.ToString(); - if (targetLayer<10) - { - layer = "0"+targetLayer.ToString(); - } - Dt_Task task = new Dt_Task() - { - WarehouseId = 7, - TaskNum = DateTime.Now.ToString("yyMMddHHmm").ObjToInt() + i, - PalletCode= DateTime.Now.ToString("yyMMddHHmm") +i, - PalletType=0, - DeviceCode="AGV_CP", - Roadway= "AGV_CP", - TaskType =999, - SourceAddress=string.Format($"AGV_CP-00{row}-0{column}-00{startlayer}-01"), - CurrentAddress=string.Format($"AGV_CP-00{row}-0{column}-00{startlayer}-01"), - TargetAddress= string.Format($"AGV_CP-00{row}-0{column}-00{layer}-01"), - NextAddress= string.Format($"AGV_CP-00{row}-0{column}-00{layer}-01"), - Grade=0, - WMSId=0, - AgvTaskNum = "CP" + DateTime.Now.ToString("yyMMddHHmm").ObjToInt() + i, - TaskState = TaskStatusEnum.New.ObjToInt(), - Remark= "娴嬭瘯绌烘" - }; - tasks.Add(task); - } - BaseDal.AddData(tasks); - return WebResponseContent.Instance.OK(""); - } - catch (Exception ex) - { - return WebResponseContent.Instance.Error(ex.Message); - } - - } /// <summary> /// 鎺ユ敹WMS浠诲姟淇℃伅 /// </summary> @@ -211,10 +152,18 @@ task.CurrentAddress = item.SourceAddress; Dt_Router? router; - + if (task.TaskType==TaskTypeEnum.Relocation.ObjToInt()) + { + task.DeviceCode = task.Roadway; + task.NextAddress = task.TargetAddress; + task.TaskState = TaskStatusEnum.SC_Execute.ObjToInt(); + tasks.Add(task); + break; + } TaskTypeGroup taskTypeGroup = item.TaskType.GetTaskTypeGroup(); if (string.IsNullOrEmpty(item.AGVArea)) { + Dt_StationManger stationManger; //鑾峰彇绔欏彴淇℃伅 if (taskTypeGroup == TaskTypeGroup.InboundGroup) @@ -239,17 +188,47 @@ if (routers.Count == 1) { + //鍏ュ簱 if (taskTypeGroup == TaskTypeGroup.InboundGroup) { task.CurrentAddress = router.StartPosi; task.NextAddress = router.NextPosi; task.DeviceCode = router.ChildPosiDeviceCode; } - else + else //鍑哄簱 { task.DeviceCode = stationManger.StackerCraneCode; task.NextAddress = router.NextPosi; + task.TaskState = (int)TaskStatusEnum.SC_Execute; } + } + else + { + //鎴愬搧鐮佸灈浠诲姟鐢熸垚 + if (taskTypeGroup == TaskTypeGroup.InboundGroup && !task.Roadway.Contains("YL")) + { + task.CurrentAddress = router.StartPosi; + task.NextAddress = ""; + task.DeviceCode = router.ChildPosiDeviceCode; + } + else if(taskTypeGroup == TaskTypeGroup.InboundGroup && task.Roadway.Contains("YL")) //鍘熸枡鍏ュ簱 + { + router = routers.FirstOrDefault(x=>x.ChildPosiDeviceCode==task.Roadway); + task.CurrentAddress = router.StartPosi; + task.NextAddress = router.NextPosi; + task.DeviceCode = router.ChildPosi; + } + } + } + else + { + //鎴愬搧鍏ュ簱 + List<Dt_Router> routers = _routerRepository.QueryData(x => x.InOutType == item.TaskType && x.StartPosi=="AGV" && x.ChildPosiDeviceCode==item.RoadWay); + router = routers.FirstOrDefault(); + if (routers.Count == 1) + { + task.NextAddress = router.NextPosi; + task.DeviceCode = router.ChildPosi; } } tasks.Add(task); @@ -314,14 +293,131 @@ } return content; } - - /// <summary> - /// + // <summary> + /// 璇锋眰鍏ュ簱浠诲姟 /// </summary> - /// <param name="palletCode"></param> - /// <param name="sourceAddress"></param> + /// <param name="palletCode">鎵樼洏鍙�</param> + /// <param name="sourceAddress">璧峰鍦板潃</param> + /// /// <param name="roadWay">宸烽亾</param> /// <returns></returns> - public WebResponseContent RequestWMSTaskSimple(string palletCode, string sourceAddress, int taskType=630) + public WebResponseContent RequestYLWMSTaskSimple(string palletCode, string sourceAddress,int taskNum=0) + { + WebResponseContent content = new WebResponseContent(); + try + { + string address = AppSettings.Get("WMSApiAddress"); + if (string.IsNullOrEmpty(address)) + { + return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃"); + } + string responseStr = HttpHelper.Get($"{address}/api/Task/RequestYLWMSTaskSimple?stationCode={sourceAddress}&palletCode={palletCode}&taskNum{taskNum}"); + WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr); + if (responseContent != null && responseContent.Status && responseContent.Data != null) + { + WMSTaskDTO? taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(responseContent.Data.ToString()); + if (taskDTO != null) + { + content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO }); + } + } + + } + catch (Exception ex) + { + content = WebResponseContent.Instance.Error(ex.Message); + } + return content; + } + // <summary> + /// 鍏ュ簱鐢宠 + /// </summary> + public WebResponseContent YLPurchaseBoxing(string palletCode) + { + WebResponseContent? content = new WebResponseContent(); + try + { + string address = AppSettings.Get("WMSApiAddress"); + if (string.IsNullOrEmpty(address)) + { + return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃"); + } + string responseStr = HttpHelper.Get($"{address}/api/Task/YLPurchaseBoxing?palletCode={palletCode}"); + WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr); + + content = responseContent; + + } + catch (Exception ex) + { + content.Error(ex.Message); + } + return content; + } + // <summary> + /// 璇锋眰鎴愬搧鍏ュ簱宸烽亾 + /// </summary> + /// <returns></returns> + public WebResponseContent AssignCPRoadwayNo() + { + WebResponseContent content = new WebResponseContent(); + try + { + string address = AppSettings.Get("WMSApiAddress"); + if (string.IsNullOrEmpty(address)) + { + return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃"); + } + string responseStr = HttpHelper.Get($"{address}/api/Task/AssignCPRoadwayNo"); + + if (!responseStr.IsNullOrEmpty()) + { + content.OK("鎴愬姛", responseStr); + } + + } + catch (Exception ex) + { + content = WebResponseContent.Instance.Error(ex.Message); + } + return content; + } + + // <summary> + /// 璇锋眰鍘熸枡鍏ュ簱宸烽亾 + /// </summary> + /// <returns></returns> + public WebResponseContent AssignYLRoadwayNo(string palletCode) + { + WebResponseContent content = new WebResponseContent(); + try + { + string address = AppSettings.Get("WMSApiAddress"); + if (string.IsNullOrEmpty(address)) + { + return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃"); + } + string responseStr = HttpHelper.Get($"{address}/api/Task/AssignYLRoadwayNo?palletCode={palletCode}"); + WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr); + if (responseContent != null && responseContent.Status && responseContent.Data != null) + { + content = responseContent; + } + + } + catch (Exception ex) + { + content = WebResponseContent.Instance.Error(ex.Message); + } + return content; + } + // <summary> + /// 璇锋眰鍏ュ簱浠诲姟 + /// </summary> + /// <param name="palletCode">鎵樼洏鍙�</param> + /// <param name="sourceAddress">璧峰鍦板潃</param> + /// /// <param name="roadWay">宸烽亾</param> + /// <returns></returns> + public WebResponseContent RequestWMSTaskSimple(string palletCode, string sourceAddress,string roadWay="", int taskType=630, int taskNum = 0, string targetAddress = "") { WebResponseContent content = new WebResponseContent(); try @@ -340,16 +436,15 @@ // { WMSTaskDTO? taskDTO = new WMSTaskDTO() { - Id = 1, - TaskNum = DateTime.Now.ToString("mmss").ObjToInt(), - PalletCode="", - RoadWay="", + TaskNum = taskNum ==0 ? DateTime.Now.ToString("mmss").ObjToInt(): taskNum, + PalletCode= palletCode, + RoadWay= roadWay, TaskType= taskType, PalletType=1, - TaskStatus=TaskStatusEnum.New.ObjToInt(), + TaskStatus= TaskStatusEnum.New.ObjToInt(), SourceAddress= sourceAddress, - TargetAddress="", - WarehouseId=1, + TargetAddress= targetAddress, + WarehouseId=2, Grade=0, }; content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO }); @@ -400,42 +495,6 @@ // return content; //} - /// <summary> - /// - /// </summary> - /// <param name="sourceAddress"></param> - /// <param name="palletCode"></param> - /// <param name="heightType"></param> - /// <param name="roadways"></param> - /// <returns></returns> - public WebResponseContent RequestWMSTask(string palletCode, string sourceAddress, int heightType, List<string> roadways) - { - WebResponseContent content = new WebResponseContent(); - try - { - string address = AppSettings.Get("WMSApiAddress"); - if (string.IsNullOrEmpty(address)) - { - return WebResponseContent.Instance.Error($"鏈壘鍒癢MSApi鍦板潃"); - } - string responseStr = HttpHelper.Post($"{address}/api/Task/DeviceRequestInboundTaskByRoadways?stationCode={sourceAddress}&palletCode={palletCode}&heightType={heightType}", roadways.Serialize()); - WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr); - if (responseContent != null && responseContent.Status && responseContent.Data != null) - { - WMSTaskDTO? taskDTO = JsonConvert.DeserializeObject<WMSTaskDTO>(responseContent.Data.ToString()); - if (taskDTO != null) - { - content = ReceiveWMSTask(new List<WMSTaskDTO> { taskDTO }); - } - } - - } - catch (Exception ex) - { - content = WebResponseContent.Instance.Error(ex.Message); - } - return content; - } /// <summary> /// 鍒嗛厤宸烽亾 @@ -584,29 +643,6 @@ } /// <summary> - /// 鍚慦MS鐢宠鍒嗛厤璐т綅 - /// </summary> - /// <param name="taskNum"></param> - /// <param name="roadwayNo"></param> - /// <param name="heightType"></param> - /// <returns></returns> - /// <exception cref="Exception"></exception> - public string? RequestAssignLocationByHeight(int taskNum, string roadwayNo, int heightType) - { - string address = AppSettings.Get("WMSApiAddress"); - if (string.IsNullOrEmpty(address)) throw new Exception("鏈壘鍒癢MSApi鍦板潃"); - string responseStr = HttpHelper.Get($"{address}/api/Task/AssignInboundTaskLocationByHeight?taskNum={taskNum}&roadwayNo={roadwayNo}&heightType={heightType}"); - - WebResponseContent? responseContent = JsonConvert.DeserializeObject<WebResponseContent>(responseStr); - if (responseContent != null && responseContent.Status && responseContent.Data != null) - { - return responseContent.Data.ToString(); - } - - return ""; - } - - /// <summary> /// 鏍规嵁璁惧缂栧彿銆佷换鍔$被鍨嬪垎缁�(鍙��)鎸夌収浼樺厛绾т互鍙婂垱寤烘椂闂存帓搴忔煡璇换鍔℃睜鏂板鐨勪换鍔� /// </summary> /// <param name="deviceNo">璁惧缂栧彿</param> @@ -620,6 +656,8 @@ return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy); if (taskTypeGroup.Value == TaskTypeGroup.OutbondGroup) return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && TaskOutboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy); + if (taskTypeGroup.Value == TaskTypeGroup.RelocationGroup) + return BaseDal.QueryFirst(x => x.DeviceCode == deviceNo && TaskRelocationTypes.Contains(x.TaskType) && x.TaskState == (int)TaskStatusEnum.SC_Execute, TaskOrderBy); return null; } @@ -846,5 +884,114 @@ return WebResponseContent.Instance.Error(ex.Message); } } + + public Dt_Task QueryBarCodeAGVFinishTask(int TaskNum, string currentAddress) + { + return BaseDal.QueryFirst(x => TaskInboundTypes.Contains(x.TaskType) && x.TaskState == (int)TaskStatusEnum.AGV_Finish && x.NextAddress == currentAddress && x.TaskNum == TaskNum, TaskOrderBy); + } + + public Dt_Task QueryExecutingTaskByBarcode(int TaskNum, string nextAddress) + { + return BaseDal.QueryFirst(x => x.TaskNum == TaskNum && x.NextAddress == nextAddress && x.TaskState == (int)TaskStatusEnum.Line_Executing, TaskOrderBy); + } + + public Dt_Task QueryLineExecuteTaskByBarcode(int TaskNum, string nextAddress) + { + return BaseDal.QueryFirst(x => x.TaskNum == TaskNum && x.CurrentAddress == nextAddress && x.TaskState == (int)TaskStatusEnum.Line_Execute, TaskOrderBy); + } + + public WebResponseContent UpdateTaskStatusToNext([NotNull] Dt_Task task, Dt_StationManger stationManger = null) + { + WebResponseContent content = new WebResponseContent(); + try + { + TaskStatusEnum nextStatus = new TaskStatusEnum(); + if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.OutbondGroup) + { + if (task.TaskState == (int)TaskStatusEnum.SC_Executing) + { + task.CurrentAddress = task.NextAddress; + task.NextAddress = task.TargetAddress; + task.TaskState = (int)TaskStatusEnum.Line_Executing; + nextStatus = TaskStatusEnum.Line_Executing; + } + else if (task.TaskState == (int)TaskStatusEnum.SC_Execute) + { + task.TaskState = (int)TaskStatusEnum.SC_Executing; + nextStatus = TaskStatusEnum.SC_Executing; + } + } + else if (task.TaskType.GetTaskTypeGroup() == TaskTypeGroup.InboundGroup) + { + if (task.TaskState == (int)TaskStatusEnum.Line_Executing) + { + #region 鍏ュ簱璋冪敤鎺ュ彛鑾峰彇璐т綅鍦板潃 + string? local = RequestAssignLocation(task.TaskNum, task.Roadway); + //string? local = "SC05_YLDual-002-090-009-01"; + if (!string.IsNullOrEmpty(local)) + { + task.CurrentAddress = stationManger.StackerCraneStationCode; + task.TargetAddress = local; + task.NextAddress = local; + task.DeviceCode = stationManger.StackerCraneCode; + task.TaskState = (int)TaskStatusEnum.SC_Execute; + nextStatus = TaskStatusEnum.SC_Execute; + content.OK($"鑾峰彇璐т綅鍙穥local}"); + } + else + { + return content.Error($"璇锋眰鍏ュ簱璐т綅澶辫触"); + } + #endregion 鍏ュ簱璋冪敤鎺ュ彛鑾峰彇璐т綅鍦板潃 + } + else if (task.TaskState == (int)TaskStatusEnum.AGV_Finish) + { + content = AssignYLRoadwayNo(task.PalletCode); + //content.OK(data: "SC05_YLDual"); + if (!content.Status) + { + return content.Error($"璇锋眰鍏ュ簱澶辫触锛歿content.Message}"); + } + string roadWay = content.Data.ToString(); + + List<Dt_Router> routers = _routerRepository.QueryData(x => x.InOutType == task.TaskType && task.CurrentAddress == x.StartPosi && x.ChildPosiDeviceCode == roadWay); + Dt_Router router = routers.FirstOrDefault(); + if (router == null) + { + return content.Error($"浠诲姟鍙�:{task.TaskNum}鏈壘鍒拌矾鐢遍厤缃俊鎭�"); + } + + task.Roadway = roadWay; + task.NextAddress = router.NextPosi; + task.TaskState = (int)TaskStatusEnum.Line_Execute; + nextStatus = TaskStatusEnum.Line_Execute; + } + else if (task.TaskState == (int)TaskStatusEnum.Line_Execute) + { + task.TaskState = (int)TaskStatusEnum.Line_Executing; + nextStatus = TaskStatusEnum.Line_Executing; + } + else if (task.TaskState == (int)TaskStatusEnum.SC_Execute) + { + task.TaskState = (int)TaskStatusEnum.SC_Executing; + nextStatus = TaskStatusEnum.SC_Executing; + } + } + else + { + throw new Exception($"浠诲姟绫诲瀷閿欒,鏈壘鍒拌浠诲姟绫诲瀷,浠诲姟鍙�:銆恵task.TaskNum}銆�,浠诲姟绫诲瀷:銆恵task.TaskType}銆�"); + } + task.ModifyDate = DateTime.Now; + task.Modifier = "System"; + //BaseDal.UpdateData(task); + UpdateTask(task, nextStatus); + content = WebResponseContent.Instance.OK(); + } + catch (Exception ex) + { + content = WebResponseContent.Instance.Error(ex.Message); + } + return content; + } } } -- Gitblit v1.9.3