From 8e89d9473a7a639924348650784f4f22a530e8f1 Mon Sep 17 00:00:00 2001 From: wanghu Date: Thu, 20 Aug 2026 17:33:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AD=A6=E6=A0=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/api/SchoolController.java | 30 ++++++++ .../model/constant/LogModule.java | 2 +- .../service/ISchInfoService.java | 4 ++ .../service/impl/SchInfoService.java | 47 ++++++++++++ .../impl/classes/SchClassHigherService.java | 71 ++++++++++++++----- .../service/impl/com/ComSchTreeService.java | 2 +- 6 files changed, 135 insertions(+), 21 deletions(-) create mode 100644 src/main/java/com/yunhai/bschclassmanage/controller/api/SchoolController.java diff --git a/src/main/java/com/yunhai/bschclassmanage/controller/api/SchoolController.java b/src/main/java/com/yunhai/bschclassmanage/controller/api/SchoolController.java new file mode 100644 index 0000000..59798b1 --- /dev/null +++ b/src/main/java/com/yunhai/bschclassmanage/controller/api/SchoolController.java @@ -0,0 +1,30 @@ +package com.yunhai.bschclassmanage.controller.api; + + +import com.yunhai.bschclassmanage.annotation.OperationLog; +import com.yunhai.bschclassmanage.config.Config; +import com.yunhai.bschclassmanage.model.constant.LogModule; +import com.yunhai.bschclassmanage.model.dto.SchInfoDto; +import com.yunhai.bschclassmanage.service.ISchInfoService; +import com.yunhai.bschclassmanage.utils.UserContext; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + + +@RestController +@RequestMapping(Config.API_PATH+"/school/") +@CrossOrigin(originPatterns = {"*"}, allowCredentials = "true") +public class SchoolController { + + @Autowired + private ISchInfoService schInfoService; + + @PostMapping("addSchool") + @OperationLog(module = LogModule.SCHOOL_SYSTEM, description = "添加学校(初始化)成功") + public void addSchool(@Valid @RequestBody SchInfoDto dto) { + schInfoService.addSchool(UserContext.getCurrentUser(), dto); + } + +} diff --git a/src/main/java/com/yunhai/bschclassmanage/model/constant/LogModule.java b/src/main/java/com/yunhai/bschclassmanage/model/constant/LogModule.java index 991f790..0bb0973 100644 --- a/src/main/java/com/yunhai/bschclassmanage/model/constant/LogModule.java +++ b/src/main/java/com/yunhai/bschclassmanage/model/constant/LogModule.java @@ -18,7 +18,7 @@ public final class LogModule { // ==================== 学制 ==================== public static final String BASE_SYSTEM = "系统管理"; -// public static final String SCHOOL_SYSTEM = "学校管理"; + public static final String SCHOOL_SYSTEM = "学校管理"; // ==================== 字典管理 ==================== public static final String SUBJECT = "学科管理"; diff --git a/src/main/java/com/yunhai/bschclassmanage/service/ISchInfoService.java b/src/main/java/com/yunhai/bschclassmanage/service/ISchInfoService.java index 6e9c18c..161472c 100644 --- a/src/main/java/com/yunhai/bschclassmanage/service/ISchInfoService.java +++ b/src/main/java/com/yunhai/bschclassmanage/service/ISchInfoService.java @@ -2,7 +2,9 @@ package com.yunhai.bschclassmanage.service; import com.yunhai.bschclassmanage.entity.BaseDicGrade; import com.yunhai.bschclassmanage.entity.SchInfo; +import com.yunhai.bschclassmanage.model.dto.SchInfoDto; import com.yunhai.bschclassmanage.model.vo.oa.SchInfoVO; +import com.yunhai.bschclassmanage.utils.UserContext; import org.springframework.stereotype.Service; import java.util.List; @@ -17,4 +19,6 @@ public interface ISchInfoService { SchInfoVO GetSchFirst(String SchID); SchInfoVO GetSchFirst(Integer schId); + + void addSchool(UserContext.UserInfo user, SchInfoDto dto); } diff --git a/src/main/java/com/yunhai/bschclassmanage/service/impl/SchInfoService.java b/src/main/java/com/yunhai/bschclassmanage/service/impl/SchInfoService.java index ca4a08e..da7d836 100644 --- a/src/main/java/com/yunhai/bschclassmanage/service/impl/SchInfoService.java +++ b/src/main/java/com/yunhai/bschclassmanage/service/impl/SchInfoService.java @@ -2,11 +2,18 @@ package com.yunhai.bschclassmanage.service.impl; import com.yunhai.bschclassmanage.Repository.SchInfoRepository; import com.yunhai.bschclassmanage.entity.SchInfo; +import com.yunhai.bschclassmanage.enums.NodeType; +import com.yunhai.bschclassmanage.model.dto.SchInfoDto; import com.yunhai.bschclassmanage.model.vo.SelectIntVO; import com.yunhai.bschclassmanage.model.vo.oa.SchInfoVO; import com.yunhai.bschclassmanage.service.IComSchTreeService; import com.yunhai.bschclassmanage.service.ISchInfoService; +import com.yunhai.bschclassmanage.service.ISendUserBaseService; import com.yunhai.bschclassmanage.utils.RedisUtil; +import com.yunhai.bschclassmanage.utils.UserContext; +import com.yunhai.platform.openapi.client.YschBaseOpenApi; +import com.yunhai.platform.utils.exception.DException; +import com.yunhai.platform.utils.model.BoaGroup; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -24,6 +31,10 @@ public class SchInfoService implements ISchInfoService { @Autowired private IComSchTreeService comSchTreeService; + @Autowired + private ISendUserBaseService sendUserBaseService; + + @Autowired private RedisUtil redisUtil; @@ -103,4 +114,40 @@ public class SchInfoService implements ISchInfoService { .orElse(null); // 如果不存在返回 null } + public void addSchool(UserContext.UserInfo user, SchInfoDto dto) { + // 操作人所在学校(区)上下文 + Integer schId = user.getSchId(); + + // 获取全区学校列表,根据 name 判断是否存在同名学校组,存在则抛出异常提示学校名称已存在 + List schoolList = comSchTreeService.getSchoolList(); + boolean nameExists = schoolList.stream() + .anyMatch(s -> s.getName() != null && s.getName().equals(dto.getName())); + if (nameExists) { + throw new DException("学校名称已存在"); + } + + // 否则添加学校组(返回新建的学校组,其 id 即新学校的 schId) + BoaGroup newSchoolGroup = sendUserBaseService.addGroup( + dto.getName(), dto.getGroupId(), null, NodeType.SCHOOL, schId); + schId = newSchoolGroup.getId(); + + // 添加成功后,判断数据库是否已存在该学校的 sch_info 记录 + // 存在则更新,否则保存 + SchInfoVO existSch = GetSchFirst(schId); + if (existSch == null) { + SchInfo schInfo = new SchInfo(); + schInfo.setSchId(schId); + schInfo.setName(dto.getName()); + schInfoRepository.save(schInfo); + } else { + schInfoRepository.findBySchId(schId).ifPresent(schInfo -> { + schInfo.setName(dto.getName()); + schInfoRepository.save(schInfo); + }); + } + + // 调用 ComSchTreeService 清除全区缓存和学校列表缓存 + comSchTreeService.clearCache(); + } + } diff --git a/src/main/java/com/yunhai/bschclassmanage/service/impl/classes/SchClassHigherService.java b/src/main/java/com/yunhai/bschclassmanage/service/impl/classes/SchClassHigherService.java index 18056eb..b2a01cc 100644 --- a/src/main/java/com/yunhai/bschclassmanage/service/impl/classes/SchClassHigherService.java +++ b/src/main/java/com/yunhai/bschclassmanage/service/impl/classes/SchClassHigherService.java @@ -11,6 +11,7 @@ import com.yunhai.bschclassmanage.utils.LogContextHolder; import com.yunhai.bschclassmanage.utils.OtherUtil; import com.yunhai.bschclassmanage.utils.UserContext; import com.yunhai.platform.utils.exception.DException; +import com.yunhai.platform.utils.model.BoaGroup; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; @@ -45,6 +46,9 @@ public class SchClassHigherService { @Autowired private SchClassCacheService cacheService; + @Autowired + private ISendUserBaseService sendUserBaseService; + @Autowired private SchClassLogService logService; @@ -64,6 +68,12 @@ public class SchClassHigherService { throw new DException("班级名称不能为空"); } + BoaGroup stuGroup= comSchTreeService.getStuTree(schId,false); + if(stuGroup==null){ + throw new DException("学生组不存在!"); + } + Integer parentId=stuGroup.getId(); + boolean isNew = (entity.getId() == null || entity.getId() == 0); if (isNew) { boolean exists = schClassRepository.existsBySchIdAndGroupIdAndName(schId, entity.getGroupId(), entity.getName()); @@ -81,32 +91,55 @@ public class SchClassHigherService { entity.setGradeId(entity.getEnrollYear()); SchClass oldSchClass = null; - if (isNew) { + + { + //sync + Integer maxSort = schClassRepository.findMaxCodeNumber(entity.getEnrollYear(), schId); + int startSort = (maxSort == null) ? 1 : maxSort + 1; + // 同步组ID List gradeGroupList = comSchTreeService.getSchGroupTypeList(schId, NodeType.GRADE.getId()).get(schsystemId); - if (gradeGroupList == null || gradeGroupList.isEmpty()) { - throw new DException("该学制下没有年级组,请先同步年级组数据!"); - } - Map gradeNameToIdMap = gradeGroupList.stream() - .collect(Collectors.toMap(SelectIntVO::getName, SelectIntVO::getId, (a, b) -> a)); - List classGroupList = comSchTreeService.getSchGroupTypeList(schId, NodeType.CLASS.getId()).get(schsystemId); - Map classNameToIdMap = new HashMap<>(); - if (classGroupList != null && !classGroupList.isEmpty()) { - classNameToIdMap = classGroupList.stream() + if (gradeGroupList == null || gradeGroupList.size()==0) { + BoaGroup academicGroup= sendUserBaseService.addGroup(entity.getEnrollYear().toString(),parentId,entity.getEnrollYear(),NodeType.GRADE,schId); + parentId=academicGroup.getId(); + }else { + Map gradeNameToIdMap = gradeGroupList.stream() .collect(Collectors.toMap(SelectIntVO::getName, SelectIntVO::getId, (a, b) -> a)); + parentId= gradeNameToIdMap.get(entity.getEnrollYear().toString()); + if(parentId==null) + { + BoaGroup academicGroup= sendUserBaseService.addGroup(entity.getEnrollYear().toString(),parentId,entity.getEnrollYear(),NodeType.GRADE,schId); + parentId=academicGroup.getId(); + } + } + entity.setGroupId(parentId); + + List classGroupList = comSchTreeService.getSchGroupTypeList(schId, NodeType.CLASS.getId()).get(schsystemId); + if (classGroupList != null && classGroupList.size()==0){ + BoaGroup classGroup= sendUserBaseService.addGroup(entity.getName(),parentId,startSort,NodeType.CLASS,schId); + parentId=classGroup.getId(); + }else { + Map classNameToIdMap = new HashMap<>(); + if (classGroupList != null && !classGroupList.isEmpty()) { + classNameToIdMap = classGroupList.stream() + .collect(Collectors.toMap(SelectIntVO::getName, SelectIntVO::getId, (a, b) -> a)); + } + parentId = classNameToIdMap.get(entity.getName()); + if(parentId==null) + { + BoaGroup classGroup= sendUserBaseService.addGroup(entity.getName(),parentId,startSort,NodeType.CLASS,schId); + parentId=classGroup.getId(); + } } - Integer groupId = gradeNameToIdMap.get(entity.getEnrollYear().toString()); - if (groupId == null || groupId < 1) { - throw new DException(entity.getEnrollYear() + "该年级组不存在,请检查年级组名称!"); - } - entity.setGroupId(groupId); - - Integer classId = classNameToIdMap.get(entity.getName()); - if (classId == null || classId < 1) { + if (parentId == null || parentId < 1) { throw new DException("同步班级组失败,请检查班级组数据!"); } - entity.setClassId(classId); + entity.setClassId(parentId); + } + + + if (isNew) { entity.setGraduate(false); schClassRepository.save(entity); } else { diff --git a/src/main/java/com/yunhai/bschclassmanage/service/impl/com/ComSchTreeService.java b/src/main/java/com/yunhai/bschclassmanage/service/impl/com/ComSchTreeService.java index 25b9534..2822c83 100644 --- a/src/main/java/com/yunhai/bschclassmanage/service/impl/com/ComSchTreeService.java +++ b/src/main/java/com/yunhai/bschclassmanage/service/impl/com/ComSchTreeService.java @@ -826,7 +826,6 @@ public class ComSchTreeService implements IComSchTreeService { throw new DException("请创建高校系部和专业!"); } - SelectIntVO systemVO=schBinSchsystemService.selectSchBinSchsystem(schId).stream().findFirst() .orElseThrow(() -> new DException("学制未选择!")); @@ -852,6 +851,7 @@ public class ComSchTreeService implements IComSchTreeService { node.setType(NodeType.GRADE); // 年级类型为2 node.setGradeId(gradeYear); node.setSchsystemId(systemVO.getId()); + node.setEnrollYear(gradeYear); if (includeClass) { // 查询该年级下的班级列表,并转换为子节点 List classList = schClassRepository.findBySchIdAndEnrollYear(schId, gradeYear);