完善基础数据

This commit is contained in:
yanpeng200212
2026-10-08 15:44:07 +08:00
parent 8430ba0452
commit 2ffb83830c
95 changed files with 37759 additions and 5 deletions
@@ -0,0 +1,77 @@
using FreeSql.DataAnnotations;
using F9WebAiTest.Domain.Enums.SYS.Gongyingshangs;
using F9WebAiTest.Domain.Events.SYS.Gongyingshangs;
namespace F9WebAiTest.Domain.Entities.SYS.Gongyingshangs;
/// <summary>
/// 往来单位(供应商 / 客户):按业务类型(干茧/配件/副产品/生丝)与分组(供应商/客户)维护。
/// </summary>
[Table(Name = "sys_gongyingshang")]
public class Gongyingshang : AggregateRoot
{
/// <summary>业务类型</summary>
[Column(Name = "businesstype")]
public Gys_Type_Enum Type { get; private set; }
/// <summary>往来单位名称</summary>
[Column(Name = "name")]
public string Name { get; private set; }
/// <summary>电话</summary>
[Column(Name = "phone")]
public string Phone { get; private set; }
/// <summary>联系人</summary>
[Column(Name = "lianxiren")]
public string Lianxiren { get; private set; }
/// <summary>地址</summary>
[Column(Name = "address")]
public string Address { get; private set; }
/// <summary>拼音简码</summary>
[Column(Name = "pinyin")]
public string Pinyin { get; private set; }
/// <summary>分组(供应商/客户)</summary>
[Column(Name = "businessgroup")]
public Gys_Group_Enum BusinessGroup { get; private set; }
/// <summary>销售类型(内销/外销;历史数据中的 0 表示未设置)</summary>
[Column(Name = "saletype")]
public Gys_SaleType_Enum SaleType { get; private set; }
public Gongyingshang() { }
public Gongyingshang(long id, Gys_Type_Enum type, string name, string phone, string lianxiren, string address,
string pinyin, Gys_Group_Enum businessGroup, Gys_SaleType_Enum saleType)
{
Id = id;
Type = type;
Name = name;
Phone = phone;
Lianxiren = lianxiren;
Address = address;
Pinyin = pinyin;
BusinessGroup = businessGroup;
SaleType = saleType;
AddDomainEvent(new Gongyingshang_ChangedDomainEvent(Id));
}
public void Update(Gys_Type_Enum type, string name, string phone, string lianxiren, string address,
string pinyin, Gys_Group_Enum businessGroup, Gys_SaleType_Enum saleType)
{
Type = type;
Name = name;
Phone = phone;
Lianxiren = lianxiren;
Address = address;
Pinyin = pinyin;
BusinessGroup = businessGroup;
SaleType = saleType;
AddDomainEvent(new Gongyingshang_ChangedDomainEvent(Id));
}
public void Deleted() => AddDomainEvent(new Gongyingshang_ChangedDomainEvent(Id));
}
@@ -0,0 +1,70 @@
using FreeSql.DataAnnotations;
using F9WebAiTest.Domain.Events.SYS.Registries;
namespace F9WebAiTest.Domain.Entities.SYS.Registries;
/// <summary>
/// 注册表(参数配置):按"命名空间 + 键名"存一条配置值,供各业务模块读取(如基础数据\工种 → 业务类型)。
/// 命名空间用反斜杠分层,如 "基础数据\工种"。
/// </summary>
[Table(Name = "sys_registry")]
public class Registry : AggregateRoot
{
/// <summary>命名空间(分类,用 \ 分层)</summary>
[Column(Name = "category")]
public string Category { get; private set; }
/// <summary>键名</summary>
[Column(Name = "key_name")]
public string KeyName { get; private set; }
/// <summary>值(数组类型存逗号分隔字符串,json 类型存 JSON 文本)</summary>
[Column(Name = "value")]
public string Value { get; private set; }
/// <summary>数据类型:string / int / decimal / bool / json / array</summary>
[Column(Name = "data_type")]
public string DataType { get; private set; }
/// <summary>描述</summary>
[Column(Name = "description")]
public string Description { get; private set; }
/// <summary>是否启用</summary>
[Column(Name = "is_active")]
public bool IsActive { get; private set; }
public Registry() { }
public Registry(long id, string category, string keyName, string value, string dataType, string description, bool isActive)
{
Id = id;
Category = category;
KeyName = keyName;
Value = value;
DataType = dataType;
Description = description;
IsActive = isActive;
AddDomainEvent(new Registry_ChangedDomainEvent(Id));
}
public void Update(string category, string keyName, string value, string dataType, string description, bool isActive)
{
Category = category;
KeyName = keyName;
Value = value;
DataType = dataType;
Description = description;
IsActive = isActive;
AddDomainEvent(new Registry_ChangedDomainEvent(Id));
}
/// <summary>只修改值(对应"设置注册表值"场景)</summary>
public void SetValue(string value)
{
Value = value;
AddDomainEvent(new Registry_ChangedDomainEvent(Id));
}
public void Deleted() => AddDomainEvent(new Registry_ChangedDomainEvent(Id));
}
@@ -0,0 +1,68 @@
using FreeSql.DataAnnotations;
using F9WebAiTest.Domain.Events.SYS.WorkTypes;
namespace F9WebAiTest.Domain.Entities.SYS.WorkTypes;
/// <summary>
/// 工种(基础数据):工种名称 / 业务类型 / 生产成本分类。
/// 与部门、角色是多对多关系,关联记录单独成表(sys_work_type_departments、sys_work_type_roles)。
/// </summary>
[Table(Name = "sys_work_types")]
public class WorkType : AggregateRoot
{
/// <summary>工种名称</summary>
[Column(Name = "work_name")]
public string WorkName { get; private set; }
/// <summary>排序</summary>
[Column(Name = "sort_order")]
public int SortOrder { get; private set; }
/// <summary>业务类型(生产 / 辅助,取自注册表配置)</summary>
[Column(Name = "biz_type")]
public string BizType { get; private set; }
/// <summary>生产成本分类(无 / 管理,取自注册表配置)</summary>
[Column(Name = "sccb_fenlei")]
public string SccbFenlei { get; private set; }
/// <summary>是否启用</summary>
[Column(Name = "is_active")]
public bool IsActive { get; private set; }
public WorkType() { }
public WorkType(long id, string workName, int sortOrder, string bizType, string sccbFenlei)
{
Id = id;
WorkName = workName;
SortOrder = sortOrder;
BizType = bizType;
SccbFenlei = sccbFenlei;
IsActive = true;
AddDomainEvent(new WorkType_ChangedDomainEvent(Id));
}
public void Update(string workName, int sortOrder, string bizType, string sccbFenlei)
{
WorkName = workName;
SortOrder = sortOrder;
BizType = bizType;
SccbFenlei = sccbFenlei;
AddDomainEvent(new WorkType_ChangedDomainEvent(Id));
}
public void Activate()
{
IsActive = true;
AddDomainEvent(new WorkType_ChangedDomainEvent(Id));
}
public void Deactivate()
{
IsActive = false;
AddDomainEvent(new WorkType_ChangedDomainEvent(Id));
}
public void Deleted() => AddDomainEvent(new WorkType_ChangedDomainEvent(Id));
}
@@ -0,0 +1,27 @@
using FreeSql.DataAnnotations;
namespace F9WebAiTest.Domain.Entities.SYS.WorkTypes;
/// <summary>工种-部门关联:某工种可属于多个部门(车间/科室等)。</summary>
[Table(Name = "sys_work_type_departments")]
public class WorkTypeDepartment : BusinessEntity
{
[Column(Name = "work_type_id")]
public long WorkTypeId { get; private set; }
[Column(Name = "department_id")]
public long DepartmentId { get; private set; }
[Column(Name = "assigned_at")]
public DateTime AssignedAt { get; private set; }
public WorkTypeDepartment() { }
public WorkTypeDepartment(long id, long workTypeId, long departmentId, DateTime? assignedAt = null)
{
Id = id;
WorkTypeId = workTypeId;
DepartmentId = departmentId;
AssignedAt = assignedAt ?? DateTime.Now;
}
}
@@ -0,0 +1,27 @@
using FreeSql.DataAnnotations;
namespace F9WebAiTest.Domain.Entities.SYS.WorkTypes;
/// <summary>工种-角色关联:某工种可关联多个角色(用于按角色授权工种)。</summary>
[Table(Name = "sys_work_type_roles")]
public class WorkTypeRole : BusinessEntity
{
[Column(Name = "work_type_id")]
public long WorkTypeId { get; private set; }
[Column(Name = "role_id")]
public long RoleId { get; private set; }
[Column(Name = "assigned_at")]
public DateTime AssignedAt { get; private set; }
public WorkTypeRole() { }
public WorkTypeRole(long id, long workTypeId, long roleId, DateTime? assignedAt = null)
{
Id = id;
WorkTypeId = workTypeId;
RoleId = roleId;
AssignedAt = assignedAt ?? DateTime.Now;
}
}
@@ -0,0 +1,70 @@
using FreeSql.DataAnnotations;
using F9WebAiTest.Domain.Enums.SYS.Departments;
using F9WebAiTest.Domain.Enums.SYS.WuziMulus;
using F9WebAiTest.Domain.Events.SYS.WuziMulus;
namespace F9WebAiTest.Domain.Entities.SYS.WuziMulus;
/// <summary>
/// 物资分组:物资目录的分类树(如 01 干茧、04 副产品、0401 副产品-副产车间…),编号按父级编号 + 2 位序号自动生成。
/// </summary>
[Table(Name = "sys_wuzi_group")]
public class WuziGroup : AggregateRoot
{
/// <summary>业务类型(原料/中间品/生丝/副产品/五金)</summary>
[Column(Name = "businesstype")]
public WuziBusiness_Type_Enum BusinessType { get; private set; }
/// <summary>归属部门职责类型</summary>
[Column(Name = "departmenttype")]
public Department_DutyType_Enum DepartmentType { get; private set; }
/// <summary>编号(如 01、0101)</summary>
[Column(Name = "code")]
public string Code { get; private set; }
/// <summary>名称</summary>
[Column(Name = "name")]
public string Name { get; private set; }
/// <summary>父级 Id(0 = 一级分类)</summary>
[Column(Name = "parentid")]
public long ParentId { get; private set; }
/// <summary>顺序号</summary>
[Column(Name = "sortorder")]
public int SortOrder { get; private set; }
/// <summary>描述</summary>
[Column(Name = "description")]
public string Description { get; private set; }
public WuziGroup() { }
public WuziGroup(long id, WuziBusiness_Type_Enum businessType, Department_DutyType_Enum departmentType,
string code, string name, long parentId, int sortOrder, string description)
{
Id = id;
BusinessType = businessType;
DepartmentType = departmentType;
Code = code;
Name = name;
ParentId = parentId;
SortOrder = sortOrder;
Description = description;
AddDomainEvent(new WuziGroup_ChangedDomainEvent(Id));
}
public void Update(WuziBusiness_Type_Enum businessType, Department_DutyType_Enum departmentType,
string name, int sortOrder, string description)
{
BusinessType = businessType;
DepartmentType = departmentType;
Name = name;
SortOrder = sortOrder;
Description = description;
AddDomainEvent(new WuziGroup_ChangedDomainEvent(Id));
}
public void Deleted() => AddDomainEvent(new WuziGroup_ChangedDomainEvent(Id));
}
@@ -0,0 +1,93 @@
using FreeSql.DataAnnotations;
using F9WebAiTest.Domain.Events.SYS.WuziMulus;
namespace F9WebAiTest.Domain.Entities.SYS.WuziMulus;
/// <summary>
/// 物资目录:具体物资(如 0101 优茧、0102 普茧),编号按所属分组编号 + 2 位序号自动生成。
/// </summary>
[Table(Name = "sys_wuzi_mulu")]
public class WuziMulu : AggregateRoot
{
/// <summary>所属物资分组 Id</summary>
[Column(Name = "groupid")]
public long GroupId { get; private set; }
/// <summary>名称</summary>
[Column(Name = "name")]
public string Name { get; private set; }
/// <summary>编号(如 0101)</summary>
[Column(Name = "code")]
public string Code { get; private set; }
/// <summary>单位</summary>
[Column(Name = "unit")]
public string Unit { get; private set; }
/// <summary>规格</summary>
[Column(Name = "guige")]
public string Guige { get; private set; }
/// <summary>型号</summary>
[Column(Name = "xinghao")]
public string Xinghao { get; private set; }
/// <summary>拼音码</summary>
[Column(Name = "pinyinname")]
public string PinyinName { get; private set; }
/// <summary>库存预警数量</summary>
[Column(Name = "kucunyujing")]
public decimal Kucunyujing { get; private set; }
/// <summary>顺序号</summary>
[Column(Name = "sortorder")]
public int SortOrder { get; private set; }
/// <summary>是否启用预警</summary>
[Column(Name = "is_yujing")]
public bool IsYujing { get; private set; }
/// <summary>销售税率</summary>
[Column(Name = "salerate")]
public decimal SaleRate { get; private set; }
public WuziMulu() { }
public WuziMulu(long id, long groupId, string name, string code, string unit, string guige, string xinghao,
string pinyinName, decimal kucunyujing, int sortOrder, bool isYujing, decimal saleRate)
{
Id = id;
GroupId = groupId;
Name = name;
Code = code;
Unit = unit;
Guige = guige;
Xinghao = xinghao;
PinyinName = pinyinName;
Kucunyujing = kucunyujing;
SortOrder = sortOrder;
IsYujing = isYujing;
SaleRate = saleRate;
AddDomainEvent(new WuziMulu_ChangedDomainEvent(Id));
}
public void Update(long groupId, string name, string unit, string guige, string xinghao, string pinyinName,
decimal kucunyujing, int sortOrder, bool isYujing, decimal saleRate)
{
GroupId = groupId;
Name = name;
Unit = unit;
Guige = guige;
Xinghao = xinghao;
PinyinName = pinyinName;
Kucunyujing = kucunyujing;
SortOrder = sortOrder;
IsYujing = isYujing;
SaleRate = saleRate;
AddDomainEvent(new WuziMulu_ChangedDomainEvent(Id));
}
public void Deleted() => AddDomainEvent(new WuziMulu_ChangedDomainEvent(Id));
}
@@ -0,0 +1,89 @@
using FreeSql.DataAnnotations;
using F9WebAiTest.Domain.Enums.SYS.YuanliaoZhuangkous;
using F9WebAiTest.Domain.Events.SYS.YuanliaoZhuangkous;
namespace F9WebAiTest.Domain.Entities.SYS.YuanliaoZhuangkous;
/// <summary>
/// 原料庄口:按年度 + 站点 + 季别 + 批次 + 物资(茧别)+ 蚕品种 标识一批原料,
/// 名称按 "{年度}{站点}{季别}{批次中文}{物资名去茧}({蚕品种})" 规则生成。
/// </summary>
[Table(Name = "sys_yuanliao_zhuangkou")]
public class YuanliaoZhuangkou : AggregateRoot
{
/// <summary>年度</summary>
[Column(Name = "year")]
public int Year { get; private set; }
/// <summary>庄口名称</summary>
[Column(Name = "name")]
public string Name { get; private set; }
/// <summary>编号(按年度自动生成,如 2025001)</summary>
[Column(Name = "code")]
public string Code { get; private set; }
/// <summary>季别(春/夏/秋/晚秋/晚晚秋…)</summary>
[Column(Name = "jibie")]
public string Jibie { get; private set; }
/// <summary>产地分类(本地/外地)</summary>
[Column(Name = "bendiwaidi")]
public BendiWaidi_Enum Bendiwaidi { get; private set; }
/// <summary>产地</summary>
[Column(Name = "chandi")]
public string Chandi { get; private set; }
/// <summary>蚕品种</summary>
[Column(Name = "canpinzhong")]
public string Canpinzhong { get; private set; }
/// <summary>物资目录 Id</summary>
[Column(Name = "wzmlid")]
public long WzmlId { get; private set; }
/// <summary>站点</summary>
[Column(Name = "zhandian")]
public string Zhandian { get; private set; }
/// <summary>批次</summary>
[Column(Name = "pici")]
public int Pici { get; private set; }
public YuanliaoZhuangkou() { }
public YuanliaoZhuangkou(long id, int year, string name, string code, string jibie, BendiWaidi_Enum bendiwaidi,
string chandi, string canpinzhong, long wzmlId, string zhandian, int pici)
{
Id = id;
Year = year;
Name = name;
Code = code;
Jibie = jibie;
Bendiwaidi = bendiwaidi;
Chandi = chandi;
Canpinzhong = canpinzhong;
WzmlId = wzmlId;
Zhandian = zhandian;
Pici = pici;
AddDomainEvent(new YuanliaoZhuangkou_ChangedDomainEvent(Id));
}
public void Update(int year, string name, string jibie, BendiWaidi_Enum bendiwaidi,
string chandi, string canpinzhong, long wzmlId, string zhandian, int pici)
{
Year = year;
Name = name;
Jibie = jibie;
Bendiwaidi = bendiwaidi;
Chandi = chandi;
Canpinzhong = canpinzhong;
WzmlId = wzmlId;
Zhandian = zhandian;
Pici = pici;
AddDomainEvent(new YuanliaoZhuangkou_ChangedDomainEvent(Id));
}
public void Deleted() => AddDomainEvent(new YuanliaoZhuangkou_ChangedDomainEvent(Id));
}
@@ -0,0 +1,62 @@
using FreeSql.DataAnnotations;
using F9WebAiTest.Domain.Events.SYS.Zq;
namespace F9WebAiTest.Domain.Entities.SYS.Zq;
/// <summary>
/// 账期(基础数据):一段统计区间(默认按每月 28 日划分),可"扎帐"锁定该期间业务数据。
/// </summary>
[Table(Name = "sys_zhangqi")]
public class Zhangqi : AggregateRoot
{
/// <summary>年度</summary>
[Column(Name = "year")]
public int Year { get; private set; }
/// <summary>月份</summary>
[Column(Name = "month")]
public int Month { get; private set; }
/// <summary>开始日期</summary>
[Column(Name = "start_date")]
public DateTime StartDate { get; private set; }
/// <summary>截止日期</summary>
[Column(Name = "end_date")]
public DateTime EndDate { get; private set; }
/// <summary>是否已扎帐(扎帐后期间内业务数据禁止修改)</summary>
[Column(Name = "is_zha_zhang")]
public bool IsZhaZhang { get; private set; }
public Zhangqi() { }
public Zhangqi(long id, int year, int month, DateTime startDate, DateTime endDate)
{
Id = id;
Year = year;
Month = month;
StartDate = startDate;
EndDate = endDate;
IsZhaZhang = false;
AddDomainEvent(new Zhangqi_ChangedDomainEvent(Id));
}
public void Update(int year, int month, DateTime startDate, DateTime endDate)
{
Year = year;
Month = month;
StartDate = startDate;
EndDate = endDate;
AddDomainEvent(new Zhangqi_ChangedDomainEvent(Id));
}
/// <summary>扎帐 / 取消扎帐</summary>
public void SetZhaZhang(bool isZhaZhang)
{
IsZhaZhang = isZhaZhang;
AddDomainEvent(new Zhangqi_ChangedDomainEvent(Id));
}
public void Deleted() => AddDomainEvent(new Zhangqi_ChangedDomainEvent(Id));
}