综合导入逻辑修改

This commit is contained in:
2025-09-08 15:42:31 +08:00
parent 6c3046bfbd
commit 8090f9c807
6 changed files with 603 additions and 430 deletions

View File

@@ -3,21 +3,22 @@ package com.srs.comprehensive.mapper;
import java.util.List;
import com.srs.comprehensive.domain.SrsCeScore;
import com.srs.comprehensive.domain.SrsStudent;
import com.srs.comprehensive.domain.Vo.SrsCeScoreStudentStuYear;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* 综合评价Mapper接口
*
*
* @author srs
* @date 2023-06-28
*/
@Mapper
public interface SrsCeScoreMapper
{
public interface SrsCeScoreMapper {
/**
* 查询综合评价
*
*
* @param id 综合评价主键
* @return 综合评价
*/
@@ -25,16 +26,17 @@ public interface SrsCeScoreMapper
/**
* 查询综合评价列表
*
*
* @param srsCeScore 综合评价
* @return 综合评价集合
*/
public List<SrsCeScore> selectSrsCeScoreList(SrsCeScore srsCeScore);
public List<SrsCeScore> selectSrsCeScoreListS(SrsCeScore srsCeScore);
/**
* 新增综合评价
*
*
* @param srsCeScore 综合评价
* @return 结果
*/
@@ -42,15 +44,17 @@ public interface SrsCeScoreMapper
/**
* 修改综合评价
*
*
* @param srsCeScore 综合评价
* @return 结果
*/
public int updateSrsCeScore(SrsCeScore srsCeScore);
/**
* 删除综合评价
*
*
* @param id 综合评价主键
* @return 结果
*/
@@ -58,14 +62,15 @@ public interface SrsCeScoreMapper
/**
* 批量删除综合评价
*
*
* @param ids 需要删除的数据主键集合
* @return 结果
*/
public int deleteSrsCeScoreByIds(Long[] ids);
/**
*综合评价连表查询
* 综合评价连表查询
*
* @return 结果
*/
List<SrsCeScoreStudentStuYear> SrsCeScoreStudentStuYear(SrsCeScore srsCeScore);

View File

@@ -36,7 +36,8 @@ public interface SrsStudentMapper extends EasyBaseMapper<SrsStudent>
public List<StuCount> countParkStu();
// 根据多个班级ID查询学生
List<SrsStudent> selectSrsStudentByClassIds(@Param("classIds") List<Long> classIds);
public List<StuCount> countLakeGradeStu();

View File

@@ -25,7 +25,7 @@ import static com.srs.common.utils.SecurityUtils.getUsername;
/**
* 综合评价Service业务层处理
*
*
* @author srs
* @date 2023-06-28
*/
@@ -54,7 +54,7 @@ public class SrsCeScoreServiceImpl implements ISrsCeScoreService
/**
* 查询综合评价
*
*
* @param id 综合评价主键
* @return 综合评价
*/
@@ -66,7 +66,7 @@ public class SrsCeScoreServiceImpl implements ISrsCeScoreService
/**
* 查询综合评价列表
*
*
* @param srsCeScore 综合评价
* @return 综合评价
*/
@@ -78,7 +78,7 @@ public class SrsCeScoreServiceImpl implements ISrsCeScoreService
/**
* 新增综合评价
*
*
* @param srsCeScore 综合评价
* @return 结果
*/
@@ -91,7 +91,7 @@ public class SrsCeScoreServiceImpl implements ISrsCeScoreService
/**
* 修改综合评价
*
*
* @param srsCeScore 综合评价
* @return 结果
*/
@@ -104,7 +104,7 @@ public class SrsCeScoreServiceImpl implements ISrsCeScoreService
/**
* 批量删除综合评价
*
*
* @param ids 需要删除的综合评价主键
* @return 结果
*/
@@ -116,7 +116,7 @@ public class SrsCeScoreServiceImpl implements ISrsCeScoreService
/**
* 删除综合评价信息
*
*
* @param id 综合评价主键
* @return 结果
*/
@@ -147,76 +147,99 @@ public class SrsCeScoreServiceImpl implements ISrsCeScoreService
student.setStuNo(student.getStuNo().trim());
return student;
})
.collect(Collectors.toList());//清空前后空格
int number=0;
StringBuilder error= new StringBuilder();
//查询辅导员
.collect(Collectors.toList());
int number = 0;
StringBuilder error = new StringBuilder();
// 查询辅导员
CphTeacher cphTeacher = cphTeacherMapper.searchTeacherByTno(getUsername());
SysUser sysUser = sysUserMapper.selectUserByUserName(getUsername());
if (!Objects.equals(sysUser.getUserName(), "admin")) {
List<SrsStudent> srsStudentList = new ArrayList<>();//辅导员所带的学生
//查询班级
List<SrsStudent> srsStudentList = new ArrayList<>();
// 查询班级
SrsClass srsClass = new SrsClass();
srsClass.setTeacherId(cphTeacher.getTeacherId());
List<SrsClass> srsClasses = srsClassMapper.selectSrsClassListTeacherId(srsClass);//班级
//查询辅导员所带的班级学生
for (SrsClass scs : srsClasses) {
SrsStudent srsStudent = new SrsStudent();
srsStudent.setClassId(scs.getClassId());
// srsStudent.setStatus("01");
//根据班级id查询学生
List<SrsStudent> srsStudentList1 = srsStudentMapper.selectSrsStudentList(srsStudent);
srsStudentList.addAll(srsStudentList1);
List<SrsClass> srsClasses = srsClassMapper.selectSrsClassListTeacherId(srsClass);
// 查询辅导员所带的班级学生 - 优化为批量查询
if (!srsClasses.isEmpty()) {
List<Long> classIds = srsClasses.stream()
.map(SrsClass::getClassId)
.collect(Collectors.toList());
srsStudentList = srsStudentMapper.selectSrsStudentByClassIds(classIds);
}
// 验证学生是否属于当前辅导员
for (SrsCeScoreStudent scss : srsCeScoreStudents) {
if (scss.getCeScore().compareTo(new BigDecimal(100))>0){
if (scss.getCeScore().compareTo(new BigDecimal(100)) > 0) {
scss.setCeScore(new BigDecimal(100));
}
int i = 0;
for (SrsStudent ssd : srsStudentList) {
if (Objects.equals(scss.getStuNo(), ssd.getStuNo())) {
i = 1;
break;
}
}
if (i == 0) {
boolean isValidStudent = srsStudentList.stream()
.anyMatch(student -> Objects.equals(scss.getStuNo(), student.getStuNo()));
if (!isValidStudent) {
error.append(scss.getStuNo()).append(",");
}
}
if (!error.toString().equals("")) {
throw new RuntimeException("表中的学号:" + error + "不是所带的学生,请删除后再尝试导入!");
}
}
//TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//标记为回滚状态
for (SrsCeScoreStudent i:srsCeScoreStudents){
//综合评价成绩
SrsCeScore srsCeScore1 = new SrsCeScore();//综合评价
SrsStudent srsStudent = srsStudentMapper.selectSrsStudentByStuNo(i.getStuNo());//查询学生信息
srsCeScore1.setStuId(srsStudent.getStuId());//学生id
srsCeScore1.setStuYearId(i.getStuYearId());//学年id
List<SrsCeScore> srsCeScores = srsCeScoreMapper.selectSrsCeScoreListS(srsCeScore1);//查询综合评价表重复
srsCeScore1.setCeScore(i.getCeScore());
srsCeScore1.setStuNo(i.getStuNo());
if (srsCeScores.size()==0){//判断综合评价表有没有重复的值
srsCeScore1.setCreateBy(getUsername());
srsCeScore1.setCreateTime(DateUtils.getNowDate());
srsCeScoreMapper.insertSrsCeScore(srsCeScore1);//没有则添加
//ifSrsAdd(srsAddRecord,srsAddRecords);
number++;
continue;
}
srsCeScore1.setUpdateBy(getUsername());
srsCeScore1.setUpdateTime(DateUtils.getNowDate());
srsCeScore1.setId(srsCeScores.get(0).getId());
srsCeScoreMapper.updateSrsCeScore(srsCeScore1);//有则修改
//ifSrsAdd(srsAddRecord,srsAddRecords);
number++;
// 分批处理数据,减少事务持有时间
int batchSize = 50; // 批处理大小
for (int i = 0; i < srsCeScoreStudents.size(); i += batchSize) {
int endIndex = Math.min(i + batchSize, srsCeScoreStudents.size());
List<SrsCeScoreStudent> batch = srsCeScoreStudents.subList(i, endIndex);
// 在新的事务中处理每批数据
number += processBatch(batch);
}
TransactionAspectSupport.currentTransactionStatus().flush();//手动提交事务
//cphTotalScoreMapper.testFor(id);
cphTestForService.testMethod(Math.toIntExact(srsCeScoreStudents.get(0).getStuYearId()));
// 处理完成后调用测试方法
// if (!srsCeScoreStudents.isEmpty()) {
// cphTestForService.testMethod(Math.toIntExact(srsCeScoreStudents.get(0).getStuYearId()));
// }
return number;
}
// 新增批处理方法
@Transactional(rollbackFor = Exception.class)
public int processBatch(List<SrsCeScoreStudent> batch) {
int count = 0;
for (SrsCeScoreStudent i : batch) {
// 综合评价成绩
SrsCeScore srsCeScore1 = new SrsCeScore();
SrsStudent srsStudent = srsStudentMapper.selectSrsStudentByStuNo(i.getStuNo());
srsCeScore1.setStuId(srsStudent.getStuId());
srsCeScore1.setStuYearId(i.getStuYearId());
List<SrsCeScore> srsCeScores = srsCeScoreMapper.selectSrsCeScoreListS(srsCeScore1);
srsCeScore1.setCeScore(i.getCeScore());
srsCeScore1.setStuNo(i.getStuNo());
if (srsCeScores.isEmpty()) {
srsCeScore1.setCreateBy(getUsername());
srsCeScore1.setCreateTime(DateUtils.getNowDate());
srsCeScoreMapper.insertSrsCeScore(srsCeScore1);
} else {
srsCeScore1.setUpdateBy(getUsername());
srsCeScore1.setUpdateTime(DateUtils.getNowDate());
srsCeScore1.setId(srsCeScores.get(0).getId());
srsCeScoreMapper.updateSrsCeScore(srsCeScore1);
}
count++;
}
return count;
}
private void ifSrsAdd(SrsAddRecord srsAddRecord, List<SrsAddRecord> srsAddRecords){
if (srsAddRecords.size()==0){
//添加