tuiwucarrer/Admin.NET/Admin.NET.Core/Service/ZYEvaluate/ZYEvaluateService.cs

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;
}
}
}