新增质量模块(工艺执行书 / 样茧试缫)与报表中心

质量模块:
- 11 张工艺执行书表:封面、试产、选剥茧(含混茧明细)、试缫与大样、煮茧(含分车间配温、副煮车间)、自动缫(含大样)、后缫
- 10 张样茧试缫表:原料小样/综合样主表 + 选茧、解舒、茧幅、切剖、清洁洁净、茧丝百回纤度
- 服务与接口、主控指针回写(列表 √ 标记)、封面编号自增、报表数据包
- 前端 8 张报表打印版式、7 类工艺单据与 6 类调查录入弹窗、字段驱动表单/表格组件
- 菜单种子新增「质量」目录,样茧子表增加 YjssType 判别列,避免原料小样与综合样自增 Id 重号串数据

报表中心:
- 报表模板管理、锐浪 grhtml5 加载与预览、全屏设计面板、数据源 Provider(落丝记录、职工花名册)

其他:同步工作进度 1-11 文档、开发数据库快照、.gitignore 忽略运行日志目录
This commit is contained in:
yanpeng200212
2026-10-22 10:30:37 +08:00
parent 8c4c464362
commit a8890c81e9
92 changed files with 14785 additions and 70 deletions
@@ -0,0 +1,25 @@
using FreeSql.DataAnnotations;
using F9WebAiTest.Domain.Common;
namespace F9WebAiTest.Domain.Entities.QC.Gyzxs;
/// <summary>
/// 工艺执行书主控(对应 F9 biz_prod_qc_gyzxs_version):
/// 以「工艺庄口」为主键的一条汇总指针记录,记录该庄口下每张子单据是否已录入。
/// 列表上的 √ 标记全部来自本表各 *Id &gt; 0。
/// </summary>
[Table(Name = "qc_gyzxs_doc_version")]
public class GyzxsDocVersion : BaseEntity
{
public long GyzkId { get; set; } // 工艺庄口 Id
public long ZongheyangId { get; set; } // 综合样茧质 Id(本系统暂未建综合样茧质,保留指针)
public long ShichanId { get; set; } // 试产(试缫工艺单)Id
public long FengMianId { get; set; } // 封面 Id
public long XbjSsdyId { get; set; } // 试缫与大样 Id
public long XbjId { get; set; } // 混剥选茧 Id
public long ZhuJianId { get; set; } // 煮茧 Id
public long ZdsId { get; set; } // 自动缫 Id
public long ZdsDyId { get; set; } // 自动缫大样 Id
public long HsId { get; set; } // 后缫(工艺执行书)Id
public string Memo { get; set; } = ""; // 备注
}
@@ -0,0 +1,23 @@
using FreeSql.DataAnnotations;
using F9WebAiTest.Domain.Common;
namespace F9WebAiTest.Domain.Entities.QC.Gyzxs;
/// <summary>
/// 封面(对应 F9 biz_prod_qc_gyzxs_fengmian):
/// 报表「封面」= 桑蚕丝工艺设计书,含编号、庄口、规格、原料总量、生产丝量、缫制车间、生产时间。
/// </summary>
[Table(Name = "qc_gyzxs_fengmian")]
public class GyzxsFengMian : BaseEntity
{
public long GyzkId { get; set; } // 工艺庄口 Id
public string BianHao { get; set; } = ""; // 编号(如 SJZ-2025-武工艺-58)
public string Guige { get; set; } = ""; // 缫制规格
public decimal YuanLiaoZhongLiang { get; set; } // 原料总量(吨)
public decimal ShengSiZhongLiang { get; set; } // 生产丝量(吨)
public string ShengChanCheJian { get; set; } = "";// 缫制车间
public DateTime? ShengChanStartDate { get; set; } // 开始生产日期
public DateTime? ShengChanEndDate { get; set; } // 结束生产日期
public string FaSongBuMen { get; set; } = ""; // 发送部门
public string Memo { get; set; } = ""; // 备注
}
@@ -0,0 +1,57 @@
using FreeSql.DataAnnotations;
using F9WebAiTest.Domain.Common;
namespace F9WebAiTest.Domain.Entities.QC.Gyzxs;
/// <summary>
/// 后缫(编丝整理)工艺执行书(对应 F9 biz_prod_qc_gyzxs_hs)。
/// 报表「工艺执行书」即本单据:生产指标 9 项 + 工艺条件及控制指标 18 项 + 主要技术措施 + 设计/审核/审批。
/// 指标按 F9 约定全部为字符串,可存 "3100"、"99.8"、"20~38"、"185±5" 这类文本。
/// </summary>
[Table(Name = "qc_gyzxs_hs")]
public class GyzxsHs : BaseEntity
{
public long GyzkId { get; set; } // 工艺庄口
public string Guige { get; set; } = ""; // 生丝规格
public DateTime? ZhiXingDate { get; set; } // 执行时间
public string QianSaoCheJian { get; set; } = ""; // 前缫生产车间
public int YuSaoTianShu { get; set; } // 预缫天数
public string ZhengLiGuiGe { get; set; } = "GB1798-2008 白厂丝"; // 整理规格
// ---- 生产指标 ----
public string SczbDanChan { get; set; } = ""; // 单产(片/人、班)
public string SczbRiChan { get; set; } = ""; // 日产(片/班)
public string SczbBianSiLiang { get; set; } = ""; // 编丝量(片/人、班)
public string SczbZhengJianLiang { get; set; } = ""; // 整检量(片/日)
public string SczbShengChanZhengPinLv { get; set; } = ""; // 生产正品率(%)
public string SczbShangJianZhengPinLv { get; set; } = ""; // 商检正品率(%)
public string SczbQieDuan { get; set; } = ""; // 切断(次/批)
public string SczbXiaoLv { get; set; } = ""; // 效率(%)
public string SczbPinZhiCiDian { get; set; } = ""; // 编检品质疵点(%)
// ---- 工艺条件及控制指标 ----
public string GyzbCheSu { get; set; } = ""; // 车速(转/分)
public string GyzbXiaoYuDaiFanShiJian { get; set; } = ""; // 小䈅待返时间(分)
public string GyzbCheJianWenDu { get; set; } = ""; // 车间温度(℃)
public string GyzbCheJianXiangDuiShiDu { get; set; } = ""; // 车间相对湿度(%)
public string GyzbCheXiangWenDu { get; set; } = ""; // 车厢温度(℃)
public string GyzbCheXiangShiDu { get; set; } = ""; // 车厢湿度(%)
public string GyzbPingHengShiWenDu { get; set; } = ""; // 平衡室温度(℃)
public string GyzbPingHengShiXiangDuiShiDu { get; set; } = ""; // 平衡室相对湿度(%)
public string GyzbXiaoYuGeiShiWenDu { get; set; } = ""; // 小䈅给湿温度(℃)
public string GyzbXiaoYuSiPianPingHengShiJian { get; set; } = ""; // 小䈅丝片平衡时间(分)
public string GyzbZhenKongDu { get; set; } = ""; // 真空度(mp)
public string GyzbChouQiCiShu { get; set; } = ""; // 抽气次数(次)
public string GyzbDaYuSiPianPingHengShiJian { get; set; } = ""; // 大䈅丝片平衡时间(分)
public string GyzbDaYuSiPianHuiChaoLv { get; set; } = ""; // 大䈅丝片回潮率(%)
public string GyzbShengSiHuiChaoLv { get; set; } = ""; // 生丝回潮率(%)
public string GyzbDaYuSiPianKuanDu { get; set; } = ""; // 大䈅丝片宽度(cm)
public string GyzbXieSiDuiSiLv { get; set; } = ""; // 屑丝对丝率(%)
public string GyzbDaYuSiPianCiDian { get; set; } = ""; // 大䈅丝片疵点(%)
public string JiShuCuoShi { get; set; } = ""; // 主要技术措施
public string SheJiRen { get; set; } = ""; // 设计
public string ShenHeRen { get; set; } = ""; // 审核
public string PiFuRen { get; set; } = ""; // 审批
public string Memo { get; set; } = ""; // 备注
}
@@ -0,0 +1,65 @@
using FreeSql.DataAnnotations;
using F9WebAiTest.Domain.Common;
namespace F9WebAiTest.Domain.Entities.QC.Gyzxs;
/// <summary>
/// 试产(试缫工艺单,对应 F9 biz_prod_qc_gyzxs_shichan):
/// 两个分组——「自动缫试缫工艺」与「试缫煮茧工艺」。
/// 工艺指标大量是区间文本(如 190±5、9、10、11、≥99),因此车速/温度类用 string。
/// </summary>
[Table(Name = "qc_gyzxs_shichan")]
public class GyzxsShichan : BaseEntity
{
public long GyzkId { get; set; } // 工艺庄口
public string Guige { get; set; } = ""; // 规格
public string HuanZhuangFangShi { get; set; } = ""; // 换庄方式
public DateTime? ScDate { get; set; } // 试缫日期
public string ScCheJian { get; set; } = ""; // 生产车间
// ---- 茧质调查(来源:综合样茧质 / 手工填写)----
public decimal YiJianSiChang { get; set; } // 一茧丝长(m)
public decimal JieShuLv { get; set; } // 解舒率(%)
public decimal JieShuSiChang { get; set; } // 解舒丝长(m)
public decimal JianCengLv { get; set; } // 茧层率(%)
public decimal JianSiXianDu { get; set; } // 茧丝纤度(D)
public decimal JieShuGuangZhe { get; set; } // 解舒光折(kg)
public decimal WanDiao { get; set; } // 万吊(次)
// ---- 自动缫试缫工艺指标 ----
public string ZdsCheSu { get; set; } = ""; // 车速(转)
public string ZdsYunXuLiShu { get; set; } = ""; // 允许粒数(粒)
public decimal ZdsSaoZhe { get; set; } // 缫折(kg)
public decimal ZdsZhongXinXianDu { get; set; } // 中心纤度(D)
public string ZdsZhongXinLiFuLv { get; set; } = ""; // 中心粒符率(%)
public string ZdsSaoSiWenDu { get; set; } = ""; // 缫丝温度(℃)
public decimal ZdsJiSuanXianDu { get; set; } // 计算纤度(D)
public string ZdsYunXuLiFuLv { get; set; } = ""; // 允许粒符率(%)
public string ZdsSuoXuWenDu { get; set; } = ""; // 索绪温度(℃)
public decimal ZdsPingJunLiShu { get; set; } // 平均粒数(粒)
public decimal ZdsBaiJianYinXu { get; set; } // 白茧引绪(粒)
public string ZdsLiXuWenDu { get; set; } = ""; // 理绪温度(℃)
public decimal ZdsZhongXinLiShu { get; set; } // 中心粒数(粒)
public string ZdsGeiJianKouKuanDu { get; set; } = ""; // 给茧口宽度(mm)
public decimal ZdsLuoSiLongShu { get; set; } // 落丝笼数(笼)
public decimal ZdsLongJianLiShu { get; set; } // 笼茧粒数(粒)
// ---- 试缫煮茧工艺 ----
public string ZjCheSu { get; set; } = ""; // 煮茧车速(转)
public string ZjZhengZhuShi1 { get; set; } = ""; // 蒸煮室温度1
public string ZjZhengZhuShi2 { get; set; } = ""; // 蒸煮室温度2
public string ZjZhengZhuShi3 { get; set; } = ""; // 蒸煮室温度3
public decimal ZjLuoXuWai { get; set; } // 外层掉绪
public decimal ZjLuoXuZhong { get; set; } // 中层掉绪
public decimal ZjLuoXuNei { get; set; } // 内层掉绪
public string ZjTiaoZhengBuWenDu { get; set; } = ""; // 调整部温度
public string ZjChuKouWenDu { get; set; } = ""; // 出口温度
public string ZjFuZhuCheJian { get; set; } = ""; // 附煮车间
public string ZjFuZhuGyzkName { get; set; } = ""; // 附煮庄口
// ---- 签署 ----
public string SheJiRen { get; set; } = ""; // 设计人
public string ShenHeRen { get; set; } = ""; // 审核
public string PiFuRen { get; set; } = ""; // 审批
public string Memo { get; set; } = ""; // 备注
}
@@ -0,0 +1,61 @@
using FreeSql.DataAnnotations;
using F9WebAiTest.Domain.Common;
namespace F9WebAiTest.Domain.Entities.QC.Gyzxs;
/// <summary>
/// 混剥选茧工艺执行书(对应 F9 biz_prod_qc_gyzxs_xbj)。
/// 含生产指标 / 质量指标 / 质量控制指标 三组,指标多为百分数或区间文本。
/// </summary>
[Table(Name = "qc_gyzxs_xbj")]
public class GyzxsXbj : BaseEntity
{
public long GyzkId { get; set; } // 工艺庄口
public string Guige { get; set; } = ""; // 缫制规格
public string CheJian { get; set; } = ""; // 缫制车间
public DateTime? HuanZhuangDate { get; set; } // 换庄时间
// ---- 生产指标 ----
public decimal ScRiChanLiang { get; set; } // 日产量(包/人)
public decimal ScBanChanLiang { get; set; } // 班产量(包)
public string ScShangCheLv { get; set; } = ""; // 上车率
public string ScLianTongLv { get; set; } = ""; // 联统茧率
public string ScWuJiLv { get; set; } = ""; // 五级茧率
public string ScXiaJiaoLv { get; set; } = ""; // 下茧/茧衣率
public string ScJianYiLv { get; set; } = ""; // 茧衣率
public string ScJiShuCuoShi { get; set; } = ""; // 技术措施要求
// ---- 质量指标(统号茧 / 五级茧 / 下脚茧 交叉率)----
public string QcTongHaoWuJiLv { get; set; } = ""; // 统号茧-五级茧率
public string QcTongHaoXiaJianLv { get; set; } = ""; // 统号茧-下茧率
public string QcWuJiLianTongLv { get; set; } = ""; // 五级茧-联统茧率
public string QcWuJiXiaJiaoLv { get; set; } = ""; // 五级茧-下脚率
public string QcXiaJiaoLianTongLv { get; set; } = ""; // 下脚茧-联统率
public string QcXiaJiaoCiJianLv { get; set; } = ""; // 下脚茧-次茧率
// ---- 质量控制指标(其它级茧日产量 + 共性指标)----
public string QcZbHaoWuZuChanLiang { get; set; } = ""; // 好五茧(kg/组/3人)
public string QcZbLiuJiZuChanLiang { get; set; } = ""; // 六级茧(kg/组/3人)
public string QcZbMianJianZuChanLiang { get; set; } = ""; // 棉茧(kg/组/3人)
public string QcZbXiaJiaoZuChanLiang { get; set; } = ""; // 下脚茧(kg/组/3人)
public string QcZbShuangGongZuChanLiang { get; set; } = ""; // 双宫茧(kg/组/3人)
public string QcZbGongJinLiShu { get; set; } = ""; // 公斤粒数(粒)
public string QcZbBaoGuangLv { get; set; } = ""; // 剥光率(%)
public string QcZbJianYiLv { get; set; } = ""; // 茧衣率(%)
public string Memo { get; set; } = ""; // 备注
}
/// <summary>混茧比例明细(对应 F9 biz_prod_qc_gyzxs_xbj_hunjian)</summary>
[Table(Name = "qc_gyzxs_xbj_hunjian")]
public class GyzxsXbjHunJian : BaseEntity
{
public long XbjId { get; set; } // 选剥茧主表 Id
public long YlzkId { get; set; } // 原料庄口 Id
public string ZhuangBie { get; set; } = ""; // 庄别(冗余名称,便于打印)
public decimal ZhongLiang { get; set; } // 重量(kg)
public int BaoShu { get; set; } // 总包数
public decimal BiLi { get; set; } // 比例(%)
public int HunJianBaoShu { get; set; } // 混茧包数
public int Sort { get; set; } // 排序
}
@@ -0,0 +1,45 @@
using FreeSql.DataAnnotations;
using F9WebAiTest.Domain.Common;
namespace F9WebAiTest.Domain.Entities.QC.Gyzxs;
/// <summary>
/// 试缫与大样资料(对应 F9 biz_prod_qc_gyzxs_xbj_ssdy):
/// 「试缫」与「大样」两组同构指标,报表为两行对比表。
/// </summary>
[Table(Name = "qc_gyzxs_xbj_ssdy")]
public class GyzxsXbjSsDy : BaseEntity
{
public long GyzkId { get; set; } // 工艺庄口
public string Guige { get; set; } = ""; // 缫制规格
// ---- 试缫 ----
public string SsShangCheLv { get; set; } = ""; // 上车率(%)
public string SsLianTongLv { get; set; } = ""; // 联统率(%)
public string SsCiJianLv { get; set; } = ""; // 次茧率(%)
public string SsCiLiuJiLv { get; set; } = ""; // 次六级(%)
public string SsMianJianLv { get; set; } = ""; // 棉茧率(%)
public string SsXiaJiaoLv { get; set; } = ""; // 下脚率(%)
public string SsShuangGongLv { get; set; } = ""; // 双宫率(%)
public string SsJianYiLv { get; set; } = ""; // 茧衣率(%)
public decimal SsLiJianZhong { get; set; } // 400粒重(克)
public decimal SsGongJinLiShu { get; set; } // 公斤粒数
// ---- 大样 ----
public string DyShangCheLv { get; set; } = ""; // 上车率(%)
public string DyLianTongLv { get; set; } = ""; // 联统率(%)
public string DyCiJianLv { get; set; } = ""; // 次茧率(%)
public string DyCiLiuJiLv { get; set; } = ""; // 次六级(%)
public string DyMianJianLv { get; set; } = ""; // 棉茧率(%)
public string DyXiaJiaoLv { get; set; } = ""; // 下脚率(%)
public string DyShuangGongLv { get; set; } = ""; // 双宫率(%)
public string DyJianYiLv { get; set; } = ""; // 茧衣率(%)
public decimal DyLiJianZhong { get; set; } // 400粒重(克)
public decimal DyGongJinLiShu { get; set; } // 公斤粒数
public string JiShuCuoShi { get; set; } = ""; // 主要技术措施及要求
public string SheJiRen { get; set; } = ""; // 设计
public string ShenHeRen { get; set; } = ""; // 审核
public string PiFuRen { get; set; } = ""; // 审批
public string Memo { get; set; } = ""; // 备注
}
@@ -0,0 +1,112 @@
using FreeSql.DataAnnotations;
using F9WebAiTest.Domain.Common;
namespace F9WebAiTest.Domain.Entities.QC.Gyzxs;
/// <summary>
/// 自动缫车间生产工艺执行书(表一,对应 F9 biz_prod_qc_gyzxs_zds)。
/// 含「茧质概况」(冗余自综合样茧质)、「生产指标」、「工艺技术指标」三块。
/// </summary>
[Table(Name = "qc_gyzxs_zds")]
public class GyzxsZds : BaseEntity
{
public long GyzkId { get; set; } // 工艺庄口
public string Guige { get; set; } = ""; // 生丝规格
public DateTime? HuanZhuangDate { get; set; } // 接缫日期
public string HuanZhuangFangShi { get; set; } = ""; // 换庄方式
public string CheJian { get; set; } = ""; // 生产车间
public int YuSaoTianShu { get; set; } // 预缫天数(天)
public decimal YuSaoSiLiang { get; set; } // 预缫丝量(吨)
// ---- 茧质概况 ----
public decimal ZgYiJianSiChang { get; set; } // 一茧丝长(米)
public decimal ZgJieShuSiChang { get; set; } // 解舒丝长
public decimal ZgJieShuLv { get; set; } // 解舒率(%)
public decimal ZgJianSiXianDu { get; set; } // 茧丝纤度(D)
public decimal ZgJieShuGuangZhe { get; set; } // 解舒光折(kg)
public decimal ZgWanMiDiaoCao { get; set; } // 万米吊糙(次)
public decimal ZgQingJie { get; set; } // 清洁(分)
public decimal ZgJingDu { get; set; } // 洁净(分)
public decimal ZgJianCengLv { get; set; } // 茧层率(%)
public decimal ZgXianDuJunFangCha { get; set; } // 茧丝纤度均方差
public decimal ZgWaiSanBaiHui { get; set; } // 外三百回纤度
public decimal ZgZhongSanBaiHui { get; set; } // 中三百回纤度
public decimal ZgNeiSanBaiHui { get; set; } // 内三百回纤度
public decimal ZgZuiDaKaiCha { get; set; } // 最大开差
public decimal ZgNeiWaiKaiCha { get; set; } // 内外开差
public decimal ZgBaiSeJianDanXian { get; set; } // 白色茧单纤
public decimal ZgHuiSeJianDanXian { get; set; } // 灰色茧单纤
public decimal ZgHongSeJianDanXian { get; set; } // 红色茧单纤
public decimal ZgLuoXuWai { get; set; } // 落绪分布-外
public decimal ZgLuoXuZhong { get; set; } // 落绪分布-中
public decimal ZgLuoXuNei { get; set; } // 落绪分布-内
public decimal ZgPingJunJianFu { get; set; } // 平均茧幅(mm)
public decimal ZgJianFuZhengQiLv { get; set; } // 茧幅整齐率(%)
public string ZgJianSiBaiHuiXianDu { get; set; } = ""; // 茧丝百回纤度(明细串)
// ---- 生产指标 ----
public string SczbPinWei { get; set; } = ""; // 品味
public string SczbSaoZhe { get; set; } = ""; // 缫折(kg)
public string SczbTaiChan { get; set; } = ""; // 台产
public string SczbPianCha { get; set; } = ""; // 偏差
public string SczbZongCha { get; set; } = ""; // 总差
public string SczbQingJie { get; set; } = ""; // 清洁
public string SczbJingJie { get; set; } = ""; // 洁净
public string SczbYunEr { get; set; } = ""; // 匀Ⅱ
public string SczbZhengPinLv { get; set; } = ""; // 生产正品率
// ---- 工艺技术指标(第一行)----
public string GyzbCheSu { get; set; } = ""; // 车速(转/分)
public string GyzbTianXuCiShu { get; set; } = ""; // 添绪次数(次/分)
public string GyzbYunZhuanLv { get; set; } = ""; // 运转率(%)
public string GyzbZhongXinXianDu { get; set; } = ""; // 中心纤度(D)
public string GyzbSheJiDanXianDu { get; set; } = ""; // 设计单纤度(D)
public string GyzbPingJunLiShu { get; set; } = ""; // 平均粒数(粒)
public string GyzbZhongXinLiShu { get; set; } = ""; // 中心粒数(粒)
public string GyzbYunXuLiShu { get; set; } = ""; // 允许粒数(粒)
public string GyzbYinXu { get; set; } = ""; // 引绪(粒)
public string GyzbZhongXinLiFuLv { get; set; } = ""; // 中心粒符率
public string GyzbYunXuLiFuLv { get; set; } = ""; // 允许粒符率
public string GyzbGeiJianKouKuanDu { get; set; } = ""; // 给茧口宽度
public string GyzbTiaoTuLv { get; set; } = ""; // 条吐率(%)
public string GyzbSiQiaoChangDu { get; set; } = ""; // 丝鞘长度(cm)
// ---- 工艺技术指标(第二行)----
public string GyzbCheTouQiYa { get; set; } = ""; // 车头汽压(MP)
public string GyzbSuoXuWenDu { get; set; } = ""; // 索绪温度(℃)
public string GyzbLiXuWenDu { get; set; } = ""; // 理绪温度(℃)
public string GyzbPianXinPanJianLiang { get; set; } = ""; // 偏心盘茧量
public string GyzbSaoTangWenDu { get; set; } = ""; // 缫汤温度(℃)
public string GyzbJiaJianKouJianLiang { get; set; } = ""; // 加茧口茧量(粒)
public string GyzbWuXuLv { get; set; } = ""; // 无绪率(%)
public string GyzbPengCaoJianLv { get; set; } = ""; // 蓬糙茧率(%)
public string GyzbJiaJianJunYunLv { get; set; } = ""; // 加茧均匀率(%)
public string GyzbZhengQueTianXuLv { get; set; } = ""; // 正确添绪率(%)
public string GyzbTongJianLiang { get; set; } = ""; // 桶茧量(g)
public string GyzbLuoSiLongShu { get; set; } = ""; // 落丝笼数
public string SheJiRen { get; set; } = ""; // 设计
public string ShenHeRen { get; set; } = ""; // 审核
public string PiFuRen { get; set; } = ""; // 审批
public string Memo { get; set; } = ""; // 备注
}
/// <summary>自动缫大样资料(表二,对应 F9 biz_prod_qc_gyzxs_zds_dyzl)</summary>
[Table(Name = "qc_gyzxs_zds_dyzl")]
public class GyzxsZdsDyzl : BaseEntity
{
public long GyzkId { get; set; } // 工艺庄口
public long ZdsId { get; set; } // 自动缫主表 Id
public string Guige { get; set; } = ""; // 生丝规格
public string PianCha { get; set; } = ""; // 偏差
public string QingJie { get; set; } = ""; // 清洁
public string JingDu { get; set; } = ""; // 净度
public string JieShuLv { get; set; } = ""; // 解舒率
public string WanMiDiaoCao { get; set; } = ""; // 万米吊糙
public string SaoZhe { get; set; } = ""; // 缫折
public string JiShuCuoShi { get; set; } = ""; // 技术措施及要求
public string SheJiRen { get; set; } = ""; // 设计
public string ShenHeRen { get; set; } = ""; // 审核
public string PiFuRen { get; set; } = ""; // 审批
public string Memo { get; set; } = ""; // 备注
}
@@ -0,0 +1,98 @@
using FreeSql.DataAnnotations;
using F9WebAiTest.Domain.Common;
namespace F9WebAiTest.Domain.Entities.QC.Gyzxs;
/// <summary>
/// 煮茧工艺执行书主表(对应 F9 biz_prod_qc_gyzxs_zhujian)。
/// 「庄口原料性能」区在本系统内冗余存储在表上,避免强依赖综合样茧质。
/// </summary>
[Table(Name = "qc_gyzxs_zhujian")]
public class GyzxsZhuJian : BaseEntity
{
public long GyzkId { get; set; } // 工艺庄口
public string Guige { get; set; } = ""; // 缫制规格
public DateTime? HuanZhuangDate { get; set; } // 换庄时间
public string HuanZhuangFangShi { get; set; } = ""; // 接缫方式
public string CheJian { get; set; } = ""; // 生产车间
public string ZhuJianJi { get; set; } = ""; // 煮茧机号
// ---- 庄口原料性能 ----
public decimal YlGongJinLiShu { get; set; } // 公斤粒数(粒)
public string YlSuoZhou { get; set; } = ""; // 缩绉
public decimal YlJianCengLv { get; set; } // 茧层率
public decimal YlQingJie { get; set; } // 清洁
public decimal YlJingDu { get; set; } // 净度
public decimal YlLiJianSiChang { get; set; } // 粒茧丝长
public decimal YlJieShuLv { get; set; } // 解舒率
public decimal YlJieShuSiChang { get; set; } // 解舒丝长
public decimal YlJianSiXianDu { get; set; } // 茧丝纤度
public decimal YlWanMiDiaoCao { get; set; } // 万米吊糙
public decimal YlJieShuGuangZhe { get; set; } // 解舒光折
// ---- 工艺技术指标 ----
public string GyzbJieShuLv { get; set; } = ""; // 实缫解舒
public string GyzbWanDiao { get; set; } = ""; // 实缫万吊
public string GyzbQingJie { get; set; } = ""; // 清洁
public string GyzbJingDu { get; set; } = ""; // 净度
public string GyzbSiJiaoRongShiLv { get; set; } = ""; // 丝胶溶失率
public string GyzbZuLuoSiLongShu { get; set; } = ""; // 组落丝笼数
public string GyzbSaoZhe { get; set; } = ""; // 缫折(kg)
public string GyzbLongJianLiShu { get; set; } = ""; // 笼茧粒数
public string GyzbMeiTongJianLiang { get; set; } = ""; // 每桶茧量(g)
public string GyzbMeiBaoTongShu { get; set; } = ""; // 每包桶数(笼)
public string GyzbMeiXiaoShiYongJianLong { get; set; } = ""; // 每小时用茧笼数
public string GyzbTiaoTuLv { get; set; } = ""; // 条吐率(%)
// ---- 真空渗透 ----
public string ZkstZhenKongDu { get; set; } = ""; // 真空度
public string ZkstXiShuiWenDu { get; set; } = ""; // 吸水温度
public string ZkstDaZhenKongShiChang { get; set; } = ""; // 没进水时达到最高真空度时长
public string ZkstZuiGaoWeiShiChang { get; set; } = ""; // 液面到最高位时长
public string ZkstGuanShuiZhenKongShiChang { get; set; } = ""; // 关水后继续真空时长
public string ZkstChuJianWenDu { get; set; } = ""; // 出茧温度
public string ZkstQuanJiHuiZhuanShiJian { get; set; } = ""; // 全机回转时间(分)
public string JiShuCuoShi { get; set; } = ""; // 主要技术措施
public string SheJiRen { get; set; } = ""; // 设计
public string ShenHeRen { get; set; } = ""; // 审核
public string PiFuRen { get; set; } = ""; // 审批
public string Memo { get; set; } = ""; // 备注
}
/// <summary>分车间煮茧指标(对应 F9 biz_prod_qc_gyzxs_zhujian_chejian_zhujianduan)</summary>
[Table(Name = "qc_gyzxs_zhujian_chejian")]
public class GyzxsZhuJianCheJian : BaseEntity
{
public long ZhuJianId { get; set; } // 煮茧主表 Id
public string CheJian { get; set; } = ""; // 车间
public string DiWenShenTou { get; set; } = ""; // 低温渗透
public string ZhengZhuShi1 { get; set; } = ""; // 蒸煮室1
public string ZhengZhuShi2 { get; set; } = ""; // 蒸煮室2
public string ZhengZhuShi3 { get; set; } = ""; // 蒸煮室3
public string TiaoZhengBu1 { get; set; } = ""; // 调整部1
public string TiaoZhengBu2 { get; set; } = ""; // 调整部2
public string TiaoZhengBu3 { get; set; } = ""; // 调整部3
public string TiaoZhengBu4 { get; set; } = ""; // 调整部4
public string TiaoZhengBu5 { get; set; } = ""; // 调整部5
public string ChuJianWenDu { get; set; } = ""; // 出茧温度
public string HuiZhuanShiJian { get; set; } = ""; // 全机回转时间
public int Sort { get; set; }
}
/// <summary>副煮车间结果(对应 F9 biz_prod_qc_gyzxs_zhujian_chejian_fuzhu)</summary>
[Table(Name = "qc_gyzxs_zhujian_fuzhu")]
public class GyzxsZhuJianFuZhu : BaseEntity
{
public long ZhuJianId { get; set; } // 煮茧主表 Id
public string CheJian { get; set; } = ""; // 附煮车间
public string JieShuLv { get; set; } = ""; // 解舒
public string WanDiao { get; set; } = ""; // 万吊
public string SaoZhe { get; set; } = ""; // 缫折(kg)
public string WenDu1 { get; set; } = ""; // 温度1
public string WenDu2 { get; set; } = ""; // 温度2
public string WenDu3 { get; set; } = ""; // 温度3
public string WenDu4 { get; set; } = ""; // 温度4
public string WenDu5 { get; set; } = ""; // 温度5
public int Sort { get; set; }
}
@@ -0,0 +1,28 @@
using FreeSql.DataAnnotations;
using F9WebAiTest.Domain.Common;
namespace F9WebAiTest.Domain.Entities.QC.Yjss;
/// <summary>茧幅调查主表(对应 F9 biz_prod_qc_yjss_dc_jfdc_main)</summary>
[Table(Name = "qc_yjss_dc_jfdc_main")]
public class YjssDcJfdcMain : BaseEntity
{
public long YjssId { get; set; } // 主表 Id
public int YjssType { get; set; } = 1; // 样品类型:1=原料小样 2=综合样
public decimal PingJunJianFu { get; set; } // 平均茧幅(mm)
public decimal ZuiDaJianFu { get; set; } // 最大茧幅(mm)
public decimal ZhengQiLv { get; set; } // 茧幅整齐率(%)
public decimal JunFangCha { get; set; } // 茧幅均方差
}
/// <summary>茧幅调查明细(对应 F9 biz_prod_qc_yjss_dc_jfdc_item)</summary>
[Table(Name = "qc_yjss_dc_jfdc_item")]
public class YjssDcJfdcItem : BaseEntity
{
public long JfdcId { get; set; } // 茧幅调查主表 Id
public long YjssId { get; set; } // 主表 Id(冗余,便于整表删除)
public int YjssType { get; set; } = 1; // 样品类型:1=原料小样 2=综合样
public decimal JianFu { get; set; } // 茧幅(mm)
public decimal ShuLiang { get; set; } // 数量(粒)
public int Sort { get; set; }
}
@@ -0,0 +1,33 @@
using FreeSql.DataAnnotations;
using F9WebAiTest.Domain.Common;
namespace F9WebAiTest.Domain.Entities.QC.Yjss;
/// <summary>茧丝百回纤度汇总(对应 F9 biz_prod_qc_yjss_dc_jsbhxdmain)</summary>
[Table(Name = "qc_yjss_dc_jsbhxd_main")]
public class YjssDcJsbhxdMain : BaseEntity
{
public long YjssId { get; set; } // 主表 Id
public int YjssType { get; set; } = 1; // 样品类型:1=原料小样 2=综合样
public decimal XianDuJunFangCha { get; set; } // 茧丝纤度均方差
public decimal ZuiDaKaiCha { get; set; } // 最大开差
public decimal NeiWaiKaiCha { get; set; } // 内外开差
public decimal WaiSanBaiHui { get; set; } // 外三百回
public decimal ZhongSanBaiHui { get; set; } // 中三百回
public decimal NeiSanBaiHui { get; set; } // 内三百回
public decimal BaiSeJianDanXian { get; set; } // 白色茧单纤
public decimal HuiSeJianDanXian { get; set; } // 灰色茧单纤
public decimal HongSeJianDanXian { get; set; } // 红色茧单纤
}
/// <summary>茧丝百回纤度明细(对应 F9 biz_prod_qc_yjss_dc_jsbhxd)</summary>
[Table(Name = "qc_yjss_dc_jsbhxd")]
public class YjssDcJsbhxd : BaseEntity
{
public long JsbhxdMainId { get; set; } // 汇总表 Id
public long YjssId { get; set; } // 主表 Id(冗余)
public int YjssType { get; set; } = 1; // 样品类型:1=原料小样 2=综合样
public int HuiShu { get; set; } // 回数
public decimal XianDu { get; set; } // 纤度(D)
public int Sort { get; set; }
}
@@ -0,0 +1,72 @@
using FreeSql.DataAnnotations;
using F9WebAiTest.Domain.Common;
namespace F9WebAiTest.Domain.Entities.QC.Yjss;
/// <summary>
/// 解舒调查(试缫,对应 F9 biz_prod_qc_yjss_dc_jsdc):一条主表可有多条本记录。
/// </summary>
[Table(Name = "qc_yjss_dc_jsdc")]
public class YjssDcJsdc : BaseEntity
{
public long YjssId { get; set; } // 主表 Id
public int YjssType { get; set; } = 1; // 样品类型:1=原料小样 2=综合样
public int XuHao { get; set; } // 序号
// ---- 缫丝工艺参数 ----
public int XuShu { get; set; } // 绪数
public int DingLi { get; set; } // 定粒
public int ZhuJianTangWen { get; set; } // 煮茧汤温(℃)
public int SaoSiTangWen { get; set; } // 缫丝汤温(℃)
public int CheSu { get; set; } // 车速(转/分)
public decimal XiaoSiGanLiang { get; set; } // 小丝干量(g)
public decimal XiaoSiGongLiang { get; set; } // 小丝公量(g)
// ---- 落绪分布 ----
public int LdfbWai { get; set; } // 外
public int LdfbZhong { get; set; } // 中
public int LdfbNei { get; set; } // 内
public int LdfbSum { get; set; } // 总粒数
// ---- 解舒核心 ----
public string XianJianYouXuLv { get; set; } = ""; // 鲜茧有绪率(区间文本)
public int JiaoShu { get; set; } // 绞数
public int LingHuiShu { get; set; } // 零回数
public decimal ShengSiZongChang { get; set; } // 生丝总长(回)
public decimal JianSiZongChang { get; set; } // 茧丝总长(回)
public decimal YiJianSiChang { get; set; } // 一茧丝长(m)
public decimal JieShuSiChang { get; set; } // 解舒丝长(m)
public decimal JieShuLv { get; set; } // 解舒率(%)
public decimal JieShuGuangZhe { get; set; } // 解舒光折(kg)
public decimal ShengSiXianDu { get; set; } // 生丝纤度(D)
public decimal JianSiXianDu { get; set; } // 茧丝纤度(D)
// ---- 蛹体粒数 / 比例 ----
public int YtLsNeiYin { get; set; } // 内印
public int YtLsMaoZu { get; set; } // 毛足
public int YtLsChuanTou { get; set; } // 穿头
public int YtLsShuangGong { get; set; } // 双宫
public decimal YtBlNeiYin { get; set; } // 内印比例
public decimal YtBlMaoZu { get; set; } // 毛足比例
public decimal YtBlChuanTou { get; set; } // 穿头比例
public decimal YtBlShuangGong { get; set; } // 双宫比例
// ---- 附煮 ----
public string FzCheJian { get; set; } = ""; // 附煮车间
public string FzGyzkName { get; set; } = ""; // 附煮工艺庄口
public string FzZhengZhuWenDu { get; set; } = ""; // 蒸煮室温度
public string FzTiaoZhengBuWenDu { get; set; } = ""; // 调整部温度
public string FzCheSu { get; set; } = ""; // 附煮车速
// ---- 屑物 ----
public decimal XwJianBaLiang { get; set; } // 总茧巴量
public decimal XwYongYiZhongLiang { get; set; } // 蛹衣重量
public decimal XwYongYiLv { get; set; } // 蛹衣率
public decimal XwLeiJie { get; set; } // 类节
public decimal XwWanMiDiaoCao { get; set; } // 万米吊糙
public decimal XwJianBaBiLi { get; set; } // 茧巴比例
// ---- 样茧 ----
public int JieShuLiShu { get; set; } // 解舒样茧粒数
public decimal JieShuZhongLiang { get; set; } // 解舒样茧重量(g)
}
@@ -0,0 +1,50 @@
using FreeSql.DataAnnotations;
using F9WebAiTest.Domain.Common;
namespace F9WebAiTest.Domain.Entities.QC.Yjss;
/// <summary>
/// 清洁洁净(对应 F9 biz_prod_qc_yjss_dc_qjjj):
/// 匀度(一/二/三度) + 洁净档位片数(100~60) + 疵点粒数(次要/普通) + 计算出的清洁、洁净、片数。
/// </summary>
[Table(Name = "qc_yjss_dc_qjjj")]
public class YjssDcQjjj : BaseEntity
{
public long YjssId { get; set; } // 主表 Id
public int YjssType { get; set; } = 1; // 样品类型:1=原料小样 2=综合样
// ---- 匀度 ----
public int YdYiDu { get; set; } // 一度
public int YdErDu { get; set; } // 二度
public int YdSanDu { get; set; } // 三度
// ---- 洁净档位(片数)----
public int Jj100 { get; set; }
public int Jj95 { get; set; }
public int Jj90 { get; set; }
public int Jj85 { get; set; }
public int Jj80 { get; set; }
public int Jj75 { get; set; }
public int Jj70 { get; set; }
public int Jj65 { get; set; }
public int Jj60 { get; set; }
// ---- 次要疵点 ----
public int QjTdc { get; set; } // 特大糙
public int QjFs { get; set; } // 废丝
public int QjDc { get; set; } // 大糙
public int QjNfc { get; set; } // 黏附糙
public int QjDcj { get; set; } // 大长结
public int QjZlx { get; set; } // 重螺旋
// ---- 普通疵点 ----
public int QjXc { get; set; } // 小糙
public int QjCj { get; set; } // 长结
public int QjLx { get; set; } // 螺旋
public int QjHjls { get; set; } // 环结及裂丝
// ---- 结果 ----
public int PianShu { get; set; } // 片数
public decimal QingJie { get; set; } // 清洁
public decimal JingJie { get; set; } // 洁净
}
@@ -0,0 +1,29 @@
using FreeSql.DataAnnotations;
using F9WebAiTest.Domain.Common;
namespace F9WebAiTest.Domain.Entities.QC.Yjss;
/// <summary>切剖调查(对应 F9 biz_prod_qc_yjss_dc_qpdc)</summary>
[Table(Name = "qc_yjss_dc_qpdc")]
public class YjssDcQpdc : BaseEntity
{
public long YjssId { get; set; } // 主表 Id
public int YjssType { get; set; } = 1; // 样品类型:1=原料小样 2=综合样
public decimal YlQuanJian { get; set; } // 原量-全茧
public decimal YlJianCeng { get; set; } // 原量-茧层
public decimal YlYongTi { get; set; } // 原量-蛹体
public decimal JianCengLv { get; set; } // 茧层率(%)
public decimal GlYongTi { get; set; } // 蛹体干量
public decimal GlJianCeng { get; set; } // 茧层干量
public decimal GlZhuJian { get; set; } // 煮茧后干量
public decimal JianCengLvGongLiang { get; set; } // 公量茧层率(%)
public decimal TuoJiaoLv { get; set; } // 脱胶率(%)
public int LsJiangCan { get; set; } // 僵蚕粒数
public int LsNeiRan { get; set; } // 内染粒数
public int LsMeiYong { get; set; } // 霉蛹粒数
public int LsMaoJiao { get; set; } // 毛脚粒数
public decimal BlJiangCan { get; set; } // 僵蚕比例(%)
public decimal BlNeiRan { get; set; } // 内染比例(%)
public decimal BlMeiYong { get; set; } // 霉蛹比例(%)
public decimal BlMaoJiao { get; set; } // 毛脚比例(%)
}
@@ -0,0 +1,45 @@
using FreeSql.DataAnnotations;
using F9WebAiTest.Domain.Common;
namespace F9WebAiTest.Domain.Entities.QC.Yjss;
/// <summary>
/// 选茧调查(对应 F9 biz_prod_qc_yjss_dc_xjdc):
/// 11 个茧别重量 + 11 个比例 + 公斤茧粒数 + 解舒样茧粒数/重量。
/// </summary>
[Table(Name = "qc_yjss_dc_xjdc")]
public class YjssDcXjdc : BaseEntity
{
public long YjssId { get; set; } // 主表 Id(原料小样 / 综合样)
public int YjssType { get; set; } = 1; // 样品类型:1=原料小样 2=综合样(两张主表 Id 各自自增,需判别)
// ---- 茧重(g)----
public decimal ZlLtj { get; set; } // 联统茧
public decimal ZlHwj { get; set; } // 好五级茧
public decimal ZlWj { get; set; } // 五级茧
public decimal ZlMianJian { get; set; } // 绵茧
public decimal ZlHuangBan { get; set; } // 黄斑
public decimal ZlQuJian { get; set; } // 蛆茧
public decimal ZlShuangGong { get; set; } // 双宫
public decimal ZlXueJian { get; set; } // 血茧
public decimal ZlBaoPi { get; set; } // 薄皮
public decimal ZlJianYi { get; set; } // 茧衣
public decimal ZlMeiJian { get; set; } // 霉茧
// ---- 比例(%)----
public decimal BlLtj { get; set; }
public decimal BlHwj { get; set; }
public decimal BlWj { get; set; }
public decimal BlMianJian { get; set; }
public decimal BlHuangBan { get; set; }
public decimal BlQuJian { get; set; }
public decimal BlShuangGong { get; set; }
public decimal BlXueJian { get; set; }
public decimal BlBaoPi { get; set; }
public decimal BlJianYi { get; set; }
public decimal BlMeiJian { get; set; }
public int GongJinLiShu { get; set; } // 公斤茧粒数
public int JieShuLiShu { get; set; } // 解舒样茧粒数
public decimal JieShuZhongLiang { get; set; } // 解舒样茧重量(g)
}
@@ -0,0 +1,41 @@
using FreeSql.DataAnnotations;
using F9WebAiTest.Domain.Common;
namespace F9WebAiTest.Domain.Entities.QC.Yjss;
/// <summary>
/// 样茧试缫——原料小样主表(对应 F9 biz_prod_qc_yjss_main_ylxy)。
/// 能力范围:选茧调查 / 解舒调查 / 清洁洁净。
/// </summary>
[Table(Name = "qc_yjss_main_ylxy")]
public class YjssMainYlxy : BaseEntity
{
public long YlzkId { get; set; } // 原料庄口 Id
public DateTime Date { get; set; } = DateTime.Today; // 日期
public int Type { get; set; } = 1; // 类型:1定价抽样 2入库抽样 3鲜茧抽样
public decimal ZhongLiang { get; set; } // 样茧重量(g)
public decimal HuiChaoLv { get; set; } // 回潮率(%)
public string Memo { get; set; } = ""; // 备注
public long XjdcId { get; set; } // 选茧调查 Id
public int JsdcCt { get; set; } // 解舒调查记录数
public long QjjjId { get; set; } // 清洁洁净 Id
}
/// <summary>
/// 样茧试缫——综合样主表(对应 F9 biz_prod_qc_yjss_main_zhy)。
/// 能力范围:选茧 / 解舒 / 茧幅 / 切剖 / 清洁洁净 / 茧丝百回纤度。
/// </summary>
[Table(Name = "qc_yjss_main_zhy")]
public class YjssMainZhy : BaseEntity
{
public long GyzkId { get; set; } // 工艺庄口 Id
public DateTime Date { get; set; } = DateTime.Today; // 日期
public decimal ZhongLiang { get; set; } // 样茧重量(g)
public string Memo { get; set; } = ""; // 备注
public long XjdcId { get; set; } // 选茧调查 Id
public int JsdcCt { get; set; } // 解舒调查记录数
public long JfdcId { get; set; } // 茧幅调查 Id
public long QpdcId { get; set; } // 切剖调查 Id
public long QjjjId { get; set; } // 清洁洁净 Id
public int JsbhxdCt { get; set; } // 茧丝百回纤度记录数
}
@@ -0,0 +1,130 @@
using FreeSql.DataAnnotations;
using F9WebAiTest.Domain.Events.SYS.Reports;
namespace F9WebAiTest.Domain.Entities.SYS.Reports;
/// <summary>
/// 报表定义(Grid++Report 模板)。每张报表对应一个 .grf 模板与一段数据查询 SQL。
/// 权限模型:创建/更新报表时自动同步一条 Permission(ResourceType=报表),
/// 角色在「角色管理 - 报表权限」中分配给用户后即可在报表中心查看。
/// </summary>
[Table(Name = "sys_reports")]
public class Report : AggregateRoot
{
[Column(Name = "code")]
public string Code { get; private set; } = ""; // 唯一标识,作为权限码的 resourceIdentity
[Column(Name = "name")]
public string Name { get; private set; } = ""; // 显示名称
[Column(Name = "category")]
public string Category { get; private set; } = "通用"; // 分类
[Column(Name = "description")]
public string Description { get; private set; } = ""; // 描述
/// <summary>数据集 SQL(必须以 SELECT 开头)。FreeSql ExecuteDataTable 执行。</summary>
[Column(Name = "data_sql")]
public string DataSql { get; private set; } = "";
/// <summary>数据集查询参数定义 JSON:[{"name":"deptId","label":"部门","type":"int","default":0}]</summary>
[Column(Name = "data_params")]
public string DataParams { get; private set; } = "[]";
/// <summary>
/// 查询配置 JSON(F9 ReportConfig 约定):
/// { "DsName":"查询名(后端 IReportDataProvider 解析)", "ViewerType":0,
/// "Parms":[{ "Name":"q_yearmonth","Label":"账期","Prompt":"","IsRequired":false,
/// "ControlType":"AntdUI.DatePickerYearMonth","Ds_Static":null,"Ds_Service":null,"DefaultValue":"" }] }
/// DsName 优先于 DataSql。
/// </summary>
[Column(Name = "config")]
public string Config { get; private set; } = "";
/// <summary>
/// 报表模板文件 Id(对齐 F9 Report.ReportFileId)。
/// 模板实例存储在 ReportFile(sys_report_files.DesignContent),与报表定义分离。
/// </summary>
[Column(Name = "report_file_id")]
public long ReportFileId { get; private set; }
// ---------- 以下三个字段已废弃(历史遗留列,仅供启动时把旧模板迁移到 ReportFile 读取) ----------
// 新代码一律通过 ReportFile.DesignContent 读写模板。
/// <summary>[已废弃] 旧版模板二进制,迁移到 ReportFile 后不再写入</summary>
[Column(Name = "template_data", MapType = typeof(byte[]))]
public byte[]? TemplateData { get; private set; }
[Column(Name = "template_name")]
public string TemplateName { get; private set; } = "";
[Column(Name = "template_size")]
public int TemplateSize { get; private set; }
[Column(Name = "sort_order")]
public int SortOrder { get; private set; }
[Column(Name = "is_active")]
public bool IsActive { get; private set; } = true;
public Report() { }
public Report(long id, string code, string name, string category, string description, string dataSql, string dataParams, int sortOrder, string config = "")
{
Id = id;
Code = code ?? "";
Name = name ?? "";
Category = string.IsNullOrWhiteSpace(category) ? "通用" : category.Trim();
Description = description ?? "";
DataSql = dataSql ?? "";
DataParams = string.IsNullOrWhiteSpace(dataParams) ? "[]" : dataParams;
Config = config ?? "";
SortOrder = sortOrder;
IsActive = true;
CreatedAt = DateTime.Now;
AddDomainEvent(new Report_ChangedDomainEvent(Id));
}
public void UpdateBasic(string code, string name, string category, string description, string dataSql, string dataParams, int sortOrder, string? config = null)
{
Code = code ?? Code;
Name = name ?? Name;
Category = string.IsNullOrWhiteSpace(category) ? Category : category.Trim();
Description = description ?? Description;
DataSql = dataSql ?? DataSql;
DataParams = string.IsNullOrWhiteSpace(dataParams) ? DataParams : dataParams;
Config = config ?? Config;
SortOrder = sortOrder;
UpdatedAt = DateTime.Now;
AddDomainEvent(new Report_ChangedDomainEvent(Id));
}
/// <summary>[已废弃] 旧版把模板二进制直接写在报表上;现模板存于 ReportFile.DesignContent</summary>
public void UploadTemplate(byte[] data, string fileName)
{
TemplateData = data ?? Array.Empty<byte>();
TemplateName = fileName ?? "";
TemplateSize = TemplateData.Length;
UpdatedAt = DateTime.Now;
AddDomainEvent(new Report_ChangedDomainEvent(Id));
}
/// <summary>绑定模板文件实例(对齐 F9:Report.ReportFileId → ReportFile)</summary>
public void BindReportFile(long reportFileId)
{
ReportFileId = reportFileId;
UpdatedAt = DateTime.Now;
AddDomainEvent(new Report_ChangedDomainEvent(Id));
}
/// <summary>迁移完成后清空废弃的旧模板字段</summary>
public void ClearLegacyTemplate()
{
TemplateData = null;
TemplateName = "";
TemplateSize = 0;
}
public void Activate() { IsActive = true; UpdatedAt = DateTime.Now; AddDomainEvent(new Report_ChangedDomainEvent(Id)); }
public void Deactivate() { IsActive = false; UpdatedAt = DateTime.Now; AddDomainEvent(new Report_ChangedDomainEvent(Id)); }
}
@@ -0,0 +1,35 @@
using FreeSql.DataAnnotations;
namespace F9WebAiTest.Domain.Entities.SYS.Reports;
/// <summary>
/// 报表模板文件(对齐 BBIT.F9.Domain.Entities.SYS.Reports.ReportFile)。
/// 报表模板作为独立实体与报表定义(Report)分离存储,Report 通过 ReportFileId 关联其模板实例。
/// .grf 本质是 UTF-8 JSON 文本,故以文本(DesignContent)保存。
/// </summary>
[Table(Name = "sys_report_files")]
public class ReportFile : BusinessEntity
{
[Column(Name = "report_id")]
public long ReportId { get; private set; }
/// <summary>模板设计内容(.grf 的 JSON 文本)</summary>
[Column(Name = "design_content", StringLength = -2)]
public string DesignContent { get; private set; } = "";
public ReportFile() { }
public ReportFile(long id, long reportId, string designContent)
{
Id = id;
ReportId = reportId;
DesignContent = designContent ?? "";
CreatedAt = DateTime.Now;
}
public void UpdateContent(string designContent)
{
DesignContent = designContent ?? "";
UpdatedAt = DateTime.Now;
}
}