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; }
        }
    }
}