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;
///
///测评模块
///
[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;
}
///
/// 获取霍兰德试题
///
/// id=18霍兰德=20学科探索
///
[HttpGet]
public async Task 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", 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>>(dyresult);
byte[] byresult = Encoding.UTF8.GetBytes(jsons.response.ToJson());
await _distributed.SetAsync(key, byresult, _option);
result = byresult;
}
return JsonConvert.DeserializeObject(Encoding.UTF8.GetString(result).ToLowerInvariant());
}
///
/// MBTI试题列表
///
///
///
[HttpGet]
public async Task 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", 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>>(dyresult);
byte[] byresult = Encoding.UTF8.GetBytes(jsons.response.ToJson());
await _distributed.SetAsync(key, byresult, _option);
result = byresult;
}
return JsonConvert.DeserializeObject(Encoding.UTF8.GetString(result).ToLowerInvariant());
}
///
/// 霍兰德保存
///
///
///
[HttpPost]
public async Task SaveHLD([FromBody] SaveHollandDto dto)
{
var headers = _httpContextAccessor.HttpContext.Request.Headers;
var token = headers["Authorization"].ToString();
var baseurl = App.GetConfig("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>();
return result.response;
}
///
/// MBTI保存
///
///
///
[HttpPost]
public async Task SaveMBTI([FromBody] SaveMBTIDto dto)
{
var headers = _httpContextAccessor.HttpContext.Request.Headers;
var token = headers["Authorization"].ToString();
var baseurl = App.GetConfig("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>();
return result.response;
}
[HttpPost]
public async Task SaveSubject([FromBody] SaveSubjectDto dto)
{
var headers = _httpContextAccessor.HttpContext.Request.Headers;
var token = headers["Authorization"].ToString();
var baseurl = App.GetConfig("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>();
return result.response;
}
///
/// 获取测评测验状态
///
///
[HttpGet]
public async Task Status()
{
var headers = _httpContextAccessor.HttpContext.Request.Headers;
var token = headers["Authorization"].ToString();
var baseurl = App.GetConfig("OutExApi", true).BaseUrl;
var dyresult = await string.Format("{0}api/Evaluations?CustomerId={1}", baseurl, _userManager.UserId)
.WithOAuthBearerToken(token).GetStringAsync();
var jsons= JsonConvert.DeserializeObject>>(dyresult);
return jsons.response;
}
///
/// 获取测评结果
///
///
///
[HttpGet]
public async Task 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", 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>(dyresult).response;
}
if (dto.CategoryId == 19)
{
return JsonConvert.DeserializeObject>(dyresult).response;
}
else
{
return JsonConvert.DeserializeObject>(dyresult).response;
}
}
}