|
@@ -28,6 +28,7 @@ using Azure.Storage.Blobs.Models;
|
|
|
using HTEXLib.COMM.Helpers;
|
|
|
using Microsoft.AspNetCore.Authorization;
|
|
|
using System.Net.Http;
|
|
|
+using System.ComponentModel.DataAnnotations;
|
|
|
|
|
|
namespace TEAMModelAPI.Controllers
|
|
|
{
|
|
@@ -105,7 +106,7 @@ namespace TEAMModelAPI.Controllers
|
|
|
teachers.Select(x => new { x.id, x.name, x.picture, x.job, x.subjectIds, x.roles }).ToList().ForEach(x => {
|
|
|
var coreUser= coreUsers.Find(c=>c.id.Equals(x.id));
|
|
|
if (coreUser != null) {
|
|
|
- tchs.Add(new {x.id,x.name,x.picture,x.job,x.subjectIds,x.roles,coreUser.searchKey });
|
|
|
+ tchs.Add(new {x.id,coreUser.name, coreUser.picture,x.job,x.subjectIds,x.roles,coreUser.searchKey });
|
|
|
}
|
|
|
});
|
|
|
return Ok(new
|
|
@@ -158,5 +159,109 @@ namespace TEAMModelAPI.Controllers
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 批量导入教师信息,并加入学校。可以导入学科,但需要填写学段id
|
|
|
+ /// </summary>
|
|
|
+ /// <returns></returns>
|
|
|
+ [ProducesDefaultResponseType]
|
|
|
+ [HttpPost("import-school-teacher")]
|
|
|
+ [ApiToken(Auth = "1502", Name = "学校教师信息", RW = "R", Limit = false)]
|
|
|
+ public async Task<IActionResult> ImportSchoolTeacher(JsonElement json) {
|
|
|
+ //如果需要同时导入学科,则需要填写学段
|
|
|
+ var (id, school) = HttpContext.GetApiTokenInfo();
|
|
|
+ if (!json.TryGetProperty("teachers", out JsonElement _teachers) || !_teachers.ValueKind.Equals(JsonValueKind.Array)) { return BadRequest(); }
|
|
|
+ IEnumerable<ImportTech> teachers = _teachers.ToObject<List<ImportTech>>();
|
|
|
+ var result = teachers.Valid();
|
|
|
+ if (!result.isVaild)
|
|
|
+ {
|
|
|
+ return Ok(new { error = 2, msg = result });
|
|
|
+ }
|
|
|
+ List<string> searchKey = teachers.Select(x=>x.id).ToList();
|
|
|
+ var keys = searchKey.Where(x => !string.IsNullOrWhiteSpace(x));
|
|
|
+ var content = new StringContent(keys.ToJsonString(), Encoding.UTF8, "application/json");
|
|
|
+ string ujson = await _coreAPIHttpService.GetUserInfos(content);
|
|
|
+ List<CoreUser> coreUsers = new List<CoreUser>();
|
|
|
+ if (!string.IsNullOrWhiteSpace(ujson))
|
|
|
+ {
|
|
|
+ coreUsers = ujson.ToObject<List<CoreUser>>();
|
|
|
+ }
|
|
|
+ IEnumerable<string> unexist = new List<string>();
|
|
|
+ if (coreUsers.Any())
|
|
|
+ {
|
|
|
+ unexist = searchKey.Except(coreUsers.Select(x => x.id));
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return Ok(new { error = 1, msg = "没有找到对应的教师信息!" });
|
|
|
+ }
|
|
|
+ var exist = coreUsers.Select(x => x.id);
|
|
|
+ //注册了账号的教师
|
|
|
+ teachers = teachers.Where(x => exist.Contains(x.id));
|
|
|
+
|
|
|
+ List<Teacher> teachersList = new List<Teacher>();
|
|
|
+ List<SchoolTeacher> schoolTeachers = new List<SchoolTeacher>();
|
|
|
+ string sql = $"select value(c) from c where c.id in ({string.Join(",",teachers.Select(x=>$"'{x.id}'"))})";
|
|
|
+ await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.Teacher)
|
|
|
+ .GetItemQueryIterator<Teacher>(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey("Base") })) {
|
|
|
+ teachersList.Add(item);
|
|
|
+ }
|
|
|
+ await foreach (var item in _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, Constant.School)
|
|
|
+ .GetItemQueryIterator<SchoolTeacher>(queryText: sql, requestOptions: new QueryRequestOptions { PartitionKey = new PartitionKey($"Teacher-{school}") }))
|
|
|
+ {
|
|
|
+ schoolTeachers.Add(item);
|
|
|
+ }
|
|
|
+ long now = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
|
|
|
+ School data = await _azureCosmos.GetCosmosClient().GetContainer(Constant.TEAMModelOS, "School").ReadItemAsync<School>(school, new PartitionKey("Base"));
|
|
|
+ foreach (var item in teachers) {
|
|
|
+ var teacher = teachersList.Find(x => x.id.Equals(item.id));
|
|
|
+ if (teacher != null)
|
|
|
+ {
|
|
|
+ var sch= teacher.schools?.Find(x => x.schoolId.Equals(school));
|
|
|
+ if (sch == null) {
|
|
|
+ if (teacher.schools.IsNotEmpty())
|
|
|
+ {
|
|
|
+ teacher.schools.Add(new Teacher.TeacherSchool {schoolId= school,name=data.name,status="join",time= now ,picture=data.picture,areaId=data.areaId});
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ teacher.defaultSchool = school;
|
|
|
+ teacher.size = teacher.size + 1 ;
|
|
|
+ teacher.schools = new List<Teacher.TeacherSchool> { new Teacher.TeacherSchool { schoolId = school, name = data.name, status = "join", time = now, picture = data.picture, areaId = data.areaId } };
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ var coreUser= coreUsers.Find(x => x.id.Equals(item.id));
|
|
|
+ teacher = new Teacher
|
|
|
+ {
|
|
|
+ id = coreUser.id,
|
|
|
+ name = coreUser.name,
|
|
|
+ picture = coreUser.picture,
|
|
|
+ defaultSchool=school,
|
|
|
+ size=2,
|
|
|
+ code="Base",
|
|
|
+ pk="Base",
|
|
|
+ schools = new List<Teacher.TeacherSchool> { new Teacher.TeacherSchool { schoolId = school, name = data.name, status = "join", time = now, picture = data.picture, areaId = data.areaId } }
|
|
|
+ };
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return Ok();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ public class ImportTech {
|
|
|
+ [Required(ErrorMessage = "教师id必须设置")]
|
|
|
+ public string id { get; set; }
|
|
|
+ public List<ImportTechSubject> subjects { get; set; }
|
|
|
+ [ RegularExpression(@"[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}", ErrorMessage = "学段的uuid格式错误!")]
|
|
|
+ public string periodId { get; set; }
|
|
|
+ public string job { get; set; }
|
|
|
}
|
|
|
+ public class ImportTechSubject
|
|
|
+ {
|
|
|
+ [RegularExpression(@"[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}", ErrorMessage = "科目的uuid格式错误!")]
|
|
|
+ public string id { get; set; }
|
|
|
+ [Required(ErrorMessage = "科目名称 必须设置")]
|
|
|
+ public string name { get; set; }
|
|
|
+ }
|
|
|
+
|
|
|
}
|