|
|
|
@ -162,6 +162,55 @@ public class TeacherServiceImpl implements TeacherService {
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public Map<String, Object> compareData(TeacherDto teacherDto, HttpServletRequest request) {
|
|
|
|
|
Map<String, Object> res = new HashMap<>();
|
|
|
|
|
try {
|
|
|
|
|
//从IES5获取相关教师基础信息
|
|
|
|
|
String url = env.getProperty("ies.server-url-get-teacher-all");
|
|
|
|
|
Map<String, Object> teacherInfos =GroupUtil.getGroupId(teacherDto, new GroupUtil(env), request, url);
|
|
|
|
|
List<GpTeacherVo> existingTeachers = new ArrayList<>();
|
|
|
|
|
if (teacherInfos != null) {
|
|
|
|
|
//转换为GpTeacherVo对象数组
|
|
|
|
|
List<GpTeacherVo> teachersList = convertToGpTeacherVoList(teacherInfos, teacherDto.getCode());
|
|
|
|
|
String code = String.format(PK.PTTEACHER, teacherDto.getCode());
|
|
|
|
|
List<PtTeacherInfo> ptTeacherInfos = ptTeacherRepository.findAllTeacher(teacherDto.getCode(),code);
|
|
|
|
|
//根据ID筛选出teachersList中不在ptTeacherInfos中的数据
|
|
|
|
|
existingTeachers = teachersList.stream()
|
|
|
|
|
.filter(t -> ptTeacherInfos.stream().anyMatch(pt -> pt.getId().equals(t.getId())))
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
res.put("Add", existingTeachers);
|
|
|
|
|
//根据source属性 筛选出ptTeacherInfos中source为ies 缺在teachersList没被找到的数据
|
|
|
|
|
List<PtTeacherInfo> toDeactivate = ptTeacherInfos.stream()
|
|
|
|
|
.filter(pt -> pt.getSource().equals("ies"))
|
|
|
|
|
.filter(pt -> teachersList.stream().noneMatch(t -> t.getId().equals(pt.getId())))
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
res.put("Delete", toDeactivate);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
return res;
|
|
|
|
|
}catch (Exception ex){
|
|
|
|
|
throw new ServiceException(ErrorCode.SYSTEM_ERROR.getCode(), "获取教师数据失败");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public List<GpTeacherVo> getTeacherFromIes(TeacherDto teacherDto, HttpServletRequest request) {
|
|
|
|
|
List<GpTeacherVo> teachers = new ArrayList<>();
|
|
|
|
|
try {
|
|
|
|
|
//从IES5获取相关教师基础信息
|
|
|
|
|
String url = env.getProperty("ies.server-url-get-teacher-all");
|
|
|
|
|
Map<String, Object> teacherInfos = GroupUtil.getGroupId(teacherDto, new GroupUtil(env), request, url);
|
|
|
|
|
if (teacherInfos != null) {
|
|
|
|
|
//转换为GpTeacherVo对象数组
|
|
|
|
|
teachers = convertToGpTeacherVoList(teacherInfos, teacherDto.getCode());
|
|
|
|
|
}
|
|
|
|
|
return teachers;
|
|
|
|
|
}catch(Exception ex){
|
|
|
|
|
throw new ServiceException(ErrorCode.SYSTEM_ERROR.getCode(), "获取教师数据失败");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public Map<String, Object> getTeacherDetail(TeacherDto teacherDto, HttpServletRequest request) {
|
|
|
|
|
|
|
|
|
@ -184,39 +233,10 @@ public class TeacherServiceImpl implements TeacherService {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
List<GpTeacherVo> teachersList = convertToGpTeacherVoList(teacherInfos, teacherDto.getCode());
|
|
|
|
|
//List<String> phones = teachersList.stream().map(GpTeacherVo::getPhone).collect(Collectors.toList());
|
|
|
|
|
GpTeacherDto gpTeacherDto = new GpTeacherDto();
|
|
|
|
|
//gpTeacherDto.setMobiles(phones);
|
|
|
|
|
//Map<String, Object> tBase = getTeacherBase(gpTeacherDto, request);
|
|
|
|
|
//List<GpTeacher> gpTeachers = convertToGpTeacherList(tBase);
|
|
|
|
|
// 优化1:使用Map加速查找
|
|
|
|
|
/*Map<String, GpTeacher> phoneToGpTeacher = gpTeachers.stream()
|
|
|
|
|
.collect(Collectors.toMap(
|
|
|
|
|
gp -> gp.getMobile().toLowerCase(),
|
|
|
|
|
Function.identity()
|
|
|
|
|
));*/
|
|
|
|
|
|
|
|
|
|
// 处理教师信息
|
|
|
|
|
/* teachersList.forEach(teacher -> {
|
|
|
|
|
String phoneKey = teacher.getPhone() != null ? teacher.getPhone().toLowerCase() : "";
|
|
|
|
|
GpTeacher gpTeacher = phoneToGpTeacher.get(phoneKey);
|
|
|
|
|
if (gpTeacher != null) {
|
|
|
|
|
teacher.setGender(gpTeacher.getBasic() != null ? gpTeacher.getBasic().getGender() : "");
|
|
|
|
|
teacher.setPracticeTime(gpTeacher.getPracticeTime() != null ? gpTeacher.getPracticeTime() : 0L);
|
|
|
|
|
teacher.setDegree(gpTeacher.getDegree() != null ? gpTeacher.getDegree() : "");
|
|
|
|
|
}
|
|
|
|
|
});*/
|
|
|
|
|
|
|
|
|
|
List<GpTeacherVo> copyList = new ArrayList<>(teachersList);
|
|
|
|
|
// 同步保存,确保数据持久化
|
|
|
|
|
asyncTeacherService.asyncSavePtTeacherInfos(Collections.unmodifiableList(copyList));
|
|
|
|
|
//asyncTeacherService.syncSavePtTeacherInfos(teachersList); // 假设改为同步方法
|
|
|
|
|
|
|
|
|
|
// 优化查询与匹配
|
|
|
|
|
/* Set<String> teacherIds = teachersList.stream()
|
|
|
|
|
.map(GpTeacherVo::getId)
|
|
|
|
|
.collect(Collectors.toSet());*/
|
|
|
|
|
|
|
|
|
|
String code = String.format(PK.PTTEACHER, teacherDto.getCode());
|
|
|
|
|
List<PtTeacherInfo> ptTeacherInfos = ptTeacherRepository.findAllTeacher(teacherDto.getCode(),code);
|
|
|
|
|
|
|
|
|
@ -228,28 +248,8 @@ public class TeacherServiceImpl implements TeacherService {
|
|
|
|
|
Map<String, Long> degreeCount = ptTeacherInfos.stream()
|
|
|
|
|
.filter(gpTeacher -> StringUtils.isNotEmpty(gpTeacher.getDegree()))
|
|
|
|
|
.collect(Collectors.groupingBy(PtTeacherInfo::getDegree, Collectors.counting()));
|
|
|
|
|
//Map<String, Integer> practiceCount = getStringIntegerMap(teacherDto, gpTeachers);
|
|
|
|
|
|
|
|
|
|
/*if(!genderCount.containsKey("F")) {
|
|
|
|
|
genderCount.put("F",0L);
|
|
|
|
|
}else if (!genderCount.containsKey("S")) {
|
|
|
|
|
genderCount.put("S",0L);
|
|
|
|
|
}else if (!genderCount.containsKey("M")){
|
|
|
|
|
genderCount.put("M",0L);
|
|
|
|
|
}*/
|
|
|
|
|
|
|
|
|
|
teachers.put("gender", genderCount);
|
|
|
|
|
teachers.put("degree", degreeCount);
|
|
|
|
|
|
|
|
|
|
// Map<String, PtTeacherInfo> idToPtTeacherInfo = ptTeacherInfos.stream()
|
|
|
|
|
// .collect(Collectors.toMap(PtTeacherInfo::getId, Function.identity()));
|
|
|
|
|
//
|
|
|
|
|
// teachersList.forEach(teacher -> {
|
|
|
|
|
// PtTeacherInfo info = idToPtTeacherInfo.get(teacher.getId());
|
|
|
|
|
// if (info != null) {
|
|
|
|
|
// teacher.setIdentity(info.getIdentity());
|
|
|
|
|
// }
|
|
|
|
|
// });
|
|
|
|
|
teachers.put("info", ptTeacherInfos);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -1773,6 +1773,113 @@ public class TeacherServiceImpl implements TeacherService {
|
|
|
|
|
return missingTeachers;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void dataSync(GpTeacherRequest gpTeacherRequest, HttpServletRequest request) {
|
|
|
|
|
String schoolCode = SecurityUtil.getLoginUser().getSchoolId();
|
|
|
|
|
try {
|
|
|
|
|
if (gpTeacherRequest.getOpt().equalsIgnoreCase("Add")) {
|
|
|
|
|
List<SchoolTeacher> schoolTeachers = new ArrayList<>();
|
|
|
|
|
for (GpTeacherVo teacher : gpTeacherRequest.getGpTeacherDtos()) {
|
|
|
|
|
//处理新加入的学校教师
|
|
|
|
|
String code = String.format(PK.TEACHER, teacher.getCode());
|
|
|
|
|
SchoolTeacher schoolTeacher = new SchoolTeacher();
|
|
|
|
|
schoolTeacher.setName(teacher.getName());
|
|
|
|
|
schoolTeacher.setPicture(teacher.getPicture());
|
|
|
|
|
schoolTeacher.setJob(teacher.getJob());
|
|
|
|
|
schoolTeacher.setSubjectIds(teacher.getSubjectIds());
|
|
|
|
|
schoolTeacher.setPeriodId(teacher.getPeriodId());
|
|
|
|
|
schoolTeacher.setRoles(teacher.getRoles());
|
|
|
|
|
schoolTeacher.setStatus("join");
|
|
|
|
|
schoolTeacher.setCreateTime(System.currentTimeMillis());
|
|
|
|
|
schoolTeacher.setId(teacher.getId());
|
|
|
|
|
schoolTeacher.setCode(code);
|
|
|
|
|
schoolTeacher.setSize(0);
|
|
|
|
|
schoolTeacher.setPermissions(new ArrayList<>());
|
|
|
|
|
schoolTeachers.add(schoolTeacher);
|
|
|
|
|
}
|
|
|
|
|
schoolTeacherRepository.saveAll(schoolTeachers);
|
|
|
|
|
//处理已存在教师得Base信息,先查询变更教师所有得Base信息
|
|
|
|
|
List<String> teacherIds = gpTeacherRequest.getGpTeacherDtos().stream()
|
|
|
|
|
.map(GpTeacherVo::getId)
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
//获取学校简易信息
|
|
|
|
|
List<School> schoolBases = schoolRepository.findBasePictureById(schoolCode);
|
|
|
|
|
List<Teacher> BaseTeachers = teacherRepository.findAllByCodeAndIdIn(schoolCode,teacherIds);
|
|
|
|
|
//检测teacherIds中的教师是否已存在BaseTeachers中
|
|
|
|
|
List<String> missIds = teacherIds.stream()
|
|
|
|
|
.filter(id -> !BaseTeachers.stream().map(Teacher::getId).collect(Collectors.toList()).contains(id))
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
if (!missIds.isEmpty()) {
|
|
|
|
|
//根据missIds筛选出gpTeacherRequest.getGpTeacherDtos()的对象数组
|
|
|
|
|
List<GpTeacherVo> missTeachers = gpTeacherRequest.getGpTeacherDtos().stream()
|
|
|
|
|
.filter(teacher -> missIds.contains(teacher.getId()))
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
List<Teacher> teachers = new ArrayList<>();
|
|
|
|
|
for (GpTeacherVo missTeacher : missTeachers) {
|
|
|
|
|
Teacher teacher = new Teacher();
|
|
|
|
|
teacher.setId(missTeacher.getId());
|
|
|
|
|
teacher.setName(missTeacher.getName());
|
|
|
|
|
teacher.setPicture(missTeacher.getPicture());
|
|
|
|
|
teacher.setDefaultSchool(schoolCode);
|
|
|
|
|
teacher.setCreateTime(System.currentTimeMillis());
|
|
|
|
|
teacher.setPk("Teacher");
|
|
|
|
|
teacher.setCode("Base");
|
|
|
|
|
teacher.setPicture(missTeacher.getPicture());
|
|
|
|
|
Teacher.School school = new Teacher.School();
|
|
|
|
|
school.setSchoolId(schoolBases.get(0).getId());
|
|
|
|
|
school.setName(schoolBases.get(0).getName());
|
|
|
|
|
school.setPicture(schoolBases.get(0).getPicture());
|
|
|
|
|
school.setAreaId(schoolBases.get(0).getAreaId());
|
|
|
|
|
school.setStatus("join");
|
|
|
|
|
school.setTime(System.currentTimeMillis());
|
|
|
|
|
teacher.setSchools(Collections.singletonList(school));
|
|
|
|
|
Teacher.Area area = new Teacher.Area();
|
|
|
|
|
area.setAreaId(schoolBases.get(0).getAreaId());
|
|
|
|
|
area.setName(schoolBases.get(0).getAreaId());
|
|
|
|
|
area.setStatus("join");
|
|
|
|
|
teacher.setArea(area);
|
|
|
|
|
teacher.setLoginInfos(new ArrayList<>());
|
|
|
|
|
teacher.setSize(0);
|
|
|
|
|
teachers.add(teacher);
|
|
|
|
|
}
|
|
|
|
|
teacherRepository.saveAll(teachers);
|
|
|
|
|
}else {
|
|
|
|
|
BaseTeachers.forEach(teacher -> {
|
|
|
|
|
Teacher.School school = new Teacher.School();
|
|
|
|
|
school.setSchoolId(schoolBases.get(0).getId());
|
|
|
|
|
school.setName(schoolBases.get(0).getName());
|
|
|
|
|
school.setPicture(schoolBases.get(0).getPicture());
|
|
|
|
|
school.setAreaId(schoolBases.get(0).getAreaId());
|
|
|
|
|
school.setStatus("join");
|
|
|
|
|
school.setTime(System.currentTimeMillis());
|
|
|
|
|
teacher.setSchools(Collections.singletonList(school));
|
|
|
|
|
});
|
|
|
|
|
teacherRepository.saveAll(BaseTeachers);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}else {
|
|
|
|
|
//筛选出删除的教师ID
|
|
|
|
|
List<String> teacherIds = gpTeacherRequest.getGpTeacherDtos().stream()
|
|
|
|
|
.map(GpTeacherVo::getId)
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
String code = String.format(PK.TEACHER, schoolCode);
|
|
|
|
|
List<SchoolTeacher> schoolTeachers = schoolTeacherRepository.findAllByCodeAndIdIn(code, teacherIds);
|
|
|
|
|
//删除该对象数组
|
|
|
|
|
schoolTeacherRepository.deleteAll(schoolTeachers);
|
|
|
|
|
List<Teacher> teachers = teacherRepository.findAllByCodeAndIdIn(schoolCode, teacherIds);
|
|
|
|
|
//移除teachers中含有schoolId为schoolCode的对象
|
|
|
|
|
teachers = teachers.stream().filter(teacher -> !teacher.getSchools().stream()
|
|
|
|
|
.map(Teacher.School::getSchoolId).collect(Collectors.toList())
|
|
|
|
|
.contains(schoolCode)).collect(Collectors.toList());
|
|
|
|
|
teacherRepository.saveAll(teachers);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}catch (Exception e) {
|
|
|
|
|
throw new ServiceException(ErrorCode.PARAMS_ERROR.getCode(), "同步数据异常");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 手机号正则表达式(中国大陆)
|
|
|
|
|
private static final String PHONE_REGEX = "^1\\d{10}$";
|
|
|
|
|
/**
|
|
|
|
|