模板格式优化

This commit is contained in:
cjw 2024-05-23 15:54:39 +08:00
parent 98f721ecd7
commit bc3c0669d2
11 changed files with 89 additions and 50 deletions

View File

@ -156,6 +156,17 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
return hour + "小时" + min + "分钟" + sec + ""; 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 * 增加 LocalDateTime ==> Date
*/ */
@ -190,5 +201,4 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
} }
return list; return list;
} }
} }

View File

@ -42,11 +42,9 @@ public class PublishRecordWordData {
private String warnPercent; private String warnPercent;
private String normalNum; private String normalNum;
private String normalPercent; private String normalPercent;
private ChartSingleSeriesRenderData warnChart; private ChartSingleSeriesRenderData warnRecordChat;
private String classWarnName; private WordClass classFlag;
private String classWarnNum;
private String classWarnPercent;
private ChartSingleSeriesRenderData classChart; private ChartSingleSeriesRenderData classChart;
private List<WordWarn> warnCharts; private List<WordWarn> warnCharts;

View File

@ -0,0 +1,17 @@
package org.dromara.scale.domain.word;
import lombok.Data;
/**
* <p>TODO<p>
*
* @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;
}

View File

@ -1,5 +1,6 @@
package org.dromara.scale.domain.word; package org.dromara.scale.domain.word;
import com.deepoove.poi.data.ChartMultiSeriesRenderData;
import com.deepoove.poi.data.TableRenderData; import com.deepoove.poi.data.TableRenderData;
import lombok.Data; import lombok.Data;
@ -16,4 +17,5 @@ public class WordWarn {
private String scaleName; private String scaleName;
private TableRenderData warnTable; private TableRenderData warnTable;
private ChartMultiSeriesRenderData warnChart;
} }

View File

@ -43,8 +43,7 @@ public interface SysEvaluationRecordMapper extends BaseMapperPlus<SysEvaluationR
List<StatisticNumVo> selectWarn4Class(Long batchNo); List<StatisticNumVo> selectWarn4Class(Long batchNo);
List<StatisticNumVo> selectFactorNum(@Param("batchNo") Long batchNo, @Param("scaleId") Long scaleId); List<StatisticNumVo> selectFactorWarnNum(@Param("batchNo") Long batchNo, @Param("scaleId") Long scaleId);
List<StatisticNumVo> selectFactorWarnNum(@Param("batchNo") Long batchNo, @Param("scaleId") Long scaleId,@Param("list")List<Integer> warnList);
int selectUndoneNumByBatchNoAndUserId(@Param("batchNo") Long batchNo,@Param("userId") Long userId); int selectUndoneNumByBatchNoAndUserId(@Param("batchNo") Long batchNo,@Param("userId") Long userId);

View File

@ -118,7 +118,7 @@ public class SysEvaluationRecordServiceImpl implements ISysEvaluationRecordServi
Date createTime = sysEvaluationRecord.getCreateTime(); Date createTime = sysEvaluationRecord.getCreateTime();
Date updateTime = sysEvaluationRecord.getUpdateTime(); Date updateTime = sysEvaluationRecord.getUpdateTime();
wordData.setCreateTime(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, createTime)); 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); SysUserVo user = userMapper.selectUserById(userId);
wordData.setNickName(user.getNickName()); wordData.setNickName(user.getNickName());
@ -135,7 +135,7 @@ public class SysEvaluationRecordServiceImpl implements ISysEvaluationRecordServi
borderStyle.setSize(4); borderStyle.setSize(4);
borderStyle.setType(XWPFTable.XWPFBorderType.SINGLE); borderStyle.setType(XWPFTable.XWPFBorderType.SINGLE);
RowRenderData factorHeader = Rows.of("名称", "包含题目", "原始分", "得分", "命中区间", "区间描述").bgColor("F2F2F2").center() 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) TableRenderData factorTable = Tables.ofA4MediumWidth().addRow(factorHeader).border(borderStyle)
.width(14.63d, null).center().create(); .width(14.63d, null).center().create();
//一并处理数据 //一并处理数据
@ -150,16 +150,29 @@ public class SysEvaluationRecordServiceImpl implements ISysEvaluationRecordServi
StringBuilder range = new StringBuilder(); StringBuilder range = new StringBuilder();
BigDecimal minValue = answerVo.getMinValue(); BigDecimal minValue = answerVo.getMinValue();
BigDecimal maxValue = answerVo.getMaxValue(); BigDecimal maxValue = answerVo.getMaxValue();
boolean minFlag = false;
boolean maxFlag = false;
if (minValue != null) { if (minValue != null) {
range.append(minValue.doubleValue()); minFlag = true;
} }
range.append("~");
if (maxValue != null) { if (maxValue != null) {
maxFlag = true;
}
if (minFlag) {
if (maxFlag) {
range.append(minValue.doubleValue());
range.append("-");
range.append(maxValue.doubleValue()); 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(), 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); factorTable.addRow(one);
//处理测评结果 //处理测评结果
WordFactor wordFactor = new WordFactor(); WordFactor wordFactor = new WordFactor();
@ -169,7 +182,7 @@ public class SysEvaluationRecordServiceImpl implements ISysEvaluationRecordServi
//判断激活放到首位并添加建议 //判断激活放到首位并添加建议
if (answerVo.getStatus() == 1) { if (answerVo.getStatus() == 1) {
factors.addFirst(wordFactor); factors.addFirst(wordFactor);
stringBuilder.append(HtmlUtil.cleanHtmlTag(answerVo.getEvalPropose())).append("\n"); stringBuilder.append(HtmlUtil.cleanHtmlTag(answerVo.getEvalPropose())).append("\n").append("\n").append("\r");
} else { } else {
factors.add(wordFactor); factors.add(wordFactor);
} }

View File

@ -28,6 +28,7 @@ import org.dromara.scale.domain.bo.BaseQueryBo;
import org.dromara.scale.domain.bo.SysScalePublishBo; import org.dromara.scale.domain.bo.SysScalePublishBo;
import org.dromara.scale.domain.vo.*; import org.dromara.scale.domain.vo.*;
import org.dromara.scale.domain.word.PublishRecordWordData; 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.domain.word.WordWarn;
import org.dromara.scale.mapper.SysEvaluationRecordMapper; import org.dromara.scale.mapper.SysEvaluationRecordMapper;
import org.dromara.scale.mapper.SysScaleMapper; import org.dromara.scale.mapper.SysScaleMapper;
@ -350,11 +351,12 @@ public class SysScalePublishServiceImpl implements ISysScalePublishService {
boolean warnChartFlag = warnNum == 0 && normalNum == 0; boolean warnChartFlag = warnNum == 0 && normalNum == 0;
ChartSingleSeriesRenderData warnChart = Charts.ofSingleSeries(warnChartFlag ? "暂无数据" : "", new String[]{"触发预警(人)", "未触发预警(人)"}) ChartSingleSeriesRenderData warnChart = Charts.ofSingleSeries(warnChartFlag ? "暂无数据" : "", new String[]{"触发预警(人)", "未触发预警(人)"})
.series("", new Integer[]{warnNum, normalNum}).create(); .series("", new Integer[]{warnNum, normalNum}).create();
wordData.setWarnChart(warnChart); wordData.setWarnRecordChat(warnChart);
ChartSingleSeriesRenderData classChart = Charts.ofSingleSeries("暂无数据", new String[]{"班级"}) ChartSingleSeriesRenderData classChart = Charts.ofSingleSeries("暂无数据", new String[]{"班级"})
.series("", new Integer[]{0}).create(); .series("", new Integer[]{0}).create();
List<StatisticNumVo> warn4ClassList = recordMapper.selectWarn4Class(batchNo); List<StatisticNumVo> warn4ClassList = recordMapper.selectWarn4Class(batchNo);
WordClass wordClass = null;
if (ObjectUtil.isNotEmpty(warn4ClassList)) { if (ObjectUtil.isNotEmpty(warn4ClassList)) {
Optional<StatisticNumVo> maxOptional = warn4ClassList.stream().max(Comparator.comparingInt(StatisticNumVo::getValue)); Optional<StatisticNumVo> maxOptional = warn4ClassList.stream().max(Comparator.comparingInt(StatisticNumVo::getValue));
if (maxOptional.isPresent()) { if (maxOptional.isPresent()) {
@ -363,49 +365,55 @@ public class SysScalePublishServiceImpl implements ISysScalePublishService {
String classWarnName = max.getName(); String classWarnName = max.getName();
int classWarnPercent = processHalfUpPercent(classWarnNum, personTotal); int classWarnPercent = processHalfUpPercent(classWarnNum, personTotal);
int classOtherNum = personTotal - classWarnNum; int classOtherNum = personTotal - classWarnNum;
wordData.setClassWarnName(classWarnName); wordClass = new WordClass();
wordData.setClassWarnNum(String.valueOf(classWarnNum)); wordClass.setClassWarnName(classWarnName);
wordData.setClassWarnPercent(classWarnPercent + "%"); wordClass.setClassWarnNum(String.valueOf(classWarnNum));
wordClass.setClassWarnPercent(classWarnPercent + "%");
classChart = Charts.ofSingleSeries("", new String[]{classWarnName + "(人)", "其他(人)"}) classChart = Charts.ofSingleSeries("", new String[]{classWarnName + "(人)", "其他(人)"})
.series("", new Integer[]{classWarnNum, classOtherNum}).create(); .series("", new Integer[]{classWarnNum, classOtherNum}).create();
} }
} }
wordData.setClassFlag(wordClass);
wordData.setClassChart(classChart); wordData.setClassChart(classChart);
List<String> scaleIds = publishVo.getScaleIds(); List<String> scaleIds = publishVo.getScaleIds();
List<String> scaleNames = publishVo.getScaleNames(); List<String> scaleNames = publishVo.getScaleNames();
int size = scaleIds.size(); int size = scaleIds.size();
List<Integer> warnList = warnMapper.selectUseConfig();
List<WordWarn> wordWarnList = new ArrayList<>(size); List<WordWarn> wordWarnList = new ArrayList<>(size);
for (int i = 0; i < size; i++) { for (int i = 0; i < size; i++) {
BorderStyle borderStyle = new BorderStyle(); BorderStyle borderStyle = new BorderStyle();
borderStyle.setColor("A6A6A6"); borderStyle.setColor("A6A6A6");
borderStyle.setSize(4); borderStyle.setSize(4);
borderStyle.setType(XWPFTable.XWPFBorderType.SINGLE); borderStyle.setType(XWPFTable.XWPFBorderType.SINGLE);
RowRenderData factorHeader = Rows.of("因子名称", "样本总数", "预警数").bgColor("F2F2F2").center() 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) TableRenderData factorTable = Tables.ofA4MediumWidth().addRow(factorHeader).border(borderStyle)
.width(14.63d, null).center().create(); .width(14.63d, null).center().create();
String scaleName = scaleNames.get(i); String scaleName = scaleNames.get(i);
String s = scaleIds.get(i); String s = scaleIds.get(i);
Long scaleId = Long.parseLong(s); Long scaleId = Long.parseLong(s);
List<StatisticNumVo> factorList = recordMapper.selectFactorNum(batchNo, scaleId); List<StatisticNumVo> factorWarnList = recordMapper.selectFactorWarnNum(batchNo, scaleId);
List<StatisticNumVo> factorWarnList = recordMapper.selectFactorWarnNum(batchNo, scaleId, warnList); int warnSize = factorWarnList.size();
for (StatisticNumVo factor : factorList) { String[] strings = new String[warnSize];
for (StatisticNumVo factorWarn : factorWarnList) { Integer[] integers = new Integer[warnSize];
if (factor.getName().equals(factorWarn.getName())) { for (int j = 0; j < warnSize; j++) {
factor.setSpareValue(factorWarn.getValue()); StatisticNumVo factor = factorWarnList.get(j);
} int value = factor.getValue();
} int valuePercent = processHalfUpPercent(value, personTotal);
} RowRenderData one = Rows.of(factor.getName(), String.valueOf(value), valuePercent + "%")
for (StatisticNumVo factor : factorList) { .textFontFamily("宋体").textFontSize(9).center().create();
RowRenderData one = Rows.of(factor.getName(), String.valueOf(factor.getValue()),
String.valueOf(factor.getSpareValue())).textFontFamily("Hei").textFontSize(9).center().create();
factorTable.addRow(one); factorTable.addRow(one);
strings[j] = factor.getName();
integers[j] = value;
} }
ChartMultiSeriesRenderData chart = Charts
.ofMultiSeries("", strings)
.addSeries("样本数", integers)
.create();
WordWarn wordWarn = new WordWarn(); WordWarn wordWarn = new WordWarn();
wordWarn.setScaleName(scaleName); wordWarn.setScaleName(scaleName);
wordWarn.setWarnTable(factorTable); wordWarn.setWarnTable(factorTable);
wordWarn.setWarnChart(chart);
wordWarnList.add(wordWarn); wordWarnList.add(wordWarn);
} }
wordData.setWarnCharts(wordWarnList); wordData.setWarnCharts(wordWarnList);

View File

@ -224,7 +224,7 @@ public class WebServiceImpl implements IWebService {
evalConclusion.setRecordId(recordId); evalConclusion.setRecordId(recordId);
evalConclusion.setStatus(StatusEnum.DISABLED.getValue()); evalConclusion.setStatus(StatusEnum.DISABLED.getValue());
evalConclusion.setScore(BigDecimal.ZERO); evalConclusion.setScore(BigDecimal.ZERO);
list.add(evalConclusion);
List<String> questionNum = questionMapByFactor.get(factorId.toString()); List<String> questionNum = questionMapByFactor.get(factorId.toString());
List<String> questionIds = new ArrayList<>(); List<String> questionIds = new ArrayList<>();
@ -307,7 +307,10 @@ public class WebServiceImpl implements IWebService {
} }
if (used.contains(evalConclusion.getSituation())) { if (used.contains(evalConclusion.getSituation())) {
evalConclusion.setWarnStatus(1); evalConclusion.setWarnStatus(1);
}else {
evalConclusion.setWarnStatus(0);
} }
list.add(evalConclusion);
} }
//处理维度问题及status //处理维度问题及status
//量表 //量表

View File

@ -91,23 +91,12 @@
GROUP BY d.dept_id GROUP BY d.dept_id
</select> </select>
<select id="selectFactorNum" resultType="org.dromara.scale.domain.vo.StatisticNumVo">
select sf.factor_name as `name`, count(er.record_id) as `value`, 0 as spareValue
from sys_scale_factor sf
left join sys_evaluation_record er
on er.scale_id = sf.scale_id and er.status = 1 and er.batch_no = #{batchNo}
where sf.scale_id = #{scaleId}
group by sf.factor_id
</select>
<select id="selectFactorWarnNum" resultType="org.dromara.scale.domain.vo.StatisticNumVo"> <select id="selectFactorWarnNum" resultType="org.dromara.scale.domain.vo.StatisticNumVo">
select sf.factor_name as `name`, count(er.record_id) as `value` select sf.factor_name as `name`, count(ec.id) as `value`
from sys_scale_factor sf from sys_scale_factor sf
left join sys_evaluation_conclusion ec on ec.factor_id = sf.factor_id and ec.status = 1 and ec.situation in left join sys_evaluation_record er on er.scale_id = sf.scale_id and er.batch_no = #{batchNo}
<foreach item="situation" collection="list" open="(" separator="," close=")"> left join sys_evaluation_conclusion ec
#{situation} on ec.record_id = er.record_id and ec.factor_id = sf.factor_id and ec.warn_status = 1
</foreach>
left join sys_evaluation_record er on er.record_id = ec.record_id and er.status = 1 and er.batch_no = #{batchNo}
where sf.scale_id = #{scaleId} where sf.scale_id = #{scaleId}
group by sf.factor_id group by sf.factor_id
</select> </select>