添加看板获取货位状态接口, 修复容器插入, 货位容器绑定货位字段未更新的问题
6个文件已修改
185 ■■■■■ 已修改文件
api/DebugController.cs 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
api/WmsController.cs 137 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
core/Monitor.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
core/WCSCore.cs 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
models/TN_Location.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
wms/LocationHelper.cs 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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 {
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; }
        }
    }
}
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;
                }
                
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("轮询:任务分发:暂无任务");
            }
        }
models/TN_Location.cs
@@ -78,5 +78,7 @@
        /// 货架编码
        /// </summary>
        public int N_ROW { get; set; }
        public int N_COL { get; set;}
    }
}
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())
                {