tuiwucarrer/Admin.NET/Admin.NET.Application/Service/CePing/BusScale/BusScaleService.cs

2060 lines
117 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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
{
/// <summary>
/// 量表类型表服务
/// </summary>
[ApiDescriptionSettings("测评服务", Name = "BusScale", Order = 100)]
public class BusScaleService : IDynamicApiController, ITransient
{
private readonly SqlSugarRepository<BusScale> _busScaleRep;
private readonly SqlSugarRepository<BusScaleQuestions> _busScaleQuestionsRep;
private readonly SqlSugarRepository<BusMenuMapScale> _busmenMapScaleRep;
private readonly SqlSugarRepository<SysDictData> _dictdataRep;
private readonly SqlSugarRepository<BusStudentScaleResults> _studentScaleResultsRep;
private readonly SqlSugarRepository<BusCustomMapReport> _custommapreportRep;
private readonly SqlSugarRepository<BusScaleExplain> _customexplainRep;
private readonly SqlSugarRepository<BusScaleDescription> _ScaleDescriptionRep;
private readonly UserManager _userManager;
private readonly SqlSugarRepository<HLDTagMapProfession> _hldtagmapprorep;
private readonly SqlSugarRepository<BusTagMapPerson> _bustagmappersonrep;
/// <summary>
///
/// </summary>
/// <param name="busScaleRep"></param>
/// <param name="_ScaleQuestionRep"></param>
/// <param name="menMapScaleRep"></param>
/// <param name="dictdataRep"></param>
/// <param name="studentScaleResultsRep"></param>
/// <param name="custommapreportRep"></param>
/// <param name="customexplainRep"></param>
/// <param name="scaleDescriptionRep"></param>
/// <param name="userManager"></param>
/// <param name="hldtagmapprorep"></param>
/// <param name="bustagmappersonrep"></param>
public BusScaleService(
SqlSugarRepository<BusScale> busScaleRep,
SqlSugarRepository<BusScaleQuestions> _ScaleQuestionRep,
SqlSugarRepository<BusMenuMapScale> menMapScaleRep,
SqlSugarRepository<SysDictData> dictdataRep,
SqlSugarRepository<BusStudentScaleResults> studentScaleResultsRep,
SqlSugarRepository<BusCustomMapReport> custommapreportRep,
SqlSugarRepository<BusScaleExplain> customexplainRep,
SqlSugarRepository<BusScaleDescription> scaleDescriptionRep,
UserManager userManager, SqlSugarRepository<HLDTagMapProfession> hldtagmapprorep, SqlSugarRepository<BusTagMapPerson> bustagmappersonrep
)
{
_busScaleRep = busScaleRep;
_busScaleQuestionsRep = _ScaleQuestionRep;
_busmenMapScaleRep = menMapScaleRep;
_dictdataRep = dictdataRep;
_studentScaleResultsRep = studentScaleResultsRep;
_custommapreportRep = custommapreportRep;
_customexplainRep = customexplainRep;
_ScaleDescriptionRep = scaleDescriptionRep;
_userManager = userManager;
_hldtagmapprorep = hldtagmapprorep;
_bustagmappersonrep = bustagmappersonrep;
}
/// <summary>
/// 分页查询量表类型表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpGet("page")]
public async Task<SqlSugarPagedList<BusScaleOutput>> 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;
}
/// <summary>
/// 增加量表类型表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("add")]
public async Task Add(AddBusScaleInput input)
{
var busScale = input.Adapt<BusScale>();
await _busScaleRep.InsertAsync(busScale);
}
/// <summary>
/// 删除量表类型表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("delete")]
public async Task Delete(DeleteBusScaleInput input)
{
var busScale = await _busScaleRep.AsQueryable().FirstAsync(u => u.Id == input.Id);
await _busScaleRep.FakeDeleteAsync(busScale);
}
/// <summary>
/// 更新量表类型表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[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<BusScale>();
await _busScaleRep.UpdateAsync(busScale);
}
/// <summary>
/// 获取量表类型表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpGet("detail")]
public async Task<BusScaleOutput> Get([FromQuery] QueryeBusScaleInput input)
{
return (await _busScaleRep.AsQueryable().FirstAsync(u => u.Id == input.Id)).Adapt<BusScaleOutput>();
}
/// <summary>
/// 获取量表类型表列表
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpGet("list")]
[AllowAnonymous]
public async Task<List<BusScaleOutput>> 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();
}
/// <summary>
/// 留学问卷试题获取
/// </summary>
/// <param name="requestDTO"></param>
/// <returns></returns>
[HttpGet("getbusscalestudy")]
public async Task<List<BusScaleStudyBroadResponseDTO>> GetBusScaleStudy([FromQuery] BusScaleRequestDTO requestDTO)
{
var scaleresult = new List<BusScaleStudyBroadResponseDTO>();
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<BusScaleStudyBroadDTO>();
query.ForEach(a =>
{
list.Add(JsonConvert.DeserializeObject<BusScaleStudyBroadDTO>(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;
}
/// <summary>
/// 根据用户Id获取试题进度
/// </summary>
/// <param name="requestDTO"></param>
/// <returns></returns>
[HttpGet("getcustommaproccess")]
public async Task<CustomMapProccessDTO> 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;
}
/// <summary>
/// 根据量表类型Id获取量表试题内容
/// </summary>
/// <param name="requestDTO"></param>
/// <returns></returns>
[HttpGet("getscalequestions")]
public async Task<BusScaleResponseDTO> 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<ScaleQuestions>();
query.ForEach(c =>
{
// k++;
// var newmodel = new ScaleQuestions() { answer = c.Context };
var newmodel = JsonConvert.DeserializeObject<ScaleQuestions>(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);
}
}
/// <summary>
/// 获取量表描述
/// </summary>
/// <param name="requestDTO"></param>
/// <returns></returns>
[HttpGet("GetBusScaleDescription")]
public async Task<BusScaleDescriptionResponseDto> 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;
}
/// <summary>
/// 量表试题保存集合
/// </summary>
/// <param name="scaleRequestDTO"></param>
/// <returns></returns>
[HttpPost("CustomBusScale")]
public async Task<CustomBusScaleDto> CustomBusScale(CustomBusScaleRequestDTO scaleRequestDTO)
{
var result = new CustomBusScaleDto();
var newpp = new BusScaleResult();
var scalTotals = new List<ScalTotals>();
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<List<ScalListItem>>(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<List<ScalListItem>>(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<List<ScalListItem>>(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<ScalListItem>();
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<List<ScalListItem>>(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<List<ScalListItem>>(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<ScalListItem>();
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<List<ScalTotals>>(scaleRequestDTO.Inputs.ToString());
models.Type = 1;
models.Title = "考试焦虑";
models.Result = JsonConvert.SerializeObject(scalTotals);
break;
case 339926607917125://学习技能
scalTotals = JsonConvert.DeserializeObject<List<ScalTotals>>(scaleRequestDTO.Inputs.ToString());
models.Type = 1;
models.Title = "学习技能";
models.Result = JsonConvert.SerializeObject(scalTotals);
break;
case 340506604851269://SAS焦虑测评
scalTotals = JsonConvert.DeserializeObject<List<ScalTotals>>(scaleRequestDTO.Inputs.ToString());
models.Type = 1;
models.Title = "焦虑自评";
models.Result = JsonConvert.SerializeObject(scalTotals);
break;
case 340506680250437://SDS抑郁测评
scalTotals = JsonConvert.DeserializeObject<List<ScalTotals>>(scaleRequestDTO.Inputs.ToString());
models.Type = 1;
models.Title = "抑郁自评";
models.Result = JsonConvert.SerializeObject(scalTotals);
break;
case 340506852511813://中学生心理健康诊断自评MHT
var mhtlist = JsonConvert.DeserializeObject<List<ScalListItem>>(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<ScalListItem>();
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;
}
/// <summary>
/// 量表试题保存集合V2
/// type=0 兴趣测评报告
///=1 性格测评报告
///=2 能力测评
///=3 学生考试考虑
///=4 学习风格
///=5 学习技能
///=6 SAS
///=7 SDS
///=8 SCL-90
///=9 MHT
///=-1 价值观
///=-2 留学咨询
/// </summary>
/// <param name="scaleRequestDTO"></param>
/// <returns></returns>
[HttpPost("CustomBusScale/v2")]
public async Task<CustomBusScaleV2Dto> CustomBusScaleV2(CustomBusScaleRequestDTO scaleRequestDTO)
{
var result = new CustomBusScaleDto();
var newpp = new BusScaleResult();
var scalTotals = new List<ScalTotals>();
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<ScalListItem>();
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<ScalListItem>();
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<ScalTotals> { new ScalTotals() { Total = scaleRequestDTO.Inputs.First().value } };
models.Type = 3;
models.Title = "考试焦虑";
models.Result = JsonConvert.SerializeObject(scalTotals);
break;
case 339926607917125://学习技能
scalTotals = new List<ScalTotals> { new ScalTotals() { Total = scaleRequestDTO.Inputs.First().value } };
models.Type = 5;
models.Title = "学习技能";
models.Result = JsonConvert.SerializeObject(scalTotals);
break;
case 340506604851269://SAS焦虑测评
scalTotals = new List<ScalTotals> { new ScalTotals() { Total = scaleRequestDTO.Inputs.First().value } };
models.Type = 6;
models.Title = "焦虑自评";
models.Result = JsonConvert.SerializeObject(scalTotals);
break;
case 340506680250437://SDS抑郁测评
scalTotals = new List<ScalTotals> { 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<ScalListItem>();
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,
};
}
/// <summary>
/// 根据标签获取专业组
/// </summary>
/// <param name="tag"></param>
/// <returns></returns>
[HttpGet("getTagMapPro")]
public async Task<List<HLDTagMapProfessionDto>> GetMapTag([FromQuery] string tag)
{
// var tags = UtilGetPermutations.GetPermutations(tag);
var taglist = await _hldtagmapprorep.AsQueryable().Where(e => e.Tag.Contains(tag)).Select<HLDTagMapProfessionDto>().ToListAsync();
return taglist;
}
/// <summary>
/// 标签性格代表人物
/// </summary>
/// <param name="tag"></param>
/// <returns></returns>
[HttpGet("getTagMapPerson")]
public async Task<List<BusTagMapPersonDto>> GetTagMapPerson([FromQuery] string tag)
{
//var tags = UtilGetPermutations.GetPermutations(tag);
var taglist = await _bustagmappersonrep.AsQueryable().Where(e => tag.Contains(e.Tag)).Select<BusTagMapPersonDto>().ToListAsync();
return taglist;
}
/// <summary>
/// 获取我的报告列表
/// </summary>
/// <param name="requestDTO"></param>
/// <returns></returns>
[HttpGet("GetBusCustomReports")]
public async Task<BusCustomReportsList> GetBusCustomReports([FromQuery] BusCustomReportRequestDTO requestDTO)
{
var report = new BusCustomReportsList();
var list = new List<CustomReports>();
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;
}
/// <summary>
/// 获取我的报告列表V2
/// </summary>
/// <param name="requestDTO"></param>
/// <returns></returns>
[HttpGet("GetBusCustomReports/v2")]
public async Task<BusCustomReportsList> GetBusCustomReportsV2([FromQuery] BusCustomReportRequestDTO requestDTO)
{
var report = new BusCustomReportsList();
var list = new List<CustomReports>();
//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;
}
/// <summary>
/// 获取综合报告所需ID
/// </summary>
/// <param name="requestDto"></param>
/// <returns></returns>
[HttpGet("GetReportMapIds")]
public async Task<BusReportMapIdsDto> 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;
}
/// <summary>
/// 霍兰德报告
/// </summary>
/// <param name="requestDto"></param>
/// <returns></returns>
[HttpGet("GetHollandDimension")]
public async Task<HollandDimension> GetHollandDimension([FromQuery] BusReportsRequestDto requestDto)
{
var res = new HollandDimension();
var replistitem = new List<ReportItem>();
string PinTitle = string.Empty;
var holland = await _studentScaleResultsRep.GetFirstAsync(r => r.Id == requestDto.ScaleId);
var picinfo = JsonConvert.DeserializeObject<BusScaleResult>(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;
}
/// <summary>
/// 获取MBTI报告
/// </summary>
/// <param name="requestDto"></param>
/// <returns></returns>
[HttpGet("GetMBTIDimension")]
public async Task<MBTIDimension> 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<BusScaleResult>(mbit.Result);
var mbtitag = explainmbti.FirstOrDefault(s => s.Tag == mbtiresult.Result.Trim());
var newlist = new List<ScalListItem>();
var oldlist = new List<ScalListItem>();
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;
}
/// <summary>
/// 获取能力维度报告
/// </summary>
/// <param name="requestDto"></param>
/// <returns></returns>
[HttpGet("GetAbilityDimension")]
public async Task<AbilityDimension> 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<BusScaleResult>(nengli.Result);
var sysdicdata = await _dictdataRep.AsQueryable().Where(e => e.DictTypeId == 342316563505221).ToListAsync();
var replist = new List<ReportItem>();
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<LinChart>()
{
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;
}
/// <summary>
/// 获取职业锚维度报告
/// </summary>
/// <param name="requestDto"></param>
/// <returns></returns>
[HttpGet("GetOpinionAbout")]
public async Task<OpinionAboutValue> 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<BusScaleResult>(zhiye.Result);
// var mbtitag = zhiyemaoinfo.FirstOrDefault(s => s.Tag == zyresult.Result.Trim());
var replist = new List<ReportItem>();
var openinfo = new List<OpinionItem>();
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;
}
/// <summary>
/// 获取学习风格结果
/// </summary>
/// <param name="requestDto"></param>
/// <returns></returns>
[HttpGet("GetStudyStyle")]
public async Task<StudyStyleResponseDTO> 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<BusScaleResult>(stylequery.Result);
var replist = new List<ReportItem>();
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<StudyStyleTables>();
var styletypes = new List<StudyStyleTables>();
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;
}
/// <summary>
/// 获取部分报告
/// </summary>
/// <param name="requestDTO"></param>
/// <returns></returns>
[HttpGet("GetBusComprehensive")]
public async Task<BusComprehensiveReportDTO> GetBusComprehensive([FromQuery] BusComprehensiveReportRequestDTO requestDTO)
{
var res = new BusComprehensiveReportDTO();
var query = await _custommapreportRep.GetFirstAsync(r => r.Id == requestDTO.ReportId);
var replistitem = new List<ReportItem>();
string PinTitle = string.Empty;
#region 霍兰德++++++++++++++
var holland = await _studentScaleResultsRep.GetFirstAsync(r => r.Id == query.HId);
var picinfo = JsonConvert.DeserializeObject<BusScaleResult>(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<BusScaleResult>(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<BusScaleResult>(nengli.Result);
// var mbtitag = explainnengli.FirstOrDefault(s => s.Tag == ngresult.Result.Trim());
// var replist = new List<ReportItem>();
// 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<BusScaleResult>(zhiye.Result);
var mbtitag = zhiyemaoinfo.FirstOrDefault(s => s.Tag == zyresult.Result.Trim());
res.opinionAbout = new OpinionAboutValue()
{
};
}
#endregion ++++++++++++++++++++++++++++
return res;
}
/// <summary>
///获取报告关键词
///type=0 兴趣测评报告
///=1 性格测评报告
///=2 能力测评
///=3 学生考试考虑
///=4 学习风格
///=5 学习技能
///=6 SAS
///=7 SDS
///=8 SCL-90
///=9 MHT
///=-1 价值观
///=-2 留学咨询
///<param name="prompt"></param>
/// </summary>
/// <returns></returns>
[HttpGet("GetBusAIReportKeyWord")]
public async Task<string> 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<BusScaleResult>(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<BusScaleResult>(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<BusScaleResult>(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<List<ScalTotals>>(result.Result);
description.Append($"学生考试焦虑测评分数是:{ksjl.First().Total}");
break;
case 4:
description.Append($"学习风格测评结果是{result.Result.ToJson()}");
break;
case 5:
var xxjn = JsonConvert.DeserializeObject<List<ScalTotals>>(result.Result).FirstOrDefault();
description.Append($"学习技能测评得分是{xxjn.Total}");
break;
case 6:
var sas = JsonConvert.DeserializeObject<List<ScalTotals>>(result.Result);
description.Append($"SAS焦虑测评分数是{sas.First().Total}");
break;
case 7:
var sds = JsonConvert.DeserializeObject<List<ScalTotals>>(result.Result);
description.Append($"SDS抑郁测测评分数是{sds.First().Total}");
break;
case 8:
var scl = JsonConvert.DeserializeObject<List<ScalTotals>>(result.Result);
description.Append($"SCL-90测测评分数是{scl.First().Total}");
break;
}
description.Append(",可以帮我分析一下给出的结果,给我一些好的建议吗?");
return description.ToString();
}
/// <summary>
/// 获取学生量表结果值匹配解释
/// </summary>
/// <returns></returns>
[HttpGet("GetCustomScaleExplains")]
public async Task<BusCustomScaleExplainDTO> 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<BusScaleResult>(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<xxfgTagbject>(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<List<ScalTotals>>(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<List<ScalTotals>>(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<List<ScalTotals>>(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<List<ScalTotals>>(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<ScalListItem> 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);
}
}
}