fuliqi
2024-07-16 38f9471ecf47b7c15b352113bc0f5a2ec1e64e7b
登录返回vo修改,个人中心接口,用户列表权限验证
14个文件已修改
2个文件已添加
259 ■■■■ 已修改文件
src/main/java/com/ycl/jxkg/config/spring/security/RestAuthenticationSuccessHandler.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/controller/admin/UserController.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/controller/student/UploadController.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/controller/student/UserController.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/controller/wx/student/UserController.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/domain/form/StudentUpdatePwdForm.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/domain/vo/admin/education/EducationResourceVO.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/domain/vo/student/user/UserLoginVO.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/domain/vo/student/user/UserUpdateVO.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/mapper/ClassesUserMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/service/UserService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/service/impl/ExamCheatServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/service/impl/FileUploadImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/service/impl/UserServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/ClassesUserMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/UserMapper.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ycl/jxkg/config/spring/security/RestAuthenticationSuccessHandler.java
@@ -5,8 +5,10 @@
import com.ycl.jxkg.constants.CaffeineConstant;
import com.ycl.jxkg.domain.entity.SysConfig;
import com.ycl.jxkg.domain.entity.UserEventLog;
import com.ycl.jxkg.domain.vo.student.user.UserLoginVO;
import com.ycl.jxkg.enums.general.YesOrNoEnum;
import com.ycl.jxkg.event.UserEvent;
import com.ycl.jxkg.mapper.ClassesUserMapper;
import com.ycl.jxkg.mapper.SysConfigMapper;
import com.ycl.jxkg.service.UserService;
import com.ycl.jxkg.utils.CaffeineUtil;
@@ -42,6 +44,8 @@
    private final UserService userService;
    private final CaffeineUtil caffeineUtil;
    private final SysConfigMapper sysConfigMapper;
    @Autowired
    private ClassesUserMapper classesUserMapper;
    /**
     * Instantiates a new Rest authentication success handler.
@@ -83,9 +87,11 @@
                UserEventLog userEventLog = new UserEventLog(user.getId(), user.getUserName(), user.getRealName(), new Date());
                userEventLog.setContent(user.getUserName() + " 登录了江西语音视频培训系统");
                eventPublisher.publishEvent(new UserEvent(userEventLog));
                com.ycl.jxkg.domain.entity.User newUser = new com.ycl.jxkg.domain.entity.User();
                BeanUtils.copyProperties(user,newUser);
                RestUtil.response(response, SystemCode.OK.getCode(), SystemCode.OK.getMessage(), newUser);
                UserLoginVO userLoginVO = new UserLoginVO();
                BeanUtils.copyProperties(user,userLoginVO);
                List<String> classesNames = classesUserMapper.getClassesNameByUserId(user.getId());
                userLoginVO.setClassName(classesNames);
                RestUtil.response(response, SystemCode.OK.getCode(), SystemCode.OK.getMessage(), userLoginVO);
            }
        } else {
            RestUtil.response(response, SystemCode.UNAUTHORIZED.getCode(), SystemCode.UNAUTHORIZED.getMessage());
src/main/java/com/ycl/jxkg/controller/admin/UserController.java
@@ -3,6 +3,8 @@
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.ycl.jxkg.base.BaseApiController;
import com.ycl.jxkg.base.Result;
import com.ycl.jxkg.base.SystemCode;
import com.ycl.jxkg.context.WebContext;
import com.ycl.jxkg.domain.form.UpdatePwdForm;
import com.ycl.jxkg.enums.RoleEnum;
import com.ycl.jxkg.domain.other.KeyValue;
@@ -38,9 +40,17 @@
    private final UserService userService;
    private final UserEventLogService userEventLogService;
    private final AuthenticationService authenticationService;
    private final WebContext webContext;
    private final Integer teacher = 2;
    private final Integer student = 1;
    @RequestMapping(value = "/page/list", method = RequestMethod.POST)
    public Result<PageInfo<UserResponseVO>> pageList(@RequestBody UserPageRequestVO model) {
        if(!student.equals(model.getRole())) {
            User currentUser = webContext.getCurrentUser();
            if (teacher.equals(currentUser.getRole())) {
                return Result.fail(SystemCode.InnerError.getCode(), "您没有访问权限");
            }
        }
        PageInfo<User> pageInfo = userService.userPage(model);
        PageInfo<UserResponseVO> page = PageInfoHelper.copyMap(pageInfo, d -> UserResponseVO.from(d));
        return Result.ok(page);
src/main/java/com/ycl/jxkg/controller/student/UploadController.java
@@ -3,10 +3,13 @@
import com.ycl.jxkg.base.BaseApiController;
import com.ycl.jxkg.base.Result;
import com.ycl.jxkg.config.RuoYiConfig;
import com.ycl.jxkg.service.FileUpload;
import com.ycl.jxkg.service.UserService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@@ -14,33 +17,51 @@
import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.UUID;
@RequiredArgsConstructor
@RequestMapping("/api/student/upload")
@RestController("StudentUploadController")
public class UploadController extends BaseApiController {
    private final FileUpload fileUpload;
    private final UserService userService;
    private final RuoYiConfig ruoYiConfig;
    @RequestMapping("/image")
    @ResponseBody
    public Result questionUploadAndReadExcel(HttpServletRequest request) {
        MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request;
        MultipartFile multipartFile = multipartHttpServletRequest.getFile("file");
        long attachSize = multipartFile.getSize();
        String imgName = multipartFile.getOriginalFilename();
        try (InputStream inputStream = multipartFile.getInputStream()) {
            String filePath = fileUpload.uploadFile(inputStream, attachSize, imgName);
            userService.changePicture(getCurrentUser(), filePath);
            return Result.ok(filePath);
        } catch (IOException e) {
            return Result.fail(2, e.getMessage());
    @PostMapping("/image")
    public Result questionUploadAndReadExcel(MultipartFile file) {
        // 检查文件是否为空
        if (file == null || file.isEmpty()) {
            return Result.fail(500, "上传的文件为空");
        }
        String randomName = null;
        HashMap hashMap = new HashMap(2);
        try {
            // 获取文件名
            String originalFileName = StringUtils.cleanPath(file.getOriginalFilename());
            randomName = UUID.randomUUID().toString().replace("-", "") + originalFileName.substring(originalFileName.lastIndexOf("."));
            // 指定文件存储路径
            String uploadDir = ruoYiConfig.getUrl(); // 修改为您希望存储的目录
            // 如果目录不存在,则创建目录
            File dir = new File(uploadDir);
            if (!dir.exists()) {
                dir.mkdirs();
            }
            // 构建目标文件的路径
            String filePath = uploadDir + "/" + randomName;
            // 将文件保存到目标位置
            file.transferTo(new File(filePath));
            hashMap.put("name", originalFileName);
            hashMap.put("url", randomName);
        } catch (IOException e) {
            e.printStackTrace();
            // 返回失败响应
            return Result.fail(500, "文件上传失败");
        }
        userService.changePicture(getCurrentUser(), randomName);
        return Result.ok(hashMap);
    }
}
src/main/java/com/ycl/jxkg/controller/student/UserController.java
@@ -6,6 +6,8 @@
import com.ycl.jxkg.domain.entity.MessageUser;
import com.ycl.jxkg.domain.entity.User;
import com.ycl.jxkg.domain.entity.UserEventLog;
import com.ycl.jxkg.domain.form.StudentUpdatePwdForm;
import com.ycl.jxkg.domain.form.UpdatePwdForm;
import com.ycl.jxkg.enums.RoleEnum;
import com.ycl.jxkg.enums.UserStatusEnum;
import com.ycl.jxkg.event.UserEvent;
@@ -17,10 +19,12 @@
import com.ycl.jxkg.utils.PageInfoHelper;
import com.ycl.jxkg.domain.vo.student.user.*;
import com.github.pagehelper.PageInfo;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
@@ -69,12 +73,8 @@
        return Result.ok();
    }
    @RequestMapping(value = "/update", method = RequestMethod.POST)
    public Result update(@RequestBody @Valid UserUpdateVO model) {
        if (StringUtils.isBlank(model.getBirthDay())) {
            model.setBirthDay(null);
        }
        User user = userService.getById(getCurrentUser().getId());
        BeanUtils.copyProperties(model, user);
        user.setModifyTime(new Date());
@@ -130,4 +130,10 @@
        return Result.ok();
    }
    @ApiOperation(value = "修改密码", tags = {"修改密码"})
    @PostMapping("/update/password")
    public Result<Object> updatePassword(@RequestBody @Validated StudentUpdatePwdForm form) {
        userService.updateStudentPassword(form);
        return Result.ok("修改成功");
    }
}
src/main/java/com/ycl/jxkg/controller/wx/student/UserController.java
@@ -74,9 +74,6 @@
    @RequestMapping(value = "/update", method = RequestMethod.POST)
    public Result<UserResponseVO> update(@Valid UserUpdateVO model) {
        if (StringUtils.isBlank(model.getBirthDay())) {
            model.setBirthDay(null);
        }
        User user = userService.getById(getCurrentUser().getId());
        BeanUtils.copyProperties(model, user);
        user.setModifyTime(new Date());
src/main/java/com/ycl/jxkg/domain/form/StudentUpdatePwdForm.java
New file
@@ -0,0 +1,27 @@
package com.ycl.jxkg.domain.form;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
/**
 * 修改密码表单数据
 *
 * @author:xp
 * @date:2024/7/9 16:23
 */
@Data
public class StudentUpdatePwdForm {
    @NotNull(message = "修改失败")
    private Integer userId;
    /** 新密码 */
    @NotBlank(message = "请输入新密码")
    private String newPassword;
    /** 旧密码 */
    @NotBlank(message = "请输入旧密码")
    private String oldPassword;
}
src/main/java/com/ycl/jxkg/domain/vo/admin/education/EducationResourceVO.java
@@ -15,9 +15,9 @@
 */
@Data
public class EducationResourceVO {
    /** 当前页大小 */
    private Integer pageSize = 10;
    /** 当前页 */
    private Integer pageNum = 1;
    private Integer id;
src/main/java/com/ycl/jxkg/domain/vo/student/user/UserLoginVO.java
New file
@@ -0,0 +1,71 @@
package com.ycl.jxkg.domain.vo.student.user;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
import java.util.List;
@Data
public class UserLoginVO  {
    private Integer id;
    private String userUuid;
    private List<String> className;
    /**
     * 用户名
     */
    private String userName;
    /**
     * 真实姓名
     */
    private String realName;
    private Integer age;
    /**
     * 1.男 2女
     */
    private Integer sex;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date birthDay;
    private String phone;
    /**
     * 1.学生 2.老师 3.管理员
     */
    private Integer role;
    /**
     * 1.启用 2禁用
     */
    private Integer status;
    /**
     * 头像地址
     */
    private String imagePath;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date createTime;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date modifyTime;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date lastActiveTime;
    /**
     * 微信openId
     */
    private String wxOpenId;
    /**
     * 上一次修改密码的时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date lastUpdatePasswordTime;
}
src/main/java/com/ycl/jxkg/domain/vo/student/user/UserUpdateVO.java
@@ -1,26 +1,26 @@
package com.ycl.jxkg.domain.vo.student.user;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.Date;
@Data
public class UserUpdateVO {
    @NotBlank
    @NotBlank(message = "真实姓名为空")
    private String realName;
    private String age;
    private Integer sex;
    @JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
    private Date birthDay;
    private String birthDay;
    @NotBlank(message = "手机号为空")
    private String phone;
    @NotNull
    private Integer userLevel;
}
src/main/java/com/ycl/jxkg/mapper/ClassesUserMapper.java
@@ -49,4 +49,12 @@
     * @return
     */
    List<Integer> getClassesByUserId(@Param("userId") Integer userId);
    /**
     * 根据学生获取班级名称
     *
     * @param userId
     * @return
     */
    List<String> getClassesNameByUserId(@Param("userId") Integer userId);
}
src/main/java/com/ycl/jxkg/service/UserService.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.extension.service.IService;
import com.ycl.jxkg.domain.form.RegisterForm;
import com.ycl.jxkg.domain.form.StudentUpdatePwdForm;
import com.ycl.jxkg.domain.form.UpdatePwdForm;
import com.ycl.jxkg.domain.other.KeyValue;
import com.ycl.jxkg.domain.entity.User;
@@ -158,4 +159,10 @@
     * @param form
     */
    void updatePassword(UpdatePwdForm form);
    /**
     * 学生端修改密码,增加比对原密码操作
     *
     */
    void updateStudentPassword(StudentUpdatePwdForm form);
}
src/main/java/com/ycl/jxkg/service/impl/ExamCheatServiceImpl.java
@@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.ycl.jxkg.domain.entity.ExamCheat;
import com.ycl.jxkg.mapper.ExamCheatMapper;
import com.ycl.jxkg.mapper.ExamSubmitTempMapper;
import com.ycl.jxkg.service.ExamCheatService;
import com.ycl.jxkg.base.Result;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -29,7 +30,7 @@
public class ExamCheatServiceImpl extends ServiceImpl<ExamCheatMapper, ExamCheat> implements ExamCheatService {
    private final ExamCheatMapper examCheatMapper;
    private final ExamSubmitTempMapper examSubmitTempMapper;
    /**
     * 添加
     * @param form
src/main/java/com/ycl/jxkg/service/impl/FileUploadImpl.java
@@ -43,6 +43,7 @@
        } catch (QiniuException ex) {
            logger.error(ex.getMessage(), ex);
        }
        return null;
    }
}
src/main/java/com/ycl/jxkg/service/impl/UserServiceImpl.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qiniu.util.Md5;
import com.ycl.jxkg.domain.entity.UserEventLog;
import com.ycl.jxkg.domain.form.StudentUpdatePwdForm;
import com.ycl.jxkg.domain.form.UpdatePwdForm;
import com.ycl.jxkg.enums.RoleEnum;
import com.ycl.jxkg.enums.UserStatusEnum;
@@ -196,4 +197,23 @@
                .set(User::getLastUpdatePasswordTime, new Date())
                .update();
    }
    @Override
    public void updateStudentPassword(StudentUpdatePwdForm form) {
        User user = baseMapper.selectById(form.getUserId());
        if(user ==null){
            throw new RuntimeException("用户不存在");
        }
        if(authenticationService.authUser(user,user.getUserName(),form.getOldPassword())){
            //密码正确
            new LambdaUpdateChainWrapper<>(baseMapper)
                    .eq(User::getId, form.getUserId())
                    .set(User::getPassword, authenticationService.pwdEncode(form.getNewPassword()))
                    .set(User::getLastUpdatePasswordTime, new Date())
                    .update();
        }else {
            //密码错误
            throw new RuntimeException("旧密码错误,请确认后重新输入");
        }
    }
}
src/main/resources/mapper/ClassesUserMapper.xml
@@ -70,4 +70,11 @@
        from t_classes_user
        where user_id = #{userId} and deleted = 0
    </select>
    <select id="getClassesNameByUserId" resultType="java.lang.String">
        select tc.class_name
        from t_classes_user tcu
        left join t_classes tc on tcu.classes_id = tc.id
        where user_id = #{userId} and tcu.deleted = 0 and tc.deleted =0
    </select>
</mapper>
src/main/resources/mapper/UserMapper.xml
@@ -135,6 +135,9 @@
        <set>
            <if test="realName != null">real_name = #{realName},</if>
            <if test="age != null">age = #{age},</if>
            <if test="sex != null">sex = #{sex},</if>
            <if test="phone != null and phone !='' ">phone = #{phone},</if>
            <if test="birthDay != null ">birth_day = #{birthDay},</if>
            <if test="lastActiveTime != null">last_active_time = #{lastActiveTime},</if>
        </set>
        where id = #{id}