完善项目管理

This commit is contained in:
马梓彭 2026-03-01 22:39:00 +08:00
parent ec4ce8dc40
commit 2d433aed38
2 changed files with 158 additions and 271 deletions

View File

@ -10,21 +10,24 @@ namespace YD_Event.Application.Arrangement;
/// </summary>
public class EventArrangementService : ITransient
{
private readonly ISqlSugarRepository<EventProject> _projectRepository;
private readonly ISqlSugarRepository<EventProjectGroup> _groupRepository;
private readonly ISqlSugarRepository<YD_Event.Core.Entities.Project> _projectRepository;
private readonly ISqlSugarRepository<ProjectGroup> _groupRepository;
private readonly ISqlSugarRepository<EventRegistrationPerson> _personRepository;
private readonly ISqlSugarRepository<EventRegistration> _registrationRepository;
private readonly ISqlSugarRepository<ProjectType> _projectTypeRepository;
public EventArrangementService(
ISqlSugarRepository<EventProject> projectRepository,
ISqlSugarRepository<EventProjectGroup> groupRepository,
ISqlSugarRepository<YD_Event.Core.Entities.Project> projectRepository,
ISqlSugarRepository<ProjectGroup> groupRepository,
ISqlSugarRepository<EventRegistrationPerson> personRepository,
ISqlSugarRepository<EventRegistration> registrationRepository)
ISqlSugarRepository<EventRegistration> registrationRepository,
ISqlSugarRepository<ProjectType> projectTypeRepository)
{
_projectRepository = projectRepository;
_groupRepository = groupRepository;
_personRepository = personRepository;
_registrationRepository = registrationRepository;
_projectTypeRepository = projectTypeRepository;
}
/// <summary>
@ -38,6 +41,10 @@ public class EventArrangementService : ITransient
var groups = await _groupRepository.GetListAsync(x => projects.Select(p => p.Id).Contains(x.ProjectId));
// 获取项目类型信息
var typeIds = projects.Select(x => x.ProjectTypeId).Distinct().ToList();
var types = await _projectTypeRepository.GetListAsync(x => typeIds.Contains(x.Id));
// 统计各组别报名人数(仅统计已支付或审核通过的)
var counts = await _personRepository.AsQueryable()
.InnerJoin<EventRegistration>((p, r) => p.RegistrationId == r.Id)
@ -49,11 +56,13 @@ public class EventArrangementService : ITransient
var result = new List<ArrangementProjectListOutput>();
foreach (var proj in projects)
{
var type = types.FirstOrDefault(x => x.Id == proj.ProjectTypeId);
var dto = new ArrangementProjectListOutput
{
ProjectId = proj.Id,
ProjectName = proj.ProjectName,
ProjectType = $"{proj.ProjectMainType}-{proj.ProjectSubType}",
ProjectName = proj.Name,
ProjectType = type?.Name ?? "未知类型",
DurationSeconds = proj.DurationSeconds,
VenueCount = proj.VenueCount,
SortIndex = proj.SortIndex,
@ -91,7 +100,7 @@ public class EventArrangementService : ITransient
{
foreach (var setting in input.Settings)
{
await _projectRepository.UpdateAsync(x => new EventProject
await _projectRepository.UpdateAsync(x => new YD_Event.Core.Entities.Project
{
VenueCount = setting.VenueCount,
SortIndex = setting.SortIndex
@ -108,7 +117,7 @@ public class EventArrangementService : ITransient
// 1. 获取项目(按顺序)
var projects = await _projectRepository.GetListAsync(x => x.EventId == eventId);
projects = projects.OrderBy(x => x.SortIndex).ToList();
var result = new List<ArrangementPreviewOutput>();
// 2. 生成排期
@ -139,7 +148,7 @@ public class EventArrangementService : ITransient
result.Add(new ArrangementPreviewOutput
{
TimeRange = $"{proj.DurationSeconds}''",
ProjectName = proj.ProjectName,
ProjectName = proj.Name,
GroupName = person.GroupName,
TeamName = person.TeamName,
AthleteName = person.Name,

View File

@ -4,110 +4,44 @@
<name>YD_Event.Core</name>
</assembly>
<members>
<member name="T:YD_Event.Core.Certificate.CertificateTemplateConfig">
<summary>
证书模板配置 (用于 Certificate.ConfigJson)
</summary>
</member>
<member name="P:YD_Event.Core.Certificate.CertificateTemplateConfig.Fields">
<summary>
字段列表
</summary>
</member>
<member name="T:YD_Event.Core.Certificate.CertificateField">
<summary>
证书字段定义
</summary>
</member>
<member name="P:YD_Event.Core.Certificate.CertificateField.Key">
<summary>
字段标识 (Name, Project, Rank, Date, CustomText, QrCode)
</summary>
</member>
<member name="P:YD_Event.Core.Certificate.CertificateField.X">
<summary>
X坐标 (mm)
</summary>
</member>
<member name="P:YD_Event.Core.Certificate.CertificateField.Y">
<summary>
Y坐标 (mm)
</summary>
</member>
<member name="P:YD_Event.Core.Certificate.CertificateField.Width">
<summary>
宽度 (mm)
</summary>
</member>
<member name="P:YD_Event.Core.Certificate.CertificateField.Height">
<summary>
高度 (mm)
</summary>
</member>
<member name="P:YD_Event.Core.Certificate.CertificateField.FontSize">
<summary>
字体大小
</summary>
</member>
<member name="P:YD_Event.Core.Certificate.CertificateField.FontFamily">
<summary>
字体 (SimSun, SimHei, SourceHanSansCN)
</summary>
</member>
<member name="P:YD_Event.Core.Certificate.CertificateField.Color">
<summary>
颜色 (Hex: #000000)
</summary>
</member>
<member name="P:YD_Event.Core.Certificate.CertificateField.Alignment">
<summary>
对齐方式 (Left, Center, Right)
</summary>
</member>
<member name="P:YD_Event.Core.Certificate.CertificateField.Text">
<summary>
文本内容 (用于静态文本或格式化字符串,如 "第{0}名")
</summary>
</member>
<member name="P:YD_Event.Core.Certificate.CertificateField.IsBold">
<summary>
是否粗体
</summary>
</member>
<member name="T:YD_Event.Core.Certificate.CertificateRuleConfig">
<summary>
证书发放规则配置 (用于 EventCertificateConfig.RuleJson)
</summary>
</member>
<member name="P:YD_Event.Core.Certificate.CertificateRuleConfig.TargetType">
<summary>
发放对象类型 (Athlete, Coach, Volunteer, Referee)
</summary>
</member>
<member name="P:YD_Event.Core.Certificate.CertificateRuleConfig.RankStart">
<summary>
排名起始 (仅针对运动员)
</summary>
</member>
<member name="P:YD_Event.Core.Certificate.CertificateRuleConfig.RankEnd">
<summary>
排名结束 (仅针对运动员)
</summary>
</member>
<member name="P:YD_Event.Core.Certificate.CertificateRuleConfig.ProjectIds">
<summary>
限制项目ID列表 (为空则不限制)
</summary>
</member>
<member name="P:YD_Event.Core.Certificate.CertificateRuleConfig.AwardLevel">
<summary>
获奖等级 (如:一等奖)
</summary>
</member>
<member name="T:YD_Event.Core.Certificate.CertificateDocument">
<summary>
通用证书PDF文档生成类
结业证书PDF文档生成类
</summary>
<remarks>
实现IDocument接口,用于生成A4大小的结业证书PDF文档
包含证书标题、学员信息、课程名称、证书编号和发证日期等内容
</remarks>
</member>
<member name="F:YD_Event.Core.Certificate.CertificateDocument._model">
<summary>
证书数据模型
</summary>
</member>
<member name="M:YD_Event.Core.Certificate.CertificateDocument.#ctor(YD_Event.Core.Certificate.CertificateModel)">
<summary>
构造函数
</summary>
<param name="model">证书数据模型,包含生成证书所需的所有信息</param>
</member>
<member name="M:YD_Event.Core.Certificate.CertificateDocument.GetMetadata">
<summary>
获取文档元数据
</summary>
<returns>返回默认的文档元数据</returns>
</member>
<member name="M:YD_Event.Core.Certificate.CertificateDocument.Compose(QuestPDF.Infrastructure.IDocumentContainer)">
<summary>
组合文档内容
</summary>
<param name="container">文档容器,用于构建PDF文档结构</param>
<remarks>
构建A4大小的证书页面,包含以下内容:
1. 证书标题 "结 业 证 书"
2. 学员姓名和课程完成信息
3. 证书编号
4. 发证日期
</remarks>
</member>
<member name="T:YD_Event.Core.Certificate.CertificateModel">
<summary>
@ -115,29 +49,28 @@
用于存储和传输证书相关的核心信息
</summary>
</member>
<member name="P:YD_Event.Core.Certificate.CertificateModel.UserName">
<summary>
用户名/学员姓名
对应获取证书的用户真实姓名
</summary>
</member>
<member name="P:YD_Event.Core.Certificate.CertificateModel.CourseName">
<summary>
课程名称
用户完成的课程全称
</summary>
</member>
<member name="P:YD_Event.Core.Certificate.CertificateModel.CertificateNo">
<summary>
证书编号
证书的唯一标识编号,用于验证和查询
</summary>
</member>
<member name="P:YD_Event.Core.Certificate.CertificateModel.IssueDate">
<summary>
颁发日期
</summary>
</member>
<member name="P:YD_Event.Core.Certificate.CertificateModel.Data">
<summary>
基础数据 (Name, Project, Rank, etc.)
</summary>
</member>
<member name="P:YD_Event.Core.Certificate.CertificateModel.BackgroundImage">
<summary>
背景图数据 (二进制)
</summary>
</member>
<member name="P:YD_Event.Core.Certificate.CertificateModel.QrCodeImage">
<summary>
二维码数据 (二进制)
证书的正式签发日期
</summary>
</member>
<member name="P:YD_Event.Core.Config.BloggerInfo.Avatar">
@ -491,82 +424,82 @@
更新时间
</summary>
</member>
<member name="T:YD_Event.Core.Entities.CertificateTemplate">
<member name="T:YD_Event.Core.Entities.Certificate">
<summary>
证书模板表 (certificate_templates)
证书实体类
</summary>
</member>
<member name="P:YD_Event.Core.Entities.CertificateTemplate.Name">
<member name="P:YD_Event.Core.Entities.Certificate.Name">
<summary>
模板名称 (如:通用奖状模板)
证书名称
</summary>
</member>
<member name="P:YD_Event.Core.Entities.CertificateTemplate.DefaultTitle">
<member name="P:YD_Event.Core.Entities.Certificate.Title">
<summary>
默认标题 (如:荣誉证书)
证书标题
</summary>
</member>
<member name="P:YD_Event.Core.Entities.CertificateTemplate.DefaultIssuer">
<member name="P:YD_Event.Core.Entities.Certificate.IssueRule">
<summary>
默认颁发机构
发放规则
</summary>
</member>
<member name="P:YD_Event.Core.Entities.CertificateTemplate.Remark">
<member name="P:YD_Event.Core.Entities.Certificate.Issuer">
<summary>
颁发机构
</summary>
</member>
<member name="P:YD_Event.Core.Entities.Certificate.ValidityDays">
<summary>
有效期(天)
</summary>
</member>
<member name="P:YD_Event.Core.Entities.Certificate.Remark">
<summary>
备注
</summary>
</member>
<member name="P:YD_Event.Core.Entities.CertificateTemplate.BackgroundUrl">
<member name="P:YD_Event.Core.Entities.Certificate.TemplateContent">
<summary>
背景图URL
证书模板内容 (图片URL)
</summary>
</member>
<member name="P:YD_Event.Core.Entities.CertificateTemplate.Width">
<member name="P:YD_Event.Core.Entities.Certificate.QrCodeUrl">
<summary>
模板宽度 (mm)
二维码地址
</summary>
</member>
<member name="P:YD_Event.Core.Entities.CertificateTemplate.Height">
<summary>
模板高度 (mm)
</summary>
</member>
<member name="P:YD_Event.Core.Entities.CertificateTemplate.DefaultConfigJson">
<summary>
动态内容默认配置 (JSON格式)
</summary>
</member>
<member name="P:YD_Event.Core.Entities.CertificateTemplate.Status">
<member name="P:YD_Event.Core.Entities.Certificate.Status">
<summary>
可用状态
</summary>
</member>
<member name="P:YD_Event.Core.Entities.CertificateTemplate.Sort">
<member name="P:YD_Event.Core.Entities.Certificate.Sort">
<summary>
排序值
排序值(值越小越靠前)
</summary>
</member>
<member name="P:YD_Event.Core.Entities.CertificateTemplate.DeleteMark">
<member name="P:YD_Event.Core.Entities.Certificate.DeleteMark">
<summary>
标记删除
</summary>
</member>
<member name="P:YD_Event.Core.Entities.CertificateTemplate.CreatedUserId">
<member name="P:YD_Event.Core.Entities.Certificate.CreatedUserId">
<summary>
创建人
创建人ID
</summary>
</member>
<member name="P:YD_Event.Core.Entities.CertificateTemplate.CreatedTime">
<member name="P:YD_Event.Core.Entities.Certificate.CreatedTime">
<summary>
创建时间
</summary>
</member>
<member name="P:YD_Event.Core.Entities.CertificateTemplate.UpdatedUserId">
<member name="P:YD_Event.Core.Entities.Certificate.UpdatedUserId">
<summary>
更新人
</summary>
</member>
<member name="P:YD_Event.Core.Entities.CertificateTemplate.UpdatedTime">
<member name="P:YD_Event.Core.Entities.Certificate.UpdatedTime">
<summary>
更新时间
</summary>
@ -761,72 +694,107 @@
更新时间
</summary>
</member>
<member name="T:YD_Event.Core.Entities.EventCertificateRule">
<member name="T:YD_Event.Core.Entities.EventCertificate">
<summary>
赛事证书规则关联表 (event_certificates)
赛事证书表
</summary>
</member>
<member name="P:YD_Event.Core.Entities.EventCertificateRule.EventId">
<member name="P:YD_Event.Core.Entities.EventCertificate.ResultId">
<summary>
关联的赛事ID
关联的成绩ID
</summary>
</member>
<member name="P:YD_Event.Core.Entities.EventCertificateRule.TemplateId">
<member name="P:YD_Event.Core.Entities.EventCertificate.ParticipationRecordId">
<summary>
关联的证书模板ID
关联的参赛记录ID
</summary>
</member>
<member name="P:YD_Event.Core.Entities.EventCertificateRule.Name">
<member name="P:YD_Event.Core.Entities.EventCertificate.RegistrationId">
<summary>
规则名称 (如:冠军证书规则)
关联的报名ID
</summary>
</member>
<member name="P:YD_Event.Core.Entities.EventCertificateRule.Title">
<member name="P:YD_Event.Core.Entities.EventCertificate.EventId">
<summary>
证书标题 (覆盖模板默认值)
赛事ID
</summary>
</member>
<member name="P:YD_Event.Core.Entities.EventCertificateRule.Issuer">
<member name="P:YD_Event.Core.Entities.EventCertificate.ProjectId">
<summary>
颁发机构 (覆盖模板默认值)
赛事项目ID
</summary>
</member>
<member name="P:YD_Event.Core.Entities.EventCertificateRule.RuleJson">
<member name="P:YD_Event.Core.Entities.EventCertificate.ParticipantName">
<summary>
发放规则 (JSON格式)
参赛选手姓名
</summary>
</member>
<member name="P:YD_Event.Core.Entities.EventCertificateRule.ConfigJson">
<member name="P:YD_Event.Core.Entities.EventCertificate.GroupName">
<summary>
动态内容配置 (覆盖模板默认值, JSON格式)
参赛组别
</summary>
</member>
<member name="P:YD_Event.Core.Entities.EventCertificateRule.IsEnable">
<member name="P:YD_Event.Core.Entities.EventCertificate.AwardLevel">
<summary>
是否启用
获奖等级:1-特等奖,2-一等奖,3-二等奖,4-三等奖,5-优秀奖
</summary>
</member>
<member name="P:YD_Event.Core.Entities.EventCertificateRule.DeleteMark">
<member name="P:YD_Event.Core.Entities.EventCertificate.CertificateType">
<summary>
证书类型:1-冠军证书,2-亚军证书,3-季军证书,4-优胜证书,5-参与证书
</summary>
</member>
<member name="P:YD_Event.Core.Entities.EventCertificate.CertificateNo">
<summary>
证书编号
</summary>
</member>
<member name="P:YD_Event.Core.Entities.EventCertificate.CertificateUrl">
<summary>
证书URL
</summary>
</member>
<member name="P:YD_Event.Core.Entities.EventCertificate.CertificateStatus">
<summary>
证书状态:0-未生成,1-已生成,2-已发放,3-已撤销
</summary>
</member>
<member name="P:YD_Event.Core.Entities.EventCertificate.GeneratedTime">
<summary>
生成时间
</summary>
</member>
<member name="P:YD_Event.Core.Entities.EventCertificate.IssuedTime">
<summary>
发放时间
</summary>
</member>
<member name="P:YD_Event.Core.Entities.EventCertificate.Remark">
<summary>
备注
</summary>
</member>
<member name="P:YD_Event.Core.Entities.EventCertificate.DeleteMark">
<summary>
标记删除
</summary>
</member>
<member name="P:YD_Event.Core.Entities.EventCertificateRule.CreatedUserId">
<member name="P:YD_Event.Core.Entities.EventCertificate.CreatedUserId">
<summary>
创建人
</summary>
</member>
<member name="P:YD_Event.Core.Entities.EventCertificateRule.CreatedTime">
<member name="P:YD_Event.Core.Entities.EventCertificate.CreatedTime">
<summary>
创建时间
</summary>
</member>
<member name="P:YD_Event.Core.Entities.EventCertificateRule.UpdatedUserId">
<member name="P:YD_Event.Core.Entities.EventCertificate.UpdatedUserId">
<summary>
更新人
</summary>
</member>
<member name="P:YD_Event.Core.Entities.EventCertificateRule.UpdatedTime">
<member name="P:YD_Event.Core.Entities.EventCertificate.UpdatedTime">
<summary>
更新时间
</summary>
@ -3312,96 +3280,6 @@
更新时间
</summary>
</member>
<member name="T:YD_Event.Core.Entities.UserCertificate">
<summary>
用户证书记录表 (user_certificates)
</summary>
</member>
<member name="P:YD_Event.Core.Entities.UserCertificate.EventId">
<summary>
关联的赛事ID
</summary>
</member>
<member name="P:YD_Event.Core.Entities.UserCertificate.RuleId">
<summary>
关联的规则ID
</summary>
</member>
<member name="P:YD_Event.Core.Entities.UserCertificate.ResultId">
<summary>
关联的成绩ID (可选)
</summary>
</member>
<member name="P:YD_Event.Core.Entities.UserCertificate.ProjectId">
<summary>
关联的项目ID (可选)
</summary>
</member>
<member name="P:YD_Event.Core.Entities.UserCertificate.OwnerName">
<summary>
持有人姓名
</summary>
</member>
<member name="P:YD_Event.Core.Entities.UserCertificate.GroupName">
<summary>
组别名称
</summary>
</member>
<member name="P:YD_Event.Core.Entities.UserCertificate.CertificateNo">
<summary>
证书编号
</summary>
</member>
<member name="P:YD_Event.Core.Entities.UserCertificate.FileUrl">
<summary>
证书文件URL
</summary>
</member>
<member name="P:YD_Event.Core.Entities.UserCertificate.Status">
<summary>
证书状态:0-未生成,1-已生成,2-已发放,3-已撤销
</summary>
</member>
<member name="P:YD_Event.Core.Entities.UserCertificate.GeneratedTime">
<summary>
生成时间
</summary>
</member>
<member name="P:YD_Event.Core.Entities.UserCertificate.IssuedTime">
<summary>
发放时间
</summary>
</member>
<member name="P:YD_Event.Core.Entities.UserCertificate.Remark">
<summary>
备注
</summary>
</member>
<member name="P:YD_Event.Core.Entities.UserCertificate.DeleteMark">
<summary>
标记删除
</summary>
</member>
<member name="P:YD_Event.Core.Entities.UserCertificate.CreatedUserId">
<summary>
创建人
</summary>
</member>
<member name="P:YD_Event.Core.Entities.UserCertificate.CreatedTime">
<summary>
创建时间
</summary>
</member>
<member name="P:YD_Event.Core.Entities.UserCertificate.UpdatedUserId">
<summary>
更新人
</summary>
</member>
<member name="P:YD_Event.Core.Entities.UserCertificate.UpdatedTime">
<summary>
更新时间
</summary>
</member>
<member name="T:YD_Event.Core.Entities.UserCoupon">
<summary>
用户优惠券领取记录