Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
commit
5c7fe24b18
|
@ -51,6 +51,11 @@ public class SysEvaluationConclusion {
|
|||
*/
|
||||
private Long factorRangeId;
|
||||
|
||||
/**
|
||||
* 风险等级
|
||||
*/
|
||||
private Integer situation;
|
||||
|
||||
/**
|
||||
* 0:未命中,1:命中,若命中则,测评人符合该测评项,未命中则测评人不符合测评项
|
||||
*/
|
||||
|
|
|
@ -66,6 +66,11 @@ public class SysScalePublishVo implements Serializable {
|
|||
*/
|
||||
private Integer allowQueryResult;
|
||||
|
||||
/**
|
||||
* 0个测 1普测
|
||||
*/
|
||||
private Integer publishType;
|
||||
|
||||
private Long createBy;
|
||||
|
||||
private String createName;
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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());
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 < 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>
|
||||
|
|
|
@ -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>
|
||||
|
|
Binary file not shown.
Loading…
Reference in New Issue