分支自 SuZhouGuanHong/TaiYuanTaiZhong

huanghongfeng
2024-05-27 4ae62cd247a0d760a57601fc079e16f8d39e77f4
大屏后端
已添加1个文件
367 ■■■■■ 文件已修改
代码管理/WMS/WMS_Server/WIDESEA_WebApi/Controllers/LargescreenController.cs 367 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
´úÂë¹ÜÀí/WMS/WMS_Server/WIDESEA_WebApi/Controllers/LargescreenController.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,367 @@
using 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();
            //统计下料口合格率与不合格率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");
            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
    }
}