Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
jiangzhe 2024-05-14 11:55:47 +08:00
commit 5c7fe24b18
12 changed files with 161 additions and 41 deletions

View File

@ -51,6 +51,11 @@ public class SysEvaluationConclusion {
*/ */
private Long factorRangeId; private Long factorRangeId;
/**
* 风险等级
*/
private Integer situation;
/** /**
* 0:未命中1:命中若命中则测评人符合该测评项未命中则测评人不符合测评项 * 0:未命中1:命中若命中则测评人符合该测评项未命中则测评人不符合测评项
*/ */

View File

@ -66,6 +66,11 @@ public class SysScalePublishVo implements Serializable {
*/ */
private Integer allowQueryResult; private Integer allowQueryResult;
/**
* 0个测 1普测
*/
private Integer publishType;
private Long createBy; private Long createBy;
private String createName; private String createName;

View File

@ -30,6 +30,7 @@ public class PublishRecordWordData {
private String femalePercent; private String femalePercent;
private ChartSingleSeriesRenderData sexChart; private ChartSingleSeriesRenderData sexChart;
private String recordNum;
private String completeNum; private String completeNum;
private String completePercent; private String completePercent;
private String undoneNum; private String undoneNum;
@ -46,7 +47,6 @@ public class PublishRecordWordData {
private String classWarnNum; private String classWarnNum;
private String classWarnPercent; private String classWarnPercent;
private ChartSingleSeriesRenderData classChart; private ChartSingleSeriesRenderData classChart;
private List<WordWarn> warnCharts; private List<WordWarn> warnCharts;

View File

@ -1,10 +1,10 @@
package org.dromara.scale.domain.word; package org.dromara.scale.domain.word;
import com.deepoove.poi.data.ChartSingleSeriesRenderData; import com.deepoove.poi.data.TableRenderData;
import lombok.Data; import lombok.Data;
/** /**
* <p>TODO<p> * <p>量表的因子和预警<p>
* *
* @author cjw * @author cjw
* @version V1.0.0 * @version V1.0.0
@ -15,5 +15,5 @@ public class WordWarn {
private String scaleName; private String scaleName;
private ChartSingleSeriesRenderData warnChart; private TableRenderData warnTable;
} }

View File

@ -8,10 +8,10 @@ import org.apache.ibatis.annotations.Param;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.scale.domain.SysEvaluationRecord; import org.dromara.scale.domain.SysEvaluationRecord;
import org.dromara.scale.domain.vo.StatisticNumVo; import org.dromara.scale.domain.vo.StatisticNumVo;
import org.dromara.scale.domain.vo.SysScaleVo;
import org.dromara.scale.domain.word.WordEvaluationFactor;
import org.dromara.scale.domain.vo.SysEvaluationRecordVo; import org.dromara.scale.domain.vo.SysEvaluationRecordVo;
import org.dromara.scale.domain.vo.SysScalePublishVo; import org.dromara.scale.domain.vo.SysScalePublishVo;
import org.dromara.scale.domain.vo.SysScaleVo;
import org.dromara.scale.domain.word.WordEvaluationFactor;
import java.util.List; import java.util.List;
@ -37,9 +37,13 @@ public interface SysEvaluationRecordMapper extends BaseMapperPlus<SysEvaluationR
int deleteByBatchNo(Long batchNo); int deleteByBatchNo(Long batchNo);
int selectCompleteNumByBatchNo(Long batchNo); int selectCompleteNumByBatchNo(Long batchNo);
int selectUndoneNumByBatchNo(Long batchNo);
int selectWarnNumByBatchNo(Long batchNo); int selectWarnNumByBatchNo(Long batchNo);
List<StatisticNumVo> selectMaxWarnNumByBatchNo(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,@Param("list")List<Integer> warnList);
} }

View File

@ -5,8 +5,10 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.data.*; import com.deepoove.poi.data.*;
import com.deepoove.poi.data.style.BorderStyle; import com.deepoove.poi.data.style.BorderStyle;
import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.poi.xwpf.usermodel.XWPFTable; import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.dromara.common.core.utils.DateUtils; import org.dromara.common.core.utils.DateUtils;
@ -50,8 +52,6 @@ public class SysEvaluationRecordServiceImpl implements ISysEvaluationRecordServi
private final SysScaleMapper scaleMapper; private final SysScaleMapper scaleMapper;
private final String resource = "word/personalTemplate.docx";
/** /**
* 查询量测记录 * 查询量测记录
*/ */
@ -168,7 +168,9 @@ public class SysEvaluationRecordServiceImpl implements ISysEvaluationRecordServi
.create(); .create();
wordData.setRadarChart(chart); wordData.setRadarChart(chart);
wordData.setPropose(stringBuilder.toString()); wordData.setPropose(stringBuilder.toString());
ClassPathResource classPathResource = new ClassPathResource(resource); ClassPathResource classPathResource = new ClassPathResource("word/personalTemplate.docx");
return XWPFTemplate.compile(classPathResource.getInputStream()).render(wordData); Configure config = Configure.builder()
.bind("factors", new LoopRowTableRenderPolicy()).useSpringEL().build();
return XWPFTemplate.compile(classPathResource.getInputStream(),config).render(wordData);
} }
} }

View File

@ -6,9 +6,12 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.data.ChartSingleSeriesRenderData; import com.deepoove.poi.config.Configure;
import com.deepoove.poi.data.Charts; import com.deepoove.poi.data.*;
import com.deepoove.poi.data.style.BorderStyle;
import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.DateUtils; import org.dromara.common.core.utils.DateUtils;
@ -24,14 +27,17 @@ 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.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;
import org.dromara.scale.mapper.SysScalePublishMapper; import org.dromara.scale.mapper.SysScalePublishMapper;
import org.dromara.scale.mapper.SysWarnRecordMapper;
import org.dromara.scale.service.ISysScalePublishService; import org.dromara.scale.service.ISysScalePublishService;
import org.dromara.system.domain.SysUser; import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.vo.SysDeptVo; import org.dromara.system.domain.vo.SysDeptVo;
import org.dromara.system.mapper.SysDeptMapper; import org.dromara.system.mapper.SysDeptMapper;
import org.dromara.system.mapper.SysUserMapper; import org.dromara.system.mapper.SysUserMapper;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.io.IOException; import java.io.IOException;
@ -64,6 +70,8 @@ public class SysScalePublishServiceImpl implements ISysScalePublishService {
private final SysUserMapper userMapper; private final SysUserMapper userMapper;
private final SysWarnRecordMapper warnMapper;
/** /**
* 查询量发布 * 查询量发布
*/ */
@ -273,6 +281,9 @@ public class SysScalePublishServiceImpl implements ISysScalePublishService {
PublishRecordWordData wordData = new PublishRecordWordData(); PublishRecordWordData wordData = new PublishRecordWordData();
SysScalePublishVo publishVo = baseMapper.selectVoById(batchNo); SysScalePublishVo publishVo = baseMapper.selectVoById(batchNo);
if (publishVo.getPublishType() != 1) {
throw new ServerException("团体报告导出不支持普测发布以外的发布");
}
wordData.setSessionName(publishVo.getSessionName()); wordData.setSessionName(publishVo.getSessionName());
Date createTime = publishVo.getCreateTime(); Date createTime = publishVo.getCreateTime();
@ -287,6 +298,7 @@ public class SysScalePublishServiceImpl implements ISysScalePublishService {
int maleNum = numVo.getValue(); int maleNum = numVo.getValue();
int femaleNum = numVo.getSpareValue(); int femaleNum = numVo.getSpareValue();
int personTotal = maleNum + femaleNum; int personTotal = maleNum + femaleNum;
wordData.setPersonNum(String.valueOf(personTotal));
int malePercent = processHalfUpPercent(maleNum, personTotal); int malePercent = processHalfUpPercent(maleNum, personTotal);
int femalePercent = processHalfUpPercent(femaleNum, personTotal); int femalePercent = processHalfUpPercent(femaleNum, personTotal);
wordData.setMaleNum(String.valueOf(maleNum)); wordData.setMaleNum(String.valueOf(maleNum));
@ -298,20 +310,22 @@ public class SysScalePublishServiceImpl implements ISysScalePublishService {
wordData.setSexChart(sexChart); wordData.setSexChart(sexChart);
int completeNum = recordMapper.selectCompleteNumByBatchNo(batchNo); int completeNum = recordMapper.selectCompleteNumByBatchNo(batchNo);
int completePercent = processHalfUpPercent(completeNum, personTotal); int undoneNum = recordMapper.selectUndoneNumByBatchNo(batchNo);
int undoneNum = personTotal - completeNum; int recordNum = completeNum + undoneNum;
int undonePercent = processHalfUpPercent(undoneNum, personTotal); int completePercent = processHalfUpPercent(completeNum, recordNum);
int undonePercent = processHalfUpPercent(undoneNum, recordNum);
wordData.setRecordNum(String.valueOf(recordNum));
wordData.setCompleteNum(String.valueOf(completeNum)); wordData.setCompleteNum(String.valueOf(completeNum));
wordData.setCompletePercent(completePercent + "%"); wordData.setCompletePercent(completePercent + "%");
wordData.setUndoneNum(String.valueOf(undoneNum)); wordData.setUndoneNum(String.valueOf(undoneNum));
wordData.setUndonePercent(undonePercent + "%"); wordData.setUndonePercent(undonePercent + "%");
ChartSingleSeriesRenderData completeChart = Charts.ofSingleSeries("", new String[]{"完成计划(人)", "未完成计划(人)"}) ChartSingleSeriesRenderData completeChart = Charts.ofSingleSeries("", new String[]{"完成测试(次)", "未完成测试(次)"})
.series("", new Integer[]{completeNum, undoneNum}).create(); .series("", new Integer[]{completeNum, undoneNum}).create();
wordData.setCompleteChart(completeChart); wordData.setCompleteChart(completeChart);
int warnNum = recordMapper.selectWarnNumByBatchNo(batchNo); int warnNum = recordMapper.selectWarnNumByBatchNo(batchNo);
int warnPercent = processHalfUpPercent(warnNum, personTotal); int warnPercent = processHalfUpPercent(warnNum, personTotal);
int normalNum = personTotal - completeNum; int normalNum = personTotal - warnNum;
int normalPercent = processHalfUpPercent(normalNum, personTotal); int normalPercent = processHalfUpPercent(normalNum, personTotal);
wordData.setWarnNum(String.valueOf(warnNum)); wordData.setWarnNum(String.valueOf(warnNum));
wordData.setWarnPercent(warnPercent + "%"); wordData.setWarnPercent(warnPercent + "%");
@ -321,24 +335,77 @@ public class SysScalePublishServiceImpl implements ISysScalePublishService {
.series("", new Integer[]{warnNum, normalNum}).create(); .series("", new Integer[]{warnNum, normalNum}).create();
wordData.setWarnChart(warnChart); wordData.setWarnChart(warnChart);
List<StatisticNumVo> maxList = recordMapper.selectMaxWarnNumByBatchNo(batchNo); ChartSingleSeriesRenderData classChart = Charts.ofSingleSeries("暂无数据", new String[]{"班级"})
Optional<StatisticNumVo> max = maxList.stream().max(Comparator.comparingInt(StatisticNumVo::getValue)); .series("", new Integer[]{0}).create();
if (max.isPresent()) { ;
StatisticNumVo classVo = max.get(); List<StatisticNumVo> warn4ClassList = recordMapper.selectWarn4Class(batchNo);
String classWarnName = classVo.getName(); if (ObjectUtil.isNotEmpty(warn4ClassList)) {
int classWarnNum = classVo.getValue(); Optional<StatisticNumVo> maxOptional = warn4ClassList.stream().max(Comparator.comparingInt(StatisticNumVo::getValue));
if (maxOptional.isPresent()) {
StatisticNumVo max = maxOptional.get();
int classWarnNum = max.getValue();
String classWarnName = max.getName();
int classWarnPercent = processHalfUpPercent(classWarnNum, personTotal); int classWarnPercent = processHalfUpPercent(classWarnNum, personTotal);
int otherNum = personTotal - classWarnNum; int classOtherNum = personTotal - classWarnNum;
// WordClassWarn flag = new WordClassWarn();
// wordData.setFlag(flag);
// flag.setClassWarnName(classWarnName);
// flag.setClassWarnNum(String.valueOf(classWarnNum));
// flag.setClassWarnPercent(classWarnPercent + "%");
// ChartSingleSeriesRenderData classChart = Charts.ofSingleSeries("", new String[]{classWarnName + "(人)", "其他(人)"})
// .series("", new Integer[]{classWarnNum, classOtherNum}).create();
// flag.setClassChart(classChart);
wordData.setClassWarnName(classWarnName); wordData.setClassWarnName(classWarnName);
wordData.setClassWarnNum(String.valueOf(classWarnNum)); wordData.setClassWarnNum(String.valueOf(classWarnNum));
wordData.setClassWarnPercent(classWarnPercent + "%"); wordData.setClassWarnPercent(classWarnPercent + "%");
ChartSingleSeriesRenderData classChart = Charts.ofSingleSeries("", new String[]{classWarnName + "(人)", "其他(人)"}) classChart = Charts.ofSingleSeries("", new String[]{classWarnName + "(人)", "其他(人)"})
.series("", new Integer[]{classWarnNum, otherNum}).create(); .series("", new Integer[]{classWarnNum, classOtherNum}).create();
wordData.setClassChart(classChart);
} }
}
wordData.setClassChart(classChart);
List<String> scaleIds = publishVo.getScaleIds();
return null; 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();
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())).center().create();
factorTable.addRow(one);
}
WordWarn wordWarn = new WordWarn();
wordWarn.setScaleName(scaleName);
wordWarn.setWarnTable(factorTable);
wordWarnList.add(wordWarn);
}
wordData.setWarnCharts(wordWarnList);
ClassPathResource classPathResource = new ClassPathResource("word/groupTemplate.docx");
Configure config = Configure.builder()
.bind("warnCharts", new LoopRowTableRenderPolicy()).useSpringEL().build();
return XWPFTemplate.compile(classPathResource.getInputStream(), config).render(wordData);
} }
private int processHalfUpPercent(int num, int total) { private int processHalfUpPercent(int num, int total) {

View File

@ -193,7 +193,7 @@ public class WebServiceImpl implements IWebService {
.map(SysEvaluationConclusionVo::getScore) .map(SysEvaluationConclusionVo::getScore)
// 使用reduce()聚合函数,得到金额总和 // 使用reduce()聚合函数,得到金额总和
.reduce(BigDecimal.ZERO, BigDecimal::add); .reduce(BigDecimal.ZERO, BigDecimal::add);
return new HashMap<>() {{ return new HashMap<>(2) {{
//put("evalRecordId",evalRecord.getId()); //put("evalRecordId",evalRecord.getId());
//put("scaleName",scaleInfo.getName()); //put("scaleName",scaleInfo.getName());
put("totalScore", totalScore.doubleValue()); put("totalScore", totalScore.doubleValue());

View File

@ -35,14 +35,14 @@
</select> </select>
<select id="selectStatisticFactor" resultType="org.dromara.scale.domain.vo.StatisticFactorVo"> <select id="selectStatisticFactor" resultType="org.dromara.scale.domain.vo.StatisticFactorVo">
select sfr.range_name as `factorName`, select sf.factor_name as `factorName`,
d.dept_name, d.dept_name,
parent.dept_name as `parentName` parent.dept_name as `parentName`
from sys_evaluation_record er from sys_evaluation_record er
left join sys_dept d on d.dept_id = er.dept_id left join sys_dept d on d.dept_id = er.dept_id
left join sys_dept parent on parent.dept_id = d.parent_id left join sys_dept parent on parent.dept_id = d.parent_id
left join sys_evaluation_conclusion ec on ec.record_id = er.record_id left join sys_evaluation_conclusion ec on ec.record_id = er.record_id
left join sys_scale_factor_range sfr on sfr.range_id = ec.factor_range_id left join sys_scale_factor sf on sf.factor_id = ec.factor_id
where er.batch_no = #{batchNo} where er.batch_no = #{batchNo}
and er.scale_id = #{scaleId} and er.scale_id = #{scaleId}
and er.status = 1 and er.status = 1

View File

@ -66,6 +66,12 @@
where batch_no = #{batchNo} where batch_no = #{batchNo}
and status = 1 and status = 1
</select> </select>
<select id="selectUndoneNumByBatchNo" resultType="int">
select count(*)
from sys_evaluation_record
where batch_no = #{batchNo}
and status &lt; 1
</select>
<select id="selectWarnNumByBatchNo" resultType="int"> <select id="selectWarnNumByBatchNo" resultType="int">
select count(*) select count(*)
@ -73,11 +79,41 @@
where batch_no = #{batchNo} where batch_no = #{batchNo}
</select> </select>
<select id="selectMaxWarnNumByBatchNo" resultType="org.dromara.scale.domain.vo.StatisticNumVo"> <select id="selectWarn4Class" resultType="org.dromara.scale.domain.vo.StatisticNumVo">
select d.dept_name as `name`, count(wr.warn_id) as `value` select d.dept_name as `name`, COUNT(wr.warn_id) as `value`
from sys_warn_record wr from sys_warn_record wr
left join sys_dept d on d.dept_id = wr.dept_id left join sys_dept d on d.dept_id = wr.dept_id
where wr.batch_no = #{batchNo} where wr.batch_no = #{batchNo}
group by wr.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(ec.id) as `value`,0 as spareValue
from sys_scale_factor sf
left join sys_evaluation_conclusion ec on ec.factor_id = sf.factor_id
left join sys_evaluation_record er on er.record_id = ec.record_id
where er.batch_no = #{batchNo}
and er.scale_id = #{scaleId}
and er.status = 1
and ec.status = 1
group by sf.factor_id
</select>
<select id="selectFactorWarnNum" resultType="org.dromara.scale.domain.vo.StatisticNumVo">
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
left join sys_evaluation_record er on er.record_id = ec.record_id
where er.batch_no = #{batchNo}
and er.scale_id = #{scaleId}
and er.status = 1
and ec.status = 1
and ec.situation in
<foreach item="situation" collection="list" open="(" separator="," close=")">
#{situation}
</foreach>
group by sf.factor_id
</select>
</mapper> </mapper>

View File

@ -81,6 +81,7 @@
count(if(u.sex = '1', 1, null)) as `spareValue` count(if(u.sex = '1', 1, null)) as `spareValue`
from sys_evaluation_record er from sys_evaluation_record er
left join sys_user u on u.user_id = er.user_id left join sys_user u on u.user_id = er.user_id
where er.batch_no = #{batchNo}; where er.batch_no = #{batchNo}
order by u.user_id
</select> </select>
</mapper> </mapper>