分支自 SuZhouGuanHong/TaiYuanTaiZhong

dengjunjie
2024-07-05 ddab693f389b648157c8b48c7fcbdefc92561dd2
´úÂë¹ÜÀí/WMS/WMS_Server/WIDESEA_WebApi/Controllers/LargescreenController.cs
@@ -1,19 +1,26 @@
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;
using System.Security.Cryptography;
using System.Xml.Linq;
using WIDESEA_Comm;
using WIDESEA_Common;
using WIDESEA_Core.EFDbContext;
using WIDESEA_Entity.DomainModels;
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  ç¬¬ä¸€æ¿å—统计图
        #region  ç¬¬ä¸€æ¿å—统计图,未使用
        /// <summary>
        /// æœˆï¼Œæ—¥å‡ºå…¥åº“数量统计
        /// </summary>
@@ -91,19 +98,21 @@
            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 data2 = db.Find(x => x.agv_finishedtime >= startDate && x.agv_finishedtime <= endDate);
            var data3 = db.Find(x => x.agv_finishedtime >= today && x.agv_finishedtime < today.AddDays(1)).ToList();
            // ç»Ÿè®¡è¿™æœˆçš„入库数量
            var monthlyInventory = data2.Where(x => x.agv_tasktype == "TaskType_Inbound").Sum(x => x.agv_qty);
            var monthlyInventory = data2.Where(x => x.agv_tasktype == AGVTaskTypeEnum.TaskType_Inbound.ToString()).Sum(x => x.agv_qty);
            // ç»Ÿè®¡è¿™æœˆçš„出库数量
            var monthlyOutbound = data2.Where(x => x.agv_tasktype == "TaskType_Outbound").Sum(x => x.agv_qty);
            var monthlyOutbound = data2.Where(x => x.agv_tasktype == AGVTaskTypeEnum.TaskType_Outbound.ToString() || x.agv_tasktype == AGVTaskTypeEnum.TaskType_OutsourceCarry.ToString()).Sum(x => x.agv_qty);
            // ç»Ÿè®¡ä»Šæ—¥å…¥åº“数量
            var dayInventory = data2.Where(x => x.agv_tasktype == "TaskType_Inbound").Sum(x => x.agv_qty);
            var dayInventory = data3.Where(x => x.agv_tasktype == AGVTaskTypeEnum.TaskType_Inbound.ToString()).Sum(x => x.agv_qty);
            // ç»Ÿè®¡ä»Šæ—¥å‡ºåº“数量
            var dayOutbound = data2.Where(x => x.agv_tasktype == "TaskType_Outbound").Sum(x => x.agv_qty);
            var dayOutbound = data3.Where(x => x.agv_tasktype == AGVTaskTypeEnum.TaskType_Outbound.ToString() || x.agv_tasktype == AGVTaskTypeEnum.TaskType_OutsourceCarry.ToString()).Sum(x => x.agv_qty);
            var data = new
            {
@@ -125,8 +134,7 @@
        [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);
@@ -135,23 +143,37 @@
            //今日待检测入库
            var dayTaskType_Inbound = data2.Where(x => x.agv_tasktype == "TaskType_Inbound").Sum(x => x.agv_qty);
            var dayTaskType_Inbound = data2.Where(x => x.agv_tasktype == AGVTaskTypeEnum.TaskType_Inbound.ToString()).Sum(x => x.agv_qty);
            //待检测出库
            var dayTaskType_Outbound = data2.Where(x => x.agv_tasktype == "TaskType_Outbound").Sum(x => x.agv_qty);
            var dayTaskType_Outbound = data2.Where(x => x.agv_tasktype == AGVTaskTypeEnum.TaskType_Outbound.ToString()).Sum(x => x.agv_qty);
            //外协库入库
            var dayTaskType_OutsourceInbound = data2.Where(x => x.agv_tasktype == "TaskType_OutsourceInbound").Sum(x => x.agv_qty);
            var dayTaskType_OutsourceInbound = data2.Where(x => x.agv_tasktype == AGVTaskTypeEnum.TaskType_OutsourceInbound.ToString()).Sum(x => x.agv_qty);
            //外协库出库
            var dayTaskType_OutsourceOutbound = data2.Where(x => x.agv_tasktype == "TaskType_OutsourceOutbound").Sum(x => x.agv_qty);
            var dayTaskType_OutsourceOutbound = data2.Where(x => x.agv_tasktype == AGVTaskTypeEnum.TaskType_OutsourceOutbound.ToString()).Sum(x => x.agv_qty);
            //待检移库外协
            var dayTaskType_OutsourceCarry = data2.Where(x => x.agv_tasktype == "TaskType_OutsourceCarry").Sum(x => x.agv_qty);
            var dayTaskType_OutsourceCarry = data2.Where(x => x.agv_tasktype == AGVTaskTypeEnum.TaskType_OutsourceCarry.ToString()).Sum(x => x.agv_qty);
            //空托数量
            var dayTaskType_EmptyPallet = data2.Where(x => x.agv_tasktype == "TaskType_EmptyPallet").Sum(x => x.agv_qty);
            var dayTaskType_EmptyPallet = data2.Where(x => x.agv_tasktype == AGVTaskTypeEnum.TaskType_EmptyPallet.ToString()).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 == AGVTaskTypeEnum.TaskType_Inbound.ToString()).Sum(x => x.agv_qty);
            // ç»Ÿè®¡è¿™æœˆçš„出库数量
            var monthlyOutbound = data4.Where(x => x.agv_tasktype == AGVTaskTypeEnum.TaskType_Outbound.ToString() || x.agv_tasktype == AGVTaskTypeEnum.TaskType_OutsourceCarry.ToString()).Sum(x => x.agv_qty);
            // ç»Ÿè®¡ä»Šæ—¥å…¥åº“数量
            var dayInventory = data2.Where(x => x.agv_tasktype == AGVTaskTypeEnum.TaskType_Inbound.ToString()).Sum(x => x.agv_qty);
            // ç»Ÿè®¡ä»Šæ—¥å‡ºåº“数量
            var dayOutbound = data2.Where(x => x.agv_tasktype == AGVTaskTypeEnum.TaskType_Outbound.ToString() || x.agv_tasktype == AGVTaskTypeEnum.TaskType_OutsourceCarry.ToString()).Sum(x => x.agv_qty);
            var data3 = db2.Find(_ => true).ToList();
            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)
            var Number_wheels1 = data3.Where(_ => true)
             .GroupBy(s => new
             {
                 stationType = string.IsNullOrEmpty(s.stationType) ? s.tray_type : s.stationType,
@@ -163,6 +185,11 @@
                 tray_type = g.Key.tray_type
             }).ToList();
            var Number_wheels = Number_wheels1.Where(x => x.stationType != TrayTypeEnum.LargeTray.ToString() && x.stationType != TrayTypeEnum.SmallTray.ToString()).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单元
@@ -184,6 +211,10 @@
            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
@@ -198,6 +229,10 @@
                qualified2,
                areaper,
                Number_wheels,
                monthlyInventory,
                monthlyOutbound,
                dayInventory,
                dayOutbound,
            };
            return Ok(data);
        }
@@ -211,12 +246,10 @@
        [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 data2 = db.Find(a => areas.Contains(a.area)).OrderBy(x => x.stationCode).ToList();
            var dataList = new List<dynamic>();
            foreach (string area in areas)
@@ -228,12 +261,26 @@
                    Area = x.Key.area,
                    x.Key.line,
                    x.Key.stationType,
                    combined_heatNumber = string.Join(", ", x.Select(y => y.heatNumber).Distinct())
                    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();
                .OrderBy(x => x.line)
                //.ThenBy(x => x.line)
                .GroupBy(x => x.line) // ä½¿ç”¨ GroupBy æŒ‰ Line å­—段分组
                .Select(group =>
                {
                    // æ‰¾åˆ°æ¯ä¸ªåˆ†ç»„中第一个 stationType ä¸ä¸ºç©ºçš„元素
                    var firstWithStationType = group.FirstOrDefault(x => !string.IsNullOrEmpty(x.stationType));
                    if (firstWithStationType != null)
                    {
                        return firstWithStationType;
                    }
                    else
                    {
                        // å¦‚果分组中都是 stationType ä¸ºç©ºï¼Œåˆ™è¿”回第一个元素(此时即为 stationType ä¸ºç©ºçš„)
                        return group.First();
                    }
                })
                    .ToList();
                dataList = dataList.Concat(data).ToList();
            }
@@ -243,7 +290,7 @@
        #region  ç¬¬å››æ¿å—
        /// <summary>
        /// 15日内的出入库
        /// 5日内的出入库
        /// </summary>
        /// <returns></returns>
        [HttpPost("fifteenTotal_quantityndex")]
@@ -251,19 +298,19 @@
        {
            VOLContext volContext = new VOLContext();
            Idt_agvtask_htyRepository db = new dt_agvtask_htyRepository(volContext);
            var startDate = DateTime.Today.AddDays(-15); // èŽ·å–å½“å‰æ—¥æœŸä¹‹å‰15天的日期
            var startDate = DateTime.Today.AddDays(-5); // èŽ·å–å½“å‰æ—¥æœŸä¹‹å‰15天的日期
            var today = DateTime.Today;
            var dateRange = Enumerable.Range(0, 15).Select(offset => today.AddDays(-offset)); // èŽ·å–æœ€è¿‘15天的日期范围
            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 data2 = db.Find(x => x.agv_finishedtime >= startDate && x.agv_finishedtime < 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 dayInventory = data2.Where(x => x.agv_finishedtime >= date && x.agv_finishedtime < date.AddDays(1) && x.agv_tasktype == AGVTaskTypeEnum.TaskType_Inbound.ToString()).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);
                var dayOutbound = data2.Where(x => x.agv_finishedtime >= date && x.agv_finishedtime < date.AddDays(1) && x.agv_tasktype == AGVTaskTypeEnum.TaskType_Outbound.ToString() || x.agv_tasktype == AGVTaskTypeEnum.TaskType_OutsourceCarry.ToString()).Sum(x => x.agv_qty);
                return new
                {
@@ -281,7 +328,7 @@
        }
        #endregion
        #region  ç¬¬äº”板块
        #region  ç¬¬å…­æ¿å—
        /// <summary>
        /// å½“前agv任务
        /// </summary>
@@ -293,14 +340,10 @@
            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" && x.agv_taskstate != "任务暂停" && x.agv_taskstate != "Pause").ToList();
            if (data.Count < 10)
            var data = dataList.Where(x => x.agv_taskstate != "队列" && x.agv_taskstate != "Queue" && x.agv_taskstate != "暂停" && x.agv_taskstate != "Pause").ToList();
            if (data.Count <= 15)
            {
                var additionalData = dataList.Where(x => x.agv_taskstate == "队列" || x.agv_taskstate == "Queue")
                                              .Take(10 - data.Count)
                                              .ToList();
                data.AddRange(additionalData);
                data = dataList.Take(15).ToList();
            }
            foreach (var item in data)
            {
@@ -354,6 +397,9 @@
                    case "SendOut":
                        item.agv_taskstate = "已下发";
                        break;
                    case "Pause":
                        item.agv_taskstate = "暂停";
                        break;
                    default:
                        return "未知任务状态";
                }
@@ -363,5 +409,17 @@
        }
        #endregion
        #region  ç¬¬ä¸ƒæ¿å—(新增内容)
        /// <summary>
        /// å·¥å•信息VV_Workinfo
        /// </summary>
        /// <returns></returns>
        /*[HttpPost("Workinfo_information")]
        public object Workinfo_information()
        {
        }*/
        #endregion
    }
}