xiazhengtongxue
2026-01-24 a647de5665411f706beddc5e0ff7b3a3daaca4fc
ÏîÄ¿´úÂë/WMS/WIDESEA_WMSServer/WIDESEA_TaskInfoService/Task_HtyService.cs
@@ -1,4 +1,6 @@
using WIDESEA_Core.BaseRepository;
using WIDESEA_Common.TaskEnum;
using WIDESEA_Core;
using WIDESEA_Core.BaseRepository;
using WIDESEA_Core.BaseServices;
using WIDESEA_ITaskInfoService;
using WIDESEA_Model.Models;
@@ -10,4 +12,198 @@
    public Task_HtyService(IRepository<Dt_Task_Hty> BaseDal) : base(BaseDal)
    {
    }
    public WebResponseContent GetInOutTypeStats()
    {
        // æŸ¥è¯¢æ‰€æœ‰ä»»åŠ¡æ•°æ®
        var allTasks = BaseDal.QueryData()
            .Select(x => new
            {
                TaskType = (TaskTypeEnum)x.TaskType,
                Roadway = x.Roadway,
                x.WarehouseId
            })
            .ToList();
        // å¦‚果没有数据,返回空列表
        if (allTasks == null || !allTasks.Any())
        {
            return WebResponseContent.Instance.OK("未找到任何任务数据", new List<object>());
        }
        // è®¡ç®—各仓库的任务类型分布
        var result = allTasks
            .GroupBy(x => x.Roadway == "1" || x.Roadway == "2" ? 1 : 2) // Roadway "1"和"2"属于WarehouseId=1,其他属于2
            .Select(g => new
            {
                WarehouseId = g.Key,
                Stats = g.Where(t => Enum.IsDefined(typeof(TaskTypeEnum), t.TaskType))
                        .GroupBy(t => t.TaskType)
                        .Select(typeGroup => new
                        {
                            Type = typeGroup.Key.GetDescription(),
                            Count = typeGroup.Count(),
                            Percentage = (int)(Math.Round((double)typeGroup.Count() / g.Count() * 100, 2))
                        })
                        .OrderByDescending(x => x.Count)
                        .ToList(),
                TotalCount = g.Count()
            })
            .ToList();
        return WebResponseContent.Instance.OK("成功", result);
    }
    public WebResponseContent GetWarehouseOperationStatistics()
    {
        /// <summary>
        /// åŽŸæ–™ä»“ï¼Œæ€»å‡ºå…¥åº“ä»»åŠ¡æ•°é‡ï¼Œä»Šæ—¥å…¥åº“ï¼Œä»Šæ—¥å‡ºåº“ï¼Œæˆå“ä»“ï¼Œæ€»å‡ºå…¥åº“æ•°é‡ï¼Œä»Šæ—¥å…¥åº“ï¼Œä»Šæ—¥å‡ºåº“ï¼Œ
        /// </summary>
        // èŽ·å–ä»Šå¤©çš„æ—¥æœŸï¼ˆä¸è€ƒè™‘æ—¶é—´éƒ¨åˆ†ï¼‰
        var today = DateTime.Today;
        var tomorrow = today.AddDays(1);
        // æŸ¥è¯¢æ‰€æœ‰ä»»åŠ¡æ•°æ®ï¼ŒåŒ…å«åˆ›å»ºæ—¶é—´
        var allTasks = BaseDal.QueryData()
            .Select(x => new
            {
                TaskType = (TaskTypeEnum)x.TaskType,
                Roadway = x.Roadway,
                x.WarehouseId,
                CreateTime = x.CreateDate
            })
            .ToList();
        // å¦‚果没有数据,返回默认值
        if (allTasks == null || !allTasks.Any())
        {
            var emptyResult = new
            {
                RawMaterialWarehouse = new
                {
                    TotalTasks = 0,
                    TodayInbound = 0,
                    TodayOutbound = 0
                },
                FinishedProductWarehouse = new
                {
                    TotalTasks = 0,
                    TodayInbound = 0,
                    TodayOutbound = 0
                },
                Summary = new
                {
                    TotalAllTasks = 0,
                    TotalInbound = 0,
                    TotalOutbound = 0
                }
            };
            return WebResponseContent.Instance.OK("未找到任何任务数据", emptyResult);
        }
        // å®šä¹‰å‡ºå…¥åº“任务类型
        var inboundTypes = new[] { TaskTypeEnum.Inbound };
        var outboundTypes = new[] { TaskTypeEnum.Outbound };
        // è¿‡æ»¤å‡ºæœ‰æ•ˆçš„任务数据
        var validTasks = allTasks.Where(t => Enum.IsDefined(typeof(TaskTypeEnum), t.TaskType)).ToList();
        // è®¡ç®—原料仓(WarehouseId = 1)的统计
        var rawMaterialTasks = validTasks.Where(t =>
            t.Roadway == "1" || t.Roadway == "2" || t.WarehouseId == 1).ToList();
        var rawMaterialStats = new
        {
            TotalTasks = rawMaterialTasks.Count,
            TodayInbound = rawMaterialTasks.Count(t =>
                inboundTypes.Contains(t.TaskType) &&
                t.CreateTime >= today && t.CreateTime < tomorrow),
            TodayOutbound = rawMaterialTasks.Count(t =>
                outboundTypes.Contains(t.TaskType) &&
                t.CreateTime >= today && t.CreateTime < tomorrow)
        };
        // è®¡ç®—成品仓(WarehouseId = 2)的统计
        var finishedProductTasks = validTasks.Where(t =>
            (t.Roadway != "1" && t.Roadway != "2") || t.WarehouseId == 2).ToList();
        var finishedProductStats = new
        {
            TotalTasks = finishedProductTasks.Count,
            TodayInbound = finishedProductTasks.Count(t =>
                inboundTypes.Contains(t.TaskType) &&
                t.CreateTime >= today && t.CreateTime < tomorrow),
            TodayOutbound = finishedProductTasks.Count(t =>
                outboundTypes.Contains(t.TaskType) &&
                t.CreateTime >= today && t.CreateTime < tomorrow)
        };
        // è®¡ç®—总的入库和出库数量(所有仓库,所有时间)
        var totalInbound = validTasks.Count(t => inboundTypes.Contains(t.TaskType));
        var totalOutbound = validTasks.Count(t => outboundTypes.Contains(t.TaskType));
        // æž„建返回结果
        var result = new
        {
            RawMaterialWarehouse = rawMaterialStats,
            FinishedProductWarehouse = finishedProductStats,
            Summary = new
            {
                TotalAllTasks = validTasks.Count,
                TotalInbound = totalInbound,       // æ€»å…±å…¥åº“数量
                TotalOutbound = totalOutbound      // æ€»å…±å‡ºåº“数量
            }
        };
        return WebResponseContent.Instance.OK("成功", result);
    }
    public WebResponseContent GetTodayInOutStats()
    {
        // èŽ·å–ä»Šå¤©å’Œ7天前的日期
        var today = DateTime.Now.Date;
        var sevenDaysAgo = today.AddDays(-6); // åŒ…含今天共7天
        // æŸ¥è¯¢7天内全天数据(0:00-24:00)
        var query = BaseDal.QueryData(x =>
            x.CreateDate >= sevenDaysAgo &&
            x.CreateDate < today.AddDays(1) // åŒ…含今天全天
        );
        var tasks = query.Select(x => new
        {
            TaskType = (TaskTypeEnum)x.TaskType,
            CreateDate = x.CreateDate
        }).ToList();
        if (!tasks.Any())
        {
            return WebResponseContent.Instance.OK("未找到任何任务数据", new List<object>());
        }
        // ç»Ÿè®¡æ¯å¤©å‡ºå…¥åº“数量
        var dailyStats = new List<object>();
        for (int i = 0; i < 7; i++)
        {
            var currentDate = sevenDaysAgo.AddDays(i);
            var nextDate = currentDate.AddDays(1); // ä¸‹ä¸€å¤©çš„0:00
            var dayTasks = tasks.Where(t =>
                t.CreateDate >= currentDate &&
                t.CreateDate < nextDate
            ).ToList();
            var stats = new
            {
                Date = currentDate.ToString("yyyy-MM-dd"),
                InboundCount = dayTasks.Count(t => t.TaskType == TaskTypeEnum.Inbound),
                OutboundCount = dayTasks.Count(t => t.TaskType == TaskTypeEnum.Outbound),
                TotalCount = dayTasks.Count
            };
            dailyStats.Add(stats);
        }
        return WebResponseContent.Instance.OK("成功", dailyStats);
    }
}