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 | 249 ++++++++++++++++++++++++++++++++++++++++++-------
1 files changed, 212 insertions(+), 37 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 0dbd942..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,6 +1,8 @@
-锘縰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;
@@ -47,78 +49,225 @@
{
foreach (var item in tasks)
{
- if (item.TaskState == (int)TaskTypeEnum.Q3CK)
+ // 鍑哄簱浠诲姟澶勭悊 (浠�1妤煎嚭搴撳埌6妤�)
+ if (item.TaskType == (int)TaskTypeEnum.Q3CK)
{
// 璋冪敤鎺ュ彛鑾峰彇灏忚溅淇℃伅
var result = _agvcartInfoService.CheckTheCar();
-
- // 鍒ゆ柇鏄惁鏈� AA 鎴� FF
- bool hasAAOrFF = false;
-
- if (item.TaskState == (int)TaskTypeEnum.Q3CK)
+ if (result != null && result.Status)
{
- if (result != null && result.Status)
+ var dataList = result.Data as List<HIKROBOTQueryData>;
+ if (dataList != null && dataList.Any())
{
- 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)
{
- // 妫�鏌ヨ繑鍥炵殑 mapCode 鍒楄〃涓槸鍚︽湁 AA
- hasAAOrFF = dataList.Any(d => d.mapCode == "AA");
- if (hasAAOrFF)
+ // 鏈夊湪1妤肩殑灏忚溅锛岀洿鎺ユ墽琛屼换鍔�
+ var content = _taskService.SendHIKROBOTTask(item);
+ if (content.Status)
{
- var content = _taskService.SendHIKROBOTTask(item);
item.TaskState = (int)TaskStatusEnum.Execut;
}
- else//杩欓噷鎴戝氨瑕佸懠鍙┖杞︽潵
+ }
+ else
+ {
+ // 娌℃湁涓撶敤灏忚溅鍦�1妤硷紝闇�瑕佸懠鍙笓鐢ㄥ皬杞︽潵鍒�1妤�
+ var anySpecialCar = dataList.FirstOrDefault(d => d.CarType == "MR-Q3-600LE-D(M)(YWGP)");
+ if (anySpecialCar != null)
{
- //娣诲姞绌鸿溅杩愯緭浠诲姟
- AddAGVCartInfo(item);
- item.TaskState = (int)TaskStatusEnum.WaitingHkAGVMovePosition;
+ // 璧风偣锛氬皬杞﹀綋鍓嶆墍鍦ㄦゼ灞傜殑鐐逛綅锛岀洰鏍囷細1妤肩偣浣�
+ var callCarResult = AddAGVCartInfo(item, anySpecialCar.mapCode, "AA");
+ if (callCarResult.Status)
+ {
+ // 鍘熶换鍔$姸鎬佹敼涓虹瓑寰呯┖杞�
+ item.TaskState = (int)TaskStatusEnum.WaitingHkAGVMovePosition;
+ }
+ }
+ else
+ {
+ item.ExceptionMessage = "鏈壘鍒板彲鐢ˋGV灏忚溅";
}
}
-
}
}
else
{
- if (result != null && result.Status)
+ 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())
{
- if (hasAAOrFF)
+ // 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//杩欓噷鎴戝氨瑕佸懠鍙┖杞︽潵
+ else
{
- //娣诲姞绌鸿溅杩愯緭浠诲姟
- AddAGVCartInfo(item);
- item.TaskState = (int)TaskStatusEnum.WaitingHkAGVMovePosition;
+ // 娌℃湁涓撶敤灏忚溅鍦�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);
}
- _taskService.UpdateData(tasks);
}
+
#endregion
#region 澶勭悊娴峰悍agv鎼繍浠诲姟
- public WebResponseContent AddAGVCartInfo(Dt_Task task)
+ /// <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
{
- task.TaskNum = _taskService.GetTaskNum(nameof(SequenceEnum.SeqTaskNum));
- task.WMSTaskNum = null;
- task.TaskType = (int)TaskTypeEnum.Move;//鎹㈠眰浠诲姟
- task.TaskState = (int)TaskStatusEnum.CallingHKtransportation;
- var result = _taskService.SendHIKROBOTTask(task);
- _taskService.AddData(task);
+ // 鑾峰彇璧风偣妤煎眰淇℃伅
+ if (!FloorMapping.FloorMap.ContainsKey(currentMapCode))
+ {
+ 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"
+ };
+ _taskService.AddData(newTask); // 娣诲姞鏂颁换鍔�
+ var result = _taskService.SendHIKROBOTTask(newTask);
+ if (result.Status)
+ {
+ content.OK("绌鸿溅鍛煎彨浠诲姟鍒涘缓鎴愬姛", newTask);
+ }
+ else
+ {
+ content.Error("绌鸿溅鍛煎彨浠诲姟涓嬪彂澶辫触");
+ }
+ return content;
}
catch (Exception ex)
{
- content.Error($"鍒涘缓澶辫触锛歿ex.Message}");
+ content.Error($"鍒涘缓绌鸿溅鍛煎彨浠诲姟澶辫触锛歿ex.Message}");
}
return content;
}
@@ -129,10 +278,11 @@
{
try
{
- List<Dt_Task> reslut = _taskService.Repository.QueryData(x => x.TaskType == (int)TaskTypeEnum.Move);
- if (reslut.Count<0)
+ List<Dt_Task> reslut = _taskService.Repository.QueryData(x => x.TaskType == (int)TaskTypeEnum.MOVE);
+ if (reslut.Count<=0)
{
- foreach (var item in reslut)
+ 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);
}
@@ -151,5 +301,30 @@
}
}
#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