Service.cs.vm 8.0 KB

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