From 29cd467ba62b2bdf49c6546e78ae3ec809c4a723 Mon Sep 17 00:00:00 2001 From: dengjunjie <dengjunjie@hnkhzn.com> Date: 星期四, 19 六月 2025 17:50:28 +0800 Subject: [PATCH] 1 --- 代码管理/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_AGV.cs | 249 +++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 197 insertions(+), 52 deletions(-) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_AGV.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_AGV.cs" index 83bee59..03a0580 100644 --- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_AGV.cs" +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/PartialTaskService_AGV.cs" @@ -22,17 +22,26 @@ public WebResponseContent ShelfOutboundCarry(Dt_Task outTask) { //鍒ゆ柇鏄惁涓虹數鑺簱锛岃緟鏂欏簱浜哄伐澶勭悊(绔嬪簱鐩爣鍦板潃杞崲鎴怉GV绔欑偣鍦板潃) - Dt_CachePoint cachePoint = GetCachePointByStartPoint(outTask.TargetAddress); - + Dt_RoadwayInfo dt_RoadwayInfo = _basicService.RoadwayInfoService.Repository.QueryFirst(x => x.OutSCStationCode == outTask.TargetAddress); + if (dt_RoadwayInfo == null || dt_RoadwayInfo.AreaId == 11) return WebResponseContent.Instance.OK(); + Dt_CachePoint startcachePoint = new Dt_CachePoint(); + Dt_CachePoint cachePoint = GetCachePointByStartPoint(dt_RoadwayInfo.OutStationCode, "", ref startcachePoint); + if (startcachePoint.EnableStatus == EnableStatusEnum.Disable.ObjToInt()) return WebResponseContent.Instance.OK(); + //if (dt_RoadwayInfo.AreaId == 11)//杈呮枡涓嶇敤AGV鎼繍 + //{ + // startcachePoint.PointStatus = LocationStatusEnum.Lock.ObjToInt(); + // _basicService.CachePointService.Repository.UpdateData(startcachePoint); + // return WebResponseContent.Instance.OK(); + //} Dt_Task task = new() { - CurrentAddress = outTask.TargetAddress, + CurrentAddress = startcachePoint.PointCode, Grade = 0, NextAddress = cachePoint.PointCode, OrderNo = outTask.OrderNo, PalletCode = outTask.PalletCode + "-AGV", Roadway = "", - SourceAddress = outTask.TargetAddress, + SourceAddress = startcachePoint.PointCode, TargetAddress = cachePoint.PointCode, SourceKey = outTask.TaskId, TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), @@ -42,10 +51,80 @@ Creater = App.User.UserId > 0 ? App.User.UserName : "System", }; cachePoint.PointStatus = LocationStatusEnum.Lock.ObjToInt(); + //startcachePoint.PointStatus = LocationStatusEnum.Lock.ObjToInt(); _basicService.CachePointService.Repository.UpdateData(cachePoint); + //_basicService.CachePointService.Repository.UpdateData(startcachePoint); Repository.AddData(task); + SendAGVTask(task, cachePoint); return WebResponseContent.Instance.OK(); + } + + /// <summary> + /// 璐т綅缁戝畾 + /// </summary> + /// <param name="qty"></param> + /// <param name="Point"></param> + /// <returns></returns> + public WebResponseContent Bind(string qty, string point) + { + try + { + if (Repository.QueryFirst(x => x.SourceAddress == point && + x.TaskStatus < AGVTaskStatusEnum.DoneFetch.ObjToInt() || + x.TargetAddress == point) != null) + throw new Exception($"缂撳瓨鐐广�恵point}銆戝瓨鍦ˋGV浠诲姟锛�"); + Dt_CachePoint? cachePoint = _basicService.CachePointService.Repository.QueryFirst(x => x.PointCode == point); + if (cachePoint == null) throw new Exception("鏈壘鍒扮紦瀛樼偣!"); + if (cachePoint.Depth == 1) + { + Dt_CachePoint? cachePoint1 = _basicService.CachePointService.Repository.QueryFirst(x => x.AreaId == cachePoint.AreaId && x.Column == cachePoint.Column && cachePoint.Row - x.Row == 1); + if (cachePoint1 != null) + { + if (Repository.QueryFirst(x => x.SourceAddress == cachePoint1.PointCode && + x.TaskStatus < AGVTaskStatusEnum.DoneFetch.ObjToInt() || + x.TargetAddress == cachePoint1.PointCode) != null) + throw new Exception($"鍐呯疆缂撳瓨鐐广�恵cachePoint1.PointCode}銆戝瓨鍦ˋGV浠诲姟锛�"); + } + } + //if (cachePoint.AreaId != 4) throw new Exception("褰撳墠缂撳瓨鐐瑰尯鍩熸棤缁戝畾鏉冮檺!"); + cachePoint.PointStatus = LocationStatusEnum.InStock.ObjToInt(); + if (cachePoint.AreaId == 4) cachePoint.Remark = qty; + cachePoint.Modifier = App.User.UserName; + _basicService.CachePointService.Repository.UpdateData(cachePoint); + return WebResponseContent.Instance.OK(); + } + catch (Exception ex) + { + return WebResponseContent.Instance.Error(ex.Message); + } + } + /// <summary> + /// 閲婃斁缂撳瓨鐐� + /// </summary> + /// <param name="point"></param> + /// <returns></returns> + public WebResponseContent AcrossFloorCallMat(string point) + { + try + { + if (Repository.QueryFirst(x => x.SourceAddress == point && + x.TaskStatus < AGVTaskStatusEnum.DoneFetch.ObjToInt() || + x.TargetAddress == point) != null) + throw new Exception($"缂撳瓨鐐广�恵point}銆戝瓨鍦ˋGV浠诲姟锛�"); + Dt_CachePoint? cachePoint = _basicService.CachePointService.Repository.QueryFirst(x => x.PointCode == point); + if (cachePoint == null) throw new Exception("鏈壘鍒扮紦瀛樼偣!"); + //if (cachePoint.AreaId != 2 && cachePoint.AreaId != 5 && cachePoint.AreaId != 8) + // throw new Exception("褰撳墠缂撳瓨鐐瑰尯鍩熸棤閲婃斁鏉冮檺!"); + cachePoint.PointStatus = LocationStatusEnum.Free.ObjToInt(); + cachePoint.Modifier = App.User.UserName; + _basicService.CachePointService.Repository.UpdateData(cachePoint); + return WebResponseContent.Instance.OK(); + } + catch (Exception ex) + { + return WebResponseContent.Instance.Error(ex.Message); + } } /// <summary> @@ -53,22 +132,27 @@ /// </summary> /// <param name="endPoint"></param> /// <returns></returns> - public WebResponseContent CallMateriel(string endPoint) + public WebResponseContent CallMateriel(string endPoint, string startPoint) { try { - Dt_CachePoint cachePoint = GetCachePointByEndPoint(endPoint); + if (Repository.QueryFirst(x => x.SourceAddress == endPoint && + x.TaskStatus < AGVTaskStatusEnum.DoneFetch.ObjToInt() || + x.TargetAddress == endPoint) != null) + throw new Exception($"绔欑偣銆恵endPoint}銆戝瓨鍦ㄤ换鍔★紒"); + + Dt_CachePoint cachePoint = GetCachePointByEndPoint(endPoint, startPoint); Dt_Task task = new Dt_Task() { - CurrentAddress = "D02",// cachePoint.PointCode, + CurrentAddress = cachePoint.PointCode, Grade = 0, - NextAddress = "C01",//endPoint, + NextAddress = endPoint, OrderNo = "", - PalletCode = "",//cachePoint.Remark, + PalletCode = cachePoint.Remark, Roadway = "", - SourceAddress = "D02",//cachePoint.PointCode, - TargetAddress = "C01",//endPoint, + SourceAddress = cachePoint.PointCode, + TargetAddress = endPoint, SourceKey = 0, TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)), TaskStatus = AGVTaskStatusEnum.Create.ObjToInt(), @@ -77,18 +161,8 @@ cachePoint.PointStatus = LocationStatusEnum.Lock.ObjToInt(); Db.Ado.BeginTran(); - #region MyRegion - AGVSendTaskModel aGVSendTask = new AGVSendTaskModel - { - task_id = task.TaskNum.ToString(),// BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)).ToString(), - src_pos = task.CurrentAddress,// "C01", - site_value_type = 1, - dst_pos = task.NextAddress,// "E14" - src_level=3, - }; - #endregion - var response = HttpHelper.Post<WebResponseContent>(AGVurl + "sendTask/", aGVSendTask, "鍙枡浠诲姟涓嬪彂"); - if (response.Code != 200) + var response = SendAGVTask(task, cachePoint); + if (!response.Status) { _unitOfWorkManage.RollbackTran(); return WebResponseContent.Instance.Error($"{response.Message}"); @@ -111,11 +185,16 @@ /// </summary> /// <param name="startPoint"></param> /// <returns></returns> - public WebResponseContent MaterielCarry(string startPoint) + public WebResponseContent MaterielCarry(string startPoint, string endPoint) { try { - Dt_CachePoint cachePoint = GetCachePointByStartPoint(startPoint); + if (Repository.QueryFirst(x => x.SourceAddress == startPoint && + x.TaskStatus < AGVTaskStatusEnum.DoneFetch.ObjToInt() || + x.TargetAddress == startPoint) != null) + throw new Exception($"绔欑偣銆恵startPoint}銆戝瓨鍦ㄤ换鍔★紒"); + Dt_CachePoint startcachePoint = new Dt_CachePoint(); + Dt_CachePoint cachePoint = GetCachePointByStartPoint(startPoint, endPoint, ref startcachePoint); Dt_Task task = new() { @@ -134,12 +213,21 @@ }; cachePoint.PointStatus = LocationStatusEnum.Lock.ObjToInt(); + Db.Ado.BeginTran(); + var response = SendAGVTask(task, cachePoint); + if (!response.Status) + { + _unitOfWorkManage.RollbackTran(); + return WebResponseContent.Instance.Error($"{response.Message}"); + } _basicService.CachePointService.Repository.UpdateData(cachePoint); Repository.AddData(task); + Db.Ado.CommitTran(); return WebResponseContent.Instance.OK(); } catch (Exception ex) { + Db.Ado.RollbackTran(); return WebResponseContent.Instance.Error(ex.Message); } } @@ -149,24 +237,32 @@ /// <param name="startPoint"></param> /// <returns></returns> /// <exception cref="Exception"></exception> - private Dt_CachePoint GetCachePointByStartPoint(string startPoint) + private Dt_CachePoint GetCachePointByStartPoint(string startPoint, string endPoint, ref Dt_CachePoint startcachePoint) { - Dt_AreaRouter areaRouter = _basicService.AreaRouterService.Repository.QueryFirst(x => x.StartArea == startPoint); - if (areaRouter == null) + #region MyRegion + Dt_CachePoint? StartcachePoint = _basicService.CachePointService.Repository.QueryFirst(x => x.PointCode == startPoint); + if (StartcachePoint == null) throw new Exception($"鏈壘鍒扮紦瀛樼偣{startPoint}!"); + startcachePoint = StartcachePoint; + endPoint = ""; + if (!string.IsNullOrEmpty(endPoint)) { - throw new Exception("鏈壘鍒拌矾鐢变俊鎭�!"); + Dt_CachePoint? cachePoint1 = _basicService.CachePointService.Repository.QueryFirst(x => x.PointCode == endPoint); + if (cachePoint1 == null) throw new Exception($"鏈壘鍒扮紦瀛樼偣{endPoint}!"); + if (Repository.QueryFirst(x => x.SourceAddress == endPoint && + x.TaskStatus < AGVTaskStatusEnum.DoneFetch.ObjToInt() || + x.TargetAddress == endPoint) != null) + throw new Exception($"缂撳瓨鐐广�恵endPoint}銆戝瓨鍦ㄤ换鍔★紒"); + return cachePoint1; } - Dt_AreaInfo areaInfo = _basicService.AreaInfoService.Repository.QueryFirst(x => x.AreaCode == areaRouter.NextArea); - if (areaInfo == null) - { - throw new Exception("鏈壘鍒颁笅涓�鍖哄煙淇℃伅!"); - } + Dt_AreaRouter areaRouter = _basicService.AreaRouterService.Repository.QueryFirst(x => x.StartArea == StartcachePoint.AreaId.ToString()); + if (areaRouter == null) throw new Exception("鏈壘鍒拌矾鐢变俊鎭�!"); - Dt_CachePoint? cachePoint = _basicService.CachePointService.AssignCachePoint(areaInfo.Id); + Dt_CachePoint? cachePoint = _basicService.CachePointService.AssignCachePoint(areaRouter.NextArea.ObjToInt()); if (cachePoint == null) { throw new Exception("鏈壘鍒扮┖闂茬紦瀛樼偣!"); } + #endregion return cachePoint; } @@ -176,26 +272,61 @@ /// <param name="endPoint"></param> /// <returns></returns> /// <exception cref="Exception"></exception> - private Dt_CachePoint GetCachePointByEndPoint(string endPoint) + private Dt_CachePoint GetCachePointByEndPoint(string endPoint, string startPoint) { - Dt_AreaRouter areaRouter = _basicService.AreaRouterService.Repository.QueryFirst(x => x.NextArea == endPoint); - if (areaRouter == null) + #region MyRegion + Dt_CachePoint? StartcachePoint = _basicService.CachePointService.Repository.QueryFirst(x => x.PointCode == endPoint); + if (StartcachePoint == null) throw new Exception($"鏈壘鍒扮紦瀛樼偣{endPoint}!"); + + if (!string.IsNullOrEmpty(endPoint)) { - throw new Exception("鏈壘鍒拌矾鐢变俊鎭�!"); - } - Dt_AreaInfo areaInfo = _basicService.AreaInfoService.Repository.QueryFirst(x => x.AreaCode == areaRouter.StartArea); - if (areaInfo == null) - { - throw new Exception("鏈壘鍒拌捣鐐圭紦瀛樺尯鍩熶俊鎭�!"); + Dt_CachePoint? cachePoint1 = _basicService.CachePointService.Repository.QueryFirst(x => x.PointCode == startPoint); + if (cachePoint1 == null) throw new Exception($"鏈壘鍒扮紦瀛樼偣{startPoint}!"); + if (Repository.QueryFirst(x => x.SourceAddress == startPoint && + x.TaskStatus < AGVTaskStatusEnum.DoneFetch.ObjToInt() || + x.TargetAddress == startPoint) != null) + throw new Exception($"缂撳瓨鐐广�恵startPoint}銆戝瓨鍦ㄤ换鍔★紒"); + return cachePoint1; } - Dt_CachePoint? cachePoint = _basicService.CachePointService.GetIbStockCachePoint(areaInfo.Id); + Dt_AreaRouter areaRouter = _basicService.AreaRouterService.Repository.QueryFirst(x => x.NextArea == StartcachePoint.AreaId.ToString()); + if (areaRouter == null) throw new Exception("鏈壘鍒拌矾鐢变俊鎭�!"); + + Dt_CachePoint? cachePoint = _basicService.CachePointService.GetIbStockCachePoint(areaRouter.StartArea.ObjToInt()); if (cachePoint == null) { throw new Exception("鏈壘鍒版湁璐х紦瀛樼偣!"); } + #endregion return cachePoint; } + + /// <summary> + /// 涓嬪彂AGV浠诲姟 + /// </summary> + /// <param name="task"></param> + public WebResponseContent SendAGVTask(Dt_Task task, Dt_CachePoint? cachePoint = null) + { + try + { + AGVSendTaskModel aGVSendTask = new AGVSendTaskModel + { + task_id = task.TaskNum.ToString(), + src_pos = task.CurrentAddress, + site_value_type = 1, + dst_pos = task.NextAddress + }; + if (cachePoint != null && cachePoint.AreaId == 4) aGVSendTask.src_level = cachePoint.Remark.ObjToInt() - 1; + var response = HttpHelper.Post<WebResponseContent>(AGVurl + "sendTask/", aGVSendTask, "鍙枡浠诲姟涓嬪彂"); + if (response.Code != 200) throw new Exception(response.Message); + return WebResponseContent.Instance.OK(); + } + catch (Exception ex) + { + return WebResponseContent.Instance.Error("AGV浠诲姟涓嬪彂澶辫触:" + ex.Message); + } + } + /// <summary> /// 浠诲姟鐘舵�佷笂鎶� /// </summary> @@ -208,6 +339,8 @@ { return new { code = 404, message = "鏈壘鍒拌浠诲姟!" }; } + if (task.TaskStatus == ((AGVTaskStatusEnum)Enum.Parse(typeof(AGVTaskStatusEnum), model.Task_status)).ObjToInt()) + return new { code = 200, message = "鎴愬姛" }; switch ((AGVTaskStatusEnum)Enum.Parse(typeof(AGVTaskStatusEnum), model.Task_status)) { case AGVTaskStatusEnum.Create: @@ -225,12 +358,16 @@ if (startCachePoint != null) { startCachePoint.PointStatus = LocationStatusEnum.Free.ObjToInt(); - if (startCachePoint.AreaId == 3)//鍒ゆ柇鏄惁涓烘ā缁勭┖鏍堟澘鍖哄煙 + if (startCachePoint.AreaId == 4)//鍒ゆ柇鏄惁涓烘ā缁勭┖鏍堟澘鍖哄煙 { var qty = (startCachePoint.Remark.ObjToInt() - 1); if (qty > 0) startCachePoint.PointStatus = LocationStatusEnum.InStock.ObjToInt(); startCachePoint.Remark = qty.ToString(); } + //else if (startCachePoint.AreaId == 1) + //{ + // startCachePoint.PointStatus = LocationStatusEnum.PalletLock.ObjToInt(); + //} _basicService.CachePointService.Repository.UpdateData(startCachePoint); } } @@ -253,17 +390,25 @@ return new { code = 200, message = "鎴愬姛" }; } case AGVTaskStatusEnum.Cancel: + case AGVTaskStatusEnum.Terminate: + case AGVTaskStatusEnum.Error: { + if (task.TaskStatus < AGVTaskStatusEnum.DoneFetch.ObjToInt()) + { + Dt_CachePoint startCachePoint = _basicService.CachePointService.Repository.QueryFirst(x => x.PointCode == task.SourceAddress); + startCachePoint.PointStatus = LocationStatusEnum.InStock.ObjToInt(); + _basicService.CachePointService.Repository.UpdateData(startCachePoint); + } task.TaskStatus = AGVTaskStatusEnum.Cancel.ObjToInt(); BaseDal.DeleteAndMoveIntoHty(task, OperateType.鑷姩鍒犻櫎); return new { code = 200, message = "鎴愬姛" }; } - case AGVTaskStatusEnum.Terminate: - task.TaskStatus = AGVTaskStatusEnum.Terminate.ObjToInt(); - break; - case AGVTaskStatusEnum.Error: - task.TaskStatus = AGVTaskStatusEnum.Error.ObjToInt(); - break; + //case AGVTaskStatusEnum.Terminate: + // task.TaskStatus = AGVTaskStatusEnum.Terminate.ObjToInt(); + // break; + //case AGVTaskStatusEnum.Error: + // task.TaskStatus = AGVTaskStatusEnum.Error.ObjToInt(); + // break; default: return new { code = 404, message = "鏈畾涔変换鍔$被鍨�!" }; } -- Gitblit v1.9.3