Service.cs.vm 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. // Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
  2. //
  3. // 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
  4. //
  5. // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
  6. using Admin.NET.Core.Service;
  7. using Microsoft.AspNetCore.Http;
  8. @{
  9. string joinTableName = "u";
  10. Dictionary<string, int> definedObjects = new Dictionary<string, int>();
  11. bool haveLikeCdt = false;
  12. foreach (var column in Model.TableField){
  13. if (column.QueryWhether == "Y" && column.QueryType == "like"){
  14. haveLikeCdt = true;
  15. }
  16. }
  17. }
  18. namespace @Model.NameSpace;
  19. /// <summary>
  20. /// @(@Model.BusName)服务
  21. /// </summary>
  22. [ApiDescriptionSettings(@(@Model.ProjectLastName)Const.GroupName, Order = 100)]
  23. public class @(@Model.ClassName)Service : IDynamicApiController, ITransient
  24. {
  25. private readonly SqlSugarRepository<@(@Model.ClassName)> _@(@Model.LowerClassName)Rep;
  26. public @(@Model.ClassName)Service(SqlSugarRepository<@(@Model.ClassName)> @(@Model.LowerClassName)Rep)
  27. {
  28. _@(@Model.LowerClassName)Rep = @(@Model.LowerClassName)Rep;
  29. }
  30. /// <summary>
  31. /// 分页查询@(@Model.BusName)
  32. /// </summary>
  33. /// <param name="input"></param>
  34. /// <returns></returns>
  35. [HttpPost]
  36. [ApiDescriptionSettings(Name = "Page")]
  37. [DisplayName("分页查询@(@Model.BusName)")]
  38. public async Task<SqlSugarPagedList<@(@Model.ClassName)Output>> Page(Page@(@Model.ClassName)Input input)
  39. {
  40. @if (haveLikeCdt) {
  41. @:input.SearchKey = input.SearchKey?.Trim();
  42. }
  43. var query = _@(@Model.LowerClassName)Rep.AsQueryable()
  44. @{string conditionFlag = "";}
  45. @if (haveLikeCdt) {
  46. @:.WhereIF(!string.IsNullOrEmpty(input.SearchKey), u =>
  47. @foreach (var column in Model.TableField){
  48. if (@column.QueryWhether == "Y" && column.QueryType == "like"){
  49. @:@(conditionFlag)u.@(@column.PropertyName).Contains(input.SearchKey)
  50. conditionFlag="|| ";
  51. }
  52. }
  53. @:)
  54. }
  55. @foreach (var column in Model.TableField){
  56. if (@column.QueryWhether == "Y"){
  57. if (@column.NetType?.TrimEnd('?') == "string"){
  58. if(@column.QueryType == "like"){
  59. @:.WhereIF(!string.IsNullOrWhiteSpace(input.@column.PropertyName), u => u.@(@column.PropertyName).Contains(input.@(@column.PropertyName).Trim()))
  60. }else{
  61. @:.WhereIF(!string.IsNullOrWhiteSpace(input.@column.PropertyName), u => u.@(@column.PropertyName) @column.QueryType input.@(@column.PropertyName))
  62. }
  63. }else if(@column.NetType?.TrimEnd('?') == "int" || @column.NetType?.TrimEnd('?') == "long"){
  64. @:.WhereIF(input.@column.PropertyName>0, u => u.@(@column.PropertyName) @column.QueryType input.@(@column.PropertyName))
  65. }else if(@column.NetType?.TrimEnd('?') == "DateTime" && @column.QueryType == "~"){
  66. @:.WhereIF(input.@(@column.PropertyName)Range != null && input.@(@column.PropertyName)Range.Length == 2, u => u.@(@column.PropertyName) >= input.@(@column.PropertyName)Range[0] && u.@(@column.PropertyName) <= input.@(@column.PropertyName)Range[1])
  67. }else if(@column.NetType?.TrimEnd('?').EndsWith("Enum") == true) {
  68. @:.WhereIF(input.@(@column.PropertyName).HasValue, u => u.@(@column.PropertyName) @column.QueryType input.@(@column.PropertyName))
  69. }
  70. }
  71. }
  72. @if(Model.IsJoinTable){
  73. @://处理外键和TreeSelector相关字段的连接
  74. @foreach (var column in Model.TableField){
  75. if(@column.EffectType == "fk"){
  76. joinTableName += ", " + column.PropertyName.ToLower();
  77. @:.LeftJoin<@(@column.FkEntityName)>((@(@joinTableName)) => u.@(@column.PropertyName) == @(@column.PropertyName.ToLower()).@(@column.FkLinkColumnName) )
  78. } else if(@column.EffectType == "ApiTreeSelect"){
  79. joinTableName += ", " + column.PropertyName.ToLower();
  80. @:.LeftJoin<@(@column.FkEntityName)>((@(@joinTableName)) => u.@(@column.PropertyName) == @(@column.PropertyName.ToLower()).@(@column.ValueColumn) )
  81. }
  82. }
  83. @:.Select((@(@joinTableName)) => new @(@Model.ClassName)Output
  84. @:{
  85. @foreach (var column in Model.TableField){
  86. if(@column.EffectType == "fk"){
  87. @:@(@column.PropertyName) = u.@(@column.PropertyName),
  88. @:@(@column.PropertyName)@(@column.FkColumnName) = @(@column.PropertyName.ToLower()).@(@column.FkColumnName),
  89. } else if(@column.EffectType == "ApiTreeSelect"){
  90. @:@(@column.PropertyName) = u.@(@column.PropertyName),
  91. @:@(@column.PropertyName)@(@column.DisplayColumn) = @(@column.PropertyName.ToLower()).@(@column.DisplayColumn),
  92. } else if(@column.NetType?.TrimEnd('?').EndsWith("Enum") == true){
  93. @:@(@column.PropertyName) = (@(@column.NetType))u.@(@column.PropertyName),
  94. } else {
  95. @:@(@column.PropertyName) = u.@(@column.PropertyName),
  96. }
  97. }
  98. @:});
  99. @foreach (var column in Model.TableField){
  100. if(@column.EffectType == "fk"){
  101. }else if(@column.EffectType == "Upload"){
  102. @://.Mapper(c => c.@(@column.PropertyName)Attachment, c => c.@(@column.PropertyName))
  103. }
  104. }
  105. } else {
  106. @:.Select<@(@Model.ClassName)Output>();
  107. }
  108. return await query.OrderBuilder(input, "u.").ToPagedListAsync(input.Page, input.PageSize);
  109. }
  110. /// <summary>
  111. /// 增加@(@Model.BusName)
  112. /// </summary>
  113. /// <param name="input"></param>
  114. /// <returns></returns>
  115. [HttpPost]
  116. [ApiDescriptionSettings(Name = "Add")]
  117. [DisplayName("增加@(@Model.BusName)")]
  118. public async Task<long> Add(Add@(@Model.ClassName)Input input)
  119. {
  120. var entity = input.Adapt<@(@Model.ClassName)>();
  121. await _@(@Model.LowerClassName)Rep.InsertAsync(entity);
  122. return entity.Id;
  123. }
  124. /// <summary>
  125. /// 删除@(@Model.BusName)
  126. /// </summary>
  127. /// <param name="input"></param>
  128. /// <returns></returns>
  129. [HttpPost]
  130. [ApiDescriptionSettings(Name = "Delete")]
  131. [DisplayName("删除@(@Model.BusName)")]
  132. public async Task Delete(Delete@(@Model.ClassName)Input input)
  133. {
  134. @foreach (var column in Model.TableField){
  135. if (@column.ColumnKey == "True"){
  136. @:var entity = await _@(@Model.LowerClassName)Rep.GetFirstAsync(u => u.@(@column.PropertyName) == input.@(@column.PropertyName)) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
  137. }
  138. }
  139. await _@(@Model.LowerClassName)Rep.FakeDeleteAsync(entity); //假删除
  140. //await _@(@Model.LowerClassName)Rep.DeleteAsync(entity); //真删除
  141. }
  142. /// <summary>
  143. /// 更新@(@Model.BusName)
  144. /// </summary>
  145. /// <param name="input"></param>
  146. /// <returns></returns>
  147. [HttpPost]
  148. [ApiDescriptionSettings(Name = "Update")]
  149. [DisplayName("更新@(@Model.BusName)")]
  150. public async Task Update(Update@(@Model.ClassName)Input input)
  151. {
  152. var entity = input.Adapt<@(@Model.ClassName)>();
  153. await _@(@Model.LowerClassName)Rep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
  154. }
  155. /// <summary>
  156. /// 获取@(@Model.BusName)
  157. /// </summary>
  158. /// <param name="input"></param>
  159. /// <returns></returns>
  160. [HttpGet]
  161. [ApiDescriptionSettings(Name = "Detail")]
  162. [DisplayName("获取@(@Model.BusName)")]
  163. public async Task<@(@Model.ClassName)> Detail([FromQuery] QueryById@(@Model.ClassName)Input input)
  164. {
  165. @foreach (var column in Model.TableField){
  166. if (@column.ColumnKey == "True"){
  167. @:return await _@(@Model.LowerClassName)Rep.GetFirstAsync(u => u.@(@column.PropertyName) == input.@(@column.PropertyName));
  168. }
  169. }
  170. }
  171. /// <summary>
  172. /// 获取@(@Model.BusName)列表
  173. /// </summary>
  174. /// <param name="input"></param>
  175. /// <returns></returns>
  176. [HttpGet]
  177. [ApiDescriptionSettings(Name = "List")]
  178. [DisplayName("获取@(@Model.BusName)列表")]
  179. public async Task<List<@(@Model.ClassName)Output>> List([FromQuery] Page@(@Model.ClassName)Input input)
  180. {
  181. return await _@(@Model.LowerClassName)Rep.AsQueryable().Select<@(@Model.ClassName)Output>().ToListAsync();
  182. }
  183. @foreach (var column in Model.TableField){
  184. if(@column.EffectType == "fk" && (@column.WhetherAddUpdate == "Y" || column.QueryWhether == "Y")){
  185. @:/// <summary>
  186. @:/// 获取@(@column.ColumnComment)列表
  187. @:/// </summary>
  188. @:/// <returns></returns>
  189. @:[ApiDescriptionSettings(Name = "@(@column.FkEntityName)@(@column.PropertyName)Dropdown"), HttpGet]
  190. @:[DisplayName("获取@(@column.ColumnComment)列表")]
  191. @:public async Task<dynamic> @(@column.FkEntityName)@(@column.PropertyName)Dropdown()
  192. @:{
  193. @:return await _@(@Model.LowerClassName)Rep.Context.Queryable<@(@column.FkEntityName)>()
  194. @:.Select(u => new
  195. @:{
  196. @:Label = u.@(@column.FkColumnName),
  197. @:Value = u.@(@column.FkLinkColumnName)
  198. @:}
  199. @:).ToListAsync();
  200. @:}
  201. }
  202. }
  203. @foreach (var column in Model.TableField){
  204. if(@column.EffectType == "Upload"){
  205. @:/// <summary>
  206. @:/// 上传@(@column.ColumnComment)
  207. @:/// </summary>
  208. @:/// <param name="file"></param>
  209. @:/// <returns></returns>
  210. @:[ApiDescriptionSettings(Name = "Upload@(@column.PropertyName)"), HttpPost]
  211. @:[DisplayName("上传@(@column.ColumnComment)")]
  212. @:public async Task<SysFile> Upload@(@column.PropertyName)([Required] IFormFile file)
  213. @:{
  214. @:var service = App.GetRequiredService<SysFileService>();
  215. @:return await service.UploadFile(new FileUploadInput { File = file, Path = "upload/@(@column.PropertyName)" });
  216. @:}
  217. }
  218. }
  219. @foreach (var column in Model.TableField){
  220. if(@column.EffectType == "ApiTreeSelect" && !definedObjects.ContainsKey("@(@column.FkEntityName)Tree")){
  221. @{definedObjects.Add("@(@column.FkEntityName)Tree", 1);}
  222. @:[HttpGet("@(@column.FkEntityName)Tree")]
  223. @:[DisplayName("获取@(@column.FkEntityName)Tree")]
  224. @:public async Task<dynamic> @(@column.FkEntityName)Tree()
  225. @:{
  226. @:return await _@(@Model.LowerClassName)Rep.Context.Queryable<@(@column.FkEntityName)>().ToTreeAsync(u => u.Children, u => u.@(@column.PidColumn), 0);
  227. @:}
  228. }
  229. }
  230. }