Compare commits

...

2 Commits

Author SHA1 Message Date
cjw 07d2b5657e Merge branch 'dev' of http://101.37.69.204:3000/mozhe/mental-health-api into dev
# Conflicts:
#	ruoyi-modules/rouyi-scale/src/main/java/org/dromara/scale/service/impl/WebServiceImpl.java
2024-04-18 17:12:10 +08:00
cjw 229a22efaf 量测管理活动统计 2024-04-18 17:01:16 +08:00
11 changed files with 164 additions and 36 deletions

View File

@ -65,4 +65,6 @@ public class SysEvaluationRecordController extends BaseController {
return R.ok(sysEvaluationRecordService.queryById(recordId)); return R.ok(sysEvaluationRecordService.queryById(recordId));
} }
} }

View File

@ -14,6 +14,7 @@ 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.common.web.core.BaseController; import org.dromara.common.web.core.BaseController;
import org.dromara.scale.domain.bo.SysScalePublishBo; import org.dromara.scale.domain.bo.SysScalePublishBo;
import org.dromara.scale.domain.vo.StatisticVo;
import org.dromara.scale.domain.vo.SysScalePublishVo; import org.dromara.scale.domain.vo.SysScalePublishVo;
import org.dromara.scale.service.ISysScalePublishService; import org.dromara.scale.service.ISysScalePublishService;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
@ -53,7 +54,7 @@ public class SysScalePublishController extends BaseController {
@SaCheckPermission("scale:publish:query") @SaCheckPermission("scale:publish:query")
@GetMapping("/{batchNo}") @GetMapping("/{batchNo}")
public R<SysScalePublishVo> getInfo(@NotNull(message = "主键不能为空") public R<SysScalePublishVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long batchNo) { @PathVariable Long batchNo) {
return R.ok(sysScalePublishService.queryById(batchNo)); return R.ok(sysScalePublishService.queryById(batchNo));
} }
@ -87,8 +88,25 @@ public class SysScalePublishController extends BaseController {
@SaCheckPermission("scale:publish:remove") @SaCheckPermission("scale:publish:remove")
@Log(title = "量发布", businessType = BusinessType.DELETE) @Log(title = "量发布", businessType = BusinessType.DELETE)
@DeleteMapping("/{batchNo}") @DeleteMapping("/{batchNo}")
public R<Void> remove(@NotEmpty(message = "主键不能为空") public R<Void> remove(@NotEmpty(message = "主键不能为空") @PathVariable Long batchNos) {
@PathVariable Long batchNos) {
return toAjax(sysScalePublishService.deleteWithValidByIds(List.of(batchNos), true)); return toAjax(sysScalePublishService.deleteWithValidByIds(List.of(batchNos), true));
} }
/**
* 获取量测记录统计
*/
@SaCheckPermission("evaluation:record:query")
@GetMapping("/statistic/all")
public R<StatisticVo> getStatistic(Long batchNo, Long scale) {
return R.ok(sysScalePublishService.getStatistic4All(batchNo, scale));
}
/**
* 获取量测记录统计
*/
@SaCheckPermission("evaluation:record:query")
@GetMapping("/statistic/class")
public R<List<StatisticVo>> getStatistic4Class(Long batchNo, Long scale) {
return R.ok(sysScalePublishService.getStatistic4Class(batchNo, scale));
}
} }

View File

@ -0,0 +1,21 @@
package org.dromara.scale.domain.vo;
import lombok.Data;
/**
* <p>统计实体<p>
*
* @author cjw
* @version V1.0.0
* @date 2024/4/17 15:21
*/
@Data
public class StatisticVo {
private String name;
private int value;
private int spareValue;
}

View File

@ -1,9 +1,13 @@
package org.dromara.scale.mapper; package org.dromara.scale.mapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.dromara.scale.domain.SysScalePublish; import org.apache.ibatis.annotations.Param;
import org.dromara.scale.domain.vo.SysScalePublishVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.scale.domain.SysScalePublish;
import org.dromara.scale.domain.vo.StatisticVo;
import org.dromara.scale.domain.vo.SysScalePublishVo;
import java.util.List;
/** /**
* 量发布Mapper接口 * 量发布Mapper接口
@ -14,4 +18,12 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
@Mapper @Mapper
public interface SysScalePublishMapper extends BaseMapperPlus<SysScalePublish, SysScalePublishVo> { public interface SysScalePublishMapper extends BaseMapperPlus<SysScalePublish, SysScalePublishVo> {
StatisticVo selectSingleAllAvaluation(Long batchNo);
StatisticVo selectSingleAlreadyAvaluation(@Param("batchNo") Long batchNo, @Param("scaleId") Long scaleId);
List<StatisticVo> selectAllAvaluation(Long batchNo);
List<StatisticVo> selectAlreadyAvaluation(@Param("batchNo") Long batchNo, @Param("scaleId") Long scaleId);
} }

View File

@ -32,4 +32,6 @@ public interface ISysEvaluationRecordService {
} }

View File

@ -3,6 +3,7 @@ package org.dromara.scale.service;
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.bo.SysScalePublishBo; import org.dromara.scale.domain.bo.SysScalePublishBo;
import org.dromara.scale.domain.vo.StatisticVo;
import org.dromara.scale.domain.vo.SysScalePublishVo; import org.dromara.scale.domain.vo.SysScalePublishVo;
import java.util.Collection; import java.util.Collection;
@ -46,5 +47,7 @@ public interface ISysScalePublishService {
*/ */
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid); Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
StatisticVo getStatistic4All(Long batchNo,Long scale);
List<StatisticVo> getStatistic4Class(Long batchNo,Long scale);
} }

View File

@ -63,4 +63,5 @@ public class SysEvaluationRecordServiceImpl implements ISysEvaluationRecordServi
return lqw; return lqw;
} }
} }

View File

@ -1,7 +1,7 @@
package org.dromara.scale.service.impl; package org.dromara.scale.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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;
@ -193,7 +193,7 @@ public class SysScaleFactorServiceImpl implements ISysScaleFactorService {
new LambdaQueryWrapper<SysScaleFactor>().eq(SysScaleFactor::getScaleId, scaleId)); new LambdaQueryWrapper<SysScaleFactor>().eq(SysScaleFactor::getScaleId, scaleId));
List<SysScaleFactorRangeVo> scaleFactorRangeVos = scaleFactorRangeMapper.selectVoList( List<SysScaleFactorRangeVo> scaleFactorRangeVos = scaleFactorRangeMapper.selectVoList(
new LambdaQueryWrapper<SysScaleFactorRange>().eq(SysScaleFactorRange::getScaleId, scaleId)); new LambdaQueryWrapper<SysScaleFactorRange>().eq(SysScaleFactorRange::getScaleId, scaleId));
if (!ArrayUtil.isEmpty(scaleFactorVos) && !ArrayUtil.isEmpty(scaleFactorRangeVos)) { if (!ObjectUtil.isEmpty(scaleFactorVos) && !ObjectUtil.isEmpty(scaleFactorRangeVos)) {
Map<Long, List<SysScaleFactorRangeVo>> map = scaleFactorRangeVos.stream() Map<Long, List<SysScaleFactorRangeVo>> map = scaleFactorRangeVos.stream()
.collect(Collectors.groupingBy(SysScaleFactorRangeVo::getFactorId)); .collect(Collectors.groupingBy(SysScaleFactorRangeVo::getFactorId));
scaleFactorVos.forEach(item -> item.setFactorRangeList(map.get(item.getFactorId()))); scaleFactorVos.forEach(item -> item.setFactorRangeList(map.get(item.getFactorId())));

View File

@ -1,7 +1,7 @@
package org.dromara.scale.service.impl; package org.dromara.scale.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@ -18,6 +18,7 @@ import org.dromara.common.redis.utils.QueueUtils;
import org.dromara.scale.constant.StatusEnum; import org.dromara.scale.constant.StatusEnum;
import org.dromara.scale.domain.SysScalePublish; import org.dromara.scale.domain.SysScalePublish;
import org.dromara.scale.domain.bo.SysScalePublishBo; import org.dromara.scale.domain.bo.SysScalePublishBo;
import org.dromara.scale.domain.vo.StatisticVo;
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.vo.SysScaleVo;
import org.dromara.scale.mapper.SysScaleMapper; import org.dromara.scale.mapper.SysScaleMapper;
@ -28,6 +29,7 @@ import org.springframework.stereotype.Service;
import java.util.Collection; import java.util.Collection;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -101,7 +103,7 @@ public class SysScalePublishServiceImpl implements ISysScalePublishService {
//将时间校验移出来方便后面使用 //将时间校验移出来方便后面使用
Date expireTime = add.getExpireTime(); Date expireTime = add.getExpireTime();
long l = DateUtils.differentMillisecond(new Date(), expireTime); long l = DateUtils.differentMillisecond(new Date(), expireTime);
if(l<=1000 * 3600 * 12){ if (l <= 1000 * 3600 * 12) {
throw new ServiceException("截止日期必须在六小时后"); throw new ServiceException("截止日期必须在六小时后");
} }
if (CollUtil.isNotEmpty(bo.getScaleIds())) { if (CollUtil.isNotEmpty(bo.getScaleIds())) {
@ -145,7 +147,7 @@ public class SysScalePublishServiceImpl implements ISysScalePublishService {
List<SysScalePublishVo> sysScalePublishVos = baseMapper.selectVoList(new LambdaQueryWrapper<SysScalePublish>() List<SysScalePublishVo> sysScalePublishVos = baseMapper.selectVoList(new LambdaQueryWrapper<SysScalePublish>()
.eq(SysScalePublish::getDeptId, deptId) .eq(SysScalePublish::getDeptId, deptId)
.eq(SysScalePublish::getStatus, StatusEnum.IN_USE.getValue())); .eq(SysScalePublish::getStatus, StatusEnum.IN_USE.getValue()));
if (!ArrayUtil.isEmpty(sysScalePublishVos)) { if (!ObjectUtil.isEmpty(sysScalePublishVos)) {
throw new ServiceException("此年级下已有发布"); throw new ServiceException("此年级下已有发布");
} }
} }
@ -161,4 +163,35 @@ public class SysScalePublishServiceImpl implements ISysScalePublishService {
return baseMapper.deleteBatchIds(ids) > 0; return baseMapper.deleteBatchIds(ids) > 0;
} }
/**
* 统计本场次
*
* @param batchNo
* @return
*/
@Override
public StatisticVo getStatistic4All(Long batchNo, Long scale) {
//SysScalePublishVo sysScalePublishVo = baseMapper.selectVoById(batchNo);
StatisticVo all = baseMapper.selectSingleAllAvaluation(batchNo);
int total = all.getValue();
StatisticVo already = baseMapper.selectSingleAlreadyAvaluation(batchNo, scale);
int alreadyValue = already.getValue();
all.setSpareValue(total - alreadyValue);
return all;
}
@Override
public List<StatisticVo> getStatistic4Class(Long batchNo, Long scale) {
List<StatisticVo> all = baseMapper.selectAllAvaluation(batchNo);
Map<String, Integer> collect = all.stream().collect(Collectors.groupingBy(StatisticVo::getName,
Collectors.collectingAndThen(Collectors.mapping(StatisticVo::getValue, Collectors.toList()),
values -> values.get(0))));
List<StatisticVo> alreadyList = baseMapper.selectAlreadyAvaluation(batchNo, scale);
alreadyList.forEach(a -> {
String name = a.getName();
int total = collect.get(name);
a.setSpareValue(total - a.getValue());
});
return alreadyList;
}
} }

View File

@ -1,7 +1,7 @@
package org.dromara.scale.service.impl; package org.dromara.scale.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@ -134,7 +134,7 @@ public class WebServiceImpl implements IWebService {
add.setUserId(loginUser.getUserId()); add.setUserId(loginUser.getUserId());
add.setDeptId(loginUser.getDeptId()); add.setDeptId(loginUser.getDeptId());
add.setCreateTime(new Date()); add.setCreateTime(new Date());
// validEntityBeforeSave(add); validEntityBeforeSave(add);
boolean flag = recordMapper.insert(add) > 0; boolean flag = recordMapper.insert(add) > 0;
if (flag) { if (flag) {
bo.setRecordId(add.getRecordId()); bo.setRecordId(add.getRecordId());
@ -151,7 +151,7 @@ public class WebServiceImpl implements IWebService {
Map<Long, List<SysScaleAnswerVo>> answerMapByQuestion = scaleAnswerService.getScaleAnswerMap(scaleId); Map<Long, List<SysScaleAnswerVo>> answerMapByQuestion = scaleAnswerService.getScaleAnswerMap(scaleId);
int keySize = answerMapByQuestion.keySet().size(); int keySize = answerMapByQuestion.keySet().size();
List<SysEvaluationAnswerBo> answerList = bo.getAnswerList(); List<SysEvaluationAnswerBo> answerList = bo.getAnswerList();
if (ArrayUtil.isEmpty(answerList)) { if (ObjectUtil.isEmpty(answerList)) {
throw new ServiceException("请先填写答案,再提交"); throw new ServiceException("请先填写答案,再提交");
} }
int answerSize = answerList.size(); int answerSize = answerList.size();
@ -211,7 +211,7 @@ public class WebServiceImpl implements IWebService {
.eq(SysEvaluationRecord::getBatchNo, entity.getBatchNo()) .eq(SysEvaluationRecord::getBatchNo, entity.getBatchNo())
.eq(SysEvaluationRecord::getUserId, entity.getUserId()) .eq(SysEvaluationRecord::getUserId, entity.getUserId())
.eq(SysEvaluationRecord::getScaleId, entity.getScaleId())); .eq(SysEvaluationRecord::getScaleId, entity.getScaleId()));
if (!ArrayUtil.isEmpty(recordList)) { if (!ObjectUtil.isEmpty(recordList)) {
throw new ServiceException("本场次中你已做过此量表"); throw new ServiceException("本场次中你已做过此量表");
} }
} }
@ -236,26 +236,26 @@ public class WebServiceImpl implements IWebService {
List<String> questionNum = questionMapByFactor.get(factorId); List<String> questionNum = questionMapByFactor.get(factorId);
List<String> questionIds = new ArrayList<>(); List<String> questionIds = new ArrayList<>();
if (CollUtil.isNotEmpty(questionNum)) {
questionNum.forEach(q -> {
questionIds.add(q); questionNum.forEach(q -> {
Long questionId = Long.parseLong(q); questionIds.add(q);
List<SysScaleAnswerVo> answerNum = answerMapByQuestion.get(questionId); Long questionId = Long.parseLong(q);
if (!ArrayUtil.isEmpty(answerNum)) { List<SysScaleAnswerVo> answerNum = answerMapByQuestion.get(questionId);
//找出分数最大的选项 if (!ObjectUtil.isEmpty(answerNum)) {
BigDecimal s = answerNum.stream() //找出分数最大的选项
.max(Comparator.comparing(SysScaleAnswerVo::getScore)).get().getScore(); BigDecimal s = answerNum.stream()
totalSocre.updateAndGet(v -> v.add(s)); .max(Comparator.comparing(SysScaleAnswerVo::getScore)).get().getScore();
SysEvaluationAnswerBo evaluationAnswer = answerList.stream() totalSocre.updateAndGet(v -> v.add(s));
.filter(answer -> questionId.equals(answer.getQuestionId())).findFirst().orElse(null); SysEvaluationAnswerBo evaluationAnswer = answerList.stream()
if (evaluationAnswer != null) { .filter(answer -> questionId.equals(answer.getQuestionId())).findFirst().orElse(null);
answerNum.stream().filter(o -> o.getAnswerId().equals(evaluationAnswer.getAnswerId())).findFirst() if (evaluationAnswer != null) {
.ifPresent( answerNum.stream().filter(o -> o.getAnswerId().equals(evaluationAnswer.getAnswerId())).findFirst()
m -> evalConclusion.setScore(m.getScore().add(evalConclusion.getScore()))); .ifPresent(
} m -> evalConclusion.setScore(m.getScore().add(evalConclusion.getScore())));
} }
}); }
} });
scaleFactor.setQuestionIds(questionIds); scaleFactor.setQuestionIds(questionIds);
//计算得分率 //计算得分率
if (totalSocre.get().compareTo(BigDecimal.ZERO) > 0) { if (totalSocre.get().compareTo(BigDecimal.ZERO) > 0) {

View File

@ -1,7 +1,43 @@
<?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.SysScalePublishMapper"> <mapper namespace="org.dromara.scale.mapper.SysScalePublishMapper">
<select id="selectSingleAllAvaluation" resultType="org.dromara.scale.domain.vo.StatisticVo">
select d.dept_name as `name`, count(u.user_id) as `value`
from sys_scale_publish sp
left join sys_dept d on sp.dept_id = d.dept_id
left join sys_user u on d.dept_id = u.dept_id and u.user_type = 'student'
where sp.batch_no = #{batchNo}
group by d.dept_id
</select>
<select id="selectSingleAlreadyAvaluation" resultType="org.dromara.scale.domain.vo.StatisticVo">
select d.dept_name as `name`, count(er.record_id) as `value`
from sys_scale_publish sp
left join sys_dept d on sp.dept_id = d.dept_id
left join sys_evaluation_record er on er.batch_no = sp.batch_no
where sp.batch_no = #{batchNo}
and er.scale_id = #{scaleId}
group by d.dept_id
</select>
<select id="selectAllAvaluation" resultType="org.dromara.scale.domain.vo.StatisticVo">
select d.dept_name as `name`, count(u.user_id) as `value`
from sys_scale_publish sp
left join sys_dept d on sp.dept_id = d.parent_id
left join sys_user u on d.dept_id = u.dept_id and u.user_type = 'student'
where sp.batch_no = #{batchNo}
group by d.dept_id
</select>
<select id="selectAlreadyAvaluation" resultType="org.dromara.scale.domain.vo.StatisticVo">
select d.dept_name as `name`, count(er.record_id) as `value`
from sys_scale_publish sp
left join sys_dept d on sp.dept_id = d.parent_id
left join sys_evaluation_record er on er.batch_no = sp.batch_no
where sp.batch_no = #{batchNo}
and er.scale_id = #{scaleId}
group by d.dept_id
</select>
</mapper> </mapper>