using Microsoft.AspNetCore.Mvc; using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime; using OfficeOpenXml.FormulaParsing.Excel.Functions.Numeric; using System; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; using System.Xml.Linq; using WIDESEA_Core.EFDbContext; using WIDESEA_Entity.DomainModels; using WIDESEA_WMS.IRepositories; using WIDESEA_WMS.Repositories; 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 data3 = db.Find(x => x.agv_createtime >= today && x.agv_createtime < today.AddDays(1)).ToList(); // ç»Ÿè®¡è¿™æœˆçš„å…¥åº“æ•°é‡ 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 = data3.Where(x => x.agv_tasktype == "TaskType_Inbound").Sum(x => x.agv_qty); // ç»Ÿè®¡ä»Šæ—¥å‡ºåº“æ•°é‡ var dayOutbound = data3.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() { #region 使用ä¸çš„内容 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 startDate = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1); var endDate = startDate.AddMonths(1).AddDays(-1); var data4 = db.Find(x => x.agv_createtime >= startDate && x.agv_createtime <= endDate); // ç»Ÿè®¡è¿™æœˆçš„å…¥åº“æ•°é‡ var monthlyInventory = data4.Where(x => x.agv_tasktype == "TaskType_Inbound").Sum(x => x.agv_qty); // ç»Ÿè®¡è¿™æœˆçš„å‡ºåº“æ•°é‡ var monthlyOutbound = data4.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 data3 = db2.Find(_ => true).Where(x => x.stationCode.Contains("A") || x.stationCode.Contains("B") || x.stationCode.Contains("C") || x.stationCode.Contains("D01")).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(); #endregion #region 未使用的内容 //统计下料å£åˆæ ¼çŽ‡ä¸Žä¸åˆæ ¼çއ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); //统计下料å£åˆæ ¼çŽ‡ä¸Žä¸åˆæ ¼çއ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"); #endregion var data = new { dayTaskType_Inbound, dayTaskType_Outbound, dayTaskType_OutsourceInbound, dayTaskType_OutsourceOutbound, dayTaskType_OutsourceCarry, dayTaskType_EmptyPallet, qualified1, qualified2, areaper, Number_wheels, monthlyInventory, monthlyOutbound, dayInventory, dayOutbound, }; 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> /// 5日内的出入库 /// </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(-5); // 获å–当剿—¥æœŸä¹‹å‰15天的日期 var today = DateTime.Today; var dateRange = Enumerable.Range(0, 5).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_tasktype != "Queue").Take(15).ToList(); if (data.Count <= 15) { data = dataList.Take(15).ToList(); } 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 #region 第七æ¿å—(新增内容) /// <summary> /// å·¥å•ä¿¡æ¯VV_Workinfo /// </summary> /// <returns></returns> /*[HttpPost("Workinfo_information")] public object Workinfo_information() { }*/ #endregion } }