namespace Admin.NET.Plugin.ApprovalFlow.Service; /// /// 审批意见模板服务 /// [ApiDescriptionSettings(ApprovalFlowConst.GroupName, Order = 60)] public class FlowCommentTemplateService : IDynamicApiController, ITransient { private readonly SqlSugarRepository _rep; private readonly UserManager _userManager; public FlowCommentTemplateService( SqlSugarRepository rep, UserManager userManager) { _rep = rep; _userManager = userManager; } /// /// 获取当前用户可用的意见模板列表(公共 + 个人) /// [HttpGet] [ApiDescriptionSettings(Name = "MyList")] [DisplayName("获取意见模板列表")] public async Task> MyList() { var userId = _userManager.UserId; return await _rep.AsQueryable() .Where(t => t.IsEnabled && (t.UserId == null || t.UserId == userId)) .OrderBy(t => t.OrderNo) .Select(t => new CommentTemplateOutput { Id = t.Id, Content = t.Content, IsSystem = t.IsSystem, IsMine = t.UserId != null && t.UserId == userId, }) .ToListAsync(); } /// /// 新增个人意见模板 /// [HttpPost] [ApiDescriptionSettings(Name = "Add")] [DisplayName("新增意见模板")] public async Task Add(CommentTemplateAddInput input) { var entity = new ApprovalFlowCommentTemplate { Content = input.Content, OrderNo = input.OrderNo ?? 100, IsSystem = false, UserId = _userManager.UserId, IsEnabled = true, }; await _rep.InsertAsync(entity); return entity.Id; } /// /// 删除个人意见模板(系统预置不可删) /// [HttpPost] [ApiDescriptionSettings(Name = "Delete")] [DisplayName("删除意见模板")] public async Task Delete(BaseIdInput input) { var entity = await _rep.GetByIdAsync(input.Id) ?? throw Oops.Oh("模板不存在"); if (entity.IsSystem) throw Oops.Oh("系统预置模板不可删除"); if (entity.UserId != _userManager.UserId) throw Oops.Oh("只能删除自己的模板"); await _rep.DeleteByIdAsync(input.Id); } /// /// 初始化系统预置意见模板(幂等) /// [NonAction] public async Task EnsureSystemTemplates() { var exists = await _rep.AsQueryable().AnyAsync(t => t.IsSystem); if (exists) return; var templates = new[] { "同意", "已审核,无问题", "情况属实,同意处理", "不同意,请补充材料后重新提交", "退回修改", "已阅,请按流程继续推进", "金额/数量有误,请核实后重新提交", "紧急事项,加急处理", }; var order = 10; foreach (var content in templates) { await _rep.InsertAsync(new ApprovalFlowCommentTemplate { Content = content, OrderNo = order, IsSystem = true, UserId = null, IsEnabled = true, }); order += 10; } } } public class CommentTemplateOutput { public long Id { get; set; } public string Content { get; set; } = ""; public bool IsSystem { get; set; } public bool IsMine { get; set; } } public class CommentTemplateAddInput { [Required, MaxLength(512)] public string Content { get; set; } = ""; public int? OrderNo { get; set; } }