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 { /// /// 第三方调用的接口 /// [RoutePrefix("api")] public class WmsController : System.Web.Http.ApiController { [HttpGet] [Route("GetKanbanAgvState")] public KanbanAgvState GetKanbanAgvState() { LogHelper.Info("触发API:GetKanbanAgvState:看板获取AGV状态", "API"); var res = WCSCore.AgvState; var resName = string.Empty; switch (res) { case "in_system": resName = "系统内"; break; case "out_system": resName = "系统外"; break; case "online": resName = "在线"; break; case "offline": resName = "离线"; break; case "ready": resName = "就绪"; break; case "not_ready": resName = "未就绪"; break; case "in_dispatc": resName = "调度中"; break; case "out_dispatch": resName = "调度外"; break; case "running": resName = "运行中"; break; case "not_running": resName = "未运行"; break; default: resName = "未知状态"; break; } 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().GetInstance(); try { var locs = db.Queryable().ToList(); var haveCgDetailCntrList = db.Queryable().Select(d => d.S_CNTR_CODE).ToList(); var emptyLocs = db.Queryable((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().GetInstance(); try { //var locs = db.Queryable().ToList(); var result = db.Queryable() .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().GetInstance(); try { var result = db.Queryable() .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 LocStates = new List(); } 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 locCounts= new List(); } public class LocCount { public int Row { get; set; } public int Layer { get; set; } public int Count { get; set; } } public class tbData { public List data = new List(); } public class tbDataOne { public string value { get; set; } public string state { get; set; } } } }