using Abp.Application.Services.Dto; using Abp.Auditing; using Abp.Authorization; using Abp.Domain.Repositories; using Abp.Runtime.Caching; using IwbZero.AppServiceBase; using IwbZero.Auditing; using System.Data.Entity; using System.Linq; using System.Threading.Tasks; using WeApp.Authorization; using WeApp.BasicInfo.PhoneQuestion.Dto; using WeApp.Configuration; namespace WeApp.BasicInfo.PhoneQuestion { [AbpAuthorize, AuditLog("电话提问维护")] public class PhoneQuestionAppService : IwbAsyncCrudAppService, IPhoneQuestionAppService { public PhoneQuestionAppService( ICacheManager cacheManager, IRepository repository, IRepository answerRepository) : base(repository, "Id") { AnswerRepository = answerRepository; CacheManager = cacheManager; } public IRepository AnswerRepository { get; } protected override bool KeyIsAuto { get; set; } = false; #region CURD [AbpAuthorize(PermissionNames.PagesBasicMgPhoneQuestionMgCreate)] public override async Task Create(PhoneQuestionCreateDto input) { input.Id = await AppGuidManager.GetNextRecordIdAsync(DataLibType.PhoneQuestion); input.Type = PhoneQuestionTypeDefinition.Default; if (input.Answers.Any()) { foreach (var answerDto in input.Answers) { var answer = new PhoneAnswerInfo() { Content = answerDto.Content, Keywords = answerDto.Keywords, Type = answerDto.Type, QuestionNo = input.Id }; await AnswerRepository.InsertAsync(answer); } } await CreateEntity(input); } [AbpAuthorize(PermissionNames.PagesBasicMgPhoneQuestionMgUpdate)] public override async Task Update(PhoneQuestionUpdateDto input) { var dto = await UpdateEntity(input); if (dto != null && input.Answers.Any()) { var answerOld = await AnswerRepository.GetAll().Where(a => a.QuestionNo == dto.Id).Select(a => a.Id) .ToListAsync(); foreach (var answerDto in input.Answers) { if (answerDto.Id == null || answerDto.Id == 0) { var answer = new PhoneAnswerInfo() { Content = answerDto.Content, Keywords = answerDto.Keywords, Type = answerDto.Type, QuestionNo = dto.Id }; await AnswerRepository.InsertAsync(answer); } else { var answer = await AnswerRepository.FirstOrDefaultAsync(a => a.Id == answerDto.Id); if (answer != null) { answerOld.Remove(answer.Id); answer.Keywords = answerDto.Keywords; answer.Content = answerDto.Content; answer.Type = answerDto.Type; answer.QuestionNo = dto.Id; } await AnswerRepository.UpdateAsync(answer); } } if (answerOld.Any()) { await AnswerRepository.DeleteAsync(a => answerOld.Contains(a.Id)); } } } [AbpAuthorize(PermissionNames.PagesBasicMgPhoneQuestionMgDelete)] public override Task Delete(EntityDto input) { return DeleteEntity(input); } [DisableAuditing] public override async Task> GetAll(IwbPagedRequestDto input) { var query = CreateFilteredQuery(input); query = ApplyFilter(query, input); var totalCount = await AsyncQueryableExecuter.CountAsync(query); query = ApplySorting(query, input); query = ApplyPaging(query, input); var entities = await AsyncQueryableExecuter.ToListAsync(query); var dtoList = new PagedResultDto(totalCount, entities.Select(MapToEntityDto).ToList()); return dtoList; } #region GetEntity/Dto /// /// 查询实体Dto /// /// /// [DisableAuditing] public override async Task GetDto(EntityDto input) { var entity = await GetEntity(input); return MapToEntityDto(entity); } /// /// 查询实体Dto /// /// /// [DisableAuditing] public override async Task GetDtoById(string id) { var entity = await GetEntityById(id); return MapToEntityDto(entity); } /// /// 查询实体Dto(需指明自定义字段) /// /// /// [DisableAuditing] public override async Task GetDtoByNo(string no) { var entity = await GetEntityByNo(no); return MapToEntityDto(entity); } /// /// 查询实体 /// /// /// [DisableAuditing] public override async Task GetEntity(EntityDto input) { var entity = await GetEntityById(input.Id); return entity; } /// /// 查询实体 /// /// /// [DisableAuditing] public override async Task GetEntityById(string id) { return await Repository.FirstOrDefaultAsync(a => a.Id == id); } /// /// 查询实体(需指明自定义字段) /// /// /// [DisableAuditing] public override async Task GetEntityByNo(string no) { //CheckGetPermission(); if (string.IsNullOrEmpty(KeyFiledName)) { ThrowError("NoKeyFieldName"); } return await base.GetEntityByNo(no); } #endregion GetEntity/Dto #region Hide ///// ///// 根据给定的创建 过滤查询. ///// ///// The input. //protected override IQueryable CreateFilteredQuery(IwbPagedRequestDto input) //{ // var query = Repository.GetAll(); // var pagedInput = input as IIwbPagedRequest; // if (pagedInput == null) // { // return query; // } // if (!string.IsNullOrEmpty(pagedInput.KeyWords)) // { // object keyWords = pagedInput.KeyWords; // LambdaObject obj = new LambdaObject() // { // FieldType = (LambdaFieldType)pagedInput.FieldType, // FieldName = pagedInput.KeyField, // FieldValue = keyWords, // ExpType = (LambdaExpType)pagedInput.ExpType // }; // var exp = obj.GetExp(); // query = exp != null ? query.Where(exp) : query; // } // if (pagedInput.SearchList != null && pagedInput.SearchList.Count > 0) // { // List objList = new List(); // foreach (var o in pagedInput.SearchList) // { // if (string.IsNullOrEmpty(o.KeyWords)) // continue; // object keyWords = o.KeyWords; // objList.Add(new LambdaObject // { // FieldType = (LambdaFieldType)o.FieldType, // FieldName = o.KeyField, // FieldValue = keyWords, // ExpType = (LambdaExpType)o.ExpType // }); // } // var exp = objList.GetExp(); // query = exp != null ? query.Where(exp) : query; // } // return query; //} //protected override IQueryable ApplySorting(IQueryable query, IwbPagedRequestDto input) //{ // return query.OrderBy(a => a.No); //} //protected override IQueryable ApplyPaging(IQueryable query, IwbPagedRequestDto input) //{ // if (input is IPagedResultRequest pagedInput) // { // return query.Skip(pagedInput.SkipCount).Take(pagedInput.MaxResultCount); // } // return query; //} #endregion Hide #endregion CURD } }