From 1d0d314aee00d6bb41f558d94ff3bb2a8d8356e3 Mon Sep 17 00:00:00 2001 From: TinyAnts Date: Tue, 14 Mar 2023 12:07:40 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96:=20=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E5=89=8D=E7=AB=AF=E7=99=BB=E5=BD=95=E7=9B=B8=E5=85=B3=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3=20(=E6=8E=A5=E5=8F=A3=E5=88=86=E7=A6=BB)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/mdd/common/entity/user/UserAuth.java | 2 +- .../com/mdd/front/LikeFrontInterceptor.java | 17 +- .../com/mdd/front/LikeFrontThreadLocal.java | 11 + .../front/controller/ArticleController.java | 7 +- .../mdd/front/controller/IndexController.java | 58 +++++- .../mdd/front/controller/LoginController.java | 140 +++++++------ .../mdd/front/controller/PcController.java | 4 +- .../mdd/front/controller/SmsController.java | 67 ------ .../mdd/front/controller/UserController.java | 36 +++- .../mdd/front/service/IArticleService.java | 4 +- .../com/mdd/front/service/IIndexService.java | 2 +- .../com/mdd/front/service/ILoginService.java | 54 ++--- .../com/mdd/front/service/IPcService.java | 4 +- .../com/mdd/front/service/IUploadService.java | 18 -- .../com/mdd/front/service/IUserService.java | 9 +- .../service/impl/ArticleServiceImpl.java | 4 +- .../front/service/impl/IndexServiceImpl.java | 2 +- .../front/service/impl/LoginServiceImpl.java | 193 +++++++----------- .../mdd/front/service/impl/PcServiceImpI.java | 4 +- .../front/service/impl/UploadServiceImpl.java | 19 -- .../front/service/impl/UserServiceImpl.java | 44 +++- .../{ => article}/ArticleCollectValidate.java | 2 +- .../{ => article}/ArticleSearchValidate.java | 2 +- .../{commons => common}/PageValidate.java | 2 +- .../{commons => common}/SmsValidate.java | 2 +- .../validate/login/LoginCodeValidate.java | 16 ++ .../validate/login/LoginPhoneValidate.java | 27 +++ .../validate/login/LoginPwdValidate.java | 22 ++ ...inValidate.java => LoginScanValidate.java} | 7 +- .../front/validate/login/OaLoginValidate.java | 23 --- .../validate/login/RegisterValidate.java | 5 - .../UserChangePwdValidate.java} | 6 +- .../UserForgetPwdValidate.java} | 8 +- .../UserPhoneBindValidate.java} | 5 +- .../UserPhoneMnpValidate.java} | 4 +- .../{ => users}/UserUpdateValidate.java | 2 +- .../vo/{ => article}/PcArticleCenterVo.java | 2 +- .../vo/{ => article}/PcArticleDetailVo.java | 2 +- .../front/vo/{ => login}/LoginTokenVo.java | 2 +- .../mdd/front/vo/{ => login}/LoginUrlsVo.java | 2 +- 40 files changed, 430 insertions(+), 410 deletions(-) delete mode 100644 server/like-front/src/main/java/com/mdd/front/controller/SmsController.java delete mode 100644 server/like-front/src/main/java/com/mdd/front/service/IUploadService.java delete mode 100644 server/like-front/src/main/java/com/mdd/front/service/impl/UploadServiceImpl.java rename server/like-front/src/main/java/com/mdd/front/validate/{ => article}/ArticleCollectValidate.java (91%) rename server/like-front/src/main/java/com/mdd/front/validate/{ => article}/ArticleSearchValidate.java (92%) rename server/like-front/src/main/java/com/mdd/front/validate/{commons => common}/PageValidate.java (94%) rename server/like-front/src/main/java/com/mdd/front/validate/{commons => common}/SmsValidate.java (94%) create mode 100644 server/like-front/src/main/java/com/mdd/front/validate/login/LoginCodeValidate.java create mode 100644 server/like-front/src/main/java/com/mdd/front/validate/login/LoginPhoneValidate.java create mode 100644 server/like-front/src/main/java/com/mdd/front/validate/login/LoginPwdValidate.java rename server/like-front/src/main/java/com/mdd/front/validate/login/{ScanLoginValidate.java => LoginScanValidate.java} (52%) delete mode 100644 server/like-front/src/main/java/com/mdd/front/validate/login/OaLoginValidate.java rename server/like-front/src/main/java/com/mdd/front/validate/{UserPasswordValidate.java => users/UserChangePwdValidate.java} (70%) rename server/like-front/src/main/java/com/mdd/front/validate/{login/ForgetPwdValidate.java => users/UserForgetPwdValidate.java} (58%) rename server/like-front/src/main/java/com/mdd/front/validate/{UserBindMobileValidate.java => users/UserPhoneBindValidate.java} (85%) rename server/like-front/src/main/java/com/mdd/front/validate/{UserMnpMobileValidate.java => users/UserPhoneMnpValidate.java} (73%) rename server/like-front/src/main/java/com/mdd/front/validate/{ => users}/UserUpdateValidate.java (93%) rename server/like-front/src/main/java/com/mdd/front/vo/{ => article}/PcArticleCenterVo.java (86%) rename server/like-front/src/main/java/com/mdd/front/vo/{ => article}/PcArticleDetailVo.java (94%) rename server/like-front/src/main/java/com/mdd/front/vo/{ => login}/LoginTokenVo.java (89%) rename server/like-front/src/main/java/com/mdd/front/vo/{ => login}/LoginUrlsVo.java (87%) diff --git a/server/like-common/src/main/java/com/mdd/common/entity/user/UserAuth.java b/server/like-common/src/main/java/com/mdd/common/entity/user/UserAuth.java index fd512596..8667165f 100644 --- a/server/like-common/src/main/java/com/mdd/common/entity/user/UserAuth.java +++ b/server/like-common/src/main/java/com/mdd/common/entity/user/UserAuth.java @@ -19,7 +19,7 @@ public class UserAuth implements Serializable { private Integer userId; // 用户Id private String openid; // Openid private String unionid; // Unionid - private Integer client; // 客户端类型: [1=微信小程序, 2=微信公众号, 3=手机H5;4=电脑PC, 5=苹果APP, 6=安卓APP] + private Integer terminal; // 客户端类型: [1=微信小程序, 2=微信公众号, 3=手机H5;4=电脑PC, 5=苹果APP, 6=安卓APP] private Long createTime; // 创建时间 private Long updateTime; // 更新时间 diff --git a/server/like-front/src/main/java/com/mdd/front/LikeFrontInterceptor.java b/server/like-front/src/main/java/com/mdd/front/LikeFrontInterceptor.java index 0cb1de96..280b06bb 100644 --- a/server/like-front/src/main/java/com/mdd/front/LikeFrontInterceptor.java +++ b/server/like-front/src/main/java/com/mdd/front/LikeFrontInterceptor.java @@ -44,6 +44,10 @@ public class LikeFrontInterceptor implements HandlerInterceptor { @NonNull HttpServletResponse response, @NonNull Object handler) throws Exception { + // 记录当前平台 + String terminal = request.getHeader("terminal"); + LikeFrontThreadLocal.put("terminal", terminal); + // 判断请求接口 response.setContentType("application/json;charset=utf-8"); if (!(handler instanceof HandlerMethod)) { @@ -113,12 +117,14 @@ public class LikeFrontInterceptor implements HandlerInterceptor { private void checkLogin(Method method) { for (int i=0; i<=0; i++) { // 免登校验 - Object id = StpUtil.getLoginId(); if (StringUtils.isNotNull(method) && method.isAnnotationPresent(NotLogin.class)) { - if (StringUtils.isNotNull(id)) { - Integer userId = Integer.parseInt(id.toString()); - LikeFrontThreadLocal.put("userId", userId); - } + try { + Object id = StpUtil.getLoginId(); + if (StringUtils.isNotNull(id)) { + Integer userId = Integer.parseInt(id.toString()); + LikeFrontThreadLocal.put("userId", userId); + } + } catch (Exception ignored) {} break; } @@ -131,6 +137,7 @@ public class LikeFrontInterceptor implements HandlerInterceptor { } // 登录校验 + Object id = StpUtil.getLoginId(); if (StringUtils.isNull(id)) { Integer errCode = HttpEnum.TOKEN_INVALID.getCode(); String errMsg = HttpEnum.TOKEN_INVALID.getMsg(); diff --git a/server/like-front/src/main/java/com/mdd/front/LikeFrontThreadLocal.java b/server/like-front/src/main/java/com/mdd/front/LikeFrontThreadLocal.java index 5643bdb3..f1e47fdd 100644 --- a/server/like-front/src/main/java/com/mdd/front/LikeFrontThreadLocal.java +++ b/server/like-front/src/main/java/com/mdd/front/LikeFrontThreadLocal.java @@ -50,6 +50,17 @@ public class LikeFrontThreadLocal { return Integer.parseInt(adminId.toString()); } + /** + * 获取平台标识 + */ + public static Integer getTerminal() { + Object adminId = LikeFrontThreadLocal.get("terminal"); + if (adminId == null || adminId.toString().equals("")) { + return 0; + } + return Integer.parseInt(adminId.toString()); + } + /** * 删除本地线程 */ diff --git a/server/like-front/src/main/java/com/mdd/front/controller/ArticleController.java b/server/like-front/src/main/java/com/mdd/front/controller/ArticleController.java index 86776ca4..f1b10a52 100644 --- a/server/like-front/src/main/java/com/mdd/front/controller/ArticleController.java +++ b/server/like-front/src/main/java/com/mdd/front/controller/ArticleController.java @@ -6,9 +6,9 @@ import com.mdd.common.core.PageResult; import com.mdd.common.validator.annotation.IDMust; import com.mdd.front.LikeFrontThreadLocal; import com.mdd.front.service.IArticleService; -import com.mdd.front.validate.ArticleCollectValidate; -import com.mdd.front.validate.ArticleSearchValidate; -import com.mdd.front.validate.commons.PageValidate; +import com.mdd.front.validate.article.ArticleCollectValidate; +import com.mdd.front.validate.article.ArticleSearchValidate; +import com.mdd.front.validate.common.PageValidate; import com.mdd.front.vo.article.ArticleCateVo; import com.mdd.front.vo.article.ArticleCollectVo; import com.mdd.front.vo.article.ArticleDetailVo; @@ -17,7 +17,6 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; -import javax.validation.constraints.NotNull; import java.util.List; /** diff --git a/server/like-front/src/main/java/com/mdd/front/controller/IndexController.java b/server/like-front/src/main/java/com/mdd/front/controller/IndexController.java index 965a5d2a..e73a8c3d 100644 --- a/server/like-front/src/main/java/com/mdd/front/controller/IndexController.java +++ b/server/like-front/src/main/java/com/mdd/front/controller/IndexController.java @@ -1,19 +1,27 @@ package com.mdd.front.controller; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.mdd.common.aop.NotLogin; import com.mdd.common.core.AjaxResult; import com.mdd.common.core.PageResult; +import com.mdd.common.entity.notice.NoticeRecord; +import com.mdd.common.enums.NoticeEnum; +import com.mdd.common.exception.OperateException; +import com.mdd.common.mapper.notice.NoticeRecordMapper; +import com.mdd.common.plugin.notice.NoticeDriver; +import com.mdd.common.plugin.notice.vo.NoticeSmsVo; +import com.mdd.common.util.StringUtils; +import com.mdd.common.util.ToolUtils; import com.mdd.common.validator.annotation.IDMust; import com.mdd.front.service.IIndexService; -import com.mdd.front.validate.commons.PageValidate; +import com.mdd.front.validate.common.PageValidate; +import com.mdd.front.validate.common.SmsValidate; import com.mdd.front.vo.article.ArticleListedVo; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.util.Arrays; import java.util.List; import java.util.Map; @@ -21,9 +29,12 @@ import java.util.Map; * 主页管理 */ @RestController -@RequestMapping("/api") +@RequestMapping("api/index") public class IndexController { + @Resource + NoticeRecordMapper noticeRecordMapper; + @Resource IIndexService iIndexService; @@ -110,4 +121,39 @@ public class IndexController { return AjaxResult.success(list); } + /** + * 发送短信 + * + * @author fzr + * @param smsValidate 参数 + * @return AjaxResult + */ + @NotLogin + @PostMapping("/sendSms") + public AjaxResult sendSms(@Validated @RequestBody SmsValidate smsValidate) { + NoticeRecord noticeRecord = noticeRecordMapper.selectOne(new QueryWrapper() + .eq("account", smsValidate.getMobile()) + .eq("scene", smsValidate.getScene()) + .eq("status", Arrays.asList(NoticeEnum.STATUS_WAIT, NoticeEnum.STATUS_OK)) + .orderByDesc("id") + .last("limit 1")); + + if (StringUtils.isNotNull(noticeRecord)) { + if (noticeRecord.getCreateTime() >= (System.currentTimeMillis() / 1000 - 60)){ + throw new OperateException("操作频繁,请稍后再试!"); + } + } + + NoticeSmsVo params = new NoticeSmsVo() + .setScene(smsValidate.getScene()) + .setMobile(smsValidate.getMobile()) + .setExpire(900) + .setParams(new String[] { + "code:" + ToolUtils.randomInt(4) + }); + + NoticeDriver.handle(params); + return AjaxResult.success(); + } + } diff --git a/server/like-front/src/main/java/com/mdd/front/controller/LoginController.java b/server/like-front/src/main/java/com/mdd/front/controller/LoginController.java index e9c391b5..a75c8ae9 100644 --- a/server/like-front/src/main/java/com/mdd/front/controller/LoginController.java +++ b/server/like-front/src/main/java/com/mdd/front/controller/LoginController.java @@ -1,24 +1,19 @@ package com.mdd.front.controller; -import com.baomidou.mybatisplus.core.toolkit.Assert; import com.mdd.common.aop.NotLogin; import com.mdd.common.core.AjaxResult; -import com.mdd.common.enums.ClientEnum; -import com.mdd.common.util.StringUtils; +import com.mdd.front.LikeFrontThreadLocal; import com.mdd.front.service.ILoginService; -import com.mdd.front.validate.login.RegisterValidate; -import com.mdd.front.validate.login.ForgetPwdValidate; -import com.mdd.front.validate.login.OaLoginValidate; -import com.mdd.front.validate.login.ScanLoginValidate; -import com.mdd.front.vo.LoginUrlsVo; -import com.mdd.front.vo.LoginTokenVo; +import com.mdd.front.validate.login.*; +import com.mdd.front.vo.login.LoginUrlsVo; +import com.mdd.front.vo.login.LoginTokenVo; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.servlet.http.HttpSession; -import java.util.Map; +import javax.validation.constraints.NotNull; /** * 登录管理 @@ -35,45 +30,67 @@ public class LoginController { * 注册账号 * * @author fzr - * @param registerValidate 参数 + * @param valid 注册参数 * @return AjaxResult */ @NotLogin @PostMapping("/register") - public AjaxResult register(@Validated @RequestBody RegisterValidate registerValidate) { - iLoginService.register(registerValidate); + public AjaxResult register(@Validated @RequestBody RegisterValidate valid) { + Integer terminal = LikeFrontThreadLocal.getTerminal(); + String username = valid.getUsername(); + String password = valid.getPassword(); + + iLoginService.register(username, password, terminal); return AjaxResult.success(); } /** - * 登录验证 + * 账号登录 * - * @author fzr - * @param params 参数 + * @param valid 登录参数 * @return AjaxResult */ @NotLogin - @PostMapping("/check") - public AjaxResult check(@RequestBody Map params) { - Assert.notNull(params.get("scene"), "scene参数缺失!"); - LoginTokenVo vo = new LoginTokenVo(); + @PostMapping("/accountLogin") + public AjaxResult accountLogin(@Validated @RequestBody LoginPwdValidate valid) { + Integer terminal = LikeFrontThreadLocal.getTerminal(); + String username = valid.getUsername(); + String password = valid.getPassword(); - switch (params.get("scene")) { - case "mnp": - Assert.notNull(params.get("code"), "code参数缺失!"); - Assert.notNull(params.get("client"), "client参数缺失!"); - String code = params.get("code"); - Integer client = Integer.parseInt(params.get("client")); - vo = iLoginService.mnpLogin(code, client); - break; - case "mobile": - vo = iLoginService.mobileLogin(params); - break; - case "account": - vo = iLoginService.accountLogin(params); - break; - } + LoginTokenVo vo = iLoginService.accountLogin(username, password, terminal); + return AjaxResult.success(vo); + } + /** + * 手机登录 + * + * @param valid 登录参数 + * @return AjaxResult + */ + @NotLogin + @PostMapping("/mobileLogin") + public AjaxResult mobileLogin(@Validated @RequestBody LoginPhoneValidate valid) { + Integer terminal = LikeFrontThreadLocal.getTerminal(); + String mobile = valid.getMobile(); + String code = valid.getCode(); + + LoginTokenVo vo = iLoginService.mobileLogin(mobile, code, terminal); + return AjaxResult.success(vo); + } + + /** + * 微信登录 + * + * @param valid 登录参数 + * @return AjaxResult + */ + @NotLogin + @PostMapping("/mnpLogin") + public AjaxResult mnpLogin(@Validated @RequestBody LoginCodeValidate valid) { + Integer terminal = LikeFrontThreadLocal.getTerminal(); + String code = valid.getCode(); + + LoginTokenVo vo = iLoginService.mnpLogin(code, terminal); return AjaxResult.success(vo); } @@ -81,51 +98,34 @@ public class LoginController { * 公众号登录 * * @author fzr - * @param oaLoginValidate 参数 + * @param valid 登录参数 * @return AjaxResult */ @NotLogin @PostMapping("/oaLogin") - public AjaxResult oaLogin(@Validated @RequestBody OaLoginValidate oaLoginValidate) { - String code = oaLoginValidate.getCode(); - Integer client = oaLoginValidate.getClient(); - client = StringUtils.isNotNull(client) ? client : ClientEnum.OA.getCode(); + public AjaxResult oaLogin(@Validated @RequestBody LoginCodeValidate valid) { + Integer terminal = LikeFrontThreadLocal.getTerminal(); + String code = valid.getCode(); - LoginTokenVo vo = iLoginService.officeLogin(code, client); + LoginTokenVo vo = iLoginService.officeLogin(code, terminal); return AjaxResult.success(vo); } /** - * 公众号跳转url + * 公众号链接 * * @author fzr - * @param url 连接 + * @param url 跳转链接 * @return AjaxResult */ @NotLogin - @GetMapping("/codeUrl") - public AjaxResult codeUrl(@RequestParam String url) { - Assert.notNull(url, "url参数不能为空"); - + @GetMapping("/oaCodeUrl") + public AjaxResult oaCodeUrl(@Validated @NotNull() @RequestParam("url") String url) { LoginUrlsVo vo = new LoginUrlsVo(); - vo.setUrl(iLoginService.codeUrl(url)); + vo.setUrl(iLoginService.oaCodeUrl(url)); return AjaxResult.success(vo); } - /** - * 忘记密码 - * - * @author fzr - * @param forgetPwdValidate 参数 - * @return AjaxResult - */ - @NotLogin - @PostMapping("/forgotPassword") - public AjaxResult forgotPassword(@Validated @RequestBody ForgetPwdValidate forgetPwdValidate) { - iLoginService.forgotPassword(forgetPwdValidate); - return AjaxResult.success(); - } - /** * 扫码链接 * @@ -134,9 +134,9 @@ public class LoginController { * @return AjaxResult */ @NotLogin - @GetMapping("/getScanCode") - public AjaxResult getScanCode(@RequestParam String url, HttpSession session) { - String qrcodeUrl = iLoginService.getScanCode(url, session); + @GetMapping("/scanCodeUrl") + public AjaxResult scanCodeUrl(@Validated @NotNull() @RequestParam("url") String url, HttpSession session) { + String qrcodeUrl = iLoginService.scanCodeUrl(url, session); LoginUrlsVo vo = new LoginUrlsVo(); vo.setUrl(qrcodeUrl); return AjaxResult.success(vo); @@ -146,13 +146,17 @@ public class LoginController { * 扫码登录 * * @author fzr - * @param scanLoginValidate 参数 + * @param valid 扫码参数 * @return AjaxResult */ @NotLogin @PostMapping("/scanLogin") - public AjaxResult scanLogin(@Validated @RequestBody ScanLoginValidate scanLoginValidate, HttpSession session) { - LoginTokenVo vo = iLoginService.scanLogin(scanLoginValidate, session); + public AjaxResult scanLogin(@Validated @RequestBody LoginScanValidate valid, HttpSession session) { + Integer terminal = LikeFrontThreadLocal.getTerminal(); + String code = valid.getCode(); + String state = valid.getState(); + + LoginTokenVo vo = iLoginService.scanLogin(code, state, terminal, session); return AjaxResult.success(vo); } diff --git a/server/like-front/src/main/java/com/mdd/front/controller/PcController.java b/server/like-front/src/main/java/com/mdd/front/controller/PcController.java index 50c5e11d..563f4025 100644 --- a/server/like-front/src/main/java/com/mdd/front/controller/PcController.java +++ b/server/like-front/src/main/java/com/mdd/front/controller/PcController.java @@ -5,8 +5,8 @@ import com.mdd.common.core.AjaxResult; import com.mdd.common.validator.annotation.IDMust; import com.mdd.front.LikeFrontThreadLocal; import com.mdd.front.service.IPcService; -import com.mdd.front.vo.PcArticleCenterVo; -import com.mdd.front.vo.PcArticleDetailVo; +import com.mdd.front.vo.article.PcArticleCenterVo; +import com.mdd.front.vo.article.PcArticleDetailVo; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; diff --git a/server/like-front/src/main/java/com/mdd/front/controller/SmsController.java b/server/like-front/src/main/java/com/mdd/front/controller/SmsController.java deleted file mode 100644 index 02f490cd..00000000 --- a/server/like-front/src/main/java/com/mdd/front/controller/SmsController.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.mdd.front.controller; - -import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.mdd.common.core.AjaxResult; -import com.mdd.common.entity.notice.NoticeRecord; -import com.mdd.common.enums.NoticeEnum; -import com.mdd.common.exception.OperateException; -import com.mdd.common.mapper.notice.NoticeRecordMapper; -import com.mdd.common.plugin.notice.NoticeDriver; -import com.mdd.common.plugin.notice.vo.NoticeSmsVo; -import com.mdd.common.util.StringUtils; -import com.mdd.common.util.ToolUtils; -import com.mdd.front.validate.commons.SmsValidate; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -import javax.annotation.Resource; -import java.util.Arrays; - -/** - * 短信管理 - */ -@RestController -@RequestMapping("/api/sms") -public class SmsController { - - @Resource - NoticeRecordMapper noticeRecordMapper; - - /** - * 发送短信 - * - * @author fzr - * @param smsValidate 参数 - * @return AjaxResult - */ - @PostMapping("/send") - public AjaxResult send(@Validated @RequestBody SmsValidate smsValidate) { - NoticeRecord noticeRecord = noticeRecordMapper.selectOne(new QueryWrapper() - .eq("mobile", smsValidate.getMobile()) - .eq("scene", smsValidate.getScene()) - .eq("status", Arrays.asList(NoticeEnum.STATUS_WAIT, NoticeEnum.STATUS_OK)) - .orderByDesc("id") - .last("limit 1")); - - if (StringUtils.isNotNull(noticeRecord)) { - if (noticeRecord.getCreateTime() >= (System.currentTimeMillis() / 1000 - 60)){ - throw new OperateException("操作频繁,请稍后再试!"); - } - } - - NoticeSmsVo params = new NoticeSmsVo() - .setScene(smsValidate.getScene()) - .setMobile(smsValidate.getMobile()) - .setExpire(900) - .setParams(new String[] { - "code:" + ToolUtils.randomInt(4) - }); - - NoticeDriver.handle(params); - return AjaxResult.success(); - } - -} diff --git a/server/like-front/src/main/java/com/mdd/front/controller/UserController.java b/server/like-front/src/main/java/com/mdd/front/controller/UserController.java index 61df4383..ed34579e 100644 --- a/server/like-front/src/main/java/com/mdd/front/controller/UserController.java +++ b/server/like-front/src/main/java/com/mdd/front/controller/UserController.java @@ -1,12 +1,14 @@ package com.mdd.front.controller; +import com.mdd.common.aop.NotLogin; import com.mdd.common.core.AjaxResult; import com.mdd.front.LikeFrontThreadLocal; import com.mdd.front.service.IUserService; -import com.mdd.front.validate.UserBindMobileValidate; -import com.mdd.front.validate.UserMnpMobileValidate; -import com.mdd.front.validate.UserPasswordValidate; -import com.mdd.front.validate.UserUpdateValidate; +import com.mdd.front.validate.users.UserForgetPwdValidate; +import com.mdd.front.validate.users.UserPhoneBindValidate; +import com.mdd.front.validate.users.UserPhoneMnpValidate; +import com.mdd.front.validate.users.UserChangePwdValidate; +import com.mdd.front.validate.users.UserUpdateValidate; import com.mdd.front.vo.users.UserCenterVo; import com.mdd.front.vo.users.UserInfoVo; import org.springframework.validation.annotation.Validated; @@ -32,7 +34,8 @@ public class UserController { */ @GetMapping("/center") public AjaxResult center() { - UserCenterVo vo = iUserService.center(LikeFrontThreadLocal.getUserId()); + Integer userId = LikeFrontThreadLocal.getUserId(); + UserCenterVo vo = iUserService.center(userId); return AjaxResult.success(vo); } @@ -44,7 +47,8 @@ public class UserController { */ @GetMapping("/info") public AjaxResult info() { - UserInfoVo vo = iUserService.info(LikeFrontThreadLocal.getUserId()); + Integer userId = LikeFrontThreadLocal.getUserId(); + UserInfoVo vo = iUserService.info(userId); return AjaxResult.success(vo); } @@ -70,12 +74,26 @@ public class UserController { * @return AjaxResult */ @PostMapping("/changePwd") - public AjaxResult changePwd(@Validated @RequestBody UserPasswordValidate passwordValidate) { + public AjaxResult changePwd(@Validated @RequestBody UserChangePwdValidate passwordValidate) { Integer userId = LikeFrontThreadLocal.getUserId(); iUserService.changePwd(passwordValidate.getPassword(), passwordValidate.getOldPassword(), userId); return AjaxResult.success(); } + /** + * 忘记密码 + * + * @author fzr + * @param userForgetPwdValidate 参数 + * @return AjaxResult + */ + @NotLogin + @PostMapping("/forgotPwd") + public AjaxResult forgotPwd(@Validated @RequestBody UserForgetPwdValidate userForgetPwdValidate) { + iUserService.forgotPwd(userForgetPwdValidate); + return AjaxResult.success(); + } + /** * 绑定手机号 * @@ -84,7 +102,7 @@ public class UserController { * @return AjaxResult */ @PostMapping("/bindMobile") - public AjaxResult bindMobile(@Validated @RequestBody UserBindMobileValidate mobileValidate) { + public AjaxResult bindMobile(@Validated @RequestBody UserPhoneBindValidate mobileValidate) { Integer userId = LikeFrontThreadLocal.getUserId(); iUserService.bindMobile(mobileValidate, userId); return AjaxResult.success(); @@ -98,7 +116,7 @@ public class UserController { * @return AjaxResult */ @PostMapping("/mnpMobile") - public AjaxResult mnpMobile(@Validated @RequestBody UserMnpMobileValidate mobileValidate) { + public AjaxResult mnpMobile(@Validated @RequestBody UserPhoneMnpValidate mobileValidate) { iUserService.mnpMobile(mobileValidate.getCode().trim()); return AjaxResult.success(); } diff --git a/server/like-front/src/main/java/com/mdd/front/service/IArticleService.java b/server/like-front/src/main/java/com/mdd/front/service/IArticleService.java index 62dbeed3..0c8273d4 100644 --- a/server/like-front/src/main/java/com/mdd/front/service/IArticleService.java +++ b/server/like-front/src/main/java/com/mdd/front/service/IArticleService.java @@ -1,8 +1,8 @@ package com.mdd.front.service; import com.mdd.common.core.PageResult; -import com.mdd.front.validate.ArticleSearchValidate; -import com.mdd.front.validate.commons.PageValidate; +import com.mdd.front.validate.article.ArticleSearchValidate; +import com.mdd.front.validate.common.PageValidate; import com.mdd.front.vo.article.ArticleCateVo; import com.mdd.front.vo.article.ArticleCollectVo; import com.mdd.front.vo.article.ArticleDetailVo; diff --git a/server/like-front/src/main/java/com/mdd/front/service/IIndexService.java b/server/like-front/src/main/java/com/mdd/front/service/IIndexService.java index 37e31ad2..df2dd2d6 100644 --- a/server/like-front/src/main/java/com/mdd/front/service/IIndexService.java +++ b/server/like-front/src/main/java/com/mdd/front/service/IIndexService.java @@ -1,7 +1,7 @@ package com.mdd.front.service; import com.mdd.common.core.PageResult; -import com.mdd.front.validate.commons.PageValidate; +import com.mdd.front.validate.common.PageValidate; import com.mdd.front.vo.article.ArticleListedVo; import java.util.List; diff --git a/server/like-front/src/main/java/com/mdd/front/service/ILoginService.java b/server/like-front/src/main/java/com/mdd/front/service/ILoginService.java index 1ffd80c3..55299df3 100644 --- a/server/like-front/src/main/java/com/mdd/front/service/ILoginService.java +++ b/server/like-front/src/main/java/com/mdd/front/service/ILoginService.java @@ -1,12 +1,8 @@ package com.mdd.front.service; -import com.mdd.front.validate.login.RegisterValidate; -import com.mdd.front.validate.login.ForgetPwdValidate; -import com.mdd.front.validate.login.ScanLoginValidate; -import com.mdd.front.vo.LoginTokenVo; +import com.mdd.front.vo.login.LoginTokenVo; import javax.servlet.http.HttpSession; -import java.util.Map; /** * 登录服务接口类 @@ -17,47 +13,53 @@ public interface ILoginService { * 账号注册 * * @author fzr - * @param registerValidate 参数 + * @param username 账号 + * @param password 密码 + * @param terminal 终端 */ - void register(RegisterValidate registerValidate); + void register(String username, String password, Integer terminal); /** * 账号登录 * * @author fzr - * @param params 参数 + * @param username 账号 + * @param password 密码 + * @param terminal 终端 * @return LoginTokenVo */ - LoginTokenVo accountLogin(Map params); + LoginTokenVo accountLogin(String username, String password, Integer terminal); /** * 手机登录 * * @author fzr - * @param params 参数 + * @param mobile 手机号 + * @param code 验证码 + * @param terminal 终端 * @return LoginTokenVo */ - LoginTokenVo mobileLogin(Map params); + LoginTokenVo mobileLogin(String mobile, String code, Integer terminal); /** * 微信登录 * * @author fzr * @param code 微信code - * @param client 来源客户端 + * @param terminal 终端 * @return LoginTokenVo */ - LoginTokenVo mnpLogin(String code, Integer client); + LoginTokenVo mnpLogin(String code, Integer terminal); /** * 公众号登录 * * @author fzr - * @param code 参数 - * @param client 参数 + * @param code 微信Code + * @param terminal 终端 * @return LoginTokenVo */ - LoginTokenVo officeLogin(String code, Integer client); + LoginTokenVo officeLogin(String code, Integer terminal); /** * 公众号跳转url @@ -66,15 +68,7 @@ public interface ILoginService { * @param url 连接 * @return String */ - String codeUrl(String url); - - /** - * 忘记密码 - * - * @author fzr - * @param forgetPwdValidate 参数 - */ - void forgotPassword(ForgetPwdValidate forgetPwdValidate); + String oaCodeUrl(String url); /** * 扫码链接 @@ -83,11 +77,17 @@ public interface ILoginService { * @param session session * @return String */ - String getScanCode(String url, HttpSession session); + String scanCodeUrl(String url, HttpSession session); /** * 扫码登录 + * + * @param code 编码 + * @param state 标识 + * @param terminal 终端 + * @param session 会话 + * @return LoginTokenVo */ - LoginTokenVo scanLogin(ScanLoginValidate scanLoginValidate, HttpSession session); + LoginTokenVo scanLogin(String code, String state, Integer terminal, HttpSession session); } diff --git a/server/like-front/src/main/java/com/mdd/front/service/IPcService.java b/server/like-front/src/main/java/com/mdd/front/service/IPcService.java index 6b6834f1..2f111eb3 100644 --- a/server/like-front/src/main/java/com/mdd/front/service/IPcService.java +++ b/server/like-front/src/main/java/com/mdd/front/service/IPcService.java @@ -1,7 +1,7 @@ package com.mdd.front.service; -import com.mdd.front.vo.PcArticleCenterVo; -import com.mdd.front.vo.PcArticleDetailVo; +import com.mdd.front.vo.article.PcArticleCenterVo; +import com.mdd.front.vo.article.PcArticleDetailVo; import java.util.List; import java.util.Map; diff --git a/server/like-front/src/main/java/com/mdd/front/service/IUploadService.java b/server/like-front/src/main/java/com/mdd/front/service/IUploadService.java deleted file mode 100644 index 32d69f01..00000000 --- a/server/like-front/src/main/java/com/mdd/front/service/IUploadService.java +++ /dev/null @@ -1,18 +0,0 @@ -package com.mdd.front.service; - -import java.util.Map; - -/** - * 上传服务接口类 - */ -public interface IUploadService { - - /** - * 上传图片 - * - * @author fzr - * @return Map - */ - Map image(); - -} diff --git a/server/like-front/src/main/java/com/mdd/front/service/IUserService.java b/server/like-front/src/main/java/com/mdd/front/service/IUserService.java index 34b45413..bca93170 100644 --- a/server/like-front/src/main/java/com/mdd/front/service/IUserService.java +++ b/server/like-front/src/main/java/com/mdd/front/service/IUserService.java @@ -1,7 +1,8 @@ package com.mdd.front.service; -import com.mdd.front.validate.UserBindMobileValidate; -import com.mdd.front.validate.UserUpdateValidate; +import com.mdd.front.validate.users.UserForgetPwdValidate; +import com.mdd.front.validate.users.UserPhoneBindValidate; +import com.mdd.front.validate.users.UserUpdateValidate; import com.mdd.front.vo.users.UserCenterVo; import com.mdd.front.vo.users.UserInfoVo; @@ -47,6 +48,8 @@ public interface IUserService { */ void changePwd(String password, String oldPassword, Integer userId); + void forgotPwd(UserForgetPwdValidate userForgetPwdValidate); + /** * 绑定手机 * @@ -54,7 +57,7 @@ public interface IUserService { * @param mobileValidate 参数 * @param userId 用户ID */ - void bindMobile(UserBindMobileValidate mobileValidate, Integer userId); + void bindMobile(UserPhoneBindValidate mobileValidate, Integer userId); /** * 微信手机 diff --git a/server/like-front/src/main/java/com/mdd/front/service/impl/ArticleServiceImpl.java b/server/like-front/src/main/java/com/mdd/front/service/impl/ArticleServiceImpl.java index 72ae3bdf..d24fae9c 100644 --- a/server/like-front/src/main/java/com/mdd/front/service/impl/ArticleServiceImpl.java +++ b/server/like-front/src/main/java/com/mdd/front/service/impl/ArticleServiceImpl.java @@ -17,8 +17,8 @@ import com.mdd.common.util.StringUtils; import com.mdd.common.util.TimeUtils; import com.mdd.common.util.UrlUtils; import com.mdd.front.service.IArticleService; -import com.mdd.front.validate.ArticleSearchValidate; -import com.mdd.front.validate.commons.PageValidate; +import com.mdd.front.validate.article.ArticleSearchValidate; +import com.mdd.front.validate.common.PageValidate; import com.mdd.front.vo.article.ArticleCateVo; import com.mdd.front.vo.article.ArticleCollectVo; import com.mdd.front.vo.article.ArticleDetailVo; diff --git a/server/like-front/src/main/java/com/mdd/front/service/impl/IndexServiceImpl.java b/server/like-front/src/main/java/com/mdd/front/service/impl/IndexServiceImpl.java index 972574e7..ca8a4559 100644 --- a/server/like-front/src/main/java/com/mdd/front/service/impl/IndexServiceImpl.java +++ b/server/like-front/src/main/java/com/mdd/front/service/impl/IndexServiceImpl.java @@ -17,7 +17,7 @@ import com.mdd.common.mapper.DecorateTabbarMapper; import com.mdd.common.mapper.setting.HotSearchMapper; import com.mdd.common.util.*; import com.mdd.front.service.IIndexService; -import com.mdd.front.validate.commons.PageValidate; +import com.mdd.front.validate.common.PageValidate; import com.mdd.front.vo.article.ArticleListedVo; import org.springframework.stereotype.Service; diff --git a/server/like-front/src/main/java/com/mdd/front/service/impl/LoginServiceImpl.java b/server/like-front/src/main/java/com/mdd/front/service/impl/LoginServiceImpl.java index 3e057565..8e08763c 100644 --- a/server/like-front/src/main/java/com/mdd/front/service/impl/LoginServiceImpl.java +++ b/server/like-front/src/main/java/com/mdd/front/service/impl/LoginServiceImpl.java @@ -15,12 +15,8 @@ import com.mdd.common.mapper.user.UserMapper; import com.mdd.common.plugin.notice.NoticeCheck; import com.mdd.common.util.*; import com.mdd.front.cache.ScanLoginCache; -import com.mdd.front.config.FrontConfig; import com.mdd.front.service.ILoginService; -import com.mdd.front.validate.login.RegisterValidate; -import com.mdd.front.validate.login.ForgetPwdValidate; -import com.mdd.front.validate.login.ScanLoginValidate; -import com.mdd.front.vo.LoginTokenVo; +import com.mdd.front.vo.login.LoginTokenVo; import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.api.WxConsts; import me.chanjar.weixin.common.bean.oauth2.WxOAuth2AccessToken; @@ -53,30 +49,32 @@ public class LoginServiceImpl implements ILoginService { * 注册账号 * * @author fzr - * @param registerValidate 参数 + * @param username 账号 + * @param password 密码 + * @param terminal 总端 */ @Override - public void register(RegisterValidate registerValidate) { + public void register(String username, String password, Integer terminal) { User model = userMapper.selectOne(new QueryWrapper() .select("id,sn,username") - .eq("username", registerValidate.getUsername()) + .eq("username", username) .eq("is_delete", 0) .last("limit 1")); Assert.isNull(model, "账号已存在,换一个吧!"); - Integer sn = this.randMakeSn(); + Integer sn = this.__generateSn(); String salt = ToolUtils.randomString(5); - String pwd = ToolUtils.makeMd5(registerValidate.getPassword()+salt); + String pwd = ToolUtils.makeMd5(password+salt); User user = new User(); user.setSn(sn); user.setNickname("用户"+sn); - user.setUsername(registerValidate.getUsername()); + user.setUsername(username); user.setPassword(pwd); user.setSalt(salt); user.setAvatar("/api/static/default_avatar.png"); - user.setChannel(registerValidate.getClient()); + user.setChannel(terminal); user.setCreateTime(System.currentTimeMillis() / 1000); user.setUpdateTime(System.currentTimeMillis() / 1000); userMapper.insert(user); @@ -86,16 +84,12 @@ public class LoginServiceImpl implements ILoginService { * 账号登录 * * @author fzr - * @param params 参数 + * @param username 账号 + * @param password 密码 * @return LoginTokenVo */ @Override - public LoginTokenVo accountLogin(Map params) { - Assert.notNull(params.get("username"), "username参数缺失!"); - Assert.notNull(params.get("password"), "password参数缺失!"); - String username = params.get("username"); - String password = params.get("password"); - + public LoginTokenVo accountLogin(String username, String password, Integer terminal) { User user = userMapper.selectOne(new QueryWrapper() .select("id,username,password,salt,mobile,is_disable") .eq("username", username) @@ -107,23 +101,19 @@ public class LoginServiceImpl implements ILoginService { Assert.isFalse(!pwd.equals(user.getPassword()), "账号或密码错误!"); Assert.isFalse(!user.getIsDisable().equals(0), "账号已被禁用!"); - return this.makeLoginToken(user.getId(), user.getMobile()); + return this.__loginToken(user.getId(), user.getMobile(), terminal); } /** * 手机号登录 * * @author fzr - * @param params 参数 + * @param mobile 手机号 + * @param code 验证码 * @return LoginTokenVo */ @Override - public LoginTokenVo mobileLogin(Map params) { - Assert.notNull(params.get("mobile"), "mobile参数缺失!"); - Assert.notNull(params.get("code"), "code参数缺失!"); - String mobile = params.get("mobile"); - String code = params.get("code").toLowerCase(); - + public LoginTokenVo mobileLogin(String mobile, String code, Integer terminal) { // 校验验证码 int sceneCode = NoticeEnum.LOGIN_CODE.getCode(); if (!NoticeCheck.verify(sceneCode, code)) { @@ -140,20 +130,20 @@ public class LoginServiceImpl implements ILoginService { Assert.notNull(user, "账号不存在!"); Assert.isFalse(user.getIsDisable() != 0, "账号已禁用!"); - return this.makeLoginToken(user.getId(), user.getMobile()); + return this.__loginToken(user.getId(), user.getMobile(), terminal); } /** * 微信小程序登录 * * @author fzr - * @param code 微信code - * @param client 来源客户端 + * @param code 编码 + * @param terminal 终端 * @return LoginTokenVo */ @Override @Transactional - public LoginTokenVo mnpLogin(String code, Integer client) { + public LoginTokenVo mnpLogin(String code, Integer terminal) { try { WxMaService wxMaService = WeChatUtils.mnp(); WxMaJscode2SessionResult sessionResult = wxMaService.getUserService().getSessionInfo(code); @@ -161,7 +151,7 @@ public class LoginServiceImpl implements ILoginService { String uniId = sessionResult.getUnionid(); String unionId = uniId == null ? "0" : uniId; - return this.userService(openId, unionId, client); + return this.__wxLoginHandle(openId, unionId, terminal); } catch (WxErrorException e) { throw new OperateException(e.getError().getErrorCode() + ", " + e.getError().getErrorMsg()); } @@ -171,17 +161,19 @@ public class LoginServiceImpl implements ILoginService { * 公众号登录 * * @author fzr + * @param code 编码 + * @param terminal 终端 * @return LoginTokenVo */ @Override - public LoginTokenVo officeLogin(String code, Integer client) { + public LoginTokenVo officeLogin(String code, Integer terminal) { try { WxMpService wxMpService = WeChatUtils.official(); WxOAuth2AccessToken wxOAuth2AccessToken = wxMpService.getOAuth2Service().getAccessToken(code); String uniId = wxOAuth2AccessToken.getUnionId(); String openId = wxOAuth2AccessToken.getOpenId(); String unionId = uniId == null ? "0" : uniId; - return this.userService(openId, unionId, client); + return this.__wxLoginHandle(openId, unionId, terminal); } catch (WxErrorException e) { throw new OperateException(e.getError().getErrorCode() + ", " + e.getError().getErrorMsg()); } @@ -195,50 +187,12 @@ public class LoginServiceImpl implements ILoginService { * @return String */ @Override - public String codeUrl(String url) { + public String oaCodeUrl(String url) { WxMpService wxMpService = WeChatUtils.official(); WxMpOAuth2ServiceImpl wxMpOAuth2Service = new WxMpOAuth2ServiceImpl(wxMpService); return wxMpOAuth2Service.buildAuthorizationUrl(url, WxConsts.OAuth2Scope.SNSAPI_USERINFO, null); } - /** - * 忘记密码 - * - * @author fzr - * @param forgetPwdValidate 参数 - */ - @Override - public void forgotPassword(ForgetPwdValidate forgetPwdValidate) { - String mobile = forgetPwdValidate.getMobile(); - String code = forgetPwdValidate.getCode(); - String password = forgetPwdValidate.getPassword(); - - // 校验验证码 - int sceneCode = NoticeEnum.FORGOT_PASSWORD_CODE.getCode(); - if (!NoticeCheck.verify(sceneCode, code)) { - throw new OperateException("验证码错误!"); - } - - // 查询手机号 - User user = userMapper.selectOne(new QueryWrapper() - .select("id,username,mobile,is_disable") - .eq("is_delete", 0) - .eq("mobile", mobile) - .last("limit 1")); - - // 验证账号 - Assert.notNull(user, "账号不存在!"); - - String salt = ToolUtils.randomString(5); - String pwd = ToolUtils.makeMd5(password.trim()+salt); - - // 更新密码 - user.setPassword(pwd); - user.setSalt(salt); - user.setUpdateTime(System.currentTimeMillis() / 1000); - userMapper.updateById(user); - } - /** * 扫码链接 * @@ -247,7 +201,7 @@ public class LoginServiceImpl implements ILoginService { * @return String */ @Override - public String getScanCode(String url, HttpSession session) { + public String scanCodeUrl(String url, HttpSession session) { // 获取AppId String appId = ConfigUtils.get("op_channel", "appId", ""); @@ -280,18 +234,14 @@ public class LoginServiceImpl implements ILoginService { * 扫码登录 * * @author fzr - * @param scanLoginValidate 参数 - * @param session 当前会话 + * @param code 编码 + * @param state 标识 + * @param terminal 终端 + * @param session 会话 */ @Override - public LoginTokenVo scanLogin(ScanLoginValidate scanLoginValidate, HttpSession session) { - // 验证唯一标识是否过期 - if (ScanLoginCache.get(session.getId()).equals(scanLoginValidate.getState())) { - throw new OperateException("二维码已失效或不存在,请重新操作"); - } - + public LoginTokenVo scanLogin(String code, String state, Integer terminal, HttpSession session) { // 得到配置和授权临时票据code - String code = scanLoginValidate.getCode(); String appId = ConfigUtils.get("op_channel", "appId", ""); String appSecret = ConfigUtils.get("op_channel", "appSecret", ""); @@ -327,44 +277,18 @@ public class LoginServiceImpl implements ILoginService { String openId = userinfoMap.get("openid"); String uniId = userinfoMap.get("unionid"); String unionId = uniId == null ? "0" : uniId; - return this.userService(openId, unionId, ClientEnum.PC.getCode()); + return this.__wxLoginHandle(openId, unionId, terminal); } /** - * 生成登录Token + * 处理微信登录 * - * @author fzr - * @param userId 用户ID - * @param mobile 用户手机 + * @param openId (openId) + * @param unionId (unionId) + * @param terminal (terminal) * @return LoginTokenVo */ - private LoginTokenVo makeLoginToken(Integer userId, String mobile) { - // 实现账号登录 - StpUtil.login(userId); - - // 更新登录信息 - User user = new User(); - user.setLastLoginIp(IpUtils.getHostIp()); - user.setLastLoginTime(System.currentTimeMillis() / 1000); - userMapper.update(user, new QueryWrapper().eq("id", userId)); - - // 返回登录信息 - LoginTokenVo vo = new LoginTokenVo(); - vo.setId(userId); - vo.setIsBindMobile(!StringUtils.isEmpty(mobile)); - vo.setToken(StpUtil.getTokenValue()); - return vo; - } - - /** - * 用户创建服务 - * - * @param openId (openId) - * @param unionId (unionId) - * @param client (client) - * @return LoginTokenVo - */ - private LoginTokenVo userService(String openId, String unionId, Integer client) { + private LoginTokenVo __wxLoginHandle(String openId, String unionId, Integer terminal) { UserAuth userAuth = userAuthMapper.selectOne(new QueryWrapper() .nested(wq->wq .eq("unionid", unionId).or() @@ -381,7 +305,7 @@ public class LoginServiceImpl implements ILoginService { } if (StringUtils.isNull(user)) { - Integer sn = this.randMakeSn(); + Integer sn = this.__generateSn(); User model = new User(); model.setSn(sn); model.setAvatar("/api/static/default_avatar.png"); @@ -402,7 +326,7 @@ public class LoginServiceImpl implements ILoginService { auth.setUserId(model.getId()); auth.setUnionid(unionId); auth.setOpenid(openId); - auth.setClient(client); + auth.setTerminal(terminal); auth.setCreateTime(System.currentTimeMillis() / 1000); auth.setUpdateTime(System.currentTimeMillis() / 1000); userAuthMapper.insert(auth); @@ -414,7 +338,7 @@ public class LoginServiceImpl implements ILoginService { .nested(wq->wq .eq("unionid", unionId).or() .eq("openid", openId) - ).eq("client", client) + ).eq("terminal", terminal) .last("limit 1")); if (StringUtils.isNull(auth)) { @@ -422,7 +346,7 @@ public class LoginServiceImpl implements ILoginService { authModel.setUserId(user.getId()); authModel.setUnionid(unionId); authModel.setOpenid(openId); - authModel.setClient(client); + authModel.setTerminal(terminal); authModel.setCreateTime(System.currentTimeMillis() / 1000); authModel.setUpdateTime(System.currentTimeMillis() / 1000); userAuthMapper.insert(authModel); @@ -432,7 +356,34 @@ public class LoginServiceImpl implements ILoginService { } } - return this.makeLoginToken(userId, user.getMobile()); + return this.__loginToken(userId, user.getMobile(), terminal); + } + + /** + * 处理录令牌 + * + * @author fzr + * @param userId 用户ID + * @param mobile 用户手机 + * @param terminal 终端 + * @return LoginTokenVo + */ + private LoginTokenVo __loginToken(Integer userId, String mobile, Integer terminal) { + // 实现账号登录 + StpUtil.login(userId, terminal); + + // 更新登录信息 + User user = new User(); + user.setLastLoginIp(IpUtils.getHostIp()); + user.setLastLoginTime(System.currentTimeMillis() / 1000); + userMapper.update(user, new QueryWrapper().eq("id", userId)); + + // 返回登录信息 + LoginTokenVo vo = new LoginTokenVo(); + vo.setId(userId); + vo.setIsBindMobile(!StringUtils.isEmpty(mobile)); + vo.setToken(StpUtil.getTokenValue()); + return vo; } /** @@ -441,7 +392,7 @@ public class LoginServiceImpl implements ILoginService { * @author fzr * @return Integer */ - private Integer randMakeSn() { + private Integer __generateSn() { Integer sn; while (true) { sn = Integer.parseInt(ToolUtils.randomInt(8)); diff --git a/server/like-front/src/main/java/com/mdd/front/service/impl/PcServiceImpI.java b/server/like-front/src/main/java/com/mdd/front/service/impl/PcServiceImpI.java index ae35f440..6add538b 100644 --- a/server/like-front/src/main/java/com/mdd/front/service/impl/PcServiceImpI.java +++ b/server/like-front/src/main/java/com/mdd/front/service/impl/PcServiceImpI.java @@ -13,8 +13,8 @@ import com.mdd.common.mapper.article.ArticleCollectMapper; import com.mdd.common.mapper.article.ArticleMapper; import com.mdd.common.util.*; import com.mdd.front.service.IPcService; -import com.mdd.front.vo.PcArticleCenterVo; -import com.mdd.front.vo.PcArticleDetailVo; +import com.mdd.front.vo.article.PcArticleCenterVo; +import com.mdd.front.vo.article.PcArticleDetailVo; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; diff --git a/server/like-front/src/main/java/com/mdd/front/service/impl/UploadServiceImpl.java b/server/like-front/src/main/java/com/mdd/front/service/impl/UploadServiceImpl.java deleted file mode 100644 index 4b4e09e7..00000000 --- a/server/like-front/src/main/java/com/mdd/front/service/impl/UploadServiceImpl.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.mdd.front.service.impl; - -import com.mdd.front.service.IUploadService; -import org.springframework.stereotype.Service; - -import java.util.Map; - -/** - * 上传服务实现类 - */ -@Service -public class UploadServiceImpl implements IUploadService { - - @Override - public Map image() { - return null; - } - -} diff --git a/server/like-front/src/main/java/com/mdd/front/service/impl/UserServiceImpl.java b/server/like-front/src/main/java/com/mdd/front/service/impl/UserServiceImpl.java index 5d4ae78a..3911c656 100644 --- a/server/like-front/src/main/java/com/mdd/front/service/impl/UserServiceImpl.java +++ b/server/like-front/src/main/java/com/mdd/front/service/impl/UserServiceImpl.java @@ -17,8 +17,9 @@ import com.mdd.common.plugin.notice.NoticeCheck; import com.mdd.common.util.*; import com.mdd.front.LikeFrontThreadLocal; import com.mdd.front.service.IUserService; -import com.mdd.front.validate.UserBindMobileValidate; -import com.mdd.front.validate.UserUpdateValidate; +import com.mdd.front.validate.users.UserForgetPwdValidate; +import com.mdd.front.validate.users.UserPhoneBindValidate; +import com.mdd.front.validate.users.UserUpdateValidate; import com.mdd.front.vo.users.UserCenterVo; import com.mdd.front.vo.users.UserInfoVo; import me.chanjar.weixin.common.error.WxErrorException; @@ -201,6 +202,43 @@ public class UserServiceImpl implements IUserService { userMapper.updateById(u); } + /** + * 忘记密码 + * + * @param userForgetPwdValidate + */ + @Override + public void forgotPwd(UserForgetPwdValidate userForgetPwdValidate) { + String mobile = userForgetPwdValidate.getMobile(); + String code = userForgetPwdValidate.getCode(); + String password = userForgetPwdValidate.getPassword(); + + // 校验验证码 + int sceneCode = NoticeEnum.FORGOT_PASSWORD_CODE.getCode(); + if (!NoticeCheck.verify(sceneCode, code)) { + throw new OperateException("验证码错误!"); + } + + // 查询手机号 + User user = userMapper.selectOne(new QueryWrapper() + .select("id,username,mobile,is_disable") + .eq("is_delete", 0) + .eq("mobile", mobile) + .last("limit 1")); + + // 验证账号 + com.baomidou.mybatisplus.core.toolkit.Assert.notNull(user, "账号不存在!"); + + String salt = ToolUtils.randomString(5); + String pwd = ToolUtils.makeMd5(password.trim()+salt); + + // 更新密码 + user.setPassword(pwd); + user.setSalt(salt); + user.setUpdateTime(System.currentTimeMillis() / 1000); + userMapper.updateById(user); + } + /** * 绑定手机 * @@ -209,7 +247,7 @@ public class UserServiceImpl implements IUserService { * @param userId 用户ID */ @Override - public void bindMobile(UserBindMobileValidate mobileValidate, Integer userId) { + public void bindMobile(UserPhoneBindValidate mobileValidate, Integer userId) { String type = mobileValidate.getType(); String mobile = mobileValidate.getMobile(); String code = mobileValidate.getCode().toLowerCase(); diff --git a/server/like-front/src/main/java/com/mdd/front/validate/ArticleCollectValidate.java b/server/like-front/src/main/java/com/mdd/front/validate/article/ArticleCollectValidate.java similarity index 91% rename from server/like-front/src/main/java/com/mdd/front/validate/ArticleCollectValidate.java rename to server/like-front/src/main/java/com/mdd/front/validate/article/ArticleCollectValidate.java index ed24704e..274c2082 100644 --- a/server/like-front/src/main/java/com/mdd/front/validate/ArticleCollectValidate.java +++ b/server/like-front/src/main/java/com/mdd/front/validate/article/ArticleCollectValidate.java @@ -1,4 +1,4 @@ -package com.mdd.front.validate; +package com.mdd.front.validate.article; import com.mdd.common.validator.annotation.IDMust; import lombok.Data; diff --git a/server/like-front/src/main/java/com/mdd/front/validate/ArticleSearchValidate.java b/server/like-front/src/main/java/com/mdd/front/validate/article/ArticleSearchValidate.java similarity index 92% rename from server/like-front/src/main/java/com/mdd/front/validate/ArticleSearchValidate.java rename to server/like-front/src/main/java/com/mdd/front/validate/article/ArticleSearchValidate.java index df6bc065..05895beb 100644 --- a/server/like-front/src/main/java/com/mdd/front/validate/ArticleSearchValidate.java +++ b/server/like-front/src/main/java/com/mdd/front/validate/article/ArticleSearchValidate.java @@ -1,4 +1,4 @@ -package com.mdd.front.validate; +package com.mdd.front.validate.article; import com.mdd.common.validator.annotation.StringContains; import lombok.Data; diff --git a/server/like-front/src/main/java/com/mdd/front/validate/commons/PageValidate.java b/server/like-front/src/main/java/com/mdd/front/validate/common/PageValidate.java similarity index 94% rename from server/like-front/src/main/java/com/mdd/front/validate/commons/PageValidate.java rename to server/like-front/src/main/java/com/mdd/front/validate/common/PageValidate.java index b72dfe63..c281800b 100644 --- a/server/like-front/src/main/java/com/mdd/front/validate/commons/PageValidate.java +++ b/server/like-front/src/main/java/com/mdd/front/validate/common/PageValidate.java @@ -1,4 +1,4 @@ -package com.mdd.front.validate.commons; +package com.mdd.front.validate.common; import lombok.Data; diff --git a/server/like-front/src/main/java/com/mdd/front/validate/commons/SmsValidate.java b/server/like-front/src/main/java/com/mdd/front/validate/common/SmsValidate.java similarity index 94% rename from server/like-front/src/main/java/com/mdd/front/validate/commons/SmsValidate.java rename to server/like-front/src/main/java/com/mdd/front/validate/common/SmsValidate.java index 395172de..a64d71da 100644 --- a/server/like-front/src/main/java/com/mdd/front/validate/commons/SmsValidate.java +++ b/server/like-front/src/main/java/com/mdd/front/validate/common/SmsValidate.java @@ -1,4 +1,4 @@ -package com.mdd.front.validate.commons; +package com.mdd.front.validate.common; import lombok.Data; import org.hibernate.validator.constraints.Length; diff --git a/server/like-front/src/main/java/com/mdd/front/validate/login/LoginCodeValidate.java b/server/like-front/src/main/java/com/mdd/front/validate/login/LoginCodeValidate.java new file mode 100644 index 00000000..89aad411 --- /dev/null +++ b/server/like-front/src/main/java/com/mdd/front/validate/login/LoginCodeValidate.java @@ -0,0 +1,16 @@ +package com.mdd.front.validate.login; + +import lombok.Data; + +import javax.validation.constraints.NotNull; + +/** + * 微信登录参数 + */ +@Data +public class LoginCodeValidate { + + @NotNull(message = "code参数缺失") + private String code; + +} diff --git a/server/like-front/src/main/java/com/mdd/front/validate/login/LoginPhoneValidate.java b/server/like-front/src/main/java/com/mdd/front/validate/login/LoginPhoneValidate.java new file mode 100644 index 00000000..8b64a759 --- /dev/null +++ b/server/like-front/src/main/java/com/mdd/front/validate/login/LoginPhoneValidate.java @@ -0,0 +1,27 @@ +package com.mdd.front.validate.login; + +import lombok.Data; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Pattern; + +/** + * 手机号登录参数 + */ +@Data +public class LoginPhoneValidate { + + @NotNull(message = "mobile参数缺失") + @NotEmpty(message = "手机号不能为空") + @Length(min = 11, max = 11, message = "手机号只能为11位") + @Pattern(regexp = "^[1][3,4,5,6,7,8,9][0-9]{9}$", message = "手机号格式有误") + private String mobile; + + @NotNull(message = "code参数缺失") + @NotEmpty(message = "code不能为空") + @Length(min = 4, max = 6, message = "验证码长度不符合") + private String code; + +} diff --git a/server/like-front/src/main/java/com/mdd/front/validate/login/LoginPwdValidate.java b/server/like-front/src/main/java/com/mdd/front/validate/login/LoginPwdValidate.java new file mode 100644 index 00000000..8afb60da --- /dev/null +++ b/server/like-front/src/main/java/com/mdd/front/validate/login/LoginPwdValidate.java @@ -0,0 +1,22 @@ +package com.mdd.front.validate.login; + +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +/** + * 账号密码登录参数 + */ +@Data +public class LoginPwdValidate { + + @NotNull(message = "username参数缺失") + @NotEmpty(message = "账号不能为空") + private String username; + + @NotNull(message = "password参数缺失") + @NotEmpty(message = "密码不能为空") + private String password; + +} diff --git a/server/like-front/src/main/java/com/mdd/front/validate/login/ScanLoginValidate.java b/server/like-front/src/main/java/com/mdd/front/validate/login/LoginScanValidate.java similarity index 52% rename from server/like-front/src/main/java/com/mdd/front/validate/login/ScanLoginValidate.java rename to server/like-front/src/main/java/com/mdd/front/validate/login/LoginScanValidate.java index 064990e9..542578d8 100644 --- a/server/like-front/src/main/java/com/mdd/front/validate/login/ScanLoginValidate.java +++ b/server/like-front/src/main/java/com/mdd/front/validate/login/LoginScanValidate.java @@ -2,6 +2,7 @@ package com.mdd.front.validate.login; import lombok.Data; +import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.io.Serializable; @@ -9,14 +10,16 @@ import java.io.Serializable; * 网站扫码登录验证 */ @Data -public class ScanLoginValidate implements Serializable { +public class LoginScanValidate implements Serializable { private static final long serialVersionUID = 1L; @NotNull(message = "code参数缺失") + @NotEmpty(message = "code不能为空") private String code; - @NotNull(message = "state参数缺失") + @NotNull(message = "二维码已失效或不存在,请重新操作") + @NotEmpty(message = "二维码已失效或不存在,请重新操作") private String state; } diff --git a/server/like-front/src/main/java/com/mdd/front/validate/login/OaLoginValidate.java b/server/like-front/src/main/java/com/mdd/front/validate/login/OaLoginValidate.java deleted file mode 100644 index 7738aaf9..00000000 --- a/server/like-front/src/main/java/com/mdd/front/validate/login/OaLoginValidate.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.mdd.front.validate.login; - -import com.mdd.common.validator.annotation.IntegerContains; -import lombok.Data; - -import javax.validation.constraints.NotNull; -import java.io.Serializable; - -/** - * 公众号登录参数 - */ -@Data -public class OaLoginValidate implements Serializable { - - private static final long serialVersionUID = 1L; - - @NotNull(message = "code参数缺失") - private String code; - - @IntegerContains(values = {1, 2, 3, 4, 5, 6}, message = "client参数值不符合") - private Integer client; - -} diff --git a/server/like-front/src/main/java/com/mdd/front/validate/login/RegisterValidate.java b/server/like-front/src/main/java/com/mdd/front/validate/login/RegisterValidate.java index ab2b822f..72f0c78e 100644 --- a/server/like-front/src/main/java/com/mdd/front/validate/login/RegisterValidate.java +++ b/server/like-front/src/main/java/com/mdd/front/validate/login/RegisterValidate.java @@ -1,6 +1,5 @@ package com.mdd.front.validate.login; -import com.mdd.common.validator.annotation.IntegerContains; import lombok.Data; import org.hibernate.validator.constraints.Length; @@ -28,8 +27,4 @@ public class RegisterValidate implements Serializable { @Length(min = 6, max = 12, message = "密码必须在6~12个字符内") private String password; - @NotNull(message = "client参数缺失") - @IntegerContains(values = {1, 2, 3, 4, 5, 6}, message = "不是合法客户端") - private Integer client; - } diff --git a/server/like-front/src/main/java/com/mdd/front/validate/UserPasswordValidate.java b/server/like-front/src/main/java/com/mdd/front/validate/users/UserChangePwdValidate.java similarity index 70% rename from server/like-front/src/main/java/com/mdd/front/validate/UserPasswordValidate.java rename to server/like-front/src/main/java/com/mdd/front/validate/users/UserChangePwdValidate.java index e3bf0667..fb8d34d4 100644 --- a/server/like-front/src/main/java/com/mdd/front/validate/UserPasswordValidate.java +++ b/server/like-front/src/main/java/com/mdd/front/validate/users/UserChangePwdValidate.java @@ -1,4 +1,4 @@ -package com.mdd.front.validate; +package com.mdd.front.validate.users; import lombok.Data; @@ -10,7 +10,7 @@ import java.io.Serializable; * 用户修改密码参数 */ @Data -public class UserPasswordValidate implements Serializable { +public class UserChangePwdValidate implements Serializable { private static final long serialVersionUID = 1L; @@ -18,6 +18,8 @@ public class UserPasswordValidate implements Serializable { @Pattern(message = "密码必须是6-20字母+数字组合!", regexp="^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,20}$") private String password; + @NotNull(message = "oldPassword参数缺失") + @NotNull(message = "旧密码不能为空") private String oldPassword=""; } diff --git a/server/like-front/src/main/java/com/mdd/front/validate/login/ForgetPwdValidate.java b/server/like-front/src/main/java/com/mdd/front/validate/users/UserForgetPwdValidate.java similarity index 58% rename from server/like-front/src/main/java/com/mdd/front/validate/login/ForgetPwdValidate.java rename to server/like-front/src/main/java/com/mdd/front/validate/users/UserForgetPwdValidate.java index 531850f4..868f456d 100644 --- a/server/like-front/src/main/java/com/mdd/front/validate/login/ForgetPwdValidate.java +++ b/server/like-front/src/main/java/com/mdd/front/validate/users/UserForgetPwdValidate.java @@ -1,7 +1,8 @@ -package com.mdd.front.validate.login; +package com.mdd.front.validate.users; import lombok.Data; +import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.io.Serializable; @@ -9,17 +10,20 @@ import java.io.Serializable; * 忘记密码参数 */ @Data -public class ForgetPwdValidate implements Serializable { +public class UserForgetPwdValidate implements Serializable { private static final long serialVersionUID = 1L; @NotNull(message = "mobile参数缺失") + @NotEmpty(message = "手机号不能为空") private String mobile; @NotNull(message = "code参数缺失") + @NotEmpty(message = "验证码不能为空") private String code; @NotNull(message = "password参数缺失") + @NotEmpty(message = "新密码不能为空") private String password; } \ No newline at end of file diff --git a/server/like-front/src/main/java/com/mdd/front/validate/UserBindMobileValidate.java b/server/like-front/src/main/java/com/mdd/front/validate/users/UserPhoneBindValidate.java similarity index 85% rename from server/like-front/src/main/java/com/mdd/front/validate/UserBindMobileValidate.java rename to server/like-front/src/main/java/com/mdd/front/validate/users/UserPhoneBindValidate.java index 73718cd8..a9fbe4b7 100644 --- a/server/like-front/src/main/java/com/mdd/front/validate/UserBindMobileValidate.java +++ b/server/like-front/src/main/java/com/mdd/front/validate/users/UserPhoneBindValidate.java @@ -1,4 +1,4 @@ -package com.mdd.front.validate; +package com.mdd.front.validate.users; import com.mdd.common.validator.annotation.StringContains; import lombok.Data; @@ -13,7 +13,7 @@ import java.io.Serializable; * 绑定或修改手机参数 */ @Data -public class UserBindMobileValidate implements Serializable { +public class UserPhoneBindValidate implements Serializable { private static final long serialVersionUID = 1L; @@ -28,6 +28,7 @@ public class UserBindMobileValidate implements Serializable { private String mobile; @NotNull(message = "code参数缺失") + @NotEmpty(message = "验证码不能为空") private String code; } diff --git a/server/like-front/src/main/java/com/mdd/front/validate/UserMnpMobileValidate.java b/server/like-front/src/main/java/com/mdd/front/validate/users/UserPhoneMnpValidate.java similarity index 73% rename from server/like-front/src/main/java/com/mdd/front/validate/UserMnpMobileValidate.java rename to server/like-front/src/main/java/com/mdd/front/validate/users/UserPhoneMnpValidate.java index 30c04688..050bdc69 100644 --- a/server/like-front/src/main/java/com/mdd/front/validate/UserMnpMobileValidate.java +++ b/server/like-front/src/main/java/com/mdd/front/validate/users/UserPhoneMnpValidate.java @@ -1,4 +1,4 @@ -package com.mdd.front.validate; +package com.mdd.front.validate.users; import lombok.Data; @@ -9,7 +9,7 @@ import java.io.Serializable; * 获取微信手机号参数 */ @Data -public class UserMnpMobileValidate implements Serializable { +public class UserPhoneMnpValidate implements Serializable { private static final long serialVersionUID = 1L; diff --git a/server/like-front/src/main/java/com/mdd/front/validate/UserUpdateValidate.java b/server/like-front/src/main/java/com/mdd/front/validate/users/UserUpdateValidate.java similarity index 93% rename from server/like-front/src/main/java/com/mdd/front/validate/UserUpdateValidate.java rename to server/like-front/src/main/java/com/mdd/front/validate/users/UserUpdateValidate.java index 18c4e364..07ac5d68 100644 --- a/server/like-front/src/main/java/com/mdd/front/validate/UserUpdateValidate.java +++ b/server/like-front/src/main/java/com/mdd/front/validate/users/UserUpdateValidate.java @@ -1,4 +1,4 @@ -package com.mdd.front.validate; +package com.mdd.front.validate.users; import com.mdd.common.validator.annotation.StringContains; import lombok.Data; diff --git a/server/like-front/src/main/java/com/mdd/front/vo/PcArticleCenterVo.java b/server/like-front/src/main/java/com/mdd/front/vo/article/PcArticleCenterVo.java similarity index 86% rename from server/like-front/src/main/java/com/mdd/front/vo/PcArticleCenterVo.java rename to server/like-front/src/main/java/com/mdd/front/vo/article/PcArticleCenterVo.java index 06149496..c8337e09 100644 --- a/server/like-front/src/main/java/com/mdd/front/vo/PcArticleCenterVo.java +++ b/server/like-front/src/main/java/com/mdd/front/vo/article/PcArticleCenterVo.java @@ -1,4 +1,4 @@ -package com.mdd.front.vo; +package com.mdd.front.vo.article; import lombok.Data; diff --git a/server/like-front/src/main/java/com/mdd/front/vo/PcArticleDetailVo.java b/server/like-front/src/main/java/com/mdd/front/vo/article/PcArticleDetailVo.java similarity index 94% rename from server/like-front/src/main/java/com/mdd/front/vo/PcArticleDetailVo.java rename to server/like-front/src/main/java/com/mdd/front/vo/article/PcArticleDetailVo.java index f8e60170..d899b6e1 100644 --- a/server/like-front/src/main/java/com/mdd/front/vo/PcArticleDetailVo.java +++ b/server/like-front/src/main/java/com/mdd/front/vo/article/PcArticleDetailVo.java @@ -1,4 +1,4 @@ -package com.mdd.front.vo; +package com.mdd.front.vo.article; import lombok.Data; diff --git a/server/like-front/src/main/java/com/mdd/front/vo/LoginTokenVo.java b/server/like-front/src/main/java/com/mdd/front/vo/login/LoginTokenVo.java similarity index 89% rename from server/like-front/src/main/java/com/mdd/front/vo/LoginTokenVo.java rename to server/like-front/src/main/java/com/mdd/front/vo/login/LoginTokenVo.java index 8c0ea1f3..e0d58339 100644 --- a/server/like-front/src/main/java/com/mdd/front/vo/LoginTokenVo.java +++ b/server/like-front/src/main/java/com/mdd/front/vo/login/LoginTokenVo.java @@ -1,4 +1,4 @@ -package com.mdd.front.vo; +package com.mdd.front.vo.login; import lombok.Data; diff --git a/server/like-front/src/main/java/com/mdd/front/vo/LoginUrlsVo.java b/server/like-front/src/main/java/com/mdd/front/vo/login/LoginUrlsVo.java similarity index 87% rename from server/like-front/src/main/java/com/mdd/front/vo/LoginUrlsVo.java rename to server/like-front/src/main/java/com/mdd/front/vo/login/LoginUrlsVo.java index 041c09a2..cad83543 100644 --- a/server/like-front/src/main/java/com/mdd/front/vo/LoginUrlsVo.java +++ b/server/like-front/src/main/java/com/mdd/front/vo/login/LoginUrlsVo.java @@ -1,4 +1,4 @@ -package com.mdd.front.vo; +package com.mdd.front.vo.login; import lombok.Data;