using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Text; using System.Threading.Tasks; using System.Web.Http; using System.Xml.Linq; using System.Xml; using static HH.WCS.Mobox3.pinggao.models.SapRoot; using HH.WCS.Mobox3.pinggao; using Newtonsoft.Json.Linq; using static HH.WCS.Mobox3.pinggao.api.ApiModel; using System.Reflection; using HH.WCS.Mobox3.pinggao.api; 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; namespace HH.WCS.Mobox3.pinggao.api { public class WmsSapController : System.Web.Http.ApiController { #region 大屏数据接口 /// /// 大屏数据 /// /// public BarChartResponse InOut(){ var response = new BarChartResponse { OutboundData = new List { }, InboundData = new List { }, CKNData = new List { }, ListTask = new List { }, Inttbounddjcount = 0, Outtbounddjcount=0, IntodayCount = 0, OuttodayCount = 0 }; var db = new SqlHelper().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() .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() .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().Where(s=>s.N_B_STATE==0).Count(); var Outtbounddjcount = db.Queryable().Where(s=>s.N_B_STATE==0).Count(); var today = DateTime.Today; var tomorrow = today.AddDays(1); var IntodayCount = db.Queryable() .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() .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().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() .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() .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().Count(); //所有容器物料数量 int alltprcout = db.Queryable() .GroupBy(s => s.S_CNTR_CODE) .Select(s => new { s.S_CNTR_CODE }) .Count(); var KTCount = allCntrcout - alltprcout; var KTName = "空托盘"; int alllocationcout = db.Queryable().Count(); var KHWCount = alllocationcout - allCntrcout; var KHWName = "空货位"; var list = new List { 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 /// /// 供应商接收接口获取 /// /// /// [HttpPost] public GYSReturnRoot.Root GYSReceiveXmlData([FromBody] GYSDto.Root xmlData) { #region xml数据接收转数组 LogHelper.Info("供应商接收接口:" + JsonConvert.SerializeObject(xmlData)); ////接收xml数据 //XmlDocument xmlDoc = new XmlDocument(); //xmlDoc.LoadXml(xmlData.ToString()); //// 将 XmlDocument 转换为 JSON 字符串 //JObject jsonObject = JsonConvert.DeserializeObject(JsonConvert.SerializeXmlNode(xmlDoc)); //// 处理特定字段,强制转换为数组 //WmsSpaHelper.EnsureArrayFormats(jsonObject, "ITEM"); //// 反序列化为RootWithArray //var data = JsonConvert.DeserializeObject(jsonObject.ToString()); #endregion #region 外采入库业务流程 GYSReturnRoot.Root simpleResult = WmsSpaHelper.GYS_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; return simpleResult; #endregion } /// /// 生产订单信息获取 /// /// /// [HttpPost] public Orderback.Root OrderReceiveXmlData([FromBody] OrderDto.Root xmlData) { #region xml数据接收转数组 LogHelper.Info("生产订单接收接口:" + JsonConvert.SerializeObject(xmlData)); ////接收xml数据 //XmlDocument xmlDoc = new XmlDocument(); //xmlDoc.LoadXml(xmlData.ToString()); //// 将 XmlDocument 转换为 JSON 字符串 //JObject jsonObject = JsonConvert.DeserializeObject(JsonConvert.SerializeXmlNode(xmlDoc)); //// 处理特定字段,强制转换为数组 //WmsSpaHelper.EnsureArrayFormats(jsonObject, "ITEM"); //// 反序列化为RootWithArray //var data = JsonConvert.DeserializeObject(jsonObject.ToString()); #endregion #region 外采入库业务流程 Orderback.Root simpleResult = WmsSpaHelper.Mater_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; return simpleResult; #endregion } /// /// 主物料信息获取 /// /// /// [HttpPost] 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(JsonConvert.SerializeXmlNode(xmlDoc)); //// 处理特定字段,强制转换为数组 //WmsSpaHelper.EnsureArrayFormats(jsonObject, "ITEM"); //// 反序列化为RootWithArray //var data = JsonConvert.DeserializeObject(jsonObject.ToString()); #endregion #region 外采入库业务流程 WLReturnRoot.Root simpleResult = WmsSpaHelper.Mater_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; var json = JsonConvert.SerializeObject(simpleResult); return simpleResult; #endregion } /// /// 外采收货 /// /// /// [HttpPost] public WcReturnRoot.Root WCReceiveXmlData([FromBody] SapRoot.Root xmlData) { #region xml数据接收转数组 LogHelper.Info("外采收货接口:" + JsonConvert.SerializeObject(xmlData)); //接收xml数据 //XmlDocument xmlDoc = new XmlDocument(); //xmlDoc.LoadXml(xmlData.ToString()); // 将 XmlDocument 转换为 JSON 字符串 //JObject jsonObject = JsonConvert.DeserializeObject(JsonConvert.SerializeXmlNode(xmlDoc)); // 处理特定字段,强制转换为数组 //WmsSpaHelper.EnsureArrayFormat(jsonObject, "ITME", "ITEM1"); // 反序列化为RootWithArray //var data = JsonConvert.DeserializeObject(jsonObject.ToString()); #endregion #region 外采入库业务流程 List simpleResult = WmsSpaHelper.Inbound_Order_In(xmlData); //接收返回参数 生成sap对接文档返回格式 List wcReturnRoots = new List(); foreach (var item in simpleResult) { WcReturnRoot.ITEM wcReturnRoot = new WcReturnRoot.ITEM(); wcReturnRoot.WLPZH = item.WLPZBH; wcReturnRoot.WLPZND = 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 WcReturnRoot.Root { ROOT = new WcReturnRoot.ROOT { ITEM = wcReturnRoots } }; #endregion #region 返回xml var json = JsonConvert.SerializeObject(result); //string xml = JsonConvert.DeserializeXmlNode(json, "ROOT").OuterXml; ////返回json //var response = new HttpResponseMessage() //{ // Content = new StringContent(xml, Encoding.UTF8, "application/xml") //}; return result; #endregion } /// /// 内采入库/出库 /// /// /// [HttpPost] public WcReturnRoot.Root NCReceiveXmlData([FromBody] NcDto.Root xmlData) { #region xml数据接收转数组 //NcDto.ROOT rOOT = new NcDto.ROOT(); //rOOT.WLPZ = new NcDto.WLPZ(); LogHelper.Info("内采收货接口:" + JsonConvert.SerializeObject(xmlData)); ////接收xmloo //XmlDocument xmlDoc = new XmlDocument(); //xmlDoc.LoadXml(xmlData.ToString()); //// 将 XmlDocument 转换为 JSON 字符串 //JObject jsonObject = JsonConvert.DeserializeObject(JsonConvert.SerializeXmlNode(xmlDoc)); //// 处理特定字段,强制转换为数组 //WmsSpaHelper.EnsureArrayFormat(jsonObject, "ITME", "ITEM1"); //// 反序列化为RootWithArray //var data = JsonConvert.DeserializeObject(jsonObject.ToString()); //// SimpleResult simpleResult = WmsSpaHelper.OtherOut_Order_Ins(data); //#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 simpleResult = WmsSpaHelper.NCInbound_Order_In(xmlData); //接收返回参数 生成sap对接文档返回格式 List wcReturnRoots = new List(); foreach (var item in simpleResult) { WcReturnRoot.ITEM wcReturnRoot = new WcReturnRoot.ITEM(); wcReturnRoot.WLPZH = item.WLPZBH; wcReturnRoot.WLPZND = 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 WcReturnRoot.Root { ROOT = new WcReturnRoot.ROOT { ITEM = wcReturnRoots } }; #region 返回xml var json = JsonConvert.SerializeObject(result); return result; #endregion } /// /// 其他出入库[FromBody] XElement xmlData /// /// /// [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(JsonConvert.SerializeXmlNode(xmlDoc)); //// 处理特定字段,强制转换为数组 //WmsSpaHelper.EnsureArrayFormat(jsonObject, "ITEM", "ITEM1"); //// 反序列化为RootWithArray //var data = JsonConvert.DeserializeObject(jsonObject.ToString()); #endregion #region 其他出入库业务流程 List 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 wcReturnRoots = new List(); foreach (var item in simpleResult) { OtherReturnRoot.ITEM wcReturnRoot = new OtherReturnRoot.ITEM(); wcReturnRoot.WLPZBH = item.WLPZBH; 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 { ITEM = wcReturnRoots } }; return result; // 处理XML数据 // ... } /// /// 码盘入库 /// /// /// [HttpPost] public SimpleResult InboundOrderSorting(MPSorting model) { return WmsSpaHelper.InboundOrderSorting(model); } /// /// pda分拣 /// /// /// [HttpPost] public Task OutboundOrderSorting(FJSorting model) { return WmsSpaHelper.OutboundOrderSorting(model); } /// /// 空托出入库 /// /// /// [HttpPost] public Task InOutKT(KtSorting model) { return WmsSpaHelper.KtSorting(model); } /// /// 生产订单领料单(出库单) /// /// /// //[HttpPost] //public HttpResponseMessage ReceiveXmlCKData([FromBody] XElement xmlData) //{ // #region xml数据接收转数组 // ROOT rOOT = new ROOT(); // rOOT.WLPZ = new WLPZ(); // LogHelper.Info("外采收货接口:" + xmlData.ToString()); // //接收xml数据 // XmlDocument xmlDoc = new XmlDocument(); // xmlDoc.LoadXml(xmlData.ToString()); // // 将 XmlDocument 转换为 JSON 字符串 // JObject jsonObject = JsonConvert.DeserializeObject(JsonConvert.SerializeXmlNode(xmlDoc)); // // 处理特定字段,强制转换为数组 // //WmsSpaHelper.EnsureArrayFormat(jsonObject, "ITME"); // WmsSpaHelper.EnsureArrayFormat(jsonObject["ROOT"]["SCDDLL"] as JObject, "ITEM"); // // 反序列化为RootWithArray // var data = JsonConvert.DeserializeObject(jsonObject.ToString()); // #endregion // #region 出库业务流程 // var json = WmsSpaHelper.Out_Order_In(data); // //接收返回参数 生成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 //} /// /// 生产订单领料单(生成领料单) /// /// /// [HttpPost] public LLDReturnRoot.Root LLDReceiveXmlData([FromBody] CKDdto.Root xmlData) { #region xml数据接收转数组 LogHelper.Info("生产订单领料单(生成领料单)接口:" + JsonConvert.SerializeObject(xmlData)); ////接收xml数据 //XmlDocument xmlDoc = new XmlDocument(); //xmlDoc.LoadXml(xmlData.ToString()); //// 将 XmlDocument 转换为 JSON 字符串 //JObject jsonObject = JsonConvert.DeserializeObject(JsonConvert.SerializeXmlNode(xmlDoc)); //// 处理特定字段,强制转换为数组 ////WmsSpaHelper.EnsureArrayFormat(jsonObject, "ITME"); //WmsSpaHelper.EnsureArrayFormat(jsonObject["ROOT"]["SCDDLL"] as JObject, "ITEM"); //// 反序列化为RootWithArray //var data = JsonConvert.DeserializeObject(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 wcReturnRoots = new List(); return json; #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 } /// /// 领料单生成出库单 /// /// /// [HttpPost] public WeiLiResult GetLLDReceiveXmlData(LLDDto dto) { var json = WmsSpaHelper.Out_Order_Inss(dto.S_NO); return json; } #region wms-sap接口 /// /// 外采入库/内采入库/计划外退料入库审核接口 /// /// /// [HttpPost] public async Task WcInboundOrderAccieve(WcRkDto model) { return await WmsSpaHelper.NcRkBacking(model); } ///// ///// 内采收货入库接口 ///// ///// ///// //[HttpPost] //public async Task NcInboundOrderAccieve(WcRkDto model) //{ // return await WmsSpaHelper.NcRkBacking(model); //} #endregion /// /// 测试接口 /// /// /// [HttpPost] public HttpResponseMessage cesReceiveXmlData([FromBody] XElement xmlData) { string xmlDatas = "{\r\n \"ROOT\": {\r\n \"ITEM\": {\r\n \"KEY\": \"唯一标识\",\r\n \"WLPZBH\": \"物料凭证号\",\r\n " + " \"WLPZND\": \"物料凭年度\",\r\n \"MSGCODE\": \"1\",\r\n \"MSGDESP\": \"失败原因或者成功信息字符长度255\"\r\n }\r\n }\r\n}"; var data = JsonConvert.DeserializeObject(xmlDatas); string xml = JsonConvert.DeserializeXmlNode(xmlDatas, "").OuterXml; //返回json var response = new HttpResponseMessage() { Content = new StringContent(xml, Encoding.UTF8, "application/xml") }; return response; } } }