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.Configuration; using Abp.Domain.Repositories; using Abp.Domain.Uow; using Abp.Runtime.Caching; using IwbZero.Auditing; using IwbZero.AppServiceBase; using IwbZero.ToolCommon.StringModel; using WeApp.Authorization; using WeApp.BaseInfo; using WeApp.BasicInfo; using WeApp.BasicInfo.TrainingRoleGroup.Dto; using WeApp.Configuration; using WeApp.Configuration.Cache; using WeApp.TrainingCamp.Dto; using WeApp.TrainingCamp.Dto.Package; using WeEngine.CommonDto.WeInfo; namespace WeApp.TrainingCamp { [AbpAuthorize, AuditLog("演练培训营管理")] public class CampAppService : IwbAsyncCrudAppService, ICampAppService { public CampAppService( ICacheManager cacheManager, IRepository repository, IRepository groupRepository, IRepository attachRepository, IRepository sceneMapRepository, IRepository groupRoleRepository, IRepository crgRepository) : base(repository, "Id") { GroupRepository = groupRepository; AttachRepository = attachRepository; SceneMapRepository = sceneMapRepository; GroupRoleRepository = groupRoleRepository; CrgRepository = crgRepository; CacheManager = cacheManager; } private string DataCenterUrl => SettingManager.GetSettingValue(IwbSettingNames.WeDataCenterIp); protected override bool KeyIsAuto { get; set; } = false; protected IRepository GroupRepository { get; } protected IRepository GroupRoleRepository { get; } protected IRepository CrgRepository { get; } protected IRepository AttachRepository { get; } protected IRepository SceneMapRepository { get; } #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.Name }); } return sList; } [DisableAuditing] public override async Task GetSelectStr() { var list = await Repository.GetAllListAsync(); string str = ""; foreach (var l in list) { str += $""; } return str; } /// /// 方案包select /// /// [AbpAuthorize(PermissionNames.PagesTrainMgCampMgQuery)] public Task GetPackageSelectStr() { var list = CacheManager.GetPackageInfos(DataCenterUrl); string str = ""; if (list != null && list.Any()) { foreach (var l in list) { str += $""; } } return Task.FromResult(str); } /// /// 附件select /// /// [AbpAuthorize(PermissionNames.PagesTrainMgCampMgAttach)] public async Task GetAttachSelectStr(string no) { var list = await AttachRepository.GetAllListAsync(a => a.TableName == "Train" && a.ColumnName == "Camp" && a.SourceKey.StartsWith(no)); string str = ""; if (list != null && list.Any()) { foreach (var l in list) { str += $""; } } return str; } #endregion #region CURD [AbpAuthorize(PermissionNames.PagesTrainMgCampMgCreate)] public override async Task Create(CampCreateDto input) { input.Id = await AppGuidManager.GetNextRecordIdAsync(DataLibType.Camp); input.CampState = CampStateDefinition.New; if (input.AssessRoleNames.IsEmpty()) { input.AssessAuto = false; } await CreateEntity(input); } [AbpAuthorize(PermissionNames.PagesTrainMgCampMgUpdate)] public override async Task Update(CampUpdateDto input) { if (input.AssessRoleNames.IsEmpty()) { input.AssessAuto = false; } var entity = await CheckEntity(input.Id); if (input.CampState == CampStateDefinition.Audit && entity.EvalBehaviorTags.IsEmpty()) { CheckErrors("请先配置好行为评估标签,再通过审核!"); } if((await CrgRepository.CountAsync(a => a.CampNo == entity.Id)) == 0) { CheckErrors("请先配置好角色预案,再通过审核!"); } await UpdateEntity(input,entity); } [AbpAuthorize(PermissionNames.PagesTrainMgCampMgDelete)] public override async Task Delete(EntityDto input) { await CheckEntity(input.Id); await base.Delete(input); } [DisableAuditing] [AbpAuthorize(PermissionNames.PagesTrainMgCampMgQuery)] 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.PagesTrainMgCampMgQuery)] public override async Task GetDto(EntityDto input) { var entity = await GetEntity(input); return MapToEntityDto(entity); } /// /// 查询实体Dto /// /// /// [DisableAuditing] [AbpAuthorize(PermissionNames.PagesTrainMgCampMgQuery)] public override async Task GetDtoById(string id) { var entity = await GetEntityById(id); return MapToEntityDto(entity); } /// /// 查询实体Dto(需指明自定义字段) /// /// /// [DisableAuditing] [AbpAuthorize(PermissionNames.PagesTrainMgCampMgQuery)] public override async Task GetDtoByNo(string no) { var entity = await GetEntityByNo(no); return MapToEntityDto(entity); } /// /// 查询实体 /// /// /// [DisableAuditing] [AbpAuthorize(PermissionNames.PagesTrainMgCampMgQuery)] public override async Task GetEntity(EntityDto input) { var entity = await GetEntityById(input.Id); return entity; } /// /// 查询实体 /// /// /// [DisableAuditing] [AbpAuthorize(PermissionNames.PagesTrainMgCampMgQuery)] public override async Task GetEntityById(string id) { return await Repository.FirstOrDefaultAsync(a=>a.Id==id); } /// /// 查询实体(需指明自定义字段) /// /// /// [DisableAuditing] [AbpAuthorize(PermissionNames.PagesTrainMgCampMgQuery)] 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.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 #endregion #region CampGroup /// /// 检查方案包是否分组 /// /// [AbpAuthorize(PermissionNames.PagesTrainMgCampMgGroup), DisableAuditing] public async Task CheckCampGroup(string no) { using (CurrentUnitOfWork.DisableFilter(AbpDataFilters.SoftDelete)) { if ((await GroupRepository.GetAllListAsync(a => a.CampNo == no)).Any()) { return $"/Train/CampGroup/{no}"; } } return ""; } /// /// 方案包分组 /// /// [AbpAuthorize(PermissionNames.PagesTrainMgCampMgGroup), AuditLog("方案包分组")] public async Task Group(GroupCreateDto input) { var entity = await CheckEntity(input.CampNo); for (int i = 1; i <= input.Count; i++) { var group = new CampGroupInfo() { CampNo = input.CampNo, Id = $"{input.CampNo}_{i.LeftPad(3)}", Name = $"第{i}组", CampGroupState = CampGroupStateDefinition.New, }; await GroupRepository.InsertAsync(group); } return $"/Train/CampGroup/{entity.Id}"; } #endregion #region Attach /// /// 配置附件 /// /// [AbpAuthorize(PermissionNames.PagesTrainMgCampMgAttach), DisableAuditing] public async Task CheckAttach(string no) { var entity = await CheckEntity(no); return $"/Train/CampAttach/{entity.Id}"; } /// /// 配置附件 /// /// [AbpAuthorize(PermissionNames.PagesTrainMgCampMgAttach), AuditLog("配置附件")] public async Task AttachFile(CampSceneAttachDto input) { var entity = await CheckEntity(input.CampNo); var sceneAttach = await SceneMapRepository.FirstOrDefaultAsync(a => a.CampNo == entity.Id && a.SceneNo == input.SceneNo); if (sceneAttach == null) { sceneAttach = new CampSceneMapInfo() { CampNo = input.CampNo, SceneNo = input.SceneNo, SceneName = input.SceneName, AttachNos = input.AttachNos }; await SceneMapRepository.InsertAsync(sceneAttach); } else { sceneAttach.AttachNos = input.AttachNos; await SceneMapRepository.UpdateAsync(sceneAttach); await CurrentUnitOfWork.SaveChangesAsync(); await CacheManager.GetCache(IwbCacheNames.SceneInfoCache).RemoveAsync($"{entity.Id}-{input.SceneNo}"); await CacheManager.GetCache(IwbCacheNames.SceneInfoCache).RemoveAsync($"A-{entity.Id}-{input.SceneNo}"); } } /// /// 删除情景附件 /// /// [AbpAuthorize(PermissionNames.PagesTrainMgCampMgAttach), AuditLog("删除情景附件")] public async Task DeleteAttach(string no) { var sceneAttach = await SceneMapRepository.FirstOrDefaultAsync(a => a.AttachNos.Contains(no)); if (sceneAttach != null) { CheckErrors($"此附件已被配置,无法删除!"); return; } await AttachRepository.DeleteAsync(a => a.AttachNo == no); } /// /// 获取培训营相关附件 /// /// /// /// [AbpAuthorize(PermissionNames.PagesTrainMgCampMgAttach), DisableAuditing] public async Task> GetSceneAttaches(IwbPagedRequestDto input, string no) { //var no = input.SearchList?.FirstOrDefault(a=>a.KeyField=="CampNo")?.KeyWords??""; var entity = await CheckEntity(no); var sceneAttach = await SceneMapRepository.GetAllListAsync(a => a.CampNo == no); var package = GetPackageDetail(entity.PackageNo); var scenes = package.Scenes; var totalCount = scenes.Count; var query = scenes.AsQueryable(); scenes = ApplyFilter(query, input).ToList(); scenes = scenes.OrderBy(a => a.Id).Skip(input.SkipCount).Take(input.MaxResultCount).ToList(); var dtoList = new List(); foreach (var scene in scenes) { var dto = new CampSceneAttachDto() { SceneNo = scene.Id, SceneName = scene.Name, CampNo = no, CampName = entity.Name }; var sceneMap = sceneAttach.FirstOrDefault(a => a.SceneNo == scene.Id); if (sceneMap != null) { dto.AttachNos = sceneMap.AttachNos; dto.AttachInfos = new List(); var arr = sceneMap.AttachNos?.Split(','); if (arr != null) { foreach (var aNo in arr) { var attach = await AttachRepository.FirstOrDefaultAsync(a => a.AttachNo == aNo); if (attach != null) { dto.AttachInfos.Add(new CampAttachDto() { AttachNo = aNo, CampNo = no,FileType = attach.FileType, FileTitle = attach.FileTitle, FileName = attach.FileName, FilePath = attach.FilePath }); } } } } dtoList.Add(dto); } return new PagedResultDto(totalCount, dtoList); } /// /// 获取培训营相关附件 /// /// /// /// [AbpAuthorize(PermissionNames.PagesTrainMgCampMgAttach), DisableAuditing] public async Task> GetAttachFiles(IwbPagedRequestDto input, string no) { //var no = input.SearchList?.FirstOrDefault(a=>a.KeyField=="CampNo")?.KeyWords??""; var query = AttachRepository.GetAll() .Where(a => a.TableName == "Train" && a.ColumnName == "Camp" && a.SourceKey.StartsWith(no)).Select(a => new CampAttachDto() { AttachNo = a.AttachNo, CampNo = no, FileName = a.FileName, FilePath = a.FilePath, FileType = a.FileType, FileTitle = a.FileTitle, FileExt = a.FileExt }); query = ApplyFilter(query, input); var totalCount = await AsyncQueryableExecuter.CountAsync(query); query = query.OrderBy(a => a.CampNo); query = query.Skip(input.SkipCount).Take(input.MaxResultCount); var entities = await query.ToListAsync(); return new PagedResultDto(totalCount, entities); } #endregion #region Tag /// /// 配置标签 /// /// [AbpAuthorize(PermissionNames.PagesTrainMgCampMgTag), DisableAuditing] public async Task GetBehaviorTags(string no) { var entity = await CheckEntity(no); var dto = new CampTagDto() { CampNo = no, BehaviorTagNos = entity.EvalBehaviorTags, }; var package = GetPackageDetail(entity.PackageNo); dto.AllTags = package.BehaviorTags.IwbDistinct(a => a.TagNo).OrderBy(a=>a.TagNo).ToList(); return dto; } /// /// 配置标签 /// /// [AbpAuthorize(PermissionNames.PagesTrainMgCampMgTag), AuditLog("配置标签")] public async Task BehaviorTag(CampTagDto input) { if (input.BehaviorTagNos.IsEmpty()) { CheckErrors("至少选择一个评估标签!"); } var entity = await CheckEntity(input.CampNo); entity.EvalBehaviorTags = input.BehaviorTagNos; await Repository.UpdateAsync(entity); await CacheManager.GetCache(IwbCacheNames.CampInfoCache).RemoveAsync($"TAG{input.CampNo}"); } #endregion #region RoleGroup /// /// 获取全部角色预案 /// /// [AbpAuthorize(PermissionNames.PagesTrainMgCampMgRole),DisableAuditing] public async Task GetGroupRoles(string no) { var entity = await CheckEntity(no); var roleGroups = (await GroupRoleRepository.GetAllListAsync()).Select(ObjectMapper.Map).ToList(); var roleGroupNos = await CrgRepository.GetAll().Where(a => a.CampNo == entity.Id).Select(a => a.RoleGroupNo) .ToListAsync(); var dto= new CampRoleGroupDto() { AllGroups = roleGroups, CampNo = no, GroupNos = roleGroupNos }; return dto; } /// /// 角色预案 /// /// [AbpAuthorize(PermissionNames.PagesTrainMgCampMgRole), AuditLog("角色预案")] public async Task RoleGroup(CampRoleGroupDto input) { var entity = await CheckEntity(input.CampNo); if (input.GroupNos!=null&& input.GroupNos.Any()) { var oldGroupNos = await CrgRepository.GetAll().Where(a => a.CampNo == entity.Id).Select(a => a.RoleGroupNo).ToListAsync(); foreach (var no in input.GroupNos) { if (oldGroupNos.Contains(no)) { oldGroupNos.Remove(no); } else { var cgr= new CampRelateGroupRoleInfo() { CampNo = entity.Id, RoleGroupNo = no, }; await CrgRepository.InsertAsync(cgr); } } if (oldGroupNos.Any()) { await CrgRepository.DeleteAsync(a => oldGroupNos.Contains(a.RoleGroupNo)); } } else { CheckErrors("至少选择一个角色预案!"); } } #endregion private async Task CheckEntity(string no) { var entity = await Repository.FirstOrDefaultAsync(a => a.Id == no); if (entity == null) { CheckErrors($"未查询编号为【{no}】到培训营!"); return null; } if (entity.CampState != CampStateDefinition.New && entity.CampState != CampStateDefinition.Audit) { CheckErrors("培训营已运行,不能操作!"); } return entity; } #region Package /// /// 查询方案包配置信息 /// /// /// /// public async Task GetPackageSetting(string id, string packageNo) { var dto = new PackageSettingDto(); if (packageNo.IsEmpty()) { CheckErrors($"方案包编号不能为空!"); return null; } var package = CacheManager.GetPackageInfo(packageNo,DataCenterUrl); dto.AllRoles = package.AllRoles; dto.AssessAuto = package.AssessAuto; dto.AssessRoleNames = package.AssessRoleNames; dto.RoundScore = 0; dto.Variable = package.Variable; if (id.IsNotEmpty() && id != "none") { var entity = await Repository.FirstOrDefaultAsync(a => a.Id == id); if (entity == null) { CheckErrors($"未查询编号为【{id}】到培训营!"); return null; } if (entity.PackageNo == packageNo) { dto.AssessAuto = entity.AssessAuto; dto.AssessRoleNames = entity.AssessRoleNames; dto.RoundScore = entity.RoundScore == 0 ? dto.RoundScore : entity.RoundScore; dto.Variable = entity.Variable.IsEmpty() ? dto.Variable : entity.Variable; } } return dto; } /// /// 方案包详情 /// /// /// [AbpAuthorize(PermissionNames.PagesTrainMgCampMgQuery)] public WePackageDetailDto GetPackageDetail(string no) { var dto = CacheManager.GetPackageDetail(no, DataCenterUrl); return dto; //return await CacheManager.GetCache(IwbCacheNames.PackageInfoCache).GetAsync($"PD{no}", async () => //{ // var url = // $"{(await SettingManager.GetSettingValueAsync(IwbSettingNames.WeDataCenterIp)).Ew("/")}api/services/WePlatform/WePackage/GetPackageDetail?no={no}"; // var result = url.RequestPost(""); // var dto = result.Str2Obj(); // return dto; //}); } ///// ///// 方案包信息 ///// ///// ///// //[AbpAuthorize(PermissionNames.PagesTrainMgCampMgQuery)] //private async Task GetPackageInfo(string no) //{ // return await CacheManager.GetCache(IwbCacheNames.PackageInfoCache).GetAsync($"PI{no}", async () => // { // var url = // $"{(await SettingManager.GetSettingValueAsync(IwbSettingNames.WeDataCenterIp)).Ew("/")}api/services/WePlatform/WePackage/GetPackageInfo?no={no}"; // var result = url.RequestPost(""); // var dto = result.Str2Obj(); // return dto; // }); //} ///// ///// 获取全部方案包 ///// ///// //private async Task> GetPackageInfos() //{ // return await CacheManager.GetCache(IwbCacheNames.PackageInfoCache).GetAsync("ALL", async () => // { // var url = // $"{(await SettingManager.GetSettingValueAsync(IwbSettingNames.WeDataCenterIp)).Ew("/")}api/services/WePlatform/WePackage/GetPackageInfos"; // var result = url.RequestPost(""); // var list = result.Str2Obj>(); // return list; // }); //} #endregion } }