refactor: 重构勋章模块,拆分规则独立管理,优化期刊绑定逻辑

1.  新增MedalRule实体类,将勋章条件拆分独立为规则管理
2.  重构Medal相关服务和DTO,支持勋章规则的增删改查
3.  简化Journal绑定逻辑,移除冗余的实例化期刊校验和字段
4.  重命名部分实体类,统一命名前缀
5.  为勋章相关操作添加事务管理,优化异常处理逻辑
This commit is contained in:
glz
2026-06-05 15:52:11 +08:00
parent f9b79417a0
commit eab84747a5
9 changed files with 471 additions and 193 deletions

View File

@ -13,7 +13,7 @@ public class BindJournalInput
/// <summary>
/// 实例化期刊Id扫码解析的具体期刊实例Id可选
/// </summary>
public long? JournalInstanceId { get; set; }
public long Id { get; set; }
/// <summary>
/// 关联类型: Read(已读), Favorite(收藏), Subscribe(订阅),默认 Subscribe
@ -41,11 +41,6 @@ public class BindJournalOutput
/// </summary>
public long JournalId { get; set; }
/// <summary>
/// 实例化期刊Id
/// </summary>
public long? JournalInstanceId { get; set; }
/// <summary>
/// 关联类型
/// </summary>
@ -75,7 +70,7 @@ public class UserJournalQueryInput : PageQueryModel
/// <summary>
/// 实例化期刊Id
/// </summary>
public long? JournalInstanceId { get; set; }
public long Id { get; set; }
/// <summary>
/// 关联类型: Read, Favorite, Subscribe

View File

@ -20,16 +20,6 @@ public class MedalInput
/// </summary>
public string? ImageUrl { get; set; }
/// <summary>
/// 条件类型: EvolutionCount, FeedingCount等
/// </summary>
public string ConditionType { get; set; } = string.Empty;
/// <summary>
/// 条件阈值
/// </summary>
public int ConditionValue { get; set; }
/// <summary>
/// 排序
/// </summary>
@ -44,6 +34,11 @@ public class MedalInput
/// 书id
/// </summary>
public long JournalId { get; set; }
/// <summary>
/// 勋章规则列表
/// </summary>
public List<MedalRuleInput>? Rules { get; set; }
}
/// <summary>
@ -71,16 +66,6 @@ public class MedalOutput
/// </summary>
public string? ImageUrl { get; set; }
/// <summary>
/// 条件类型
/// </summary>
public string ConditionType { get; set; } = string.Empty;
/// <summary>
/// 条件阈值
/// </summary>
public int ConditionValue { get; set; }
/// <summary>
/// 排序
/// </summary>
@ -96,6 +81,11 @@ public class MedalOutput
/// </summary>
public long JournalId { get; set; }
/// <summary>
/// 勋章规则列表
/// </summary>
public List<MedalRuleOutput>? Rules { get; set; }
/// <summary>
/// 创建人
/// </summary>
@ -131,11 +121,148 @@ public class MedalQueryInput : PageQueryModel
/// 勋章的类型: Pet, Community
/// </summary>
public string? Type { get; set; }
}
/// <summary>
/// 勋章规则输入
/// </summary>
public class MedalRuleInput
{
/// <summary>
/// 目标表名JournalPageTask、UserAction等
/// </summary>
public string TargetTable { get; set; } = string.Empty;
/// <summary>
/// 条件类型
/// 目标字段名TotalScore、LoginDays等
/// </summary>
public string? ConditionType { get; set; }
public string TargetField { get; set; } = string.Empty;
/// <summary>
/// 比较运算符: >=, >, =, <=, <
/// </summary>
public string Operator { get; set; } = ">=";
/// <summary>
/// 阈值数量
/// </summary>
public int ThresholdValue { get; set; }
/// <summary>
/// 额外筛选条件JSON格式
/// </summary>
public string? FilterCondition { get; set; }
/// <summary>
/// 时间范围类型: All/CurrentMonth/CurrentWeek/Last7Days/Custom
/// </summary>
public string? DateRangeType { get; set; }
/// <summary>
/// 自定义起始时间
/// </summary>
public DateTime? DateRangeStart { get; set; }
/// <summary>
/// 自定义结束时间
/// </summary>
public DateTime? DateRangeEnd { get; set; }
/// <summary>
/// 多规则间的逻辑关系: AND/OR
/// </summary>
public string LogicOperator { get; set; } = "AND";
/// <summary>
/// 规则执行顺序
/// </summary>
public int RuleOrder { get; set; }
/// <summary>
/// 规则说明
/// </summary>
public string? Description { get; set; }
}
/// <summary>
/// 勋章规则输出
/// </summary>
public class MedalRuleOutput
{
/// <summary>
/// 规则ID
/// </summary>
public long Id { get; set; }
/// <summary>
/// 关联的勋章ID
/// </summary>
public long MedalId { get; set; }
/// <summary>
/// 目标表名
/// </summary>
public string TargetTable { get; set; } = string.Empty;
/// <summary>
/// 目标字段名
/// </summary>
public string TargetField { get; set; } = string.Empty;
/// <summary>
/// 比较运算符
/// </summary>
public string Operator { get; set; } = string.Empty;
/// <summary>
/// 阈值数量
/// </summary>
public int ThresholdValue { get; set; }
/// <summary>
/// 额外筛选条件
/// </summary>
public string? FilterCondition { get; set; }
/// <summary>
/// 时间范围类型
/// </summary>
public string? DateRangeType { get; set; }
/// <summary>
/// 自定义起始时间
/// </summary>
public DateTime? DateRangeStart { get; set; }
/// <summary>
/// 自定义结束时间
/// </summary>
public DateTime? DateRangeEnd { get; set; }
/// <summary>
/// 多规则间的逻辑关系
/// </summary>
public string LogicOperator { get; set; } = string.Empty;
/// <summary>
/// 规则执行顺序
/// </summary>
public int RuleOrder { get; set; }
/// <summary>
/// 规则说明
/// </summary>
public string? Description { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreatedAt { get; set; }
/// <summary>
/// 更新时间
/// </summary>
public DateTime? UpdatedAt { get; set; }
}
/// <summary>
@ -163,16 +290,6 @@ public class WxMedalListOutput
/// </summary>
public string? ImageUrl { get; set; }
/// <summary>
/// 条件类型
/// </summary>
public string ConditionType { get; set; } = string.Empty;
/// <summary>
/// 条件阈值
/// </summary>
public int ConditionValue { get; set; }
/// <summary>
/// 排序
/// </summary>