2026-01-07 09:34:32 +08:00
|
|
|
|
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;
|
2026-01-09 18:31:24 +08:00
|
|
|
|
using YD_WeChatApplet.Commons;
|
2026-01-07 09:34:32 +08:00
|
|
|
|
using YD_WeChatApplet.Commons.Dto.JingShiTiJiao;
|
|
|
|
|
|
using YD_WeChatApplet.Commons.Utils;
|
|
|
|
|
|
|
|
|
|
|
|
namespace YD_WeChatApplet.Api.Services.Impl
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 京师体教接口服务
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
public class JingShiTiJiaoService : IJingShiTiJiaoService
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <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)
|
|
|
|
|
|
{
|
2026-01-09 18:31:24 +08:00
|
|
|
|
string token = JwtHelper.IssueJwt(new UserInfoDto()
|
|
|
|
|
|
{
|
|
|
|
|
|
User_Id = -1,
|
|
|
|
|
|
UserName = data.Data.TeacherName,
|
|
|
|
|
|
Role_Id = 2,
|
|
|
|
|
|
PhoneNo = data.Data.TeacherNo,
|
|
|
|
|
|
SchoolCode = AppSettings.JingShiTiJiao.Channel,
|
|
|
|
|
|
UserNo = data.Data.TeacherNo
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
data.Data.Token = token;
|
|
|
|
|
|
|
2026-01-07 09:34:32 +08:00
|
|
|
|
return data.Data;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-09 18:31:24 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-01-07 09:34:32 +08:00
|
|
|
|
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
|
2026-01-08 11:02:55 +08:00
|
|
|
|
string url = $"{AppSettings.JingShiTiJiao.BaseUrl}/api/open/stu/info?{queryStr}";
|
2026-01-07 09:34:32 +08:00
|
|
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
|
{
|
2026-01-09 18:31:24 +08:00
|
|
|
|
string token = JwtHelper.IssueJwt(new UserInfoDto()
|
|
|
|
|
|
{
|
|
|
|
|
|
User_Id = -1,
|
|
|
|
|
|
UserName = data.Data.StudentName,
|
|
|
|
|
|
Role_Id = 2,
|
|
|
|
|
|
PhoneNo = data.Data.TeacherNo,
|
|
|
|
|
|
SchoolCode = AppSettings.JingShiTiJiao.Channel,
|
|
|
|
|
|
UserNo = data.Data.StudentNo
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
data.Data.Token = token;
|
2026-01-07 09:34:32 +08:00
|
|
|
|
}
|
|
|
|
|
|
return res;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|