224 lines
12 KiB
C#
224 lines
12 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.ComponentModel.DataAnnotations;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
|
||
namespace DOAN.Model.MES.product
|
||
{
|
||
/// <summary>
|
||
/// 周生产计划表(存储汽车零部件每周生产计划,关联ERP订单与车间执行数据)
|
||
/// </summary>
|
||
[SugarTable("pro_weekly_plan")]
|
||
public class ProWeeklyPlan
|
||
{
|
||
/// <summary>
|
||
/// 主键ID,自增唯一标识
|
||
/// </summary>
|
||
[SugarColumn(ColumnDataType = "bigint", IsPrimaryKey = true, IsIdentity = true, ColumnDescription = "主键ID,自增唯一标识")]
|
||
public long Id { get; set; }
|
||
|
||
/// <summary>
|
||
/// 周计划编号,业务唯一标识(格式:WP+年份+月份+序号,如WP20250825001)
|
||
/// </summary>
|
||
[SugarColumn(ColumnDataType = "varchar(64)", IsNullable = false, ColumnDescription = "周计划编号,业务唯一标识(格式:WP+年份+月份+序号,如WP20250825001)")]
|
||
[Required(ErrorMessage = "周计划编号不能为空")]
|
||
public string PlanCode { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 计划年份(如2025),用于跨年度计划统计
|
||
/// </summary>
|
||
[SugarColumn(ColumnDataType = "int", IsNullable = false, ColumnDescription = "计划年份(如2025),用于跨年度计划统计")]
|
||
[Required(ErrorMessage = "计划年份不能为空")]
|
||
public int PlanYear { get; set; }
|
||
|
||
/// <summary>
|
||
/// 计划周数(1-53),遵循ISO周历标准,如34表示当年第34周
|
||
/// </summary>
|
||
[SugarColumn(ColumnDataType = "int", IsNullable = false, ColumnDescription = "计划周数(1-53),遵循ISO周历标准,如34表示当年第34周")]
|
||
[Required(ErrorMessage = "计划周数不能为空")]
|
||
public int PlanWeek { get; set; }
|
||
|
||
/// <summary>
|
||
/// 计划开始日期(固定为周一,如2025-08-25)
|
||
/// </summary>
|
||
[SugarColumn(ColumnDataType = "date", IsNullable = false, ColumnDescription = "计划开始日期(固定为周一,如2025-08-25)")]
|
||
[Required(ErrorMessage = "计划开始日期不能为空")]
|
||
public DateTime PlanStartDate { get; set; }
|
||
|
||
/// <summary>
|
||
/// 计划结束日期(固定为周日,如2025-08-31)
|
||
/// </summary>
|
||
[SugarColumn(ColumnDataType = "date", IsNullable = false, ColumnDescription = "计划结束日期(固定为周日,如2025-08-31)")]
|
||
[Required(ErrorMessage = "计划结束日期不能为空")]
|
||
public DateTime PlanEndDate { get; set; }
|
||
|
||
/// <summary>
|
||
/// 关联ERP生产订单号(如PO202508001),用于追溯订单源头
|
||
/// </summary>
|
||
[SugarColumn(ColumnDataType = "varchar(64)", IsNullable = false, ColumnDescription = "关联ERP生产订单号(如PO202508001),用于追溯订单源头")]
|
||
[Required(ErrorMessage = "关联ERP生产订单号不能为空")]
|
||
public string OrderCode { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 零部件编码(企业内部唯一编码,如P-1001-制动盘)
|
||
/// </summary>
|
||
[SugarColumn(ColumnDataType = "varchar(64)", IsNullable = false, ColumnDescription = "零部件编码(企业内部唯一编码,如P-1001-制动盘)")]
|
||
[Required(ErrorMessage = "零部件编码不能为空")]
|
||
public string ProductCode { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 零部件名称(如汽车制动盘总成)
|
||
/// </summary>
|
||
[SugarColumn(ColumnDataType = "varchar(128)", IsNullable = false, ColumnDescription = "零部件名称(如汽车制动盘总成)")]
|
||
[Required(ErrorMessage = "零部件名称不能为空")]
|
||
public string ProductName { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 规格型号(如适配车型:B70)
|
||
/// </summary>
|
||
[SugarColumn(ColumnDataType = "varchar(128)", IsNullable = true, DefaultValue = null, ColumnDescription = "规格型号(如适配车型:B70)")]
|
||
public string Specification { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 产品颜色(如高亮黑、珍珠白)
|
||
/// </summary>
|
||
[SugarColumn(ColumnDataType = "varchar(128)", IsNullable = true, DefaultValue = null, ColumnDescription = "产品颜色(如高亮黑、珍珠白)")]
|
||
public string Color { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 本周计划生产总数(单位:件)
|
||
/// </summary>
|
||
[SugarColumn(ColumnDataType = "int", IsNullable = false, ColumnDescription = "本周计划生产总数(单位:件)")]
|
||
[Required(ErrorMessage = "本周计划生产总数不能为空")]
|
||
public int PlanQty { get; set; }
|
||
|
||
/// <summary>
|
||
/// 累计已完成数量(实时同步自日执行表)
|
||
/// </summary>
|
||
[SugarColumn(ColumnDataType = "int", IsNullable = false, DefaultValue = 0, ColumnDescription = "累计已完成数量(实时同步自日执行表)")]
|
||
public int CompletedQty { get; set; } = 0;
|
||
|
||
/// <summary>
|
||
/// 剩余未完成数量(自动计算:plan_qty - completed_qty)
|
||
/// </summary>
|
||
[SugarColumn(ColumnDataType = "int", IsNullable = false, DefaultValue = 0, ColumnDescription = "剩余未完成数量(自动计算:plan_qty - completed_qty)")]
|
||
public int RemainingQty { get; set; } = 0;
|
||
|
||
/// <summary>
|
||
/// 累计报废/报损数量(含过程报废和最终检验报废)
|
||
/// </summary>
|
||
[SugarColumn(ColumnDataType = "int", IsNullable = false, DefaultValue = 0, ColumnDescription = "累计报废/报损数量(含过程报废和最终检验报废)")]
|
||
public int ScrapQty { get; set; } = 0;
|
||
|
||
/// <summary>
|
||
/// 生产车间编码(如SHGX01),关联车间基础数据表
|
||
/// </summary>
|
||
[SugarColumn(ColumnDataType = "varchar(64)", IsNullable = false, ColumnDescription = "生产车间编码(如SHGX01),关联车间基础数据表")]
|
||
[Required(ErrorMessage = "生产车间编码不能为空")]
|
||
public string WorkshopCode { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 生产车间名称(如总装车间A区)
|
||
/// </summary>
|
||
[SugarColumn(ColumnDataType = "varchar(64)", IsNullable = false, ColumnDescription = "生产车间名称(如总装车间A区)")]
|
||
[Required(ErrorMessage = "生产车间名称不能为空")]
|
||
public string WorkshopName { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 生产线编码(如LINE03),标识具体生产流水线
|
||
/// </summary>
|
||
[SugarColumn(ColumnDataType = "varchar(64)", IsNullable = false, ColumnDescription = "生产线编码(如LINE03),标识具体生产流水线")]
|
||
[Required(ErrorMessage = "生产线编码不能为空")]
|
||
public string LineCode { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 生产线名称(如制动盘装配线)
|
||
/// </summary>
|
||
[SugarColumn(ColumnDataType = "varchar(64)", IsNullable = false, ColumnDescription = "生产线名称(如制动盘装配线)")]
|
||
[Required(ErrorMessage = "生产线名称不能为空")]
|
||
public string LineName { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 计划组别编码(如GRP02),用于计划员分工管理
|
||
/// </summary>
|
||
[SugarColumn(ColumnDataType = "varchar(64)", IsNullable = false, ColumnDescription = "计划组别编码(如GRP02),用于计划员分工管理")]
|
||
[Required(ErrorMessage = "计划组别编码不能为空")]
|
||
public string GroupCode { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 计划组别名称(如底盘件计划组)
|
||
/// </summary>
|
||
[SugarColumn(ColumnDataType = "varchar(64)", IsNullable = false, ColumnDescription = "计划组别名称(如底盘件计划组)")]
|
||
[Required(ErrorMessage = "计划组别名称不能为空")]
|
||
public string GroupName { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 班次类型(1:白班;2:夜班;3:三班倒),标识生产班次模式
|
||
/// </summary>
|
||
[SugarColumn(ColumnDataType = "tinyint", IsNullable = false, ColumnDescription = "班次类型(1:白班;2:夜班;3:三班倒),标识生产班次模式")]
|
||
[Required(ErrorMessage = "班次类型不能为空")]
|
||
public byte ShiftType { get; set; }
|
||
|
||
/// <summary>
|
||
/// 计划状态(0:未开始;1:执行中;2:已完成;3:暂停;4:取消)
|
||
/// </summary>
|
||
[SugarColumn(ColumnDataType = "tinyint", IsNullable = false, DefaultValue = 0, ColumnDescription = "计划状态(0:未开始;1:执行中;2:已完成;3:暂停;4:取消)")]
|
||
[Required(ErrorMessage = "计划状态不能为空")]
|
||
public byte PlanStatus { get; set; } = 0;
|
||
|
||
/// <summary>
|
||
/// 生产优先级(1:最高;2:正常;3:最低),用于插单排程调整
|
||
/// </summary>
|
||
[SugarColumn(ColumnDataType = "tinyint", IsNullable = true, DefaultValue = 2, ColumnDescription = "生产优先级(1:最高;2:正常;3:最低),用于插单排程调整")]
|
||
public byte? Priority { get; set; } = 2;
|
||
|
||
/// <summary>
|
||
/// 计划执行排序号,决定同周内多计划的生产先后顺序
|
||
/// </summary>
|
||
[SugarColumn(ColumnDataType = "int", IsNullable = false, ColumnDescription = "计划执行排序号,决定同周内多计划的生产先后顺序")]
|
||
[Required(ErrorMessage = "计划执行排序号不能为空")]
|
||
public int Sort { get; set; }
|
||
|
||
/// <summary>
|
||
/// 物料齐套状态(0:未齐套;1:已齐套;2:部分齐套),影响计划可执行性
|
||
/// </summary>
|
||
[SugarColumn(ColumnDataType = "tinyint", IsNullable = true, DefaultValue = 0, ColumnDescription = "物料齐套状态(0:未齐套;1:已齐套;2:部分齐套),影响计划可执行性")]
|
||
public byte? MaterialReady { get; set; } = 0;
|
||
|
||
/// <summary>
|
||
/// 备注信息(如特殊工艺要求、主机厂交付节点提醒等)
|
||
/// </summary>
|
||
[SugarColumn(ColumnDataType = "text", IsNullable = true, ColumnDescription = "备注信息(如特殊工艺要求、主机厂交付节点提醒等)")]
|
||
public string? Remark { get; set; }
|
||
|
||
/// <summary>
|
||
/// 创建人(计划员工号,如EMP00123)
|
||
/// </summary>
|
||
[SugarColumn(ColumnDataType = "varchar(64)", IsNullable = false, ColumnDescription = "创建人(计划员工号,如EMP00123)")]
|
||
[Required(ErrorMessage = "创建人不能为空")]
|
||
public string CreatedBy { get; set; } = string.Empty;
|
||
|
||
/// <summary>
|
||
/// 计划创建时间
|
||
/// </summary>
|
||
[SugarColumn(ColumnDataType = "datetime", IsNullable = false, DefaultValue = "CURRENT_TIMESTAMP", ColumnDescription = "计划创建时间")]
|
||
[Required(ErrorMessage = "创建时间不能为空")]
|
||
public DateTime CreatedTime { get; set; } = DateTime.Now;
|
||
|
||
/// <summary>
|
||
/// 最后更新人(工号)
|
||
/// </summary>
|
||
[SugarColumn(ColumnDataType = "varchar(64)", IsNullable = true, ColumnDescription = "最后更新人(工号)")]
|
||
public string? UpdatedBy { get; set; }
|
||
|
||
/// <summary>
|
||
/// 最后更新时间(自动触发)
|
||
/// </summary>
|
||
[SugarColumn(ColumnDataType = "datetime", IsNullable = true, DefaultValue = "CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP", ColumnDescription = "最后更新时间(自动触发)")]
|
||
public DateTime? UpdatedTime { get; set; }
|
||
}
|
||
|
||
}
|