Asoka.Wang 0a2e2d9b18 123
2025-09-02 18:52:35 +08:00

446 lines
9.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using NPP.SmartSchedue.Api.Contracts.Core.Enums;
namespace NPP.SmartSchedue.Api.Contracts.Services.Time.Output;
/// <summary>
/// 不可用统计信息输出模型
/// 提供各种维度的统计数据
/// </summary>
public class UnavailabilityStatistics
{
/// <summary>
/// 员工ID
/// </summary>
public long PersonnelId { get; set; }
/// <summary>
/// 开始日期
/// </summary>
public DateTime StartDate { get; set; }
/// <summary>
/// 结束日期
/// </summary>
public DateTime EndDate { get; set; }
/// <summary>
/// 总天数
/// </summary>
public int TotalDays { get; set; }
/// <summary>
/// 总记录数
/// </summary>
public int TotalRecords { get; set; }
/// <summary>
/// 总可能时段数
/// </summary>
public int TotalPossibleSlots { get; set; }
/// <summary>
/// 员工信息
/// </summary>
public PersonnelInfo Personnel { get; set; }
/// <summary>
/// 统计时间范围
/// </summary>
public StatisticsDateRange DateRange { get; set; }
/// <summary>
/// 总体统计
/// </summary>
public OverallStatistics Overall { get; set; } = new();
/// <summary>
/// 按班次统计
/// </summary>
public List<ShiftStatistics> ShiftStats { get; set; } = new();
/// <summary>
/// 班次统计与ShiftStats相同用于兼容性
/// </summary>
public List<ShiftStatistics> ShiftStatistics { get; set; } = new();
/// <summary>
/// 按原因类型统计
/// </summary>
public List<ReasonTypeStatistics> ReasonTypeStats { get; set; } = new();
/// <summary>
/// 原因类型统计与ReasonTypeStats相同用于兼容性
/// </summary>
public List<ReasonTypeStatistics> ReasonTypeStatistics { get; set; } = new();
/// <summary>
/// 按分组统计
/// </summary>
public List<CategoryStatistics> CategoryStats { get; set; } = new();
/// <summary>
/// 分组统计与CategoryStats相同用于兼容性
/// </summary>
public List<CategoryStatistics> CategoryStatistics { get; set; } = new();
/// <summary>
/// 按月份统计
/// </summary>
public List<MonthlyStatistics> MonthlyStats { get; set; } = new();
/// <summary>
/// 按星期统计
/// </summary>
public List<WeekdayStatistics> WeekdayStats { get; set; } = new();
/// <summary>
/// 星期统计与WeekdayStats相同用于兼容性
/// </summary>
public List<WeekdayStatistics> WeekdayStatistics { get; set; } = new();
/// <summary>
/// 模板生成统计
/// </summary>
public TemplateStatistics TemplateStatistics { get; set; } = new();
/// <summary>
/// 月度趋势分析
/// </summary>
public List<MonthlyTrendItem> MonthlyTrend { get; set; } = new();
/// <summary>
/// 不可用率(百分比)
/// </summary>
public double UnavailableRate { get; set; }
}
/// <summary>
/// 统计时间范围
/// </summary>
public class StatisticsDateRange
{
/// <summary>
/// 开始日期
/// </summary>
public DateTime StartDate { get; set; }
/// <summary>
/// 结束日期
/// </summary>
public DateTime EndDate { get; set; }
/// <summary>
/// 时间范围显示
/// </summary>
public string Display { get; set; }
/// <summary>
/// 总天数
/// </summary>
public int TotalDays { get; set; }
}
/// <summary>
/// 总体统计
/// </summary>
public class OverallStatistics
{
/// <summary>
/// 总不可用次数
/// </summary>
public int TotalCount { get; set; }
/// <summary>
/// 不可用天数
/// </summary>
public int UnavailableDays { get; set; }
/// <summary>
/// 不可用率(百分比)
/// </summary>
public decimal UnavailabilityRate { get; set; }
/// <summary>
/// 模板生成数量
/// </summary>
public int TemplateGeneratedCount { get; set; }
/// <summary>
/// 手动创建数量
/// </summary>
public int ManualCreatedCount { get; set; }
/// <summary>
/// 平均每天不可用班次数
/// </summary>
public decimal AverageUnavailableShiftsPerDay { get; set; }
}
/// <summary>
/// 班次统计
/// </summary>
public class ShiftStatistics
{
/// <summary>
/// 班次ID
/// </summary>
public long ShiftId { get; set; }
/// <summary>
/// 班次名称
/// </summary>
public string ShiftName { get; set; }
/// <summary>
/// 班次时间范围
/// </summary>
public string TimeRange { get; set; }
/// <summary>
/// 不可用次数
/// </summary>
public int Count { get; set; }
/// <summary>
/// 占比(百分比)
/// </summary>
public decimal Percentage { get; set; }
/// <summary>
/// 排名
/// </summary>
public int Rank { get; set; }
}
/// <summary>
/// 原因类型统计
/// </summary>
public class ReasonTypeStatistics
{
/// <summary>
/// 原因类型
/// </summary>
public UnavailabilityReasonType ReasonType { get; set; }
/// <summary>
/// 原因类型名称
/// </summary>
public string ReasonTypeName { get; set; }
/// <summary>
/// 分组
/// </summary>
public UnavailabilityCategory Category { get; set; }
/// <summary>
/// 显示符号
/// </summary>
public string Symbol { get; set; }
/// <summary>
/// 颜色类
/// </summary>
public string ColorClass { get; set; }
/// <summary>
/// 不可用次数
/// </summary>
public int Count { get; set; }
/// <summary>
/// 占比(百分比)
/// </summary>
public decimal Percentage { get; set; }
/// <summary>
/// 影响天数
/// </summary>
public int AffectedDays { get; set; }
/// <summary>
/// 排名
/// </summary>
public int Rank { get; set; }
}
/// <summary>
/// 分组统计
/// </summary>
public class CategoryStatistics
{
/// <summary>
/// 分组类型
/// </summary>
public UnavailabilityCategory Category { get; set; }
/// <summary>
/// 分组名称
/// </summary>
public string CategoryName { get; set; }
/// <summary>
/// 不可用次数
/// </summary>
public int Count { get; set; }
/// <summary>
/// 占比(百分比)
/// </summary>
public decimal Percentage { get; set; }
/// <summary>
/// 影响天数
/// </summary>
public int AffectedDays { get; set; }
/// <summary>
/// 包含的原因类型列表
/// </summary>
public List<UnavailabilityReasonType> ReasonTypes { get; set; } = new();
}
/// <summary>
/// 月份统计
/// </summary>
public class MonthlyStatistics
{
/// <summary>
/// 年月
/// </summary>
public DateTime Month { get; set; }
/// <summary>
/// 月份显示
/// </summary>
public string MonthDisplay { get; set; }
/// <summary>
/// 不可用次数
/// </summary>
public int Count { get; set; }
/// <summary>
/// 不可用天数
/// </summary>
public int UnavailableDays { get; set; }
/// <summary>
/// 该月总天数
/// </summary>
public int TotalDays { get; set; }
/// <summary>
/// 不可用率
/// </summary>
public decimal UnavailabilityRate { get; set; }
}
/// <summary>
/// 星期统计
/// </summary>
public class WeekdayStatistics
{
/// <summary>
/// 星期几 (0=周日, 1=周一, ..., 6=周六)
/// </summary>
public int Weekday { get; set; }
/// <summary>
/// 星期几DayOfWeek枚举
/// </summary>
public DayOfWeek DayOfWeek { get; set; }
/// <summary>
/// 星期显示名称
/// </summary>
public string WeekdayName { get; set; }
/// <summary>
/// 星期名称(简短)
/// </summary>
public string DayName { get; set; }
/// <summary>
/// 不可用次数
/// </summary>
public int Count { get; set; }
/// <summary>
/// 占比(百分比)
/// </summary>
public decimal Percentage { get; set; }
/// <summary>
/// 涉及的日期数
/// </summary>
public int AffectedDates { get; set; }
}
/// <summary>
/// 模板生成统计
/// </summary>
public class TemplateStatistics
{
/// <summary>
/// 总模板记录数
/// </summary>
public int TotalTemplateRecords { get; set; }
/// <summary>
/// 模板生成率
/// </summary>
public decimal TemplateGeneratedRate { get; set; }
/// <summary>
/// 手动创建记录数
/// </summary>
public int ManualCreatedRecords { get; set; }
/// <summary>
/// 手动创建率
/// </summary>
public decimal ManualCreatedRate { get; set; }
}
/// <summary>
/// 月度趋势项目
/// </summary>
public class MonthlyTrendItem
{
/// <summary>
/// 年份
/// </summary>
public int Year { get; set; }
/// <summary>
/// 月份
/// </summary>
public int Month { get; set; }
/// <summary>
/// 月份显示
/// </summary>
public string MonthDisplay { get; set; }
/// <summary>
/// 不可用次数
/// </summary>
public int Count { get; set; }
/// <summary>
/// 不可用天数
/// </summary>
public int UnavailableDays { get; set; }
/// <summary>
/// 不可用率
/// </summary>
public decimal UnavailabilityRate { get; set; }
/// <summary>
/// 环比变化率
/// </summary>
public decimal? ChangeRate { get; set; }
}