´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoService/RGVLocationInfoService.cs
@@ -25,16 +25,40 @@ //{ nameof(Dt_RGVLocationInfo.Column), OrderByType.Asc }, { nameof(Dt_RGVLocationInfo.Row), OrderByType.Asc }, }; private Dictionary<string, OrderByType> _DepthAscOrderBy = new Dictionary<string, OrderByType>() { { nameof(Dt_RGVLocationInfo.Depth), OrderByType.Asc }, }; public IRepository<Dt_RGVLocationInfo> Repository => BaseDal; public List<Dt_RGVLocationInfo> GetFreeLocationInfos() { return BaseDal.QueryData(x => x.EnableStatus == EnableStatusEnum.Normal.ObjToInt() && x.LocationStatus == LocationStatusEnum.Free.ObjToInt(), _emptyAssignOrderBy); } public Dt_RGVLocationInfo GetFreeLocationInfo(string AreaCode) /// <summary> /// æ¥æ¾å ¥åºå¯ç¨è´§ä½ /// </summary> /// <param name="AreaCode"></param> /// <returns></returns> public Dt_RGVLocationInfo GetInFreeLocationInfo(string AreaCode) { Dt_RGVLocationInfo? rGVLocationInfo = BaseDal.QueryFirst(x => x.WarehouseId.ToString() == AreaCode && x.EnableStatus == EnableStatusEnum.Normal.ObjToInt() && x.LocationStatus == LocationStatusEnum.Free.ObjToInt(), _emptyAssignOrderBy); #region å¤æå··éæ¯å¦æè´§ if (rGVLocationInfo != null) { List<string> NoRoadwayNos = new List<string>(); while (true) { Dt_RGVLocationInfo dt_RGVLocationInfo = BaseDal.QueryFirst(x => x.RoadwayNo == rGVLocationInfo.RoadwayNo && x.Depth < rGVLocationInfo.Depth && x.LocationStatus == LocationStatusEnum.InStock.ObjToInt(), _emptyAssignOrderBy); if (dt_RGVLocationInfo == null) return rGVLocationInfo; rGVLocationInfo = BaseDal.QueryFirst(x => x.RoadwayNo == dt_RGVLocationInfo.RoadwayNo && x.EnableStatus == EnableStatusEnum.Normal.ObjToInt() && x.Depth > dt_RGVLocationInfo.Depth && x.LocationStatus == LocationStatusEnum.Free.ObjToInt(), _DepthAscOrderBy); dt_RGVLocationInfo = BaseDal.QueryFirst(x => x.RoadwayNo == rGVLocationInfo.RoadwayNo && x.Depth > rGVLocationInfo.Depth && x.LocationStatus == LocationStatusEnum.InStock.ObjToInt(), _emptyAssignOrderBy); if (dt_RGVLocationInfo == null) return rGVLocationInfo; } } #endregion return rGVLocationInfo; } } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_BasicInfoService/StationMangerService.cs
@@ -37,7 +37,7 @@ /// <returns></returns> public Dt_StationManger GetOutStationInfo(string stationCode) { return BaseDal.QueryFirst(x => x.StationCode == stationCode && x.StationType == StationTypeEnum.StationType_OnlyOutbound.ObjToInt()); return BaseDal.QueryFirst(x => x.StationCode == stationCode && (x.StationType == StationTypeEnum.StationType_OnlyOutbound.ObjToInt() || x.StationType == StationTypeEnum.StationType_InboundAndOutbound.ObjToInt())); } } } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Common/LocationEnum/EnableStatusEnum.cs
@@ -18,17 +18,17 @@ [Description("æ£å¸¸")] Normal = 0, /// <summary> /// åªå ¥ /// </summary> [Description("åªå ¥")] OnlyIn = 1, ///// <summary> ///// åªå ¥ ///// </summary> //[Description("åªå ¥")] //OnlyIn = 1, /// <summary> /// åªåº /// </summary> [Description("åªåº")] OnlyOut = 2, ///// <summary> ///// åªåº ///// </summary> //[Description("åªåº")] //OnlyOut = 2, /// <summary> /// ç¦ç¨ ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/RGV/FOURBOT/CancelSXCTake.cs
@@ -6,7 +6,7 @@ namespace WIDESEAWCS_DTO.RGV.FOURBOT { public class CancelSXCTake public class CancelSXCTake: FOURBOTInfo { /// <summary> /// ä»»å¡å· @@ -16,7 +16,7 @@ /// <summary> /// åæ¶åå /// </summary> public string reason { get; set; }= ""; public string reason { get; set; }= "NoNeed"; /// <summary> ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/RGV/FOURBOT/FOURBOTInfo.cs
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,15 @@ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WIDESEAWCS_DTO.RGV.FOURBOT { public class FOURBOTInfo { public string warehouseID { get; set; } = "HETU"; public string clientCode { get; set; } = "WCS"; public string requestID { get; set; } = DateTime.Now.ToString("yyyyMMddHHmmss"); } } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/RGV/FOURBOT/FOURBOTNewMovePodTask.cs
@@ -10,11 +10,8 @@ /// <summary> /// åå车åå»ºå®¹å¨æ¬è¿ä»»å¡ /// </summary> public class FOURBOTnewMovePodTask public class FOURBOTnewMovePodTask: FOURBOTInfo { public string warehouseID { get; set; } = "HETU"; public string clientCode { get; set; } = "WCS"; public string requestID { get; set; } = DateTime.Now.ToString("yyyyMMddHHmmss"); /// <summary> /// ä¼å 级 /// </summary> ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/RGV/FOURBOT/FOURBOTStorageStatusNotify.cs
@@ -6,6 +6,14 @@ namespace WIDESEAWCS_DTO.RGV.FOURBOT { public class FOURBOTStorageStatusNotifyInfo { public long messageID { get; set; } public int messageType { get; set; } public string warehouseID { get; set; } public string createTime { get; set; } public FOURBOTStorageStatusNotify content { get; set; } } /// <summary> /// åå车å¨ä½ç¶ææ´æ°æ¶æ¯éç¥ /// </summary> ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/RGV/FOURBOT/GetBlockPodContentDto.cs
@@ -9,8 +9,9 @@ /// <summary> /// é»ç¢æçæ¥è¯¢è¯·æ±å 容DTO /// </summary> public class GetBlockPodContentListDto public class GetBlockPodContentListDto : FOURBOTInfo { public List<GetBlockPodContentDto> content { get; set; } = new List<GetBlockPodContentDto>(); } ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/RGV/FOURBOT/MoveBlockPodContentDto.cs
@@ -6,10 +6,14 @@ namespace WIDESEAWCS_DTO.RGV.FOURBOT { public class MoveBlockPodContentDto : FOURBOTInfo { public List<MoveBlockPodContentDtoInfo> content { get; set; }=new List<MoveBlockPodContentDtoInfo>() { }; } /// <summary> /// æ¹éç§»å¨é»ç¢æç请æ±å 容DTO /// </summary> public class MoveBlockPodContentDto public class MoveBlockPodContentDtoInfo { /// <summary> /// æçå· ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_DTO/RGV/FOURBOT/UpdateAgvSXCTake.cs
@@ -9,7 +9,7 @@ /// <summary> /// æ´æ°åå车任å¡ä¼å 级 /// </summary> public class UpdateAgvSXCTake public class UpdateAgvSXCTake: FOURBOTInfo { /// <summary> /// ä»»å¡ID ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_IBasicInfoService/IRGVLocationInfoService.cs
@@ -13,12 +13,12 @@ { public IRepository<Dt_RGVLocationInfo> Repository { get; } /// <summary> /// è·åå¯ç¨ç©ºè´§ä½ /// è·åå ¥åºå¯ç¨ç©ºè´§ä½ /// </summary> /// <param name="AreaCode"></param> /// <param name="containerType"></param> /// <returns></returns> Dt_RGVLocationInfo GetFreeLocationInfo(string AreaCode); Dt_RGVLocationInfo GetInFreeLocationInfo(string AreaCode); /// <summary> /// è·åææç©ºè´§ä½ /// </summary> ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Server/Controllers/RGV/RGVController.cs
@@ -51,10 +51,10 @@ /// <param name="fOURBOTStorageStatusNotify"></param> /// <returns></returns> [HttpPost, Route("multiSetNodeStatus"), AllowAnonymous] public FOURBOTReturn multiSetNodeStatus([FromBody] FOURBOTStorageStatusNotify fOURBOTStorageStatusNotify) public FOURBOTReturn multiSetNodeStatus([FromBody] FOURBOTStorageStatusNotifyInfo fOURBOTStorageStatusNotify) { FOURBOTReturn returnRGV = new FOURBOTReturn(); var take = _taskService.multiSetNodeStatus(fOURBOTStorageStatusNotify); var take = _taskService.multiSetNodeStatus(fOURBOTStorageStatusNotify.content); if (take.Status) { returnRGV.returnCode = 0; ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskMethods.cs
@@ -106,15 +106,22 @@ } else if (Rgv.messageType == 10) { if (task.TaskState == (int)TaskStatusEnum.TakeFinish && Rgv.content.status == 4) if(Rgv.content.status == 4) { if (task.TaskType == (int)TaskTypeEnum.CPInbound && task.TaskState == (int)TaskStatusEnum.TakeFinish) { task.TaskState = (int)TaskStatusEnum.CheckShapeing; BaseDal.UpdateData(task); } else if (task.TaskState == (int)TaskStatusEnum.Puting && Rgv.content.status == 4) else if (task.TaskType == (int)TaskTypeEnum.CPInbound && task.TaskState == (int)TaskStatusEnum.Puting) { TaskCompleted(task, deviceTypeEnum); } else if(task.TaskType == (int)TaskTypeEnum.CPOutbound || task.TaskType == (int)TaskTypeEnum.CPMoveInventory)//åºåºãç§»åºå®æ { TaskCompleted(task, deviceTypeEnum); } } } } return content.OK(); ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_TaskInfoService/TaskService.cs
@@ -96,7 +96,8 @@ if (!content.Status) throw new Exception(content.Message); if (BaseDal.QueryFirst(x => x.WMSTaskNum == task.taskCode || x.PalletCode == task.containerCode) != null) { continue; throw new Exception($"ä»»å¡å·ã{task.taskCode}ã/æçå·ã{task.containerCode}ãå·²åå¨ä»»å¡"); //continue; } switch (item.taskType) { @@ -191,7 +192,8 @@ { CancelSXCTake cancelSXCTake = new CancelSXCTake { taskID = dt_Task.RGVTaskId taskID = dt_Task.RGVTaskId, withoutRunning = 1 }; Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(CancelSXCTake)); if (apiInfo == null) throw new Exception("æªæ¾å°åå车AGVä»»å¡ä¸åæ¥å£é 置信æ¯ï¼è¯·æ£æ¥æ¥å£é ç½®"); @@ -201,11 +203,11 @@ { //ç´æ¥ç§»å ¥åå² BaseDal.DeleteAndMoveIntoHty(dt_Task, OperateTypeEnum.èªå¨å®æ); return content.OK("忶任塿å", dt_Task); return content.OK($"åæ¶ä»»å¡ã{dt_Task.WMSTaskNum}ãæå", dt_Task); } else { return content.Error($"ä»»å¡å¤±è´¥{fOURBOTReturn.data}"); return content.Error($"ä»»å¡åæ¶å¤±è´¥ã{dt_Task.WMSTaskNum}ã{fOURBOTReturn.returnUserMsg}"); } } #endregion @@ -304,7 +306,7 @@ priority = updateTaskPriority.taskPriority }; Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(UpdateAgvSXCTake)); if (apiInfo == null) throw new Exception("æªæ¾å°åå车AGVä»»å¡ä¸åæ¥å£é 置信æ¯ï¼è¯·æ£æ¥æ¥å£é ç½®"); if (apiInfo == null) throw new Exception("æªæ¾å°æ´æ°åå车任å¡ä¼å 级æ¥å£é 置信æ¯ï¼è¯·æ£æ¥æ¥å£é ç½®"); string response = HttpHelper.Post(apiInfo.ApiAddress, request.Serialize()); FOURBOTReturn fOURBOTReturn = response.DeserializeObject<FOURBOTReturn>(); if (fOURBOTReturn.returnCode == 0 && fOURBOTReturn.returnUserMsg == "æå") @@ -1057,7 +1059,8 @@ }; string response = HttpHelper.Post(apiInfo.ApiAddress, fOURBOToccupyStation.Serialize()); FOURBOTReturn fOURBOTReturn = response.DeserializeObject<FOURBOTReturn>(); if (fOURBOTReturn.returnCode != 0) throw new Exception(fOURBOTReturn.returnUserMsg); if (fOURBOTReturn.returnCode != 0 && fOURBOTReturn.returnUserMsg != $"ç«ç¹å·²è¢«å ç¨,(podID={iQC.ContainerCode})") throw new Exception(fOURBOTReturn.returnUserMsg); #endregion #region å建ååè½¦ä»»å¡ @@ -1105,7 +1108,7 @@ 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); item.EnableStatus = (int)(fOURBOTStorageStatusNotify.disable == 0 ? EnableStatusEnum.Normal : EnableStatusEnum.Disable); } _rGVLocationInfoService.UpdateData(Agvlocation); return WebResponseContent.Instance.OK(); ´úÂë¹ÜÀí/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/Task/RGVTaskExtend.cs
@@ -91,7 +91,7 @@ WebResponseContent content = new WebResponseContent(); try { Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(GetBlockPodContentDto)) ?? throw new Exception("æªæ¾å°åå车任å¡ä¸åæ¥å£é 置信æ¯ï¼è¯·æ£æ¥æ¥å£é ç½®"); Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(GetBlockPodContentDto)) ?? throw new Exception("æªæ¾å°æ¹éè·åé»ç¢æçå ³ç³»æ¥å£é 置信æ¯ï¼è¯·æ£æ¥æ¥å£é ç½®"); List<Dt_Task> dt_Tasks = new List<Dt_Task>(); var PalletCodes = tasks.Select(x => x.PalletCode).ToList(); //GetBlockPodContentDto content = new GetBlockPodContentDto(); @@ -125,7 +125,7 @@ foreach (var item in Result.outPods) { var task = tasks.First(x => x.PalletCode == item.outPod); if (item.blockPods.Count > 0) if (item.blockPods != null && item.blockPods.Count > 0) { task.TaskState = (int)TaskStatusEnum.RGV_WaitMoveToExecute; dt_Tasks.Add(task); @@ -175,7 +175,7 @@ try { #region è·åè´§ä½ var rGVLocationInfo = _rGVLocationInfoService.GetFreeLocationInfo(item.Roadway); var rGVLocationInfo = _rGVLocationInfoService.GetInFreeLocationInfo(item.Roadway); if (rGVLocationInfo == null) { item.ExceptionMessage = $"æªæ¾å°ç»ç¹åºåºã{item.Roadway}ãå¯ç¨ç©ºè´§ä½ï¼"; @@ -456,21 +456,21 @@ { WebResponseContent content = new WebResponseContent(); List<Dt_Task> dt_Tasks = new List<Dt_Task>(); List<MoveBlockPodContentDto> moveBlocks = new List<MoveBlockPodContentDto>(); MoveBlockPodContentDto moveBlock = new MoveBlockPodContentDto(); try { Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(MoveBlockPodContentDto)) ?? throw new Exception("æªæ¾å°åå车æ¹éæ¬è¿é»ç¢æä»»å¡æ¥å£é 置信æ¯ï¼è¯·æ£æ¥æ¥å£é ç½®"); foreach (var item in tasks) { MoveBlockPodContentDto moveBlock = new MoveBlockPodContentDto() MoveBlockPodContentDtoInfo moveBlockInfo = new MoveBlockPodContentDtoInfo() { podID = item.PalletCode, des = item.TargetAddress }; moveBlocks.Add(moveBlock); moveBlock.content.Add(moveBlockInfo); } string response = HttpHelper.Post(apiInfo.ApiAddress, moveBlocks.Serialize()); string response = HttpHelper.Post(apiInfo.ApiAddress, moveBlock.Serialize()); FOURBOTReturn fOURBOTReturn = response.DeserializeObject<FOURBOTReturn>(); content.Data = fOURBOTReturn; if (fOURBOTReturn.returnCode == 0) @@ -502,7 +502,7 @@ } finally { _trackloginfoService.AddTrackLog(moveBlocks, content, "ä¸ååå车æ¹éç§»åºä»»å¡", "", ""); _trackloginfoService.AddTrackLog(moveBlock, content, "ä¸ååå车æ¹éç§»åºä»»å¡", "", ""); } } #endregion @@ -537,24 +537,28 @@ try { Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(FOURBOTnewMovePodTask)) ?? throw new Exception("æªæ¾å°åå车任å¡ä¸åæ¥å£é 置信æ¯ï¼è¯·æ£æ¥æ¥å£é ç½®"); var i = 0; foreach (var item in tasks) { i++; var stationManger = _stationMangerService.GetOutStationInfo(item.TargetAddress); item.NextAddress = stationManger.StationCode; if (stationManger.IsOccupied != LocationStatusEnum.Free.ObjToInt()) continue; #region ä¸ååºåºä»»å¡ fOURBOTnewMovePodTask.priority = item.Grade; fOURBOTnewMovePodTask.podID = item.PalletCode; fOURBOTnewMovePodTask.desNodeID = item.NextAddress; //fOURBOTnewMovePodTask.desNodeID = item.NextAddress; fOURBOTnewMovePodTask.desStationCodes = item.NextAddress; fOURBOTnewMovePodTask.desExt = new { unload = 0//æ¯å¦æ¾ä¸å®¹å¨,0å¦1æ¯ unload = 1//æ¯å¦æ¾ä¸å®¹å¨,0å¦1æ¯ }; fOURBOTnewMovePodTask.taskExt = new { autoToRest = 1 }; fOURBOTnewMovePodTask.desType = 5; fOURBOTnewMovePodTask.requestID = DateTime.Now.ToString("yyyyMMddHHmmss") + i; string response = HttpHelper.Post(apiInfo.ApiAddress, fOURBOTnewMovePodTask.Serialize()); FOURBOTReturn fOURBOTReturn = response.DeserializeObject<FOURBOTReturn>(); content.Data = fOURBOTReturn;