using System.Collections.Generic; using System.Data.Entity; 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.AppServiceBase; using IwbZero.ToolCommon.StringModel; using WeEngine.Enum; using WePlatform.Authorization.Users; using WePlatform.BaseSystem.Users.Dto; using WePlatform.Configuration; using WePlatform.WeBase; using WePlatform.WeLib; using WePlatform.WeLib.Guide.Dto; using WePlatform.WeLib.Knowledge; using WePlatform.WeLib.Knowledge.Plan.Dto; using WePlatform.WeLib.Scene.Dto; using WePlatform.WeLib.SceneFlow.Dto; using WePlatform.WeModel; namespace WePlatform.BaseSystem.Query { [AbpAuthorize, DisableAuditing] public class QueryAppService : IwbAppServiceBase, IQueryAppService { #region 仓储 public QueryAppService( IRepository userRepository, ICacheManager cacheManager, IRepository sceneCategoryRepository, IRepository engineRepository, IRepository engineModelRepository, IRepository behaviorRepository, IRepository behaviorRoleRepository, IRepository sceneRepository, IRepository guideRepository, IRepository knowledgeRepository, IRepository sceneFlowRepository, IRepository componentRepository, IRepository environRepository, IRepository evalModelRepository, IRepository roleCategoryRepository, IRepository planRepository, IRepository evalTargetRepository) { UserRepository = userRepository; SceneCategoryRepository = sceneCategoryRepository; EngineRepository = engineRepository; EngineModelRepository = engineModelRepository; BehaviorRepository = behaviorRepository; BehaviorRoleRepository = behaviorRoleRepository; SceneRepository = sceneRepository; GuideRepository = guideRepository; KnowledgeRepository = knowledgeRepository; SceneFlowRepository = sceneFlowRepository; ComponentRepository = componentRepository; EnvironRepository = environRepository; EvalModelRepository = evalModelRepository; RoleCategoryRepository = roleCategoryRepository; PlanRepository = planRepository; EvalTargetRepository = evalTargetRepository; CacheManager = cacheManager; } protected IRepository UserRepository { get; } protected IRepository SceneCategoryRepository { get; } protected IRepository RoleCategoryRepository { get; } protected IRepository BehaviorRepository { get; } protected IRepository BehaviorRoleRepository { get; } protected IRepository SceneRepository { get; } protected IRepository SceneFlowRepository { get; } protected IRepository PlanRepository { get; } protected IRepository KnowledgeRepository { get; } protected IRepository GuideRepository { get; } protected IRepository EngineRepository { get; } protected IRepository ComponentRepository { get; } protected IRepository EngineModelRepository { get; } protected IRepository EvalModelRepository { get; } protected IRepository EvalTargetRepository { get; } protected IRepository EnvironRepository { get; } #endregion #region SELECT #region 场景类别 [DisableAuditing] public async Task> GetCategorySelectList() { var list = await SceneCategoryRepository.GetAllListAsync(a => a.ParentNo != null); var sList = new List { new SelectListItem { Text = @"请选择场景类别...", Value = "", Selected = true } }; foreach (var l in list) { sList.Add(new SelectListItem { Value = l.Id, Text = l.CategoryName }); } return sList; } [DisableAuditing] public async Task GetCategorySelectStr() { var list = await SceneCategoryRepository.GetAllListAsync(); string str = "";//""; var tempParentNo = list.FirstOrDefault(a=>a.ParentNo==null)?.Id??""; foreach (var l in list) { var name = l.CategoryName; var parentNo = l.ParentNo; var id = l.Id; if (l.ParentNo == null) { parentNo = "0"; id = ""; name = "请选择场景类别"; } else if(l.ParentNo == tempParentNo) { parentNo = ""; } str += $""; } return str; } #endregion 场景类别 #region 行为角色 [DisableAuditing] public async Task> GetBehaviorRoleSelectList() { var list = await BehaviorRoleRepository.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.RoleName }); } return sList; } [DisableAuditing] public async Task GetBehaviorRoleSelectStr() { var list = await BehaviorRoleRepository.GetAllListAsync(); string str = ""; foreach (var l in list) { str += $""; } return str; } [DisableAuditing] public async Task GetBehaviorRoleSelectStrByCategory(string no) { return await CacheManager.GetCache(IwbCacheNames.BehaviorRoleCache).GetAsync($"SC-{no}",async () => { var list = await RoleCategoryRepository.GetAllIncluding(a => a.RoleInfo).Where(a => a.CategoryNo == no).ToListAsync(); string str = ""; foreach (var l in list) { str += $""; } return str; }); } #endregion 行为角色 #region 行为 [DisableAuditing] public async Task> GetBehaviorSelectList() { var list = await BehaviorRepository.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.BehaviorName }); } return sList; } [DisableAuditing] public async Task GetBehaviorSelectStr() { var list = await BehaviorRepository.GetAllListAsync(); string str = ""; foreach (var l in list) { str += $""; } return str; } [DisableAuditing] public async Task GetBehaviorSelectStrByCategory(string no) { var list = await BehaviorRepository.GetAllListAsync(a => a.SceneCategory == no); string str = ""; foreach (var l in list) { str += $""; } return str; } [DisableAuditing] public async Task GetBehaviorScoreTypeStr() { string str = ""; str += await StatesManager.GetSelectListStrAsync("Behavior", "ScoreType"); return str; } [DisableAuditing] public string GetBehaviorNonEvolutionTypeStr() { string str = ""; str += $""; str += $""; return str; } #endregion 行为 #region 情景 [DisableAuditing] public async Task> GetSceneSelectList() { var list = await SceneRepository.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.Name }); } return sList; } [DisableAuditing] public async Task GetSceneSelectStr() { var list = await SceneRepository.GetAllListAsync(); string str = ""; foreach (var l in list) { str += $""; } return str; } [DisableAuditing] public async Task GetSceneSelectStrByCategory(string no) { var list = await SceneRepository.GetAllListAsync(a => a.SceneCategory == no); string str = ""; foreach (var l in list) { str += $""; } return str; } [DisableAuditing] public async Task GetSceneTypeStr() { string str = ""; str += await StatesManager.GetSelectListStrAsync("Scene", "SceneType"); return str; } #endregion 情景 #region 情景流 [DisableAuditing] public async Task> GetSceneFlowSelectList() { var list = await SceneFlowRepository.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 async Task GetSceneFlowSelectStr() { var list = await SceneFlowRepository.GetAllListAsync(); string str = ""; foreach (var l in list) { str += $""; } return str; } [DisableAuditing] public async Task GetSceneFlowSelectStrByCategory(string no) { var list = await SceneFlowRepository.GetAllListAsync(a => a.SceneCategory == no); string str = ""; foreach (var l in list) { str += $""; } return str; } #endregion 情景流 #region 知识引导信息 [DisableAuditing] public async Task> GetGuideSelectList() { var list = await GuideRepository.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.Name }); } return sList; } [DisableAuditing] public async Task GetGuideSelectStr() { var list = await GuideRepository.GetAllListAsync(); string str = ""; foreach (var l in list) { str += $""; } return str; } [DisableAuditing] public async Task GetGuideTypeSelectStr() { string str = ""; str += await StatesManager.GetSelectListStrAsync("Guide", "GuideType"); return str; } [DisableAuditing] public async Task> GetKnowledgeSelectList() { var list = await KnowledgeRepository.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.Name }); } return sList; } [DisableAuditing] public async Task GetKnowledgeSelectStr() { var list = await KnowledgeRepository.GetAllListAsync(); string str = ""; foreach (var l in list) { str += $""; } return str; } [DisableAuditing] public async Task GetPlanTreeSelectStr() { var list = await PlanRepository.GetAllListAsync(); string str = ""; var tempParentNo = list.FirstOrDefault(a => a.ParentNo == null)?.Id ?? ""; foreach (var l in list) { var name = l.Name; var parentNo = l.ParentNo; var id = l.Id; if (l.ParentNo == null) { parentNo = "0"; id = ""; name = "请选择应急预案"; } else if (l.ParentNo == tempParentNo) { parentNo = ""; } str += $""; } return str; } #endregion 知识引导信息 #region 事务组件 [DisableAuditing] public async Task> GetComponentSelectList() { var list = await ComponentRepository.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.Name }); } return sList; } [DisableAuditing] public async Task GetComponentSelectStr() { var list = await ComponentRepository.GetAllListAsync(); string str = ""; foreach (var l in list) { str += $""; } return str; } #endregion 引擎 #region 引擎 [DisableAuditing] public async Task> GetEngineSelectList() { var list = await EngineRepository.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.EngineName }); } return sList; } [DisableAuditing] public async Task GetEngineSelectStr() { var list = await EngineRepository.GetAllListAsync(); string str = ""; foreach (var l in list) { str += $""; } return str; } #endregion 引擎 #region 模型 [DisableAuditing] public async Task> GetModelSelectList() { var list = await EngineModelRepository.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.ModelName }); } return sList; } [DisableAuditing] public async Task GetModelSelectStr() { var list = await EngineModelRepository.GetAllIncluding(a=>a.EngineInfo).ToListAsync(); string str = ""; foreach (var l in list) { str += $""; } return str; } [DisableAuditing] public async Task GetEngineModelTypeSelectStr() { string str = ""; str += await StatesManager.GetSelectListStrAsync("Engine", "ModelType"); return str; } [DisableAuditing] public async Task GetEvalModelSelectStr() { var list = await EvalModelRepository.GetAllListAsync(); string str = ""; foreach (var l in list) { str += $""; } return str; } [DisableAuditing] public async Task GetEvalTargetSelectStr() { var list = await EvalTargetRepository.GetAllListAsync(); var tempParentNo = list.FirstOrDefault(a => a.ParentNo == null)?.Id ?? ""; var str = ""; foreach (var l in list) { var name = l.Name; var parentNo = l.ParentNo; var id = l.Id; if (l.ParentNo == null) { parentNo = "0"; id = ""; name = "请选择评估指标"; } else if (l.ParentNo == tempParentNo) { parentNo = ""; } str += $""; } return str; } [DisableAuditing] public async Task GetEvalTargetTypeSelectStr() { string str = ""; str += await StatesManager.GetSelectListStrAsync("Eval", "TargetType"); return str; } #endregion 模型 #region 环境资源配置 [DisableAuditing] public async Task> GetEnvironmentSelectList() { var list = await EnvironRepository.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.ResourceName }); } return sList; } [DisableAuditing] public async Task GetEnvironmentSelectStr() { var list = await EnvironRepository.GetAllListAsync(); string str = ""; foreach (var l in list) { str += $""; } return str; } [DisableAuditing] public async Task GetResourceTypeStr() { string str = ""; str += await StatesManager.GetSelectListStrAsync("Resource", "Type"); return str; } #endregion 模型 #endregion SELECT /// /// 查询用户信息 /// /// /// [DisableAuditing] public async Task> QueryUsers(IwbPagedRequestDto input) { var query = UserRepository.GetAll().Where(a => a.IsActive); query = ApplyFilter(query, input); var totalCount = await query.CountAsync(); query = query.OrderBy(a => a.Id); query = query.Skip(input.SkipCount).Take(input.MaxResultCount); var entities = await query.ToListAsync(); var dtoList = new PagedResultDto(totalCount, ObjectMapper.Map>(entities)); return dtoList; } /// /// 查询情景信息 /// /// /// [DisableAuditing] public async Task> QueryScenes(IwbPagedRequestDto input) { var query = SceneRepository.GetAllIncluding(a=>a.SceneCategoryInfo); var search = input.SearchList?.FirstOrDefault(a => a.KeyWords.IsNotEmpty() && a.KeyField.ToLower() == "scenecategory"); if (search != null) { query = query.Where(a => a.SceneCategoryInfo.CategoryPath.Contains(search.KeyWords)); input.SearchList.Remove(search); } query = ApplyFilter(query, input); var totalCount = await query.CountAsync(); query = query.OrderBy(a => a.Id); query = query.Skip(input.SkipCount).Take(input.MaxResultCount); var entities = await query.ToListAsync(); var dtoList = new PagedResultDto(totalCount, ObjectMapper.Map>(entities)); return dtoList; } /// /// 查询引导信息 /// /// /// [DisableAuditing] public async Task> QueryGuides(IwbPagedRequestDto input) { var query = GuideRepository.GetAll(); query = ApplyFilter(query, input); var totalCount = await query.CountAsync(); query = query.OrderBy(a => a.Id); query = query.Skip(input.SkipCount).Take(input.MaxResultCount); var entities = await query.ToListAsync(); var dtoList = new PagedResultDto(totalCount, ObjectMapper.Map>(entities)); return dtoList; } /// /// 根据编号查询情景流信息 /// /// /// [DisableAuditing] public async Task QuerySceneFlowByNo(string no) { var entity = await SceneFlowRepository.FirstOrDefaultAsync(a => a.Id == no); return ObjectMapper.Map(entity); } /// /// 查询情景流信息 /// /// /// [DisableAuditing] public async Task> QuerySceneFlows(IwbPagedRequestDto input) { var query = SceneFlowRepository.GetAllIncluding(a => a.SceneCategoryInfo); var search = input.SearchList?.FirstOrDefault(a => a.KeyWords.IsNotEmpty() && a.KeyField.ToLower() == "scenecategory"); if (search != null) { query = query.Where(a => a.SceneCategoryInfo.CategoryPath.Contains(search.KeyWords)); input.SearchList.Remove(search); } query = ApplyFilter(query, input); var totalCount = await query.CountAsync(); query = query.OrderBy(a => a.Id); query = query.Skip(input.SkipCount).Take(input.MaxResultCount); var entities = await query.ToListAsync(); var dtoList = new PagedResultDto(totalCount, ObjectMapper.Map>(entities)); return dtoList; } /// /// 查询子目录 /// /// /// [DisableAuditing] public async Task> GetChildSceneCategory(EntityDto input) { if (input.Id.IsEmpty() || input.Id == "#" || input.Id == "0") { input.Id = null; } var list = new List(); var children = await SceneCategoryRepository.GetAllListAsync(a => a.ParentNo == input.Id); if (children.Any()) { foreach (var child in children) { list.Add(new JsTreeDto() { Id = child.Id, Text = child.CategoryName, Children = (await SceneCategoryRepository.CountAsync(a => a.ParentNo == child.Id)) > 0 }); } } return list; } } }