From a7be435dc608680b99f8c64f98301ac0d1fd11a6 Mon Sep 17 00:00:00 2001 From: "hhb@hotmail.com" Date: Thu, 15 May 2025 15:26:21 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E6=9B=B4=E6=96=B0=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E8=BA=AB=E4=BB=BD=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/TeacherController.java | 14 +++ .../admin/service/TeacherService.java | 4 + .../service/impl/TeacherServiceImpl.java | 110 +++++++++++++++++- .../model/dto/admin/teacher/CoreUser.java | 10 ++ .../repository/TeacherRepository.java | 4 + 5 files changed, 137 insertions(+), 5 deletions(-) create mode 100644 src/main/java/cn/teammodel/model/dto/admin/teacher/CoreUser.java diff --git a/src/main/java/cn/teammodel/controller/admin/controller/TeacherController.java b/src/main/java/cn/teammodel/controller/admin/controller/TeacherController.java index 5e1d89c..a7b82f7 100644 --- a/src/main/java/cn/teammodel/controller/admin/controller/TeacherController.java +++ b/src/main/java/cn/teammodel/controller/admin/controller/TeacherController.java @@ -2,8 +2,10 @@ package cn.teammodel.controller.admin.controller; import cn.teammodel.common.R; 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.TeacherDto; +import cn.teammodel.model.entity.school.Teacher; import cn.teammodel.model.vo.admin.GpTeacherVo; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -105,4 +107,16 @@ public class TeacherController { List res = teacherService.batchImportPtTeachers(gpTeacherDtos,request); return R.success(res); } + @PostMapping("findTeachers") + @ApiOperation("获取教师Base信息") + public R>> findTeachers(@Valid @RequestBody CoreUser dto, HttpServletRequest request) { + List> res = teacherService.findTeachers(dto,request); + return R.success(res); + } + @PostMapping("saveOrUpdate") + @ApiOperation("保存或更新教师信息") + public R saveOrUpdate(@Valid @RequestBody List gpTeacherDtos, HttpServletRequest request) { + teacherService.saveOrUpdate(gpTeacherDtos,request); + return R.success("保存成功"); + } } diff --git a/src/main/java/cn/teammodel/controller/admin/service/TeacherService.java b/src/main/java/cn/teammodel/controller/admin/service/TeacherService.java index cc90e4a..90bdab9 100644 --- a/src/main/java/cn/teammodel/controller/admin/service/TeacherService.java +++ b/src/main/java/cn/teammodel/controller/admin/service/TeacherService.java @@ -1,7 +1,9 @@ package cn.teammodel.controller.admin.service; +import cn.teammodel.model.dto.admin.teacher.CoreUser; import cn.teammodel.model.dto.admin.teacher.GpTeacherDto; import cn.teammodel.model.dto.admin.teacher.TeacherDto; +import cn.teammodel.model.entity.school.Teacher; import cn.teammodel.model.entity.teacher.PtTeacherInfo; import cn.teammodel.model.vo.admin.GpTeacherVo; @@ -24,4 +26,6 @@ public interface TeacherService { Map findIdentityByTmdId(TeacherDto teacherDto); void delete(TeacherDto teacherDto); List batchImportPtTeachers(List gpTeachers, HttpServletRequest request); + List> findTeachers(CoreUser dto, HttpServletRequest request); + void saveOrUpdate(List gpTeachers, HttpServletRequest request); } diff --git a/src/main/java/cn/teammodel/controller/admin/service/impl/TeacherServiceImpl.java b/src/main/java/cn/teammodel/controller/admin/service/impl/TeacherServiceImpl.java index 37e5c5b..9969405 100644 --- a/src/main/java/cn/teammodel/controller/admin/service/impl/TeacherServiceImpl.java +++ b/src/main/java/cn/teammodel/controller/admin/service/impl/TeacherServiceImpl.java @@ -4,6 +4,7 @@ import cn.teammodel.common.ErrorCode; import cn.teammodel.common.PK; import cn.teammodel.config.exception.ServiceException; 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.IdCodePair; 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.data.domain.Slice; import org.springframework.stereotype.Service; - -import javax.annotation.PostConstruct; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import java.io.File; import java.time.*; import java.time.format.DateTimeFormatter; import java.util.*; @@ -65,6 +63,8 @@ public class TeacherServiceImpl implements TeacherService { private LessonRecordRepository lessonRecordRepository; @Resource private PtTeacherRepository ptTeacherRepository; + @Resource + private TeacherRepository teacherRepository; /** * 学校试卷 */ @@ -1552,7 +1552,7 @@ public class TeacherServiceImpl implements TeacherService { List existingList = ptTeacherRepository.findByIdCodePairs(idAndCode); Map codeToTeacherMap = existingList.stream() - .collect(Collectors.toMap(PtTeacherInfo::getCode, Function.identity())); + .collect(Collectors.toMap(PtTeacherInfo::getId, Function.identity())); List ptTeacherInfos = new ArrayList<>(); for (GpTeacherVo teacher : gpTeachers) { @@ -1562,7 +1562,7 @@ public class TeacherServiceImpl implements TeacherService { } String businessCode = "PtTeacher-" + schoolCode; - PtTeacherInfo ptTeacherInfo = codeToTeacherMap.get(businessCode); + PtTeacherInfo ptTeacherInfo = codeToTeacherMap.get(teacher.getId()); if (ptTeacherInfo != null) { // 更新现有记录:保留ID,更新其他字段 @@ -1627,6 +1627,106 @@ public class TeacherServiceImpl implements TeacherService { return missingPhones; } + @Override + public List> findTeachers(CoreUser dto,HttpServletRequest request) { + List> 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 gpTeachers, HttpServletRequest request) { + + try { + // 获取当前登录用户信息 + User loginUser = SecurityUtil.getLoginUser(); + String operator = loginUser != null ? loginUser.getName() : "system"; + String schoolCode = SecurityUtil.getLoginUser().getSchoolId(); + + List> idCodePairs = gpTeachers.stream() + .filter(t -> t.getId() != null) + .map(t -> Pair.of(t.getId(), "PtTeacher-" + schoolCode)) + .collect(Collectors.toList()); + List idAndCode = idCodePairs.stream() + .map(pair -> new IdCodePair(pair.getLeft(), pair.getRight())) + .collect(Collectors.toList()); + List existingList = ptTeacherRepository.findByIdCodePairs(idAndCode); + + Map codeToTeacherMap = existingList.stream() + .collect(Collectors.toMap(PtTeacherInfo::getId, Function.identity())); + // 根据传入的gpTeachers对象数据批量保存或更新PtTeacherInfo对象 + List 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}$"; /** diff --git a/src/main/java/cn/teammodel/model/dto/admin/teacher/CoreUser.java b/src/main/java/cn/teammodel/model/dto/admin/teacher/CoreUser.java new file mode 100644 index 0000000..d6aea55 --- /dev/null +++ b/src/main/java/cn/teammodel/model/dto/admin/teacher/CoreUser.java @@ -0,0 +1,10 @@ +package cn.teammodel.model.dto.admin.teacher; + +import lombok.Data; + +import java.util.List; + +@Data +public class CoreUser { + public List ids; +} diff --git a/src/main/java/cn/teammodel/repository/TeacherRepository.java b/src/main/java/cn/teammodel/repository/TeacherRepository.java index 24d6bb6..86d6ca5 100644 --- a/src/main/java/cn/teammodel/repository/TeacherRepository.java +++ b/src/main/java/cn/teammodel/repository/TeacherRepository.java @@ -16,4 +16,8 @@ import java.util.List; public interface TeacherRepository extends CosmosRepository { @Query("select c.id, c.name from Teacher as c where c.code = @code and c.id in (@ids)") List findAllByCodeAndIdIn(String code, Collection ids); + //根据手机号码、名称、id 模糊查询 + @Query("select * from Teacher as c where c.code = @code and " + + "(IS_NULL(@name) or contains(c.name,@name) ) ") + List findTeachers(String code, String name); }