|
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 {
|
/// <summary>
|
/// 第三方调用的接口
|
/// </summary>
|
[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<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; }
|
}
|
}
|
|
}
|