diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/DateUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/DateUtils.java index c2a789f..3aee49d 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/DateUtils.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/DateUtils.java @@ -156,6 +156,17 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils { return hour + "小时" + min + "分钟" + sec + "秒"; } + public static String getDatePoor4MinSec(Date startDate, Date endDate) { + Instant startInstant = startDate.toInstant(); + LocalDateTime start = LocalDateTime.ofInstant(startInstant, ZoneId.systemDefault()); + Instant endInstant = endDate.toInstant(); + LocalDateTime end = LocalDateTime.ofInstant(endInstant, ZoneId.systemDefault()); + Duration duration = Duration.between(start, end); + long min = duration.toMinutes(); + long sec = duration.getSeconds() % 60; + return min + "分钟" + sec + "秒"; + } + /** * 增加 LocalDateTime ==> Date */ @@ -190,5 +201,4 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils { } return list; } - } diff --git a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/domain/word/PublishRecordWordData.java b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/domain/word/PublishRecordWordData.java index 14b4d21..04e8a4f 100644 --- a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/domain/word/PublishRecordWordData.java +++ b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/domain/word/PublishRecordWordData.java @@ -42,11 +42,9 @@ public class PublishRecordWordData { private String warnPercent; private String normalNum; private String normalPercent; - private ChartSingleSeriesRenderData warnChart; + private ChartSingleSeriesRenderData warnRecordChat; - private String classWarnName; - private String classWarnNum; - private String classWarnPercent; + private WordClass classFlag; private ChartSingleSeriesRenderData classChart; private List warnCharts; diff --git a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/domain/word/WordClass.java b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/domain/word/WordClass.java new file mode 100644 index 0000000..20ee77e --- /dev/null +++ b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/domain/word/WordClass.java @@ -0,0 +1,17 @@ +package org.dromara.scale.domain.word; + +import lombok.Data; + +/** + *

TODO

+ * + * @author cjw + * @version V1.0.0 + * @date 2024/5/23 15:00 + */ +@Data +public class WordClass { + private String classWarnName; + private String classWarnNum; + private String classWarnPercent; +} diff --git a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/domain/word/WordWarn.java b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/domain/word/WordWarn.java index eed6cc7..6ec5324 100644 --- a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/domain/word/WordWarn.java +++ b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/domain/word/WordWarn.java @@ -1,5 +1,6 @@ package org.dromara.scale.domain.word; +import com.deepoove.poi.data.ChartMultiSeriesRenderData; import com.deepoove.poi.data.TableRenderData; import lombok.Data; @@ -16,4 +17,5 @@ public class WordWarn { private String scaleName; private TableRenderData warnTable; + private ChartMultiSeriesRenderData warnChart; } diff --git a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/mapper/SysEvaluationRecordMapper.java b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/mapper/SysEvaluationRecordMapper.java index 1edd16e..384c764 100644 --- a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/mapper/SysEvaluationRecordMapper.java +++ b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/mapper/SysEvaluationRecordMapper.java @@ -43,8 +43,7 @@ public interface SysEvaluationRecordMapper extends BaseMapperPlus selectWarn4Class(Long batchNo); - List selectFactorNum(@Param("batchNo") Long batchNo, @Param("scaleId") Long scaleId); - List selectFactorWarnNum(@Param("batchNo") Long batchNo, @Param("scaleId") Long scaleId,@Param("list")List warnList); + List selectFactorWarnNum(@Param("batchNo") Long batchNo, @Param("scaleId") Long scaleId); int selectUndoneNumByBatchNoAndUserId(@Param("batchNo") Long batchNo,@Param("userId") Long userId); diff --git a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/SysEvaluationRecordServiceImpl.java b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/SysEvaluationRecordServiceImpl.java index 2835615..cb1f298 100644 --- a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/SysEvaluationRecordServiceImpl.java +++ b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/SysEvaluationRecordServiceImpl.java @@ -118,7 +118,7 @@ public class SysEvaluationRecordServiceImpl implements ISysEvaluationRecordServi Date createTime = sysEvaluationRecord.getCreateTime(); Date updateTime = sysEvaluationRecord.getUpdateTime(); wordData.setCreateTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, createTime)); - wordData.setUseTime(DateUtils.getDatePoor(createTime, updateTime)); + wordData.setUseTime(DateUtils.getDatePoor4MinSec(createTime, updateTime)); SysUserVo user = userMapper.selectUserById(userId); wordData.setNickName(user.getNickName()); @@ -135,7 +135,7 @@ public class SysEvaluationRecordServiceImpl implements ISysEvaluationRecordServi borderStyle.setSize(4); borderStyle.setType(XWPFTable.XWPFBorderType.SINGLE); RowRenderData factorHeader = Rows.of("名称", "包含题目", "原始分", "得分", "命中区间", "区间描述").bgColor("F2F2F2").center() - .textColor("7F7f7F").textFontFamily("Hei").textFontSize(9).create(); + .textColor("7F7f7F").textFontFamily("宋体").textFontSize(9).create(); TableRenderData factorTable = Tables.ofA4MediumWidth().addRow(factorHeader).border(borderStyle) .width(14.63d, null).center().create(); //一并处理数据 @@ -150,16 +150,29 @@ public class SysEvaluationRecordServiceImpl implements ISysEvaluationRecordServi StringBuilder range = new StringBuilder(); BigDecimal minValue = answerVo.getMinValue(); BigDecimal maxValue = answerVo.getMaxValue(); + boolean minFlag = false; + boolean maxFlag = false; if (minValue != null) { - range.append(minValue.doubleValue()); + minFlag = true; } - range.append("~"); if (maxValue != null) { - range.append(maxValue.doubleValue()); + maxFlag = true; + } + if (minFlag) { + if (maxFlag) { + range.append(minValue.doubleValue()); + range.append("-"); + range.append(maxValue.doubleValue()); + } else { + range.append(">=").append(minValue.doubleValue()); + } + } else { + range.append(maxValue.doubleValue()).append("<="); } //处理因子得分表格 RowRenderData one = Rows.of(answerVo.getFactorName(), answerVo.getQuestionNum().toString(), - answerVo.getTotalScore().toString(), answerVo.getScore().toString(), range.toString(), answerVo.getRangeName()).center().create(); + answerVo.getTotalScore().toString(), answerVo.getScore().toString(), range.toString(), answerVo.getRangeName()) + .textFontFamily("宋体").textFontSize(9).center().create(); factorTable.addRow(one); //处理测评结果 WordFactor wordFactor = new WordFactor(); @@ -169,7 +182,7 @@ public class SysEvaluationRecordServiceImpl implements ISysEvaluationRecordServi //判断激活,放到首位并添加建议 if (answerVo.getStatus() == 1) { factors.addFirst(wordFactor); - stringBuilder.append(HtmlUtil.cleanHtmlTag(answerVo.getEvalPropose())).append("\n"); + stringBuilder.append(HtmlUtil.cleanHtmlTag(answerVo.getEvalPropose())).append("\n").append("\n").append("\r"); } else { factors.add(wordFactor); } diff --git a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/SysScalePublishServiceImpl.java b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/SysScalePublishServiceImpl.java index 75add79..096fff4 100644 --- a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/SysScalePublishServiceImpl.java +++ b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/SysScalePublishServiceImpl.java @@ -28,6 +28,7 @@ import org.dromara.scale.domain.bo.BaseQueryBo; import org.dromara.scale.domain.bo.SysScalePublishBo; import org.dromara.scale.domain.vo.*; import org.dromara.scale.domain.word.PublishRecordWordData; +import org.dromara.scale.domain.word.WordClass; import org.dromara.scale.domain.word.WordWarn; import org.dromara.scale.mapper.SysEvaluationRecordMapper; import org.dromara.scale.mapper.SysScaleMapper; @@ -123,7 +124,7 @@ public class SysScalePublishServiceImpl implements ISysScalePublishService { int i = baseMapper.selectCountScalePublish(); String s = configService.selectConfigByKey("sys.publish.limit"); int limit = Integer.parseInt(s); - if(limit != -1 && i>=limit){ + if (limit != -1 && i >= limit) { throw new ServiceException("发布数量超出系统限制"); } LoginUser loginUser = getLoginUser(); @@ -350,11 +351,12 @@ public class SysScalePublishServiceImpl implements ISysScalePublishService { boolean warnChartFlag = warnNum == 0 && normalNum == 0; ChartSingleSeriesRenderData warnChart = Charts.ofSingleSeries(warnChartFlag ? "暂无数据" : "", new String[]{"触发预警(人)", "未触发预警(人)"}) .series("", new Integer[]{warnNum, normalNum}).create(); - wordData.setWarnChart(warnChart); + wordData.setWarnRecordChat(warnChart); ChartSingleSeriesRenderData classChart = Charts.ofSingleSeries("暂无数据", new String[]{"班级"}) .series("", new Integer[]{0}).create(); List warn4ClassList = recordMapper.selectWarn4Class(batchNo); + WordClass wordClass = null; if (ObjectUtil.isNotEmpty(warn4ClassList)) { Optional maxOptional = warn4ClassList.stream().max(Comparator.comparingInt(StatisticNumVo::getValue)); if (maxOptional.isPresent()) { @@ -363,49 +365,55 @@ public class SysScalePublishServiceImpl implements ISysScalePublishService { String classWarnName = max.getName(); int classWarnPercent = processHalfUpPercent(classWarnNum, personTotal); int classOtherNum = personTotal - classWarnNum; - wordData.setClassWarnName(classWarnName); - wordData.setClassWarnNum(String.valueOf(classWarnNum)); - wordData.setClassWarnPercent(classWarnPercent + "%"); + wordClass = new WordClass(); + wordClass.setClassWarnName(classWarnName); + wordClass.setClassWarnNum(String.valueOf(classWarnNum)); + wordClass.setClassWarnPercent(classWarnPercent + "%"); classChart = Charts.ofSingleSeries("", new String[]{classWarnName + "(人)", "其他(人)"}) .series("", new Integer[]{classWarnNum, classOtherNum}).create(); } } + wordData.setClassFlag(wordClass); wordData.setClassChart(classChart); List scaleIds = publishVo.getScaleIds(); List scaleNames = publishVo.getScaleNames(); int size = scaleIds.size(); - List warnList = warnMapper.selectUseConfig(); List wordWarnList = new ArrayList<>(size); for (int i = 0; i < size; i++) { BorderStyle borderStyle = new BorderStyle(); borderStyle.setColor("A6A6A6"); borderStyle.setSize(4); borderStyle.setType(XWPFTable.XWPFBorderType.SINGLE); - RowRenderData factorHeader = Rows.of("因子名称", "样本总数", "预警数").bgColor("F2F2F2").center() - .textColor("7F7f7F").textFontFamily("Hei").textFontSize(9).create(); + RowRenderData factorHeader = Rows.of("", "样本总数", "占比").bgColor("F2F2F2").center() + .textColor("7F7f7F").textFontFamily("宋体").textFontSize(9).create(); TableRenderData factorTable = Tables.ofA4MediumWidth().addRow(factorHeader).border(borderStyle) .width(14.63d, null).center().create(); String scaleName = scaleNames.get(i); String s = scaleIds.get(i); Long scaleId = Long.parseLong(s); - List factorList = recordMapper.selectFactorNum(batchNo, scaleId); - List factorWarnList = recordMapper.selectFactorWarnNum(batchNo, scaleId, warnList); - for (StatisticNumVo factor : factorList) { - for (StatisticNumVo factorWarn : factorWarnList) { - if (factor.getName().equals(factorWarn.getName())) { - factor.setSpareValue(factorWarn.getValue()); - } - } - } - for (StatisticNumVo factor : factorList) { - RowRenderData one = Rows.of(factor.getName(), String.valueOf(factor.getValue()), - String.valueOf(factor.getSpareValue())).textFontFamily("Hei").textFontSize(9).center().create(); + List factorWarnList = recordMapper.selectFactorWarnNum(batchNo, scaleId); + int warnSize = factorWarnList.size(); + String[] strings = new String[warnSize]; + Integer[] integers = new Integer[warnSize]; + for (int j = 0; j < warnSize; j++) { + StatisticNumVo factor = factorWarnList.get(j); + int value = factor.getValue(); + int valuePercent = processHalfUpPercent(value, personTotal); + RowRenderData one = Rows.of(factor.getName(), String.valueOf(value), valuePercent + "%") + .textFontFamily("宋体").textFontSize(9).center().create(); factorTable.addRow(one); + strings[j] = factor.getName(); + integers[j] = value; } + ChartMultiSeriesRenderData chart = Charts + .ofMultiSeries("", strings) + .addSeries("样本数", integers) + .create(); WordWarn wordWarn = new WordWarn(); wordWarn.setScaleName(scaleName); wordWarn.setWarnTable(factorTable); + wordWarn.setWarnChart(chart); wordWarnList.add(wordWarn); } wordData.setWarnCharts(wordWarnList); diff --git a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/WebServiceImpl.java b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/WebServiceImpl.java index 4f6d9b6..3e6d858 100644 --- a/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/WebServiceImpl.java +++ b/ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/WebServiceImpl.java @@ -224,7 +224,7 @@ public class WebServiceImpl implements IWebService { evalConclusion.setRecordId(recordId); evalConclusion.setStatus(StatusEnum.DISABLED.getValue()); evalConclusion.setScore(BigDecimal.ZERO); - list.add(evalConclusion); + List questionNum = questionMapByFactor.get(factorId.toString()); List questionIds = new ArrayList<>(); @@ -307,7 +307,10 @@ public class WebServiceImpl implements IWebService { } if (used.contains(evalConclusion.getSituation())) { evalConclusion.setWarnStatus(1); + }else { + evalConclusion.setWarnStatus(0); } + list.add(evalConclusion); } //处理维度问题及status //量表 diff --git a/ruoyi-modules/rouyi-scale/src/main/resources/mapper/scale/SysEvaluationRecordMapper.xml b/ruoyi-modules/rouyi-scale/src/main/resources/mapper/scale/SysEvaluationRecordMapper.xml index d412966..e32c1c8 100644 --- a/ruoyi-modules/rouyi-scale/src/main/resources/mapper/scale/SysEvaluationRecordMapper.xml +++ b/ruoyi-modules/rouyi-scale/src/main/resources/mapper/scale/SysEvaluationRecordMapper.xml @@ -91,23 +91,12 @@ GROUP BY d.dept_id - - diff --git a/ruoyi-modules/rouyi-scale/src/main/resources/word/groupTemplate.docx b/ruoyi-modules/rouyi-scale/src/main/resources/word/groupTemplate.docx index f50287f..afc31c1 100644 Binary files a/ruoyi-modules/rouyi-scale/src/main/resources/word/groupTemplate.docx and b/ruoyi-modules/rouyi-scale/src/main/resources/word/groupTemplate.docx differ diff --git a/ruoyi-modules/rouyi-scale/src/main/resources/word/personalTemplate.docx b/ruoyi-modules/rouyi-scale/src/main/resources/word/personalTemplate.docx index 056d977..8071516 100644 Binary files a/ruoyi-modules/rouyi-scale/src/main/resources/word/personalTemplate.docx and b/ruoyi-modules/rouyi-scale/src/main/resources/word/personalTemplate.docx differ