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