diff --git a/src/main/java/com/yunhai/bschclassmanage/service/impl/teacher/SchTeacherBaseInfoService.java b/src/main/java/com/yunhai/bschclassmanage/service/impl/teacher/SchTeacherBaseInfoService.java index 7da5c06..54afa09 100644 --- a/src/main/java/com/yunhai/bschclassmanage/service/impl/teacher/SchTeacherBaseInfoService.java +++ b/src/main/java/com/yunhai/bschclassmanage/service/impl/teacher/SchTeacherBaseInfoService.java @@ -7,7 +7,7 @@ import com.yunhai.bschclassmanage.entity.SchTeacherGroup; import com.yunhai.bschclassmanage.model.dto.TeacherBaseInfoDTO; import com.yunhai.bschclassmanage.annotation.SyncOpLog; import com.yunhai.bschclassmanage.enums.SyncDataType; -import com.yunhai.platform.openapi.core.YschOpenCall; +import com.yunhai.bschclassmanage.service.ISendUserBaseService; import com.yunhai.platform.utils.model.BoaUser; import com.yunhai.platform.utils.exception.DException; import org.springframework.beans.factory.annotation.Autowired; @@ -17,12 +17,12 @@ import org.springframework.transaction.annotation.Transactional; import java.util.*; import java.util.stream.Collectors; -/** 开放接口只修改四项资料,通过平台签名客户端同步基础平台。 */ +/** 开放接口只修改四项资料,经既有教师同步通道(SendUserBaseService)推送用户中心。 */ @Service public class SchTeacherBaseInfoService { @Autowired private SchTeacherRepository teacherRepository; @Autowired private SchTeacherGroupRepository groupRepository; - @Autowired private YschOpenCall openCall; + @Autowired private ISendUserBaseService sendUserBaseService; @Autowired private SchTeacherCacheService cacheService; public TeacherBaseInfoDTO get(Integer schId, Integer teaId) { @@ -33,7 +33,7 @@ public class SchTeacherBaseInfoService { @Transactional(rollbackFor = Exception.class) @SyncOpLog(SyncDataType.SEND_EDIT_TEACHER) public TeacherBaseInfoDTO edit(TeacherBaseInfoDTO dto) { - requireMembership(dto.getSchId(), dto.getTeaId()); + List memberships = requireMembership(dto.getSchId(), dto.getTeaId()); List teachers = teachers(dto.getTeaId()); String name = dto.getName() == null ? "" : dto.getName().trim(); if (name.isEmpty()) throw new DException("姓名不能为空"); @@ -52,15 +52,11 @@ public class SchTeacherBaseInfoService { teacher.setUpdateUserId(dto.getTeaId()); } // 先同步;失败抛异常并回滚本地事务。teaId 可能对应多行,统一修改。 - Map profile = new LinkedHashMap<>(); - profile.put("realName", name); - profile.put("gender", dto.getGender()); - profile.put("phone", trim(dto.getPhone())); - profile.put("idcard", trim(dto.getIdcard())); - BoaUser synced = openCall.post("userbase", "/oapi/user/editBasicInfo/" + dto.getTeaId(), - null, profile, BoaUser.class); + // 复用管理端同款教师同步(用户中心 /oapi/user/edit/{id},身份追加语义、不改密码); + // groupId 仅用于解析学校范围,不会移动教师分组。 + BoaUser synced = sendUserBaseService.editTeacher(teachers.get(0), null, memberships.get(0).getGroupId()); if (synced == null || !dto.getTeaId().equals(synced.getId())) { - throw new DException("基础平台未返回有效教师信息,同步失败"); + throw new DException("用户中心未返回有效教师信息,同步失败"); } teacherRepository.saveAll(teachers); Set schools = groupRepository.findByTeaIdIn(Collections.singletonList(dto.getTeaId())).stream() diff --git a/src/test/java/com/yunhai/bschclassmanage/service/impl/teacher/SchTeacherBaseInfoServiceTest.java b/src/test/java/com/yunhai/bschclassmanage/service/impl/teacher/SchTeacherBaseInfoServiceTest.java index afb691a..f63cf5a 100644 --- a/src/test/java/com/yunhai/bschclassmanage/service/impl/teacher/SchTeacherBaseInfoServiceTest.java +++ b/src/test/java/com/yunhai/bschclassmanage/service/impl/teacher/SchTeacherBaseInfoServiceTest.java @@ -3,7 +3,7 @@ package com.yunhai.bschclassmanage.service.impl.teacher; import com.yunhai.bschclassmanage.Repository.*; import com.yunhai.bschclassmanage.entity.*; import com.yunhai.bschclassmanage.model.dto.TeacherBaseInfoDTO; -import com.yunhai.platform.openapi.core.YschOpenCall; +import com.yunhai.bschclassmanage.service.ISendUserBaseService; import com.yunhai.platform.utils.exception.DException; import com.yunhai.platform.utils.model.BoaUser; import org.junit.jupiter.api.*; @@ -20,7 +20,7 @@ class SchTeacherBaseInfoServiceTest { @InjectMocks private SchTeacherBaseInfoService service; @Mock private SchTeacherRepository teacherRepository; @Mock private SchTeacherGroupRepository groupRepository; - @Mock private YschOpenCall openCall; + @Mock private ISendUserBaseService sendUserBaseService; @Mock private SchTeacherCacheService cacheService; private SchTeacherGroup group(int school) { @@ -44,7 +44,7 @@ class SchTeacherBaseInfoServiceTest { @Test void updatesAllTeacherRowsAndInvalidatesAllSchoolsAfterSync() { List rows = givenTeacher(); - when(openCall.post(eq("userbase"), eq("/oapi/user/editBasicInfo/101"), isNull(), any(), eq(BoaUser.class))) + when(sendUserBaseService.editTeacher(any(SchTeacher.class), isNull(), eq(31))) .thenReturn(new BoaUser(101, "teacher", "新姓名")); when(groupRepository.findByTeaIdIn(Collections.singletonList(101))).thenReturn(Arrays.asList(group(3),group(4))); assertEquals("新姓名", service.edit(request()).getName()); @@ -52,8 +52,8 @@ class SchTeacherBaseInfoServiceTest { assertEquals("新姓名", t.getName()); assertEquals(1,t.getGender()); assertNull(t.getTel()); assertEquals("teacher",t.getAccount()); assertEquals(1,t.getStatus()); } - InOrder order = inOrder(openCall,teacherRepository,cacheService); - order.verify(openCall).post(eq("userbase"),eq("/oapi/user/editBasicInfo/101"),isNull(),any(),eq(BoaUser.class)); + InOrder order = inOrder(sendUserBaseService,teacherRepository,cacheService); + order.verify(sendUserBaseService).editTeacher(any(SchTeacher.class), isNull(), eq(31)); order.verify(teacherRepository).saveAll(rows); order.verify(cacheService).clearTeacherCaches(new HashSet<>(Arrays.asList(3,4))); } @@ -62,13 +62,16 @@ class SchTeacherBaseInfoServiceTest { SchTeacherGroup out = group(3); out.setTransferStatus(1); when(groupRepository.findByTeaIdAndSchId(101,3)).thenReturn(Collections.singletonList(out)); assertThrows(DException.class, () -> service.edit(request())); - verifyNoInteractions(openCall,teacherRepository,cacheService); + verifyNoInteractions(sendUserBaseService,teacherRepository,cacheService); } @Test void syncFailureDoesNotSaveOrClearCache() { - givenTeacher(); - when(openCall.post(anyString(),anyString(),isNull(),any(),eq(BoaUser.class))).thenThrow(new DException("平台失败")); + List rows = givenTeacher(); + when(sendUserBaseService.editTeacher(any(SchTeacher.class), isNull(), eq(31))) + .thenThrow(new DException("平台失败")); assertThrows(DException.class, () -> service.edit(request())); verify(teacherRepository,never()).saveAll(any()); verifyNoInteractions(cacheService); + // 同步前已就地改写的实体随事务回滚,不落库 + assertEquals("新姓名", rows.get(0).getName()); } }