新增个测发布;优化测评端量表获取

This commit is contained in:
cjw 2024-04-30 10:54:10 +08:00
parent 022deaf4a3
commit 6a39aefb66
15 changed files with 157 additions and 112 deletions

View File

@ -11,6 +11,7 @@ import org.dromara.common.web.core.BaseController;
import org.dromara.scale.domain.bo.SubmitAnswerBo;
import org.dromara.scale.domain.vo.QuestionAnswerVo;
import org.dromara.scale.domain.vo.SysScalePublishVo;
import org.dromara.scale.domain.vo.SysScaleVo;
import org.dromara.scale.service.IWebService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -37,7 +38,7 @@ public class WebController extends BaseController {
* 查询发布量表
*/
@GetMapping("/publish")
public R<SysScalePublishVo> queryPublish() {
public R<List<SysScaleVo>> queryPublish() {
return R.ok(webService.queryPublishScale());
}

View File

@ -53,6 +53,16 @@ public class SysScalePublish {
@AutoMapping(target = "deptNames", expression = "java(cn.hutool.core.util.StrUtil.split(source.getDeptNames(), \",\"))")
private String deptNames;
@AutoMapping(target = "userIds", expression = "java(cn.hutool.core.util.StrUtil.split(source.getUserIds(), \",\"))")
private String userIds;
@AutoMapping(target = "userNames", expression = "java(cn.hutool.core.util.StrUtil.split(source.getUserNames(), \",\"))")
private String userNames;
/**
* 测评总人数
*/
private Integer totalNum;
/**
* 截止日期
*/
@ -68,6 +78,11 @@ public class SysScalePublish {
*/
private Integer allowQueryResult;
/**
* 0个测 1普测
*/
private Integer publishType;
/**
* 创建者
*/

View File

@ -21,56 +21,56 @@ import java.util.List;
*/
@Data
@AutoMapper(target = SysScalePublish.class, reverseConvertGenerate = false)
public class SysScalePublishBo {
public class SysScalePublishBo {
/**
*
*/
@NotNull(message = "不能为空", groups = { EditGroup.class })
@NotNull(message = "不能为空", groups = {EditGroup.class})
private Long batchNo;
/**
* 量表id以逗号隔开
*/
@NotEmpty(message = "量表id以逗号隔开不能为空", groups = { AddGroup.class, EditGroup.class })
@NotEmpty(message = "量表id以逗号隔开不能为空", groups = {AddGroup.class, EditGroup.class})
@AutoMapping(target = "scaleIds", expression = "java(java.lang.String.join(\",\", source.getScaleIds()))")
private List<String> scaleIds;
/**
* 量表名称 以逗号隔开
*/
// @NotBlank(message = "量表名称 以逗号隔开不能为空", groups = { AddGroup.class, EditGroup.class })
private String scaleNames;
/**
* 场次名称
*/
@NotBlank(message = "场次名称不能为空", groups = { AddGroup.class, EditGroup.class })
@NotBlank(message = "场次名称不能为空", groups = {AddGroup.class, EditGroup.class})
private String sessionName;
@NotEmpty(message = "分组id以逗号隔开不能为空", groups = { AddGroup.class, EditGroup.class })
@AutoMapping(target = "deptIds", expression = "java(java.lang.String.join(\",\", source.getDeptIds()))")
private List<String> deptIds;
private String deptNames;
@AutoMapping(target = "userIds", expression = "java(java.lang.String.join(\",\", source.getUserIds()))")
private List<String> userIds;
private String userNames;
/**
* 截止日期
*/
@NotNull(message = "截止日期不能为空", groups = { AddGroup.class, EditGroup.class })
@NotNull(message = "截止日期不能为空", groups = {AddGroup.class, EditGroup.class})
private Date expireTime;
/**
* 状态 0:停用1:正常
*/
//@NotNull(message = "状态 0:停用1:正常不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer status;
/**
* 0:不允许1允许
*/
@NotNull(message = "0:不允许1允许不能为空", groups = { AddGroup.class, EditGroup.class })
@NotNull(message = "结果展示类型不能为空", groups = {AddGroup.class, EditGroup.class})
private Integer allowQueryResult;
@NotNull(message = "量表类型不能为空", groups = {AddGroup.class, EditGroup.class})
private Integer publishType;
/**
* 创建者
*/

View File

@ -1,7 +1,5 @@
package org.dromara.scale.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.io.Serial;
@ -17,7 +15,6 @@ import java.util.List;
* @date 2024-04-07
*/
@Data
@ExcelIgnoreUnannotated
public class SysScalePublishVo implements Serializable {
@Serial
@ -26,45 +23,47 @@ public class SysScalePublishVo implements Serializable {
/**
*
*/
@ExcelProperty(value = "")
private Long batchNo;
/**
* 量表id以逗号隔开
*/
@ExcelProperty(value = "量表id以逗号隔开")
List<String> scaleIds;
List<String> scaleNames;
/**
* 场次名称
*/
@ExcelProperty(value = "场次名称")
private String sessionName;
/**
* 分组id以逗号隔开
*/
@ExcelProperty(value = "部门分组id")
private List<String> deptIds;
private List<String> deptNames;
private List<String> userIds;
private List<String> userNames;
/**
* 测评总人数
*/
private Integer totalNum;
/**
* 截止日期
*/
@ExcelProperty(value = "截止日期")
private Date expireTime;
/**
* 状态 0:停用1:正常
*/
@ExcelProperty(value = "状态 0:停用1:正常")
private Integer status;
/**
* 0:不允许1允许
*/
@ExcelProperty(value = "0:不允许1允许")
private Integer allowQueryResult;
private Long createBy;

View File

@ -7,6 +7,7 @@ import org.apache.ibatis.annotations.Mapper;
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.SysScaleVo;
import org.dromara.scale.domain.vo.WordEvaluationAnswerVo;
import org.dromara.scale.domain.vo.SysEvaluationRecordVo;
import org.dromara.scale.domain.vo.SysScalePublishVo;
@ -22,7 +23,7 @@ import java.util.List;
@Mapper
public interface SysEvaluationRecordMapper extends BaseMapperPlus<SysEvaluationRecord, SysEvaluationRecordVo> {
List<SysEvaluationRecordVo> selectSclaeRecordListByUserAndBatch(@Param("userId") Long userId, @Param("batchNo") Long batchNo);
List<SysScaleVo> selectPublishScaleListByUserAndBatch(@Param("userId") Long userId, @Param("batchNos") String batchNos);
SysScalePublishVo selectPublishByUseRecord(Long recordId);

View File

@ -23,10 +23,12 @@ public interface SysScalePublishMapper extends BaseMapperPlus<SysScalePublish, S
List<String> selectDeptIdsInUse();
SysScalePublish selectUsePublishByDeptId(Long deptId);
List<EvaluationVo> selectUndoneEvaluationVoList(@Param("batchNo") Long batchNo);
SysScalePublish selectPublishById(@Param("batchNo") Long batchNo);
String selectUseBatchNoByDeptId(Long deptId);
String selectUseBatchNoByUserId(Long userId);
}

View File

@ -3,7 +3,6 @@ package org.dromara.scale.service;
import com.deepoove.poi.XWPFTemplate;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.scale.domain.SysScalePublish;
import org.dromara.scale.domain.bo.BaseQueryBo;
import org.dromara.scale.domain.bo.SysEvaluationRecordBo;
import org.dromara.scale.domain.vo.SysEvaluationRecordVo;
@ -35,8 +34,6 @@ public interface ISysEvaluationRecordService {
List<SysEvaluationRecordVo> queryList(SysEvaluationRecordBo bo);
void insertBathByPublish(SysScalePublish add);
XWPFTemplate getWordTemplate(BaseQueryBo bo) throws IOException;

View File

@ -2,14 +2,14 @@ package org.dromara.scale.service;
import org.dromara.scale.domain.bo.SubmitAnswerBo;
import org.dromara.scale.domain.vo.QuestionAnswerVo;
import org.dromara.scale.domain.vo.SysScalePublishVo;
import org.dromara.scale.domain.vo.SysScaleVo;
import java.util.List;
import java.util.Map;
public interface IWebService {
SysScalePublishVo queryPublishScale();
List<SysScaleVo> queryPublishScale();
List<QuestionAnswerVo> queryQuestionAnswerListByScaleId(Long scaleId);

View File

@ -11,13 +11,10 @@ import com.deepoove.poi.data.Tables;
import com.deepoove.poi.data.style.BorderStyle;
import lombok.RequiredArgsConstructor;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.scale.constant.StatusEnum;
import org.dromara.scale.domain.EvaluationEecordWordData;
import org.dromara.scale.domain.SysEvaluationRecord;
import org.dromara.scale.domain.SysScalePublish;
import org.dromara.scale.domain.bo.BaseQueryBo;
import org.dromara.scale.domain.bo.SysEvaluationRecordBo;
import org.dromara.scale.domain.vo.SysEvaluationRecordVo;
@ -28,16 +25,13 @@ import org.dromara.scale.mapper.SysEvaluationRecordMapper;
import org.dromara.scale.mapper.SysInterveneRecordMapper;
import org.dromara.scale.mapper.SysScaleMapper;
import org.dromara.scale.service.ISysEvaluationRecordService;
import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.system.mapper.SysUserMapper;
import org.springframework.core.io.ClassPathResource;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.rmi.ServerException;
import java.util.ArrayList;
import java.util.List;
/**
@ -97,30 +91,6 @@ public class SysEvaluationRecordServiceImpl implements ISysEvaluationRecordServi
return lqw;
}
@Async
@Override
public void insertBathByPublish(SysScalePublish add) {
String deptIds = add.getDeptIds();
Long batchNo = add.getBatchNo();
String scaleIds = add.getScaleIds();
List<String> scaleList = StringUtils.splitList(scaleIds);
List<SysUser> sysUsers = userMapper.selectStudentListByDeptIds(deptIds);
List<SysEvaluationRecord> recordList = new ArrayList<>();
for (String scaleId : scaleList) {
for (SysUser user : sysUsers) {
SysEvaluationRecord record = new SysEvaluationRecord();
record.setUserId(user.getUserId());
record.setDeptId(user.getDeptId());
record.setBatchNo(batchNo);
record.setScaleId(Long.parseLong(scaleId));
record.setStatus(StatusEnum.DISABLED.getValue());
recordList.add(record);
}
}
baseMapper.insertBatch(recordList, 100);
}
@Override
public XWPFTemplate getWordTemplate(BaseQueryBo bo) throws IOException {
Long userId = bo.getUserId();

View File

@ -1,6 +1,5 @@
package org.dromara.scale.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -16,20 +15,24 @@ import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.redis.utils.QueueUtils;
import org.dromara.scale.constant.StatusEnum;
import org.dromara.scale.domain.SysEvaluationRecord;
import org.dromara.scale.domain.SysScalePublish;
import org.dromara.scale.domain.bo.BaseQueryBo;
import org.dromara.scale.domain.bo.SysScalePublishBo;
import org.dromara.scale.domain.vo.EvaluationVo;
import org.dromara.scale.domain.vo.SysScalePublishVo;
import org.dromara.scale.domain.vo.SysScaleVo;
import org.dromara.scale.mapper.SysEvaluationRecordMapper;
import org.dromara.scale.mapper.SysScaleMapper;
import org.dromara.scale.mapper.SysScalePublishMapper;
import org.dromara.scale.service.ISysEvaluationRecordService;
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.stereotype.Service;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;
@ -52,10 +55,12 @@ public class SysScalePublishServiceImpl implements ISysScalePublishService {
private final SysScaleMapper scaleMapper;
private final ISysEvaluationRecordService evaluationRecordService;
private final SysEvaluationRecordMapper recordMapper;
private final SysDeptMapper deptMapper;
private final SysUserMapper userMapper;
/**
* 查询量发布
*/
@ -101,35 +106,74 @@ public class SysScalePublishServiceImpl implements ISysScalePublishService {
public Boolean insertByBo(SysScalePublishBo bo) {
LoginUser loginUser = getLoginUser();
SysScalePublish add = MapstructUtils.convert(bo, SysScalePublish.class);
add.setStatus(StatusEnum.IN_USE.getValue());
add.setCreateBy(loginUser.getUserId());
add.setCreateTime(new Date());
validEntityBeforeSave(add);
Integer publishType = add.getPublishType();
Long batchNo = add.getBatchNo();
String scaleIds = add.getScaleIds();
String deptIds = add.getDeptIds();
String userIds = add.getUserIds();
//将时间校验移出来方便后面使用
Date expireTime = add.getExpireTime();
long l = DateUtils.differentMillisecond(new Date(), expireTime);
if (l <= 1000 * 3600 * 12) {
throw new ServiceException("截止日期必须在六小时后");
}
if (CollUtil.isNotEmpty(bo.getScaleIds())) {
List<SysScaleVo> list = scaleMapper.findSysScaleByIds(StrUtil.join(StrUtil.COMMA, bo.getScaleIds()));
add.setScaleNames(list.stream().map(SysScaleVo::getScaleName).collect(Collectors.joining(StrUtil.COMMA)));
for (String scaleId : bo.getScaleIds()) {
scaleMapper.updatePublishNums(Long.parseLong(scaleId));
}
List<SysScaleVo> list = scaleMapper.findSysScaleByIds(scaleIds);
add.setScaleNames(list.stream().map(SysScaleVo::getScaleName).collect(Collectors.joining(StrUtil.COMMA)));
for (String scaleId : bo.getScaleIds()) {
scaleMapper.updatePublishNums(Long.parseLong(scaleId));
}
List<SysDeptVo> deptList = deptMapper.findDeptByIds(StrUtil.join(StrUtil.COMMA, bo.getDeptIds()));
add.setDeptNames(deptList.stream().map(SysDeptVo::getDeptName).collect(Collectors.joining(StrUtil.COMMA)));
//处理用户
List<SysUser> userList;
if (publishType == 1) {
if (StringUtils.isEmpty(deptIds)) {
throw new ServiceException("分组id以逗号隔开不能为空");
}
//冗余名称
List<SysDeptVo> deptList = deptMapper.findDeptByIds(deptIds);
add.setDeptNames(deptList.stream().map(SysDeptVo::getDeptName).collect(Collectors.joining(StrUtil.COMMA)));
userList = userMapper.selectStudentListByDeptIds(deptIds);
} else {
if (StringUtils.isEmpty(userIds)) {
throw new ServiceException("用户id以逗号隔开不能为空");
}
userList = userMapper.findUserByIds(userIds);
//冗余名称
add.setUserNames(userList.stream().map(SysUser::getNickName).collect(Collectors.joining(StrUtil.COMMA)));
}
add.setTotalNum(userList.size());
//预处理量测记录方便后续统计与查询
List<String> scaleList = bo.getScaleIds();
insertRecordBatch(batchNo, scaleList, userList);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setBatchNo(add.getBatchNo());
}
//加入延迟队列
QueueUtils.addDelayedQueueObject("scalePublish-delay-queue", add.getBatchNo(), l, TimeUnit.MILLISECONDS);
//预处理量测记录方便后续统计与查询
evaluationRecordService.insertBathByPublish(add);
return flag;
}
private void insertRecordBatch(Long batchNo, List<String> scaleList, List<SysUser> userList) {
List<SysEvaluationRecord> recordList = new ArrayList<>(scaleList.size() * userList.size());
for (String scaleId : scaleList) {
for (SysUser user : userList) {
SysEvaluationRecord record = new SysEvaluationRecord();
record.setUserId(user.getUserId());
record.setDeptId(user.getDeptId());
record.setBatchNo(batchNo);
record.setScaleId(Long.parseLong(scaleId));
record.setStatus(StatusEnum.DISABLED.getValue());
recordList.add(record);
}
}
recordMapper.insertBatch(recordList, 100);
}
/**
* 修改量发布
*/

View File

@ -2,11 +2,13 @@ package org.dromara.scale.service.impl;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.enums.UserType;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.scale.constant.ScaleDimensionEnum;
import org.dromara.scale.constant.ScoreRuleTypeEnum;
import org.dromara.scale.constant.SituationEnum;
@ -20,7 +22,6 @@ import org.dromara.scale.service.ISysScaleAnswerService;
import org.dromara.scale.service.ISysScaleFactorService;
import org.dromara.scale.service.ISysWarnRecordService;
import org.dromara.scale.service.IWebService;
import org.dromara.system.domain.SysOss;
import org.dromara.system.mapper.SysOssMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -69,7 +70,7 @@ public class WebServiceImpl implements IWebService {
@Override
public SysScalePublishVo queryPublishScale() {
public List<SysScaleVo> queryPublishScale() {
LoginUser loginUser = getLoginUser();
Long userId = loginUser.getUserId();
Long deptId = loginUser.getDeptId();
@ -77,27 +78,21 @@ public class WebServiceImpl implements IWebService {
if (!UserType.STUDENT.getName().equals(userType)) {
throw new ServiceException("只有学生账户才能测评");
}
SysScalePublish sysScalePublish = publishMapper.selectUsePublishByDeptId(deptId);
Long batchNo = sysScalePublish.getBatchNo();
String scaleIds = sysScalePublish.getScaleIds();
//todo
List<SysScaleVo> publishScaleVos = scaleMapper.findSysScaleByIds(scaleIds);
List<SysEvaluationRecordVo> recordVos = recordMapper.selectSclaeRecordListByUserAndBatch(userId, batchNo);
for (SysScaleVo publishScaleVo : publishScaleVos) {
SysOss sysOss = ossMapper.selectById(publishScaleVo.getCover());
publishScaleVo.setCoverUrl(sysOss.getUrl());
//已做过量表
for (SysEvaluationRecordVo recordVo : recordVos) {
if (publishScaleVo.getScaleId().equals(recordVo.getScaleId())) {
publishScaleVo.setRecordId(recordVo.getRecordId());
publishScaleVo.setUsed(recordVo.getStatus() == 1);
}
}
String deptBatchNo = publishMapper.selectUseBatchNoByDeptId(deptId);
String userBatchNo = publishMapper.selectUseBatchNoByUserId(userId);
List<String> batchList = new ArrayList<>();
List<SysScaleVo> scaleVos = new ArrayList<>();
if (StringUtils.isNotEmpty(deptBatchNo)) {
batchList.add(deptBatchNo);
}
SysScalePublishVo sysScalePublishVo = MapstructUtils.convert(sysScalePublish, SysScalePublishVo.class);
sysScalePublishVo.setScaleList(publishScaleVos);
return sysScalePublishVo;
if (StringUtils.isNotEmpty(userBatchNo)) {
batchList.add(userBatchNo);
}
if (batchList.size() == 0) {
return scaleVos;
}
scaleVos = recordMapper.selectPublishScaleListByUserAndBatch(userId, StrUtil.join(StrUtil.COMMA, batchList));
return scaleVos;
}
@Override

View File

@ -3,11 +3,19 @@
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.scale.mapper.SysEvaluationRecordMapper">
<select id="selectSclaeRecordListByUserAndBatch" resultType="org.dromara.scale.domain.vo.SysEvaluationRecordVo">
select *
from sys_evaluation_record
where user_id = #{userId}
and batch_no = #{batchNo}
<select id="selectPublishScaleListByUserAndBatch" resultType="org.dromara.scale.domain.vo.SysScaleVo">
select s.scale_id,
s.scale_name,
s.scale_title,
s.cover,
s.questions_num,
o.url as `coverUrl`,
if(er.status = 1, true, false) as `use`
from sys_evaluation_record er
left join sys_scale s on s.scale_id = er.scale_id
left join sys_oss o on o.oss_id = s.cover
where er.user_id = #{userId}
and find_in_set(er.batch_no,#{batchNos})
</select>
<select id="selectPublishByUseRecord" resultType="org.dromara.scale.domain.vo.SysScalePublishVo">

View File

@ -30,13 +30,6 @@
where status = 1
</select>
<select id="selectUsePublishByDeptId" resultType="org.dromara.scale.domain.SysScalePublish">
select *
from sys_scale_publish
where status = 1
and find_in_set(#{deptId}, dept_ids)
</select>
<select id="selectUndoneEvaluationVoList" resultType="org.dromara.scale.domain.vo.EvaluationVo">
select d.dept_id,
d.dept_name,
@ -62,4 +55,18 @@
left join sys_user u on u.user_id = sp.create_by
where sp.batch_no= #{batchNo}
</select>
<select id="selectUseBatchNoByDeptId" resultType="java.lang.String">
select batch_no
from sys_scale_publish
where status = 1
and find_in_set(#{deptId}, dept_ids)
</select>
<select id="selectUseBatchNoByUserId" resultType="java.lang.String">
select batch_no
from sys_scale_publish
where status = 1
and find_in_set(#{userId}, user_ids)
</select>
</mapper>

View File

@ -121,5 +121,6 @@ public interface SysUserMapper extends BaseMapperPlus<SysUser, SysUserVo> {
int updateInterveneById(@Param(Constants.ENTITY) SysUser user);
List<SysUser> findUserByIds(String userIds);
}

View File

@ -171,9 +171,9 @@
<select id="selectStudentListByDeptId" parameterType="Long" resultMap="SysUserResult">
<include refid="selectUserVo"/>
where u.del_flag = '0'
and u.dept_id = #{deptId}
where u.dept_id = #{deptId}
and user_type = 'student'
and u.del_flag = '0'
</select>
<update id="updatePasswordBatchById" parameterType="java.util.List">
@ -188,10 +188,15 @@
from sys_dept d
left join sys_user u on u.dept_id = d.dept_id
where u.user_type = 'student'
and u.del_flag = 0
and find_in_set(d.dept_id, #{deptIds})
</select>
<update id="updateInterveneById">
update sys_user set intervene_status = #{et.interveneStatus} where user_id = #{et.userId}
</update>
<select id="findUserByIds" resultType="org.dromara.system.domain.SysUser">
select * from sys_user where find_in_set(user_id, #{userIds})
</select>
</mapper>