using Newtonsoft.Json; using System.Text; using VOL.Ai.IServices; using VOL.Core.Configuration; using VOL.Core.Extensions.AutofacManager; using VOL.Core.Utilities; using VOL.Model.JingShiTiJiao; namespace VOL.Ai.Services { /// /// 京师体教接口服务 /// public class JingShiTiJiaoService : IJingShiTiJiaoService, IDependency { /// /// 根据教师获取教师年级班级信息 /// /// public async Task GetClassListByTeacher(string teacherNo) { var res = new TeacherClassData(); long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); string nonce = SaTokenSignHelper.RandomString(20); // 1. 签名参数 var paramMap = new Dictionary { { "channel", AppSetting.JingShiTiJiao.Channel }, { "teacherNo", teacherNo }, { "timestamp", timestamp }, { "nonce", nonce } }; // 4. 构建签名 QueryString string queryStr = SaTokenSignHelper.BuildQueryString(paramMap, AppSetting.JingShiTiJiao.SecretKey); // 5. 拼接最终 URL string url = $"{AppSetting.JingShiTiJiao.BaseUrl}/api/open/class/by/teacher?{queryStr}"; string json = await HttpManager.HttpGetAsync(url); if (string.IsNullOrWhiteSpace(json)) return res; var data = JsonConvert.DeserializeObject>(json); if (data != null && data.Code == 0) { return data.Data; } return res; } /// /// 根据班级编号获取学生列表 /// /// /// /// public async Task> GetStuListByClass(string classNo) { var res = new List(); long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); string nonce = SaTokenSignHelper.RandomString(20); // 1. 签名参数 var paramMap = new Dictionary { { "channel", AppSetting.JingShiTiJiao.Channel }, { "classNo", classNo }, { "timestamp", timestamp }, { "nonce", nonce } }; // 4. 构建签名 QueryString string queryStr = SaTokenSignHelper.BuildQueryString(paramMap, AppSetting.JingShiTiJiao.SecretKey); // 5. 拼接最终 URL string url = $"{AppSetting.JingShiTiJiao.BaseUrl}/api/open/stu/by/class?{queryStr}"; string json = await HttpManager.HttpGetAsync(url); if (string.IsNullOrWhiteSpace(json)) return res; var data = JsonConvert.DeserializeObject>>(json); if (data != null && data.Code == 0) { return data.Data; } return res; } /// /// 根据学生编号获取学生详情 /// /// /// public async Task GetStudentInfo(string stuNo) { var res = new StudentDetailDto(); long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); string nonce = SaTokenSignHelper.RandomString(20); // 1. 签名参数 var paramMap = new Dictionary { { "channel", AppSetting.JingShiTiJiao.Channel }, { "stuNo", stuNo }, { "timestamp", timestamp }, { "nonce", nonce } }; // 4. 构建签名 QueryString string queryStr = SaTokenSignHelper.BuildQueryString(paramMap, AppSetting.JingShiTiJiao.SecretKey); // 5. 拼接最终 URL string url = $"{AppSetting.JingShiTiJiao.BaseUrl}/api/open/stu/info?{queryStr}"; string json = await HttpManager.HttpGetAsync(url); if (string.IsNullOrWhiteSpace(json)) return res; var data = JsonConvert.DeserializeObject>(json); if (data != null && data.Code == 0) { return data.Data; } return res; } /// /// 上传成绩数据 /// /// /// /// public async Task PushSportsData(List list) { long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); string nonce = SaTokenSignHelper.RandomString(); var paramMap = new Dictionary { { "channel", AppSetting.JingShiTiJiao.Channel }, { "timestamp", timestamp }, { "nonce", nonce } }; string jsonBody = JsonConvert.SerializeObject(list); // ⭐ POST JSON 的签名 string queryStr = SaTokenSignHelper.BuildPostJsonQueryString( paramMap, AppSetting.JingShiTiJiao.SecretKey, jsonBody); string url = $"{AppSetting.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>(result); return res != null && res.Code == 0; } /// /// 根据学校编码获取年级/班级接口 /// /// /// public async Task GetClassBySchoolAsync(string schoolNo) { var res = new JingShiSchoolClassDto(); long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); string nonce = SaTokenSignHelper.RandomString(); var paramMap = new Dictionary { { "channel", AppSetting.JingShiTiJiao.Channel }, { "schoolNo", schoolNo }, { "timestamp", timestamp }, { "nonce", nonce } }; // 4. 构建签名 QueryString string queryStr = SaTokenSignHelper.BuildQueryString(paramMap, AppSetting.JingShiTiJiao.SecretKey); // 5. 拼接最终 URL string url = $"{AppSetting.JingShiTiJiao.BaseUrl}/api/open/class/by/school?{queryStr}"; string json = await HttpManager.HttpGetAsync(url); if (string.IsNullOrWhiteSpace(json)) return res; var data = JsonConvert.DeserializeObject>(json); if (data != null && data.Code == 0) { return data.Data; } return res; } } }