From 7e69830653c9be2d675c3fb4c5578ac1efa4b89c Mon Sep 17 00:00:00 2001
From: yanjinhui <3306209981@qq.com>
Date: 星期四, 09 四月 2026 08:58:33 +0800
Subject: [PATCH] 添加跨楼层的接口以及优化
---
代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/HKTaskExtend.cs | 313 +++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 272 insertions(+), 41 deletions(-)
diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/HKTaskExtend.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/HKTaskExtend.cs"
index 2c3ae55..07b97b6 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/HKTaskExtend.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/HKTaskExtend.cs"
@@ -1,9 +1,13 @@
-锘縰sing System;
+锘縰sing OfficeOpenXml.FormulaParsing.Excel.Functions.Math;
+using System;
using System.Collections.Generic;
using System.Linq;
+using System.Reflection.Emit;
using System.Reflection.Metadata;
using System.Text;
using System.Threading.Tasks;
+using WIDESEAWCS_Common;
+using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_DTO;
@@ -24,7 +28,7 @@
{
foreach (var item in tasks)
{
- var content = SendHIKROBOTTask(item);
+ var content = _taskService.SendHIKROBOTTask(item);
}
}
#endregion
@@ -34,66 +38,293 @@
{
foreach (var item in tasks)
{
- var content = SendHIKROBOTTask(item);
+ var content = _taskService.SendHIKROBOTTask(item);
}
+
}
#endregion
- #region 涓嬪彂娴峰悍AGV浠诲姟
- public WebResponseContent SendHIKROBOTTask(Dt_Task task)
+ #region 涓嬪彂娴峰悍1-6妤肩殑AGV浠诲姟
+ public void SendAGVTask(List<Dt_Task> tasks)
+ {
+ foreach (var item in tasks)
+ {
+ // 鍑哄簱浠诲姟澶勭悊 (浠�1妤煎嚭搴撳埌6妤�)
+ if (item.TaskType == (int)TaskTypeEnum.Q3CK)
+ {
+ // 璋冪敤鎺ュ彛鑾峰彇灏忚溅淇℃伅
+ var result = _agvcartInfoService.CheckTheCar();
+ if (result != null && result.Status)
+ {
+ var dataList = result.Data as List<HIKROBOTQueryData>;
+ if (dataList != null && dataList.Any())
+ {
+ // 鍑哄簱浠诲姟锛氭鏌ユ槸鍚︽湁鍦�1妤�(AA)鐨勫皬杞�
+ // Q3CK 鏄疉A鈫扚F鐨勮法妤煎眰浠诲姟锛屽彧鑳戒娇鐢ㄤ笓鐢ㄥ皬杞�
+ var specialCarInAA = dataList.FirstOrDefault(d => d.mapCode == "AA" && d.CarType == "MR-Q3-600LE-D(M)(YWGP)");
+
+ if (specialCarInAA != null)
+ {
+ // 鏈夊湪1妤肩殑灏忚溅锛岀洿鎺ユ墽琛屼换鍔�
+ var content = _taskService.SendHIKROBOTTask(item);
+ if (content.Status)
+ {
+ item.TaskState = (int)TaskStatusEnum.Execut;
+ }
+ }
+ else
+ {
+ // 娌℃湁涓撶敤灏忚溅鍦�1妤硷紝闇�瑕佸懠鍙笓鐢ㄥ皬杞︽潵鍒�1妤�
+ var anySpecialCar = dataList.FirstOrDefault(d => d.CarType == "MR-Q3-600LE-D(M)(YWGP)");
+ if (anySpecialCar != null)
+ {
+ // 璧风偣锛氬皬杞﹀綋鍓嶆墍鍦ㄦゼ灞傜殑鐐逛綅锛岀洰鏍囷細1妤肩偣浣�
+ var callCarResult = AddAGVCartInfo(item, anySpecialCar.mapCode, "AA");
+ if (callCarResult.Status)
+ {
+ // 鍘熶换鍔$姸鎬佹敼涓虹瓑寰呯┖杞�
+ item.TaskState = (int)TaskStatusEnum.WaitingHkAGVMovePosition;
+ }
+ }
+ else
+ {
+ item.ExceptionMessage = "鏈壘鍒板彲鐢ˋGV灏忚溅";
+ }
+ }
+ }
+ }
+ else
+ {
+ item.ExceptionMessage = "鑾峰彇AGV灏忚溅淇℃伅澶辫触";
+ }
+ }
+ // 鍏ュ簱浠诲姟澶勭悊 (浠�6妤煎叆搴撳埌1妤�)
+ else if (item.TaskType == (int)TaskTypeEnum.Q3RK)
+ {
+ var result = _agvcartInfoService.CheckTheCar();
+
+ if (result != null && result.Status)
+ {
+ var dataList = result.Data as List<HIKROBOTQueryData>;
+ if (dataList != null && dataList.Any())
+ {
+ // Q3RK 鏄疐F鈫扐A鐨勮法妤煎眰浠诲姟锛屽彧鑳戒娇鐢ㄤ笓鐢ㄥ皬杞�
+ var specialCarInFF = dataList.FirstOrDefault(d => d.mapCode == "FF" && d.CarType == "MR-Q3-600LE-D(M)(YWGP)");
+
+ if (specialCarInFF!=null)
+ {
+ // 鏈夊湪1妤肩殑灏忚溅锛岀洿鎺ユ墽琛屼换鍔�
+ var content = _taskService.SendHIKROBOTTask(item);
+ item.TaskState = (int)TaskStatusEnum.Execut;
+ }
+ else
+ {
+ // 娌℃湁涓撶敤灏忚溅鍦�6妤硷紝闇�瑕佸懠鍙笓鐢ㄥ皬杞︽潵鍒�6妤�
+ var anySpecialCar = dataList.FirstOrDefault(d => d.CarType == "MR-Q3-600LE-D(M)(YWGP)");
+ if (anySpecialCar != null)
+ {
+ // 璧风偣锛氬皬杞﹀綋鍓嶆墍鍦ㄦゼ灞傜殑鐐逛綅锛岀洰鏍囷細6妤肩偣浣�
+ var callCarResult = AddAGVCartInfo(item, anySpecialCar.mapCode, "FF");
+ if (callCarResult.Status)
+ {
+ item.TaskState = (int)TaskStatusEnum.WaitingHkAGVMovePosition;
+ }
+ }
+ else
+ {
+ item.ExceptionMessage = "鏈壘鍒板彲鐢ˋGV灏忚溅";
+ }
+ }
+ }
+ }
+ else
+ {
+ item.ExceptionMessage = "鑾峰彇AGV灏忚溅淇℃伅澶辫触";
+ }
+ }
+ else if (item.TaskType == (int)TaskTypeEnum.F01)
+ {
+ // F01浠诲姟澶勭悊锛氭牴鎹洰鏍囧湴鍧�鍒ゆ柇闇�瑕佸摢涓ゼ灞傜殑灏忚溅
+ var result = _agvcartInfoService.CheckTheCar();
+
+ if (result != null && result.Status)
+ {
+ var dataList = result.Data as List<HIKROBOTQueryData>;
+ if (dataList != null && dataList.Any())
+ {
+ // 浠庝换鍔$殑璧峰鍦板潃涓彁鍙栭渶瑕佺殑妤煎眰浠g爜
+ string requiredMapCode = GetMapCodeFromAddress(item.SourceAddress);
+ if (string.IsNullOrEmpty(requiredMapCode))
+ {
+ item.ExceptionMessage = $"鏃犳硶浠庣洰鏍囧湴鍧� {item.SourceAddress} 涓瘑鍒ゼ灞備俊鎭�";
+ _taskService.UpdateData(item);
+ continue;
+ }
+
+ // 妫�鏌ユ槸鍚︽湁鍦ㄧ洰鏍囨ゼ灞傜殑灏忚溅
+ var hasRequiredCar = dataList.FirstOrDefault(d => d.mapCode == requiredMapCode&&d.CarType== "MR-Q3-600LE-D(M)");
+
+ if (hasRequiredCar!=null)
+ {
+ // 鏈夊湪鐩爣妤煎眰鐨勫皬杞︼紝鐩存帴鎵ц浠诲姟
+ var content = _taskService.SendHIKROBOTTask(item);
+ if (content.Status)
+ {
+ item.TaskState = (int)TaskStatusEnum.Execut;
+ }
+ }
+ else
+ {
+ // 娌℃湁鐩爣妤煎眰鐨勫皬杞︼紝闇�瑕佸懠鍙┖杞︿粠褰撳墠浣嶇疆鍒扮洰鏍囨ゼ灞�
+ var anySpecialCar = dataList.FirstOrDefault(d => d.CarType == "MR-Q3-600LE-D(M)");
+
+ if (anySpecialCar != null)
+ {
+ var callCarResult = AddAGVCartInfo(item, anySpecialCar.mapCode, requiredMapCode);
+ if (callCarResult.Status)
+ {
+ item.TaskState = (int)TaskStatusEnum.WaitingHkAGVMovePosition;
+ }
+ }
+ else
+ {
+ item.ExceptionMessage = "鏈壘鍒板彲鐢ˋGV灏忚溅";
+ }
+ }
+ }
+ }
+ }
+ _taskService.UpdateData(item);
+ }
+ }
+
+ #endregion
+
+
+ #region 澶勭悊娴峰悍agv鎼繍浠诲姟
+ /// <summary>
+ /// 鍒涘缓绌鸿溅鍛煎彨浠诲姟锛氭牴鎹皬杞﹀綋鍓嶄綅缃拰鐩爣妤煎眰锛岃缃换鍔$殑璧风偣銆佸綋鍓嶄綅缃拰鐩爣鐐癸紝骞朵笅鍙戠粰娴峰悍鎺ュ彛
+ /// </summary>
+ /// <param name="task"></param>
+ /// <param name="currentMapCode">褰撳墠浣嶇疆</param>
+ /// <param name="targetMapCode">鐩爣鍦板潃</param>
+ /// <returns></returns>
+ public WebResponseContent AddAGVCartInfo(Dt_Task task, string currentMapCode, string targetMapCode)
{
WebResponseContent content = new WebResponseContent();
try
{
- Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(HIKROBOTTaskSubmit)) ?? throw new Exception("鏈壘鍒版捣搴稟GV浠诲姟涓嬪彂鎺ュ彛閰嶇疆淇℃伅锛佽妫�鏌ユ帴鍙i厤缃�");
-
- #region 浠诲姟淇℃伅杞崲
- HIKROBOTTaskSubmit hIKROBOTTaskSubmit = new HIKROBOTTaskSubmit()
+ // 鑾峰彇璧风偣妤煎眰淇℃伅
+ if (!FloorMapping.FloorMap.ContainsKey(currentMapCode))
{
- taskType = "",
- initPriority = task.Grade,
- targetRoute = new List<TargetRouteDto>
- {
- new TargetRouteDto
- {
- type= "SITE",
- code=task.CurrentAddress,
- operation="COLLECT",//鍙栬揣
- },
- new TargetRouteDto
- {
- type= "SITE",
- code=task.NextAddress,
- operation="DELIVERY",//閫佽揣
- }
- }
+ content.Error($"鏃犳晥鐨勮捣鐐规ゼ灞備唬鐮侊細{currentMapCode}");
+ return content;
+ }
+
+ // 鑾峰彇鐩爣妤煎眰淇℃伅
+ if (!FloorMapping.FloorMap.ContainsKey(targetMapCode))
+ {
+ content.Error($"鏃犳晥鐨勭洰鏍囨ゼ灞備唬鐮侊細{targetMapCode}");
+ return content;
+ }
+
+ var currentFloorInfo = FloorMapping.FloorMap[currentMapCode];
+ var targetFloorInfo = FloorMapping.FloorMap[targetMapCode];
+
+ // 璁剧疆浠诲姟淇℃伅
+ //task.SourceAddress = currentFloorInfo.PointCode; // 璧风偣锛氬皬杞﹀綋鍓嶄綅缃殑鐐逛綅
+ //task.CurrentAddress = currentFloorInfo.PointCode; // 褰撳墠浣嶇疆锛氬皬杞﹀綋鍓嶄綅缃殑鐐逛綅
+ //task.TargetAddress = targetFloorInfo.PointCode; // 鐩爣鐐癸細鐩爣妤煎眰鐐逛綅
+ //task.NextAddress = targetFloorInfo.PointCode; // 璁板綍鐩爣妤煎眰浠g爜
+
+ Dt_Task newTask = new Dt_Task
+ {
+ WMSTaskNum="HKkc"+ DateTime.Now.ToString("yyyyMMddHHmmss"), // 鐢熸垚鍞竴鐨刉MS浠诲姟鍙�
+ TaskNum = _taskService.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
+ SourceAddress = currentFloorInfo.PointCode,
+ CurrentAddress = currentFloorInfo.PointCode,
+ TargetAddress = targetFloorInfo.PointCode,
+ NextAddress = targetFloorInfo.PointCode,
+ TaskType = (int)TaskTypeEnum.MOVE,
+ Grade = task.Grade,
+ PalletCode = null,
+ TaskState = (int)TaskStatusEnum.CallingHKtransportation,
+ // 澶嶅埗鍏朵粬蹇呰瀛楁
+ CreateDate = DateTime.Now,
+ Creater = "System"
};
- #endregion
-
- string response = HttpHelper.Post(apiInfo.ApiAddress, hIKROBOTTaskSubmit.Serialize());
- var hIKROBOTReturn = response.DeserializeObject<HIKROBOTReturn>();
- if (hIKROBOTReturn.code == "SUCCESS")
+ _taskService.AddData(newTask); // 娣诲姞鏂颁换鍔�
+ var result = _taskService.SendHIKROBOTTask(newTask);
+ if (result.Status)
{
- var data = hIKROBOTReturn.data.ToString().DeserializeObject<HIKROBOTReturnData>();
- content.OK(data: data);
- //task.Remark = data.robotTaskCode;
+ content.OK("绌鸿溅鍛煎彨浠诲姟鍒涘缓鎴愬姛", newTask);
}
else
{
- throw new Exception(hIKROBOTReturn.message);
+ content.Error("绌鸿溅鍛煎彨浠诲姟涓嬪彂澶辫触");
}
- //_taskService.UpdateData(task);
+ return content;
}
catch (Exception ex)
{
- content.Error(ex.Message);
- }
- finally
- {
-
+ content.Error($"鍒涘缓绌鸿溅鍛煎彨浠诲姟澶辫触锛歿ex.Message}");
}
return content;
}
#endregion
+
+ #region 澶勭悊agv寰呯┖杞︽惉杩愪换鍔�
+ public void SendHKWaitTask()
+ {
+ try
+ {
+ List<Dt_Task> reslut = _taskService.Repository.QueryData(x => x.TaskType == (int)TaskTypeEnum.MOVE);
+ if (reslut.Count<=0)
+ {
+ List<Dt_Task> reslut2 = _taskService.Repository.QueryData(x => x.TaskType == (int)TaskTypeEnum.Q3RK||x.TaskType==(int)TaskTypeEnum.Q3CK || x.TaskType == (int)TaskTypeEnum.F01);
+ foreach (var item in reslut2)
+ {
+ var content = _taskService.SendHIKROBOTTask(item);
+ }
+ reslut.ForEach(x =>
+ {
+ x.TaskState =(int)TaskStatusEnum.Execut;
+ });
+
+ }
+ _taskService.UpdateData(reslut);
+
+ }
+ catch (Exception ex)
+ {
+ WriteError(nameof(TaskJob), ex.Message, ex);
+ }
+ }
+ #endregion
+
+ /// <summary>
+ /// 浠庡湴鍧�涓彁鍙栨ゼ灞備唬鐮侊紙AA銆丅B銆丆C銆丏D銆丒E銆丗F锛�
+ /// </summary>
+ /// <param name="address">鐐逛綅鍦板潃</param>
+ /// <returns>妤煎眰浠g爜</returns>
+ private string GetMapCodeFromAddress(string address)
+ {
+ if (string.IsNullOrEmpty(address))
+ return null;
+
+ // 鍦板潃鏍煎紡绀轰緥 锛欰A 瀵瑰簲 0339050AA0309145
+ // keys 鏄� AA銆丅B銆丆C銆丏D銆丒E銆丗F锛寁ule鏄搴旂殑鐐逛綅淇℃伅
+ foreach (var floorCode in FloorMapping.FloorMap.Keys)
+ {
+ if (address.Contains(floorCode))
+ {
+ return floorCode;//杩斿洖鐨勫氨鏄疉A銆丅B銆丆C銆丏D銆丒E銆丗F涓殑涓�涓紝浠h〃瀵瑰簲鐨勬ゼ灞�
+ }
+ }
+
+ return null;
+ }
+
+
}
}
--
Gitblit v1.9.3