YD_WeChatApplet.Api/WeChatApplet/Services/Impl/JingShiTiJiaoService.cs
2026-01-16 17:31:16 +08:00

257 lines
8.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Newtonsoft.Json;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Channels;
using YD_WeChatApplet.Api.Services.Interface;
using YD_WeChatApplet.Api.Utilities;
using YD_WeChatApplet.Commons;
using YD_WeChatApplet.Commons.Dto.JingShiTiJiao;
using YD_WeChatApplet.Commons.Utils;
namespace YD_WeChatApplet.Api.Services.Impl
{
/// <summary>
/// 京师体教接口服务
/// </summary>
public class JingShiTiJiaoService : IJingShiTiJiaoService
{
private readonly ILogger<JingShiTiJiaoService> _logger;
public JingShiTiJiaoService(ILogger<JingShiTiJiaoService> logger)
{
_logger = logger;
}
/// <summary>
/// 根据教师获取教师年级班级信息
/// </summary>
/// <returns></returns>
public async Task<TeacherClassData> GetClassListByTeacher(string teacherNo)
{
var res = new TeacherClassData();
long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
string nonce = SaTokenSignHelper.RandomString(20);
// 1. 签名参数
var paramMap = new Dictionary<string, object>
{
{ "channel", AppSettings.JingShiTiJiao.Channel },
{ "teacherNo", teacherNo },
{ "timestamp", timestamp },
{ "nonce", nonce }
};
// 4. 构建签名 QueryString
string queryStr = SaTokenSignHelper.BuildQueryString(paramMap, AppSettings.JingShiTiJiao.SecretKey);
// 5. 拼接最终 URL
string url = $"{AppSettings.JingShiTiJiao.BaseUrl}/api/open/class/by/teacher?{queryStr}";
string json = await HttpManager.HttpGetAsync(url);
if (string.IsNullOrWhiteSpace(json))
return res;
var data = JsonConvert.DeserializeObject<JingShiResponse<TeacherClassData>>(json);
if (data != null && data.Code == 0)
{
string token = JwtHelper.IssueJwt(new UserInfoDto()
{
User_Id = -1,
UserName = data.Data.TeacherName,
Role_Id = 2,
PhoneNo = data.Data.TeacherNo,
SchoolCode = data.Data.SchoolNo,
UserNo = data.Data.TeacherNo
});
data.Data.Token = token;
_logger.LogError($"teacherNo:{teacherNo},token:{token}");
return data.Data;
}
return res;
}
/// <summary>
/// 根据班级编号获取学生列表
/// </summary>
/// <param name="classNo"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public async Task<List<StudentDto>> GetStuListByClass(string classNo)
{
var res = new List<StudentDto>();
long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
string nonce = SaTokenSignHelper.RandomString(20);
// 1. 签名参数
var paramMap = new Dictionary<string, object>
{
{ "channel", AppSettings.JingShiTiJiao.Channel },
{ "classNo", classNo },
{ "timestamp", timestamp },
{ "nonce", nonce }
};
// 4. 构建签名 QueryString
string queryStr = SaTokenSignHelper.BuildQueryString(paramMap, AppSettings.JingShiTiJiao.SecretKey);
// 5. 拼接最终 URL
string url = $"{AppSettings.JingShiTiJiao.BaseUrl}/api/open/stu/by/class?{queryStr}";
string json = await HttpManager.HttpGetAsync(url);
if (string.IsNullOrWhiteSpace(json))
return res;
var data = JsonConvert.DeserializeObject<JingShiResponse<List<StudentDto>>>(json);
if (data != null && data.Code == 0)
{
return data.Data;
}
return res;
}
/// <summary>
/// 根据学生编号获取学生详情
/// </summary>
/// <param name="stuNo"></param>
/// <returns></returns>
public async Task<StudentDetailDto> GetStudentInfo(string stuNo)
{
var res = new StudentDetailDto();
long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
string nonce = SaTokenSignHelper.RandomString(20);
// 1. 签名参数
var paramMap = new Dictionary<string, object>
{
{ "channel", AppSettings.JingShiTiJiao.Channel },
{ "stuNo", stuNo },
{ "timestamp", timestamp },
{ "nonce", nonce }
};
// 4. 构建签名 QueryString
string queryStr = SaTokenSignHelper.BuildQueryString(paramMap, AppSettings.JingShiTiJiao.SecretKey);
// 5. 拼接最终 URL
string url = $"{AppSettings.JingShiTiJiao.BaseUrl}/api/open/stu/info?{queryStr}";
string json = await HttpManager.HttpGetAsync(url);
if (string.IsNullOrWhiteSpace(json))
return res;
var data = JsonConvert.DeserializeObject<JingShiResponse<StudentDetailDto>>(json);
if (data != null && data.Code == 0)
{
string token = JwtHelper.IssueJwt(new UserInfoDto()
{
User_Id = -1,
UserName = data.Data.StudentName,
Role_Id = 3,
PhoneNo = data.Data.TeacherNo,
SchoolCode = data.Data.SchoolNo,
UserNo = data.Data.StudentNo
});
data.Data.Token = token;
return data.Data;
}
return res;
}
/// <summary>
/// 上传成绩数据
/// </summary>
/// <param name="list"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public async Task<bool> PushSportsData(List<SportsDataPushDto> list)
{
long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
string nonce = SaTokenSignHelper.RandomString();
var paramMap = new Dictionary<string, object>
{
{ "channel", AppSettings.JingShiTiJiao.Channel },
{ "timestamp", timestamp },
{ "nonce", nonce }
};
string jsonBody = JsonConvert.SerializeObject(list);
// ⭐ POST JSON 的签名
string queryStr = SaTokenSignHelper.BuildPostJsonQueryString(
paramMap,
AppSettings.JingShiTiJiao.SecretKey,
jsonBody);
string url = $"{AppSettings.JingShiTiJiao.BaseUrl}/api/sports/data/push?{queryStr}";
using var client = new HttpClient();
var content = new StringContent(jsonBody, Encoding.UTF8, "application/json");
var response = await client.PostAsync(url, content);
string result = await response.Content.ReadAsStringAsync();
var res = JsonConvert.DeserializeObject<JingShiResponse<object>>(result);
return res != null && res.Code == 0;
}
/// <summary>
/// 根据学校编码获取年级/班级接口
/// </summary>
/// <param name="schoolNo"></param>
/// <returns></returns>
public async Task<JingShiSchoolClassDto> GetClassBySchoolAsync(string schoolNo)
{
var res = new JingShiSchoolClassDto();
long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
string nonce = SaTokenSignHelper.RandomString();
var paramMap = new Dictionary<string, object>
{
{ "channel", AppSettings.JingShiTiJiao.Channel },
{ "schoolNo", schoolNo },
{ "timestamp", timestamp },
{ "nonce", nonce }
};
// 4. 构建签名 QueryString
string queryStr = SaTokenSignHelper.BuildQueryString(paramMap, AppSettings.JingShiTiJiao.SecretKey);
// 5. 拼接最终 URL
string url = $"{AppSettings.JingShiTiJiao.BaseUrl}/api/open/class/by/school?{queryStr}";
string json = await HttpManager.HttpGetAsync(url);
if (string.IsNullOrWhiteSpace(json))
return res;
var data = JsonConvert.DeserializeObject<JingShiResponse<JingShiSchoolClassDto>>(json);
if (data != null && data.Code == 0)
{
return data.Data;
}
return res;
}
}
}