Service.cs.vm 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. using Admin.NET.Core.Service;
  2. using @(@Model.NameSpace).Entity;
  3. using Microsoft.AspNetCore.Http;
  4. @{
  5. string joinTableName = "u";
  6. Dictionary<string, int> definedObjects = new Dictionary<string, int>();
  7. bool haveLikeCdt = false;
  8. foreach (var column in Model.TableField){
  9. if (column.QueryWhether == "Y" && column.QueryType == "like"){
  10. haveLikeCdt = true;
  11. }
  12. }
  13. }
  14. namespace @Model.NameSpace;
  15. /// <summary>
  16. /// @(@Model.BusName)服务
  17. /// </summary>
  18. [ApiDescriptionSettings(@(@Model.ProjectLastName)Const.GroupName, Order = 100)]
  19. public class @(@Model.ClassName)Service : IDynamicApiController, ITransient
  20. {
  21. private readonly SqlSugarRepository<@(@Model.ClassName)> _rep;
  22. public @(@Model.ClassName)Service(SqlSugarRepository<@(@Model.ClassName)> rep)
  23. {
  24. _rep = rep;
  25. }
  26. /// <summary>
  27. /// 分页查询@(@Model.BusName)
  28. /// </summary>
  29. /// <param name="input"></param>
  30. /// <returns></returns>
  31. [HttpPost]
  32. [ApiDescriptionSettings(Name = "Page")]
  33. public async Task<SqlSugarPagedList<@(@Model.ClassName)Output>> Page(@(@Model.ClassName)Input input)
  34. {
  35. @if (haveLikeCdt) {
  36. @:input.SearchKey = input.SearchKey?.Trim();
  37. }
  38. var query = _rep.AsQueryable()
  39. @{string conditionFlag = "";}
  40. @if (haveLikeCdt) {
  41. @:.WhereIF(!string.IsNullOrEmpty(input.SearchKey), u =>
  42. @foreach (var column in Model.TableField){
  43. if (@column.QueryWhether == "Y" && column.QueryType == "like"){
  44. @:@(conditionFlag)u.@(@column.PropertyName).Contains(input.SearchKey)
  45. conditionFlag="|| ";
  46. }
  47. }
  48. @:)
  49. }
  50. @foreach (var column in Model.TableField){
  51. if (@column.QueryWhether == "Y"){
  52. if (@column.NetType?.TrimEnd('?') == "string"){
  53. if(@column.QueryType == "like"){
  54. @:.WhereIF(!string.IsNullOrWhiteSpace(input.@column.PropertyName), u => u.@(@column.PropertyName).Contains(input.@(@column.PropertyName).Trim()))
  55. }else{
  56. @:.WhereIF(!string.IsNullOrWhiteSpace(input.@column.PropertyName), u => u.@(@column.PropertyName) @column.QueryType input.@(@column.PropertyName))
  57. }
  58. }else if(@column.NetType?.TrimEnd('?') == "int" || @column.NetType?.TrimEnd('?') == "long"){
  59. @:.WhereIF(input.@column.PropertyName>0, u => u.@(@column.PropertyName) @column.QueryType input.@(@column.PropertyName))
  60. }else if(@column.NetType?.TrimEnd('?') == "DateTime" && @column.QueryType == "~"){
  61. @:.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])
  62. }else if(@column.NetType?.TrimEnd('?').EndsWith("Enum") == true) {
  63. @:.WhereIF(input.@(@column.PropertyName).HasValue, u => u.@(@column.PropertyName) @column.QueryType input.@(@column.PropertyName))
  64. }
  65. }
  66. }
  67. @if(Model.IsJoinTable){
  68. @://处理外键和TreeSelector相关字段的连接
  69. @foreach (var column in Model.TableField){
  70. if(@column.EffectType == "fk"){
  71. joinTableName += ", " + column.PropertyName.ToLower();
  72. @:.LeftJoin<@(@column.FkEntityName)>((@(@joinTableName)) => u.@(@column.PropertyName) == @(@column.PropertyName.ToLower()).Id )
  73. } else if(@column.EffectType == "ApiTreeSelect"){
  74. joinTableName += ", " + column.PropertyName.ToLower();
  75. @:.LeftJoin<@(@column.FkEntityName)>((@(@joinTableName)) => u.@(@column.PropertyName) == @(@column.PropertyName.ToLower()).@(@column.ValueColumn) )
  76. }
  77. }
  78. @:.OrderBy(u => u.CreateTime)
  79. @:.Select((@(@joinTableName)) => new @(@Model.ClassName)Output
  80. @:{
  81. @foreach (var column in Model.TableField){
  82. if(@column.EffectType == "fk"){
  83. @:@(@column.PropertyName) = u.@(@column.PropertyName),
  84. @:@(@column.PropertyName)@(@column.FkColumnName) = @(@column.PropertyName.ToLower()).@(@column.FkColumnName),
  85. } else if(@column.EffectType == "ApiTreeSelect"){
  86. @:@(@column.PropertyName) = u.@(@column.PropertyName),
  87. @:@(@column.PropertyName)@(@column.DisplayColumn) = @(@column.PropertyName.ToLower()).@(@column.DisplayColumn),
  88. } else if(@column.NetType?.TrimEnd('?').EndsWith("Enum") == true){
  89. @:@(@column.PropertyName) = (@(@column.NetType))u.@(@column.PropertyName),
  90. } else {
  91. @:@(@column.PropertyName) = u.@(@column.PropertyName),
  92. }
  93. }
  94. @:});
  95. @foreach (var column in Model.TableField){
  96. if(@column.EffectType == "fk"){
  97. }else if(@column.EffectType == "Upload"){
  98. @://.Mapper(c => c.@(@column.PropertyName)Attachment, c => c.@(@column.PropertyName))
  99. }
  100. }
  101. } else {
  102. @:.Select<@(@Model.ClassName)Output>();
  103. }
  104. return await query.OrderBuilder(input).ToPagedListAsync(input.Page, input.PageSize);
  105. }
  106. /// <summary>
  107. /// 增加@(@Model.BusName)
  108. /// </summary>
  109. /// <param name="input"></param>
  110. /// <returns></returns>
  111. [HttpPost]
  112. [ApiDescriptionSettings(Name = "Add")]
  113. public async Task<long> Add(Add@(@Model.ClassName)Input input)
  114. {
  115. var entity = input.Adapt<@(@Model.ClassName)>();
  116. await _rep.InsertAsync(entity);
  117. return entity.Id;
  118. }
  119. /// <summary>
  120. /// 删除@(@Model.BusName)
  121. /// </summary>
  122. /// <param name="input"></param>
  123. /// <returns></returns>
  124. [HttpPost]
  125. [ApiDescriptionSettings(Name = "Delete")]
  126. public async Task Delete(Delete@(@Model.ClassName)Input input)
  127. {
  128. @foreach (var column in Model.TableField){
  129. if (@column.ColumnKey == "True"){
  130. @:var entity = await _rep.GetFirstAsync(u => u.@(@column.PropertyName) == input.@(@column.PropertyName)) ?? throw Oops.Oh(ErrorCodeEnum.D1002);
  131. }
  132. }
  133. await _rep.FakeDeleteAsync(entity); //假删除
  134. //await _rep.DeleteAsync(entity); //真删除
  135. }
  136. /// <summary>
  137. /// 更新@(@Model.BusName)
  138. /// </summary>
  139. /// <param name="input"></param>
  140. /// <returns></returns>
  141. [HttpPost]
  142. [ApiDescriptionSettings(Name = "Update")]
  143. public async Task Update(Update@(@Model.ClassName)Input input)
  144. {
  145. var entity = input.Adapt<@(@Model.ClassName)>();
  146. await _rep.AsUpdateable(entity).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommandAsync();
  147. }
  148. /// <summary>
  149. /// 获取@(@Model.BusName)
  150. /// </summary>
  151. /// <param name="input"></param>
  152. /// <returns></returns>
  153. [HttpGet]
  154. [ApiDescriptionSettings(Name = "Detail")]
  155. public async Task<@(@Model.ClassName)> Detail([FromQuery] QueryById@(@Model.ClassName)Input input)
  156. {
  157. @foreach (var column in Model.TableField){
  158. if (@column.ColumnKey == "True"){
  159. @:return await _rep.GetFirstAsync(u => u.@(@column.PropertyName) == input.@(@column.PropertyName));
  160. }
  161. }
  162. }
  163. /// <summary>
  164. /// 获取@(@Model.BusName)列表
  165. /// </summary>
  166. /// <param name="input"></param>
  167. /// <returns></returns>
  168. [HttpGet]
  169. [ApiDescriptionSettings(Name = "List")]
  170. public async Task<List<@(@Model.ClassName)Output>> List([FromQuery] @(@Model.ClassName)Input input)
  171. {
  172. return await _rep.AsQueryable().Select<@(@Model.ClassName)Output>().ToListAsync();
  173. }
  174. @foreach (var column in Model.TableField){
  175. if(@column.EffectType == "fk" && (@column.WhetherAddUpdate == "Y" || column.QueryWhether == "Y")){
  176. @:/// <summary>
  177. @:/// 获取@(@column.ColumnComment)列表
  178. @:/// </summary>
  179. @:/// <param name="input"></param>
  180. @:/// <returns></returns>
  181. @:[ApiDescriptionSettings(Name = "@(@column.FkEntityName)@(@column.PropertyName)Dropdown"), HttpGet]
  182. @:public async Task<dynamic> @(@column.FkEntityName)@(@column.PropertyName)Dropdown()
  183. @:{
  184. @:return await _rep.Context.Queryable<@(@column.FkEntityName)>()
  185. @:.Select(u => new
  186. @:{
  187. @:Label = u.@(@column.FkColumnName),
  188. @:Value = u.Id
  189. @:}
  190. @:).ToListAsync();
  191. @:}
  192. }
  193. }
  194. @foreach (var column in Model.TableField){
  195. if(@column.EffectType == "Upload"){
  196. @:/// <summary>
  197. @:/// 上传@(@column.ColumnComment)
  198. @:/// </summary>
  199. @:/// <param name="file"></param>
  200. @:/// <returns></returns>
  201. @:[ApiDescriptionSettings(Name = "Upload@(@column.PropertyName)"), HttpPost]
  202. @:public async Task<SysFile> Upload@(@column.PropertyName)([Required] IFormFile file)
  203. @:{
  204. @:var service = App.GetRequiredService<SysFileService>();
  205. @:return await service.UploadFile(new FileUploadInput { File = file, Path = "upload/@(@column.PropertyName)" });
  206. @:}
  207. }
  208. }
  209. @foreach (var column in Model.TableField){
  210. if(@column.EffectType == "ApiTreeSelect" && !definedObjects.ContainsKey("@(@column.FkEntityName)Tree")){
  211. @{definedObjects.Add("@(@column.FkEntityName)Tree", 1);}
  212. @:[HttpGet("@(@column.FkEntityName)Tree")]
  213. @:public async Task<dynamic> @(@column.FkEntityName)Tree()
  214. @:{
  215. @:return await _rep.Context.Queryable<@(@column.FkEntityName)>().ToTreeAsync(u => u.Children, u => u.@(@column.PidColumn), 0);
  216. @:}
  217. }
  218. }
  219. }