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