学年
This commit is contained in:
@@ -63,12 +63,12 @@ public class BaseYearTermService implements IBaseYearTermService {
|
||||
Date now = new Date();
|
||||
List<BaseYearTerm> yearTermList = getAllYearTerm();
|
||||
if (yearTermList == null || yearTermList.isEmpty()) {
|
||||
return null;
|
||||
throw new DException("获取学年失败,当前时间不在当学年时间范围");
|
||||
}
|
||||
return yearTermList.stream()
|
||||
.filter(s -> s.getYearStartDate().compareTo(now) <= 0 && s.getYearEndDate().compareTo(now) >= 0)
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
.orElseThrow(() -> new DException("获取学年失败,当前时间不在当学年时间范围"));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -7,13 +7,12 @@ import com.yunhai.bschclassmanage.enums.AcademicStage;
|
||||
import com.yunhai.bschclassmanage.enums.NodeType;
|
||||
import com.yunhai.bschclassmanage.enums.SchType;
|
||||
import com.yunhai.bschclassmanage.model.entityField.EntityFieldNames;
|
||||
import com.yunhai.bschclassmanage.model.tool.YearTerm;
|
||||
import com.yunhai.bschclassmanage.model.vo.AcademicStageSchsystemVO;
|
||||
import com.yunhai.bschclassmanage.model.vo.SchSystemVO;
|
||||
import com.yunhai.bschclassmanage.model.vo.SelectIntVO;
|
||||
import com.yunhai.bschclassmanage.model.vo.TreeSelectVO;
|
||||
import com.yunhai.bschclassmanage.service.IBaseSchsystemService;
|
||||
import com.yunhai.bschclassmanage.service.ISchBinSchsystemService;
|
||||
import com.yunhai.bschclassmanage.service.ISendUserBaseService;
|
||||
import com.yunhai.bschclassmanage.service.*;
|
||||
import com.yunhai.bschclassmanage.utils.RedisConstants;
|
||||
import com.yunhai.bschclassmanage.utils.RedisUtil;
|
||||
import com.yunhai.platform.utils.exception.DException;
|
||||
@@ -40,6 +39,10 @@ public class SchBinSchsystemService implements ISchBinSchsystemService {
|
||||
@Autowired
|
||||
private ISendUserBaseService sendUserBaseService;
|
||||
|
||||
@Autowired
|
||||
private IBaseSchsystemGradeService baseSchsystemGradeService;
|
||||
|
||||
|
||||
@Autowired
|
||||
private RedisUtil redisUtil;
|
||||
|
||||
@@ -252,12 +255,13 @@ public class SchBinSchsystemService implements ISchBinSchsystemService {
|
||||
//获取学段
|
||||
List<Integer> schsystemIds= getSchBinSchsystemIds(schId);
|
||||
|
||||
//List<BaseSchsystem> baseSchsystems=baseSchsystemService.getSchsystemList().stream().filter(s->schsystemIds.contains(s.getId())).collect(Collectors.toList());
|
||||
|
||||
List<SchBinSchsystem> schBinSchsystemList= getSchBinSchsystemList(schId);
|
||||
|
||||
Integer stuParentId =stuGroup.getId();
|
||||
Map<Integer,Integer> schsystemIdByAcademicStage=new HashMap<>();
|
||||
if(newList.size()==1)
|
||||
{
|
||||
|
||||
schsystemIdByAcademicStage.put(schsystemIds.get(0),stuParentId);
|
||||
}else if(newList.size()>1)
|
||||
{
|
||||
Integer scort=1;
|
||||
@@ -265,12 +269,43 @@ public class SchBinSchsystemService implements ISchBinSchsystemService {
|
||||
String academicStageName= baseSchsystemService.getAcademicStageName(schsystem.getSchSystemId());
|
||||
BoaGroup sectionGroup= sendUserBaseService.addGroup(academicStageName,stuGroup.getId(),scort,NodeType.SECTION,schId);
|
||||
schsystem.setGroupId(sectionGroup.getId());
|
||||
schsystemIdByAcademicStage.put(schsystem.getSchSystemId(),sectionGroup.getId());
|
||||
scort++;
|
||||
}
|
||||
}else {
|
||||
throw new DException("请选择学制!");
|
||||
}
|
||||
|
||||
for (Integer schsystemId:schsystemIds)
|
||||
{
|
||||
stuParentId=schsystemIdByAcademicStage.get(schsystemId);
|
||||
Set<Integer> years= baseSchsystemGradeService.getNowYearGradeMap(schId,schsystemId).keySet();
|
||||
for (Integer year:years){
|
||||
sendUserBaseService.addGroup(year.toString(),stuParentId,schsystemId,NodeType.GRADE,schId);
|
||||
}
|
||||
}
|
||||
//
|
||||
// if(schsystemIds.size()>1)
|
||||
// {
|
||||
// for (Integer schsystemId:schsystemIds){
|
||||
// String academicStageName= baseSchsystemService.getAcademicStageName(schsystemId);
|
||||
// List<BoaGroup> schAcademicStageList= comSchTreeService.getAcademicStageGroupList(schId);
|
||||
// Optional<BoaGroup> academicStageFirst= schAcademicStageList.stream().filter(s->Objects.equals(s.getName(),academicStageName)).findFirst();
|
||||
// if(!academicStageFirst.isPresent())
|
||||
// {
|
||||
// BoaGroup academicGroup= sendUserBaseService.addGroup(academicStageName,stuGroup.getId(),schsystemId,NodeType.SECTION,schId);
|
||||
// stuParentId=academicGroup.getId();
|
||||
// }else {
|
||||
// stuParentId=academicStageFirst.get().getId();
|
||||
// }
|
||||
// schsystemIdByAcademicStage.put(schsystemId,stuParentId);
|
||||
// }
|
||||
// }else {
|
||||
// schsystemIdByAcademicStage.put(schsystemIds.get(0),stuParentId);
|
||||
// }
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
+93
-18
@@ -16,6 +16,7 @@ import com.yunhai.bschclassmanage.utils.UserContext;
|
||||
import com.yunhai.bschclassmanage.utils.ValidationUtil;
|
||||
import com.yunhai.platform.utils.exception.DException;
|
||||
import com.yunhai.platform.utils.exception.ErrorCode;
|
||||
import com.yunhai.platform.utils.model.BoaGroup;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
@@ -63,6 +64,12 @@ public class SchClassImportService {
|
||||
@Autowired
|
||||
private SchClassLogService logService;
|
||||
|
||||
@Autowired
|
||||
private ISendUserBaseService sendUserBaseService;
|
||||
|
||||
@Autowired
|
||||
private IBaseSchsystemService baseSchsystemService;
|
||||
|
||||
|
||||
public void importClasses(UserContext.UserInfo user, MultipartFile file) {
|
||||
List<ErrorExcelColumn> errorMsgArr = new ArrayList<>();
|
||||
@@ -70,17 +77,41 @@ public class SchClassImportService {
|
||||
params.setTitleRows(1);
|
||||
params.setHeadRows(1);
|
||||
Date now = new Date();
|
||||
Integer schId = user.getSchId();
|
||||
List<Integer> createdGroupIds = new ArrayList<>();
|
||||
|
||||
Map<Integer, List<SelectIntVO>> schGradeGroupMap = comSchTreeService.getSchGroupTypeList(user.getSchId(), NodeType.GRADE.getId());
|
||||
if (schGradeGroupMap.isEmpty()) {
|
||||
throw new DException("该学制下没有年级组,请先同步年级组数据!");
|
||||
BoaGroup stuGroup= comSchTreeService.getStuTree(schId,false);
|
||||
|
||||
if(stuGroup==null){
|
||||
throw new DException("学生组不存在!");
|
||||
}
|
||||
Integer stuParentId =stuGroup.getId();
|
||||
Map<Integer,Integer> schsystemIdByAcademicStage=new HashMap<>();
|
||||
List<Integer> schsystemIds= schBinSchsystemService.getSchBinSchsystemIds(schId);
|
||||
//创建学段
|
||||
if(schBinSchsystemService.getSchBinSchsystemIds(schId).size()==1)
|
||||
{
|
||||
schsystemIdByAcademicStage.put(schsystemIds.get(0),stuParentId);
|
||||
}else {
|
||||
for (Integer schsystemId:schsystemIds){
|
||||
String academicStageName= baseSchsystemService.getAcademicStageName(schsystemId);
|
||||
List<BoaGroup> schAcademicStageList= comSchTreeService.getAcademicStageGroupList(schId);
|
||||
Optional<BoaGroup> academicStageFirst= schAcademicStageList.stream().filter(s->Objects.equals(s.getName(),academicStageName)).findFirst();
|
||||
if(!academicStageFirst.isPresent())
|
||||
{
|
||||
BoaGroup academicGroup= sendUserBaseService.addGroup(academicStageName,stuGroup.getId(),schsystemId,NodeType.SECTION,schId);
|
||||
createdGroupIds.add(academicGroup.getId());
|
||||
stuParentId=academicGroup.getId();
|
||||
}else {
|
||||
stuParentId=academicStageFirst.get().getId();
|
||||
}
|
||||
schsystemIdByAcademicStage.put(schsystemId,stuParentId);
|
||||
}
|
||||
}
|
||||
Map<Integer, List<SelectIntVO>> schClassGroupMap = comSchTreeService.getSchGroupTypeList(user.getSchId(), NodeType.CLASS.getId());
|
||||
|
||||
try (InputStream is = file.getInputStream()) {
|
||||
List<SchTeacher> schTeacherList = schTeacherService.getSchTeacherList(user.getSchId());
|
||||
List<SelectIntVO> gradeList = baseSchsystemGradeService.getGradeSelect(user.getSchId(), null, null);
|
||||
List<SchClass> schClassList = cacheService.getSchClassCacheList(user.getSchId());
|
||||
List<SchTeacher> schTeacherList = schTeacherService.getSchTeacherList(schId);
|
||||
List<SelectIntVO> gradeList = baseSchsystemGradeService.getGradeSelect(schId, null, null);
|
||||
List<SchClass> schClassList = cacheService.getSchClassCacheList(schId);
|
||||
|
||||
List<SchClassExcelColumn> list;
|
||||
try {
|
||||
@@ -94,7 +125,10 @@ public class SchClassImportService {
|
||||
}
|
||||
|
||||
List<SchClass> saveClassList = new ArrayList<>();
|
||||
int currentRow = params.getTitleRows() + params.getHeadRows() + 1;
|
||||
Integer currentRow = params.getTitleRows() + params.getHeadRows() + 1;
|
||||
// 同批导入时缓存已创建的年级组/班级组 ID,避免同一 Excel 多行重复推送平台组
|
||||
Map<String, Integer> createdGradeCache = new HashMap<>();
|
||||
Map<String, Integer> createdClassCache = new HashMap<>();
|
||||
for (SchClassExcelColumn item : list) {
|
||||
SchClass clazz = new SchClass();
|
||||
// 年级
|
||||
@@ -110,7 +144,12 @@ public class SchClassImportService {
|
||||
clazz.setGradeId(gradeId);
|
||||
|
||||
Integer schsystemId = baseSchsystemGradeService.getSchsystemIdByGradeId(user.getSchId(), gradeId);
|
||||
|
||||
Map<Integer, Integer> nowYearGradeMap = baseSchsystemGradeService.getNowYearGradeMap(user.getSchId(), schsystemId);
|
||||
|
||||
Map<Integer, List<SelectIntVO>> schGradeGroupMap = comSchTreeService.getSchGroupTypeList(schId, NodeType.GRADE.getId());
|
||||
Map<Integer, List<SelectIntVO>> schClassGroupMap = comSchTreeService.getSchGroupTypeList(schId, NodeType.CLASS.getId());
|
||||
|
||||
List<SelectIntVO> gradeGroupList = schGradeGroupMap.get(schsystemId);
|
||||
List<SelectIntVO> classGroupList = schClassGroupMap.get(schsystemId);
|
||||
|
||||
@@ -132,22 +171,47 @@ public class SchClassImportService {
|
||||
}
|
||||
clazz.setCreateDate(now);
|
||||
clazz.setCreateUserId(user.getUserId());
|
||||
clazz.setSchId(user.getSchId());
|
||||
clazz.setSchId(schId);
|
||||
clazz.setSort(sort);
|
||||
String code = year.toString() + String.format("%02d", sort);
|
||||
clazz.setCode(code);
|
||||
clazz.setName(clazzName);
|
||||
clazz.setGraduate(false);
|
||||
clazz.setEnrollYear(year);
|
||||
clazz.setGroupId(0);
|
||||
clazz.setClassId(0);
|
||||
|
||||
Map<String, Integer> gradeNameToIdMap = gradeGroupList.stream()
|
||||
.collect(Collectors.toMap(SelectIntVO::getName, SelectIntVO::getId, (a, b) -> a));
|
||||
Map<String, Integer> classNameToIdMap = classGroupList.stream()
|
||||
.collect(Collectors.toMap(SelectIntVO::getName, SelectIntVO::getId, (a, b) -> a));
|
||||
clazz.setGroupId(gradeNameToIdMap.getOrDefault(year.toString(), 0));
|
||||
clazz.setClassId(classNameToIdMap.getOrDefault(clazz.getCode(), 0));
|
||||
// 参考 addBaseSchClass:先定位年级组(parentId),缺失则推送平台创建;
|
||||
// 优先查快照,再查本批已创建缓存,避免同一 Excel 多行重复创建同名组
|
||||
Integer parentId = (gradeGroupList == null) ? null
|
||||
: gradeGroupList.stream()
|
||||
.filter(s -> Objects.equals(year.toString(), s.getName()))
|
||||
.map(SelectIntVO::getId).findFirst().orElse(null);
|
||||
if (parentId == null) {
|
||||
parentId = createdGradeCache.get(schsystemId + "_" + year);
|
||||
}
|
||||
if (parentId == null || parentId == 0) {
|
||||
BoaGroup gradeGroup = sendUserBaseService.addGroup(year.toString(), schsystemIdByAcademicStage.get(schsystemId), year, NodeType.GRADE, schId);
|
||||
parentId = gradeGroup.getId();
|
||||
createdGroupIds.add(parentId);
|
||||
createdGradeCache.put(schsystemId + "_" + year, parentId);
|
||||
}
|
||||
clazz.setGroupId(parentId);
|
||||
|
||||
// 班级组推送平台,classId 取平台组 ID(与 addBaseSchClass 一致);同理防重复创建
|
||||
Integer existClassId = (classGroupList == null) ? null
|
||||
: classGroupList.stream()
|
||||
.filter(s -> Objects.equals(code, s.getName()))
|
||||
.map(SelectIntVO::getId).findFirst().orElse(null);
|
||||
if (existClassId == null) {
|
||||
existClassId = createdClassCache.get(code);
|
||||
}
|
||||
if (existClassId != null && existClassId > 0) {
|
||||
clazz.setClassId(existClassId);
|
||||
} else {
|
||||
BoaGroup classGroup = sendUserBaseService.addGroup(code, parentId, sort, NodeType.CLASS, schId);
|
||||
clazz.setClassId(classGroup.getId());
|
||||
createdGroupIds.add(classGroup.getId());
|
||||
createdClassCache.put(code, classGroup.getId());
|
||||
}
|
||||
}
|
||||
|
||||
clazz.setCname(item.getClazzCName());
|
||||
@@ -205,12 +269,23 @@ public class SchClassImportService {
|
||||
} catch (DException e) {
|
||||
throw e;
|
||||
} catch (Exception e) {
|
||||
// 导入失败:回滚已成功推送到平台的班级组/年级组,避免孤儿组
|
||||
for (Integer groupId : createdGroupIds) {
|
||||
try {
|
||||
sendUserBaseService.deleteGroup(groupId, schId);
|
||||
} catch (Exception ignore) {
|
||||
log.error("回滚平台组失败 groupId={}", groupId, ignore);
|
||||
}
|
||||
}
|
||||
log.error("导入班级时发生系统异常,操作人:" + user.getUserName(), e);
|
||||
throw new DException(ErrorCode.CUSTOM,"导入失败,请联系管理员",null,e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public void importHeightClasses(UserContext.UserInfo user, MultipartFile file) {
|
||||
List<ErrorExcelColumn> errorMsgArr = new ArrayList<>();
|
||||
ImportParams params = new ImportParams();
|
||||
|
||||
@@ -146,6 +146,7 @@ public class SchClassInfoService {
|
||||
LogContextHolder.setDescription(content);
|
||||
}
|
||||
|
||||
|
||||
// ---------- 编辑班级别名 ----------
|
||||
public void editClassName(UserContext.UserInfo user, Integer id, String cname) {
|
||||
Integer schId = user.getSchId();
|
||||
|
||||
@@ -974,7 +974,7 @@ public class ComSchTreeService implements IComSchTreeService {
|
||||
//-------------
|
||||
|
||||
public SchSystemTreeVO getClassHistoryTree(Integer schId) {
|
||||
if(schBinSchsystemService.getSchType(schId).equals(SchType.BASICEDUCATION.getKey()))
|
||||
if(SchType.BASICEDUCATION.getKey().equals(schBinSchsystemService.getSchType(schId)))
|
||||
{
|
||||
return getGradeClassTreeWithFullName(schId);
|
||||
}else {
|
||||
@@ -1059,7 +1059,8 @@ public class ComSchTreeService implements IComSchTreeService {
|
||||
int year = startYear + i;
|
||||
if (year >= minYear && year <= currentYear) {
|
||||
// 如果年级列表有该索引,使用名称;否则用默认
|
||||
String name = (i < gradeNameList.size()) ? gradeNameList.get(i) : (i + 1) + "年级";
|
||||
// gradeNameList 按 gradeId 倒序(最高年级在前),而年份从低到高,索引需反向取
|
||||
String name = (i < gradeNameList.size()) ? gradeNameList.get(gradeNameList.size() - 1 - i) : (i + 1) + "年级";
|
||||
yearToGradeName.put(year, name);
|
||||
}
|
||||
}
|
||||
@@ -1149,6 +1150,12 @@ public class ComSchTreeService implements IComSchTreeService {
|
||||
SchSystemTreeVO root = buildSchoolRoot(schId);
|
||||
root.setExpand(true);
|
||||
|
||||
// 高职学制长度(按学校专业最大学制,与 getHigherSchGradeClassTree 保持一致;无则默认3)
|
||||
Integer majorLeng = schDicMajorsRepository.findMaxSchsystemLengBySchId(schId).orElse(0);
|
||||
if (majorLeng == null || majorLeng <= 0) {
|
||||
majorLeng = 3;
|
||||
}
|
||||
|
||||
// 2. 获取该校所有班级
|
||||
List<SchClass> allClasses = schClassService.getSchAllClassCacheList(schId);
|
||||
if (CollectionUtils.isEmpty(allClasses)) {
|
||||
@@ -1175,12 +1182,10 @@ public class ComSchTreeService implements IComSchTreeService {
|
||||
for (int year = currentYear; year >= minYear; year--) {
|
||||
List<SchClass> classList = classByYear.getOrDefault(year, Collections.emptyList());
|
||||
|
||||
// 计算毕业状态(假设学制3年,可根据实际调整)
|
||||
// 计算毕业状态(按学校高职学制长度,与 getHigherSchGradeClassTree 保持一致)
|
||||
int graduation = 0;
|
||||
if (year >0) {
|
||||
Integer graduationYear = year + 3; // 3年制
|
||||
graduation = (currentYear >= graduationYear) ? 1 : 0;
|
||||
}
|
||||
Integer graduationYear = year + majorLeng;
|
||||
graduation = (currentYear >= graduationYear) ? 1 : 0;
|
||||
|
||||
// 构建年级节点
|
||||
SchSystemTreeVO gradeNode = new SchSystemTreeVO();
|
||||
|
||||
@@ -22,6 +22,7 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
//SendUserBase
|
||||
|
||||
Reference in New Issue
Block a user