using Admin.NET.Core; using Elastic.Transport; using Furion.DatabaseAccessor; using Furion.DataValidation; using Furion.DependencyInjection; using Furion.DynamicApiController; using Furion.FriendlyException; using iText.Signatures.Validation.Report; using Mapster; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using MongoDB.Driver.Linq; using Newtonsoft.Json; using OfficeOpenXml.ConditionalFormatting; using RazorEngine.Compilation.ImpromptuInterface.Optimization; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Dynamic.Core; using System.Text; using System.Text.Json; using System.Threading.Tasks; namespace Admin.NET.Application { /// /// 量表类型表服务 /// [ApiDescriptionSettings("测评服务", Name = "BusScale", Order = 100)] public class BusScaleService : IDynamicApiController, ITransient { private readonly SqlSugarRepository _busScaleRep; private readonly SqlSugarRepository _busScaleQuestionsRep; private readonly SqlSugarRepository _busmenMapScaleRep; private readonly SqlSugarRepository _dictdataRep; private readonly SqlSugarRepository _studentScaleResultsRep; private readonly SqlSugarRepository _custommapreportRep; private readonly SqlSugarRepository _customexplainRep; private readonly SqlSugarRepository _ScaleDescriptionRep; private readonly UserManager _userManager; private readonly SqlSugarRepository _hldtagmapprorep; private readonly SqlSugarRepository _bustagmappersonrep; /// /// /// /// /// /// /// /// /// /// /// /// /// /// public BusScaleService( SqlSugarRepository busScaleRep, SqlSugarRepository _ScaleQuestionRep, SqlSugarRepository menMapScaleRep, SqlSugarRepository dictdataRep, SqlSugarRepository studentScaleResultsRep, SqlSugarRepository custommapreportRep, SqlSugarRepository customexplainRep, SqlSugarRepository scaleDescriptionRep, UserManager userManager, SqlSugarRepository hldtagmapprorep, SqlSugarRepository bustagmappersonrep ) { _busScaleRep = busScaleRep; _busScaleQuestionsRep = _ScaleQuestionRep; _busmenMapScaleRep = menMapScaleRep; _dictdataRep = dictdataRep; _studentScaleResultsRep = studentScaleResultsRep; _custommapreportRep = custommapreportRep; _customexplainRep = customexplainRep; _ScaleDescriptionRep = scaleDescriptionRep; _userManager = userManager; _hldtagmapprorep = hldtagmapprorep; _bustagmappersonrep = bustagmappersonrep; } /// /// 分页查询量表类型表 /// /// /// [HttpGet("page")] public async Task> Page([FromQuery] BusScaleInput input) { var busScales = await _busScaleRep.AsQueryable() .WhereIF(!string.IsNullOrEmpty(input.Name), u => u.Name == input.Name) .WhereIF(input.QuestionsType.HasValue, u => u.QuestionsType == input.QuestionsType) .WhereIF(!string.IsNullOrEmpty(input.Summary), u => u.Summary == input.Summary) .WhereIF(!string.IsNullOrEmpty(input.Pic), u => u.Pic == input.Pic) //.Where(u => u.Sort == input.Sort) .OrderBy(u => u.CreateTime, OrderByType.Desc) .OrderBuilder(input) .Select(s => new BusScaleOutput() { Name = s.Name, QuestionsType = s.QuestionsType, Summary = s.Summary, Status = s.Status, Pic = s.Pic, Sort = s.Sort, Id = s.Id }) .ToPagedListAsync(input.Page, input.PageSize); return busScales; } /// /// 增加量表类型表 /// /// /// [HttpPost("add")] public async Task Add(AddBusScaleInput input) { var busScale = input.Adapt(); await _busScaleRep.InsertAsync(busScale); } /// /// 删除量表类型表 /// /// /// [HttpPost("delete")] public async Task Delete(DeleteBusScaleInput input) { var busScale = await _busScaleRep.AsQueryable().FirstAsync(u => u.Id == input.Id); await _busScaleRep.FakeDeleteAsync(busScale); } /// /// 更新量表类型表 /// /// /// [HttpPost("edit")] public async Task Update(UpdateBusScaleInput input) { var isExist = await _busScaleRep.AsQueryable().AnyAsync(u => u.Id == input.Id); if (!isExist) throw Oops.Oh(ErrorCodeEnum.D3000); var busScale = input.Adapt(); await _busScaleRep.UpdateAsync(busScale); } /// /// 获取量表类型表 /// /// /// [HttpGet("detail")] public async Task Get([FromQuery] QueryeBusScaleInput input) { return (await _busScaleRep.AsQueryable().FirstAsync(u => u.Id == input.Id)).Adapt(); } /// /// 获取量表类型表列表 /// /// /// [HttpGet("list")] [AllowAnonymous] public async Task> List([FromQuery] BusByMenuInput input) { if (input.MenuId <= 0) { throw Oops.Oh(ErrorCodeEnum.D1016); } var result = await _busmenMapScaleRep.AsQueryable().Where(e => e.MenuId == input.MenuId && e.IsDelete == false).Select(s => s.ScaleId).ToListAsync(); return await _busScaleRep.AsQueryable().Where(e => e.IsDelete == false && result.Contains(e.Id)).Select(e => new BusScaleOutput() { Name = e.Name, QuestionsType = e.QuestionsType, MinImg = e.MinImg, Summary = e.Summary, Status = e.Status, Pic = e.Pic, Sort = e.Sort, Id = e.Id }).ToListAsync(); } /// /// 留学问卷试题获取 /// /// /// [HttpGet("getbusscalestudy")] public async Task> GetBusScaleStudy([FromQuery] BusScaleRequestDTO requestDTO) { var scaleresult = new List(); var diclist = await _dictdataRep.AsQueryable().Where(e => e.DictTypeId == 341341177155653).ToListAsync(); var query = await _busScaleQuestionsRep.AsQueryable().Where(e => e.ScaleId == requestDTO.ScaleId && e.IsDelete == false).ToListAsync(); var list = new List(); query.ForEach(a => { list.Add(JsonConvert.DeserializeObject(a.Context)); }); diclist.ForEach(a => { int code = int.Parse(a.Code); var item = new BusScaleStudyBroadResponseDTO() { TitleName = a.Value, busScaleStudies = list.Where(e => e.type == code).ToList() }; scaleresult.Add(item); }); return scaleresult; } /// /// 根据用户Id获取试题进度 /// /// /// [HttpGet("getcustommaproccess")] public async Task GetCustomMapProccess([FromQuery] CustomMapProccessRequestDTO requestDTO) { var res = new CustomMapProccessDTO(); var dicdata = await _dictdataRep.AsQueryable().Where(e => e.DictTypeId == 341857672892485).ToListAsync(); res.mapProccesses = dicdata.Select(s => new MapProccessDTO() { Name = s.Value, Status = 0, ScaleId = long.Parse(s.Code), Sort = s.OrderNo }).ToList(); var scaldescription = await _ScaleDescriptionRep.AsQueryable().Where(e => res.mapProccesses.Select(s => s.ScaleId).Contains(e.ScaleId)).ToListAsync(); var custommapreport = await _custommapreportRep.AsQueryable().Where(e => e.IsDelete == false && e.CustomId == requestDTO.CustomId && e.Status == 0).ToListAsync(); if (!custommapreport.Any()) { await _custommapreportRep.InsertAsync(new BusCustomMapReport() { // CreateTime = DateTime.Now, CreateUserId = _userManager.UserId, CreateUserName = _userManager.Account, CustomId = requestDTO.CustomId, Proccess = 1, Status = 0 }); res.ScaleId = dicdata.FirstOrDefault(s => s.OrderNo == 1).Code; long scaleId = long.Parse(res.ScaleId); res.Description = (await _busScaleRep.GetFirstAsync(e => e.Id == scaleId)).Summary; res.mapProccesses.ForEach(a => { a.Application = scaldescription.FirstOrDefault(s => s.ScaleId == a.ScaleId).Application; a.Notice = scaldescription.FirstOrDefault(s => s.ScaleId == a.ScaleId).Notice; a.UsesTime = scaldescription.FirstOrDefault(s => s.ScaleId == a.ScaleId).UsesTime; a.Introduce = scaldescription.FirstOrDefault(s => s.ScaleId == a.ScaleId).Introduce; a.Status = 0; }); } else { var customsort = custommapreport.FirstOrDefault().Proccess; res.mapProccesses.ForEach(a => { a.Status = a.Sort < customsort ? 1 : 0; a.Application = scaldescription.FirstOrDefault(s => s.ScaleId == a.ScaleId).Application; a.Notice = scaldescription.FirstOrDefault(s => s.ScaleId == a.ScaleId).Notice; a.UsesTime = scaldescription.FirstOrDefault(s => s.ScaleId == a.ScaleId).UsesTime; a.Introduce = scaldescription.FirstOrDefault(s => s.ScaleId == a.ScaleId).Introduce; }); res.ScaleId = dicdata.FirstOrDefault(s => s.OrderNo == customsort).Code; long scaleId = long.Parse(res.ScaleId); res.Description = (await _busScaleRep.GetFirstAsync(e => e.Id == scaleId)).Summary; } return res; } /// /// 根据量表类型Id获取量表试题内容 /// /// /// [HttpGet("getscalequestions")] public async Task GetScaleQuestions([FromQuery] BusScaleRequestDTO requestDTO) { // int k = 0; try { var scaleresult = new BusScaleResponseDTO(); var single = await _busScaleRep.GetFirstAsync(r => r.Id == requestDTO.ScaleId); var query = await _busScaleQuestionsRep.AsQueryable().Where(e => e.ScaleId == requestDTO.ScaleId && e.IsDelete == false).ToListAsync(); var qlist = new List(); query.ForEach(c => { // k++; // var newmodel = new ScaleQuestions() { answer = c.Context }; var newmodel = JsonConvert.DeserializeObject(c.Context); newmodel.sort = c.Sort; newmodel.type = newmodel.answer.FirstOrDefault().tag; qlist.Add(newmodel); }); // scaleresult.Description = single.Summary; scaleresult.scaleQuestions = qlist; scaleresult.Go = single.Name.Contains("职业锚价值观") ? 1 : 0;//迎合前端给特例 scaleresult.QuestionsType = single.QuestionsType; return scaleresult; } catch (Exception ex) { throw Oops.Oh(ex); } } /// /// 获取量表描述 /// /// /// [HttpGet("GetBusScaleDescription")] public async Task GetBusScaleDescription([FromQuery] BusScaleDescriptionRequestDTO requestDTO) { var res = new BusScaleDescriptionResponseDto(); res.busScaleDescriptions = await _ScaleDescriptionRep.AsQueryable() .Where(e => e.ScaleId == requestDTO.ScaleId) .Select(s => new BusScaleDescriptionDto() { Title = s.Title, Application = s.Application, Introduce = s.Introduce, Notice = s.Notice, ScaleId = s.ScaleId, UsesTime = s.UsesTime, Sort = s.Sort }).ToListAsync(); return res; } /// /// 量表试题保存集合 /// /// /// [HttpPost("CustomBusScale")] public async Task CustomBusScale(CustomBusScaleRequestDTO scaleRequestDTO) { var result = new CustomBusScaleDto(); var newpp = new BusScaleResult(); var scalTotals = new List(); var models = new BusStudentScaleResults() { CreateUserId = _userManager.UserId, CreateTime = DateTime.Now, CreateUserName = _userManager.Account, SysOauthUserId = _userManager.UserId, ScaleId = scaleRequestDTO.ScaleId, TenantId = _userManager.TenantId, // Type = -1, // Result = JsonConvert.SerializeObject(newpp) }; var single = new BusCustomMapReport(); switch (scaleRequestDTO.ScaleId) { case 339914746081349:// 兴趣测评[Holland] var jsons = JsonConvert.DeserializeObject>(scaleRequestDTO.Inputs.ToString()).GroupBy(s => new { name = s.name }).Select(s => new ScalListItem() { name = s.Key.name, value = s.Sum(c => c.value) }).OrderByDescending(c => c.value).ToList(); int i = 0; jsons.ForEach(a => { i++; if (i <= 3) { newpp.Result += a.name; } }); newpp.scalLists = jsons; models.Result = JsonConvert.SerializeObject(newpp); single = await _custommapreportRep.AsQueryable().FirstAsync(e => e.CustomId == scaleRequestDTO.CustomId && e.Status == 0 && e.IsDelete == false); single.Proccess = 2; break; case 339916661030981://性格测评[MBTI] //E-I S-N T-F J-P var mbtilist = JsonConvert.DeserializeObject>(scaleRequestDTO.Inputs.ToString()).GroupBy(s => new { name = s.name }) .Select(s => new ScalListItem() { name = s.Key.name, value = s.Sum(c => c.value) }).ToList(); var taglist = "ESTJ"; for (var k = 0; k < taglist.Length; k++) { switch (taglist[k].ToString()) { case "E": newpp.Result += mbtilist.FirstOrDefault(e => e.name == taglist[k].ToString()).value > mbtilist.FirstOrDefault(e => e.name == "I").value ? "E" : "I"; break; case "S": newpp.Result += mbtilist.FirstOrDefault(e => e.name == taglist[k].ToString()).value > mbtilist.FirstOrDefault(e => e.name == "N").value ? "S" : "N"; break; case "T": newpp.Result += mbtilist.FirstOrDefault(e => e.name == taglist[k].ToString()).value > mbtilist.FirstOrDefault(e => e.name == "F").value ? "T" : "F"; break; case "J": newpp.Result += mbtilist.FirstOrDefault(e => e.name == taglist[k].ToString()).value > mbtilist.FirstOrDefault(e => e.name == "P").value ? "J" : "P"; break; } } newpp.scalLists = mbtilist; models.Result = JsonConvert.SerializeObject(newpp); single = await _custommapreportRep.AsQueryable().FirstAsync(e => e.CustomId == scaleRequestDTO.CustomId && e.Status == 0 && e.IsDelete == false); single.Proccess = 3; break; case 339916993155141://能力测评[MIDAS] //Y(语言智能) R(人际智能) D(运动智能) Z(自然智能) K(空间智能) S(数理智能) L(音乐智能) N(内省智能) var midaslist = JsonConvert.DeserializeObject>(scaleRequestDTO.Inputs.ToString()).GroupBy(s => new { name = s.name }) .Select(s => new ScalListItem() { name = s.Key.name, value = s.Sum(c => c.value) }).ToList(); var scalLists = new List(); midaslist.ForEach(a => { var item = new ScalListItem(); switch (a.name) { case "Y": item.value = a.value; item.name = a.name; item.type = "言语语言智能"; break; case "R": item.value = a.value; item.name = a.name; item.type = "人际交往智能"; break; case "D": item.value = a.value; item.name = a.name; item.type = "身体动觉智能"; break; case "Z": item.value = a.value; item.name = a.name; item.type = "自然观察智能"; break; case "K": item.value = a.value; item.name = a.name; item.type = "视觉空间智能"; break; case "S": item.value = a.value; item.name = a.name; item.type = "逻辑数理智能"; break; case "L": item.value = a.value; item.name = a.name; item.type = "音乐节奏智能"; break; case "N": item.value = a.value; item.name = a.name; item.type = "自知自省智能"; break; } scalLists.Add(item); }); newpp.scalLists = scalLists; models.Result = JsonConvert.SerializeObject(newpp); single = await _custommapreportRep.AsQueryable().FirstAsync(e => e.CustomId == scaleRequestDTO.CustomId && e.Status == 0 && e.IsDelete == false); single.Proccess = 4; break; case 339917685502021://职业锚价值观[Career Anchors] var careeranchors = JsonConvert.DeserializeObject>(scaleRequestDTO.Inputs.ToString()).GroupBy(s => new { name = s.name }) .Select(s => new ScalListItem() { name = s.Key.name, value = s.Sum(c => c.value) }).ToList(); careeranchors.ForEach(a => { a.value = a.value == 6 ? a.value + 4 : a.value; }); newpp.scalLists = careeranchors; newpp.Tag = string.Join("+", careeranchors.OrderByDescending(item => item.value).Take(2).Select(s => s.name).ToList()); models.Type = -1; models.Result = JsonConvert.SerializeObject(newpp); single = await _custommapreportRep.AsQueryable().FirstAsync(e => e.CustomId == scaleRequestDTO.CustomId && e.Status == 0 && e.IsDelete == false); single.Proccess = 5; single.Status = 1; break; case 339926224392261://学习拖延 break; case 339926358470725://厌学情绪评估 break; case 339926424055877://学习风格 var fengge = JsonConvert.DeserializeObject>(scaleRequestDTO.Inputs.ToString()).GroupBy(s => new { name = s.name }) .Select(s => new ScalListItem() { name = s.Key.name, value = s.Sum(c => c.value) }).ToList(); var fglist = new List(); fengge.ForEach(a => { var item = new ScalListItem();//A=冲动型或灵感型;P=务实型或实用型;R=沉思型或反思型;T=为理论型 switch (a.name) { case "A": item.value = a.value; item.name = a.name; item.type = "冲动型或灵感型"; break; case "P": item.value = a.value; item.name = a.name; item.type = "务实型或实用型"; break; case "R": item.value = a.value; item.name = a.name; item.type = "沉思型或反思型"; break; case "T": item.value = a.value; item.name = a.name; item.type = "理论型"; break; } fglist.Add(item); }); newpp.scalLists = fglist; models.Type = 4; models.Title = "学习风格"; models.Result = JsonConvert.SerializeObject(newpp); break; case 339926523736133://学生考试焦虑 scalTotals = JsonConvert.DeserializeObject>(scaleRequestDTO.Inputs.ToString()); models.Type = 1; models.Title = "考试焦虑"; models.Result = JsonConvert.SerializeObject(scalTotals); break; case 339926607917125://学习技能 scalTotals = JsonConvert.DeserializeObject>(scaleRequestDTO.Inputs.ToString()); models.Type = 1; models.Title = "学习技能"; models.Result = JsonConvert.SerializeObject(scalTotals); break; case 340506604851269://SAS焦虑测评 scalTotals = JsonConvert.DeserializeObject>(scaleRequestDTO.Inputs.ToString()); models.Type = 1; models.Title = "焦虑自评"; models.Result = JsonConvert.SerializeObject(scalTotals); break; case 340506680250437://SDS抑郁测评 scalTotals = JsonConvert.DeserializeObject>(scaleRequestDTO.Inputs.ToString()); models.Type = 1; models.Title = "抑郁自评"; models.Result = JsonConvert.SerializeObject(scalTotals); break; case 340506852511813://中学生心理健康诊断自评(MHT) var mhtlist = JsonConvert.DeserializeObject>(scaleRequestDTO.Inputs.ToString()).GroupBy(s => new { name = s.name }) .Select(s => new ScalListItem() { name = s.Key.name, value = s.Sum(c => c.value) }).ToList(); var mht = new List(); mhtlist.ForEach(a => { var item = new ScalListItem();// switch (a.name) { case "A": item.value = a.value; item.name = a.name; item.type = "学习焦虑"; break; case "B": item.value = a.value; item.name = a.name; item.type = "对人焦虑"; break; case "C": item.value = a.value; item.name = a.name; item.type = "孤独倾向"; break; case "D": item.value = a.value; item.name = a.name; item.type = "自责倾向"; break; case "E": item.value = a.value; item.name = a.name; item.type = "过敏倾向"; break; case "F": item.value = a.value; item.name = a.name; item.type = "身体症状"; break; case "G": item.value = a.value; item.name = a.name; item.type = "恐怖倾向"; break; case "H": item.value = a.value; item.name = a.name; item.type = "冲动倾向"; break; case "X": item.value = a.value; item.name = a.name; item.type = "效度"; break; } mht.Add(item); }); newpp.scalLists = mht; models.Type = 1; models.Title = "中学生心理健康诊断自评"; models.Result = JsonConvert.SerializeObject(newpp); break; case 340507046379589://留学需求调研 models.Type = -2; models.Title = "留学咨询"; models.Result = JsonConvert.SerializeObject(scaleRequestDTO.Inputs); break; } await _studentScaleResultsRep.InsertAsync(models); result.Id = models.Id; if (single != null) { single.UpdateTime = DateTime.Now; switch (single.Proccess) { case 2: single.HId = models.Id; break; case 3: single.MId = models.Id; break; case 4: single.NId = models.Id; break; case 5: single.JId = models.Id; break; } single.UpdateUserId = _userManager.UserId; single.UpdateUserName = _userManager.Account; _custommapreportRep.Update(single); result.ReportId = single.Id; } result.ScaleId = scaleRequestDTO.ScaleId; return result; } /// /// 量表试题保存集合V2 /// type=0 兴趣测评报告 ///=1 性格测评报告 ///=2 能力测评 ///=3 学生考试考虑 ///=4 学习风格 ///=5 学习技能 ///=6 SAS ///=7 SDS ///=8 SCL-90 ///=9 MHT ///=-1 价值观 ///=-2 留学咨询 /// /// /// [HttpPost("CustomBusScale/v2")] public async Task CustomBusScaleV2(CustomBusScaleRequestDTO scaleRequestDTO) { var result = new CustomBusScaleDto(); var newpp = new BusScaleResult(); var scalTotals = new List(); var models = new BusStudentScaleResults() { CreateUserId = _userManager.UserId, CreateTime = DateTime.Now, CreateUserName = _userManager.Account, SysOauthUserId = _userManager.UserId, ScaleId = scaleRequestDTO.ScaleId, TenantId = _userManager.TenantId, // Type = -1, // Result = JsonConvert.SerializeObject(newpp) }; // var single = new BusCustomMapReport(); switch (scaleRequestDTO.ScaleId) { case 339914746081349:// 兴趣测评[Holland] var jsons = scaleRequestDTO.Inputs.GroupBy(s => new { name = s.name }).Select(s => new ScalListItem() { name = s.Key.name, value = s.Sum(c => c.value) }).OrderByDescending(c => c.value).ToList(); int i = 0; jsons.ForEach(a => { i++; if (i <= 3) { newpp.Result += a.name; } }); newpp.scalLists = jsons; models.Title = "兴趣测评"; models.Type = 0; models.Result = JsonConvert.SerializeObject(newpp); //single = await _custommapreportRep.AsQueryable().FirstAsync(e => e.CustomId == scaleRequestDTO.CustomId && e.Status == 0 && e.IsDelete == false); //single.Proccess = 2; break; case 339916661030981://性格测评[MBTI] //E-I S-N T-F J-P var mbtilist = scaleRequestDTO.Inputs.GroupBy(s => new { name = s.name }) .Select(s => new ScalListItem() { name = s.Key.name, value = s.Sum(c => c.value) }).ToList(); var taglist = "ESTJ"; for (var k = 0; k < taglist.Length; k++) { switch (taglist[k].ToString()) { case "E": newpp.Result += mbtilist.FirstOrDefault(e => e.name == taglist[k].ToString()).value > mbtilist.FirstOrDefault(e => e.name == "I").value ? "E" : "I"; break; case "S": newpp.Result += mbtilist.FirstOrDefault(e => e.name == taglist[k].ToString()).value > mbtilist.FirstOrDefault(e => e.name == "N").value ? "S" : "N"; break; case "T": newpp.Result += mbtilist.FirstOrDefault(e => e.name == taglist[k].ToString()).value > mbtilist.FirstOrDefault(e => e.name == "F").value ? "T" : "F"; break; case "J": newpp.Result += mbtilist.FirstOrDefault(e => e.name == taglist[k].ToString()).value > mbtilist.FirstOrDefault(e => e.name == "P").value ? "J" : "P"; break; } } newpp.scalLists = mbtilist; models.Title = "性格测评"; models.Type = 1; models.Result = JsonConvert.SerializeObject(newpp); // single = await _custommapreportRep.AsQueryable().FirstAsync(e => e.CustomId == scaleRequestDTO.CustomId && e.Status == 0 && e.IsDelete == false); // single.Proccess = 3; break; case 339916993155141://能力测评[MIDAS] //Y(语言智能) R(人际智能) D(运动智能) Z(自然智能) K(空间智能) S(数理智能) L(音乐智能) N(内省智能) var midaslist = scaleRequestDTO.Inputs.GroupBy(s => new { name = s.name }) .Select(s => new ScalListItem() { name = s.Key.name, value = s.Sum(c => c.value) }).ToList(); var scalLists = new List(); midaslist.ForEach(a => { var item = new ScalListItem(); switch (a.name) { case "Y": item.value = a.value; item.name = a.name; item.type = "言语语言智能"; break; case "R": item.value = a.value; item.name = a.name; item.type = "人际交往智能"; break; case "D": item.value = a.value; item.name = a.name; item.type = "身体动觉智能"; break; case "Z": item.value = a.value; item.name = a.name; item.type = "自然观察智能"; break; case "K": item.value = a.value; item.name = a.name; item.type = "视觉空间智能"; break; case "S": item.value = a.value; item.name = a.name; item.type = "逻辑数理智能"; break; case "L": item.value = a.value; item.name = a.name; item.type = "音乐节奏智能"; break; case "N": item.value = a.value; item.name = a.name; item.type = "自知自省智能"; break; } scalLists.Add(item); }); newpp.scalLists = scalLists; models.Title = "能力测评"; models.Type = 2; models.Result = JsonConvert.SerializeObject(newpp); // single = await _custommapreportRep.AsQueryable().FirstAsync(e => e.CustomId == scaleRequestDTO.CustomId && e.Status == 0 && e.IsDelete == false); // single.Proccess = 4; break; case 339917685502021://职业锚价值观[Career Anchors] var careeranchors = scaleRequestDTO.Inputs.GroupBy(s => new { name = s.name }) .Select(s => new ScalListItem() { name = s.Key.name, value = s.Sum(c => c.value) }).ToList(); careeranchors.ForEach(a => { a.value = a.value == 6 ? a.value + 4 : a.value; }); newpp.scalLists = careeranchors; // 排序并取前两个元素,然后提取 name 字段,最后用 + 连接成字符串 newpp.Tag = string.Join("+", careeranchors.OrderByDescending(item => item.value).Take(2).Select(s => s.name)); models.Type = -1; models.Title = "职业价值观"; models.Result = JsonConvert.SerializeObject(newpp); // single = await _custommapreportRep.AsQueryable().FirstAsync(e => e.CustomId == scaleRequestDTO.CustomId && e.Status == 0 && e.IsDelete == false); // single.Proccess = 5; // single.Status = 1; break; case 339926224392261://学习拖延 break; case 339926358470725://厌学情绪评估 break; case 339926424055877://学习风格 var fengge = scaleRequestDTO.Inputs.GroupBy(s => new { name = s.name }) .Select(s => new ScalListItem() { name = s.Key.name, value = s.Sum(c => c.value) }).ToList(); var fglist = new List(); fengge.ForEach(a => { var item = new ScalListItem();//A=冲动型或灵感型;P=务实型或实用型;R=沉思型或反思型;T=为理论型 switch (a.name) { case "A": item.value = a.value; item.name = a.name; item.type = "冲动型或灵感型"; break; case "P": item.value = a.value; item.name = a.name; item.type = "务实型或实用型"; break; case "R": item.value = a.value; item.name = a.name; item.type = "沉思型或反思型"; break; case "T": item.value = a.value; item.name = a.name; item.type = "理论型"; break; } fglist.Add(item); }); newpp.scalLists = fglist; models.Type = 4; models.Title = "学习风格"; models.Result = JsonConvert.SerializeObject(newpp); break; case 339926523736133://学生考试焦虑 scalTotals = new List { new ScalTotals() { Total = scaleRequestDTO.Inputs.First().value } }; models.Type = 3; models.Title = "考试焦虑"; models.Result = JsonConvert.SerializeObject(scalTotals); break; case 339926607917125://学习技能 scalTotals = new List { new ScalTotals() { Total = scaleRequestDTO.Inputs.First().value } }; models.Type = 5; models.Title = "学习技能"; models.Result = JsonConvert.SerializeObject(scalTotals); break; case 340506604851269://SAS焦虑测评 scalTotals = new List { new ScalTotals() { Total = scaleRequestDTO.Inputs.First().value } }; models.Type = 6; models.Title = "焦虑自评"; models.Result = JsonConvert.SerializeObject(scalTotals); break; case 340506680250437://SDS抑郁测评 scalTotals = new List { new ScalTotals() { Total = scaleRequestDTO.Inputs.First().value } }; models.Type = 7; models.Title = "抑郁自评"; models.Result = JsonConvert.SerializeObject(scalTotals); break; case 340506852511813://中学生心理健康诊断自评(MHT) var mhtlist = scaleRequestDTO.Inputs.GroupBy(s => new { name = s.name }) .Select(s => new ScalListItem() { name = s.Key.name, value = s.Sum(c => c.value) }).ToList(); var mht = new List(); mhtlist.ForEach(a => { var item = new ScalListItem();// switch (a.name) { case "A": item.value = a.value; item.name = a.name; item.type = "学习焦虑"; break; case "B": item.value = a.value; item.name = a.name; item.type = "对人焦虑"; break; case "C": item.value = a.value; item.name = a.name; item.type = "孤独倾向"; break; case "D": item.value = a.value; item.name = a.name; item.type = "自责倾向"; break; case "E": item.value = a.value; item.name = a.name; item.type = "过敏倾向"; break; case "F": item.value = a.value; item.name = a.name; item.type = "身体症状"; break; case "G": item.value = a.value; item.name = a.name; item.type = "恐怖倾向"; break; case "H": item.value = a.value; item.name = a.name; item.type = "冲动倾向"; break; case "X": item.value = a.value; item.name = a.name; item.type = "效度"; break; } mht.Add(item); }); newpp.scalLists = mht; models.Type = 9; models.Title = "中学生心理健康诊断自评"; models.Result = JsonConvert.SerializeObject(newpp); break; case 340507046379589://留学需求调研 models.Type = -2; models.Title = "留学咨询"; models.Result = JsonConvert.SerializeObject(scaleRequestDTO.Inputs); break; } await _studentScaleResultsRep.InsertAsync(models); ////result.Id = models.Id; ////if (single != null) ////{ //// single.UpdateTime = DateTime.Now; //// switch (single.Proccess) //// { //// case 2: //// single.HId = models.Id; //// break; //// case 3: //// single.MId = models.Id; //// break; //// case 4: //// single.NId = models.Id; //// break; //// case 5: //// single.JId = models.Id; //// break; //// } //// single.UpdateUserId = _userManager.UserId; //// single.UpdateUserName = _userManager.Account; //// _custommapreportRep.Update(single); //// result.ReportId = single.Id; ////} result.ScaleId = scaleRequestDTO.ScaleId; return new CustomBusScaleV2Dto() { Type = models.Type, ReportId = models.Id, }; } /// /// 根据标签获取专业组 /// /// /// [HttpGet("getTagMapPro")] public async Task> GetMapTag([FromQuery] string tag) { // var tags = UtilGetPermutations.GetPermutations(tag); var taglist = await _hldtagmapprorep.AsQueryable().Where(e => e.Tag.Contains(tag)).Select().ToListAsync(); return taglist; } /// /// 标签性格代表人物 /// /// /// [HttpGet("getTagMapPerson")] public async Task> GetTagMapPerson([FromQuery] string tag) { //var tags = UtilGetPermutations.GetPermutations(tag); var taglist = await _bustagmappersonrep.AsQueryable().Where(e => tag.Contains(e.Tag)).Select().ToListAsync(); return taglist; } /// /// 获取我的报告列表 /// /// /// [HttpGet("GetBusCustomReports")] public async Task GetBusCustomReports([FromQuery] BusCustomReportRequestDTO requestDTO) { var report = new BusCustomReportsList(); var list = new List(); var comphas = await _custommapreportRep.AsQueryable().Where(e => e.IsDelete == false && e.Status == 1 && e.CustomId == requestDTO.CustomId).ToListAsync(); list = comphas.Select(s => new CustomReports() { CreateTime = s.CreateTime.Value, ReportsId = s.Id, RoleName = "学生", Title = "综合报告", Type = 0 }).ToList(); var queryreports = await _studentScaleResultsRep.AsQueryable().Where(e => e.Type >= 0 && e.SysOauthUserId == requestDTO.CustomId).ToListAsync(); if (queryreports.Any()) { list.AddRange(queryreports.Select(s => new CustomReports() { Type = s.Type, CreateTime = s.CreateTime.Value, ReportsId = s.Id, RoleName = "学生", Title = s.Title }).ToList()); } report.customReports = list.OrderByDescending(s => s.CreateTime).ToList(); return report; } /// /// 获取我的报告列表V2 /// /// /// [HttpGet("GetBusCustomReports/v2")] public async Task GetBusCustomReportsV2([FromQuery] BusCustomReportRequestDTO requestDTO) { var report = new BusCustomReportsList(); var list = new List(); //var comphas = await _custommapreportRep.AsQueryable().Where(e => e.IsDelete == false && e.Status == 1 && e.CustomId == requestDTO.CustomId).ToListAsync(); //list = comphas.Select(s => new CustomReports() { CreateTime = s.CreateTime.Value, ReportsId = s.Id, RoleName = "学生", Title = "综合报告", Type = 0 }).ToList(); var queryreports = await _studentScaleResultsRep.AsQueryable().Where(e => e.SysOauthUserId == requestDTO.CustomId).ToListAsync(); if (queryreports.Any()) { list.AddRange(queryreports.Select(s => new CustomReports() { Type = s.Type, CreateTime = s.CreateTime.Value, ReportsId = s.Id, RoleName = "学生", Title = s.Title }).ToList()); } report.customReports = list.OrderByDescending(s => s.CreateTime).ToList(); return report; } /// /// 获取综合报告所需ID /// /// /// [HttpGet("GetReportMapIds")] public async Task GetReportMapIds([FromQuery] BusReportMapIdsRequestDto requestDto) { var result = new BusReportMapIdsDto(); var query = await _custommapreportRep.AsQueryable().AnyAsync(e => e.IsDelete == false && e.Id == requestDto.ReportId); if (query) { var customrep = await _custommapreportRep.GetFirstAsync(r => r.Id == requestDto.ReportId); result.HId = customrep.HId; result.JId = customrep.JId; result.MId = customrep.MId; result.NId = customrep.NId; result.Proccess = customrep.Proccess; } return result; } /// /// 霍兰德报告 /// /// /// [HttpGet("GetHollandDimension")] public async Task GetHollandDimension([FromQuery] BusReportsRequestDto requestDto) { var res = new HollandDimension(); var replistitem = new List(); string PinTitle = string.Empty; var holland = await _studentScaleResultsRep.GetFirstAsync(r => r.Id == requestDto.ScaleId); var picinfo = JsonConvert.DeserializeObject(holland.Result); var explainholland = await _customexplainRep.AsQueryable().Where(e => e.ScaleId == 339914746081349).ToListAsync(); var max = picinfo.scalLists.Select(s => s.value).Max() + 1; for (var i = 0; i < picinfo.Result.Length; i++) { var scalemodel = explainholland.FirstOrDefault(s => s.Tag == picinfo.Result[i].ToString()); PinTitle += "+" + scalemodel.Title; replistitem.Add(new ReportItem() { Title = scalemodel.Title, Description = scalemodel.Description, Features = scalemodel.Features, MainDomain = scalemodel.MainDomain, Major = scalemodel.Major, Occupation = scalemodel.Occupation, Resolving = scalemodel.Resolving, Tag = scalemodel.Tag, Traits = scalemodel.Traits, University = scalemodel.University }); } res = new HollandDimension() { picCharts = new PicChart() { indicator = picinfo.scalLists.Select(s => new Indicat() { Name = s.name, Max = max }).ToList(), radars = picinfo.scalLists.Select(s => s.value).ToList() }, Title = picinfo.Result + "(" + PinTitle + ")", reportItems = replistitem, HTag = picinfo.Result, Description = string.Join(",", explainholland.Select(s => s.Description).ToList()), }; return res; } /// /// 获取MBTI报告 /// /// /// [HttpGet("GetMBTIDimension")] public async Task GetMBTIDimension([FromQuery] BusReportsRequestDto requestDto) { var bTIDimension = new MBTIDimension(); var mbtiinfo = await _studentScaleResultsRep.AsQueryable().AnyAsync(a => a.Id == requestDto.ScaleId); if (mbtiinfo) { var explainmbti = await _customexplainRep.AsQueryable().Where(e => e.ScaleId == 339916661030981).ToListAsync(); var mbit = await _studentScaleResultsRep.GetFirstAsync(r => r.Id == requestDto.ScaleId); var mbtiresult = JsonConvert.DeserializeObject(mbit.Result); var mbtitag = explainmbti.FirstOrDefault(s => s.Tag == mbtiresult.Result.Trim()); var newlist = new List(); var oldlist = new List(); mbtiresult.scalLists.ForEach(a => { string tagname = string.Format("({0}){1}", a.name == "E" ? "外向" : a.name == "S" ? "感觉" : a.name == "T" ? "思考" : a.name == "J" ? "判断" : a.name == "I" ? "内向" : a.name == "N" ? "直觉" : a.name == "F" ? "情感" : a.name == "P" ? "知觉" : "", a.name); switch (a.name) { case "E": case "S": case "T": case "J": // a.value = a.value - 10; newlist.Add(new ScalListItem() { name = tagname, value = a.value }); break; } switch (a.name) { case "I": case "N": case "F": case "P": oldlist.Add(new ScalListItem() { name = tagname, value = a.value }); break; } }); newlist.AddRange(oldlist); bTIDimension = new MBTIDimension() { Title = mbtiresult.Result + "(" + mbtitag.Title + ")", reportItem = new ReportItem() { Title = mbtitag.Title, Tag = mbtitag.Tag, Description = mbtitag.Description, Features = mbtitag.Features, MainDomain = mbtitag.MainDomain, Major = mbtitag.Major, Occupation = mbtitag.Occupation, Resolving = mbtitag.Resolving, Traits = mbtitag.Traits, University = mbtitag.University }, linChart = new LinChart() { Name = newlist.Select(s => s.name).ToList(), Value = newlist.Select(s => (double)s.value).ToList() }, Description = mbtitag.Resolving + mbtitag.Description + mbtitag.Traits.Replace("他们", ""), }; } return bTIDimension; } /// /// 获取能力维度报告 /// /// /// [HttpGet("GetAbilityDimension")] public async Task GetAbilityDimension([FromQuery] BusReportsRequestDto requestDto) { var abilityDimension = new AbilityDimension(); var nengliinfo = await _studentScaleResultsRep.AsQueryable().AnyAsync(a => a.Id == requestDto.ScaleId); if (nengliinfo) { var explainnengli = await _customexplainRep.AsQueryable().Where(e => e.ScaleId == 339916993155141).ToListAsync(); var nengli = await _studentScaleResultsRep.GetFirstAsync(r => r.Id == requestDto.ScaleId); var ngresult = JsonConvert.DeserializeObject(nengli.Result); var sysdicdata = await _dictdataRep.AsQueryable().Where(e => e.DictTypeId == 342316563505221).ToListAsync(); var replist = new List(); explainnengli.ForEach(o => { replist.Add(new ReportItem() { Score = ngresult.scalLists.FirstOrDefault(e => e.type == o.Title).value, Title = o.Title, Description = o.Description, Features = o.Features, MainDomain = o.MainDomain, Major = o.Major, Occupation = o.Occupation, Resolving = o.Resolving, Traits = o.Traits, University = o.University, }); }); //Y(语言智能) R(人际智能) D(运动智能) Z(自然智能) K(空间智能) S(数理智能) L(音乐智能) N(内省智能)+分数 abilityDimension = new AbilityDimension() { reportItems = replist, linChart = new List() { new LinChart() { Name = ngresult.scalLists.Select(s => s.name).ToList(), Value = ngresult.scalLists.Select(s => (double)s.value).ToList() }, new LinChart() { Name=sysdicdata.Select(S=>S.Value).ToList(), Value=sysdicdata.Select(S=>double.Parse(S.Remark)).ToList() } } }; abilityDimension.Title = string.Empty; if (ngresult.scalLists.Any(e => e.value > 50)) { abilityDimension.Title += string.Format("你的优势能力:{0}", string.Join(",", ngresult.scalLists.Where(e => e.value > 50).Select(s => s.type).ToList())); } if (ngresult.scalLists.Any(e => e.value <= 20)) { abilityDimension.Title += string.Format("你的弱势能力:{0}", string.Join(",", ngresult.scalLists.Where(e => e.value <= 20).Select(s => s.type).ToList())); } ngresult.scalLists.ForEach(a => { //var status = sysdicdata.Where(e => e.Value == a.name); //if (status.Any()) //{ // var titles = status.FirstOrDefault(s => s.Value == a.name); // abilityDimension.Title += a.value >= double.Parse(titles.Remark) ? titles.Value.Replace("智能", "") : a.name.Replace("智能", ""); //} string nltag = string.Empty; if (a.value <= 20) { nltag = "低弱"; } if (a.value > 20 && a.value < 31) { nltag = "中下"; } if (a.value >= 31 && a.value <= 50) { nltag = "中上"; } if (a.value > 50) { nltag = "优秀"; } if (a.value <= 30) { switch (a.type) { case "言语语言智能": abilityDimension.Description += string.Format("您的{0}属于{1},建议多{2}", a.type, nltag, "阅读文学作品,学讲故事,学习外语 "); break; case "逻辑数理智能": abilityDimension.Description += string.Format("您的{0}属于{1},建议多{2}", a.type, nltag, "学习心算,多玩一些推理游戏 "); break; case "视觉空间智能": abilityDimension.Description += string.Format("您的{0}属于{1},建议多{2}", a.type, nltag, "学习绘画,经常装配物件(如玩具、积木等) "); break; case "身体动觉智能": abilityDimension.Description += string.Format("您的{0}属于{1},建议{2}", a.type, nltag, "经常运动,尝试表演或舞蹈 "); break; case "音乐节奏智能": abilityDimension.Description += string.Format("您的{0}属于{1},建议多{2}", a.type, nltag, "学习乐器,经常听音乐,尝试唱歌 "); break; case "人际交往智能": abilityDimension.Description += string.Format("您的{0}属于{1},建议多{2}", a.type, nltag, "经常参加聚会,掌握倾听技巧,增强同理心 "); break; case "自知自省智能": abilityDimension.Description += string.Format("您的{0}属于{1},建议多{2}", a.type, nltag, "尝试写日记(以心得体会为主),制定自我发展计划,偶尔做一些白日梦 "); break; case "自然观察智能": abilityDimension.Description += string.Format("您的{0}属于{1},建议多{2}", a.type, nltag, "尝试郊游或参观博物馆,尝试种植花草或抚养宠物 "); break; } } }); } return abilityDimension; } /// /// 获取职业锚维度报告 /// /// /// [HttpGet("GetOpinionAbout")] public async Task GetOpinionAbout([FromQuery] BusReportsRequestDto requestDto) { var opinionAbout = new OpinionAboutValue(); var zhiyemao = await _studentScaleResultsRep.AsQueryable().AnyAsync(a => a.Id == requestDto.ScaleId); if (zhiyemao) { var zhiyemaoinfo = await _customexplainRep.AsQueryable().Where(e => e.ScaleId == 339917685502021).ToListAsync(); var zhiye = await _studentScaleResultsRep.GetFirstAsync(r => r.Id == requestDto.ScaleId); var zyresult = JsonConvert.DeserializeObject(zhiye.Result); // var mbtitag = zhiyemaoinfo.FirstOrDefault(s => s.Tag == zyresult.Result.Trim()); var replist = new List(); var openinfo = new List(); zhiyemaoinfo.ForEach(a => { replist.Add(new ReportItem() { Tag = "(" + a.Tag + ")" + zhiyemaoinfo.FirstOrDefault(s => s.Tag == a.Tag).Title, Description = a.Resolving, Features = a.Features, MainDomain = a.MainDomain, Major = a.Major, Title = a.Title, Traits = a.Traits }); }); zyresult.scalLists.ForEach(a => { a.name = zhiyemaoinfo.FirstOrDefault(s => s.Tag == a.name).Title + "(" + a.name + ")"; }); int max = zyresult.scalLists.Max(s => s.value) + 1; opinionAbout = new OpinionAboutValue() { reportItems = replist, opinionItems = zyresult.scalLists.Select(s => new OpinionItem() { Max = max, Name = s.name, Value = s.value }).ToList(), picCharts = new PicChart() { indicator = zyresult.scalLists.Select(s => new Indicat() { Max = max, Name = s.name }).ToList(), radars = zyresult.scalLists.Select(s => s.value).ToList() } }; opinionAbout.Tag = zyresult.Tag; opinionAbout.Description += "价值观描述:"; var deslist = zyresult.scalLists.OrderByDescending(s => s.value).Take(2).ToList(); deslist.ForEach(a => { opinionAbout.Description += zhiyemaoinfo.FirstOrDefault(s => a.name.Contains(s.Tag)).Description.Replace("他们", ""); }); } return opinionAbout; } /// /// 获取学习风格结果 /// /// /// [HttpGet("GetStudyStyle")] public async Task GetStudyStyle([FromQuery] BusReportsRequestDto requestDto) { var styleinfo = new StudyStyleResponseDTO(); var styleresult = await _studentScaleResultsRep.AsQueryable().AnyAsync(a => a.Id == requestDto.ScaleId); if (styleresult) { var stylecustomer = await _customexplainRep.AsQueryable().Where(e => e.ScaleId == 339926424055877).ToListAsync(); var stylequery = await _studentScaleResultsRep.GetFirstAsync(r => r.Id == requestDto.ScaleId); var stylerecover = JsonConvert.DeserializeObject(stylequery.Result); var replist = new List(); stylecustomer.ForEach(a => { replist.Add(new ReportItem() { Tag = "(" + a.Tag + ")" + stylecustomer.FirstOrDefault(s => s.Tag == a.Tag).Title, Description = a.Description, Features = a.Features, MainDomain = a.MainDomain, Major = a.Major, Title = a.Title, Traits = a.Traits }); }); styleinfo.UserName = _userManager.RealName; styleinfo.Description = @"你追求事物的内在含义并习惯亲身体验;你善于通过听和与人分享思想来学习;你喜欢与人沟通;你善于从多个角度观察问题并形成自己独特的观点"; styleinfo.TestTime = stylequery.CreateTime.Value; styleinfo.reportItems = replist; int max = stylerecover.scalLists.Max(s => s.value) + 1; styleinfo.picCharts = new PicChart() { indicator = stylerecover.scalLists.Select(s => new Indicat() { Max = max, Name = s.name }).ToList(), radars = stylerecover.scalLists.Select(s => s.value).ToList() }; var scalinfo = new List(); var styletypes = new List(); stylerecover.scalLists.ForEach(a => { string type = string.Empty; switch (a.name) { case "A": type = "冲动型"; break; case "P": type = "务实型"; styletypes.Add(new StudyStyleTables() { Type = "风格1", Score = a.value + stylerecover.scalLists.FirstOrDefault(s => s.name == "R").value }); styletypes.Add(new StudyStyleTables() { Type = "风格2", Score = a.value + stylerecover.scalLists.FirstOrDefault(s => s.name == "A").value }); break; case "R": type = "反思型"; break; case "T": type = "理论型"; styletypes.Add(new StudyStyleTables() { Type = "风格3", Score = a.value + stylerecover.scalLists.FirstOrDefault(s => s.name == "R").value }); styletypes.Add(new StudyStyleTables() { Type = "风格4", Score = a.value + stylerecover.scalLists.FirstOrDefault(s => s.name == "A").value }); break; } scalinfo.Add(new StudyStyleTables() { Type = type, Score = a.value, Description = a.value <= 15 ? "低偏好" : a.value >= 16 && a.value <= 35 ? "中等偏好" : a.value >= 36 && a.value <= 44 ? "强烈偏好" : "非常强烈偏好" }); }); styleinfo.studyStyles = scalinfo; var maxstyles = styletypes.OrderByDescending(s => s.Score).FirstOrDefault(); var styleresults = new StudyStyleResult(); switch (maxstyles.Type) { case "风格1": styleresults.Advantage = "富于创造力和想像力"; styleresults.Seek = "重大项目中的自我成长和团队精神"; styleresults.SuitableOccupation = "为什么?为什么不?"; styleresults.FavoriteQuestions = "咨询、人事关系"; break; case "风格2": styleresults.Advantage = "创造概念和模式"; styleresults.Seek = "自我满足和智力认同."; styleresults.SuitableOccupation = "什么?"; styleresults.FavoriteQuestions = "基础科学研究, 规划研究部"; break; case "风格3": styleresults.Advantage = "喜好实践"; styleresults.Seek = "现实和将来的一致性"; styleresults.SuitableOccupation = "怎么做?"; styleresults.FavoriteQuestions = "工程师,外科医生,护士,技工"; break; case "风格4": styleresults.Advantage = "执行能力强"; styleresults.Seek = "把事情做成"; styleresults.SuitableOccupation = "能变成什么样?"; styleresults.FavoriteQuestions = "市场,销售"; break; } styleinfo.studyStyleResult = styleresults; } return styleinfo; } /// /// 获取部分报告 /// /// /// [HttpGet("GetBusComprehensive")] public async Task GetBusComprehensive([FromQuery] BusComprehensiveReportRequestDTO requestDTO) { var res = new BusComprehensiveReportDTO(); var query = await _custommapreportRep.GetFirstAsync(r => r.Id == requestDTO.ReportId); var replistitem = new List(); string PinTitle = string.Empty; #region 霍兰德++++++++++++++ var holland = await _studentScaleResultsRep.GetFirstAsync(r => r.Id == query.HId); var picinfo = JsonConvert.DeserializeObject(holland.Result); var explainholland = await _customexplainRep.AsQueryable().Where(e => e.ScaleId == 339914746081349).ToListAsync(); for (var i = 0; i <= picinfo.Result.Length; i++) { var scalemodel = explainholland.FirstOrDefault(s => s.Tag == picinfo.Result[i].ToString()); PinTitle += "+" + scalemodel.Title; replistitem.Add(new ReportItem() { Title = scalemodel.Title, Description = scalemodel.Description, Features = scalemodel.Features, MainDomain = scalemodel.MainDomain, Major = scalemodel.Major, Occupation = scalemodel.Occupation, Resolving = scalemodel.Resolving, Tag = scalemodel.Tag, Traits = scalemodel.Traits, University = scalemodel.University }); } res.hollandDimension = new HollandDimension() { picCharts = new PicChart() { indicator = picinfo.scalLists.Select(s => new Indicat() { Name = s.name, Max = 45 }).ToList(), radars = picinfo.scalLists.Select(s => s.value).ToList() }, Title = holland.Result + "(" + PinTitle + ")", reportItems = replistitem }; #endregion 霍兰德+++++++++++++++++ #region MBTI++++++++++++++++++++ var mbtiinfo = await _studentScaleResultsRep.AsQueryable().AnyAsync(a => a.Id == query.MId); if (mbtiinfo) { var explainmbti = await _customexplainRep.AsQueryable().Where(e => e.ScaleId == 339916661030981).ToListAsync(); var mbit = await _studentScaleResultsRep.GetFirstAsync(r => r.Id == query.MId); var mbtiresult = JsonConvert.DeserializeObject(mbit.Result); var mbtitag = explainmbti.FirstOrDefault(s => s.Tag == mbtiresult.Result.Trim()); res.bTIDimension = new MBTIDimension() { Title = mbtiresult.Result + "(" + mbtitag.Title + ")", reportItem = new ReportItem() { Title = mbtitag.Title, Tag = mbtitag.Tag, Description = mbtitag.Description, Features = mbtitag.Features, MainDomain = mbtitag.MainDomain, Major = mbtitag.Major, Occupation = mbtitag.Occupation, Resolving = mbtitag.Resolving, Traits = mbtitag.Traits, University = mbtitag.University }, linChart = new LinChart() { Name = mbtiresult.scalLists.Select(s => s.name).ToList(), Value = mbtiresult.scalLists.Select(s => (double)s.value).ToList() } }; } #endregion MBTI++++++++++++++++++++++ #region 能力维度++++++++++++++++++++++++ //var nengliinfo = await _studentScaleResultsRep.AsQueryable().AnyAsync(a => a.Id == query.NId); //if (nengliinfo) //{ // var explainnengli = await _customexplainRep.AsQueryable().Where(e => e.ScaleId == 339916993155141).ToListAsync(); // var nengli = await _studentScaleResultsRep.FindAsync(query.NId); // var ngresult = JsonConvert.DeserializeObject(nengli.Result); // var mbtitag = explainnengli.FirstOrDefault(s => s.Tag == ngresult.Result.Trim()); // var replist = new List(); // explainnengli.ForEach(o => // { // replist.Add(new ReportItem() // { // Title = o.Title, // Description = o.Description, // Features = o.Features, // MainDomain = o.MainDomain, // Major = o.Major, // Occupation = o.Occupation, // Resolving = o.Resolving, // Traits = o.Traits, // University = o.University, // }); // }); // res.abilityDimension = new AbilityDimension() // { // reportItems = replist, // linChart = new LinChart() // { // Name = ngresult.scalLists.Select(s => s.name).ToList(), // Value = ngresult.scalLists.Select(s => (double)s.value).ToList() // } // }; //} #endregion ++++++++++++++++++++++++++++ #region 职业锚+++++++++++++++++++++++++ var zhiyemao = await _studentScaleResultsRep.AsQueryable().AnyAsync(a => a.Id == query.JId); if (zhiyemao) { var zhiyemaoinfo = await _customexplainRep.AsQueryable().Where(e => e.ScaleId == 339917685502021).ToListAsync(); var zhiye = await _studentScaleResultsRep.GetFirstAsync(r => r.Id == query.NId); var zyresult = JsonConvert.DeserializeObject(zhiye.Result); var mbtitag = zhiyemaoinfo.FirstOrDefault(s => s.Tag == zyresult.Result.Trim()); res.opinionAbout = new OpinionAboutValue() { }; } #endregion ++++++++++++++++++++++++++++ return res; } /// ///获取报告关键词 ///type=0 兴趣测评报告 ///=1 性格测评报告 ///=2 能力测评 ///=3 学生考试考虑 ///=4 学习风格 ///=5 学习技能 ///=6 SAS ///=7 SDS ///=8 SCL-90 ///=9 MHT ///=-1 价值观 ///=-2 留学咨询 /// /// /// [HttpGet("GetBusAIReportKeyWord")] public async Task GetBusAIReportKeyWord([FromQuery] ReportAIPrompt prompt) { StringBuilder description = new StringBuilder(); description.Append("我的"); var result = await _studentScaleResultsRep.GetFirstAsync(r => r.Id == prompt.Id); if (result == null) throw Oops.Oh("未找到该报告"); switch (prompt.Type) { case 0: var jons = JsonConvert.DeserializeObject(result.Result); string hladstr = string.Empty; jons.scalLists.ForEach(c => { hladstr += $"标签:{c.name}得分为:{c.value}"; }); description.Append($"霍兰德测评标签是{jons.Result},{hladstr}"); break; case 1: var mbtiresult = JsonConvert.DeserializeObject(result.Result); string jsstr = string.Empty; mbtiresult.scalLists.ForEach(c => { jsstr += $"标签:{c.name}得分为:{c.value}"; }); description.Append($"MBTI测评标签是{mbtiresult.Result};{jsstr}"); break; case 2: var dyzn = JsonConvert.DeserializeObject(result.Result); string dyznstr = string.Empty; dyzn.scalLists.ForEach(c => { dyznstr = $"标签({c.type}):{c.name}得分为:{c.value}"; }); description.Append($"多元智能测评结果是{dyznstr}"); break; case 3: var ksjl = JsonConvert.DeserializeObject>(result.Result); description.Append($"学生考试焦虑测评分数是:{ksjl.First().Total}"); break; case 4: description.Append($"学习风格测评结果是{result.Result.ToJson()}"); break; case 5: var xxjn = JsonConvert.DeserializeObject>(result.Result).FirstOrDefault(); description.Append($"学习技能测评得分是{xxjn.Total}"); break; case 6: var sas = JsonConvert.DeserializeObject>(result.Result); description.Append($"SAS焦虑测评分数是{sas.First().Total}"); break; case 7: var sds = JsonConvert.DeserializeObject>(result.Result); description.Append($"SDS抑郁测测评分数是{sds.First().Total}"); break; case 8: var scl = JsonConvert.DeserializeObject>(result.Result); description.Append($"SCL-90测测评分数是{scl.First().Total}"); break; } description.Append(",可以帮我分析一下给出的结果,给我一些好的建议吗?"); return description.ToString(); } /// /// 获取学生量表结果值匹配解释 /// /// [HttpGet("GetCustomScaleExplains")] public async Task GetCustomScaleExplains([FromQuery] BusCustomScaleExplainRequestDTO busCustom) { var result = new BusCustomScaleExplainDTO(); var single = await _studentScaleResultsRep.GetFirstAsync(r => r.Id == busCustom.CustomScaleId); result.Title = single.Title; result.TestTime = single.CreateTime.Value; result.CustomName = _userManager.RealName; switch (single.ScaleId) { case 339914746081349:// 兴趣测评[Holland] break; case 339916661030981://性格测评[MBTI] break; case 339916993155141://能力测评[MIDAS] break; case 339917685502021://职业锚价值观[Career Anchors] break; case 339926224392261://学习拖延 break; case 339926358470725://厌学情绪评估 break; case 339926424055877://学习风格 string tagdesc = "{\"tags\":[{\"name\":\"冲动型或灵感型\",\"code\":\"A\",\"features\":[\"反应快但精确性差\",\"急于求成,缺乏全面分析\",\"乐于交往但易自我中心\",\"宏观思考有优势\",\"阅读困难,易伴学习能力缺失\"],\"learning_performance\":[\"挑战新经验但易厌倦实施过程\",\"群体交往中试图成为中心\",\"复杂问题解决易片面化\"],\"notes\":\"低偏好者需尝试新鲜事物,培养整体视角\"},{\"name\":\"务实型或实用型\",\"code\":\"P\",\"features\":[\"渴望验证新想法的可行性\",\"脚踏实地,实用主义导向\",\"对做事技巧感兴趣\",\"对重复讨论易急躁\"],\"learning_performance\":[\"热衷实践验证\",\"偏好榜样示范学习\",\"重视外部有效性\"],\"notes\":\"低偏好者需加强范例学习,增加实践参与\"},{\"name\":\"沉思型或反思型\",\"code\":\"R\",\"features\":[\"反应慢但精确性高\",\"注重质量胜过速度\",\"细节加工策略\",\"复杂问题表现突出\"],\"learning_performance\":[\"阅读/记忆/推理能力强\",\"偏好观察后发言\",\"行为低调从容\"],\"notes\":\"低偏好者需培养反思习惯,强化经验总结\"},{\"name\":\"理论型\",\"code\":\"T\",\"features\":[\"系统化理论构建能力\",\"逻辑性强,追求完美\",\"冷静客观的分析倾向\"],\"learning_performance\":[\"关注原理与规律\",\"拒绝主观判断\",\"追求确定性\"],\"notes\":\"低偏好者需加强基础理论积累,关注行业新规\"}]}"; string style01 = "{\"tags\":[{\"title\":\"个人特质\",\"items\":[{\"title\":\"内在追求\",\"desc\":\"追求事物的内在含义并习惯亲身体验\"},{\"title\":\"学习方式\",\"desc\":\"善于通过听和与人分享思想来学习\"},{\"title\":\"沟通倾向\",\"desc\":\"喜欢与人沟通\"},{\"title\":\"思维特征\",\"desc\":\"善于从多个角度观察问题并形成独特观点\"}]},{\"title\":\"核心优势\",\"items\":[{\"title\":\"创造力\",\"desc\":\"富于创造力和想象力\"},{\"title\":\"职业追求\",\"desc\":\"在重大项目中追求自我成长和团队精神\"}]},{\"title\":\"典型提问\",\"items\":[{\"title\":\"探索本质\",\"desc\":\"最爱问:为什么?为什么不?\"}]},{\"title\":\"职业适配\",\"items\":[{\"title\":\"适合领域\",\"desc\":\"咨询、人事关系\"}]},{\"title\":\"策略偏好\",\"items\":[{\"title\":\"计划性\",\"desc\":\"预先计划和组织\"},{\"title\":\"反思性\",\"desc\":\"适时反思\"},{\"title\":\"自我管理\",\"desc\":\"自我管理\"},{\"title\":\"自我认知\",\"desc\":\"尊重自我评价\"},{\"title\":\"团队协作\",\"desc\":\"团队精神\"},{\"title\":\"集体智慧\",\"desc\":\"集体讨论\"},{\"title\":\"逻辑推理\",\"desc\":\"演绎推理\"}]}]}"; string style02 = "{\"tags\":[{\"title\":\"认知特质\",\"items\":[{\"title\":\"实证导向\",\"desc\":\"注重客观依据(实证)\"},{\"title\":\"思维学习方式\",\"desc\":\"善于通过分析和思考来学习\"},{\"title\":\"抽象学习偏好\",\"desc\":\"喜欢抽象概念并勤于学习\"},{\"title\":\"专家依赖倾向\",\"desc\":\"更愿意听从专家的意见而行事\"}]},{\"title\":\"核心能力\",\"items\":[{\"title\":\"模式构建\",\"desc\":\"创造概念和模式\"}]},{\"title\":\"价值追求\",\"items\":[{\"title\":\"内在驱动\",\"desc\":\"追求自我满足和智力认同\"}]},{\"title\":\"认知倾向\",\"items\":[{\"title\":\"本质探究\",\"desc\":\"最爱问:什么?\"}]},{\"title\":\"职业适配\",\"items\":[{\"title\":\"研究领域\",\"desc\":\"基础科学研究, 规划研究部\"}]},{\"title\":\"策略偏好\",\"items\":[{\"title\":\"计划性\",\"desc\":\"预先计划和组织\"},{\"title\":\"指导性\",\"desc\":\"指导他人工作\"},{\"title\":\"记录系统\",\"desc\":\"完备的记录(笔记、文档)\"},{\"title\":\"自我验证\",\"desc\":\"自我检查(测试)\"},{\"title\":\"专家咨询\",\"desc\":\"征询专家意见\"},{\"title\":\"建构性研究\",\"desc\":\"建构性研究\"}]}]}"; string style03 = "{\"tags\":[{\"title\":\"行动导向\",\"items\":[{\"title\":\"明确性需求\",\"desc\":\"非常希望知道自己具体应该做什么和怎么做\"},{\"title\":\"实践学习法\",\"desc\":\"在实践中检验理论从而完成自我学习\"},{\"title\":\"实例抽象化\",\"desc\":\"习惯通过实例来构造抽象概念\"},{\"title\":\"实践偏好\",\"desc\":\"喜欢动手实践和解决实际问题\"}]},{\"title\":\"核心能力\",\"items\":[{\"title\":\"实践专长\",\"desc\":\"喜好实践\"}]},{\"title\":\"价值追求\",\"items\":[{\"title\":\"现实一致性\",\"desc\":\"追求现实和将来的一致性\"}]},{\"title\":\"认知倾向\",\"items\":[{\"title\":\"行动探究\",\"desc\":\"最爱问:怎么做?\"}]},{\"title\":\"职业适配\",\"items\":[{\"title\":\"实践型职业\",\"desc\":\"工程师, 外科医生, 护士,技工\"}]},{\"title\":\"策略偏好\",\"items\":[{\"title\":\"实践优先\",\"desc\":\"实践工作\"},{\"title\":\"执行导向\",\"desc\":\"项目执行\"},{\"title\":\"自我评估\",\"desc\":\"自我评价\"},{\"title\":\"实验验证\",\"desc\":\"实验\"},{\"title\":\"逻辑推理\",\"desc\":\"演绎推理\"}]}]}"; string style04 = "{\"tags\":[{\"title\":\"探索特质\",\"items\":[{\"title\":\"功能探索欲\",\"desc\":\"希望知道当前物件的功能\"},{\"title\":\"试错学习法\",\"desc\":\"通常通过尝试、错误、再尝试的自我发现中学习\"},{\"title\":\"应变适应力\",\"desc\":\"喜欢变化,应变能力强,喜欢冒险\"},{\"title\":\"社交倾向\",\"desc\":\"容易与人相处,有时热心过头\"},{\"title\":\"直觉判断力\",\"desc\":\"往往不通过推理凭直觉就能做出正确的判断\"}]},{\"title\":\"核心能力\",\"items\":[{\"title\":\"执行专长\",\"desc\":\"执行能力强\"}]},{\"title\":\"价值追求\",\"items\":[{\"title\":\"结果导向\",\"desc\":\"追求把事情做成\"}]},{\"title\":\"认知倾向\",\"items\":[{\"title\":\"可能性探究\",\"desc\":\"最爱问:能变成什么样?\"}]},{\"title\":\"职业适配\",\"items\":[{\"title\":\"动态型职业\",\"desc\":\"市场, 销售\"}]},{\"title\":\"策略偏好\",\"items\":[{\"title\":\"执行导向\",\"desc\":\"具体项目执行\"},{\"title\":\"短期规划\",\"desc\":\"建立短期目标\"},{\"title\":\"人际互动\",\"desc\":\"与教师和同学互动\"},{\"title\":\"体能活动\",\"desc\":\"体力活动\"},{\"title\":\"环境变换\",\"desc\":\"学习环境和内容的变换\"},{\"title\":\"自主工作\",\"desc\":\"独立工作\"}]}]}"; var xxfg = JsonConvert.DeserializeObject(single.Result); result.Result = xxfg.scalLists.Select(s => new xxfgItem() { name = s.name, type = s.type, value = s.value, desc = s.value <= 10 ? "低偏好" : s.value >= 11 && s.value <= 25 ? "中等偏好" : s.value >= 26 && s.value <= 40 ? "强烈偏好" : "非常强烈偏好" }).ToJson(); var stylevalue = FindMaxCombination(xxfg.scalLists); var tagparse = JsonConvert.DeserializeObject(tagdesc); switch (stylevalue) { case 1: result.TagName = "务实型(P)+反思型(R)"; result.Suggestions = style01; result.Description = tagparse.tags.Where(e => e.code == "P" || e.code == "R").ToJson(); break; case 2: result.TagName = "反思型(R)+理论型(T)"; result.Suggestions = style02; result.Description = tagparse.tags.Where(e => e.code == "T" || e.code == "R").ToJson(); break; case 3: result.TagName = "理论型(T)+冲动型(A)"; result.Suggestions = style03; result.Description = tagparse.tags.Where(e => e.code == "T" || e.code == "A").ToJson(); break; case 4: result.TagName = "冲动型(A)+务实型(P)"; result.Suggestions = style04; result.Description = tagparse.tags.Where(e => e.code == "P" || e.code == "A").ToJson(); break; } break; case 339926523736133://学生考试焦虑 var ksjl = JsonConvert.DeserializeObject>(single.Result).FirstOrDefault(); result.Total = ksjl.Total.ToString(); if (ksjl.Total < 12) { result.TagName = "低考试焦虑水平"; result.Description = "你的考试焦虑水平较低,展现出对考试的良好适应能力。你能以平稳的心态面对考试,不易受紧张情绪干扰,这种状态有助于你在考试中正常甚至超常发挥。建议继续保持对学习的专注和对考试的合理认知,避免因过度放松而忽视备考细节。"; result.Suggestions = "[{\"title\":\"考试减压技巧\",\"items\":[{\"title\":\"维持日常节奏\",\"description\":\"考前无需刻意改变作息,按平时的学习习惯复习,避免因 “过度准备” 产生额外压力。\"},{\"title\":\"积极心理暗示\",\"description\":\"偶尔提醒自己 “按步骤做好准备即可,结果顺其自然”,强化 “努力大于结果” 的心态。\"},{\"title\":\"适度身体放松\",\"description\":\"考前 1 天可进行轻度运动(如散步、瑜伽),或听轻音乐,但避免剧烈运动或熬夜。\"}]},{\"title\":\"应试技巧\",\"items\":[{\"title\":\"目标拆解\",\"description\":\"将考试目标细化为 '每道题认真读题' '合理分配答题时间' 等具体行动,而非纠结于 '必须考高分'\"},{\"title\":\"细节检查\",\"description\":\"发卷后先浏览全卷,标记难题题号,按 '先易后难' 顺序答题,避免因个别题目卡壳影响整体节奏。\"},{\"title\":\"考完即止\",\"description\":\"一科结束后不与他人对答案,专注下一科备考,避免因局部失误影响后续心态\"}]}]"; } if (ksjl.Total >= 12 && ksjl.Total <= 20) { result.TagName = "中等考试焦虑水平"; result.Description = "你的考试焦虑处于中等水平,这是多数人面对重要考试时的正常反应。适度的焦虑能提升你的备考动力,但需注意避免过度放大考试的重要性,导致紧张情绪干扰发挥。通过针对性的调整策略,你可以将焦虑转化为积极的应试状态。"; result.Suggestions = "[{\"title\":\"考试减压技巧\",\"items\":[{\"title\":\"认知矫正训练\",\"description\":\"记录考前负面想法:用理性思维反驳(如:一次考试不能定义我的能力,我平时的积累才是基础)。|写下过去 3 次考试中做得好的细节(如'数学应用题步骤清晰'),增强自我效能感。\"},{\"title\":\"生理放松法\",\"items\":[{\"title\":\"4-7-8 呼吸法\",\"description\":\"吸气 4 秒→屏息 7 秒→呼气 8 秒,重复 3-5 次,快速平复紧张情绪。\"},{\"title\":\"身体扫描\",\"description\":\"考前一晚躺在床上,从脚趾到头顶逐部位有意识地放松,改善睡眠质量。\"}]},{\"title\":\"时间管理策略\",\"items\":[{\"title\":\"番茄工作法\",\"description\":\"用 '番茄工作法' 复习(25 分钟专注 + 5 分钟休息),避免长时间高强度学习导致疲劳累积。','考前 3 天制定 '倒计时计划',明确每天复习内容(如 '第一天:梳理物理公式;第二天:限时做英语阅读'),减少不确定性带来的焦虑。\"}]}]}]"; } if (ksjl.Total > 20) { result.TagName = "较高考试焦虑水平"; result.Description = "你的考试焦虑水平较高,过度的紧张情绪已可能对学习效率和考试表现产生明显影响。请接纳这种状态的合理性(焦虑是对重要目标的自然反应),但不必被其控制。通过科学的干预方法和持续练习,你完全可以逐步降低焦虑对自己的困扰。"; result.Suggestions = "[{\"title\":\"深层认知调整\",\"items\":[{\"title\":\"考试≠威胁\",\"description\":\" 重构:用具体证据反驳 '灾难化思维'。例如:若担心 '考不好就考不上大学',可列出 '过去1年中,我通过努力提升了XX科目成绩'等事实,弱化 '一次考试决定命运”的绝对化认知。', '设定 '合理期待':将目标调整为 '比上次进步10分''完成80%的题目并保证正确率',而非不切实际的高标准。\"}]},{\"title\":\"专业放松训练\",\"items\":[{\"title\":\"正念冥想\",\"description\":\"每天花10分钟专注于呼吸或身体感受,当杂念出现时,不评判地将注意力拉回当下(可使用 '潮汐''Headspace'等APP辅助)。\"},{\"title\":\"渐进式肌肉放松\",\"description\":\"从手部开始,逐组肌肉先紧绷5秒再放松10秒,体验紧张 - 放松的差异,降低身体紧绷感。\"}]},{\"title\":\"环境与行为干预\",\"items\":[{\"title\":\"专注于自己的复习节奏\",\"description\":\"考前1周避免接触引发焦虑的外界刺激(如他人的 '考前抱怨''成绩攀比')。', '若 '临时抱佛脚”导致熬夜和疲惫,可尝试' \"},{\"title\":\"分段复习法\",\"description\":\"每天固定3个1小时高效时段(如早8-9点、下午3-4点、晚7-8点),配合充足睡眠(保证7小时以上)。\"}]},{\"title\":\"分阶段备考策略\",\"items\":[{\"title\":\"基础阶段(考前2-4周)\",\"description\":\"以课本和笔记为主,确保掌握80%的基础知识点,放弃偏题怪题,建立 '保底信心'。\"},{\"title\":\"强化阶段(考前1周)\",\"description\":\"用真题进行模拟考试,严格限时,熟悉考试流程(如发卷时间、填答题卡节奏),减少考场陌生感。\"},{\"title\":\"冲刺阶段(考前3天)\",\"description\":\"复习 '错题本'和 '知识点卡片',不学习新内容,避免增加认知负荷。\"}]},{\"title\":\"考场应急方案\",\"items\":[{\"title\":\"步骤分策略\",\"description\":\"若发卷后心跳加速、大脑空白,可先在草稿纸写 '我现在有点紧张,这很正常,做3次深呼吸就会好',通过书写疏导情绪。', '遇到完全不会的题目,采用 '步骤分策略':写下相关公式或已知条件,避免空白卷,同时暗示自己 '这题占分不多,其他题目做好更重要'。\"}]},{\"title\":\"长期心态建设\",\"items\":[{\"title\":\"平时增加暴露练习\",\"description\":\"主动参加小型测试或在课堂上发言,逐步适应 '被评价'的场景,降低对考试的敏感度。', '若自我调节困难,及时寻求帮助:向信任的老师、家长或心理咨询师倾诉,必要时接受专业心理干预(如系统脱敏法)。\"}]}]"; } result.Result = single.Result; break; case 339926607917125://学习技能 var xxjn = JsonConvert.DeserializeObject>(single.Result).FirstOrDefault(); if (xxjn.Total < 137) { if (xxjn.Total < 80) { result.TagName = "学习技能水平很差"; } if (xxjn.Total >= 80 && xxjn.Total <= 104) { result.TagName = "学习技能水平较差"; } if (xxjn.Total >= 105 && xxjn.Total <= 136) { result.TagName = "学习技能水平一般"; } result.Description = "你的学习技能水平较差,可能在学习方法、时间管理、情绪调节等方面存在一定的不足。建议你可以通过一些学习技巧和方法来提升自己的学习能力,比如制定合理的学习计划、掌握有效的记忆方法、培养良好的学习习惯等。"; result.Suggestions = "{\"succestions\":[{\"title\":\"改进学习方法建议\",\"items\":[{\"title\":\"预习\",\"description\":\"用快速略读法事先预习极多次, 但不要求完全懂\"},{\"title\":\"上课\",\"description\":\"(a) 用专心放轻松的方法听讲, 保持灵敏的心去听, 不主动要求自己全部听懂。(b) 除非特殊状况, 一定要作笔记, 笔记愈整洁明晰愈好(不要为了省钱将笔记记得密密麻麻的), 以利日后快、 慢速的复习。(c) 在老师停顿或转身抄黑板的时候, 迅速回想(最好口中默念出来) 老师刚刚讲的重点, 此种回想又可以叫潜意识迅速转极多次以消化之\"},{\"title\":\"家中复习\",\"description\":\"复习功课的第一步骤, 也是先快速略读多次, 有空的时候作一次详读之后(此时要在课本、 笔记上划出重点), 再多花一点时间回想上课的重点。 若因为晚上补习没有足够时间, 虽可以省掉详读, 但略读和回想一定要作。 记住不论如何忙, 最多三、 五天一定要将老师教过的部份, 作过一次详读(没有时间的话, 至少要作快速详读)\"},{\"title\":\"做作业\",\"description\":\"做作业之前( 必要时可以找一本比较完整的参考书来做, 其作业题通常比课本多很多), 要确定有没有先回想重点\"},{\"title\":\"复习以前的功课\",\"description\":\"每隔三五天最好翻开笔记本, 迅速的略读前一两个星期的功课。 有空的话, 将笔记本上划重点的部份出声念一遍\"},{\"title\":\"考前复习\",\"description\":\"和家中复习那一项差不多, 但要找出时间, 针对笔记上的重点发出声音教给一个假想的人或同学。 同时也要找一些例题和具有代表性的习题, 教一教这个假想人\"},{\"title\":\"考前猜题\",\"description\":\"想象自己是老师, 出一些与重点有关的题目。 不一定要真的去作出来(因为是自己出的题目, 若题目合理则本来就会做), 但可以将这一些题目和课本互相印证, 找出某几课中的真正重点和如何应用这些重点\"},{\"title\":\"考前保持最佳状态\",\"description\":\"(a) 考前做一些有代表性的例题和习题, 从这一些题目中回想重点, 回想时若发现忘了重点, 翻开笔记看一看那一部份重点就可。(b) 将笔记上的重点(或整理出的重点) 重复多次地看, 虽然不耐烦了还要再看, 过度50 %\"}]}]}"; } if (xxjn.Total >= 137 && xxjn.Total <= 160) { result.TagName = "学习技能较好"; result.Description = "您在学习技能方面表现出色,展现出较强的自主学习能力、良好的学习习惯和高效的学习策略。能够主动规划学习任务,善于运用多种方法理解和巩固知识,在课堂内外表现出积极的参与度和问题解决能力,对学习过程有清晰的认知和调控能力。"; result.Suggestions = "{\"succestions\":[{\"title\":\"优势分析\",\"items\":[{\"title\":\"主动学习意识强\",\"description\":\"善于标记重点、归纳知识、主动提问,对学习内容有深入探究的意愿,例如在阅读和听讲时能提出个人观点,重视预习和复习,积极通过参考书、请教他人等方式解决问题\"},{\"title\":\"学习策略科学\",\"description\":\"能根据任务调整学习方法,合理规划时间(如考前计划复习),注重通过练习、总结图表等方式强化记忆和理解,善于在实践中应用知识(如实验操作有条理、联系生活实际)\"},{\"title\":\"自我管理能力突出\",\"description\":\"面对学习压力或疲劳时,能有效维持注意力、克服紧张情绪,及时调整状态,保持较高的学习效率\"},{\"title\":\"合作与反思能力良好\",\"description\":\"在交流中善于吸收他人经验,受挫时能分析原因、持续改进,形成良性学习循环\"}]},{\"title\":\"提升建议\",\"items\":[{\"title\":\"深化学习深度\",\"description\":[\"对已掌握的知识尝试跨学科整合,例如在学习专业内容时主动联系其他学科的原理或方法,培养综合思维\",\"针对公式、定理等,不仅满足于熟练运用,尝试探究其推导过程和底层逻辑,提升知识迁移能力\"]},{\"title\":\"优化时间管理\",\"description\":[\"制定更细致的长期学习计划,例如按月或学期规划拓展阅读、实践项目等,避免局限于课堂和作业\",\"针对“提前做好准备”的习惯,可尝试制定应急预案(如突发任务时的时间分配策略),增强计划灵活性\"]},{\"title\":\"强化输出与实践\",\"description\":[\"定期通过写作、讲解(如向他人分享学习心得)等方式输出知识,检验理解的完整性,例如将归纳的要点转化为思维导图或小论文\",\"积极参与课外实践(如小调查、实验设计),将理论知识与实际问题结合,提升解决复杂问题的能力\"]}]}]}"; } if (xxjn.Total >= 161) { result.TagName = "学习技能优秀"; result.Suggestions = "{\"succestions\":[{\"title\":\"进阶建议\",\"items\":[{\"title\":\"发挥引领作用\",\"description\":[\"主动分享学习经验,例如组织学习小组、撰写学习技巧总结,在帮助他人的过程中深化自身理解\",\"针对“喜欢进一步思考或探究”的优势,可尝试参与科研小项目或学术讨论,培养创新思维\"]},{\"title\":\"培养全局视野\",\"description\":[\"从“掌握知识”向“构建知识体系”升级,梳理学科内的逻辑框架和不同学科间的联系,形成系统化认知\",\"关注学习目标与长期发展的关联,例如明确专业相关知识的实际应用场景,增强学习的目的性和内驱力\"]},{\"title\":\"突破舒适区\",\"description\":[\"挑战跨专业或难度较高的学习任务(如阅读非专业领域的经典著作),拓宽知识面和思维边界\",\"在解决难题时,尝试先独立探索多种解法,再对比他人思路,避免依赖现有方法,培养批判性思维\"]},{\"title\":\"保持反思与迭代\",\"description\":[\"建立学习日志,定期记录学习策略的效果和改进方向,例如每周总结一次“高效/低效学习时段”及原因\",\"关注认知科学或学习心理学知识,科学优化学习习惯,例如利用记忆曲线调整复习频率,提升学习效能\"]}]}]}"; } result.Total = xxjn.Total.ToString(); result.Result = single.Result; break; case 340506604851269://SAS焦虑测评 var sas = JsonConvert.DeserializeObject>(single.Result).FirstOrDefault(); if (sas.Total < 50) { result.TagName = "无焦虑情况"; result.Description = "如果你的 SAS 焦虑量表得分显示无焦虑,那真的很棒!这意味着在目前阶段,你能够很好地应对学习和生活中的各种挑战,心态平稳且积极。日常的小烦恼不太会影响到你,能保持良好的情绪状态去享受校园时光,和同学愉快相处,专注投入到学习里。继续保持这样乐观向上的生活态度哦,未来也一定能轻松应对各种状况。"; } if (sas.Total >= 50 && sas.Total <= 59) { result.TagName = "可能轻度焦虑"; result.Description = "当量表结果是轻度焦虑时,先别太紧张,这在高中生里其实挺常见的。它可能表示最近的学习任务、考试压力,或者和同学、老师的关系等,给你带来了一些小小的困扰,让你偶尔会感到有些不安。不过这种焦虑程度并不会对你的日常生活和学习造成严重阻碍。你可以尝试在课余时间多参加一些自己喜欢的活动,比如听音乐、运动一下,找朋友倾诉倾诉,把这些小烦恼释放出去,很快就能恢复活力满满的状态啦。"; } if (sas.Total > 59 && sas.Total <= 69) { result.TagName = "可能中度焦虑"; result.Description = "若是处于中度焦虑水平,说明你可能在一段时间内承受了较多的压力,这些压力已经开始比较明显地影响到你的情绪和状态了。或许你在学习时难以集中注意力,睡眠质量也有所下降,心情常常感到烦躁。别担心,这是身体在提醒你需要重视当下的状况,调整一下节奏了。建议你可以和老师、家长沟通沟通,让他们了解你的感受,同时制定一个合理的学习和休息计划,给自己留出足够的放松时间,也可以考虑找学校的心理老师聊聊,他们能给你更专业的建议,帮助你缓解焦虑。"; } if (sas.Total >= 70) { result.TagName = "可能重度焦虑"; result.Title = "要是量表结果显示重度焦虑,这真的很不容易,你一定在经历一段特别艰难的时期。这种程度的焦虑可能已经严重干扰到你的日常生活,比如日常的学习对你来说变得非常困难,食欲、睡眠都受到很大影响,情绪上常常处于低落、紧张的状态。请你一定要重视起来,不要一个人默默承受。立刻寻求专业帮助,比如去看心理医生,他们会根据你的具体情况提供专业的治疗方案。同时,告诉身边信任的人,无论是家人还是朋友,他们都会给予你关心和支持,陪你一起度过这个难关,你并不孤单。"; } result.Total = sas.Total.ToString(); result.Result = single.Result; break; case 340506680250437://SDS抑郁测评 var sds = JsonConvert.DeserializeObject>(single.Result).FirstOrDefault(); double count = Math.Round(sds.Total * 1.25, 2, MidpointRounding.AwayFromZero); if (count < 53) { result.TagName = "无抑郁情况"; result.Description = "倘若你的 SDS 抑郁量表得分表明无抑郁,这简直太棒啦!这表明现阶段你能从容应对高中生活里的风风雨雨,始终保持积极乐观的心态。在校园中,无论是繁重的课业,还是和同学间的小摩擦,都无法动摇你内心的阳光。你尽情享受着和小伙伴们的欢声笑语,全神贯注地投入学习,对未来充满了无限憧憬。希望你能一直将这份积极向上的生活态度延续下去,未来不管遇到什么,都能勇敢无畏、轻松化解。"; } if (count > 53 && count <= 61) { result.TagName = "可能轻度抑郁"; result.Description = "当量表结果显示为轻度抑郁时,先别慌,在高中生群体里,这种情况并不少见。这可能意味着近期学习的压力、和朋友闹别扭,又或是家庭里一些小状况,给你的心情蒙上了一层薄薄的阴霾,让你偶尔会陷入情绪的低谷,感到有些沮丧。不过,这种程度的抑郁还不足以严重干扰你的日常生活与学习。你不妨在课余时间去操场跑跑步,让汗水带走烦恼;或是戴上耳机,沉浸在自己喜欢的音乐世界里;也可以跟知心好友坦诚倾诉,把心里的不愉快一股脑倒出来。相信通过这些方式,你很快就能重新找回往日的活力与快乐。"; } if (count > 61 && count <= 71) { result.TagName = "可能中度抑郁"; result.Description = "要是处于中度抑郁状态,那就说明在过去的一段时间里,你承受了较大的压力,这些压力已经在明显地影响你的情绪和生活状态了。或许你会发现,学习时难以集中精力,原本轻松的题目如今也变得棘手起来;晚上躺在床上,翻来覆去难以入眠,睡眠质量大不如前;平日里,心情总是莫名地低落、烦躁,对很多曾经感兴趣的事情都提不起劲。别害怕,这其实是身体在向你发出信号,提醒你要关注当下的状态,及时做出调整。你可以试着跟老师、父母好好聊聊,让他们知晓你的内心感受,大家一起制定一个科学合理的学习和休息计划,保证自己有充足的放松时间。另外,学校的心理老师也是很好的倾诉对象,他们有着专业的知识和丰富的经验,能给你提供有效的建议,助你走出这片情绪的迷雾。"; } if (count >= 72) { result.TagName = "可能重度抑郁"; result.Description = "如果量表结果显示重度抑郁,你真的太不容易了,此刻的你一定正深陷困境,承受着巨大的痛苦。这种程度的抑郁已经严重扰乱了你的日常生活,学习对你而言可能成了难以逾越的高山,每一个字、每一道题都仿佛在眼前模糊不清;食欲变得极其不稳定,要么毫无胃口,要么暴饮暴食;夜晚更是被失眠紧紧纠缠,黑暗中只剩无尽的孤独与绝望,情绪时刻被低落、紧张笼罩。请你务必高度重视起来,千万不要独自默默忍受这份痛苦。立即寻求专业的帮助,比如前往医院,找专业的心理医生进行诊断和治疗,他们会依据你的实际情况,量身定制专属的治疗方案。同时,勇敢地向身边信任的人敞开心扉,无论是父母温暖的怀抱,还是朋友坚定的陪伴,他们都会给予你最真挚的关心与支持,陪你一步步熬过这段至暗时光,你从来都不是一个人在战斗。"; } result.Total = count.ToString(); result.Result = single.Result; break; case 340506852511813://中学生心理健康诊断自评(MHT) break; case 340507046379589://留学需求调研 break; } return result; } [NonAction] private int FindMaxCombination(List data) { // 通过Name获取值(更直观) var typeDict = data.ToDictionary(d => d.name, d => d.value); // 计算组合值 int combo1 = typeDict["T"] + typeDict["A"]; // 理论型 + 冲动型 int combo2 = typeDict["A"] + typeDict["P"]; // 冲动型 + 务实型 int combo3 = typeDict["P"] + typeDict["R"]; // 务实型 + 沉思型 int combo4 = typeDict["R"] + typeDict["T"]; // 沉思型 + 理论型 // 找出最大值 int max = Math.Max(Math.Max(combo1, combo2), Math.Max(combo3, combo4)); //return (combo1 == max ? "理论型+冲动型" : // combo2 == max ? "冲动型+务实型" : // combo3 == max ? "务实型+沉思型" : "沉思型+理论型"); return (combo1 == max ? 3 : combo2 == max ? 4 : combo3 == max ? 1 : 2); } } }