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; }
}