package com.qmth.distributed.print.api; import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.deepoove.poi.XWPFTemplate; import com.google.gson.reflect.TypeToken; import com.qmth.boot.api.annotation.Aac; import com.qmth.boot.api.constant.ApiConstant; import com.qmth.boot.api.exception.ApiException; import com.qmth.boot.core.rateLimit.annotation.RateLimit; import com.qmth.distributed.print.business.bean.dto.CourseWeightDetailDto; import com.qmth.distributed.print.business.bean.dto.CourseWeightDto; import com.qmth.distributed.print.business.bean.dto.TCUsualScoreDto; import com.qmth.distributed.print.business.bean.dto.report.*; import com.qmth.distributed.print.business.bean.result.CourseWeightResult; import com.qmth.distributed.print.business.bean.result.ScoreResult; import com.qmth.distributed.print.business.bean.result.report.PaperStructDimensionResult; import com.qmth.distributed.print.business.bean.result.report.ReportChangeResult; import com.qmth.distributed.print.business.bean.result.report.ReportResult; import com.qmth.distributed.print.business.bean.result.report.word.CourseBasicBean; import com.qmth.distributed.print.business.bean.result.report.word.CourseReportBean; import com.qmth.distributed.print.business.entity.TCPaperStruct; import com.qmth.distributed.print.business.entity.TCUsualScore; import com.qmth.distributed.print.business.entity.TRBasicInfo; import com.qmth.distributed.print.business.entity.TRExamStudent; import com.qmth.distributed.print.business.service.*; import com.qmth.teachcloud.common.annotation.OperationLogDetail; import com.qmth.teachcloud.common.contant.SystemConstant; import com.qmth.teachcloud.common.entity.BasicSchool; import com.qmth.teachcloud.common.entity.SysConfig; import com.qmth.teachcloud.common.entity.SysUser; import com.qmth.teachcloud.common.enums.ExceptionResultEnum; import com.qmth.teachcloud.common.enums.FieldUniqueEnum; import com.qmth.teachcloud.common.enums.ImportTemplateEnum; import com.qmth.teachcloud.common.enums.log.CustomizedOperationTypeEnum; import com.qmth.teachcloud.common.service.CommonCacheService; import com.qmth.teachcloud.common.service.FileUploadService; import com.qmth.teachcloud.common.util.*; import com.qmth.teachcloud.mark.entity.MarkPaper; import io.swagger.annotations.*; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.dao.DuplicateKeyException; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.validation.Valid; import javax.validation.constraints.Max; import javax.validation.constraints.Min; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; /** *

* 报告基本情况表 前端控制器 *

* * @author wangliang * @since 2024-02-18 */ @Api(tags = "课程目标达成度-报告基本情况Controller") @RestController @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_COURSE_DEGREE) public class TRBasicInfoController { private final static Logger log = LoggerFactory.getLogger(TRBasicInfoController.class); @Resource PrintCommonService printCommonService; @Resource TRBasicInfoService trBasicInfoService; @Resource TRExamStudentService trExamStudentService; @Resource CommonCacheService commonCacheService; @Resource FileUploadService fileUploadService; @Resource TCPaperStructService tcPaperStructService; @Resource TCUsualScoreService tcUsualScoreService; @ApiOperation(value = "报告管理列表") @RequestMapping(value = "/report/list", method = RequestMethod.POST) @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.SEARCH) @ApiResponses({@ApiResponse(code = 200, message = "分页查询", response = ScoreResult.class)}) public Result reportList(@ApiParam(value = "考试ID", required = true) @RequestParam Long examId, @ApiParam(value = "课程编码") @RequestParam(required = false) String courseCode, @ApiParam(value = "分页页码", required = true) @RequestParam @Min(SystemConstant.PAGE_NUMBER_MIN) Integer pageNumber, @ApiParam(value = "分页数", required = true) @RequestParam @Min(SystemConstant.PAGE_SIZE_MIN) @Max(SystemConstant.PAGE_SIZE_MAX) Integer pageSize) { return ResultUtil.ok(printCommonService.scoreList(new Page<>(pageNumber, pageSize), examId, courseCode)); } @ApiOperation(value = "查看报告") @RequestMapping(value = "/report/view", method = RequestMethod.POST) @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.SEARCH) @ApiResponses({@ApiResponse(code = 200, message = "查看报告", response = ReportResult.class)}) @Transactional public Result reportView(@ApiParam(value = "考试id", required = true) @RequestParam Long examId, @ApiParam(value = "科目编码", required = true) @RequestParam String courseCode, @ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber) { MarkPaper markPaper = printCommonService.getMarkPaper(examId, paperNumber); SysUser sysUser = (SysUser) ServletUtil.getRequestUser(); TRBasicInfo trBasicInfo = trBasicInfoService.queryByExamIdAndCourseCodeAndPaperNumber(examId, courseCode, paperNumber); CourseWeightResult courseWeightResult = trBasicInfoService.findCourseWeightResultRmi(examId, courseCode); TCPaperStruct tcPaperStruct = tcPaperStructService.queryByExamIdAndCourseCodeAndPaperNumber(examId, courseCode, paperNumber); if (Objects.nonNull(tcPaperStruct) && Objects.nonNull(tcPaperStruct.getPaperStructDimension())) { List paperStructDimensionResultList = GsonUtil.fromJson(tcPaperStruct.getPaperStructDimension(), new TypeToken>() { }.getType()); for (CourseWeightDto c : courseWeightResult.getSubmitForm()) { Double score = paperStructDimensionResultList.stream().filter(s -> Objects.equals(s.getCourseTargetName(), c.getCourseTargetName())).mapToDouble(PaperStructDimensionResult::getScore).sum(); Objects.requireNonNull(c.getTotalWeight(), "[" + c.getCourseTargetName() + "]未设置权重"); Objects.requireNonNull(c.getTotalScore(), "[" + c.getCourseTargetName() + "]未设置目标分值"); if (new BigDecimal(score).compareTo(c.getTotalWeight()) == 1) { trBasicInfoService.clearReportData(examId, courseCode, paperNumber, false); throw ExceptionResultEnum.ERROR.exception("[" + c.getCourseTargetName() + "]包含的小题总分与权重设置不一致,请到期末成绩--试卷蓝图设置里调整"); } } } if (Objects.isNull(trBasicInfo)) { trBasicInfo = trBasicInfoService.getReportView(trBasicInfo, markPaper, sysUser.getId(), courseWeightResult); } else { ReportCourseEvaluationResultDto reportCourseEvaluationResultDto = Objects.nonNull(trBasicInfo.getCourseEvaluationResult()) ? JSONObject.parseObject(trBasicInfo.getCourseEvaluationResult(), ReportCourseEvaluationResultDto.class) : null; if (Objects.nonNull(reportCourseEvaluationResultDto.getWeightSettingSign()) && reportCourseEvaluationResultDto.getWeightSettingSign().longValue() != courseWeightResult.getWeightSettingSign().longValue()) { trBasicInfoService.clearReportData(examId, courseCode, paperNumber, Objects.nonNull(tcPaperStruct) && Objects.nonNull(tcPaperStruct.getDimensionSign()) && tcPaperStruct.getDimensionSign().longValue() != courseWeightResult.getDimensionSign().longValue() ? true : false); trBasicInfo = trBasicInfoService.getReportView(trBasicInfo, markPaper, sysUser.getId(), courseWeightResult); } else { ReportCourseBasicInfoDto reportCourseBasicInfoDto = new ReportCourseBasicInfoDto(trBasicInfo); ReportCourseEvaluationSpreadDto reportCourseEvaluationSpreadDto = Objects.nonNull(trBasicInfo.getCourseEvaluationSpread()) ? JSONObject.parseObject(trBasicInfo.getCourseEvaluationSpread(), ReportCourseEvaluationSpreadDto.class) : null; ReportCourseEvaluationResultDetailDto reportCourseEvaluationResultDetailDto = null; List trExamStudentList = trExamStudentService.list(new QueryWrapper().lambda().eq(TRExamStudent::getrBasicInfoId, trBasicInfo.getId())); if (!CollectionUtils.isEmpty(trExamStudentList)) { List examStudentList = new ArrayList<>(trExamStudentList.size()); for (TRExamStudent trExamStudent : trExamStudentList) { examStudentList.add(new ReportExamStudentDto(trExamStudent)); } reportCourseEvaluationResultDetailDto = new ReportCourseEvaluationResultDetailDto(examStudentList); } trBasicInfo.setReportResult(new ReportResult(new ReportCommonDto(examId, courseCode, markPaper.getCourseName(), paperNumber), reportCourseBasicInfoDto, reportCourseEvaluationSpreadDto, reportCourseEvaluationResultDto, reportCourseEvaluationResultDetailDto)); } } trBasicInfo.updateInfo(sysUser.getId()); //课程目标达成评价明细结果-课程目标达成评价值图 trBasicInfoService.saveOrUpdate(trBasicInfo); return ResultUtil.ok(trBasicInfo.getReportResult()); } @ApiOperation(value = "保存报告") @RequestMapping(value = "/report/save", method = RequestMethod.POST) @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.UPDATE) @ApiResponses({@ApiResponse(code = 200, message = "保存报告", response = Object.class)}) @Transactional public Result reportSave(@ApiParam(value = "保存报告结构", required = true) @Valid @RequestBody TRBasicInfo trBasicInfo, BindingResult bindingResult) { if (bindingResult.hasErrors()) { return ResultUtil.error(bindingResult.getAllErrors().get(0).getDefaultMessage()); } SysUser sysUser = (SysUser) ServletUtil.getRequestUser(); TRBasicInfo trBasicInfoDb = null; try { trBasicInfoDb = trBasicInfoService.queryByExamIdAndCourseCodeAndPaperNumber(trBasicInfo.getExamId(), trBasicInfo.getCourseCode(), trBasicInfo.getPaperNumber()); if (Objects.isNull(trBasicInfoDb)) { trBasicInfoDb = new TRBasicInfo(trBasicInfo, sysUser.getId()); MarkPaper markPaper = printCommonService.getMarkPaper(trBasicInfo.getExamId(), trBasicInfo.getPaperNumber()); trBasicInfoDb = trBasicInfoService.getReportView(trBasicInfoDb, markPaper, sysUser.getId(), trBasicInfoService.findCourseWeightResultRmi(trBasicInfo.getExamId(), trBasicInfo.getCourseCode())); } else { trBasicInfoDb.updateInfo(trBasicInfo, sysUser.getId()); } } catch (Exception e) { log.error(SystemConstant.LOG_ERROR, e); if (e instanceof DuplicateKeyException) { String errorColumn = e.getCause().toString(); String columnStr = errorColumn.substring(errorColumn.lastIndexOf("key") + 3, errorColumn.length()).replaceAll("'", ""); throw ExceptionResultEnum.SQL_ERROR.exception("[" + FieldUniqueEnum.convertToTitle(columnStr) + "]数据不允许重复插入"); } else if (e instanceof ApiException) { ResultUtil.error((ApiException) e, ((ApiException) e).getCode(), e.getMessage()); } else { ResultUtil.error(e.getMessage()); } } return ResultUtil.ok(trBasicInfoService.saveOrUpdate(trBasicInfoDb)); } @ApiOperation(value = "导出报告") @RequestMapping(value = "/report/export", method = RequestMethod.POST) @OperationLogDetail(customizedOperationType = CustomizedOperationTypeEnum.EXPORT) @ApiResponses({@ApiResponse(code = 200, message = "下载成功", response = Object.class)}) @Aac(rateLimit = @RateLimit(count = 1, period = 1000L)) public void reportExport(@ApiParam(value = "考试id", required = true) @RequestParam Long examId, @ApiParam(value = "科目编码", required = true) @RequestParam String courseCode, @ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber) throws IOException { File txtFileTemp = null, fileTemp = null; try { Long schoolId = Long.valueOf(ServletUtil.getRequestHeaderSchoolId().toString()); BasicSchool basicSchool = commonCacheService.schoolCache(schoolId); TRBasicInfo trBasicInfo = trBasicInfoService.queryByExamIdAndCourseCodeAndPaperNumber(examId, courseCode, paperNumber); Objects.requireNonNull(trBasicInfo, "没有报告信息"); Objects.requireNonNull(trBasicInfo.getCourseEvaluationResult(), "没有课程目标信息"); Objects.requireNonNull(trBasicInfo.getCourseEvaluationResultDetail(), "没有课程考生信息"); CourseWeightResult courseWeightResult = trBasicInfoService.findCourseWeightResultRmi(examId, courseCode); TCPaperStruct tcPaperStruct = tcPaperStructService.queryByExamIdAndCourseCodeAndPaperNumber(examId, courseCode, paperNumber); if (Objects.nonNull(tcPaperStruct) && Objects.nonNull(tcPaperStruct.getPaperStructDimension())) { List paperStructDimensionResultList = GsonUtil.fromJson(tcPaperStruct.getPaperStructDimension(), new TypeToken>() { }.getType()); for (CourseWeightDto c : courseWeightResult.getSubmitForm()) { Double score = paperStructDimensionResultList.stream().filter(s -> Objects.equals(s.getCourseTargetName(), c.getCourseTargetName())).mapToDouble(PaperStructDimensionResult::getScore).sum(); Objects.requireNonNull(c.getTotalWeight(), "[" + c.getCourseTargetName() + "]未设置权重"); Objects.requireNonNull(c.getTotalScore(), "[" + c.getCourseTargetName() + "]未设置目标分值"); if (new BigDecimal(score).compareTo(c.getTotalWeight()) == 1) { trBasicInfoService.clearReportData(examId, courseCode, paperNumber, false); throw ExceptionResultEnum.ERROR.exception("[" + c.getCourseTargetName() + "]包含的小题总分与权重设置不一致,请到期末成绩--试卷蓝图设置里调整"); } } } ReportCourseEvaluationResultDto reportCourseEvaluationResultDto = JSONObject.parseObject(trBasicInfo.getCourseEvaluationResult(), ReportCourseEvaluationResultDto.class); if (Objects.nonNull(reportCourseEvaluationResultDto.getWeightSettingSign()) && reportCourseEvaluationResultDto.getWeightSettingSign().longValue() != courseWeightResult.getWeightSettingSign().longValue()) { printCommonService.getMarkPaper(examId, paperNumber); trBasicInfoService.clearReportData(examId, courseCode, paperNumber, Objects.nonNull(tcPaperStruct) && Objects.nonNull(tcPaperStruct.getDimensionSign()) && tcPaperStruct.getDimensionSign().longValue() != courseWeightResult.getDimensionSign().longValue() ? true : false); this.reportView(examId, courseCode, paperNumber); this.reportExport(examId, courseCode, paperNumber); } else { //评价样本的基本信息 String period = Objects.nonNull(trBasicInfo.getPeriod()) ? trBasicInfo.getPeriod() : null; String credit = Objects.nonNull(trBasicInfo.getCredit()) ? trBasicInfo.getCredit() : null; period = Objects.nonNull(credit) ? period + "/" + credit : period; JSONObject jsonObject = JSONObject.parseObject(trBasicInfo.getCourseEvaluationResultDetail()); List courseTargetWordDtoList = JSONArray.parseArray(jsonObject.get("targetWordMap").toString(), CourseTargetWordDto.class); StringJoiner courseTarget = new StringJoiner(""); courseTargetWordDtoList.stream().peek(s -> { courseTarget.add(" ").add(s.getTargetName()).add("——").add(s.getGraduationRequirementPoint()).add("\r\n"); }).collect(Collectors.toList()); CourseBasicBean courseBasicBean = new CourseBasicBean(trBasicInfo.getCourseName(), trBasicInfo.getCourseCode(), null, trBasicInfo.getCourseType(), period, null, null, trBasicInfo.getDirector(), DateUtil.format(new Date(trBasicInfo.getCreateTime()), SystemConstant.DEFAULT_DATE_PATTERN), courseTarget.toString(), reportCourseEvaluationResultDto.getTargetList().size()); CourseReportBean courseReportBean = new CourseReportBean(trBasicInfo.getOpenTime() + "《" + trBasicInfo.getCourseName() + "》", courseBasicBean); //table1-课程目标目标与毕业要求指标点的对应关系 courseReportBean.setCourseTargetTable1(trBasicInfoService.buildWordTable1(courseTargetWordDtoList)); //table2-课程目标达成评价依据 courseReportBean.setCourseTargetTable2(trBasicInfoService.buildWordTable2(courseTargetWordDtoList)); //table3-课程课后作业考核/评价内容及目标分值 courseReportBean.setCourseTargetTable3(trBasicInfoService.buildWordTable3(courseTargetWordDtoList)); //table4-课程期末考试考核/评价内容及目标分值 courseReportBean.setCourseTargetTable4(trBasicInfoService.buildWordTable4(courseTargetWordDtoList)); //examstudent-课程目标达成评价依据-考生 courseReportBean.setExamStudentTable1(trBasicInfoService.buildWordTable5(trBasicInfo, courseReportBean)); InputStream inputStream = null; txtFileTemp = SystemConstant.getFileTempVar(SystemConstant.WORD_PREFIX); SysConfig sysConfig = commonCacheService.addSysConfigCache(schoolId, SystemConstant.SCHOOL_COURSE_DEGREE_TEMPLATE); if (Objects.isNull(sysConfig)) { inputStream = FileUtil.getStream("static/" + ImportTemplateEnum.STATIC_COURSE_DEGREE_REPORT.getTemplateName()); } else { fileTemp = SystemConstant.getFileTempVar(SystemConstant.WORD_PREFIX); fileTemp = fileUploadService.downloadFile(Long.parseLong(sysConfig.getConfigValue()), fileTemp.getPath()); inputStream = new FileInputStream(fileTemp); } FileUtils.copyInputStreamToFile(inputStream, txtFileTemp); XWPFTemplate template = XWPFTemplate.compile(txtFileTemp.getAbsolutePath()).render(courseReportBean); template.writeToFile(txtFileTemp.getAbsolutePath()); // 导出 String fileName = Objects.nonNull(basicSchool) ? basicSchool.getName() + "_" + courseReportBean.getTitle1() + "_" + ImportTemplateEnum.STATIC_COURSE_DEGREE_REPORT.getFileName() + SystemConstant.WORD_PREFIX : courseReportBean.getTitle1() + "_" + ImportTemplateEnum.STATIC_COURSE_DEGREE_REPORT.getFileName() + SystemConstant.WORD_PREFIX; FileUtil.outputFile(ServletUtil.getResponse(), new FileInputStream(txtFileTemp), fileName); // XWPFTemplate template = XWPFTemplate.compile("/Users/king/git/teachcloud-server/distributed-print/src/main/resources/static/course_degree_report.docx").render(courseReportBean); // template.writeToFile("/Users/king/Downloads/demo_course_degree_report.docx"); } } catch (Exception e) { if (e instanceof ApiException) { ResultUtil.error((ApiException) e, ((ApiException) e).getCode(), e.getMessage()); } else { ResultUtil.error(e.getMessage()); } } finally { if (Objects.nonNull(txtFileTemp)) { txtFileTemp.delete(); } if (Objects.nonNull(fileTemp)) { fileTemp.delete(); } } } @ApiOperation(value = "报告发生改变") @RequestMapping(value = "/report/change", method = RequestMethod.POST) @ApiResponses({@ApiResponse(code = 200, message = "下载成功", response = Object.class)}) public Result reportDataChange(@ApiParam(value = "考试id", required = true) @RequestParam Long examId, @ApiParam(value = "科目编码", required = true) @RequestParam String courseCode, @ApiParam(value = "试卷编号", required = true) @RequestParam String paperNumber, @ApiParam(value = "true:报告,false:成绩管理", required = true) @RequestParam boolean report) throws IOException { ReportChangeResult reportChangeResult = new ReportChangeResult(); List tcUsualScoreList = tcUsualScoreService.queryByExamIdAndCourseCodeAndPaperNumber(examId, courseCode, paperNumber); if (CollectionUtils.isNotEmpty(tcUsualScoreList)) { Set usualScoreCourseSet = new LinkedHashSet<>(); TCUsualScore tcUsualScore = tcUsualScoreList.get(0); List tcUsualScoreDtoList = JSONArray.parseArray(tcUsualScore.getScore(), TCUsualScoreDto.class); List usualScoreList = tcUsualScoreDtoList.stream().map(s -> s.getName()).collect(Collectors.toList()); List courseWeightDtoList = trBasicInfoService.findCourseWeightDtoRmi(examId, courseCode); List courseTargetList = new ArrayList<>(courseWeightDtoList.size()); if (CollectionUtils.isNotEmpty(courseWeightDtoList)) { courseWeightDtoList.stream().peek(e -> { courseTargetList.add(e.getCourseTargetName()); List courseWeightDetailDtoList = e.getEvaluationList(); courseWeightDetailDtoList.stream().peek(s -> { if (Objects.nonNull(s.getEnable()) && s.getEnable() && !Objects.equals(s.getEvaluationName(), SystemConstant.FINAL_SCORE_STR)) { usualScoreCourseSet.add(s.getEvaluationName()); } }).collect(Collectors.toList()); }).collect(Collectors.toList()); } if (CollectionUtils.isNotEmpty(usualScoreList) && CollectionUtils.isNotEmpty(usualScoreCourseSet)) { List usualScoreCourseList = new ArrayList<>(usualScoreCourseSet); Collections.sort(usualScoreList); Collections.sort(usualScoreCourseList); if (!CollectionUtils.isEqualCollection(usualScoreList, usualScoreCourseList)) { reportChangeResult.setEvaluationChange(true); } } TRBasicInfo trBasicInfo = trBasicInfoService.queryByExamIdAndCourseCodeAndPaperNumber(examId, courseCode, paperNumber); if (Objects.nonNull(trBasicInfo) && Objects.nonNull(trBasicInfo.getCourseEvaluationResultDetail())) { JSONObject jsonObject = JSONObject.parseObject(trBasicInfo.getCourseEvaluationResultDetail()); List courseTargetWordDtoList = JSONArray.parseArray(jsonObject.get("targetWordMap").toString(), CourseTargetWordDto.class); List courseTargetDbList = courseTargetWordDtoList.stream().map(s -> s.getTargetName()).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(courseTargetList) && CollectionUtils.isNotEmpty(courseTargetDbList)) { Collections.sort(courseTargetList); Collections.sort(courseTargetDbList); if (!CollectionUtils.isEqualCollection(courseTargetList, courseTargetDbList)) { reportChangeResult.setCourseTargetChange(true); } } } if (!report) { TCPaperStruct tcPaperStruct = tcPaperStructService.queryByExamIdAndCourseCodeAndPaperNumber(examId, courseCode, paperNumber); if (Objects.nonNull(tcPaperStruct) && Objects.nonNull(tcPaperStruct.getPaperStructDimension())) { List paperStructDimensionResultList = GsonUtil.fromJson(tcPaperStruct.getPaperStructDimension(), new TypeToken>() { }.getType()); StringJoiner stringJoiner = new StringJoiner(""); for (CourseWeightDto c : courseWeightDtoList) { Double score = paperStructDimensionResultList.stream().filter(s -> Objects.equals(s.getCourseTargetName(), c.getCourseTargetName())).mapToDouble(PaperStructDimensionResult::getScore).sum(); if (Objects.isNull(c.getTotalWeight())) { reportChangeResult.setTargetScoreChange(true); stringJoiner.add("[").add(c.getCourseTargetName()).add("]").add("未设置权重").add("\r\n"); } else if (Objects.isNull(c.getTotalScore())) { reportChangeResult.setTargetScoreChange(true); stringJoiner.add("[").add(c.getCourseTargetName()).add("]").add("未设置目标分值").add("\r\n"); } else if (new BigDecimal(score).compareTo(c.getTotalWeight()) == 1) { reportChangeResult.setTargetScoreChange(true); stringJoiner.add("[").add(c.getCourseTargetName()).add("]").add("包含的小题总分与权重设置不一致,请到期末成绩--试卷蓝图设置里调整").add("\r\n"); } } if (reportChangeResult.isTargetScoreChange()) { trBasicInfoService.clearReportData(examId, courseCode, paperNumber, false); reportChangeResult.setTargetScoreChangeStr(stringJoiner.toString()); } } } } return ResultUtil.ok(reportChangeResult); } }