From e234189af330d62295a944ebdea37c43e3546fc6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=8D=E5=81=9A=E7=A0=81=E5=86=9C?= <599854767@qq.com> Date: Mon, 13 Nov 2023 19:50:35 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E6=96=B0=E5=A2=9E=E9=82=AE?= =?UTF-8?q?=E4=BB=B6=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/System/EmailTplController.cs | 103 ++++++++++++++++++ ZR.Admin.WebApi/wwwroot/data.xlsx | Bin 37539 -> 37928 bytes ZR.ServiceCore/Model/Dto/EmailTplDto.cs | 39 +++++++ ZR.ServiceCore/Model/EmailTpl.cs | 17 +++ ZR.ServiceCore/Model/SysBase.cs | 3 - ZR.ServiceCore/Services/EmailTplService.cs | 70 ++++++++++++ .../Services/IService/IEmailTplService.cs | 21 ++++ ZR.ServiceCore/Services/SeedDataService.cs | 2 +- ZR.ServiceCore/SqlSugar/DataPermi.cs | 1 - ZR.ServiceCore/SqlSugar/InitTable.cs | 3 +- 10 files changed, 253 insertions(+), 6 deletions(-) create mode 100644 ZR.Admin.WebApi/Controllers/System/EmailTplController.cs create mode 100644 ZR.ServiceCore/Model/Dto/EmailTplDto.cs create mode 100644 ZR.ServiceCore/Model/EmailTpl.cs create mode 100644 ZR.ServiceCore/Services/EmailTplService.cs create mode 100644 ZR.ServiceCore/Services/IService/IEmailTplService.cs diff --git a/ZR.Admin.WebApi/Controllers/System/EmailTplController.cs b/ZR.Admin.WebApi/Controllers/System/EmailTplController.cs new file mode 100644 index 0000000..2b3f2b1 --- /dev/null +++ b/ZR.Admin.WebApi/Controllers/System/EmailTplController.cs @@ -0,0 +1,103 @@ +using Microsoft.AspNetCore.Mvc; +using ZR.Admin.WebApi.Filters; +using ZR.Model.Dto; +using ZR.Service.System.ISystemService; +using ZR.ServiceCore.Model; + +//创建时间:2023-11-12 +namespace ZR.Admin.WebApi.Controllers +{ + /// + /// 邮件模板 + /// + [Verify] + [Route("system/EmailTpl")] + public class EmailTplController : BaseController + { + /// + /// 邮件模板接口 + /// + private readonly IEmailTplService _EmailTplService; + + public EmailTplController(IEmailTplService EmailTplService) + { + _EmailTplService = EmailTplService; + } + + /// + /// 查询邮件模板列表 + /// + /// + /// + [HttpGet("list")] + [ActionPermissionFilter(Permission = "tool:emailtpl:list")] + public IActionResult QueryEmailTpl([FromQuery] EmailTplQueryDto parm) + { + var response = _EmailTplService.GetList(parm); + return SUCCESS(response); + } + + + /// + /// 查询邮件模板详情 + /// + /// + /// + [HttpGet("{Id}")] + public IActionResult GetEmailTpl(int Id) + { + var response = _EmailTplService.GetInfo(Id); + + var info = response.Adapt(); + return SUCCESS(info); + } + + /// + /// 添加邮件模板 + /// + /// + [HttpPost] + [ActionPermissionFilter(Permission = "tool:emailtpl:add")] + [Log(Title = "邮件模板", BusinessType = BusinessType.INSERT)] + public IActionResult AddEmailTpl([FromBody] EmailTplDto parm) + { + var modal = parm.Adapt().ToCreate(HttpContext); + + var response = _EmailTplService.AddEmailTpl(modal); + + return SUCCESS(response); + } + + /// + /// 更新邮件模板 + /// + /// + [HttpPut] + [ActionPermissionFilter(Permission = "tool:emailtpl:edit")] + [Log(Title = "邮件模板", BusinessType = BusinessType.UPDATE)] + public IActionResult UpdateEmailTpl([FromBody] EmailTplDto parm) + { + var modal = parm.Adapt().ToUpdate(HttpContext); + var response = _EmailTplService.UpdateEmailTpl(modal); + + return ToResponse(response); + } + + /// + /// 删除邮件模板 + /// + /// + [HttpDelete("{ids}")] + [ActionPermissionFilter(Permission = "tool:emailtpl:delete")] + [Log(Title = "邮件模板", BusinessType = BusinessType.DELETE)] + public IActionResult DeleteEmailTpl(string ids) + { + int[] idsArr = Tools.SpitIntArrary(ids); + if (idsArr.Length <= 0) { return ToResponse(ApiResult.Error($"删除失败Id 不能为空")); } + + var response = _EmailTplService.Delete(idsArr); + + return ToResponse(response); + } + } +} \ No newline at end of file diff --git a/ZR.Admin.WebApi/wwwroot/data.xlsx b/ZR.Admin.WebApi/wwwroot/data.xlsx index 002ef395d7b6d56907a60c2d09ed25a9421c3eb7..6c84d585a033dd482cfc8c006490acb952625779 100644 GIT binary patch delta 20572 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 delta 20171 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 z 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 diff --git a/ZR.ServiceCore/Model/Dto/EmailTplDto.cs b/ZR.ServiceCore/Model/Dto/EmailTplDto.cs new file mode 100644 index 0000000..e574ff3 --- /dev/null +++ b/ZR.ServiceCore/Model/Dto/EmailTplDto.cs @@ -0,0 +1,39 @@ +using System.ComponentModel.DataAnnotations; + +namespace ZR.Model.Dto +{ + /// + /// 邮件模板查询对象 + /// + public class EmailTplQueryDto : PagerInfo + { + public string Name { get; set; } + } + + /// + /// 邮件模板输入输出对象 + /// + public class EmailTplDto + { + public int? Id { get; set; } + + [Required(ErrorMessage = "Name不能为空")] + public string Name { get; set; } + + [Required(ErrorMessage = "模板内容不能为空")] + public string Content { get; set; } + + public string CreateBy { get; set; } + + public DateTime? CreateTime { get; set; } + + public string UpdateBy { get; set; } + + public DateTime? UpdateTime { get; set; } + + public string Remark { get; set; } + + + + } +} \ No newline at end of file diff --git a/ZR.ServiceCore/Model/EmailTpl.cs b/ZR.ServiceCore/Model/EmailTpl.cs new file mode 100644 index 0000000..aa0f3c9 --- /dev/null +++ b/ZR.ServiceCore/Model/EmailTpl.cs @@ -0,0 +1,17 @@ +using ZR.Model.System; + +namespace ZR.ServiceCore.Model +{ + /// + /// 邮件发送模板 + /// + [SugarTable("emailTpl")] + public class EmailTpl : SysBase + { + [SugarColumn(IsPrimaryKey = true, IsIdentity = true)] + public int Id { get; set; } + public string Name { get; set; } + [SugarColumn(ColumnDescription = "模板内容", ColumnDataType = StaticConfig.CodeFirst_BigString)] + public string Content { get; set; } + } +} diff --git a/ZR.ServiceCore/Model/SysBase.cs b/ZR.ServiceCore/Model/SysBase.cs index b46ce8e..3c07885 100644 --- a/ZR.ServiceCore/Model/SysBase.cs +++ b/ZR.ServiceCore/Model/SysBase.cs @@ -1,7 +1,4 @@ using MiniExcelLibs.Attributes; -using Newtonsoft.Json; -using SqlSugar; -using System; namespace ZR.Model.System { diff --git a/ZR.ServiceCore/Services/EmailTplService.cs b/ZR.ServiceCore/Services/EmailTplService.cs new file mode 100644 index 0000000..4619921 --- /dev/null +++ b/ZR.ServiceCore/Services/EmailTplService.cs @@ -0,0 +1,70 @@ +using Infrastructure.Attribute; +using ZR.Model; +using ZR.Model.Dto; +using ZR.Repository; +using ZR.Service.System.ISystemService; +using ZR.ServiceCore.Model; + +namespace ZR.Service.System +{ + /// + /// 邮件模板Service业务层处理 + /// + [AppService(ServiceType = typeof(IEmailTplService), ServiceLifetime = LifeTime.Transient)] + public class EmailTplService : BaseService, IEmailTplService + { + /// + /// 查询邮件模板列表 + /// + /// + /// + public PagedInfo GetList(EmailTplQueryDto parm) + { + var predicate = Expressionable.Create(); + + predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.Name), it => it.Name == parm.Name); + var response = Queryable() + //.OrderBy("Id desc") + .Where(predicate.ToExpression()) + .ToPage(parm); + + return response; + } + + + /// + /// 获取详情 + /// + /// + /// + public EmailTpl GetInfo(int Id) + { + var response = Queryable() + .Where(x => x.Id == Id) + .First(); + + return response; + } + + /// + /// 添加邮件模板 + /// + /// + /// + public EmailTpl AddEmailTpl(EmailTpl model) + { + return Context.Insertable(model).ExecuteReturnEntity(); + } + + /// + /// 修改邮件模板 + /// + /// + /// + public int UpdateEmailTpl(EmailTpl model) + { + return Update(model, true); + } + + } +} \ No newline at end of file diff --git a/ZR.ServiceCore/Services/IService/IEmailTplService.cs b/ZR.ServiceCore/Services/IService/IEmailTplService.cs new file mode 100644 index 0000000..d28e00a --- /dev/null +++ b/ZR.ServiceCore/Services/IService/IEmailTplService.cs @@ -0,0 +1,21 @@ +using ZR.Model; +using ZR.Model.Dto; +using ZR.ServiceCore.Model; + +namespace ZR.Service.System.ISystemService +{ + /// + /// 邮件模板service接口 + /// + public interface IEmailTplService : IBaseService + { + PagedInfo GetList(EmailTplQueryDto parm); + + EmailTpl GetInfo(int Id); + + EmailTpl AddEmailTpl(EmailTpl parm); + + int UpdateEmailTpl(EmailTpl parm); + + } +} diff --git a/ZR.ServiceCore/Services/SeedDataService.cs b/ZR.ServiceCore/Services/SeedDataService.cs index 72ac52e..fe88b98 100644 --- a/ZR.ServiceCore/Services/SeedDataService.cs +++ b/ZR.ServiceCore/Services/SeedDataService.cs @@ -197,7 +197,7 @@ namespace ZR.Service.System .SplitInsert(it => it.NotAny()) .WhereColumns(it => it.Name) .ToStorage(); - var result = x.AsInsertable.OffIdentity().ExecuteCommand(); + var result = x.AsInsertable.ExecuteCommand(); string msg = $"[字典数据] 插入{x.InsertList.Count} 错误{x.ErrorList.Count} 总共{x.TotalList.Count}"; return (msg, x.ErrorList, x.IgnoreList); diff --git a/ZR.ServiceCore/SqlSugar/DataPermi.cs b/ZR.ServiceCore/SqlSugar/DataPermi.cs index 508eae0..0de5d4b 100644 --- a/ZR.ServiceCore/SqlSugar/DataPermi.cs +++ b/ZR.ServiceCore/SqlSugar/DataPermi.cs @@ -1,6 +1,5 @@ using Infrastructure; using SqlSugar.IOC; -using ZR.Model.Business; using ZR.Model.System; namespace ZR.ServiceCore.SqlSugar diff --git a/ZR.ServiceCore/SqlSugar/InitTable.cs b/ZR.ServiceCore/SqlSugar/InitTable.cs index 88a4f90..fc22837 100644 --- a/ZR.ServiceCore/SqlSugar/InitTable.cs +++ b/ZR.ServiceCore/SqlSugar/InitTable.cs @@ -2,6 +2,7 @@ using ZR.Model.Models; using ZR.Model.System; using ZR.Model.System.Generate; +using ZR.ServiceCore.Model; namespace ZR.ServiceCore.SqlSugar { @@ -48,7 +49,7 @@ namespace ZR.ServiceCore.SqlSugar db.CodeFirst.InitTables(typeof(SysDictData)); db.CodeFirst.InitTables(typeof(SysDictType)); db.CodeFirst.InitTables(typeof(SqlDiffLog)); + db.CodeFirst.InitTables(typeof(EmailTpl)); } - } }