优化测评记录,添加完成时间;添加一些统计接口;完善个人模板接口

This commit is contained in:
cjw 2024-05-08 13:59:46 +08:00
parent 2b7c28ad67
commit 31fec7c53d
24 changed files with 310 additions and 119 deletions

View File

@ -138,13 +138,13 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
/** /**
* 计算两个时间差 * 计算两个时间差
*/ */
public static String getDatePoor(Date endDate, Date nowDate) { public static String getDatePoor(Date startDate, Date endDate) {
long nd = 1000 * 24 * 60 * 60; long nd = 1000 * 24 * 60 * 60;
long nh = 1000 * 60 * 60; long nh = 1000 * 60 * 60;
long nm = 1000 * 60; long nm = 1000 * 60;
// long ns = 1000; long ns = 1000;
// 获得两个时间的毫秒时间差异 // 获得两个时间的毫秒时间差异
long diff = endDate.getTime() - nowDate.getTime(); long diff = endDate.getTime() - startDate.getTime();
// 计算差多少天 // 计算差多少天
long day = diff / nd; long day = diff / nd;
// 计算差多少小时 // 计算差多少小时
@ -152,8 +152,9 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
// 计算差多少分钟 // 计算差多少分钟
long min = diff % nd % nh / nm; long min = diff % nd % nh / nm;
// 计算差多少秒//输出结果 // 计算差多少秒//输出结果
// long sec = diff % nd % nh % nm / ns; long sec = diff % nd % nh % nm / ns;
return day + "" + hour + "小时" + min + "分钟"; //return day + "" + hour + "小时" + min + "分钟" + sec + "";
return hour + "小时" + min + "分钟" + sec + "";
} }
/** /**

View File

@ -23,17 +23,18 @@ import java.util.List;
*/ */
@RequiredArgsConstructor @RequiredArgsConstructor
@RestController @RestController
@RequestMapping("/scale/statistic") @RequestMapping("/statistic")
public class StatisticController extends BaseController { public class StatisticController extends BaseController {
private final IStatisticService statisticService; private final IStatisticService statisticService;
/** /**
* 获取完成情况统计-整体 * 获取完成情况统计-年级
*/ */
@GetMapping("/complete/all") @GetMapping("/complete/grade")
public R<List<StatisticNumVo>> getComplete(BaseQueryBo query) { public R<List<StatisticNumVo>> getComplete(BaseQueryBo query) {
return R.ok(statisticService.getComplete4All(query)); return R.ok(statisticService.getComplete4Grade(query));
} }
/** /**
@ -48,8 +49,16 @@ public class StatisticController extends BaseController {
* 获取预警情况统计-整体 * 获取预警情况统计-整体
*/ */
@GetMapping("/warn/all") @GetMapping("/warn/all")
public R<StatisticWarnVo> getWarn4All() {
return R.ok(statisticService.getWarn4All());
}
/**
* 获取预警情况统计-年级
*/
@GetMapping("/warn/grade")
public R<List<StatisticWarnVo>> getWarn(BaseQueryBo query) { public R<List<StatisticWarnVo>> getWarn(BaseQueryBo query) {
return R.ok(statisticService.getWarn4All(query)); return R.ok(statisticService.getWarn4Grade(query));
} }
/** /**
@ -61,18 +70,44 @@ public class StatisticController extends BaseController {
} }
/** /**
* 获取预警情况统计-整体 * 获取因子统计-年级
*/ */
@GetMapping("/factor/all") @GetMapping("/factor/grade")
public R<List<StatisticFactorVo>> getFactor(BaseQueryBo query) { public R<List<StatisticFactorVo>> getFactor(BaseQueryBo query) {
return R.ok(statisticService.getFactor4All(query)); return R.ok(statisticService.getFactor4Grade(query));
} }
/** /**
* 获取预警情况统计-班级 * 获取因子统计-班级
*/ */
@GetMapping("/factor/class") @GetMapping("/factor/class")
public R<List<StatisticFactorVo>> getFactor4Class(BaseQueryBo query) { public R<List<StatisticFactorVo>> getFactor4Class(BaseQueryBo query) {
return R.ok(statisticService.getFactor4Class(query)); return R.ok(statisticService.getFactor4Class(query));
} }
/**
* 获取总用户数
*/
@GetMapping("/user/num")
public R<Integer> getUserNum() {
return R.ok(statisticService.getUserNum());
}
/**
* 获取总干预数
*/
@GetMapping("/intervene/num")
public R<Integer> getInterveneNum() {
return R.ok(statisticService.getUserNum());
}
/**
* 获取量表发布次数
*/
@GetMapping("/scale/publish/num")
public R<List<StatisticNumVo>> getPublishNum() {
return R.ok(statisticService.getScalePublishNum());
}
} }

View File

@ -47,7 +47,7 @@ public class SysEvaluationRecord {
private Long batchNo; private Long batchNo;
/** /**
* 记录状态0初始化1开始测试 * 记录状态-1初始化0准备测试1完成测试
*/ */
private Integer status; private Integer status;
@ -57,5 +57,7 @@ public class SysEvaluationRecord {
//@TableField(fill = FieldFill.INSERT) //@TableField(fill = FieldFill.INSERT)
private Date createTime; private Date createTime;
private Date updateTime;
} }

View File

@ -49,6 +49,16 @@ public class SysScaleFactor extends BaseEntity {
@AutoMapping(target = "questionIds", expression = "java(cn.hutool.core.util.StrUtil.split(source.getQuestionIds(), \",\"))") @AutoMapping(target = "questionIds", expression = "java(cn.hutool.core.util.StrUtil.split(source.getQuestionIds(), \",\"))")
private String questionIds; private String questionIds;
/**
* 问题数量
*/
private Integer questionNum;
/**
* 问题总分
*/
private BigDecimal questionScore;
/** /**
* 计算类型 * 计算类型
*/ */

View File

@ -130,4 +130,5 @@ public class SysScaleVo implements Serializable {
private boolean used; private boolean used;
private Long recordId; private Long recordId;
} }

View File

@ -1,21 +0,0 @@
package org.dromara.scale.domain.vo;
import lombok.Data;
import java.math.BigDecimal;
/**
* <p>TODO<p>
*
* @author cjw
* @version V1.0.0
* @date 2024/4/29 13:41
*/
@Data
public class WordEvaluationAnswerVo {
private String factorName;
private String questionContent;
private String answerOption;
private BigDecimal score;
}

View File

@ -1,8 +1,11 @@
package org.dromara.scale.domain; 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;
import java.util.List;
/** /**
* <p>TODO<p> * <p>TODO<p>
* *
@ -13,12 +16,16 @@ import lombok.Data;
@Data @Data
public class EvaluationEecordWordData { public class EvaluationEecordWordData {
private String createTime;
private String useTime;
private String nickName; private String nickName;
private String deptName; private String deptName;
private String sex; private String sex;
private String scaleName; private String scaleName;
private String scaleDetails; private String scaleDetails;
private TableRenderData factor; private TableRenderData factor;
private TableRenderData intervene; private ChartMultiSeriesRenderData barChart;
private List<WordFactor> factors;
private String propose;
} }

View File

@ -0,0 +1,25 @@
package org.dromara.scale.domain.word;
import lombok.Data;
import java.math.BigDecimal;
/**
* <p>TODO<p>
*
* @author cjw
* @version V1.0.0
* @date 2024/4/29 13:41
*/
@Data
public class WordEvaluationFactor {
private String factorName;
private Integer questionNum;
private BigDecimal totalScore;
private BigDecimal score;
private Integer status;
private String evalDesc;
private String evalPropose;
}

View File

@ -0,0 +1,24 @@
package org.dromara.scale.domain.word;
import lombok.Data;
/**
* <p>TODO<p>
*
* @author cjw
* @version V1.0.0
* @date 2024/5/7 14:33
*/
@Data
public class WordFactor {
/**
* 因子名称
*/
private String factorName;
/**
* 问题描述
*/
private String evalDesc;
private double score;
}

View File

@ -23,4 +23,11 @@ public interface StatisticMapper {
List<StatisticWarnVo> selectStatisticWarn(@Param("batchNo") Long batchNo, @Param("scaleId") Long scaleId); List<StatisticWarnVo> selectStatisticWarn(@Param("batchNo") Long batchNo, @Param("scaleId") Long scaleId);
List<StatisticFactorVo> selectStatisticFactor(@Param("batchNo") Long batchNo, @Param("scaleId") Long scaleId); List<StatisticFactorVo> selectStatisticFactor(@Param("batchNo") Long batchNo, @Param("scaleId") Long scaleId);
StatisticWarnVo selectStatisticWarn4All();
int selectUserNum();
int selectInterveneNum();
List<StatisticNumVo> selectScalePublishNum();
} }

View File

@ -8,7 +8,7 @@ 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.SysScaleVo; import org.dromara.scale.domain.vo.SysScaleVo;
import org.dromara.scale.domain.vo.WordEvaluationAnswerVo; 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;
@ -29,7 +29,7 @@ public interface SysEvaluationRecordMapper extends BaseMapperPlus<SysEvaluationR
Page<SysEvaluationRecordVo> selectRecordVoPage(@Param("page") Page<SysEvaluationRecord> page, @Param(Constants.WRAPPER) Wrapper<SysEvaluationRecord> queryWrapper); Page<SysEvaluationRecordVo> selectRecordVoPage(@Param("page") Page<SysEvaluationRecord> page, @Param(Constants.WRAPPER) Wrapper<SysEvaluationRecord> queryWrapper);
List<WordEvaluationAnswerVo> selectAnswer4Word(Long recordId); List<WordEvaluationFactor> selectEvaluationFactor4Word(Long recordId);
List<SysEvaluationRecordVo> selectUseByBatchNo(Long batchNo); List<SysEvaluationRecordVo> selectUseByBatchNo(Long batchNo);

View File

@ -13,5 +13,5 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
*/ */
@Mapper @Mapper
public interface SysScaleFactorMapper extends BaseMapperPlus<SysScaleFactor, SysScaleFactorVo> { public interface SysScaleFactorMapper extends BaseMapperPlus<SysScaleFactor, SysScaleFactorVo> {
double sumQusetionMaxScore(String questionIds);
} }

View File

@ -17,8 +17,7 @@ import java.util.List;
public interface SysScaleMapper extends BaseMapperPlus<SysScale, SysScaleVo> { public interface SysScaleMapper extends BaseMapperPlus<SysScale, SysScaleVo> {
List<SysScaleVo> findSysScaleByIds(String scaleIds); List<SysScaleVo> findSysScaleByIds(String scaleIds);
void addPublishNums(Long scaleId);
void updateEvalNums(Long scaleId); void subPublishNums(Long scaleId);
void updatePublishNums(Long scaleId);
} }

View File

@ -10,16 +10,26 @@ import java.util.List;
public interface IStatisticService { public interface IStatisticService {
List<StatisticNumVo> getComplete4All(BaseQueryBo query); List<StatisticNumVo> getComplete4Grade(BaseQueryBo query);
List<StatisticNumVo> getComplete4Class(BaseQueryBo query); List<StatisticNumVo> getComplete4Class(BaseQueryBo query);
List<StatisticWarnVo> getWarn4All(BaseQueryBo query); List<StatisticWarnVo> getWarn4Grade(BaseQueryBo query);
List<StatisticWarnVo> getWarn4Class(BaseQueryBo query); List<StatisticWarnVo> getWarn4Class(BaseQueryBo query);
List<StatisticFactorVo> getFactor4All(BaseQueryBo query); List<StatisticFactorVo> getFactor4Grade(BaseQueryBo query);
List<StatisticFactorVo> getFactor4Class(BaseQueryBo query); List<StatisticFactorVo> getFactor4Class(BaseQueryBo query);
StatisticWarnVo getWarn4All();
int getUserNum();
int getInterveneNum();
List<StatisticNumVo> getByMonth(BaseQueryBo query);
List<StatisticNumVo> getScalePublishNum();
} }

View File

@ -30,7 +30,7 @@ public class StatisticServiceImpl implements IStatisticService {
private final StatisticMapper statisticMapper; private final StatisticMapper statisticMapper;
@Override @Override
public List<StatisticNumVo> getComplete4All(BaseQueryBo query) { public List<StatisticNumVo> getComplete4Grade(BaseQueryBo query) {
Long batchNo = query.getBatchNo(); Long batchNo = query.getBatchNo();
Long scaleId = query.getScaleId(); Long scaleId = query.getScaleId();
List<StatisticNumVo> statisticNumVos = statisticMapper.selectCompleteAvaluation(batchNo, scaleId); List<StatisticNumVo> statisticNumVos = statisticMapper.selectCompleteAvaluation(batchNo, scaleId);
@ -66,7 +66,7 @@ public class StatisticServiceImpl implements IStatisticService {
} }
@Override @Override
public List<StatisticWarnVo> getWarn4All(BaseQueryBo query) { public List<StatisticWarnVo> getWarn4Grade(BaseQueryBo query) {
Long batchNo = query.getBatchNo(); Long batchNo = query.getBatchNo();
Long scaleId = query.getScaleId(); Long scaleId = query.getScaleId();
List<StatisticWarnVo> statisticWarnVos = statisticMapper.selectStatisticWarn(batchNo, scaleId); List<StatisticWarnVo> statisticWarnVos = statisticMapper.selectStatisticWarn(batchNo, scaleId);
@ -108,7 +108,7 @@ public class StatisticServiceImpl implements IStatisticService {
} }
@Override @Override
public List<StatisticFactorVo> getFactor4All(BaseQueryBo query) { public List<StatisticFactorVo> getFactor4Grade(BaseQueryBo query) {
Map<String, List<StatisticFactorVo>> collect = processFactorData(query); Map<String, List<StatisticFactorVo>> collect = processFactorData(query);
Set<String> keys = collect.keySet(); Set<String> keys = collect.keySet();
List<StatisticFactorVo> data = new ArrayList<>(); List<StatisticFactorVo> data = new ArrayList<>();
@ -159,4 +159,30 @@ public class StatisticServiceImpl implements IStatisticService {
List<StatisticFactorVo> data = statisticMapper.selectStatisticFactor(query.getBatchNo(), query.getScaleId()); List<StatisticFactorVo> data = statisticMapper.selectStatisticFactor(query.getBatchNo(), query.getScaleId());
return data.stream().collect(Collectors.groupingBy(StatisticFactorVo::getFactorName)); return data.stream().collect(Collectors.groupingBy(StatisticFactorVo::getFactorName));
} }
@Override
public StatisticWarnVo getWarn4All() {
return statisticMapper.selectStatisticWarn4All();
}
@Override
public int getUserNum() {
return statisticMapper.selectUserNum();
}
@Override
public int getInterveneNum() {
return statisticMapper.selectInterveneNum();
}
@Override
public List<StatisticNumVo> getByMonth(BaseQueryBo query) {
//todo
return null;
}
@Override
public List<StatisticNumVo> getScalePublishNum() {
return statisticMapper.selectScalePublishNum();
}
} }

View File

@ -4,23 +4,21 @@ 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.RowRenderData; import com.deepoove.poi.data.*;
import com.deepoove.poi.data.Rows;
import com.deepoove.poi.data.TableRenderData;
import com.deepoove.poi.data.Tables;
import com.deepoove.poi.data.style.BorderStyle; import com.deepoove.poi.data.style.BorderStyle;
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.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.scale.domain.EvaluationEecordWordData;
import org.dromara.scale.domain.SysEvaluationRecord; import org.dromara.scale.domain.SysEvaluationRecord;
import org.dromara.scale.domain.bo.BaseQueryBo; import org.dromara.scale.domain.bo.BaseQueryBo;
import org.dromara.scale.domain.bo.SysEvaluationRecordBo; import org.dromara.scale.domain.bo.SysEvaluationRecordBo;
import org.dromara.scale.domain.vo.SysEvaluationRecordVo; import org.dromara.scale.domain.vo.SysEvaluationRecordVo;
import org.dromara.scale.domain.vo.SysScaleVo; import org.dromara.scale.domain.vo.SysScaleVo;
import org.dromara.scale.domain.vo.TimeAxisVo; import org.dromara.scale.domain.word.EvaluationEecordWordData;
import org.dromara.scale.domain.vo.WordEvaluationAnswerVo; import org.dromara.scale.domain.word.WordEvaluationFactor;
import org.dromara.scale.domain.word.WordFactor;
import org.dromara.scale.mapper.SysEvaluationRecordMapper; import org.dromara.scale.mapper.SysEvaluationRecordMapper;
import org.dromara.scale.mapper.SysInterveneRecordMapper; import org.dromara.scale.mapper.SysInterveneRecordMapper;
import org.dromara.scale.mapper.SysScaleMapper; import org.dromara.scale.mapper.SysScaleMapper;
@ -32,6 +30,8 @@ import org.springframework.stereotype.Service;
import java.io.IOException; import java.io.IOException;
import java.rmi.ServerException; import java.rmi.ServerException;
import java.util.Date;
import java.util.LinkedList;
import java.util.List; import java.util.List;
/** /**
@ -106,37 +106,69 @@ public class SysEvaluationRecordServiceImpl implements ISysEvaluationRecordServi
throw new ServerException("量表ID不能为空"); throw new ServerException("量表ID不能为空");
} }
EvaluationEecordWordData wordData = new EvaluationEecordWordData(); EvaluationEecordWordData wordData = new EvaluationEecordWordData();
SysEvaluationRecord sysEvaluationRecord = baseMapper.selectById(recordId);
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));
SysUserVo user = userMapper.selectUserById(userId); SysUserVo user = userMapper.selectUserById(userId);
wordData.setNickName(user.getNickName()); wordData.setNickName(user.getNickName());
wordData.setDeptName(user.getDept().getDeptName()); wordData.setDeptName(user.getDept().getDeptName());
wordData.setSex("0".equals(user.getSex()) ? "" : ""); wordData.setSex("0".equals(user.getSex()) ? "" : "");
SysScaleVo scale = scaleMapper.selectVoById(scaleId); SysScaleVo scale = scaleMapper.selectVoById(scaleId);
wordData.setScaleName(scale.getScaleName()); wordData.setScaleName(scale.getScaleName());
wordData.setScaleDetails(scale.getScaleDetails()); wordData.setScaleDetails(scale.getScaleDetails());
List<WordEvaluationAnswerVo> answerVos = baseMapper.selectAnswer4Word(recordId);
List<WordEvaluationFactor> answerVos = baseMapper.selectEvaluationFactor4Word(recordId);
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("Hei").textFontSize(9).create();
TableRenderData factorTable = Tables.ofA4MediumWidth().addRow(factorHeader).border(borderStyle).center().create(); TableRenderData factorTable = Tables.ofA4MediumWidth().addRow(factorHeader).border(borderStyle).center().create();
for (WordEvaluationAnswerVo answerVo : answerVos) { //一并处理数据
RowRenderData one = Rows.of(answerVo.getFactorName(), answerVo.getQuestionContent(), int size = answerVos.size();
answerVo.getAnswerOption(), answerVo.getScore().toString()).center().create(); LinkedList<WordFactor> factors = new LinkedList<>();
String[] strings = new String[size];
Double[] doubles = new Double[size];
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < size; i++) {
WordEvaluationFactor answerVo = answerVos.get(i);
double score = answerVo.getScore().doubleValue();
//处理因子得分表格
RowRenderData one = Rows.of(answerVo.getFactorName(), answerVo.getQuestionNum().toString(),
answerVo.getTotalScore().toString(), answerVo.getScore().toString()).center().create();
factorTable.addRow(one); factorTable.addRow(one);
//处理测评结果
WordFactor wordFactor = new WordFactor();
wordFactor.setFactorName(answerVo.getFactorName());
wordFactor.setScore(score);
wordFactor.setEvalDesc(answerVo.getEvalDesc());
//判断激活放到首位并添加建议
if (answerVo.getStatus() == 1) {
factors.addFirst(wordFactor);
stringBuilder.append(answerVo.getEvalPropose()).append("\n");
} else {
factors.add(wordFactor);
}
//雷达图使用
strings[i] = answerVo.getFactorName();
doubles[i] = score;
} }
wordData.setFactor(factorTable); wordData.setFactor(factorTable);
List<TimeAxisVo> timeAxisVos = interveneMapper.selectTimeList(userId); wordData.setFactors(factors);
RowRenderData interveneHeader = Rows.of("干预标题", "干预时间", "诊断详情").bgColor("F2F2F2").center() //处理雷达图
.textColor("7F7f7F").textFontFamily("Hei").textFontSize(9).create(); ChartMultiSeriesRenderData chart = Charts
TableRenderData interveneTable = Tables.ofA4MediumWidth().addRow(interveneHeader).border(borderStyle).center().create(); .ofMultiSeries(scale.getScaleName(), strings)
for (TimeAxisVo timeAxisVo : timeAxisVos) { .addSeries("因子项", doubles)
RowRenderData one = Rows.of(timeAxisVo.getName(), timeAxisVo.getTime(), .create();
timeAxisVo.getNote()).center().create(); wordData.setBarChart(chart);
interveneTable.addRow(one); wordData.setPropose(stringBuilder.toString());
}
wordData.setIntervene(interveneTable);
ClassPathResource classPathResource = new ClassPathResource(resource); ClassPathResource classPathResource = new ClassPathResource(resource);
return XWPFTemplate.compile(classPathResource.getInputStream()).render(wordData); return XWPFTemplate.compile(classPathResource.getInputStream()).render(wordData);
} }

View File

@ -27,6 +27,7 @@ import org.springframework.cache.annotation.Caching;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -104,12 +105,12 @@ public class SysScaleFactorServiceImpl implements ISysScaleFactorService {
@Override @Override
public Boolean insertByBo(SysScaleFactorBo bo) { public Boolean insertByBo(SysScaleFactorBo bo) {
SysScaleFactor add = MapstructUtils.convert(bo, SysScaleFactor.class); SysScaleFactor add = MapstructUtils.convert(bo, SysScaleFactor.class);
List<String> questionIds = bo.getQuestionIds();
int questionNum = questionIds.size();
validEntityBeforeSave(add); validEntityBeforeSave(add);
// if (CollUtil.isNotEmpty(bo.getQuestionIds())) { double maxScore = baseMapper.sumQusetionMaxScore(add.getQuestionIds());
// String questionIds = bo.getQuestionIds().stream().map(Object::toString) add.setQuestionNum(questionNum);
// .collect(Collectors.joining(StringUtils.SEPARATOR)); add.setQuestionScore(BigDecimal.valueOf(maxScore));
//
// }
if (CollUtil.isNotEmpty(bo.getFactorRangeList())) { if (CollUtil.isNotEmpty(bo.getFactorRangeList())) {
insertFactorRange(bo); insertFactorRange(bo);
} }
@ -130,17 +131,6 @@ public class SysScaleFactorServiceImpl implements ISysScaleFactorService {
scaleFactorRangeMapper.insertBatch(list, 100); scaleFactorRangeMapper.insertBatch(list, 100);
} }
// private void updateQuestionFactor(SysScaleFactorBo bo) {
// List<SysScaleQuestion> list = new ArrayList<>(bo.getQuestionIds().size());
// for (Long questionId : bo.getQuestionIds()) {
// SysScaleQuestion question = new SysScaleQuestion();
// question.setQuestionId(questionId);
// question.setFactorId(bo.getFactorId());
// question.setFactorName(bo.getFactorName());
// list.add(question);
// }
// scaleQuestionMapper.updateBatchById(list, 100);
// }
/** /**
* 修改测评因子 * 修改测评因子
@ -153,12 +143,12 @@ public class SysScaleFactorServiceImpl implements ISysScaleFactorService {
@Override @Override
public Boolean updateByBo(SysScaleFactorBo bo) { public Boolean updateByBo(SysScaleFactorBo bo) {
SysScaleFactor update = MapstructUtils.convert(bo, SysScaleFactor.class); SysScaleFactor update = MapstructUtils.convert(bo, SysScaleFactor.class);
List<String> questionIds = bo.getQuestionIds();
int questionNum = questionIds.size();
validEntityBeforeSave(update); validEntityBeforeSave(update);
double maxScore = baseMapper.sumQusetionMaxScore(update.getQuestionIds());
// if (CollUtil.isNotEmpty(bo.getQuestionIds())) { update.setQuestionNum(questionNum);
// updateQuestionFactor(bo); update.setQuestionScore(BigDecimal.valueOf(maxScore));
// }
if (CollUtil.isNotEmpty(bo.getFactorRangeList())) { if (CollUtil.isNotEmpty(bo.getFactorRangeList())) {
scaleFactorRangeMapper.delete(Wrappers.lambdaQuery(SysScaleFactorRange.class).eq(SysScaleFactorRange::getFactorId, bo.getFactorId())); scaleFactorRangeMapper.delete(Wrappers.lambdaQuery(SysScaleFactorRange.class).eq(SysScaleFactorRange::getFactorId, bo.getFactorId()));
insertFactorRange(bo); insertFactorRange(bo);
@ -200,6 +190,7 @@ public class SysScaleFactorServiceImpl implements ISysScaleFactorService {
} }
return scaleFactorVos; return scaleFactorVos;
} }
@Cacheable(cacheNames = CacheNames.MAP_SCALE_QUESTION, key = "#scaleId") @Cacheable(cacheNames = CacheNames.MAP_SCALE_QUESTION, key = "#scaleId")
public Map<String, List<String>> getQuestionMapByFactor(Long scaleId) { public Map<String, List<String>> getQuestionMapByFactor(Long scaleId) {
List<SysScaleFactorVo> factorVos = baseMapper.selectVoList(new LambdaQueryWrapper<SysScaleFactor>() List<SysScaleFactorVo> factorVos = baseMapper.selectVoList(new LambdaQueryWrapper<SysScaleFactor>()

View File

@ -110,6 +110,7 @@ public class SysScalePublishServiceImpl implements ISysScalePublishService {
add.setCreateBy(loginUser.getUserId()); add.setCreateBy(loginUser.getUserId());
add.setCreateTime(new Date()); add.setCreateTime(new Date());
validEntityBeforeSave(add); validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
Integer publishType = add.getPublishType(); Integer publishType = add.getPublishType();
Long batchNo = add.getBatchNo(); Long batchNo = add.getBatchNo();
String scaleIds = add.getScaleIds(); String scaleIds = add.getScaleIds();
@ -125,7 +126,7 @@ public class SysScalePublishServiceImpl implements ISysScalePublishService {
List<SysScaleVo> list = scaleMapper.findSysScaleByIds(scaleIds); List<SysScaleVo> list = scaleMapper.findSysScaleByIds(scaleIds);
add.setScaleNames(list.stream().map(SysScaleVo::getScaleName).collect(Collectors.joining(StrUtil.COMMA))); add.setScaleNames(list.stream().map(SysScaleVo::getScaleName).collect(Collectors.joining(StrUtil.COMMA)));
for (String scaleId : bo.getScaleIds()) { for (String scaleId : bo.getScaleIds()) {
scaleMapper.updatePublishNums(Long.parseLong(scaleId)); scaleMapper.addPublishNums(Long.parseLong(scaleId));
} }
//处理用户 //处理用户
List<SysUser> userList; List<SysUser> userList;
@ -151,7 +152,6 @@ public class SysScalePublishServiceImpl implements ISysScalePublishService {
//预处理量测记录方便后续统计与查询 //预处理量测记录方便后续统计与查询
List<String> scaleList = bo.getScaleIds(); List<String> scaleList = bo.getScaleIds();
insertRecordBatch(batchNo, scaleList, userList); insertRecordBatch(batchNo, scaleList, userList);
boolean flag = baseMapper.insert(add) > 0;
if (flag) { if (flag) {
bo.setBatchNo(add.getBatchNo()); bo.setBatchNo(add.getBatchNo());
} }
@ -169,7 +169,8 @@ public class SysScalePublishServiceImpl implements ISysScalePublishService {
record.setDeptId(user.getDeptId()); record.setDeptId(user.getDeptId());
record.setBatchNo(batchNo); record.setBatchNo(batchNo);
record.setScaleId(Long.parseLong(scaleId)); record.setScaleId(Long.parseLong(scaleId));
record.setStatus(StatusEnum.DISABLED.getValue()); //初始化字段
record.setStatus(-1);
recordList.add(record); recordList.add(record);
} }
} }
@ -236,6 +237,10 @@ public class SysScalePublishServiceImpl implements ISysScalePublishService {
if (ObjectUtil.isNotEmpty(sysEvaluationRecordVos)) { if (ObjectUtil.isNotEmpty(sysEvaluationRecordVos)) {
throw new ServiceException("此发布下已有测评,无法删除"); throw new ServiceException("此发布下已有测评,无法删除");
} }
SysScalePublishVo sysScalePublishVo = baseMapper.selectVoById(batchNo);
for (String scaleId : sysScalePublishVo.getScaleIds()) {
scaleMapper.subPublishNums(Long.parseLong(scaleId));
}
recordMapper.deleteByBatchNo(batchNo); recordMapper.deleteByBatchNo(batchNo);
return baseMapper.deleteById(batchNo) > 0; return baseMapper.deleteById(batchNo) > 0;
} }

View File

@ -116,7 +116,7 @@ public class WebServiceImpl implements IWebService {
} }
SysEvaluationRecord update = new SysEvaluationRecord(); SysEvaluationRecord update = new SysEvaluationRecord();
update.setRecordId(recordId); update.setRecordId(recordId);
//以开始时间判断记录是否开始答题 update.setStatus(StatusEnum.DISABLED.getValue());
update.setCreateTime(new Date()); update.setCreateTime(new Date());
return recordMapper.updateById(update) > 0; return recordMapper.updateById(update) > 0;
} }
@ -167,6 +167,7 @@ public class WebServiceImpl implements IWebService {
SysEvaluationRecord update = new SysEvaluationRecord(); SysEvaluationRecord update = new SysEvaluationRecord();
update.setRecordId(recordId); update.setRecordId(recordId);
update.setStatus(StatusEnum.IN_USE.getValue()); update.setStatus(StatusEnum.IN_USE.getValue());
update.setUpdateTime(new Date());
recordMapper.updateById(update); recordMapper.updateById(update);
Integer riskLevel = -1; Integer riskLevel = -1;

View File

@ -51,4 +51,34 @@
and er.status = 1 and er.status = 1
and ec.status = 1 and ec.status = 1
</select> </select>
<select id="selectStatisticWarn4All" resultType="org.dromara.scale.domain.vo.StatisticWarnVo">
select count(if(sfr.situation = 1, 1, null)) as `noneNum`,
count(if(sfr.situation = 2, 1, null)) as `lowNum`,
count(if(sfr.situation = 3, 1, null)) as `middleNum`,
count(if(sfr.situation = 4, 1, null)) as `highNum`,
count(if(sfr.situation = 5, 1, null)) as `majorNum`
from sys_evaluation_conclusion ec
left join sys_scale_factor_range sfr on sfr.range_id = ec.factor_range_id
where ec.status = 1
</select>
<select id="selectUserNum" resultType="int">
select count(*) from sys_user where status = 1
</select>
<select id="selectInterveneNum" resultType="int">
select count(*)
from sys_intervene_record
</select>
<select id="selectScalePublishNum" resultType="org.dromara.scale.domain.vo.StatisticNumVo">
select scale_name as `name`,
publish_nums as `value`
from sys_scale
where status = 1
order by publish_nums desc
</select>
</mapper> </mapper>

View File

@ -32,17 +32,18 @@
${ew.getCustomSqlSegment} ${ew.getCustomSqlSegment}
</select> </select>
<select id="selectAnswer4Word" resultType="org.dromara.scale.domain.vo.WordEvaluationAnswerVo"> <select id="selectEvaluationFactor4Word" resultType="org.dromara.scale.domain.word.WordEvaluationFactor">
select sf.factor_name, select sf.factor_name as `factorName`,
sq.question_content, sf.question_num as `questionNum`,
sa.answer_option, sf.question_score as `totalScore`,
sa.score ec.score as `score`,
from sys_evaluation_answer ea ec.status as `status`,
left join sys_scale_question sq on sq.question_id = ea.question_id sfr.eval_desc as `evalDesc`,
left join sys_scale_answer sa on sa.answer_id = ea.answer_id sfr.eval_propose as `evalPropose`
left join sys_scale_factor sf on find_in_set(ea.question_id, sf.question_ids) from sys_evaluation_conclusion ec
where ea.record_id = #{recordId} left join sys_scale_factor sf ON sf.factor_id = ec.factor_id
order by sf.factor_name left join sys_scale_factor_range sfr on sfr.range_id = ec.factor_range_id
where ec.record_id = #{recordId}
</select> </select>
<select id="selectUseByBatchNo" resultType="org.dromara.scale.domain.vo.SysEvaluationRecordVo"> <select id="selectUseByBatchNo" resultType="org.dromara.scale.domain.vo.SysEvaluationRecordVo">

View File

@ -1,7 +1,13 @@
<?xml version="1.0" encoding="UTF-8" ?> <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper <!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.scale.mapper.SysScaleFactorMapper"> <mapper namespace="org.dromara.scale.mapper.SysScaleFactorMapper">
<select id="sumQusetionMaxScore" resultType="double">
SELECT sum(t.score)
FROM (SELECT MAX(score) AS score
FROM sys_scale_answer
WHERE FIND_IN_SET(question_id, #{questionIds})
GROUP BY question_id) as t
</select>
</mapper> </mapper>

View File

@ -9,16 +9,15 @@
WHERE FIND_IN_SET(t.scale_id, #{scaleIds}) WHERE FIND_IN_SET(t.scale_id, #{scaleIds})
</select> </select>
<update id="addPublishNums">
<update id="updateEvalNums">
update sys_scale
set eval_nums = eval_nums + 1
where scale_id = #{scaleId}
</update>
<update id="updatePublishNums">
update sys_scale update sys_scale
set publish_nums = publish_nums + 1 set publish_nums = publish_nums + 1
where scale_id = #{scaleId} where scale_id = #{scaleId}
</update> </update>
<select id="subPublishNums" >
update sys_scale
set publish_nums = publish_nums - 1
where scale_id = #{scaleId}
</select>
</mapper> </mapper>