238 lines
8.2 KiB
C#
238 lines
8.2 KiB
C#
using Microsoft.Extensions.Caching.Distributed;
|
|
using Newtonsoft.Json.Serialization;
|
|
using Newtonsoft.Json;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using Flurl.Http;
|
|
using Flurl;
|
|
|
|
namespace Admin.NET.Core.Service;
|
|
|
|
|
|
|
|
/// <summary>
|
|
///测评模块
|
|
/// </summary>
|
|
[ApiDescriptionSettings(ApplicationConst.ZYGroupName, Order = 900)]
|
|
[Route("api/ZyEvaluate")]
|
|
public class ZYEvaluateService : IDynamicApiController, ITransient
|
|
{
|
|
private readonly IDistributedCache _distributed;
|
|
private const string _cachekey = "eval_";
|
|
private readonly IHttpContextAccessor _httpContextAccessor;
|
|
private readonly UserManager _userManager;
|
|
public ZYEvaluateService(IDistributedCache distributedCache, IHttpContextAccessor httpContextAccessor, UserManager userManager)
|
|
{
|
|
_distributed = distributedCache;
|
|
_httpContextAccessor = httpContextAccessor;
|
|
_userManager = userManager;
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 获取霍兰德试题
|
|
/// </summary>
|
|
/// <param name="dto">id=18霍兰德=20学科探索</param>
|
|
/// <returns></returns>
|
|
[HttpGet]
|
|
public async Task<dynamic> HLD([FromQuery] HollandRequestDto dto)
|
|
{
|
|
var key = _cachekey + "hld_" + dto.CategoryId;
|
|
var result = await _distributed.GetAsync(key);
|
|
if (result == null)
|
|
{
|
|
var headers = _httpContextAccessor.HttpContext.Request.Headers;
|
|
var token = headers["Authorization"].ToString();
|
|
var baseurl = App.GetConfig<OutExApi>("OutExApi", true).BaseUrl;
|
|
var _option = new DistributedCacheEntryOptions()
|
|
.SetSlidingExpiration(TimeSpan.FromDays(1));
|
|
var dyresult = await string.Format("{0}api/front/Test/GetQuestion", baseurl)
|
|
.SetQueryParams(dto)
|
|
.WithOAuthBearerToken(token)
|
|
.GetStringAsync();
|
|
var jsons = JsonConvert.DeserializeObject<CustomPropertyResult<List<appQuestionResult>>>(dyresult);
|
|
byte[] byresult = Encoding.UTF8.GetBytes(jsons.response.ToJson());
|
|
await _distributed.SetAsync(key, byresult, _option);
|
|
result = byresult;
|
|
}
|
|
return JsonConvert.DeserializeObject<dynamic>(Encoding.UTF8.GetString(result).ToLowerInvariant());
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// MBTI试题列表
|
|
/// </summary>
|
|
/// <param name="dto"></param>
|
|
/// <returns></returns>
|
|
[HttpGet]
|
|
public async Task<dynamic> MBTI([FromQuery] HollandRequestDto dto)
|
|
{
|
|
dto.CategoryId = 19;
|
|
var key = _cachekey + "MBTI_" + dto.CategoryId;
|
|
var result = await _distributed.GetAsync(key);
|
|
if (result == null)
|
|
{
|
|
var headers = _httpContextAccessor.HttpContext.Request.Headers;
|
|
var token = headers["Authorization"].ToString();
|
|
var baseurl = App.GetConfig<OutExApi>("OutExApi", true).BaseUrl;
|
|
var _option = new DistributedCacheEntryOptions()
|
|
.SetSlidingExpiration(TimeSpan.FromDays(1));
|
|
var dyresult = await string.Format("{0}api/front/Test/GetQuestion", baseurl)
|
|
.SetQueryParams(dto)
|
|
.WithOAuthBearerToken(token)
|
|
.GetStringAsync();
|
|
var jsons = JsonConvert.DeserializeObject<CustomPropertyResult<List<appQuestionResult>>>(dyresult);
|
|
byte[] byresult = Encoding.UTF8.GetBytes(jsons.response.ToJson());
|
|
await _distributed.SetAsync(key, byresult, _option);
|
|
result = byresult;
|
|
}
|
|
return JsonConvert.DeserializeObject<dynamic>(Encoding.UTF8.GetString(result).ToLowerInvariant());
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 霍兰德保存
|
|
/// </summary>
|
|
/// <param name="dto"></param>
|
|
/// <returns></returns>
|
|
[HttpPost]
|
|
public async Task<dynamic> SaveHLD([FromBody] SaveHollandDto dto)
|
|
{
|
|
var headers = _httpContextAccessor.HttpContext.Request.Headers;
|
|
var token = headers["Authorization"].ToString();
|
|
var baseurl = App.GetConfig<OutExApi>("OutExApi", true).BaseUrl;
|
|
var dyresult = await string.Format("{0}api/front/Test/SaveHolland", baseurl).WithOAuthBearerToken(
|
|
token).PostJsonAsync(new SaveHolland()
|
|
{
|
|
CategoryId = dto.CategoryId,
|
|
StudentId = _userManager.UserId,
|
|
Tags = dto.item.ToJson()
|
|
});
|
|
var result = await dyresult.GetJsonAsync<CustomPropertyResult<dynamic>>();
|
|
return result.response;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// MBTI保存
|
|
/// </summary>
|
|
/// <param name="dto"></param>
|
|
/// <returns></returns>
|
|
[HttpPost]
|
|
public async Task<dynamic> SaveMBTI([FromBody] SaveMBTIDto dto)
|
|
{
|
|
var headers = _httpContextAccessor.HttpContext.Request.Headers;
|
|
var token = headers["Authorization"].ToString();
|
|
var baseurl = App.GetConfig<OutExApi>("OutExApi", true).BaseUrl;
|
|
var dyresult = await string.Format("{0}api/front/Test/SaveHolland", baseurl).WithOAuthBearerToken(token).PostJsonAsync(new SaveHolland()
|
|
{
|
|
CategoryId = dto.CategoryId,
|
|
StudentId = _userManager.UserId,
|
|
|
|
Tags = dto.item.ToJson()
|
|
});
|
|
var result = await dyresult.GetJsonAsync<CustomPropertyResult<dynamic>>();
|
|
return result.response;
|
|
|
|
}
|
|
|
|
|
|
[HttpPost]
|
|
public async Task<dynamic> SaveSubject([FromBody] SaveSubjectDto dto)
|
|
{
|
|
var headers = _httpContextAccessor.HttpContext.Request.Headers;
|
|
var token = headers["Authorization"].ToString();
|
|
var baseurl = App.GetConfig<OutExApi>("OutExApi", true).BaseUrl;
|
|
var dyresult = await string.Format("{0}api/front/Test/SavePsych", baseurl)
|
|
.WithOAuthBearerToken(token).PostJsonAsync(new SavePsychQuery()
|
|
{
|
|
CategoryId = 20,
|
|
StudentId = _userManager.UserId,
|
|
Type = 0,
|
|
Result = dto.Result
|
|
});
|
|
|
|
var result = await dyresult.GetJsonAsync<CustomPropertyResult<dynamic>>();
|
|
return result.response;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 获取测评测验状态
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
[HttpGet]
|
|
public async Task<dynamic> Status()
|
|
{
|
|
var headers = _httpContextAccessor.HttpContext.Request.Headers;
|
|
var token = headers["Authorization"].ToString();
|
|
var baseurl = App.GetConfig<OutExApi>("OutExApi", true).BaseUrl;
|
|
var dyresult = await string.Format("{0}api/Evaluations?CustomerId={1}", baseurl, _userManager.UserId)
|
|
.WithOAuthBearerToken(token).GetStringAsync();
|
|
var jsons= JsonConvert.DeserializeObject<CustomPropertyResult<List<EvaluationResponse>>>(dyresult);
|
|
return jsons.response;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 获取测评结果
|
|
/// </summary>
|
|
/// <param name="dto"></param>
|
|
/// <returns></returns>
|
|
[HttpGet]
|
|
public async Task<dynamic> Result([FromQuery] EvaluateResultDto dto)
|
|
{
|
|
//var key = _cachekey + "r_" + dto.CategoryId;
|
|
//var result = await _distributed.GetAsync(key);
|
|
//if (result == null)
|
|
//{
|
|
var headers = _httpContextAccessor.HttpContext.Request.Headers;
|
|
var token = headers["Authorization"].ToString();
|
|
var baseurl = App.GetConfig<OutExApi>("OutExApi", true).BaseUrl;
|
|
var _option = new DistributedCacheEntryOptions()
|
|
.SetSlidingExpiration(TimeSpan.FromDays(1));
|
|
string interurl = dto.CategoryId == 18 ? "GetHollandoccupDetail" : dto.CategoryId == 19 ? "GetMBTIResult" : "SubjectChartRadar";
|
|
var dyresult = await string.Format("{0}api/front/Test/{1}", baseurl, interurl)
|
|
.SetQueryParams(new ResultLookDto()
|
|
{
|
|
CategoryId = dto.CategoryId,
|
|
StudentId = _userManager.UserId
|
|
})
|
|
.WithOAuthBearerToken(token)
|
|
.GetStringAsync();
|
|
|
|
if (dto.CategoryId == 18)
|
|
{
|
|
return JsonConvert.DeserializeObject<CustomPropertyResult<HollandOccupDetail>>(dyresult).response;
|
|
}
|
|
if (dto.CategoryId == 19)
|
|
{
|
|
return JsonConvert.DeserializeObject<CustomPropertyResult<UserResult>>(dyresult).response;
|
|
}
|
|
else
|
|
{
|
|
return JsonConvert.DeserializeObject<CustomPropertyResult<SubjectEvBillDTO>>(dyresult).response;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|