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