// ============================================================================
// 【文件说明】HwProductInfoJoinDetailRow.cs - 产品信息关联明细行 DTO
// ============================================================================
// 这是一个"数据传输对象"(DTO),用于接收 SQL JOIN 查询的扁平结果集。
//
// 【什么是 DTO?】
// DTO = Data Transfer Object(数据传输对象)
// 用于在不同层之间传输数据,不包含业务逻辑。
//
// 【为什么需要这个类?】
// SQL JOIN 查询返回的是"扁平结构":
// 产品ID | 产品名称 | 明细ID | 明细标题 | ...
// 1 | 产品A | 101 | 明细1 | ...
// 1 | 产品A | 102 | 明细2 | ...
//
// 每行包含产品字段 + 明细字段,需要用这个类接收。
// 然后在 Service 层通过 LINQ GroupBy 转换成树形结构。
//
// 【命名约定】
// Row 后缀表示"行",代表 SQL 结果集的一行。
// Join 表示这是 JOIN 查询的结果。
// ============================================================================
namespace Admin.NET.Plugin.HwPortal;
///
/// 产品信息关联明细行 DTO。
///
/// 【C# 语法知识点 - internal sealed class】
/// internal:只能在当前程序集(Assembly)内访问。
/// sealed:密封类,不能被继承。
///
/// 为什么用 internal?
/// 这个类只在插件内部使用,不需要暴露给外部。
///
/// 为什么用 sealed?
/// 1. 这个类不需要被继承
/// 2. 密封类可以有编译器优化(虚方法调用转直接调用)
///
/// 对比 Java:
/// Java 用 package-private(不写访问修饰符)实现类似 internal 的效果。
/// Java 用 final 关键字实现 sealed 的效果:
/// final class HwProductInfoJoinDetailRow extends HwProductInfo { ... }
///
///
/// 【继承设计】
/// : HwProductInfo 表示继承自产品信息实体类。
/// 这样这个类就包含了产品的所有字段,再加上明细字段。
///
/// 对比 Java:
/// Java 的继承写法一样:
/// class HwProductInfoJoinDetailRow extends HwProductInfo { ... }
///
///
/// 【字段命名约定】
/// Sub 前缀表示"子表字段"(明细表字段):
/// - SubProductInfoDetailId:明细ID
/// - SubProductInfoDetailTitle:明细标题
/// - ...
///
/// 这样可以区分主表字段和子表字段,避免命名冲突。
///
///
internal sealed class HwProductInfoJoinDetailRow : HwProductInfo
{
///
/// 明细ID(子表字段)。
///
[SugarColumn(ColumnName = "sub_product_info_detail_id")]
public long? SubProductInfoDetailId { get; set; }
///
/// 明细父ID(子表字段)。
///
[SugarColumn(ColumnName = "sub_parent_id")]
public long? SubParentId { get; set; }
///
/// 明细所属产品ID(子表字段)。
///
[SugarColumn(ColumnName = "sub_product_info_id")]
public long? SubProductInfoId { get; set; }
///
/// 明细标题(子表字段)。
///
[SugarColumn(ColumnName = "sub_product_info_detail_title")]
public string SubProductInfoDetailTitle { get; set; }
///
/// 明细描述(子表字段)。
///
[SugarColumn(ColumnName = "sub_product_info_detail_desc")]
public string SubProductInfoDetailDesc { get; set; }
///
/// 明细排序号(子表字段)。
///
[SugarColumn(ColumnName = "sub_product_info_detail_order")]
public long? SubProductInfoDetailOrder { get; set; }
///
/// 明细图片URL(子表字段)。
///
[SugarColumn(ColumnName = "sub_product_info_detail_pic")]
public string SubProductInfoDetailPic { get; set; }
///
/// 明细祖级列表(子表字段)。
///
[SugarColumn(ColumnName = "sub_ancestors")]
public string SubAncestors { get; set; }
///
/// 明细创建时间(子表字段)。
///
[SugarColumn(ColumnName = "sub_create_time")]
public DateTime? SubCreateTime { get; set; }
///
/// 明细创建人(子表字段)。
///
[SugarColumn(ColumnName = "sub_create_by")]
public string SubCreateBy { get; set; }
///
/// 明细更新时间(子表字段)。
///
[SugarColumn(ColumnName = "sub_update_time")]
public DateTime? SubUpdateTime { get; set; }
///
/// 明细更新人(子表字段)。
///
[SugarColumn(ColumnName = "sub_update_by")]
public string SubUpdateBy { get; set; }
}