| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220 |
- using Abp.Application.Services.Dto;
- using Abp.Auditing;
- using Abp.Authorization;
- using Abp.Configuration;
- using Abp.Domain.Repositories;
- using Abp.Runtime.Caching;
- using IwbZero.AppServiceBase;
- using IwbZero.ToolCommon.LogHelpers;
- using IwbZero.ToolCommon.StringModel;
- using System;
- using System.Collections.Generic;
- using System.Data.Entity;
- using System.IO;
- using System.Linq;
- using System.Speech.Synthesis;
- using System.Threading;
- using System.Threading.Tasks;
- using System.Web.Mvc;
- using WeApp.Authorization.Users;
- using WeApp.BaseInfo;
- using WeApp.BaseSystem.Query.Dto;
- using WeApp.BaseSystem.Users.Dto;
- using WeApp.BasicInfo;
- using WeApp.BasicInfo.PhoneQuestion.Dto;
- using WeApp.BasicInfo.StudentTip.Dto;
- using WeApp.BasicInfo.TrainingRoleGroup.Dto;
- using WeApp.Configuration;
- using WeApp.Configuration.Cache;
- using WeApp.TrainingCamp;
- using WeApp.TrainingCamp.Dto;
- using WeApp.TrainingCampGroup.Dto;
- using WeApp.TrainingEval.Dto;
- using WeEngine.ModelInfo;
- using WeEngine.Packages;
- namespace WeApp.BaseSystem.Query
- {
- [AbpAllowAnonymous, DisableAuditing]
- public class QueryAppService : IwbAppServiceBase, IQueryAppService
- {
- #region 仓储
- public QueryAppService(
- IRepository<User, long> userRepository, IRepository<CampInfo, string> campRepository, IRepository<CampGroupInfo, string> groupRepository, IRepository<CampRelateGroupRoleInfo> cgrRepository, IRepository<TrainingGroupRelateRoleInfo> grrRepository, IRepository<GroupRoleInfo> groupRoleRepository, IRepository<TrainingRoleInfo, string> roleRepository, IRepository<GroupLogInfo> glRepository, IRepository<CampSceneMapInfo> sceneMapRepository, IRepository<SysAttachFile> attachRepository, IRepository<GroupScoreInfo> gsRepository, IRepository<PortraitRemarkInfo> prRepository, IRepository<PhoneAnswerInfo> answerRepository, IRepository<StudentTipInfo, string> stuTipRepository, IRepository<CampHelpInfo> campHelpRepository, IRepository<PhoneQuestionInfo, string> questionRepository)
- {
- UserRepository = userRepository;
- CampRepository = campRepository;
- GroupRepository = groupRepository;
- CgrRepository = cgrRepository;
- GrrRepository = grrRepository;
- GroupRoleRepository = groupRoleRepository;
- RoleRepository = roleRepository;
- GlRepository = glRepository;
- SceneMapRepository = sceneMapRepository;
- AttachRepository = attachRepository;
- GsRepository = gsRepository;
- PrRepository = prRepository;
- AnswerRepository = answerRepository;
- StuTipRepository = stuTipRepository;
- CampHelpRepository = campHelpRepository;
- QuestionRepository = questionRepository;
- }
- private string DataCenterUrl => IwbSettingNames.GetWeDataCenterIp(SettingManager).Ew("/");
- //private string EngineUrl => IwbSettingNames.GetWeEngineIp(SettingManager).Ew("/");
- protected IRepository<CampInfo, string> CampRepository { get; }
- protected IRepository<CampGroupInfo, string> GroupRepository { get; }
- protected IRepository<CampRelateGroupRoleInfo> CgrRepository { get; }
- protected IRepository<TrainingGroupRelateRoleInfo> GrrRepository { get; }
- protected IRepository<GroupRoleInfo> GroupRoleRepository { get; }
- protected IRepository<GroupScoreInfo> GsRepository { get; }
- protected IRepository<GroupLogInfo> GlRepository { get; }
- protected IRepository<TrainingRoleInfo, string> RoleRepository { get; }
- protected IRepository<User, long> UserRepository { get; }
- protected IRepository<PortraitRemarkInfo> PrRepository { get; }
- public IRepository<PhoneQuestionInfo, string> QuestionRepository { get; }
- public IRepository<PhoneAnswerInfo> AnswerRepository { get; }
- public IRepository<StudentTipInfo, string> StuTipRepository { get; }
- public IRepository<CampHelpInfo> CampHelpRepository { get; }
- protected IRepository<CampSceneMapInfo> SceneMapRepository { get; }
- protected IRepository<SysAttachFile> AttachRepository { get; }
- #endregion 仓储
- #region SELECT
- #region Camp && Group
- public async Task<List<SelectListItem>> GetCampStateSelectList()
- {
- var list = await StatesManager.GetSelectListAsync("Camp", "State");
- return list;
- }
- public async Task<string> GetCampStateSelectStr()
- {
- var str = await StatesManager.GetSelectListStrAsync("Camp", "State");
- str = "<option value=\"\" selected >请选择培训营状态.</option>" + str;
- return str;
- }
- public async Task<string> GetCampStateSelectStr(params string[] states)
- {
- var str = await StatesManager.GetSelectListStrAsync("Camp", "State", a => states.Contains(a.CodeValue));
- str = "<option value=\"\" selected >请选择培训营状态.</option>" + str;
- return str;
- }
- public async Task<List<SelectListItem>> GetCampGroupStateSelectList()
- {
- var list = await StatesManager.GetSelectListAsync("CampGroup", "State");
- return list;
- }
- public async Task<string> GetCampGroupStateSelectStr()
- {
- var str = await StatesManager.GetSelectListStrAsync("CampGroup", "State");
- return str;
- }
- /// <summary>
- /// 获取当前营的帮助信息[2.3版本已弃用]
- /// </summary>
- /// <param name="no"></param>
- /// <returns></returns>
- public async Task<string> GetStuHelpContentSelectStrByCamp(string no)
- {
- var list = await CampHelpRepository.GetAllIncluding(a => a.HelpInfo).Where(a => a.CampNo == no).Select(a => new
- {
- a.HelpInfo.Id,
- a.HelpInfo.Name,
- a.HelpInfo.Content
- }).ToListAsync();
- var str = "";//"<option value=\"\" selected >请选择帮助信息...</option>";
- foreach (var l in list)
- {
- str += $"<option value=\"{l.Id}\">{l.Content}</option>";
- }
- return str;
- }
- /// <summary>
- /// 获取当前情景角色的提示信息
- /// </summary>
- /// <param name="campNo"></param>
- /// <param name="sceneNo"></param>
- /// <param name="roleName"></param>
- /// <returns></returns>
- public async Task<string> GetStuTipsSelectStrByRoleScene(string campNo, string sceneNo, string roleName)
- {
- var list = await GetStuTipsByRoleScene(campNo, sceneNo, roleName);
- var str = "";
- foreach (var l in list)
- {
- str += $"<option value=\"{l.Id}\">{l.Content}</option>";
- }
- return str;
- }
- public async Task<string> GetCampSelectStr(params int[] states)
- {
- var list = await CampRepository.GetAllListAsync(a => states.Contains(a.CampState));
- var str = "<option value=\"\" selected >请选择演练培训营...</option>";
- foreach (var l in list)
- {
- str += $"<option value=\"{l.Id}\" >{l.Name}</option>";
- }
- return str;
- }
- public async Task<string> GetCampGroupSelectStr(string no)
- {
- var list = await GroupRepository.GetAllListAsync(a => a.CampNo == no);
- var str = "<option value=\"\" selected >请选择培训营分组...</option>";
- foreach (var l in list)
- {
- str += $"<option value=\"{l.Id}\" >{l.Name}</option>";
- }
- return str;
- }
- public async Task<string> GetGroupRoleSelectStr(string no)
- {
- var list = (await GroupRoleRepository.FirstOrDefaultAsync(a => a.GroupNo == no))?.RoleNames?.Split(',').ToList() ?? new List<string>();
- var str = "<option value=\"\" selected >请选择角色...</option>";
- foreach (var l in list)
- {
- str += $"<option value=\"{l}\" >{l}</option>";
- }
- return str;
- }
- #endregion Camp && Group
- public async Task<string> GetStuTipsSelectStr()
- {
- var list = await StuTipRepository.GetAllListAsync();
- var str = "<option value=\"\" selected >请选择情景提示...</option>";
- foreach (var l in list)
- {
- str += $"<option value=\"{l.Id}\" title=\"{l.Content}\" >{l.Name}</option>";
- }
- return str;
- }
- /// <summary>
- /// 获取问题
- /// </summary>
- /// <returns></returns>
- public async Task<string> GetQuestionsSelectStr()
- {
- var list = await QuestionRepository.GetAllListAsync();
- var str = "<option value=\"\" selected >请选择电话提问...</option>";
- foreach (var l in list)
- {
- str += $"<option value=\"{l.Id}\" title=\"{l.Content}\" >{l.Name}</option>";
- }
- return str;
- }
- /// <summary>
- /// PhoneQuestion类型
- /// </summary>
- /// <returns></returns>
- public async Task<string> GetQuestionTypeSelectStr()
- {
- var str = await StatesManager.GetSelectListStrAsync("PhoneQuestion", "Type");
- str = "<option value=\"\" selected >请选择问题类型...</option>" + str;
- return str;
- }
- /// <summary>
- /// PhoneQuestion类型
- /// </summary>
- /// <returns></returns>
- public async Task<string> GetAnswerTypeSelectStr()
- {
- var str = await StatesManager.GetSelectListStrAsync("PhoneAnswer", "Type");
- str = "<option value=\"\" selected >请选择答案类型...</option>" + str;
- return str;
- }
- /// <summary>
- /// 画像预置信息类型
- /// </summary>
- /// <returns></returns>
- public async Task<string> GetPortraitRemarkTypeSelectStr()
- {
- var str = await StatesManager.GetSelectListStrAsync("PortraitRemark", "Type");
- str = "<option value=\"\" selected >请选择信息类型...</option>" + str;
- return str;
- }
- #region 用户
- [DisableAuditing]
- public async Task<List<SelectListItem>> GetUserSelectList()
- {
- var list = await UserRepository.GetAllListAsync();
- var sList = new List<SelectListItem> { 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<string> GetUserSelectStr()
- {
- var list = await UserRepository.GetAllListAsync();
- var str = "<option value=\"\" selected >请选择用户...</option>";
- foreach (var l in list)
- {
- str += $"<option value=\"{l.Id}\" >{l.Name}</option>";
- }
- return str;
- }
- //[DisableAuditing]
- //public async Task<string> GetCategorySelectStr()
- //{
- // var list = await CategoryRepository.GetAllListAsync();
- // string str = "";//"<option value=\"\" selected >请选择类别...</option>";
- // 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 += $"<option parent=\"{parentNo}\" value=\"{id}\">{name}</option>";
- // }
- // return str;
- //}
- #endregion 用户
- #endregion SELECT
- /// <summary>
- /// 查询用户信息
- /// </summary>
- /// <param name="input"></param>
- /// <returns></returns>
- [DisableAuditing]
- public async Task<PagedResultDto<UserDto>> 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<UserDto>(totalCount, ObjectMapper.Map<List<UserDto>>(entities));
- return dtoList;
- }
- /// <summary>
- /// 查询培训营的分组
- /// </summary>
- /// <param name="no"></param>
- /// <returns></returns>
- [DisableAuditing]
- public async Task<List<CampGroupDto>> GetCampGroups(string no)
- {
- var query = await GroupRepository.GetAllListAsync(a => a.CampNo == no);
- var list = query.Select(ObjectMapper.Map<CampGroupDto>).ToList();
- return list;
- }
- /// <summary>
- /// 获取培训的角色组预案
- /// </summary>
- /// <param name="no"></param>
- /// <returns></returns>
- public async Task<List<TrainingRoleGroupDto>> GetCampRoleGroupInfos(string no)
- {
- var roleGroups = await CgrRepository.GetAllIncluding(a => a.TrainingRoleGroupInfo).Where(a => a.CampNo == no).Select(a => a.TrainingRoleGroupInfo).ToListAsync();
- var dtoList = new List<TrainingRoleGroupDto>();
- foreach (var roleGroup in roleGroups)
- {
- var dto = ObjectMapper.Map<TrainingRoleGroupDto>(roleGroup);
- var roles = GrrRepository.GetAllIncluding(a => a.TrainingRoleInfo).Where(a => a.RoleGroupNo == dto.Id);
- dto.RoleNos = roles.Select(a => a.TrainRoleNo).ToList();
- dto.RoleNames = string.Join(",", roles.Select(a => a.TrainingRoleInfo.RoleName).ToArray());
- dtoList.Add(dto);
- }
- return dtoList;
- }
- /// <summary>
- /// 获取当前情景角色的提示信息
- /// </summary>
- /// <param name="campNo"></param>
- /// <param name="sceneNo"></param>
- /// <param name="roleName"></param>
- /// <returns></returns>
- public async Task<List<StudentTipDto>> GetStuTipsByRoleScene(string campNo, string sceneNo, string roleName)
- {
- return await CacheManager.GetCache(IwbCacheNames.CampInfoCache).GetAsync(
- $"STU-TIP_{campNo}_{sceneNo}_{roleName}",
- async () =>
- {
- var sceneMap =
- await SceneMapRepository.FirstOrDefaultAsync(a => a.SceneNo == sceneNo && a.CampNo == campNo);
- var list = new List<StudentTipDto>();
- if (sceneMap != null)
- {
- list = await StuTipRepository.GetAll()
- .Where(a => sceneMap.TipNos.Contains(a.Id) && a.RoleName == roleName).Select(a => new StudentTipDto()
- {
- Content = a.Content,
- Id = a.Id,
- Name = a.Name,
- RoleName = a.RoleName
- })
- .ToListAsync();
- }
- return list;
- });
- }
- /// <summary>
- /// 获取问题
- /// </summary>
- /// <returns></returns>
- public async Task<List<PhoneQuestionDto>> GetQuestions()
- {
- var list = await QuestionRepository.GetAllListAsync();
- return list.Select(ObjectMapper.Map<PhoneQuestionDto>).ToList();
- }
- /// <summary>
- /// 获取问题
- /// </summary>
- /// <returns></returns>
- public async Task<PhoneQuestionDto> GetQuestion(string no)
- {
- var entity = await QuestionRepository.FirstOrDefaultAsync(a => a.Id == no);
- return ObjectMapper.Map<PhoneQuestionDto>(entity);
- }
- /// <summary>
- /// 获取日志的电话问题
- /// </summary>
- /// <returns></returns>
- public async Task<PhoneQuestionDto> GetQuestionByLog(int no)
- {
- var log = await GlRepository.FirstOrDefaultAsync(a => a.Id == no);
- var entity = await QuestionRepository.FirstOrDefaultAsync(a => a.Id == log.ExtendInfo1);
- return ObjectMapper.Map<PhoneQuestionDto>(entity);
- }
- /// <summary>
- /// 获取带电话问题的日志
- /// </summary>
- /// <returns></returns>
- public async Task<List<int>> GetQuestionLogs(string no)
- {
- var logs = await GlRepository.GetAll().Where(a => a.GroupNo == no && a.LogCommand == LogCommandDefinition.PhoneQuestion && string.IsNullOrEmpty(a.ExtendInfo4)).Select(a => a.Id).ToListAsync();
- return logs;
- }
- /// <summary>
- /// 获取问题的答案
- /// </summary>
- /// <param name="no"></param>
- /// <returns></returns>
- public async Task<List<PhoneAnswerDto>> GetQuestionAnswers(string no)
- {
- var list = await AnswerRepository.GetAllListAsync(a => a.QuestionNo == no);
- return list.Select(ObjectMapper.Map<PhoneAnswerDto>).ToList();
- }
- /// <summary>
- /// 获取培训营学员提示
- /// </summary>
- /// <param name="no"></param>
- /// <returns></returns>
- public async Task<List<string>> GetStuHelpStrByCamp(string no)
- {
- var list = await CampHelpRepository.GetAllIncluding(a => a.HelpInfo).Where(a => a.CampNo == no).Select(a => a.HelpInfo.Id).ToListAsync();
- return list;
- }
- /// <summary>
- /// 预加载
- /// </summary>
- /// <returns></returns>
- [DisableAuditing]
- public async Task LoadCampPre(string no, int type)
- {
- var camp = await GroupRepository.GetAllIncluding(a => a.CampInfo).Where(a => a.Id == no).Select(a => new CampDto { PackageNo = a.CampInfo.PackageNo }).FirstOrDefaultAsync();
- if (camp != null)
- {
- await Task.Run(() => { CacheManager.GetPackageDetail(camp.PackageNo, DataCenterUrl); });
- if (type != 0)
- {
- await Task.Run(() => { CacheManager.GetPackageDataNode(camp.PackageNo, DataCenterUrl); });
- }
- }
- }
- /// <summary>
- /// 查询培训营分组的演练角色
- /// </summary>
- /// <param name="no"></param>
- /// <returns></returns>
- public async Task<List<string>> GetGroupRoleInfos(string no)
- {
- var entity = await GroupRoleRepository.FirstOrDefaultAsync(a => a.GroupNo == no);
- var list = entity?.RoleNames?.Split(',').ToList() ?? new List<string>();
- return list;
- }
- /// <summary>
- /// 查询培训营分组的演练角色预案
- /// </summary>
- /// <param name="no"></param>
- /// <returns></returns>
- public async Task<GroupRolePlanDto> GetGroupRolePlans(string no)
- {
- return await CacheManager.GetCache(IwbCacheNames.GroupInfoCache).GetAsync($"Plan-{no}", async () =>
- {
- var entity = await GroupRoleRepository.FirstOrDefaultAsync(a => a.GroupNo == no);
- if (entity == null)
- {
- return null;
- }
- var plans = new List<RolePlanDto>();
- if (entity.RoleGroupNos != null)
- {
- var nos = entity.RoleGroupNos.Split(',');
- foreach (var n in nos)
- {
- var gr = await GrrRepository.GetAllIncluding(a => a.TrainingRoleInfo, a => a.RoleGroupInfo)
- .Where(a => a.RoleGroupNo == n).ToListAsync();
- if (gr.Any())
- {
- var name = gr[0].RoleGroupInfo.RoleGroupName;
- var roles = gr.Select(a => a.TrainingRoleInfo.RoleName).ToList();
- plans.Add(new RolePlanDto() { Name = name, RoleName = roles });
- }
- }
- }
- if (entity.CustomRoles.IsNotEmpty())
- {
- plans.Add(new RolePlanDto()
- {
- Name = "自定义角色",
- RoleName = entity.CustomRoles.Split(',').ToList()
- });
- }
- return new GroupRolePlanDto() { GroupNo = no, Plans = plans };
- });
- }
- /// <summary>
- /// 查询培训营情景路径
- /// </summary>
- /// <param name="no"></param>
- /// <returns></returns>
- public async Task<List<PackageDataNode>> GetCampRunningInfos(string no)
- {
- var groupNos = await GroupRepository.GetAll().Where(a => a.CampNo == no).Select(a => a.Id).ToListAsync();
- var list = new List<PackageDataNode>();
- if (groupNos.Any())
- {
- foreach (var groupNo in groupNos)
- {
- var runGroupInfo = await CacheManager.GetGroupRunningInfo(groupNo, GroupRepository);
- if (runGroupInfo != null)
- {
- list.Add(runGroupInfo);
- }
- }
- }
- return list;
- }
- /// <summary>
- /// 获取某组的情景路径
- /// </summary>
- /// <param name="no"></param>
- /// <returns></returns>
- public async Task<PackageDataNode> GetGroupRunningInfo(string no)
- {
- var runGroupInfo = await CacheManager.GetGroupRunningInfo(no, GroupRepository);
- return runGroupInfo;
- }
- //private RunningInfo GetRunningInfo(string no)
- //{
- // var url =
- // $"{EngineUrl}api/services/Engine/Run/QueryRunningInfo?runningId={no}";
- // var result = url.RequestPost("");
- // var info = result.Str2Obj<RunningInfo>();
- // return info;
- //}
- #region 日志
- /// <summary>
- /// 查询当前情景的处理日志
- /// </summary>
- /// <param name="no"></param>
- /// <returns></returns>
- [DisableAuditing]
- public async Task<List<GroupRoleLogDto>> GetCurrentSceneLog(string no)
- {
- var group = await GroupRepository.FirstOrDefaultAsync(a => a.Id == no);
- if (group == null)
- {
- CheckErrors($"未查询编号为【{no}】到培训营!");
- return null;
- }
- var query = GlRepository.GetAll().Where(a =>
- a.GroupNo == no && a.LogType == LogTypeDefinition.SceneOperation &&
- a.RoundIndex == group.RoundIndex &&
- (a.LogState == LogStateDefinition.New || a.LogState == LogStateDefinition.Submit || a.LogState == LogStateDefinition.HasMatch))
- .OrderByDescending(a => a.Id).Select(a => new GroupRoleLogDto()
- {
- Id = a.Id,
- GroupNo = no,
- Role = a.RoleName,
- Word = a.LogMessage,
- LogState = a.LogState,
- ScenePath = a.ScenePath,
- ExtendInfo1 = a.ExtendInfo1,
- ExtendInfo2 = a.ExtendInfo2,
- ExtendInfo3 = a.ExtendInfo3,
- ExtendInfo4 = a.ExtendInfo4,
- });
- var dtoList = await query.ToListAsync();
- return dtoList;
- }
- /// <summary>
- /// 查询培训营分组的处理日志
- /// </summary>
- /// <param name="no"></param>
- /// <returns></returns>
- public async Task<List<GroupRoleLogDto>> GetGroupLogs(string no)
- {
- var group = await GroupRepository.FirstOrDefaultAsync(a => a.Id == no);
- if (group == null)
- {
- CheckErrors($"未查询编号为【{no}】到培训营!");
- return null;
- }
- var query = GlRepository.GetAll().Where(a => a.GroupNo == no && a.LogType == LogTypeDefinition.SceneOperation)
- .OrderByDescending(a => a.Id).Select(a => new GroupRoleLogDto()
- {
- Id = a.Id,
- GroupNo = no,
- Role = a.RoleName,
- Word = a.LogMessage,
- LogState = a.LogState,
- ExtendInfo1 = a.ExtendInfo1,
- ExtendInfo2 = a.ExtendInfo2,
- ExtendInfo3 = a.ExtendInfo3,
- ExtendInfo4 = a.ExtendInfo4,
- });
- var dtoList = await query.ToListAsync();
- return dtoList;
- }
- /// <summary>
- /// 获取系统日志
- /// </summary>
- /// <param name="no"></param>
- /// <returns></returns>
- public async Task<List<QueryLogDto>> GetCampLogs(string no)
- {
- var dtoList = await GlRepository.GetAllIncluding(a => a.CampGroupInfo).Where(a => a.CampNo == no && a.LogType == LogTypeDefinition.System)
- .OrderBy(a => a.Id).Select(a => new QueryLogDto()
- {
- Name = a.CampGroupInfo != null ? a.CampGroupInfo.Name : "系统",
- Msg = a.LogCommand,
- Date = a.CreationTime
- }).ToListAsync();
- return dtoList;
- }
- /// <summary>
- /// 获取专家的问题
- /// </summary>
- /// <param name="id"></param>
- /// <returns></returns>
- public async Task<string> GetQuestionById(int id)
- {
- var log = await GlRepository.FirstOrDefaultAsync(a => a.Id == id);
- return log.LogMessage ?? "";
- }
- /// <summary>
- /// 获取专家的问题
- /// </summary>
- /// <param name="groupNo"></param>
- /// <param name="campNo"></param>
- /// <returns></returns>
- public async Task<List<OpSpecialistQuestionDto>> GetQuestionsByGroup(string groupNo, string campNo)
- {
- var list = await GlRepository.GetAll().Where(a =>
- a.CampNo == campNo && (a.GroupNo == null || a.GroupNo == groupNo)
- && a.LogCommand == LogCommandDefinition.SpecialistQuestion).Select(a =>
- new OpSpecialistQuestionDto
- {
- Id = a.Id,
- Question = a.LogMessage,
- }).ToListAsync();
- var logs = new List<OpSpecialistQuestionDto>();
- foreach (var item in list)
- {
- var answers = await GlRepository.GetAll().Where(a => a.ParentNo == item.Id + "" && a.GroupNo == groupNo).Select(a => new OpSpecialistAnswerDto()
- {
- Id = a.Id,
- Answer = a.LogMessage,
- GroupNo = a.GroupNo,
- GroupName = a.ExtendInfo1,
- }).ToListAsync();
- item.Answers = answers;
- logs.Add(item);
- }
- return logs.OrderByDescending(a => a.Id).ToList(); ;
- }
- /// <summary>
- /// 获取专家问答信息
- /// </summary>
- /// <param name="campNo"></param>
- /// <returns></returns>
- public async Task<List<OpSpecialistQuestionDto>> GetQuestionAndAnswerByCamp(string campNo)
- {
- var list = await GlRepository.GetAllIncluding(a => a.CampGroupInfo).Where(a => a.CampNo == campNo && a.LogCommand == LogCommandDefinition.SpecialistQuestion).Select(a =>
- new OpSpecialistQuestionDto
- {
- Id = a.Id,
- GroupName = a.GroupNo == null ? "全部分组" : a.CampGroupInfo.Name,
- Question = a.LogMessage,
- }).ToListAsync();
- foreach (var item in list)
- {
- var answers = await GlRepository.GetAll().Where(a => a.ParentNo == item.Id + "").Select(a =>
- new OpSpecialistAnswerDto()
- {
- Id = a.Id,
- GroupNo = a.GroupNo,
- GroupName = a.ExtendInfo1,
- Answer = a.LogMessage,
- }).ToListAsync();
- item.Answers = answers;
- }
- return list.OrderByDescending(a => a.Id).ToList();
- }
- #endregion 日志
- #region 情景
- /// <summary>
- /// 获取分组当前运行中的情景
- /// </summary>
- /// <param name="no"></param>
- /// <returns></returns>
- public async Task<List<SceneDto>> GetGroupRunningScenes(string no)
- {
- var group = await GroupRepository.FirstOrDefaultAsync(a => a.Id == no);
- if (group == null)
- {
- CheckErrors($"未查询编号为【{no}】到培训营!");
- return null;
- }
- List<SceneDto> list = new List<SceneDto>();
- var runGroupInfo = await CacheManager.GetGroupRunningInfo(no, GroupRepository);
- if (runGroupInfo == null)
- {
- return list;
- }
- var runRound = runGroupInfo.Children?.FirstOrDefault(a => a.IsStart && !a.IsEnd);
- if (runRound != null)
- {
- var runBlocks = runRound.Children?.Where(a => a.IsStart && !a.IsEnd).OrderBy(a => a.Id);
- if (runBlocks != null)
- {
- foreach (var b in runBlocks)
- {
- var runFlows = b.Children?.Where(a => a.IsStart && !a.IsEnd).OrderBy(a => a.Id);
- if (runFlows != null)
- foreach (var f in runFlows)
- {
- var runNodes = f.Children?.Where(a => a.IsStart).OrderBy(a => a.Id);
- if (runNodes != null)
- foreach (var node in runNodes)
- {
- list = await GetSceneFromNode(list, node, no, true);
- }
- }
- }
- }
- }
- return list;
- }
- /// <summary>
- /// 获取分组情景
- /// </summary>
- /// <param name="no"></param>
- /// <returns></returns>
- public async Task<List<SceneDto>> GetGroupScenes(string no)
- {
- var group = await GroupRepository.FirstOrDefaultAsync(a => a.Id == no);
- if (group == null)
- {
- CheckErrors($"未查询编号为【{no}】到培训营!");
- return null;
- }
- List<SceneDto> list = new List<SceneDto>();
- //var pathDto = (ScenePathDto)(await CacheManager.GetCache(IwbCacheNames.SceneInfoCache)
- // .GetOrDefaultAsync($"SceneNos-{no}"));
- //if (pathDto != null)
- //{
- // list = (List<SceneDto>)await CacheManager.GetCache(IwbCacheNames.SceneInfoCache).GetOrDefaultAsync($"SceneInfos-{no}");
- // if (pathDto.hasChange || list == null || list.Count == 0)
- // {
- // pathDto.hasChange = false;
- // await CacheManager.GetCache(IwbCacheNames.SceneInfoCache).SetAsync($"SceneNos-{no}", pathDto);
- // list = new List<SceneDto>();
- // foreach (var path in pathDto.PathList)
- // {
- // var scene = await GetSceneInfo_Last(no, path);
- // if (scene != null)
- // {
- // list.Add(scene);
- // }
- // }
- // await CacheManager.GetCache(IwbCacheNames.SceneInfoCache).SetAsync($"SceneInfos-{no}", list);
- // }
- //}
- //else
- //{
- //}
- var runGroupInfo = await CacheManager.GetGroupRunningInfo(no, GroupRepository);
- if (runGroupInfo == null)
- {
- return list;
- }
- var runRounds = runGroupInfo.Children?.Where(a => a.IsStart).OrderBy(a => a.Id);
- if (runRounds != null)
- foreach (var r in runRounds)
- {
- var runBlocks = r.Children?.Where(a => a.IsStart).OrderBy(a => a.Id);
- if (runBlocks != null)
- foreach (var b in runBlocks)
- {
- var runFlows = b.Children?.Where(a => a.IsStart).OrderBy(a => a.Id);
- if (runFlows != null)
- foreach (var f in runFlows)
- {
- var runNodes = f.Children?.Where(a => a.IsStart).OrderBy(a => a.Id);
- if (runNodes != null)
- foreach (var node in runNodes)
- {
- list = await GetSceneFromNode(list, node, no);
- }
- }
- }
- }
- //if (list.Any())
- //{
- // pathDto = new ScenePathDto()
- // {
- // hasChange = false,
- // PathList = list.Select(a => a.Path).ToList()
- // };
- // await CacheManager.GetCache(IwbCacheNames.SceneInfoCache).SetAsync($"SceneNos-{no}", pathDto);
- //}
- if (list.Any())
- {
- list = list.OrderByDescending(a => a.HasEnd).ToList();
- }
- return list;
- }
- /// <summary>
- /// 提取情景节点中的情景信息
- /// </summary>
- /// <param name="list"></param>
- /// <param name="node"></param>
- /// <param name="groupNo"></param>
- /// <param name="isRunningScene"></param>
- /// <returns></returns>
- private async Task<List<SceneDto>> GetSceneFromNode(List<SceneDto> list, FlowNodeDataNode node, string groupNo, bool isRunningScene = false)
- {
- if (node.SceneNodes != null)
- {
- if (!isRunningScene || !node.IsEnd)
- {
- foreach (var scene in node.SceneNodes)
- {
- var dto = await GetGroupSceneInfo(groupNo, scene.Path);
- if (dto != null)
- {
- dto.HasEnd = scene.IsEnd;
- list.Add(dto);
- }
- }
- }
- }
- var child = node.Children?.FirstOrDefault(a => a.IsStart);
- if (child != null)
- {
- list = await GetSceneFromNode(list, child, groupNo, isRunningScene);
- }
- return list;
- }
- private async Task<SceneDto> GetSceneInfo_Last(string no, string scenePath)
- {
- var dto = CacheManager.GetCache(IwbCacheNames.SceneInfoCache)
- .Get($"{no}-{scenePath}-end", () => default(SceneDto));
- if (dto == null)
- {
- await CacheManager.GetCache(IwbCacheNames.SceneInfoCache).RemoveAsync($"{no}-{scenePath}");
- dto = await GetGroupSceneInfo(no, scenePath);
- }
- return dto;
- }
- /// <summary>
- /// 查询情景信息
- /// </summary>
- /// <param name="no"></param>
- /// <param name="scenePath"></param>
- /// <returns></returns>
- [DisableAuditing]
- public async Task<SceneDto> GetGroupSceneInfo(string no, string scenePath)
- {
- //Stopwatch stopwatch = new Stopwatch();
- //Stopwatch stopwatch2 = new Stopwatch();
- //stopwatch.Start();
- //stopwatch2.Start();
- var groupCampNo = await GroupRepository.GetAll().Where(a => a.Id == no).Select(a => a.CampNo).FirstOrDefaultAsync();
- if (groupCampNo == null)
- {
- CheckErrors($"未查询编号为【{no}】到培训营!");
- return null;
- }
- var sceneDto = await CacheManager.GetCache(IwbCacheNames.SceneInfoCache).GetAsync($"{no}-{scenePath}",
- async () =>
- {
- SceneDto dto = null;
- try
- {
- var detail = await CacheManager.GetCampPackageDetail(groupCampNo, DataCenterUrl, CampRepository);
- var scene = detail?.Scenes.FirstOrDefault(a => a.Path == scenePath);
- if (scene == null)
- {
- return null;
- }
- dto = scene.Obj2String().Str2Obj<SceneDto>();
- //var runGroupInfo = await CacheManager.GetGroupRunningInfo(no, GroupRepository);
- //if (runGroupInfo == null)
- //{
- // return null;
- //}
- //var runScene = runGroupInfo.RunSceneInfos.FirstOrDefault(a => a.Path == scene.Path);
- //stopwatch.Stop();
- //this.LogInfo($"1耗时{scenePath}:{stopwatch.ElapsedMilliseconds}毫秒");
- //stopwatch.Restart();
- var runScene = await GetRunScene(no, scene);
- if (runScene != null)
- {
- dto.HasEnd = runScene.IsEnd;
- dto.Variables = dto.Variables.MergeHashtable(runScene.GetVariables());
- dto.SystemScore = runScene.SystemScore;
- dto.FullScore = runScene.FullScore;
- }
- //stopwatch.Stop();
- //this.LogInfo($"2耗时{scenePath}:{stopwatch.ElapsedMilliseconds}毫秒");
- //stopwatch.Restart();
- var gList = new List<GuideModel>();
- if (scene.GuideNos.IsNotEmpty())
- {
- var arr = scene.GuideNos.Split(',');
- foreach (var gNo in arr)
- {
- var g = detail.Guides?.FirstOrDefault(a => a.Id == gNo);
- if (g != null)
- {
- gList.Add(g);
- }
- }
- }
- dto.GuideInfos = gList;
- var attachList =
- await CacheManager.GetSceneAttaches(groupCampNo, scene.Id, SceneMapRepository, AttachRepository);
- dto.Attaches = attachList;
- }
- catch (Exception e)
- {
- this.LogError(e);
- }
- //stopwatch2.Stop();
- //this.LogInfo($"【总耗时】:{stopwatch2.ElapsedMilliseconds}毫秒");
- return dto;
- });
- if (sceneDto != null && sceneDto.HasEnd)
- {
- await CacheManager.GetCache(IwbCacheNames.SceneInfoCache).SetAsync($"{no}-{scenePath}-end", sceneDto);
- }
- return sceneDto;
- }
- private async Task<SceneDataNode> GetRunScene(string no, SceneModel scene)
- {
- SceneDataNode runScene = null;
- var i = 0;
- while (runScene == null && i < 5)
- {
- var runGroupInfo = await CacheManager.GetGroupRunningInfo(no, GroupRepository);
- runScene = runGroupInfo?.RunSceneInfos.FirstOrDefault(a => a.Path == scene.Path);
- i++;
- //if (runScene == null)
- //{
- // await CacheManager.GetCache(IwbCacheNames.GroupRunningInfoCache).RemoveAsync(no);
- // Thread.Sleep(500 * i);
- //}
- int time = 400 - i * 50;
- time = time > 0 ? time : 50;
- Thread.Sleep(time);
- }
- return runScene;
- }
- #endregion 情景
- /// <summary>
- /// 查询分组当前轮次得分
- /// </summary>
- /// <param name="no"></param>
- /// <returns></returns>
- [DisableAuditing]
- public async Task<GroupScoreDto> GetGroupScoreInfo(string no)
- {
- var group = await GroupRepository.FirstOrDefaultAsync(a => a.Id == no);
- if (group == null)
- {
- CheckErrors($"未查询编号为【{no}】到培训营!");
- return null;
- }
- var score = await GsRepository.GetAll().Where(a => a.GroupNo == no).OrderByDescending(a => a.RoundIndex)
- .FirstOrDefaultAsync();
- if (score == null)
- {
- return null;
- }
- var dto = ObjectMapper.Map<GroupScoreDto>(score);
- return dto;
- }
- /// <summary>
- /// 查询培训营得分
- /// </summary>
- /// <param name="no"></param>
- /// <returns></returns>
- public async Task<List<QueryGroupScoreDto>> GetScoreInfo(string no)
- {
- var scores = await GsRepository.GetAllIncluding(a => a.CampGroupInfo, a => a.CampGroupInfo.CampInfo)
- .Where(a => a.CampNo == no).OrderBy(a => a.GroupNo).ThenBy(a => a.RoundIndex).Select(a => new QueryGroupScoreDto()
- {
- GroupNo = a.GroupNo,
- GroupName = a.CampGroupInfo.Name,
- CampNo = a.CampNo,
- RoundIndex = a.RoundIndex,
- SystemScore = a.FinalTotalScore != 0 ? a.FinalTotalScore : a.SystemScore,
- TotalScore = a.CampGroupInfo.CampInfo.RoundScore,
- BehaviorTagScoreInfo = a.BehaviorTagScoreInfo
- }).ToListAsync();
- return scores;
- }
- /// <summary>
- /// 查询培训营得分
- /// </summary>
- /// <param name="no"></param>
- /// <returns></returns>
- public async Task<List<QueryGroupScoreDto>> GetScoreChart(string no)
- {
- var scores = await GsRepository.GetAllIncluding(a => a.CampGroupInfo, a => a.CampGroupInfo.CampInfo)
- .Where(a => a.CampNo == no).OrderBy(a => a.GroupNo).ThenBy(a => a.RoundIndex).Select(a => new QueryGroupScoreDto()
- {
- GroupNo = a.GroupNo,
- GroupName = a.CampGroupInfo.Name,
- CampNo = a.CampNo,
- RoundIndex = a.RoundIndex,
- SystemScore = a.FinalTotalScore > 0 ? a.FinalTotalScore : a.CorrectionScore > 0 ? a.CorrectionScore : a.SystemScore,
- TotalScore = a.CampGroupInfo.CampInfo.RoundScore,
- BehaviorTagScoreInfo = a.BehaviorTagScoreInfo
- }).ToListAsync();
- var groups = await GroupRepository.GetAllIncluding(a => a.CampInfo).Where(a => a.CampNo == no).ToListAsync();
- var score = 0;//scores.Any(a => a.SystemScore > 0) ? 0 : 50;
- var btsInfo = "[{\"tagNo\":\"对媒体\",\"systemScore\":0,\"totalScore\":10}," +
- "{\"tagNo\":\"对上级\",\"systemScore\":0,\"totalScore\":10}," +
- "{\"tagNo\":\"对下级\",\"systemScore\":0,\"totalScore\":10}," +
- "{\"tagNo\":\"对相关单位\",\"systemScore\":0,\"totalScore\":10}," +
- "{\"tagNo\":\"决策力\",\"systemScore\":8,\"totalScore\":10}," +
- "{\"tagNo\":\"协调力\",\"systemScore\":8,\"totalScore\":10}," +
- "{\"tagNo\":\"研判力\",\"systemScore\":8,\"totalScore\":10}," +
- "{\"tagNo\":\"舆论引导力\",\"systemScore\":8,\"totalScore\":10}," +
- "{\"tagNo\":\"掌控力\",\"systemScore\":8,\"totalScore\":10}]";
- foreach (var group in groups)
- {
- for (int i = 1; i <= 3; i++)
- {
- //if (!scores.Any(a => a.GroupNo == group.Id && a.RoundIndex == group.RoundIndex))
- var scoreDto = scores.FirstOrDefault(a => a.GroupNo == group.Id && a.RoundIndex == i);
- if (scoreDto == null)
- {
- scores.Add(new QueryGroupScoreDto()
- {
- GroupNo = group.Id,
- GroupName = group.Name,
- CampNo = group.CampNo,
- RoundIndex = i,
- SystemScore = score,
- TotalScore = group.CampInfo.RoundScore,
- BehaviorTagScoreInfo = btsInfo
- });
- }
- else
- {
- if (scoreDto.BehaviorTagScoreInfo.IsEmpty())
- {
- scoreDto.BehaviorTagScoreInfo = btsInfo;
- }
- }
- }
- }
- return scores.OrderBy(a => a.GroupNo).ToList();
- }
- /// <summary>
- /// 查询培训营处理日志统计
- /// </summary>
- /// <param name="no"></param>
- /// <returns></returns>
- public async Task<List<ChartLogDto>> GetCampLogChart(string no)
- {
- var list = await GlRepository.GetAllIncluding(a => a.CampGroupInfo)
- .Where(a => a.CampNo == no && a.LogType == LogTypeDefinition.SceneOperation).Select(a => new GroupRoleLogDto
- {
- GroupNo = a.GroupNo,
- GroupName = a.CampGroupInfo.Name,
- LogState = a.LogState,
- }).ToListAsync();
- var dtoList = list.GroupBy(a => a.GroupNo).Select(a => new ChartLogDto()
- {
- GroupNo = a.Key,
- GroupName = a.FirstOrDefault()?.GroupName,
- Matched = a.Count(s => s.LogState == LogStateDefinition.HasMatch || s.LogState == LogStateDefinition.HasSendMatch),
- NotMatched = a.Count(s => s.LogState == LogStateDefinition.Send || s.LogState == LogStateDefinition.Submit)
- }).ToList();
- var groups = await GroupRepository.GetAllListAsync((a => a.CampNo == no));
- foreach (var group in groups)
- {
- if (dtoList.All(a => a.GroupNo != group.Id))
- {
- dtoList.Add(new ChartLogDto()
- {
- GroupNo = group.Id,
- GroupName = group.Name,
- Matched = 0,
- NotMatched = 0,
- });
- }
- }
- return dtoList.OrderBy(a => a.GroupNo).ToList();
- }
- public async Task<StepList.StepInfo> GetCampStep(string no)
- {
- var log = await GlRepository.GetAll()
- .Where(a => a.CampNo == no && a.LogCommand == LogCommandDefinition.Step)
- .OrderByDescending(a => a.CreationTime).FirstOrDefaultAsync();
- var dto = log?.LogMessage.Str2Obj<StepList.StepInfo>();
- return dto;
- }
- public async Task<string> Voice(string txt, int? rate = null, int? vol = null)
- {
- string fileName = $"{DateTime.Now:yyyyMMddHHmmssfff}.wav",
- filePath =
- $"/{await SettingManager.GetSettingValueAsync(IwbSettingNames.DownloadPath)}/Voice",
- fullPath = $"{AppDomain.CurrentDomain.BaseDirectory}/{filePath}";
- if (!Directory.Exists(fullPath))
- {
- Directory.CreateDirectory(fullPath);
- }
- var task = Task.Run(() =>
- {
- using (var sp = new SpeechSynthesizer())
- using (MemoryStream ms = new MemoryStream())
- {
- sp.Rate = rate ?? 0;
- sp.Volume = vol ?? 90;
- //sp.SetOutputToWaveStream(ms);
- sp.SetOutputToWaveFile($"{fullPath}/{fileName}");
- Prompt prompt = new Prompt(txt);
- sp.Speak(prompt);
- ms.Position = 0;
- }
- });
- Task.WaitAll(task);
- return $"{filePath}/{fileName}";
- }
- }
- }
|