From 505e0d47a72f51b0dc4dc315f8fce36cc73abc89 Mon Sep 17 00:00:00 2001 From: kazelee <1847801760@qq.com> Date: 星期二, 29 七月 2025 17:28:28 +0800 Subject: [PATCH] 添加看板获取货位状态接口, 修复容器插入, 货位容器绑定货位字段未更新的问题 --- models/TN_Location.cs | 2 api/DebugController.cs | 24 +++++ wms/LocationHelper.cs | 1 core/Monitor.cs | 4 core/WCSCore.cs | 17 +++ api/WmsController.cs | 137 +++++++++++++++++++++++++++++++++- 6 files changed, 176 insertions(+), 9 deletions(-) diff --git a/api/DebugController.cs b/api/DebugController.cs index f83777f..181c631 100644 --- a/api/DebugController.cs +++ b/api/DebugController.cs @@ -202,7 +202,7 @@ var cntrListToUpdate = new List<TN_Container>(); var cntrListToInsert = new List<TN_Container>(); foreach (var cntr in result) { - var oldCntr = cntrList.Where(c => c.S_CODE == cntr.S_CNTR_CODE).First(); + var oldCntr = cntrList.Where(c => c.S_CODE == cntr.S_CNTR_CODE).FirstOrDefault(); if (oldCntr == null) { cntrListToUpdate.Add(new TN_Container { S_CODE = cntr.S_CNTR_CODE, N_DETAIL_COUNT = cntr.Count }); } @@ -231,6 +231,28 @@ return "success"; } + + [HttpPost] + + public string RefreshCgDetail() { + var db = new SqlHelper<object>().GetInstance(); + try { + var locCntrRelList = db.Queryable<TN_Loc_Container>().ToList(); + var cgDetailList = db.Queryable<TN_CG_Detail>().ToList(); + cgDetailList.ForEach(d => { + var locCntrRel = locCntrRelList.Where(c => c.S_CNTR_CODE == d.S_CNTR_CODE).FirstOrDefault(); + if (locCntrRel != null) { + d.S_LOC_CODE = locCntrRel.S_LOC_CODE; + } + }); + + var res = db.Updateable(cgDetailList).UpdateColumns(it => new { it.S_LOC_CODE }).ExecuteCommand(); + return $"{res}"; + } + catch (Exception ex) { + return ex.Message; + } + } } public class CntrCodeCountResult { diff --git a/api/WmsController.cs b/api/WmsController.cs index 9b13ddf..e3d682a 100644 --- a/api/WmsController.cs +++ b/api/WmsController.cs @@ -1,24 +1,26 @@ 锘� using System.Collections.Generic; +using System.Linq; using System.Web.Http; using HH.WCS.Mobox3.AnGang.core; +using HH.WCS.Mobox3.AnGang.models; using HH.WCS.Mobox3.AnGang.util; using Newtonsoft.Json; + +using SqlSugar; using static HH.WCS.Mobox3.AnGang.api.ApiModel; using static HH.WCS.Mobox3.AnGang.api.OtherModel; using static HH.WCS.Mobox3.AnGang.dispatch.NDC; -namespace HH.WCS.Mobox3.AnGang.api -{ +namespace HH.WCS.Mobox3.AnGang.api { /// <summary> /// 绗笁鏂硅皟鐢ㄧ殑鎺ュ彛 /// </summary> [RoutePrefix("api")] - public class WmsController : System.Web.Http.ApiController - { + public class WmsController : System.Web.Http.ApiController { [HttpGet] [Route("GetKanbanAgvState")] public KanbanAgvState GetKanbanAgvState() { @@ -41,5 +43,132 @@ } return new KanbanAgvState { AgvState = resName }; } + + [HttpGet] + [Route("GetLocInfo")] + public WmsModel.tbData GetLocInfo() { + return WmsService.GetLocInfo(); + } + + [HttpGet] + [Route("GetLocStateInfo")] + public WmsModel.LocStateInfo GetLocStateInfo() { + return WmsService.GetLocStateInfo(); + } + + [HttpGet] + [Route("GetLocCountInfo")] + public WmsModel.LocCountInfo GetLocCountInfo() { + return WmsService.GetLocCountInfo(); + } } + + public class WmsService { + public static WmsModel.tbData GetLocInfo() { + var db = new SqlHelper<object>().GetInstance(); + try { + var locs = db.Queryable<TN_Location>().ToList(); + var haveCgDetailCntrList = db.Queryable<TN_CG_Detail>().Select(d => d.S_CNTR_CODE).ToList(); + var emptyLocs = db.Queryable<TN_Location, TN_Loc_Container>((l, c) => l.S_CODE == c.S_LOC_CODE) + .Where((l, c) => !haveCgDetailCntrList.Contains(c.S_CNTR_CODE)).Select((l, c) => l.S_CODE).ToList(); + + return new WmsModel.tbData { + data = locs.Select(l => new WmsModel.tbDataOne { + value = $"{l.N_ROW}-{l.N_COL}-{l.N_LAYER}", + state = l.N_LOCK_STATE == 3 ? "璐т綅閿� : + l.N_CURRENT_NUM == 0 ? "绌鸿揣浣� : + emptyLocs.Contains(l.S_CODE) ? "绌烘墭鐩� : "婊℃墭鐩� + }).ToList() + }; + } + catch (System.Exception) { + return new WmsModel.tbData(); + } + } + public static WmsModel.LocStateInfo GetLocStateInfo() { + var db = new SqlHelper<object>().GetInstance(); + try { + //var locs = db.Queryable<TN_Location>().ToList(); + var result = db.Queryable<TN_Location>() + .Select(l => new WmsModel.LocState { + Code = l.S_CODE, + Row = l.N_ROW, + Column = l.N_COL, + Layer = l.N_LAYER, + CurrentNum = l.N_CURRENT_NUM, + LockState = l.N_LOCK_STATE, + }).ToList(); + + return new WmsModel.LocStateInfo { + //LocStates = locs.Select(l => new WmsModel.LocState { + // Code = l.S_CODE, + // Row = l.N_ROW, + // Column = l.N_COL, + // Layer = l.N_LAYER, + // CurrentNum = l.N_CURRENT_NUM, + // LockState= l.N_LOCK_STATE, + //}).ToList(), + LocStates = result + }; + } + catch (System.Exception) { + return new WmsModel.LocStateInfo(); + } + } + + public static WmsModel.LocCountInfo GetLocCountInfo() { + var db = new SqlHelper<object>().GetInstance(); + try { + var result = db.Queryable<TN_Location>() + .GroupBy(loc => new { loc.N_ROW, loc.N_LAYER }) // 鎸夎鍜屽眰鍒嗙粍 + .Select(loc => new WmsModel.LocCount { + Row = loc.N_ROW, // 琛�+ Layer = loc.N_LAYER, // 灞�+ Count = SqlFunc.AggregateSum(loc.N_CURRENT_NUM) // 绱 N_CURRENT_NUM 鏁伴噺 + }) + .ToList(); + return new WmsModel.LocCountInfo { + locCounts= result + }; + } + catch (System.Exception) { + return new WmsModel.LocCountInfo(); + } + } + } + + public class WmsModel { + public class LocStateInfo { + public List<LocState> LocStates = new List<LocState>(); + } + + public class LocState { + public string Code { get; set; } + public int Row { get; set; } + public int Column { get; set; } + public int Layer { get; set; } + public int LockState { get; set; } + public int CurrentNum { get; set; } + } + + public class LocCountInfo { + public List<LocCount> locCounts= new List<LocCount>(); + } + + public class LocCount { + public int Row { get; set; } + public int Layer { get; set; } + public int Count { get; set; } + } + + public class tbData { + public List<tbDataOne> data = new List<tbDataOne>(); + } + + public class tbDataOne { + public string value { get; set; } + public string state { get; set; } + } + } + } diff --git a/core/Monitor.cs b/core/Monitor.cs index 1fca4ea..c8503bd 100644 --- a/core/Monitor.cs +++ b/core/Monitor.cs @@ -22,7 +22,7 @@ var inboundDataList = db.Queryable<TN_Inbound_DataRecord>().ToList(); if (inboundDataList.Count == 0 ) { - LogHelper.Info($"杞锛氬叆搴撲俊鎭悓姝ワ細褰撳墠娌℃湁寰呭悓姝ョ殑ERP鐗╂枡淇℃伅"); + LogHelper.Debug($"杞锛氬叆搴撲俊鎭悓姝ワ細褰撳墠娌℃湁寰呭悓姝ョ殑ERP鐗╂枡淇℃伅"); return; } @@ -151,7 +151,7 @@ var outboundDataList = db.Queryable<TN_Outbound_DataRecord>().ToList(); if (outboundDataList.Count== 0 ) { - LogHelper.Info($"杞锛氬嚭搴撲俊鎭悓姝ワ細褰撳墠娌℃湁寰呭悓姝ョ殑ERP鐗╂枡淇℃伅"); + LogHelper.Debug($"杞锛氬嚭搴撲俊鎭悓姝ワ細褰撳墠娌℃湁寰呭悓姝ョ殑ERP鐗╂枡淇℃伅"); return; } diff --git a/core/WCSCore.cs b/core/WCSCore.cs index c1b285a..15daf57 100644 --- a/core/WCSCore.cs +++ b/core/WCSCore.cs @@ -371,16 +371,29 @@ internal static void Dispatch() { //鏌ヨ浠诲姟 //鑾峰彇鎵�湁绛夊緟鐨勪换鍔�+ //var list = WCSHelper.GetWaitingTaskList(); + //LogHelper.Info("绛夊緟浠诲姟淇℃伅" + JsonConvert.SerializeObject(list), "API"); + //if (list.Count > 0) { + // list.ForEach(task => { + // //浣跨敤鑷畾涔変换鍔℃帹閫�+ // TaskProcess.SendTask(task);//璋冨害NDC鎴栨澀濂ユ垨鍥借嚜璁惧 + // }); + //} + //else { + // LogHelper.Info("鏆傛棤浠诲姟"); + //} + var list = WCSHelper.GetWaitingTaskList(); - LogHelper.Info("绛夊緟浠诲姟淇℃伅" + JsonConvert.SerializeObject(list), "API"); if (list.Count > 0) { + LogHelper.Info($"杞锛氫换鍔″垎鍙戯細绛夊緟浠诲姟淇℃伅\n\n{JsonConvert.SerializeObject(list)}\n"); list.ForEach(task => { //浣跨敤鑷畾涔変换鍔℃帹閫�+ //TaskProcess.SendTask(task);//璋冨害NDC鎴栨澀濂ユ垨鍥借嚜璁惧 TaskProcess.SendTask(task);//璋冨害NDC鎴栨澀濂ユ垨鍥借嚜璁惧 }); } else { - LogHelper.Info("鏆傛棤浠诲姟"); + LogHelper.Debug("杞锛氫换鍔″垎鍙戯細鏆傛棤浠诲姟"); } } diff --git a/models/TN_Location.cs b/models/TN_Location.cs index f0b724f..a77abaf 100644 --- a/models/TN_Location.cs +++ b/models/TN_Location.cs @@ -78,5 +78,7 @@ /// 璐ф灦缂栫爜 /// </summary> public int N_ROW { get; set; } + + public int N_COL { get; set;} } } diff --git a/wms/LocationHelper.cs b/wms/LocationHelper.cs index d03cf2f..b330b3f 100644 --- a/wms/LocationHelper.cs +++ b/wms/LocationHelper.cs @@ -308,6 +308,7 @@ if (updateCgDetalList.Count == 0) { LogHelper.Info($"娌℃湁鏇存柊鐨勭墿鏂欏垪琛�); } + updateCgDetalList.ForEach(d => { d.S_LOC_CODE = loc; }); using (var tran = db.Ado.UseTran()) { -- Gitblit v1.9.1