|
|
@ -4,6 +4,7 @@ import cn.teammodel.common.ErrorCode;
|
|
|
|
import cn.teammodel.common.PK;
|
|
|
|
import cn.teammodel.common.PK;
|
|
|
|
import cn.teammodel.config.exception.ServiceException;
|
|
|
|
import cn.teammodel.config.exception.ServiceException;
|
|
|
|
import cn.teammodel.controller.admin.service.TeacherService;
|
|
|
|
import cn.teammodel.controller.admin.service.TeacherService;
|
|
|
|
|
|
|
|
import cn.teammodel.model.dto.admin.teacher.CoreUser;
|
|
|
|
import cn.teammodel.model.dto.admin.teacher.GpTeacherDto;
|
|
|
|
import cn.teammodel.model.dto.admin.teacher.GpTeacherDto;
|
|
|
|
import cn.teammodel.model.dto.admin.teacher.IdCodePair;
|
|
|
|
import cn.teammodel.model.dto.admin.teacher.IdCodePair;
|
|
|
|
import cn.teammodel.model.dto.admin.teacher.TeacherDto;
|
|
|
|
import cn.teammodel.model.dto.admin.teacher.TeacherDto;
|
|
|
@ -39,11 +40,8 @@ import org.springframework.cache.annotation.Cacheable;
|
|
|
|
import org.springframework.core.env.Environment;
|
|
|
|
import org.springframework.core.env.Environment;
|
|
|
|
import org.springframework.data.domain.Slice;
|
|
|
|
import org.springframework.data.domain.Slice;
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
|
|
|
|
import javax.annotation.PostConstruct;
|
|
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
|
import javax.annotation.Resource;
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
|
import java.io.File;
|
|
|
|
|
|
|
|
import java.time.*;
|
|
|
|
import java.time.*;
|
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
|
import java.util.*;
|
|
|
|
import java.util.*;
|
|
|
@ -65,6 +63,8 @@ public class TeacherServiceImpl implements TeacherService {
|
|
|
|
private LessonRecordRepository lessonRecordRepository;
|
|
|
|
private LessonRecordRepository lessonRecordRepository;
|
|
|
|
@Resource
|
|
|
|
@Resource
|
|
|
|
private PtTeacherRepository ptTeacherRepository;
|
|
|
|
private PtTeacherRepository ptTeacherRepository;
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
|
|
|
private TeacherRepository teacherRepository;
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* 学校试卷
|
|
|
|
* 学校试卷
|
|
|
|
*/
|
|
|
|
*/
|
|
|
@ -1552,7 +1552,7 @@ public class TeacherServiceImpl implements TeacherService {
|
|
|
|
List<PtTeacherInfo> existingList = ptTeacherRepository.findByIdCodePairs(idAndCode);
|
|
|
|
List<PtTeacherInfo> existingList = ptTeacherRepository.findByIdCodePairs(idAndCode);
|
|
|
|
|
|
|
|
|
|
|
|
Map<String, PtTeacherInfo> codeToTeacherMap = existingList.stream()
|
|
|
|
Map<String, PtTeacherInfo> codeToTeacherMap = existingList.stream()
|
|
|
|
.collect(Collectors.toMap(PtTeacherInfo::getCode, Function.identity()));
|
|
|
|
.collect(Collectors.toMap(PtTeacherInfo::getId, Function.identity()));
|
|
|
|
|
|
|
|
|
|
|
|
List<PtTeacherInfo> ptTeacherInfos = new ArrayList<>();
|
|
|
|
List<PtTeacherInfo> ptTeacherInfos = new ArrayList<>();
|
|
|
|
for (GpTeacherVo teacher : gpTeachers) {
|
|
|
|
for (GpTeacherVo teacher : gpTeachers) {
|
|
|
@ -1562,7 +1562,7 @@ public class TeacherServiceImpl implements TeacherService {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
String businessCode = "PtTeacher-" + schoolCode;
|
|
|
|
String businessCode = "PtTeacher-" + schoolCode;
|
|
|
|
PtTeacherInfo ptTeacherInfo = codeToTeacherMap.get(businessCode);
|
|
|
|
PtTeacherInfo ptTeacherInfo = codeToTeacherMap.get(teacher.getId());
|
|
|
|
|
|
|
|
|
|
|
|
if (ptTeacherInfo != null) {
|
|
|
|
if (ptTeacherInfo != null) {
|
|
|
|
// 更新现有记录:保留ID,更新其他字段
|
|
|
|
// 更新现有记录:保留ID,更新其他字段
|
|
|
@ -1627,6 +1627,106 @@ public class TeacherServiceImpl implements TeacherService {
|
|
|
|
return missingPhones;
|
|
|
|
return missingPhones;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public List<Map<String, Object>> findTeachers(CoreUser dto,HttpServletRequest request) {
|
|
|
|
|
|
|
|
List<Map<String, Object>> teachers;
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
String url = env.getProperty("ies.server-url-get-core-user-data");
|
|
|
|
|
|
|
|
teachers = GroupUtil.getUsers(dto.ids, new GroupUtil(env), request, url);
|
|
|
|
|
|
|
|
}catch (Exception e){
|
|
|
|
|
|
|
|
throw new ServiceException(ErrorCode.PARAMS_ERROR.getCode(), "查询数据异常");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return teachers;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public void saveOrUpdate(List<GpTeacherVo> gpTeachers, HttpServletRequest request) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
// 获取当前登录用户信息
|
|
|
|
|
|
|
|
User loginUser = SecurityUtil.getLoginUser();
|
|
|
|
|
|
|
|
String operator = loginUser != null ? loginUser.getName() : "system";
|
|
|
|
|
|
|
|
String schoolCode = SecurityUtil.getLoginUser().getSchoolId();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
List<Pair<String, String>> idCodePairs = gpTeachers.stream()
|
|
|
|
|
|
|
|
.filter(t -> t.getId() != null)
|
|
|
|
|
|
|
|
.map(t -> Pair.of(t.getId(), "PtTeacher-" + schoolCode))
|
|
|
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
|
|
|
List<IdCodePair> idAndCode = idCodePairs.stream()
|
|
|
|
|
|
|
|
.map(pair -> new IdCodePair(pair.getLeft(), pair.getRight()))
|
|
|
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
|
|
|
List<PtTeacherInfo> existingList = ptTeacherRepository.findByIdCodePairs(idAndCode);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Map<String, PtTeacherInfo> codeToTeacherMap = existingList.stream()
|
|
|
|
|
|
|
|
.collect(Collectors.toMap(PtTeacherInfo::getId, Function.identity()));
|
|
|
|
|
|
|
|
// 根据传入的gpTeachers对象数据批量保存或更新PtTeacherInfo对象
|
|
|
|
|
|
|
|
List<PtTeacherInfo> ptTeacherInfos = new ArrayList<>();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for (GpTeacherVo teacher : gpTeachers) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String businessCode = "PtTeacher-" + schoolCode;
|
|
|
|
|
|
|
|
PtTeacherInfo ptTeacherInfo = codeToTeacherMap.get(teacher.getId());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (ptTeacherInfo != null) {
|
|
|
|
|
|
|
|
// 更新现有记录:保留ID,更新其他字段
|
|
|
|
|
|
|
|
ptTeacherInfo.setName(teacher.getName());
|
|
|
|
|
|
|
|
ptTeacherInfo.setPhone(teacher.getPhone());
|
|
|
|
|
|
|
|
ptTeacherInfo.setEmail(teacher.getEmail());
|
|
|
|
|
|
|
|
ptTeacherInfo.setPicture(teacher.getPicture());
|
|
|
|
|
|
|
|
ptTeacherInfo.setJob(teacher.getJob());
|
|
|
|
|
|
|
|
ptTeacherInfo.setSubjectIds(teacher.getSubjectIds());
|
|
|
|
|
|
|
|
ptTeacherInfo.setRoles(teacher.getRoles());
|
|
|
|
|
|
|
|
ptTeacherInfo.setDegree(teacher.getDegree());
|
|
|
|
|
|
|
|
ptTeacherInfo.setGender(teacher.getGender());
|
|
|
|
|
|
|
|
ptTeacherInfo.setGrade(teacher.getGrade());
|
|
|
|
|
|
|
|
ptTeacherInfo.setPeriodId(teacher.getPeriodId());
|
|
|
|
|
|
|
|
ptTeacherInfo.setAge(teacher.getAge());
|
|
|
|
|
|
|
|
ptTeacherInfo.setTeachingAge(teacher.getTeachingAge());
|
|
|
|
|
|
|
|
ptTeacherInfo.setStatus(teacher.getStatus());
|
|
|
|
|
|
|
|
ptTeacherInfo.setJoinTime(teacher.getJoinTime());
|
|
|
|
|
|
|
|
ptTeacherInfo.setSchool(teacher.getCode());
|
|
|
|
|
|
|
|
ptTeacherInfo.setVersion(ptTeacherInfo.getVersion() + 1); // 版本号递增
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
// 新增记录:生成新ID
|
|
|
|
|
|
|
|
ptTeacherInfo = new PtTeacherInfo();
|
|
|
|
|
|
|
|
ptTeacherInfo.setId(teacher.getId());
|
|
|
|
|
|
|
|
ptTeacherInfo.setCode(businessCode);
|
|
|
|
|
|
|
|
ptTeacherInfo.setPk("PtTeacher");
|
|
|
|
|
|
|
|
ptTeacherInfo.setTtl(-1);
|
|
|
|
|
|
|
|
ptTeacherInfo.setName(teacher.getName());
|
|
|
|
|
|
|
|
ptTeacherInfo.setPhone(teacher.getPhone());
|
|
|
|
|
|
|
|
ptTeacherInfo.setEmail(teacher.getEmail());
|
|
|
|
|
|
|
|
ptTeacherInfo.setPicture(teacher.getPicture());
|
|
|
|
|
|
|
|
ptTeacherInfo.setJob(teacher.getJob());
|
|
|
|
|
|
|
|
ptTeacherInfo.setSubjectIds(teacher.getSubjectIds());
|
|
|
|
|
|
|
|
ptTeacherInfo.setRoles(teacher.getRoles());
|
|
|
|
|
|
|
|
ptTeacherInfo.setDegree(teacher.getDegree());
|
|
|
|
|
|
|
|
ptTeacherInfo.setGender(teacher.getGender());
|
|
|
|
|
|
|
|
ptTeacherInfo.setGrade(teacher.getGrade());
|
|
|
|
|
|
|
|
ptTeacherInfo.setPeriodId(teacher.getPeriodId());
|
|
|
|
|
|
|
|
ptTeacherInfo.setAge(teacher.getAge());
|
|
|
|
|
|
|
|
ptTeacherInfo.setTeachingAge(teacher.getTeachingAge());
|
|
|
|
|
|
|
|
ptTeacherInfo.setStatus(teacher.getStatus());
|
|
|
|
|
|
|
|
ptTeacherInfo.setJoinTime(teacher.getJoinTime());
|
|
|
|
|
|
|
|
ptTeacherInfo.setState(1);
|
|
|
|
|
|
|
|
ptTeacherInfo.setIdentity(Collections.singletonList("teacher"));
|
|
|
|
|
|
|
|
ptTeacherInfo.setVersion(1);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
ptTeacherInfos.add(ptTeacherInfo);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 数据持久化日志
|
|
|
|
|
|
|
|
logger.info("用户[{}]即将{}教师数据(添加:{}条,更新:{}条)",
|
|
|
|
|
|
|
|
operator,
|
|
|
|
|
|
|
|
existingList.isEmpty() ? "新增" : "更新",
|
|
|
|
|
|
|
|
gpTeachers.size() - existingList.size(),
|
|
|
|
|
|
|
|
existingList.size());
|
|
|
|
|
|
|
|
ptTeacherRepository.saveAll(ptTeacherInfos);
|
|
|
|
|
|
|
|
}catch (Exception e) {
|
|
|
|
|
|
|
|
throw new ServiceException(ErrorCode.PARAMS_ERROR.getCode(), "保存数据异常");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 手机号正则表达式(中国大陆)
|
|
|
|
// 手机号正则表达式(中国大陆)
|
|
|
|
private static final String PHONE_REGEX = "^1\\d{10}$";
|
|
|
|
private static final String PHONE_REGEX = "^1\\d{10}$";
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|