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