You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

138 lines
4.7 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

// ============================================================================
// 【文件说明】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;
/// <summary>
/// 产品信息关联明细行 DTO。
/// <para>
/// 【C# 语法知识点 - internal sealed class】
/// internal只能在当前程序集Assembly内访问。
/// sealed密封类不能被继承。
///
/// 为什么用 internal
/// 这个类只在插件内部使用,不需要暴露给外部。
///
/// 为什么用 sealed
/// 1. 这个类不需要被继承
/// 2. 密封类可以有编译器优化(虚方法调用转直接调用)
///
/// 对比 Java
/// Java 用 package-private不写访问修饰符实现类似 internal 的效果。
/// Java 用 final 关键字实现 sealed 的效果:
/// final class HwProductInfoJoinDetailRow extends HwProductInfo { ... }
/// </para>
/// <para>
/// 【继承设计】
/// : HwProductInfo 表示继承自产品信息实体类。
/// 这样这个类就包含了产品的所有字段,再加上明细字段。
///
/// 对比 Java
/// Java 的继承写法一样:
/// class HwProductInfoJoinDetailRow extends HwProductInfo { ... }
/// </para>
/// <para>
/// 【字段命名约定】
/// Sub 前缀表示"子表字段"(明细表字段):
/// - SubProductInfoDetailId明细ID
/// - SubProductInfoDetailTitle明细标题
/// - ...
///
/// 这样可以区分主表字段和子表字段,避免命名冲突。
/// </para>
/// </summary>
internal sealed class HwProductInfoJoinDetailRow : HwProductInfo
{
/// <summary>
/// 明细ID子表字段
/// </summary>
[SugarColumn(ColumnName = "sub_product_info_detail_id")]
public long? SubProductInfoDetailId { get; set; }
/// <summary>
/// 明细父ID子表字段
/// </summary>
[SugarColumn(ColumnName = "sub_parent_id")]
public long? SubParentId { get; set; }
/// <summary>
/// 明细所属产品ID子表字段
/// </summary>
[SugarColumn(ColumnName = "sub_product_info_id")]
public long? SubProductInfoId { get; set; }
/// <summary>
/// 明细标题(子表字段)。
/// </summary>
[SugarColumn(ColumnName = "sub_product_info_detail_title")]
public string SubProductInfoDetailTitle { get; set; }
/// <summary>
/// 明细描述(子表字段)。
/// </summary>
[SugarColumn(ColumnName = "sub_product_info_detail_desc")]
public string SubProductInfoDetailDesc { get; set; }
/// <summary>
/// 明细排序号(子表字段)。
/// </summary>
[SugarColumn(ColumnName = "sub_product_info_detail_order")]
public long? SubProductInfoDetailOrder { get; set; }
/// <summary>
/// 明细图片URL子表字段
/// </summary>
[SugarColumn(ColumnName = "sub_product_info_detail_pic")]
public string SubProductInfoDetailPic { get; set; }
/// <summary>
/// 明细祖级列表(子表字段)。
/// </summary>
[SugarColumn(ColumnName = "sub_ancestors")]
public string SubAncestors { get; set; }
/// <summary>
/// 明细创建时间(子表字段)。
/// </summary>
[SugarColumn(ColumnName = "sub_create_time")]
public DateTime? SubCreateTime { get; set; }
/// <summary>
/// 明细创建人(子表字段)。
/// </summary>
[SugarColumn(ColumnName = "sub_create_by")]
public string SubCreateBy { get; set; }
/// <summary>
/// 明细更新时间(子表字段)。
/// </summary>
[SugarColumn(ColumnName = "sub_update_time")]
public DateTime? SubUpdateTime { get; set; }
/// <summary>
/// 明细更新人(子表字段)。
/// </summary>
[SugarColumn(ColumnName = "sub_update_by")]
public string SubUpdateBy { get; set; }
}