´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/AGV/HIKROBOT/CancelHIKROBOTTask.cs
@@ -19,7 +19,7 @@ /// <summary> /// ä»»å¡åæ¶ç±»å /// ä»»å¡åæ¶ç±»å "CANCEL"åè½¯åæ¶ï¼ "DROP "人工ä»å ¥ï¼åç¡¬åæ¶ï¼ /// </summary> public string cancelType { get; set; } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/AGV/HIKROBOT/HIKROBOTTaskProcessReport.cs
@@ -25,6 +25,117 @@ /// <summary> /// èªå®ä¹æ©å±å段 /// </summary> public object extra { get; set; } public HikExtra extra { get; set; } } /// <summary> /// èªå®ä¹æ©å±å段 /// </summary> public class HikExtra { /// <summary> /// æ©å±å段çå¼ /// </summary> public HikValues values { get; set; } } /// <summary> /// æ©å±å段çå¼ /// </summary> public class HikValues { /// <summary> /// å°å¾ç¼å· /// </summary> public string mapCode { get; set; } /// <summary> /// 任塿§è¡è¿ç¨ä¸æ¶æ¯ä¸æ¥çæ¹æ³å /// start : ä»»å¡å¼å§ /// outbin : èµ°åºå¨ä½ /// end : ä»»å¡å®æ /// </summary> public string method { get; set; } /// <summary> /// è½½å ·ç¼å· /// </summary> public string carrierCode { get; set; } /// <summary> /// è½½å ·åç§° /// </summary> public string carrierName { get; set; } /// <summary> /// è½½å ·ç±»å /// </summary> public string carrierType { get; set; } /// <summary> /// è½½å ·ç§ç±» /// </summary> public string carrierCategory { get; set; } /// <summary> /// è½½å ·è§åº¦ (å¯é) /// </summary> public string carrierDir { get; set; } /// <summary> /// å½åç«ç¹ç¼å· /// outbinï¼èµ·ç¹ /// endï¼ç®æ ç¹ /// </summary> public string slotCode { get; set; } /// <summary> /// ç«ç¹å«å /// </summary> public string slotName { get; set; } /// <summary> /// åå¨ç±»åï¼æä¸¾å¼ï¼BIN(ä»ä½)ãSITE(ç«ç¹) /// </summary> public string slotCategory { get; set; } /// <summary> /// æºå¨äººå½åä½ç½®xåæ /// </summary> public string x { get; set; } /// <summary> /// æºå¨äººå½åä½ç½®yåæ /// </summary> public string y { get; set; } /// <summary> /// æºå¨äººç§ç±» /// </summary> public string amrCategory { get; set; } /// <summary> /// æºå¨äººç±»å /// </summary> public string amrType { get; set; } /// <summary> /// æºå¨äººç¼å·ï¼ä¸singleRobotCodeç¸å /// </summary> public string amrCode { get; set; } /// <summary> /// åºåç¼å· /// </summary> public string zoneCode { get; set; } /// <summary> /// å å å±å·ï¼è½½å ·ä½äºç¬¬å å± /// </summary> public int? layerNo { get; set; } /// <summary> /// è½½å ·ééï¼CTUæ¯æï¼ï¼åä½ï¼g /// </summary> public string carrierWeight { get; set; } } } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_ITaskInfoService/ITaskService.cs
@@ -35,6 +35,7 @@ using WIDESEAWCS_Common.LocationEnum; using Microsoft.VisualBasic; using System.Web; using WIDESEAWCS_DTO.RGV.FOURBOT; namespace WIDESEAWCS_ITaskInfoService { @@ -215,6 +216,8 @@ /// <param name="sequenceName"></param> /// <returns></returns> int GetTaskNum(string sequenceName); WebResponseContent UpdateTaskStatus(object TaskDTO, DeviceTypeEnum deviceTypeEnum); /// <summary> /// ä¿®æ¹è´§ä½ç¶æ @@ -223,7 +226,7 @@ /// <param name="deviceTypeEnum"></param> /// <param name="locationStatusEnum"></param> /// <returns></returns> WebResponseContent UpdateLocationStatus(string LocationCode, DeviceTypeEnum deviceTypeEnum, LocationStatusEnum locationStatusEnum); WebResponseContent UpdateLocationStatus(Dt_Task task, DeviceTypeEnum deviceTypeEnum, LocationStatusEnum locationStatusEnum); WebResponseContent ModifyWMSLayoutZone(WMSUpdateLocationArea wMSUpdateLocationArea); @@ -274,7 +277,25 @@ /// <param name="wMSMoveLocationFeedback"></param> /// <returns></returns> public WebResponseContent WcsMovingDataBack(WMSMoveLocationFeedback wMSMoveLocationFeedback); /// <summary> /// WMS容卿µå¨è¯·æ± /// </summary> /// <param name="wMSContainerFlow"></param> /// <returns></returns> WebResponseContent ContainerRequest(WMSContainerFlow wMSContainerFlow); /// <summary> /// è´¨æ£ç»æåé¦ /// </summary> /// <param name="iQC"></param> /// <returns></returns> WebResponseContent IQCResult(IQCResultDTO iQC); /// <summary> /// æ¹éæ´æ°å¨ä½ç¶æ /// </summary> /// <returns></returns> WebResponseContent multiSetNodeStatus(FOURBOTStorageStatusNotify fOURBOTStorageStatusNotify); } } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/AGV/KHAGVController.cs
@@ -1,5 +1,10 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using WIDESEAWCS_Common; using WIDESEAWCS_DTO; using WIDESEAWCS_DTO.RGV.FOURBOT; using WIDESEAWCS_ITaskInfoService; namespace WIDESEAWCS_Server.Controllers.AGV { @@ -7,5 +12,34 @@ [ApiController] public class KHAGVController : ControllerBase { private readonly ITaskService _taskService; public KHAGVController(ITaskService taskService) { _taskService = taskService; } /// <summary> /// ä»»å¡ç¶ææ´æ° /// </summary> /// <param name="taskDTOs"></param> /// <returns></returns> [HttpPost, Route("UpdateTaskStatus"), AllowAnonymous] public HIKROBOTReturn UpdateTaskStatus([FromBody] object TaskDTO) { HIKROBOTReturn returnHK = new HIKROBOTReturn(); var take = _taskService.UpdateTaskStatus(TaskDTO, DeviceTypeEnum.YuanLiJuHe); if (take.Status) { returnHK.code = "SUCCESS"; returnHK.message = "succ"; } else { returnHK.code = "404"; returnHK.message = take.Message; } return returnHK; } } } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/RGV/RGVController.cs
@@ -1,5 +1,10 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using WIDESEAWCS_Common; using WIDESEAWCS_DTO; using WIDESEAWCS_DTO.RGV.FOURBOT; using WIDESEAWCS_ITaskInfoService; namespace WIDESEAWCS_Server.Controllers.RGV { @@ -7,5 +12,62 @@ [ApiController] public class RGVController : ControllerBase { private readonly ITaskService _taskService; public RGVController(ITaskService taskService) { _taskService = taskService; } /// <summary> /// ä»»å¡ç¶ææ´æ° /// </summary> /// <param name="taskDTOs"></param> /// <returns></returns> [HttpPost, Route("UpdateTaskStatus"), AllowAnonymous] public FOURBOTReturn UpdateTaskStatus([FromBody] object TaskDTO) { FOURBOTReturn returnRGV = new FOURBOTReturn(); var take = _taskService.UpdateTaskStatus(TaskDTO, DeviceTypeEnum.YuanLiJuHe); if (take.Status) { returnRGV.returnCode = 0; returnRGV.returnMsg = "succ"; returnRGV.returnUserMsg = "æå"; } else { returnRGV.returnCode = 404; returnRGV.returnMsg = take.Message; returnRGV.returnUserMsg = "失败"; } return returnRGV; } /// <summary> /// æ¹éæ´æ°å¨ä½ç¶æ /// </summary> /// <param name="fOURBOTStorageStatusNotify"></param> /// <returns></returns> [HttpPost, Route("multiSetNodeStatus"), AllowAnonymous] public FOURBOTReturn multiSetNodeStatus([FromBody] FOURBOTStorageStatusNotify fOURBOTStorageStatusNotify) { FOURBOTReturn returnRGV = new FOURBOTReturn(); var take = _taskService.multiSetNodeStatus(fOURBOTStorageStatusNotify); if (take.Status) { returnRGV.returnCode = 0; returnRGV.returnMsg = "succ"; returnRGV.returnUserMsg = "æå"; } else { returnRGV.returnCode = 404; returnRGV.returnMsg = take.Message; returnRGV.returnUserMsg = "失败"; } return returnRGV; } } } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskMethods.cs
@@ -14,6 +14,8 @@ using WIDESEAWCS_Core.Enums; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_DTO; using WIDESEAWCS_DTO.AGV.HIKROBOT; using WIDESEAWCS_DTO.RGV.FOURBOT; using WIDESEAWCS_DTO.WMS; using WIDESEAWCS_Model.Models; @@ -35,6 +37,8 @@ WebResponseContent content = new WebResponseContent(); GALAXISUpdateTaskStatus gALAXIS = new(); FOURBOTTaskStatusNotify Rgv = new();//åå车任å¡ç¶æéç¥ HIKROBOTTaskProcessReport hIKROBOT = new();//海康æºå¨äºº try { if (deviceTypeEnum == DeviceTypeEnum.GALAXIS) @@ -59,13 +63,45 @@ } else if (deviceTypeEnum == DeviceTypeEnum.HIKROBOT) { hIKROBOT=TaskDTO.Serialize().DeserializeObject<HIKROBOTTaskProcessReport>(); if (hIKROBOT==null) throw new Exception("åæ°è½¬æ¢å¤±è´¥ï¼"); var task = BaseDal.QueryFirst(x => x.WMSTaskNum == hIKROBOT.robotTaskCode); if (task == null) throw new Exception($"æªæ¾å°ä»»å¡,ä»»å¡ç¼å·ã{hIKROBOT.robotTaskCode}ã"); switch (hIKROBOT.extra.values.method) { case "start": TaskCompleted(task, deviceTypeEnum); break; case "end": TaskFromCompleted(task, deviceTypeEnum); break; default: task.TaskState = ReturnTaskStatus(gALAXIS.taskStatus, deviceTypeEnum); BaseDal.UpdateData(task); break; } } else //åå车 { Rgv = TaskDTO.Serialize().DeserializeObject<FOURBOTTaskStatusNotify>(); if (Rgv==null) throw new Exception("åæ°è½¬æ¢å¤±è´¥ï¼"); var task = BaseDal.QueryFirst(x => x.WMSTaskNum == Rgv.taskID.ToString()); if (task==null) throw new Exception($"æªæ¾å°ä»»å¡,ä»»å¡ç¼å·ã{Rgv.taskID}ã"); switch (Rgv.status) { case 2: TaskCompleted(task, deviceTypeEnum); break; case 4: TaskFromCompleted(task, deviceTypeEnum); break; default: task.TaskState = ReturnTaskStatus(gALAXIS.taskStatus, deviceTypeEnum); break; } } //return WebResponseContent.Instance.OK(); return content.OK(); } catch (Exception ex) @@ -74,7 +110,30 @@ } finally { _trackloginfoService.AddTrackLog(gALAXIS, content, "ä¸åå¯ä¹å£«AGVä»»å¡", "", ""); // å¨ finally ä¸å¤æåªä¸ªå¯¹è±¡è¢«èµå¼äº object logObject = null; string deviceName = ""; if (gALAXIS != null && gALAXIS.taskId != null) { logObject = gALAXIS; deviceName = "å¯ä¹å£«AGV"; } else if (hIKROBOT != null && hIKROBOT.robotTaskCode != null) { logObject = hIKROBOT; deviceName = "海康æºå¨äºº"; } else if (Rgv != null && Rgv.taskID != 0) { logObject = Rgv; deviceName = "åå车"; } if (logObject != null) { _trackloginfoService.AddTrackLog(logObject, content, $"ä¸å{deviceName}ä»»å¡", "", ""); } } } #endregion @@ -134,7 +193,7 @@ { dt_Task.TaskState = TaskStatusEnum.TakeFinish.ObjToInt(); Db.Ado.BeginTran(); UpdateLocationStatus(dt_Task.SourceAddress, deviceTypeEnum, LocationStatusEnum.Free); UpdateLocationStatus(dt_Task, deviceTypeEnum, LocationStatusEnum.Free); BaseDal.UpdateData(dt_Task); Db.Ado.CommitTran(); return WebResponseContent.Instance.OK(); @@ -186,7 +245,7 @@ if (agvContent.code != 0) dt_Task.ExceptionMessage = agvContent.msg; } Db.Ado.BeginTran(); UpdateLocationStatus(dt_Task.TargetAddress, deviceTypeEnum, LocationStatusEnum.InStock); UpdateLocationStatus(dt_Task, deviceTypeEnum, LocationStatusEnum.InStock); if (agvContent != null && agvContent.code == 0) BaseDal.DeleteAndMoveIntoHty(dt_Task, OperateTypeEnum.èªå¨å®æ); else @@ -210,33 +269,59 @@ /// <param name="deviceTypeEnum"></param> /// <param name="locationStatusEnum"></param> /// <returns></returns> public WebResponseContent UpdateLocationStatus(string LocationCode, DeviceTypeEnum deviceTypeEnum, LocationStatusEnum locationStatusEnum) public WebResponseContent UpdateLocationStatus(Dt_Task takse, DeviceTypeEnum deviceTypeEnum, LocationStatusEnum locationStatusEnum) { try { if (deviceTypeEnum == DeviceTypeEnum.GALAXIS) { Dt_KLSLocationInfo? dt_KLSLocationInfo = _kLSLocationInfoService.Repository.QueryFirst(x => x.LocationCode == LocationCode); Dt_KLSLocationInfo? dt_KLSLocationInfo = _kLSLocationInfoService.Repository.QueryFirst(x => x.LocationCode == takse.SourceAddress); if (dt_KLSLocationInfo != null) { if (locationStatusEnum== LocationStatusEnum.Free) //å¦æèµ·ç¹å®æå°±ç»è´§ä½èµå¼æçå· { dt_KLSLocationInfo.PalletCode = ""; } else { dt_KLSLocationInfo.PalletCode = takse.PalletCode; } dt_KLSLocationInfo.LocationStatus = locationStatusEnum.ObjToInt(); _kLSLocationInfoService.Repository.UpdateData(dt_KLSLocationInfo); } } else if (deviceTypeEnum == DeviceTypeEnum.HIKROBOT) { Dt_HKLocationInfo? dt_HKLocationInfo = _hKLocationInfoService.Repository.QueryFirst(x => x.LocationCode == LocationCode); Dt_HKLocationInfo? dt_HKLocationInfo = _hKLocationInfoService.Repository.QueryFirst(x => x.LocationCode == takse.SourceAddress); if (dt_HKLocationInfo != null) { if (locationStatusEnum == LocationStatusEnum.Free) //å¦æèµ·ç¹å®æå°±ç»è´§ä½èµå¼æçå· { dt_HKLocationInfo.PalletCode = ""; } else { dt_HKLocationInfo.PalletCode = takse.PalletCode; } dt_HKLocationInfo.LocationStatus = locationStatusEnum.ObjToInt(); _hKLocationInfoService.Repository.UpdateData(dt_HKLocationInfo); } } else if (deviceTypeEnum == DeviceTypeEnum.YuanLiJuHe) { Dt_RGVLocationInfo dt_RGVLocationInfo = _rGVLocationInfoService.Repository.QueryFirst(x => x.LocationCode == LocationCode); Dt_RGVLocationInfo dt_RGVLocationInfo = _rGVLocationInfoService.Repository.QueryFirst(x => x.LocationCode == takse.SourceAddress); //è¿éå°ä»»å¡çæçå·ç»è´§ä½è¡¨ä¸çPalletCodeåæ®µã if (dt_RGVLocationInfo != null) { if (locationStatusEnum == LocationStatusEnum.Free) //å¦æèµ·ç¹å®æå°±ç»è´§ä½èµå¼æçå· { dt_RGVLocationInfo.PalletCode = ""; } else { dt_RGVLocationInfo.PalletCode = takse.PalletCode; } dt_RGVLocationInfo.LocationStatus = locationStatusEnum.ObjToInt(); _rGVLocationInfoService.Repository.UpdateData(dt_RGVLocationInfo); } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -16,12 +16,10 @@ #endregion << ç æ¬ 注 é >> using AutoMapper; using Dm; using SqlSugar; using System.Diagnostics.CodeAnalysis; using System.Threading.Tasks; using WIDESEAWCS_BasicInfoService; using WIDESEAWCS_Common; using WIDESEAWCS_Common.LocationEnum; using WIDESEAWCS_Common.TaskEnum; using WIDESEAWCS_Core; using WIDESEAWCS_Core.BaseRepository; @@ -29,6 +27,7 @@ using WIDESEAWCS_Core.Enums; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_DTO; using WIDESEAWCS_DTO.AGV.HIKROBOT; using WIDESEAWCS_DTO.RGV.FOURBOT; using WIDESEAWCS_DTO.TaskInfo; using WIDESEAWCS_DTO.WMS; @@ -159,7 +158,7 @@ bool isHK = dt_Task.TaskType == (int)TaskTypeEnum.Carry || dt_Task.TaskType == (int)TaskTypeEnum.CJInbound || dt_Task.TaskType == (int)TaskTypeEnum.CJInbound || dt_Task.TaskType == (int)TaskTypeEnum.CJOutbound; //è¿éå°ç¶ææ¹åäº198åæ¶ä»»å¡ dt_Task.TaskType = TaskStatusEnum.WMSCancel.ObjToInt(); #region #region å¯ä¹å£« if (isGALAXISTask) { var KLS = new CancelGALAXISTask @@ -207,6 +206,32 @@ return content.Error($"ä»»å¡å¤±è´¥{fOURBOTReturn.data}"); } } #endregion #region 海康 if (isHK) { CancelHIKROBOTTask cancelHIKROBOTTask = new CancelHIKROBOTTask { robotTaskCode = dt_Task.WMSTaskNum, cancelType = "CANCEL"//åè½¯åæ¶ï¼DROP人工ä»å ¥ï¼åç¡¬åæ¶ï¼ }; Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(CancelHIKROBOTTask)); if (apiInfo == null) throw new Exception("æªæ¾å°åå车AGVä»»å¡ä¸åæ¥å£é 置信æ¯ï¼è¯·æ£æ¥æ¥å£é ç½®"); string response = HttpHelper.Post(apiInfo.ApiAddress, cancelHIKROBOTTask.Serialize()); HIKROBOTReturn hIKROBOTReturn = response.DeserializeObject<HIKROBOTReturn>(); if (hIKROBOTReturn.code == "SUCCESS" && hIKROBOTReturn.message == "æå") { //ç´æ¥ç§»å ¥åå² BaseDal.DeleteAndMoveIntoHty(dt_Task, OperateTypeEnum.èªå¨å®æ); return content.OK("忶任塿å", dt_Task); } else { return content.Error($"ä»»å¡å¤±è´¥{hIKROBOTReturn.data}"); } } #endregion } catch (Exception ex) @@ -281,7 +306,7 @@ FOURBOTReturn fOURBOTReturn = response.DeserializeObject<FOURBOTReturn>(); if (fOURBOTReturn.returnCode == 0 && fOURBOTReturn .returnUserMsg== "æå") { BaseDal.UpdateData(dt_Task); return content.OK("ä¿®æ¹ä»»å¡ä¼å 级æå", dt_Task); } else @@ -289,8 +314,31 @@ return content.Error($"ä»»å¡å¤±è´¥{fOURBOTReturn.data}"); } } #endregion #endregion #region 海康 if (isHK) { var request = new HIKROBOTTaskGrade { robotTaskCode = dt_Task.WMSTaskNum,//ä»»å¡å· initPriority = updateTaskPriority.taskPriority//ä¼å 级 }; Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(HIKROBOTTaskGrade)); if (apiInfo == null) throw new Exception("æªæ¾å°åå车AGVä»»å¡ä¸åæ¥å£é 置信æ¯ï¼è¯·æ£æ¥æ¥å£é ç½®"); string response = HttpHelper.Post(apiInfo.ApiAddress, request.Serialize()); HIKROBOTReturn hIKROBOTReturn=response.DeserializeObject<HIKROBOTReturn>(); if (hIKROBOTReturn.code == "SUCCESS0"&&hIKROBOTReturn.message=="æå") { BaseDal.UpdateData(dt_Task); return content.OK("ä¿®æ¹ä»»å¡ä¼å 级æå", dt_Task); } else { return content.Error($"ä»»å¡å¤±è´¥{hIKROBOTReturn.data}"); } } #endregion } catch (Exception ex) { @@ -976,5 +1024,30 @@ { throw new NotImplementedException(); } /// <summary> /// æ¹éæ´æ°å¨ä½ç¶æ /// </summary> /// <param name="fOURBOTStorageStatusNotify"></param> /// <returns></returns> /// <exception cref="NotImplementedException"></exception> public WebResponseContent multiSetNodeStatus(FOURBOTStorageStatusNotify fOURBOTStorageStatusNotify) { try { var Agvlocation = _rGVLocationInfoService.Repository.QueryData(x=> fOURBOTStorageStatusNotify.storageCode.Contains(x.LocationCode)); foreach (var item in Agvlocation) { item.LocationStatus = (int)(fOURBOTStorageStatusNotify.disable==0?EnableStatusEnum.Normal:EnableStatusEnum.Disable); } _rGVLocationInfoService.UpdateData(Agvlocation); return WebResponseContent.Instance.OK(); } catch (Exception ex) { return WebResponseContent.Instance.Error(ex.Message); } } } }