CampGroupApplicationService.cs 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  1. using Abp.Application.Services.Dto;
  2. using Abp.Auditing;
  3. using Abp.Authorization;
  4. using Abp.Domain.Repositories;
  5. using Abp.Domain.Uow;
  6. using Abp.Runtime.Caching;
  7. using IwbZero.AppServiceBase;
  8. using IwbZero.Auditing;
  9. using IwbZero.ToolCommon.StringModel;
  10. using System.Collections.Generic;
  11. using System.Data.Entity;
  12. using System.Linq;
  13. using System.Threading.Tasks;
  14. using System.Web.Mvc;
  15. using System.Web.WebPages;
  16. using WeApp.Authorization;
  17. using WeApp.Configuration;
  18. using WeApp.TrainingCamp;
  19. using WeApp.TrainingCampGroup.Dto;
  20. namespace WeApp.TrainingCampGroup
  21. {
  22. [AbpAuthorize, AuditLog("培训营分组维护")]
  23. public class CampGroupAppService : IwbAsyncCrudAppService<CampGroupInfo, CampGroupDto, string, IwbPagedRequestDto, CampGroupCreateDto, CampGroupUpdateDto>, ICampGroupAppService
  24. {
  25. public CampGroupAppService(
  26. ICacheManager cacheManager,
  27. IRepository<CampGroupInfo, string> repository, IRepository<CampInfo, string> campRepository) : base(repository, "Id")
  28. {
  29. CampRepository = campRepository;
  30. CacheManager = cacheManager;
  31. }
  32. protected IRepository<CampInfo, string> CampRepository { get; }
  33. protected override bool KeyIsAuto { get; set; } = false;
  34. #region GetSelect
  35. [DisableAuditing]
  36. public override async Task<List<SelectListItem>> GetSelectList()
  37. {
  38. var list = await Repository.GetAllListAsync();
  39. var sList = new List<SelectListItem> { new SelectListItem { Text = @"请选择...", Value = "", Selected = true } };
  40. foreach (var l in list)
  41. {
  42. //sList.Add(new SelectListItem { Value = l.Id, Text = l. });
  43. }
  44. return sList;
  45. }
  46. [DisableAuditing]
  47. public override async Task<string> GetSelectStr()
  48. {
  49. var list = await Repository.GetAllListAsync();
  50. string str = "<option value=\"\" selected>请选择...</option>";
  51. foreach (var l in list)
  52. {
  53. //str += $"<option value=\"{l.Id}\">{l.}</option>";
  54. }
  55. return str;
  56. }
  57. #endregion GetSelect
  58. #region CURD
  59. [AbpAuthorize(PermissionNames.PagesTrainMgGroupMgCreate)]
  60. public override async Task Create(CampGroupCreateDto input)
  61. {
  62. var camp = await CampRepository.FirstOrDefaultAsync(a => a.Id == input.CampNo);
  63. if (camp.CampState != CampStateDefinition.New && camp.CampState != CampStateDefinition.Audit)
  64. {
  65. CheckErrors("培训营已运行(或结束),不能再操作!");
  66. }
  67. input.Id = await GetGroupNo(input.CampNo);
  68. input.CampGroupState = CampGroupStateDefinition.New;
  69. await CreateEntity(input);
  70. }
  71. [AbpAuthorize(PermissionNames.PagesTrainMgGroupMgUpdate)]
  72. public override async Task Update(CampGroupUpdateDto input)
  73. {
  74. var camp = await CampRepository.FirstOrDefaultAsync(a => a.Id == input.CampNo);
  75. if (camp.CampState != CampStateDefinition.New && camp.CampState != CampStateDefinition.Audit)
  76. {
  77. CheckErrors("培训营已运行(或结束),不能再操作!");
  78. }
  79. var entity = await Repository.FirstOrDefaultAsync(a => a.Id == input.Id);
  80. if (entity == null)
  81. {
  82. CheckErrors($"未查询编号为【{input.Id}】到分组!");
  83. return;
  84. }
  85. if (entity.CampGroupState != CampGroupStateDefinition.New)
  86. {
  87. CheckErrors($"新建状态的培训营才能修改!");
  88. }
  89. await UpdateEntity(input);
  90. }
  91. [AbpAuthorize(PermissionNames.PagesTrainMgGroupMgDelete)]
  92. public override async Task Delete(EntityDto<string> input)
  93. {
  94. var entity = await Repository.FirstOrDefaultAsync(a => a.Id == input.Id);
  95. if (entity == null)
  96. {
  97. CheckErrors($"未查询编号为【{input.Id}】到分组!");
  98. return;
  99. }
  100. if (entity.CampGroupState != CampGroupStateDefinition.New)
  101. {
  102. CheckErrors($"新建状态的培训营才能删除!");
  103. }
  104. await base.Delete(input);
  105. }
  106. [DisableAuditing]
  107. [AbpAuthorize(PermissionNames.PagesTrainMgGroupMgQuery)]
  108. public override async Task<PagedResultDto<CampGroupDto>> GetAll(IwbPagedRequestDto input)
  109. {
  110. var query = Repository.GetAllIncluding(a => a.CampInfo);
  111. query = ApplyFilter(query, input);
  112. var totalCount = await AsyncQueryableExecuter.CountAsync(query);
  113. query = ApplySorting(query, input);
  114. query = string.IsNullOrEmpty(input.Sorting) ? query.OrderBy(a => a.Id) : ApplyPaging(query, input);
  115. var entities = await AsyncQueryableExecuter.ToListAsync(query);
  116. var dtoList = new PagedResultDto<CampGroupDto>(totalCount, entities.Select(MapToEntityDto).ToList());
  117. return dtoList;
  118. }
  119. #region GetEntity/Dto
  120. /// <summary>
  121. /// 查询实体Dto
  122. /// </summary>
  123. /// <param name="input"></param>
  124. /// <returns></returns>
  125. [DisableAuditing]
  126. [AbpAuthorize(PermissionNames.PagesTrainMgGroupMgQuery)]
  127. public override async Task<CampGroupDto> GetDto(EntityDto<string> input)
  128. {
  129. var entity = await GetEntity(input);
  130. return MapToEntityDto(entity);
  131. }
  132. /// <summary>
  133. /// 查询实体Dto
  134. /// </summary>
  135. /// <param name="id"></param>
  136. /// <returns></returns>
  137. [DisableAuditing]
  138. [AbpAuthorize(PermissionNames.PagesTrainMgGroupMgQuery)]
  139. public override async Task<CampGroupDto> GetDtoById(string id)
  140. {
  141. var entity = await GetEntityById(id);
  142. return MapToEntityDto(entity);
  143. }
  144. /// <summary>
  145. /// 查询实体Dto(需指明自定义字段)
  146. /// </summary>
  147. /// <param name="no"></param>
  148. /// <returns></returns>
  149. [DisableAuditing]
  150. [AbpAuthorize(PermissionNames.PagesTrainMgGroupMgQuery)]
  151. public override async Task<CampGroupDto> GetDtoByNo(string no)
  152. {
  153. var entity = await GetEntityByNo(no);
  154. return MapToEntityDto(entity);
  155. }
  156. /// <summary>
  157. /// 查询实体
  158. /// </summary>
  159. /// <param name="input"></param>
  160. /// <returns></returns>
  161. [DisableAuditing]
  162. [AbpAuthorize(PermissionNames.PagesTrainMgGroupMgQuery)]
  163. public override async Task<CampGroupInfo> GetEntity(EntityDto<string> input)
  164. {
  165. var entity = await GetEntityById(input.Id);
  166. return entity;
  167. }
  168. /// <summary>
  169. /// 查询实体
  170. /// </summary>
  171. /// <param name="id"></param>
  172. /// <returns></returns>
  173. [DisableAuditing]
  174. [AbpAuthorize(PermissionNames.PagesTrainMgGroupMgQuery)]
  175. public override async Task<CampGroupInfo> GetEntityById(string id)
  176. {
  177. return await Repository.FirstOrDefaultAsync(a => a.Id == id);
  178. }
  179. /// <summary>
  180. /// 查询实体(需指明自定义字段)
  181. /// </summary>
  182. /// <param name="no"></param>
  183. /// <returns></returns>
  184. [DisableAuditing]
  185. [AbpAuthorize(PermissionNames.PagesTrainMgGroupMgQuery)]
  186. public override async Task<CampGroupInfo> GetEntityByNo(string no)
  187. {
  188. //CheckGetPermission();
  189. if (string.IsNullOrEmpty(KeyFiledName))
  190. {
  191. ThrowError("NoKeyFieldName");
  192. }
  193. return await base.GetEntityByNo(no);
  194. }
  195. #endregion GetEntity/Dto
  196. #region Hide
  197. ///// <summary>
  198. ///// 根据给定的<see cref="IwbPagedRequestDto"/>创建 <see cref="IQueryable{CampGroupInfo}"/>过滤查询.
  199. ///// </summary>
  200. ///// <param name="input">The input.</param>
  201. //protected override IQueryable<CampGroupInfo> CreateFilteredQuery(IwbPagedRequestDto input)
  202. //{
  203. // var query = Repository.GetAll();
  204. // var pagedInput = input as IIwbPagedRequest;
  205. // if (pagedInput == null)
  206. // {
  207. // return query;
  208. // }
  209. // if (!string.IsNullOrEmpty(pagedInput.KeyWords))
  210. // {
  211. // object keyWords = pagedInput.KeyWords;
  212. // LambdaObject obj = new LambdaObject()
  213. // {
  214. // FieldType = (LambdaFieldType)pagedInput.FieldType,
  215. // FieldName = pagedInput.KeyField,
  216. // FieldValue = keyWords,
  217. // ExpType = (LambdaExpType)pagedInput.ExpType
  218. // };
  219. // var exp = obj.GetExp<CampGroupInfo>();
  220. // query = exp != null ? query.Where(exp) : query;
  221. // }
  222. // if (pagedInput.SearchList != null && pagedInput.SearchList.Count > 0)
  223. // {
  224. // List<LambdaObject> objList = new List<LambdaObject>();
  225. // foreach (var o in pagedInput.SearchList)
  226. // {
  227. // if (string.IsNullOrEmpty(o.KeyWords))
  228. // continue;
  229. // object keyWords = o.KeyWords;
  230. // objList.Add(new LambdaObject
  231. // {
  232. // FieldType = (LambdaFieldType)o.FieldType,
  233. // FieldName = o.KeyField,
  234. // FieldValue = keyWords,
  235. // ExpType = (LambdaExpType)o.ExpType
  236. // });
  237. // }
  238. // var exp = objList.GetExp<CampGroupInfo>();
  239. // query = exp != null ? query.Where(exp) : query;
  240. // }
  241. // return query;
  242. //}
  243. //protected override IQueryable<CampGroupInfo> ApplySorting(IQueryable<CampGroupInfo> query, IwbPagedRequestDto input)
  244. //{
  245. // return query.OrderBy(a => a.No);
  246. //}
  247. //protected override IQueryable<CampGroupInfo> ApplyPaging(IQueryable<CampGroupInfo> query, IwbPagedRequestDto input)
  248. //{
  249. // if (input is IPagedResultRequest pagedInput)
  250. // {
  251. // return query.Skip(pagedInput.SkipCount).Take(pagedInput.MaxResultCount);
  252. // }
  253. // return query;
  254. //}
  255. #endregion Hide
  256. #endregion CURD
  257. private async Task<string> GetGroupNo(string campNo)
  258. {
  259. if (StringExtensions.IsEmpty(campNo))
  260. {
  261. CheckErrors("培训营编号不能为空!");
  262. }
  263. var no = $"{campNo}_";
  264. int index = 0;
  265. using (CurrentUnitOfWork.DisableFilter(AbpDataFilters.SoftDelete))
  266. {
  267. var lastEntity = await Repository.GetAll().Where(a => a.CampNo == campNo).OrderByDescending(a => a.Id)
  268. .FirstOrDefaultAsync();
  269. if (lastEntity != null)
  270. {
  271. index = lastEntity.Id.Substring(no.Length).ValI();
  272. }
  273. }
  274. index++;
  275. return $"{no}{index.LeftPad(3)}";
  276. }
  277. }
  278. }