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 Integer situation;
/**
* 0:未命中1:命中若命中则测评人符合该测评项未命中则测评人不符合测评项
*/

View File

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

View File

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

View File

@ -1,10 +1,10 @@
package org.dromara.scale.domain.word;
import com.deepoove.poi.data.ChartSingleSeriesRenderData;
import com.deepoove.poi.data.TableRenderData;
import lombok.Data;
/**
* <p>TODO<p>
* <p>量表的因子和预警<p>
*
* @author cjw
* @version V1.0.0
@ -15,5 +15,5 @@ public class WordWarn {
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.scale.domain.SysEvaluationRecord;
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.SysScalePublishVo;
import org.dromara.scale.domain.vo.SysScaleVo;
import org.dromara.scale.domain.word.WordEvaluationFactor;
import java.util.List;
@ -37,9 +37,13 @@ public interface SysEvaluationRecordMapper extends BaseMapperPlus<SysEvaluationR
int deleteByBatchNo(Long batchNo);
int selectCompleteNumByBatchNo(Long batchNo);
int selectUndoneNumByBatchNo(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.extension.plugins.pagination.Page;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.data.*;
import com.deepoove.poi.data.style.BorderStyle;
import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy;
import lombok.RequiredArgsConstructor;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.dromara.common.core.utils.DateUtils;
@ -50,8 +52,6 @@ public class SysEvaluationRecordServiceImpl implements ISysEvaluationRecordServi
private final SysScaleMapper scaleMapper;
private final String resource = "word/personalTemplate.docx";
/**
* 查询量测记录
*/
@ -168,7 +168,9 @@ public class SysEvaluationRecordServiceImpl implements ISysEvaluationRecordServi
.create();
wordData.setRadarChart(chart);
wordData.setPropose(stringBuilder.toString());
ClassPathResource classPathResource = new ClassPathResource(resource);
return XWPFTemplate.compile(classPathResource.getInputStream()).render(wordData);
ClassPathResource classPathResource = new ClassPathResource("word/personalTemplate.docx");
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.extension.plugins.pagination.Page;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.data.ChartSingleSeriesRenderData;
import com.deepoove.poi.data.Charts;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.data.*;
import com.deepoove.poi.data.style.BorderStyle;
import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy;
import lombok.RequiredArgsConstructor;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.exception.ServiceException;
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.vo.*;
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.SysScaleMapper;
import org.dromara.scale.mapper.SysScalePublishMapper;
import org.dromara.scale.mapper.SysWarnRecordMapper;
import org.dromara.scale.service.ISysScalePublishService;
import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.vo.SysDeptVo;
import org.dromara.system.mapper.SysDeptMapper;
import org.dromara.system.mapper.SysUserMapper;
import org.springframework.core.io.ClassPathResource;
import org.springframework.stereotype.Service;
import java.io.IOException;
@ -64,6 +70,8 @@ public class SysScalePublishServiceImpl implements ISysScalePublishService {
private final SysUserMapper userMapper;
private final SysWarnRecordMapper warnMapper;
/**
* 查询量发布
*/
@ -273,6 +281,9 @@ public class SysScalePublishServiceImpl implements ISysScalePublishService {
PublishRecordWordData wordData = new PublishRecordWordData();
SysScalePublishVo publishVo = baseMapper.selectVoById(batchNo);
if (publishVo.getPublishType() != 1) {
throw new ServerException("团体报告导出不支持普测发布以外的发布");
}
wordData.setSessionName(publishVo.getSessionName());
Date createTime = publishVo.getCreateTime();
@ -287,6 +298,7 @@ public class SysScalePublishServiceImpl implements ISysScalePublishService {
int maleNum = numVo.getValue();
int femaleNum = numVo.getSpareValue();
int personTotal = maleNum + femaleNum;
wordData.setPersonNum(String.valueOf(personTotal));
int malePercent = processHalfUpPercent(maleNum, personTotal);
int femalePercent = processHalfUpPercent(femaleNum, personTotal);
wordData.setMaleNum(String.valueOf(maleNum));
@ -298,20 +310,22 @@ public class SysScalePublishServiceImpl implements ISysScalePublishService {
wordData.setSexChart(sexChart);
int completeNum = recordMapper.selectCompleteNumByBatchNo(batchNo);
int completePercent = processHalfUpPercent(completeNum, personTotal);
int undoneNum = personTotal - completeNum;
int undonePercent = processHalfUpPercent(undoneNum, personTotal);
int undoneNum = recordMapper.selectUndoneNumByBatchNo(batchNo);
int recordNum = completeNum + undoneNum;
int completePercent = processHalfUpPercent(completeNum, recordNum);
int undonePercent = processHalfUpPercent(undoneNum, recordNum);
wordData.setRecordNum(String.valueOf(recordNum));
wordData.setCompleteNum(String.valueOf(completeNum));
wordData.setCompletePercent(completePercent + "%");
wordData.setUndoneNum(String.valueOf(undoneNum));
wordData.setUndonePercent(undonePercent + "%");
ChartSingleSeriesRenderData completeChart = Charts.ofSingleSeries("", new String[]{"完成计划(人)", "未完成计划(人)"})
ChartSingleSeriesRenderData completeChart = Charts.ofSingleSeries("", new String[]{"完成测试(次)", "未完成测试(次)"})
.series("", new Integer[]{completeNum, undoneNum}).create();
wordData.setCompleteChart(completeChart);
int warnNum = recordMapper.selectWarnNumByBatchNo(batchNo);
int warnPercent = processHalfUpPercent(warnNum, personTotal);
int normalNum = personTotal - completeNum;
int normalNum = personTotal - warnNum;
int normalPercent = processHalfUpPercent(normalNum, personTotal);
wordData.setWarnNum(String.valueOf(warnNum));
wordData.setWarnPercent(warnPercent + "%");
@ -321,24 +335,77 @@ public class SysScalePublishServiceImpl implements ISysScalePublishService {
.series("", new Integer[]{warnNum, normalNum}).create();
wordData.setWarnChart(warnChart);
List<StatisticNumVo> maxList = recordMapper.selectMaxWarnNumByBatchNo(batchNo);
Optional<StatisticNumVo> max = maxList.stream().max(Comparator.comparingInt(StatisticNumVo::getValue));
if (max.isPresent()) {
StatisticNumVo classVo = max.get();
String classWarnName = classVo.getName();
int classWarnNum = classVo.getValue();
int classWarnPercent = processHalfUpPercent(classWarnNum, personTotal);
int otherNum = personTotal - classWarnNum;
wordData.setClassWarnName(classWarnName);
wordData.setClassWarnNum(String.valueOf(classWarnNum));
wordData.setClassWarnPercent(classWarnPercent + "%");
ChartSingleSeriesRenderData classChart = Charts.ofSingleSeries("", new String[]{classWarnName + "(人)", "其他(人)"})
.series("", new Integer[]{classWarnNum, otherNum}).create();
wordData.setClassChart(classChart);
ChartSingleSeriesRenderData classChart = Charts.ofSingleSeries("暂无数据", new String[]{"班级"})
.series("", new Integer[]{0}).create();
;
List<StatisticNumVo> warn4ClassList = recordMapper.selectWarn4Class(batchNo);
if (ObjectUtil.isNotEmpty(warn4ClassList)) {
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 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.setClassWarnNum(String.valueOf(classWarnNum));
wordData.setClassWarnPercent(classWarnPercent + "%");
classChart = Charts.ofSingleSeries("", new String[]{classWarnName + "(人)", "其他(人)"})
.series("", new Integer[]{classWarnNum, classOtherNum}).create();
}
}
wordData.setClassChart(classChart);
return null;
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();
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) {

View File

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

View File

@ -35,14 +35,14 @@
</select>
<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,
parent.dept_name as `parentName`
from sys_evaluation_record er
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_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}
and er.scale_id = #{scaleId}
and er.status = 1

View File

@ -66,6 +66,12 @@
where batch_no = #{batchNo}
and status = 1
</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 count(*)
@ -73,11 +79,41 @@
where batch_no = #{batchNo}
</select>
<select id="selectMaxWarnNumByBatchNo" resultType="org.dromara.scale.domain.vo.StatisticNumVo">
select d.dept_name as `name`, count(wr.warn_id) as `value`
<select id="selectWarn4Class" resultType="org.dromara.scale.domain.vo.StatisticNumVo">
select d.dept_name as `name`, COUNT(wr.warn_id) as `value`
from sys_warn_record wr
left join sys_dept d on d.dept_id = wr.dept_id
where wr.batch_no = #{batchNo}
group by wr.dept_id
GROUP BY d.dept_id
</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>

View File

@ -81,6 +81,7 @@
count(if(u.sex = '1', 1, null)) as `spareValue`
from sys_evaluation_record er
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>
</mapper>