hudong
8 天以前 1ef909b2c886c9f20f05c8e61efd555ef377b715
api/WmsSapController.cs
@@ -17,22 +17,196 @@
using static HH.WCS.Mobox3.pinggao.api.OtherModel;
using static HH.WCS.Mobox3.pinggao.api.ApibackModel;
using HH.WCS.Mobox3.pinggao.models;
using static HH.WCS.Mobox3.pinggao.models.DAPING;
using HH.WCS.Mobox3.pinggao.util;
using SqlSugar;
using System.Diagnostics;
namespace HH.WCS.Mobox3.pinggao.api
{
    public class WmsSapController : System.Web.Http.ApiController
    {
        /// <summary>
        /// 生产订单信息获取
        /// 出庫任務列表
        /// </summary>
        /// <returns></returns>
        public DPList DpRecord(DpDto dpDto)
        {
            var response = new DPList
            {
                DpList = new List<DP> { }
            };
            if (string.IsNullOrEmpty(dpDto.Code))
            {
                LogHelper.Info("货位信息不能为空" );
                return response;
            }
            var db = new SqlHelper<object>().GetInstance();
            var list =db.Queryable<TN_DPRECORD>().Where(s=>s.S_LOCATION== dpDto.Code).OrderByDescending(s=>s.T_CREATE).ToList();
            var tasksList = list.Select(t => new DP
            {
                S_NO = t.S_NO,
                S_WLBM = t.S_WLBM,
                S_WLMC = t.S_WLMC,
                N_COUNT = t.N_COUNT,
                S_LOCATION = t.S_LOCATION
            }).ToList();
            response.DpList = tasksList;
            return response;
        }
        #region 大屏数据接口
            /// <summary>
            /// 大屏数据
            /// </summary>
            /// <returns></returns>
        public BarChartResponse InOut(){
            var response = new BarChartResponse
            {
                OutboundData = new List<BarChartData>
                {
                },
                InboundData = new List<BarChartData>
                {
                },
                CKNData = new List<NB> { },
                ListTask = new List<Tasks> { },
                Inttbounddjcount = 0,
                Outtbounddjcount=0,
                IntodayCount = 0,
                OuttodayCount = 0
            };
            var db = new SqlHelper<object>().GetInstance();
            #region 出库
            // 1. 获取当前年份(或指定年份)
            int year = DateTime.Now.Year; // 如2023
            // 2. 生成1-12月所有月份(确保完整性)
            var allMonths = Enumerable.Range(1, 12)
                .Select(m => new DateTime(year, m, 1).ToString("MM"))
                .ToList();
            //var allMonths = Enumerable.Range(1, 12).ToList();
            // 3. 查询数据库获取出库数据(按月份分组统计)
            var outboundCounts = db.Queryable<WCSTask>()
                .Where(a => a.S_TYPE.Contains("出库") &&a.N_B_STATE==3&& a.T_END_TIME != null&&a.T_END_TIME.Value.Year== year)
                .ToList() // 加载到内存
                .GroupBy(a => a.T_END_TIME.Value.ToString("MM")) // 按月份分组
                .ToDictionary(g => g.Key, g => g.Count()); // 转为字典(月份:记录数)
            // 3. 构建完整1-12月数据(缺失月份补0)
            var outboundData = allMonths.Select(month => new BarChartData
            {
                Month = int.Parse(month),
                Count = outboundCounts.TryGetValue(month, out var count) ? count : 0
            }).ToList();
            response.OutboundData = outboundData;
            #endregion
            #region 入库
            var inttboundCounts = db.Queryable<WCSTask>()
           .Where(a => a.S_TYPE.Contains("入库") && a.N_B_STATE == 3 && a.T_END_TIME != null && a.T_END_TIME.Value.Year == year)
           .ToList() // 加载到内存
           .GroupBy(a => a.T_END_TIME.Value.ToString("MM")) // 按月份分组
           .ToDictionary(g => g.Key, g => g.Count()); // 转为字典(月份:记录数)
            var intboundData = allMonths.Select(month => new BarChartData
            {
                Month = int.Parse(month),
                Count = inttboundCounts.TryGetValue(month, out var count) ? count : 0
            }).ToList();
            response.InboundData = intboundData;
            #endregion
            #region 未完成单据量
            var Inttbounddjcount = db.Queryable<TN_Inbound_Order>().Where(s=>s.N_B_STATE==0).Count();
            var Outtbounddjcount = db.Queryable<TN_Ll_Order>().Where(s=>s.N_B_STATE==0).Count();
            var today = DateTime.Today;
            var tomorrow = today.AddDays(1);
            var IntodayCount = db.Queryable<WCSTask>()
                .Where(s => s.N_B_STATE == 3 && s.S_TYPE.Contains("入库")&&
                            s.T_END_TIME >= today &&
                            s.T_END_TIME < tomorrow).Count();
            var OuttodayCount = db.Queryable<WCSTask>()
            .Where(s => s.N_B_STATE == 3 && s.S_TYPE.Contains("出库") &&
                        s.T_END_TIME >= today &&
                        s.T_END_TIME < tomorrow).Count();
            response.Inttbounddjcount = Inttbounddjcount;
            response.Outtbounddjcount = Outtbounddjcount;
            response.OuttodayCount = OuttodayCount;
            response.IntodayCount = IntodayCount;
            #endregion
            #region 任务列表
            var tasklist = db.Queryable<WCSTask>().Where(s => s.N_B_STATE != 2).Select(s => new { s.S_CNTR_CODE, s.S_START_AREA, s.S_END_AREA, s.S_B_STATE }).Take(5).ToList() ;
            var tasksList = tasklist.Select(t => new Tasks
            {
                S_CNTR_CODE = t.S_CNTR_CODE,
                S_START_AREA = t.S_START_AREA,
                S_END_AREA = t.S_END_AREA,
                S_B_STATE = t.S_B_STATE
            }).ToList();
            response.ListTask = tasksList;
            #endregion
            #region 仓库库内审核
            var ManCount = db.Queryable<CntrItemRel>()
                           .Where(s => s.S_CNTR_TYPE == "满托")
                           .GroupBy(s => s.S_CNTR_CODE)
                           .Select(s => new { s.S_CNTR_CODE })
                           .Count();
            var ManName = "满托盘";
            var BanCount = db.Queryable<CntrItemRel>()
                           .Where(s => s.S_CNTR_TYPE == "半托")
                           .GroupBy(s => s.S_CNTR_CODE)
                           .Select(s => new { s.S_CNTR_CODE })
                           .Count();
            var BanName = "半托盘";
            //所有容器的数量
            int allCntrcout = db.Queryable<LocCntrRel>().Count();
            //所有容器物料数量
            int alltprcout = db.Queryable<CntrItemRel>()
                     .GroupBy(s => s.S_CNTR_CODE)
                     .Select(s => new { s.S_CNTR_CODE })
                     .Count();
            var KTCount = allCntrcout - alltprcout;
            var KTName = "空托盘";
            int alllocationcout = db.Queryable<Location>().Count();
            var KHWCount = alllocationcout - allCntrcout;
            var KHWName = "空货位";
            var list = new List<NB>
        {
            new NB { Name = ManName, Count = ManCount },
            new NB { Name = BanName, Count = BanCount },
            new NB { Name = KTName, Count = KTCount },
            new NB { Name = KHWName, Count = KHWCount }
        };
            response.CKNData = list;
            #endregion
            return response;
        }
        #endregion
        /// <summary>
        /// 供应商接收接口获取
        /// </summary>
        /// <param name="xmlData"></param>
        /// <returns></returns>
        [HttpPost]
        public Orderback.Root GYSReceiveXmlData([FromBody] GYSDto.Root xmlData)
        public GYSReturnRoot.Root GYSReceiveXmlData([FromBody] GYSDto.Root xmlData)
        {
            #region xml数据接收转数组
            LogHelper.Info("供应商接收接口:" + JsonConvert.SerializeObject(xmlData));
            //LogHelper.Info("供应商接收接口:" + JsonConvert.SerializeObject(xmlData));
            ////接收xml数据
            //XmlDocument xmlDoc = new XmlDocument();
@@ -48,7 +222,7 @@
            #endregion
            #region 外采入库业务流程
            //Orderback.Root simpleResult = WmsSpaHelper.Mater_In(xmlData);
            GYSReturnRoot.Root simpleResult = WmsSpaHelper.GYS_In(xmlData);
            //接收返回参数 生成sap对接文档返回格式
            //var json = WmsSpaHelper.GetJsonResult(simpleResult.WLPZBH, simpleResult.resultCode.ToString(), simpleResult.resultMsg);
@@ -61,7 +235,7 @@
            //    Content = new StringContent(xml, Encoding.UTF8, "application/xml")
            //};
            //return response;
            return null;
            return simpleResult;
            #endregion
        }
@@ -76,7 +250,7 @@
        {
            #region xml数据接收转数组
            LogHelper.Info("生产订单接收接口:" + JsonConvert.SerializeObject(xmlData));
            //LogHelper.Info("生产订单接收接口:" + JsonConvert.SerializeObject(xmlData));
            ////接收xml数据
            //XmlDocument xmlDoc = new XmlDocument();
@@ -115,39 +289,15 @@
        /// <returns></returns>
        [HttpPost]
        public SimpleResult MaterReceiveXmlData([FromBody] MaterDto.Root xmlData)
        public WLReturnRoot.Root MaterReceiveXmlData([FromBody] MaterDto.Root xmlData)
        {
            #region xml数据接收转数组
            LogHelper.Info("物料接收接口:" + JsonConvert.SerializeObject(xmlData));
            ////接收xml数据
            //XmlDocument xmlDoc = new XmlDocument();
            //xmlDoc.LoadXml(xmlData.ToString());
            //// 将 XmlDocument 转换为 JSON 字符串
            //JObject jsonObject = JsonConvert.DeserializeObject<JObject>(JsonConvert.SerializeXmlNode(xmlDoc));
            //// 处理特定字段,强制转换为数组
            //WmsSpaHelper.EnsureArrayFormats(jsonObject, "ITEM");
            //// 反序列化为RootWithArray
            //var data = JsonConvert.DeserializeObject<MaterDto.Root>(jsonObject.ToString());
            #endregion
            #region 外采入库业务流程
            SimpleResult simpleResult = WmsSpaHelper.Mater_In(xmlData);
            //接收返回参数 生成sap对接文档返回格式
            //var json = WmsSpaHelper.GetJsonResult(simpleResult.WLPZBH, simpleResult.resultCode.ToString(), simpleResult.resultMsg);
            WLReturnRoot.Root simpleResult = WmsSpaHelper.Mater_In(xmlData);
            //#endregion
            //#region  返回xml
            //string xml = JsonConvert.DeserializeXmlNode(json, "root").OuterXml;
            ////返回json
            //var response = new HttpResponseMessage()
            //{
            //    Content = new StringContent(xml, Encoding.UTF8, "application/xml")
            //};
            //return response;
            var json = JsonConvert.SerializeObject(simpleResult);
            return simpleResult;
            #endregion
        }
@@ -162,7 +312,7 @@
        public WcReturnRoot.Root WCReceiveXmlData([FromBody] SapRoot.Root xmlData)
        {
            #region xml数据接收转数组
            LogHelper.Info("外采收货接口:" + JsonConvert.SerializeObject(xmlData));
            //LogHelper.Info("外采收货接口:" + JsonConvert.SerializeObject(xmlData));
            //接收xml数据
            //XmlDocument xmlDoc = new XmlDocument();
            //xmlDoc.LoadXml(xmlData.ToString());
@@ -225,7 +375,7 @@
            //NcDto.ROOT rOOT = new NcDto.ROOT();
            //rOOT.WLPZ = new NcDto.WLPZ();
            LogHelper.Info("内采收货接口:" + JsonConvert.SerializeObject(xmlData));
            //LogHelper.Info("内采收货接口:" + JsonConvert.SerializeObject(xmlData));
            ////接收xmloo
            //XmlDocument xmlDoc = new XmlDocument();
@@ -289,48 +439,23 @@
        [HttpPost]
        public OtherReturnRoot.Root OtherReceiveXmlData([FromBody] otherDto.Root xmlData)
        {
            #region xml数据接收转数组
            LogHelper.Info("其他出入库sap接口:" + JsonConvert.SerializeObject(xmlData));
            ////接收xml数据
            //XmlDocument xmlDoc = new XmlDocument();
            //xmlDoc.LoadXml(xmlData.ToString());
            //// 将 XmlDocument 转换为 JSON 字符串
            //JObject jsonObject = JsonConvert.DeserializeObject<JObject>(JsonConvert.SerializeXmlNode(xmlDoc));
            //// 处理特定字段,强制转换为数组
            //WmsSpaHelper.EnsureArrayFormat(jsonObject, "ITEM", "ITEM1");
            //// 反序列化为RootWithArray
            //var data = JsonConvert.DeserializeObject<otherDto.Root>(jsonObject.ToString());
            #endregion
            #region 其他出入库业务流程
            List<SimpleResult> simpleResult = WmsSpaHelper.Otherbound_Order_In(xmlData);
            //接收返回参数 生成sap对接文档返回格式
            //var json = WmsSpaHelper.GetJsonResult(simpleResult.WLPZBH, simpleResult.resultCode.ToString(), simpleResult.resultMsg);
            #endregion
            #region  返回xml
            //string xml = JsonConvert.DeserializeXmlNode(json, "ROOT").OuterXml;
            ////返回json
            //var response = new HttpResponseMessage()
            //{
            //    Content = new StringContent(xml, Encoding.UTF8, "application/xml")
            //};
            //return response;
            #endregion
            List<OtherReturnRoot.ITEM> wcReturnRoots = new List<OtherReturnRoot.ITEM>();
            foreach (var item in simpleResult)
            {
                OtherReturnRoot.ITEM wcReturnRoot = new OtherReturnRoot.ITEM();
                wcReturnRoot.WLPZBH = item.WLPZBH;
                wcReturnRoot.WLPZND = item.WLPZND;
                wcReturnRoot.ND = item.WLPZND;
                wcReturnRoot.MSGCODE = item.resultCode;
                wcReturnRoot.MSGDESP = item.resultMsg;
                wcReturnRoots.Add(wcReturnRoot);
            }
            //var json = WmsSpaHelper.GetJsonResult(simpleResult.WLPZBH, simpleResult.resultCode.ToString(), simpleResult.resultMsg);
            // 完整嵌套实例化
            var result = new OtherReturnRoot.Root
            {
                ROOT = new OtherReturnRoot.ROOT
@@ -358,6 +483,17 @@
        }
        /// <summary>
        /// pda分拣完整版
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        public Task<SimpleResult> AllOutboundOrderSorting(FJSorting model)
        {
            return WmsSpaHelper.ALLOutboundOrderSorting(model);
        }
        /// <summary>
        /// pda分拣
        /// </summary>
        /// <param name="model"></param>
@@ -367,7 +503,26 @@
        {
            return WmsSpaHelper.OutboundOrderSorting(model);
        }
        /// <summary>
        /// 回库
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        public Task<SimpleResult> HkGet(HuiK model)
        {
            return WmsSpaHelper.HkGets(model);
        }
        /// <summary>
        /// 空托出入库
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        [HttpPost]
        public Task<SimpleResult> InOutKT(KtSorting model)
        {
            return WmsSpaHelper.KtSorting(model);
        }
        /// <summary>
@@ -427,42 +582,23 @@
        [HttpPost]
        public LLDReturnRoot.Root LLDReceiveXmlData([FromBody] CKDdto.Root xmlData)
        {
            //Stopwatch sw = new Stopwatch();
            //sw.Start();
            #region xml数据接收转数组
            LogHelper.Info("生产订单领料单(生成领料单)接口:" + JsonConvert.SerializeObject(xmlData));
            //LogHelper.Info("生产订单领料单(生成领料单)接口:" + JsonConvert.SerializeObject(xmlData));
            ////接收xml数据
            //XmlDocument xmlDoc = new XmlDocument();
            //xmlDoc.LoadXml(xmlData.ToString());
            //// 将 XmlDocument 转换为 JSON 字符串
            //JObject jsonObject = JsonConvert.DeserializeObject<JObject>(JsonConvert.SerializeXmlNode(xmlDoc));
            //// 处理特定字段,强制转换为数组
            ////WmsSpaHelper.EnsureArrayFormat(jsonObject, "ITME");
            //WmsSpaHelper.EnsureArrayFormat(jsonObject["ROOT"]["SCDDLL"] as JObject, "ITEM");
            //// 反序列化为RootWithArray
            //var data = JsonConvert.DeserializeObject<CKDdto.Root>(jsonObject.ToString());
            #endregion
            #region 出库业务流程
            LLDReturnRoot.Root json = WmsSpaHelper.Out_Order_Ins(xmlData);
            //接收返回参数 生成sap对接文档返回格式
            //var json = WmsSpaHelper.GetJsonResult(simpleResult.WLPZBH, simpleResult.resultCode.ToString(), simpleResult.resultMsg);
            //接收返回参数 生成sap对接文档返回格式
            List<WcReturnRoot.ITEM> wcReturnRoots = new List<WcReturnRoot.ITEM>();
            return WmsSpaHelper.Out_Order_Ins(xmlData);
            return json;
            //sw.Stop();
            //long elapsedMilliseconds = sw.ElapsedMilliseconds;
            //LogHelper.Info("生产订单领料单(生成领料单)返回时长:" + elapsedMilliseconds);
            #endregion
            //#region  返回xml
            //string xml = JsonConvert.DeserializeXmlNode(json, "root").OuterXml;
            ////返回json
            //var response = new HttpResponseMessage()
            //{
            //    Content = new StringContent(xml, Encoding.UTF8, "application/xml")
            //};
            //return response;
            //#endregion
        }
        /// <summary>
@@ -476,7 +612,7 @@
        {
            var json = WmsSpaHelper.Out_Order_Inss(dto.S_NO);
            var json = WmsSpaHelper.Out_Order_Inss(dto.S_NO,dto.N_PRIORITY);
            return json;