模板格式优化

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 + "";
}
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;
}
}

View File

@ -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<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;
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;
}

View File

@ -43,8 +43,7 @@ public interface SysEvaluationRecordMapper extends BaseMapperPlus<SysEvaluationR
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,@Param("list")List<Integer> warnList);
List<StatisticNumVo> selectFactorWarnNum(@Param("batchNo") Long batchNo, @Param("scaleId") Long scaleId);
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 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);
}

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.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<StatisticNumVo> warn4ClassList = recordMapper.selectWarn4Class(batchNo);
WordClass wordClass = null;
if (ObjectUtil.isNotEmpty(warn4ClassList)) {
Optional<StatisticNumVo> 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<String> scaleIds = publishVo.getScaleIds();
List<String> scaleNames = publishVo.getScaleNames();
int size = scaleIds.size();
List<Integer> warnList = warnMapper.selectUseConfig();
List<WordWarn> 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<StatisticNumVo> factorList = recordMapper.selectFactorNum(batchNo, scaleId);
List<StatisticNumVo> 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<StatisticNumVo> 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);

View File

@ -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<String> questionNum = questionMapByFactor.get(factorId.toString());
List<String> 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
//量表

View File

@ -91,23 +91,12 @@
GROUP BY d.dept_id
</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 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
left join sys_evaluation_conclusion ec on ec.factor_id = sf.factor_id and ec.status = 1 and ec.situation in
<foreach item="situation" collection="list" open="(" separator="," close=")">
#{situation}
</foreach>
left join sys_evaluation_record er on er.record_id = ec.record_id and er.status = 1 and er.batch_no = #{batchNo}
left join sys_evaluation_record er on er.scale_id = sf.scale_id and er.batch_no = #{batchNo}
left join sys_evaluation_conclusion ec
on ec.record_id = er.record_id and ec.factor_id = sf.factor_id and ec.warn_status = 1
where sf.scale_id = #{scaleId}
group by sf.factor_id
</select>