2060 lines
117 KiB
C#
2060 lines
117 KiB
C#
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);
|
||
}
|
||
|
||
}
|
||
}
|