From 4ae62cd247a0d760a57601fc079e16f8d39e77f4 Mon Sep 17 00:00:00 2001 From: huanghongfeng <huanghongfeng@hnkhzn.com> Date: 星期一, 27 五月 2024 11:16:31 +0800 Subject: [PATCH] 大屏后端 --- 代码管理/WMS/WMS_Server/WIDESEA_WebApi/Controllers/LargescreenController.cs | 367 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 367 insertions(+), 0 deletions(-) diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WebApi/Controllers/LargescreenController.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WebApi/Controllers/LargescreenController.cs" new file mode 100644 index 0000000..09f2d5a --- /dev/null +++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WMS_Server/WIDESEA_WebApi/Controllers/LargescreenController.cs" @@ -0,0 +1,367 @@ +锘縰sing Microsoft.AspNetCore.Mvc; +using System.Collections.Generic; +using System.Linq; +using System; +using WIDESEA_Core.EFDbContext; +using WIDESEA_WMS.IRepositories; +using WIDESEA_WMS.Repositories; +using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime; + +namespace WIDESEA_WebApi.Controllers +{ + [Route("api/[controller]")] + [ApiController] + public class LargescreenController : Controller //澶у睆骞曟暟鎹� + { + #region 绗竴鏉垮潡缁熻鍥� + /// <summary> + /// 鏈堬紝鏃ュ嚭鍏ュ簱鏁伴噺缁熻 + /// </summary> + /// <returns></returns> + [HttpPost("Statistical_chart")] + public object Statistical_chart() + { + VOLContext volContext = new VOLContext(); + Idt_stationinfoRepository db = new dt_stationinfoRepository(volContext); + + string[] stationCodes = { "A", "B", "C", "D01" }; + var query = db.Find(a => a.stationCode.Contains("A") || a.stationCode.Contains("B") || a.stationCode.Contains("C") || a.stationCode.Contains("D01")).ToList(); + + + List<Tuple<string, int, string, int>> responseData = new List<Tuple<string, int, string, int>>(); // 鑾峰彇琚崰鐢ㄧ殑鏁版嵁 + string[] stationCodes2 = { "A01001", "A01002", "B", "C", "D01" }; + + var sum = query.Count(); + + foreach (string code in stationCodes2) + { + + int totalCount = query.Count(a => a.stationCode.Contains(code)); + + string percentage = ((double)totalCount / sum).ToString("P0"); + + int occupiedCount = query.Count(a => a.stationCode.Contains(code) && a.location_state == "Stroge"); + + string name = ""; + switch (code) + { + case "A01001": + name = "灏忔墭鐩樺彔鏀惧尯"; + break; + case "A01002": + name = "澶ф墭鐩樺彔鏀惧尯"; + break; + case "B": + name = "搴撳尯2"; + break; + case "C": + name = "搴撳尯3"; + break; + case "D01": + name = "搴撳尯4"; + break; + default: + break; + } + + responseData.Add(Tuple.Create(name, totalCount, percentage, occupiedCount)); + } + + + var data = new + { + responseData, + }; + return Ok(data); + } + + #endregion + + #region 绗竴鏉垮潡 + /// <summary> + /// 鏈堬紝鏃ュ嚭鍏ュ簱鏁伴噺缁熻 + /// </summary> + /// <returns></returns> + [HttpPost("Total_quantityndex")] + public object Total_quantityndex() + { + VOLContext volContext = new VOLContext(); + Idt_agvtask_htyRepository db = new dt_agvtask_htyRepository(volContext); + var startDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1); + var endDate = startDate.AddMonths(1).AddDays(-1); + var today = DateTime.Today; + + var data2 = db.Find(x => x.agv_createtime >= startDate && x.agv_createtime <= endDate); + + // 缁熻杩欐湀鐨勫叆搴撴暟閲� + var monthlyInventory = data2.Where(x => x.agv_tasktype == "TaskType_Inbound").Sum(x => x.agv_qty); + + // 缁熻杩欐湀鐨勫嚭搴撴暟閲� + var monthlyOutbound = data2.Where(x => x.agv_tasktype == "TaskType_Outbound").Sum(x => x.agv_qty); + + // 缁熻浠婃棩鍏ュ簱鏁伴噺 + var dayInventory = data2.Where(x => x.agv_tasktype == "TaskType_Inbound").Sum(x => x.agv_qty); + + // 缁熻浠婃棩鍑哄簱鏁伴噺 + var dayOutbound = data2.Where(x => x.agv_tasktype == "TaskType_Outbound").Sum(x => x.agv_qty); + + var data = new + { + monthlyInventory, + monthlyOutbound, + dayInventory, + dayOutbound + }; + return Ok(data); + } + + #endregion + + #region 绗簩鏉垮潡 + /// <summary> + /// 鍏蜂綋鍑哄叆搴撴暟鎹� + /// </summary> + /// <returns></returns> + [HttpPost("Outbound_inventory")] + public object Outbound_inventory() + { + + + VOLContext volContext = new VOLContext(); + Idt_agvtask_htyRepository db = new dt_agvtask_htyRepository(volContext); + Idt_stationinfoRepository db2 = new dt_stationinfoRepository(volContext); + var today = DateTime.Today; + var data2 = db.Find(x => x.agv_createtime >= today && x.agv_createtime < today.AddDays(1)).ToList(); + + + //浠婃棩寰呮娴嬪叆搴� + var dayTaskType_Inbound = data2.Where(x => x.agv_tasktype == "TaskType_Inbound").Sum(x => x.agv_qty); + //寰呮娴嬪嚭搴� + var dayTaskType_Outbound = data2.Where(x => x.agv_tasktype == "TaskType_Outbound").Sum(x => x.agv_qty); + //澶栧崗搴撳叆搴� + var dayTaskType_OutsourceInbound = data2.Where(x => x.agv_tasktype == "TaskType_OutsourceInbound").Sum(x => x.agv_qty); + //澶栧崗搴撳嚭搴� + var dayTaskType_OutsourceOutbound = data2.Where(x => x.agv_tasktype == "TaskType_OutsourceOutbound").Sum(x => x.agv_qty); + //寰呮绉诲簱澶栧崗 + var dayTaskType_OutsourceCarry = data2.Where(x => x.agv_tasktype == "TaskType_OutsourceCarry").Sum(x => x.agv_qty); + //绌烘墭鏁伴噺 + var dayTaskType_EmptyPallet = data2.Where(x => x.agv_tasktype == "TaskType_EmptyPallet").Sum(x => x.agv_qty); + + + var data3 = db2.Find(_ => true).ToList(); + + //搴撳尯鍥惧彿鏁伴噺,澶栧姞绌烘墭鏁伴噺 + var Number_wheels = data3.Where(_ => true) + .GroupBy(s => new + { + stationType = string.IsNullOrEmpty(s.stationType) ? s.tray_type : s.stationType, + s.tray_type + }).Select(g => new + { + stationType = g.Key.stationType, + totalQuantity = g.Sum(s => s.quantity), + tray_type = g.Key.tray_type + }).ToList(); + + //缁熻涓嬫枡鍙e悎鏍肩巼涓庝笉鍚堟牸鐜�1鍗曞厓 + var dayTaskType_Inbound2 = data2.Where(x => x.agv_tasktype == "TaskType_Inbound" && (x.agv_fromaddress == "X01001001" || x.agv_fromaddress == "X01001002") && x.agv_createtime >= today && x.agv_createtime < today.AddDays(1)).Sum(x => x.agv_qty); + //澶栧崗搴撳叆搴�1鍗曞厓 + var dayTaskType_OutsourceInbound2 = data2.Where(x => x.agv_tasktype == "TaskType_OutsourceInbound" && x.agv_fromaddress == "X01001003" && x.agv_createtime >= today && x.agv_createtime < today.AddDays(1)).Sum(x => x.agv_qty); + //缁熻涓嬫枡鍙e悎鏍肩巼涓庝笉鍚堟牸鐜�2鍗曞厓 + var dayTaskType_Inbound3 = data2.Where(x => x.agv_tasktype == "TaskType_Inbound" && (x.agv_fromaddress == "X02001001" || x.agv_fromaddress == "X02001002") && x.agv_createtime >= today && x.agv_createtime < today.AddDays(1)).Sum(x => x.agv_qty); + //澶栧崗搴撳叆搴�2鍗曞厓 + var dayTaskType_OutsourceInbound3 = data2.Where(x => x.agv_tasktype == "TaskType_OutsourceInbound" && x.agv_fromaddress == "X02001003" && x.agv_createtime >= today && x.agv_createtime < today.AddDays(1)).Sum(x => x.agv_qty); + + var sumkq = dayTaskType_Inbound2 + dayTaskType_OutsourceInbound2; + var sumkq2 = dayTaskType_Inbound3 + dayTaskType_OutsourceInbound3; + + var qualified1 = ((float)dayTaskType_Inbound2 / (float)sumkq).ToString("P0"); + + var qualified2 = ((float)dayTaskType_Inbound3 / (float)sumkq2).ToString("P0"); + + + //缁熻搴撳尯鍗犵敤鐧惧垎姣� + var sumkw = data3.Where(a => a.stationCode.Contains("B") || a.stationCode.Contains("C") || a.stationCode.Contains("D01")).Count(); //鑾峰彇搴撳尯搴撲綅 + var sumzy = data3.Where(a => (a.stationCode.Contains("B") || a.stationCode.Contains("C") || a.stationCode.Contains("D01")) && a.location_state == "Stroge").Count(); //鑾峰彇琚崰鐢ㄧ殑 + var areaper = ((double)sumzy / sumkw).ToString("P0"); + + + var data = new + { + dayTaskType_Inbound, + dayTaskType_Outbound, + dayTaskType_OutsourceInbound, + dayTaskType_OutsourceOutbound, + dayTaskType_OutsourceCarry, + dayTaskType_EmptyPallet, + qualified1, + qualified2, + areaper, + Number_wheels, + }; + return Ok(data); + } + #endregion + + #region 绗笁鏉垮潡 + /// <summary> + /// 灞曠ず搴撳尯鏁版嵁 + /// </summary> + /// <returns></returns> + [HttpPost("Warehouse_area")] + public object Warehouse_area() + { + + + VOLContext volContext = new VOLContext(); + Idt_stationinfoRepository db = new dt_stationinfoRepository(volContext); + string[] areas = { "2", "3", "4" }; + var data2 = db.Find(a => areas.Contains(a.area)).ToList(); + var dataList = new List<dynamic>(); + + foreach (string area in areas) + { + var data = data2.Where(x => x.area == area) + .GroupBy(x => new { x.area, x.line, x.stationType }) + .Select(x => new + { + Area = x.Key.area, + x.Key.line, + x.Key.stationType, + combined_heatNumber = string.Join(", ", x.Select(y => y.heatNumber).Distinct()) + }) + .Where(x => !string.IsNullOrEmpty(x.stationType) && !string.IsNullOrEmpty(x.combined_heatNumber)) + .OrderBy(x => x.Area) + .ThenBy(x => x.line) + .ToList(); + + dataList = dataList.Concat(data).ToList(); + } + return Ok(dataList); + } + #endregion + + #region 绗洓鏉垮潡 + /// <summary> + /// 15鏃ュ唴鐨勫嚭鍏ュ簱 + /// </summary> + /// <returns></returns> + [HttpPost("fifteenTotal_quantityndex")] + public object fifteenTotal_quantityndex() + { + VOLContext volContext = new VOLContext(); + Idt_agvtask_htyRepository db = new dt_agvtask_htyRepository(volContext); + var startDate = DateTime.Today.AddDays(-15); // 鑾峰彇褰撳墠鏃ユ湡涔嬪墠15澶╃殑鏃ユ湡 + var today = DateTime.Today; + var dateRange = Enumerable.Range(0, 15).Select(offset => today.AddDays(-offset)); // 鑾峰彇鏈�杩�15澶╃殑鏃ユ湡鑼冨洿 + + var data2 = db.Find(x => x.agv_createtime >= startDate && x.agv_createtime < today.AddDays(1)).ToList(); + + var result = dateRange.Reverse().Select(date => + { + // 缁熻褰撴棩鍏ュ簱鏁伴噺 + var dayInventory = data2.Where(x => x.agv_createtime >= date && x.agv_createtime < date.AddDays(1) && x.agv_tasktype == "TaskType_Inbound").Sum(x => x.agv_qty); + + // 缁熻褰撴棩鍑哄簱鏁伴噺 + var dayOutbound = data2.Where(x => x.agv_createtime >= date && x.agv_createtime < date.AddDays(1) && x.agv_tasktype == "TaskType_Outbound").Sum(x => x.agv_qty); + + return new + { + Date = date.ToString("MM-dd"), + Day_inventory = dayInventory, + Day_outbound = dayOutbound + }; + }); + + var data = new + { + Daily_statistics = result.ToList(), + }; + return Ok(data); + } + #endregion + + #region 绗簲鏉垮潡 + /// <summary> + /// 褰撳墠agv浠诲姟 + /// </summary> + /// <returns></returns> + [HttpPost("Current_agvtask")] + public object Current_agvtask() + { + VOLContext volContext = new VOLContext(); + Idt_agvtaskRepository db = new dt_agvtaskRepository(volContext); + var dataList = db.Find(_ => true).OrderByDescending(x => x.agv_createtime).ToList(); + + var data = dataList.Where(x => x.agv_taskstate != "闃熷垪" && x.agv_taskstate != "Queue").ToList(); + + if (data.Count < 10) + { + var additionalData = dataList.Where(x => x.agv_taskstate == "闃熷垪" || x.agv_taskstate == "Queue") + .Take(10 - data.Count) + .ToList(); + data.AddRange(additionalData); + } + foreach (var item in data) + { + switch (item.agv_tasktype) + { + case "TaskType_OutsourceCarry": + item.agv_tasktype = "寰呮绉诲簱澶栧崗"; + break; + case "TaskType_OutsourceOutbound": + item.agv_tasktype = "澶栧崗搴撳嚭搴�"; + break; + case "TaskType_EmptyPallet": + item.agv_tasktype = "绌烘墭浠诲姟"; + break; + case "TaskType_OutsourceInbound": + item.agv_tasktype = "澶栧崗搴撳叆搴�"; + break; + case "TaskType_Inbound": + item.agv_tasktype = "寰呮搴撳叆搴�"; + break; + case "TaskType_Outbound": + item.agv_tasktype = "寰呮搴撳嚭搴�"; + break; + case "TaskType_Carry": + item.agv_tasktype = "寰呮搴撳唴绉诲簱"; + break; + default: + return "鏈煡浠诲姟绫诲瀷"; + } + + switch (item.agv_taskstate) + { + case "Create": + item.agv_taskstate = "鏂板缓"; + break; + case "Complete": + item.agv_taskstate = "璧风偣宸插畬鎴�"; + break; + case "Complete1": + item.agv_taskstate = "缁堢偣宸插畬鎴�"; + break; + case "Executing1": + item.agv_taskstate = "缁堢偣鎵ц涓�"; + break; + case "Executing": + item.agv_taskstate = "璧风偣鎵ц涓�"; + break; + case "Queue": + item.agv_taskstate = "闃熷垪"; + break; + case "SendOut": + item.agv_taskstate = "宸蹭笅鍙�"; + break; + default: + return "鏈煡浠诲姟鐘舵��"; + } + + } + return Ok(data); + + } + #endregion + } +} -- Gitblit v1.9.3