Commit 8709b146 by zhengyunfei
parents 780fa857 aeef9ca8
package com.ruoyi.web.controller.system; package com.ruoyi.web.controller.system;
import cn.dev33.satoken.annotation.SaIgnore; import cn.dev33.satoken.annotation.SaIgnore;
import cn.hutool.core.collection.CollUtil;
import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.domain.entity.SysMenu; import com.ruoyi.common.core.domain.entity.SysMenu;
...@@ -22,6 +23,7 @@ import org.springframework.web.bind.annotation.RequestBody; ...@@ -22,6 +23,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotBlank;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -134,6 +136,9 @@ public class SysLoginController { ...@@ -134,6 +136,9 @@ public class SysLoginController {
public R<Map<String, Object>> getInfo() { public R<Map<String, Object>> getInfo() {
LoginUser loginUser = LoginHelper.getLoginUser(); LoginUser loginUser = LoginHelper.getLoginUser();
SysUser user = userService.selectUserById(loginUser.getUserId()); SysUser user = userService.selectUserById(loginUser.getUserId());
if(StringUtils.isNotEmpty(user.getDeptList())){
user.setDeptListArray(CollUtil.newArrayList(user.getDeptList().split(",")));
}
Map<String, Object> ajax = new HashMap<>(); Map<String, Object> ajax = new HashMap<>();
ajax.put("user", user); ajax.put("user", user);
ajax.put("roles", loginUser.getRolePermission()); ajax.put("roles", loginUser.getRolePermission());
......
...@@ -23,6 +23,7 @@ import com.ruoyi.common.utils.StreamUtils; ...@@ -23,6 +23,7 @@ import com.ruoyi.common.utils.StreamUtils;
import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.domain.vo.SysUserExportVo; import com.ruoyi.system.domain.vo.SysUserExportVo;
import com.ruoyi.system.domain.vo.SysUserImportNewVo;
import com.ruoyi.system.domain.vo.SysUserImportVo; import com.ruoyi.system.domain.vo.SysUserImportVo;
import com.ruoyi.system.listener.SysUserImportListener; import com.ruoyi.system.listener.SysUserImportListener;
import com.ruoyi.system.service.ISysDeptService; import com.ruoyi.system.service.ISysDeptService;
...@@ -119,6 +120,53 @@ public class SysUserController extends BaseController { ...@@ -119,6 +120,53 @@ public class SysUserController extends BaseController {
} }
/** /**
* 获取导入模板
*/
@PostMapping("/importTemplateNew")
public void importTemplateNew(HttpServletResponse response) {
ExcelUtil.exportExcel(new ArrayList<>(), "用户数据", SysUserImportNewVo.class, response);
}
/**
* 导入数据
*
* @param file 导入文件
* @param updateSupport 是否更新已存在数据
*/
@Log(title = "用户管理", businessType = BusinessType.IMPORT)
@PostMapping(value = "/importDataNew", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<Void> importDataNew(@RequestPart("file") MultipartFile file, boolean updateSupport) throws Exception {
List<SysUserImportNewVo> sysUserImportNewVos = ExcelUtil.importExcel(file.getInputStream(), SysUserImportNewVo.class);
if(CollUtil.isNotEmpty(sysUserImportNewVos)){
sysUserImportNewVos.forEach(sui->{
SysUser sysUser = userService.selectUserByUserName(sui.getUserName());
if(BeanUtil.isNotEmpty(sysUser) || StringUtils.isEmpty(sui.getNickName()) || StringUtils.isEmpty(sui.getUserName()) || StringUtils.isEmpty(sui.getSex()) || StringUtils.isEmpty(sui.getPassword()) ){
//存在该用户无需导入
return;
}
SysUser usi=new SysUser();
usi.setNickName(sui.getNickName());
usi.setUserName(sui.getUserName());
if(sui.getSex().equals("老师")){
usi.setSex("1");
}
if(sui.getSex().equals("学生")){
usi.setSex("0");
}
usi.setStatus("0");
usi.setRemark("系统导入用户数据");
usi.setPassword(BCrypt.hashpw(usi.getPassword()));
Long[] role=new Long[1];
role[0]=new Long(2);
usi.setRoleIds(role);
userService.insertUser(usi);
});
}
return R.ok();
}
/**
* 根据用户编号获取详细信息 * 根据用户编号获取详细信息
* *
* @param userId 用户ID * @param userId 用户ID
...@@ -133,6 +181,9 @@ public class SysUserController extends BaseController { ...@@ -133,6 +181,9 @@ public class SysUserController extends BaseController {
ajax.put("posts", postService.selectPostAll()); ajax.put("posts", postService.selectPostAll());
if (ObjectUtil.isNotNull(userId)) { if (ObjectUtil.isNotNull(userId)) {
SysUser sysUser = userService.selectUserById(userId); SysUser sysUser = userService.selectUserById(userId);
if(StringUtils.isNotEmpty(sysUser.getDeptList())){
sysUser.setDeptListArray(CollUtil.newArrayList(sysUser.getDeptList().split(",")));
}
ajax.put("user", sysUser); ajax.put("user", sysUser);
ajax.put("postIds", postService.selectPostListByUserId(userId)); ajax.put("postIds", postService.selectPostListByUserId(userId));
ajax.put("roleIds", StreamUtils.toList(sysUser.getRoles(), SysRole::getRoleId)); ajax.put("roleIds", StreamUtils.toList(sysUser.getRoles(), SysRole::getRoleId));
...@@ -147,6 +198,30 @@ public class SysUserController extends BaseController { ...@@ -147,6 +198,30 @@ public class SysUserController extends BaseController {
@Log(title = "用户管理", businessType = BusinessType.INSERT) @Log(title = "用户管理", businessType = BusinessType.INSERT)
@PostMapping @PostMapping
public R<Void> add(@Validated @RequestBody SysUser user) { public R<Void> add(@Validated @RequestBody SysUser user) {
//新增逻辑处理
if(CollUtil.isNotEmpty(user.getDeptInsetArray())){
//判断是否为父级
List<String> colList = user.getDeptInsetArray();
List<String> uio=new ArrayList<>();
colList.forEach(syu->{
List<SysDept> sysDep = deptService.selectDeptListByDeID(new Long(syu));
if(CollUtil.isNotEmpty(sysDep)){
sysDep.forEach(ss->{
uio.add(String.valueOf(ss.getDeptId()));
});
return;
}
uio.add(syu);
});
// 设置list
if(CollUtil.isNotEmpty(uio)){
user.setDeptList(CollUtil.join(uio, ","));
}
}
Long[] role=new Long[1];
role[0]=new Long(2);
user.setRoleIds(role);
if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user))) { if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user))) {
return R.fail("新增用户'" + user.getUserName() + "'失败,登录账号已存在"); return R.fail("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
} else if (StringUtils.isNotEmpty(user.getPhonenumber()) } else if (StringUtils.isNotEmpty(user.getPhonenumber())
...@@ -167,6 +242,26 @@ public class SysUserController extends BaseController { ...@@ -167,6 +242,26 @@ public class SysUserController extends BaseController {
@Log(title = "用户管理", businessType = BusinessType.UPDATE) @Log(title = "用户管理", businessType = BusinessType.UPDATE)
@PutMapping @PutMapping
public R<Void> edit(@Validated @RequestBody SysUser user) { public R<Void> edit(@Validated @RequestBody SysUser user) {
//修改用户逻辑
if(CollUtil.isNotEmpty(user.getDeptInsetArray())){
//判断是否为父级
List<String> colList = user.getDeptInsetArray();
List<String> uio=new ArrayList<>();
colList.forEach(syu->{
List<SysDept> sysDep = deptService.selectDeptListByDeID(new Long(syu));
if(CollUtil.isNotEmpty(sysDep)){
sysDep.forEach(ss->{
uio.add(String.valueOf(ss.getDeptId()));
});
return;
}
uio.add(syu);
});
// 设置list
if(CollUtil.isNotEmpty(uio)){
user.setDeptList(CollUtil.join(uio, ","));
}
}
userService.checkUserAllowed(user); userService.checkUserAllowed(user);
userService.checkUserDataScope(user.getUserId()); userService.checkUserDataScope(user.getUserId());
if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user))) { if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user))) {
...@@ -178,6 +273,7 @@ public class SysUserController extends BaseController { ...@@ -178,6 +273,7 @@ public class SysUserController extends BaseController {
&& UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) { && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) {
return R.fail("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在"); return R.fail("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
} }
return toAjax(userService.updateUser(user)); return toAjax(userService.updateUser(user));
} }
......
...@@ -158,6 +158,19 @@ public class SysUser extends BaseEntity { ...@@ -158,6 +158,19 @@ public class SysUser extends BaseEntity {
*/ */
@TableField(exist = false) @TableField(exist = false)
private String deptListStr; private String deptListStr;
/**
* 班级数组
*/
@TableField(exist = false)
private List<String> deptListArray;
/**
* 班级数组
*/
@TableField(exist = false)
private List<String> deptInsetArray;
public SysUser(Long userId) { public SysUser(Long userId) {
this.userId = userId; this.userId = userId;
......
package com.ruoyi.system.domain.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.ruoyi.common.annotation.ExcelDictFormat;
import com.ruoyi.common.convert.ExcelDictConvert;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* 用户对象导入VO
*
* @author Lion Li
*/
@Data
@NoArgsConstructor
// @Accessors(chain = true) // 导入不允许使用 会找不到set方法
public class SysUserImportNewVo implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 用户账号
*/
@ExcelProperty(value = "学号")
private String userName;
/**
* 密码
*/
@ExcelProperty(value = "密码")
private String password;
/**
* 用户昵称
*/
@ExcelProperty(value = "用户昵称")
private String nickName;
/**
* 用户性别
*/
@ExcelProperty(value = "用户身份")
private String sex;
}
...@@ -36,6 +36,14 @@ public interface SysDeptMapper extends BaseMapperPlus<SysDeptMapper, SysDept, Sy ...@@ -36,6 +36,14 @@ public interface SysDeptMapper extends BaseMapperPlus<SysDeptMapper, SysDept, Sy
List<SysDept> selectDeptListNew(@Param("deptList") List<Long> deptList); List<SysDept> selectDeptListNew(@Param("deptList") List<Long> deptList);
/** /**
* 查询部门管理数据
*
* @param deptList 查询条件
* @return 部门信息集合
*/
List<SysDept> selectDeptListDeId(@Param("deptList") Long deptList);
/**
* 根据角色ID查询部门树信息 * 根据角色ID查询部门树信息
* *
* @param roleId 角色ID * @param roleId 角色ID
......
...@@ -28,6 +28,15 @@ public interface ISysDeptService { ...@@ -28,6 +28,15 @@ public interface ISysDeptService {
*/ */
List<SysDept> selectDeptListByList(List<Long> deptList); List<SysDept> selectDeptListByList(List<Long> deptList);
/**
* 根据父类id查询所有子类
*
* @param deptList 部门信息
* @return 部门信息集合
*/
List<SysDept> selectDeptListByDeID(Long deptList);
/** /**
* 查询部门树结构信息 * 查询部门树结构信息
* *
......
...@@ -48,6 +48,8 @@ public interface ISysUserService { ...@@ -48,6 +48,8 @@ public interface ISysUserService {
*/ */
SysUser selectUserByUserName(String userName); SysUser selectUserByUserName(String userName);
/** /**
* 通过手机号查询用户 * 通过手机号查询用户
* *
......
...@@ -65,6 +65,10 @@ public class SysDeptServiceImpl implements ISysDeptService { ...@@ -65,6 +65,10 @@ public class SysDeptServiceImpl implements ISysDeptService {
return baseMapper.selectDeptListNew(deptList); return baseMapper.selectDeptListNew(deptList);
} }
@Override
public List<SysDept> selectDeptListByDeID(Long deptList) {
return baseMapper.selectDeptListDeId(deptList);
}
/** /**
* 查询部门树结构信息 * 查询部门树结构信息
* *
......
...@@ -27,6 +27,7 @@ import com.ruoyi.system.mapper.*; ...@@ -27,6 +27,7 @@ import com.ruoyi.system.mapper.*;
import com.ruoyi.system.service.ISysUserService; import com.ruoyi.system.service.ISysUserService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.javassist.runtime.Desc;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
...@@ -82,6 +83,7 @@ public class SysUserServiceImpl implements ISysUserService { ...@@ -82,6 +83,7 @@ public class SysUserServiceImpl implements ISysUserService {
.eq(ObjectUtil.isNotNull(user.getUserId()), "u.user_id", user.getUserId()) .eq(ObjectUtil.isNotNull(user.getUserId()), "u.user_id", user.getUserId())
.like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName()) .like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
.eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus()) .eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus())
.eq(StringUtils.isNotBlank(user.getSex()), "u.sex", user.getSex())
.like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber()) .like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber())
.between(params.get("beginTime") != null && params.get("endTime") != null, .between(params.get("beginTime") != null && params.get("endTime") != null,
"u.create_time", params.get("beginTime"), params.get("endTime")) "u.create_time", params.get("beginTime"), params.get("endTime"))
......
...@@ -51,6 +51,15 @@ ...@@ -51,6 +51,15 @@
</foreach> </foreach>
</select> </select>
<select id="selectDeptListDeId" resultMap="SysDeptResult">
SELECT *
FROM
sys_dept
where del_flag='0'
AND parent_id =#{deptList}
</select>
<select id="selectDeptListByRoleId" resultType="Long"> <select id="selectDeptListByRoleId" resultType="Long">
select d.dept_id select d.dept_id
from sys_dept d from sys_dept d
......
...@@ -126,6 +126,7 @@ ...@@ -126,6 +126,7 @@
sys_user u sys_user u
left join sys_dept d on u.dept_id = d.dept_id left join sys_dept d on u.dept_id = d.dept_id
${ew.getCustomSqlSegment} ${ew.getCustomSqlSegment}
order by u.user_id DESC
</select> </select>
<select id="selectUserList" resultMap="SysUserResult"> <select id="selectUserList" resultMap="SysUserResult">
...@@ -164,7 +165,7 @@ ...@@ -164,7 +165,7 @@
where u.del_flag = '0' and u.phonenumber = #{phonenumber} where u.del_flag = '0' and u.phonenumber = #{phonenumber}
</select> </select>
<select id="selectUserById" parameterType="Long" resultMap="SysUserResult"> <select id="selectUserById" parameterType="Long" resultMap="SysUserResult12">
<include refid="selectUserVo"/> <include refid="selectUserVo"/>
where u.del_flag = '0' and u.user_id = #{userId} where u.del_flag = '0' and u.user_id = #{userId}
</select> </select>
......
...@@ -70,5 +70,16 @@ public class TestPaperController extends BaseController { ...@@ -70,5 +70,16 @@ public class TestPaperController extends BaseController {
return toAjax(testPaperService.paperTestEnd(bo)); return toAjax(testPaperService.paperTestEnd(bo));
} }
/**
* [小程序端]检查答题卡完整性
*
* @param recordId 答题记录ID
* @return 结果
*/
@Log(title = "检车答题卡完整性", businessType = BusinessType.OTHER)
@GetMapping("/check/{recordId}")
public R<Boolean> checkIntegrality(@PathVariable Long recordId) {
return R.ok(testPaperService.checkTestPaperIntegrality(recordId));
}
} }
...@@ -36,9 +36,10 @@ public class DbTestPaperRecord extends BaseEntity { ...@@ -36,9 +36,10 @@ public class DbTestPaperRecord extends BaseEntity {
/** /**
* 状态 * 状态
* <ul> * <ul>
* <ol>0:正在答题</ol> * <ol>0:答题中</ol>
* <ol>1:待批阅</ol> * <ol>1:待批阅</ol>
* <ol>2:已批阅</ol> * <ol>2:批阅中</ol>
* <ol>3:批阅完成</ol>
* </ul> * </ul>
*/ */
private Integer status; private Integer status;
......
...@@ -39,7 +39,6 @@ public class DbTestPaperRecordDetail extends BaseEntity { ...@@ -39,7 +39,6 @@ public class DbTestPaperRecordDetail extends BaseEntity {
* 答案 * 答案
*/ */
private String answer; private String answer;
/** /**
* 图片答案 * 图片答案
*/ */
......
...@@ -48,7 +48,7 @@ public class DbTestPaperRecordDetailVo { ...@@ -48,7 +48,7 @@ public class DbTestPaperRecordDetailVo {
/** /**
* 图片答案 * 图片答案
*/ */
@ExcelProperty(value = "答案") @ExcelProperty(value = "图片答案")
private String answerPic; private String answerPic;
/** /**
......
...@@ -42,4 +42,12 @@ public interface ITestPaperService { ...@@ -42,4 +42,12 @@ public interface ITestPaperService {
* @return 考试题目 * @return 考试题目
*/ */
TableDataInfo<TestQuestionItemVo> nextQuestion(TestPaperAnswerBo request, PageQuery pageQuery); TableDataInfo<TestQuestionItemVo> nextQuestion(TestPaperAnswerBo request, PageQuery pageQuery);
/**
* 检查答题卡完整性
*
* @param recordId 答题记录ID
* @return 答题完整性
*/
boolean checkTestPaperIntegrality(Long recordId);
} }
...@@ -152,7 +152,41 @@ public class TestPaperServiceImpl implements ITestPaperService { ...@@ -152,7 +152,41 @@ public class TestPaperServiceImpl implements ITestPaperService {
RedisUtils.deleteKeys(key); RedisUtils.deleteKeys(key);
}); });
if (CollUtil.isNotEmpty(insertPaperRecords)) { if (CollUtil.isNotEmpty(insertPaperRecords)) {
return paperRecordDetailService.saveBatch(insertPaperRecords); if (!paperRecordDetailService.saveBatch(insertPaperRecords)) {
throw new ServiceException("答题记录保存失败");
}
// 修改考试记录状态为待批阅
testPaperRecord.setStatus(1);
if (!paperRecordService.updateByBo(BeanUtil.toBean(testPaperService, DbTestPaperRecordBo.class))) {
throw new ServiceException("考试记录状态修改失败");
}
return true;
}
return true;
}
/**
* 检查答题卡完整性
*
* @param recordId 答题记录ID
* @return 答题完整性
*/
@Override
public boolean checkTestPaperIntegrality(Long recordId) {
// 查询试卷对应所有的题目
DbTestPaperRecord testPaperRecord = paperRecordService.getOne(Wrappers.<DbTestPaperRecord>lambdaQuery().eq(DbTestPaperRecord::getId, recordId));
Objects.requireNonNull(testPaperRecord, "未检查到合法考试记录");
DbQuestionBankTestPaperBo queryCondition = new DbQuestionBankTestPaperBo();
queryCondition.setTestPaperId(testPaperRecord.getTestPaperId());
List<DbQuestionBankTestPaperVo> questionList = bankTestPaperService.queryList(queryCondition);
for (DbQuestionBankTestPaperVo question : questionList) {
// 查询Redis中是否有该题的提交记录
String key = String.format(TEST_PAPER_ANSWER_KEY_FORMAT, TEST_PAPER_ANSWER_KEY, recordId, question.getId());
TestPaperAnswerItemBo cacheObject = RedisUtils.getCacheObject(key);
if (cacheObject == null || cacheObject.getId() == null ||
(StringUtils.isEmpty(cacheObject.getAnswer()) && StringUtils.isEmpty(cacheObject.getAnswerPic()))) {
return false;
}
} }
return true; return true;
} }
......
...@@ -13,7 +13,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" ...@@ -13,7 +13,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="good" column="good"/> <result property="good" column="good"/>
<result property="remark" column="remark"/> <result property="remark" column="remark"/>
<result property="status" column="status"/> <result property="status" column="status"/>
<result property="createTime" column="cerate_time"/> <result property="createTime" column="create_time"/>
<result property="createBy" column="create_by"/> <result property="createBy" column="create_by"/>
<result property="updateTime" column="update_time"/> <result property="updateTime" column="update_time"/>
<result property="updateBy" column="update_by"/> <result property="updateBy" column="update_by"/>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment