using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Web.Mvc; using Abp.Application.Services.Dto; using Abp.Auditing; using Abp.Authorization; using Abp.Domain.Repositories; using Abp.Runtime.Caching; using IwbZero.Auditing; using IwbZero.AppServiceBase; using IwbZero.ToolCommon.Lambda; using IwbZero.ToolCommon.StringModel; using WePlatform.Authorization; using WePlatform.Configuration; using WePlatform.WeLib.Package.Dto; using WePlatform.WeLib.SceneFlow.Dto; namespace WePlatform.WeLib.SceneFlow { [AbpAuthorize, AuditLog("情景流")] public class SceneFlowAppService : IwbAsyncCrudAppService, ISceneFlowAppService { public SceneFlowAppService( ICacheManager cacheManager, IRepository repository) : base(repository, "Id") { CacheManager = cacheManager; } protected override bool KeyIsAuto { get; set; } = false; #region GetSelect [DisableAuditing] public override async Task> GetSelectList() { var list = await Repository.GetAllListAsync(); var sList = new List {new SelectListItem {Text = @"请选择...", Value = "", Selected = true}}; foreach (var l in list) { sList.Add(new SelectListItem { Value = l.Id, Text = l.FlowName }); } return sList; } [DisableAuditing] public override async Task GetSelectStr() { var list = await Repository.GetAllListAsync(); string str = ""; foreach (var l in list) { str += $""; } return str; } #endregion #region CURD [AbpAuthorize(PermissionNames.PagesWePlayerMgFlowMgCreate)] public override async Task Create(SceneFlowCreateDto input) { input.Id= await AppGuidManager.GetNextRecordIdAsync(DataLibType.SceneFlowInfo); input.SceneFlowState = SceneFlowStateDefinition.New; await CreateEntity(input); } [AbpAuthorize(PermissionNames.PagesWePlayerMgFlowMgUpdate)] public override async Task Update(SceneFlowUpdateDto input) { var entity = await Repository.FirstOrDefaultAsync(a => a.Id == input.Id); if (entity?.SceneFlowState == SceneFlowStateDefinition.Solidified) { CheckErrors($"情景流已固化确认,不能再操作!"); return; } await UpdateEntity(input); } [AbpAuthorize(PermissionNames.PagesWePlayerMgFlowMgDelete)] public override async Task Delete(EntityDto input) { var entity = await Repository.FirstOrDefaultAsync(a => a.Id == input.Id); if (entity?.SceneFlowState == SceneFlowStateDefinition.Solidified) { CheckErrors($"情景流已固化确认,不能再操作!"); return; } await base.Delete(input); } [DisableAuditing] [AbpAuthorize(PermissionNames.PagesWePlayerMgFlowMgQuery)] 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] [AbpAuthorize(PermissionNames.PagesWePlayerMgFlowMgQuery)] public override async Task GetDto(EntityDto input) { var entity = await GetEntity(input); return MapToEntityDto(entity); } /// /// 查询实体Dto /// /// /// [DisableAuditing] [AbpAuthorize(PermissionNames.PagesWePlayerMgFlowMgQuery)] public override async Task GetDtoById(string id) { var entity = await GetEntityById(id); return MapToEntityDto(entity); } /// /// 查询实体Dto(需指明自定义字段) /// /// /// [DisableAuditing] [AbpAuthorize(PermissionNames.PagesWePlayerMgFlowMgQuery)] public override async Task GetDtoByNo(string no) { var entity = await GetEntityByNo(no); return MapToEntityDto(entity); } /// /// 查询实体 /// /// /// [DisableAuditing] [AbpAuthorize(PermissionNames.PagesWePlayerMgFlowMgQuery)] public override async Task GetEntity(EntityDto input) { var entity = await GetEntityById(input.Id); return entity; } /// /// 查询实体 /// /// /// [DisableAuditing] [AbpAuthorize(PermissionNames.PagesWePlayerMgFlowMgQuery)] public override async Task GetEntityById(string id) { return await Repository.FirstOrDefaultAsync(a=>a.Id==id); } /// /// 查询实体(需指明自定义字段) /// /// /// [DisableAuditing] [AbpAuthorize(PermissionNames.PagesWePlayerMgFlowMgQuery)] public override async Task GetEntityByNo(string no) { //CheckGetPermission(); if (string.IsNullOrEmpty(KeyFiledName)) { ThrowError("NoKeyFieldName"); } return await base.GetEntityByNo(no); } #endregion #region Hide /// /// 根据给定的创建 过滤查询. /// /// The input. protected override IQueryable CreateFilteredQuery(IwbPagedRequestDto input) { var query = Repository.GetAllIncluding(a => a.SceneCategoryInfo); 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; if (o.KeyField.ToLower() == "sceneCategory".ToLower()) { query = query.Where(a => a.SceneCategoryInfo.CategoryPath.Contains(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 #endregion /// /// 拷贝情景流 /// /// /// [AbpAuthorize(PermissionNames.PagesWePlayerMgFlowMgCopy), AuditLog("拷贝情景流")] public async Task Copy(EntityDto input) { var entity = await Repository.FirstOrDefaultAsync(a => a.Id == input.Id); if (entity == null) { CheckErrors($"没有查询到编号为{input.Id}的情景流!"); } var dto = MapToEntityDto(entity); var newEntity = ObjectMapper.Map(dto); newEntity.Id = await AppGuidManager.GetNextRecordIdAsync(DataLibType.SceneFlowInfo); newEntity.FlowName = $"{newEntity.FlowName}_副本"; newEntity.SceneFlowState = SceneFlowStateDefinition.New; await Repository.InsertAsync(newEntity); } /// /// 固化情景流 /// /// /// //[AbpAuthorize(PermissionNames.PagesWePlayerMgFlowMgSolidify), AuditLog("固化情景流")] public async Task Solidify(SolidifyDto input) { var entity = await Repository.FirstOrDefaultAsync(a => a.Id == input.Id); if (entity == null) { CheckErrors($"没有查询到编号为{input.Id}的情景流!"); return; } if (entity.SceneFlowState == SceneFlowStateDefinition.Solidified) { CheckErrors($"情景流已固化确认,请勿重复操作!"); return; } entity.FlowName = input.NewName.IsEmpty() ? entity.FlowName : input.NewName; entity.SceneFlowState = SceneFlowStateDefinition.Solidified; await Repository.UpdateAsync(entity); } } }