Commit 8709b146 by zhengyunfei
parents 780fa857 aeef9ca8
package com.ruoyi.web.controller.system;
import cn.dev33.satoken.annotation.SaIgnore;
import cn.hutool.core.collection.CollUtil;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.core.domain.entity.SysMenu;
......@@ -22,6 +23,7 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotBlank;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
......@@ -134,6 +136,9 @@ public class SysLoginController {
public R<Map<String, Object>> getInfo() {
LoginUser loginUser = LoginHelper.getLoginUser();
SysUser user = userService.selectUserById(loginUser.getUserId());
if(StringUtils.isNotEmpty(user.getDeptList())){
user.setDeptListArray(CollUtil.newArrayList(user.getDeptList().split(",")));
}
Map<String, Object> ajax = new HashMap<>();
ajax.put("user", user);
ajax.put("roles", loginUser.getRolePermission());
......
......@@ -23,6 +23,7 @@ import com.ruoyi.common.utils.StreamUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
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.listener.SysUserImportListener;
import com.ruoyi.system.service.ISysDeptService;
......@@ -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
......@@ -133,6 +181,9 @@ public class SysUserController extends BaseController {
ajax.put("posts", postService.selectPostAll());
if (ObjectUtil.isNotNull(userId)) {
SysUser sysUser = userService.selectUserById(userId);
if(StringUtils.isNotEmpty(sysUser.getDeptList())){
sysUser.setDeptListArray(CollUtil.newArrayList(sysUser.getDeptList().split(",")));
}
ajax.put("user", sysUser);
ajax.put("postIds", postService.selectPostListByUserId(userId));
ajax.put("roleIds", StreamUtils.toList(sysUser.getRoles(), SysRole::getRoleId));
......@@ -147,6 +198,30 @@ public class SysUserController extends BaseController {
@Log(title = "用户管理", businessType = BusinessType.INSERT)
@PostMapping
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))) {
return R.fail("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
} else if (StringUtils.isNotEmpty(user.getPhonenumber())
......@@ -167,6 +242,26 @@ public class SysUserController extends BaseController {
@Log(title = "用户管理", businessType = BusinessType.UPDATE)
@PutMapping
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.checkUserDataScope(user.getUserId());
if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user))) {
......@@ -178,6 +273,7 @@ public class SysUserController extends BaseController {
&& UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))) {
return R.fail("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
}
return toAjax(userService.updateUser(user));
}
......
......@@ -158,6 +158,19 @@ public class SysUser extends BaseEntity {
*/
@TableField(exist = false)
private String deptListStr;
/**
* 班级数组
*/
@TableField(exist = false)
private List<String> deptListArray;
/**
* 班级数组
*/
@TableField(exist = false)
private List<String> deptInsetArray;
public SysUser(Long 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
List<SysDept> selectDeptListNew(@Param("deptList") List<Long> deptList);
/**
* 查询部门管理数据
*
* @param deptList 查询条件
* @return 部门信息集合
*/
List<SysDept> selectDeptListDeId(@Param("deptList") Long deptList);
/**
* 根据角色ID查询部门树信息
*
* @param roleId 角色ID
......
......@@ -28,6 +28,15 @@ public interface ISysDeptService {
*/
List<SysDept> selectDeptListByList(List<Long> deptList);
/**
* 根据父类id查询所有子类
*
* @param deptList 部门信息
* @return 部门信息集合
*/
List<SysDept> selectDeptListByDeID(Long deptList);
/**
* 查询部门树结构信息
*
......
......@@ -48,6 +48,8 @@ public interface ISysUserService {
*/
SysUser selectUserByUserName(String userName);
/**
* 通过手机号查询用户
*
......
......@@ -65,6 +65,10 @@ public class SysDeptServiceImpl implements ISysDeptService {
return baseMapper.selectDeptListNew(deptList);
}
@Override
public List<SysDept> selectDeptListByDeID(Long deptList) {
return baseMapper.selectDeptListDeId(deptList);
}
/**
* 查询部门树结构信息
*
......
......@@ -27,6 +27,7 @@ import com.ruoyi.system.mapper.*;
import com.ruoyi.system.service.ISysUserService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.javassist.runtime.Desc;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -82,6 +83,7 @@ public class SysUserServiceImpl implements ISysUserService {
.eq(ObjectUtil.isNotNull(user.getUserId()), "u.user_id", user.getUserId())
.like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
.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())
.between(params.get("beginTime") != null && params.get("endTime") != null,
"u.create_time", params.get("beginTime"), params.get("endTime"))
......
......@@ -51,6 +51,15 @@
</foreach>
</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 d.dept_id
from sys_dept d
......
......@@ -126,6 +126,7 @@
sys_user u
left join sys_dept d on u.dept_id = d.dept_id
${ew.getCustomSqlSegment}
order by u.user_id DESC
</select>
<select id="selectUserList" resultMap="SysUserResult">
......@@ -164,7 +165,7 @@
where u.del_flag = '0' and u.phonenumber = #{phonenumber}
</select>
<select id="selectUserById" parameterType="Long" resultMap="SysUserResult">
<select id="selectUserById" parameterType="Long" resultMap="SysUserResult12">
<include refid="selectUserVo"/>
where u.del_flag = '0' and u.user_id = #{userId}
</select>
......
......@@ -70,5 +70,16 @@ public class TestPaperController extends BaseController {
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 {
/**
* 状态
* <ul>
* <ol>0:正在答题</ol>
* <ol>0:答题中</ol>
* <ol>1:待批阅</ol>
* <ol>2:已批阅</ol>
* <ol>2:批阅中</ol>
* <ol>3:批阅完成</ol>
* </ul>
*/
private Integer status;
......
......@@ -39,7 +39,6 @@ public class DbTestPaperRecordDetail extends BaseEntity {
* 答案
*/
private String answer;
/**
* 图片答案
*/
......
......@@ -48,7 +48,7 @@ public class DbTestPaperRecordDetailVo {
/**
* 图片答案
*/
@ExcelProperty(value = "答案")
@ExcelProperty(value = "图片答案")
private String answerPic;
/**
......
......@@ -42,4 +42,12 @@ public interface ITestPaperService {
* @return 考试题目
*/
TableDataInfo<TestQuestionItemVo> nextQuestion(TestPaperAnswerBo request, PageQuery pageQuery);
/**
* 检查答题卡完整性
*
* @param recordId 答题记录ID
* @return 答题完整性
*/
boolean checkTestPaperIntegrality(Long recordId);
}
......@@ -152,7 +152,41 @@ public class TestPaperServiceImpl implements ITestPaperService {
RedisUtils.deleteKeys(key);
});
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;
}
......
......@@ -13,7 +13,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="good" column="good"/>
<result property="remark" column="remark"/>
<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="updateTime" column="update_time"/>
<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