package cn.wepact.dfm.training.controller; import cn.hutool.captcha.CaptchaUtil; import cn.wepact.dfm.common.util.Constant; import cn.wepact.dfm.common.util.GeneralRespBean; import cn.wepact.dfm.common.util.StringUtils; import cn.wepact.dfm.training.dto.entity.TOrg; import cn.wepact.dfm.training.dto.entity.TUser; import cn.wepact.dfm.training.service.UserService; import cn.wepact.dfm.training.utils.EmailUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.util.List; @RestController @RequestMapping("users") public class UserController extends BaseController{ private static final Logger log = LoggerFactory.getLogger(UserController.class); @Autowired private UserService userService; // 登录 @PostMapping("/login") public GeneralRespBean login(@RequestBody TUser loginRequest) { log.info("【登录】用户: {}", loginRequest.getUsername()); GeneralRespBean respBean = new GeneralRespBean(); TUser user = userService.loginAndGetUser(loginRequest); if (user != null) { respBean.setData(user); respBean.setMsg(Constant.SUCCESS_MSG); respBean.setCode(Constant.SUCCESS_CODE); log.info("【登录】用户: {} 登录成功", loginRequest.getUsername()); } else { respBean.setData(null); respBean.setMsg("登录失败,账号密码错误,或单位选择有误!"); respBean.setCode(Constant.ERROR_CODE); log.warn("【登录】用户: {} 登录失败", loginRequest.getUsername()); } return respBean; } // 注册 @PostMapping("/register") public GeneralRespBean register(@RequestBody TUser registerRequest) { log.info("【注册】用户: {}", registerRequest.getUsername()); GeneralRespBean respBean = new GeneralRespBean(); Boolean result = userService.register(registerRequest); if (result) { respBean.setMsg(Constant.SUCCESS_MSG); respBean.setCode(Constant.SUCCESS_CODE); log.info("【注册】用户: {} 注册成功", registerRequest.getUsername()); } else { respBean.setMsg("注册失败,账号已经存在!"); respBean.setCode(Constant.ERROR_CODE); log.warn("【注册】用户: {} 注册失败,账号已存在", registerRequest.getUsername()); } return respBean; } @GetMapping("/getDeptList") public GeneralRespBean> getDeptList() { log.info("【获取部门列表】开始"); GeneralRespBean> respBean = new GeneralRespBean(); List tOrgList = userService.getDeptList(); respBean.setData(tOrgList); respBean.setMsg(Constant.SUCCESS_MSG); respBean.setCode(Constant.SUCCESS_CODE); log.info("【获取部门列表】共 {} 条", tOrgList.size()); return respBean; } /** * 用于生成带六位数字验证码并发送邮件 */ @PostMapping(value = "/captcha") public GeneralRespBean captchacode(HttpSession session) throws Exception { TUser user = getUserInfo(); log.info("【验证码】用户: {} 请求发送验证码至邮箱: {}", user.getUsername(), user.getEmail()); GeneralRespBean respBean = new GeneralRespBean<>(); String randomCode = userService.generateRandomCode(); session.setAttribute("randomCode", randomCode); session.setAttribute("codeTime",System.currentTimeMillis()); //发送邮件 EmailUtil.Email email = new EmailUtil.Email(); email.setTo(user.getEmail()); email.setSubject("任职资格管理系统验证码"); email.setContent("您的验证码为:"+randomCode); EmailUtil.sendMail(email); respBean.setMsg("验证码发送成功!"); respBean.setCode("200"); log.info("【验证码】用户: {} 验证码发送成功", user.getUsername()); return respBean; } /** * 更新密码 */ @PostMapping(value = "/updatePwd") public GeneralRespBean updatePwd(HttpSession session, @RequestBody TUser tUser) throws Exception { GeneralRespBean respBean = new GeneralRespBean<>(); TUser user = getUserInfo(); tUser.setUserNo(user.getUserNo()); log.info("【修改密码】用户: {} 请求修改密码", user.getUsername()); // 获得验证码对象 Object cko = session.getAttribute("randomCode"); if (cko == null) { log.warn("【修改密码】用户: {} 验证码已失效(空)", user.getUsername()); return respBean.processErrorMsg("验证码已失效,请重新获取!"); } String captcha = cko.toString(); // 判断验证码输入是否正确 if (StringUtils.isEmpty(tUser.getRandomCode()) || captcha == null || !(tUser.getRandomCode().equalsIgnoreCase(captcha))) { log.warn("【修改密码】用户: {} 验证码错误", user.getUsername()); return respBean.processErrorMsg("验证码错误,请重新输入!"); } else { Long codeTime = Long.valueOf(session.getAttribute("codeTime") + ""); if ((System.currentTimeMillis() - codeTime) / 1000 / 60 > 4) { log.warn("【修改密码】用户: {} 验证码已超时", user.getUsername()); return respBean.processErrorMsg("验证码已失效,请重新获取!"); } log.info("【修改密码】用户: {} 验证码校验通过,执行修改", user.getUsername()); return userService.updatePwd(tUser); } } // 取消预览 @PostMapping("/cancelPreview") public GeneralRespBean cancelPreview() { TUser user = getUserInfo(); log.info("【取消预览】用户: {} 请求取消预览", user.getUsername()); GeneralRespBean respBean = new GeneralRespBean(); Boolean result = userService.cancelPreview(user); respBean.setData(result); if (result) { respBean.setMsg(Constant.SUCCESS_MSG); respBean.setCode(Constant.SUCCESS_CODE); log.info("【取消预览】用户: {} 取消成功", user.getUsername()); } else { respBean.setMsg("取消预览失败"); respBean.setCode(Constant.ERROR_CODE); log.warn("【取消预览】用户: {} 取消失败", user.getUsername()); } return respBean; } }