diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/HomeController.java b/mallinkAdmin/src/main/java/com/iformall/controller/HomeController.java index bc4513cc9..c83145c59 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/HomeController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/HomeController.java @@ -189,20 +189,28 @@ public class HomeController extends BaseController { return data; } - @GetMapping("sendLoginCode") + @GetMapping("sendLoginPhoneCode") @ApiImplicitParams({ @ApiImplicitParam(name = "phone", value = "手机号", dataType = "String", paramType = "query", required = true), @ApiImplicitParam(name = "type", value = "场景(1:登录)", dataType = "Integer", paramType = "query", required = true)}) public ResultData sendlogincode(String phone, Integer type) { logger.debug("[" + getIpAddr() + "] HomeController::sendlogincode"); - // 1. 检查手机号是否在用户列表里 - // 2. 发送手机验证码 - // 2.1 如果只找到一个手机号 直接发 - // 2.2 如果找到多个,用富茂的发 + // 1. 检查手机号是否在用户列表里, 是否只有一个 + // 2. 发送手机验证码, 直接发 + List users = mallUserInfoService.getUserByPhone(phone); + if(users.size() <= 0) { + logger.error(ErrorCode.USER_IS_EMPTY.getMessage()); + return new ResultData(ErrorCode.USER_IS_EMPTY); + } + if(users.size() > 1) { + logger.error(ErrorCode.USER_IS_MULTI.getMessage()); + return new ResultData(ErrorCode.USER_IS_MULTI); + } + MallUserInfoVo user = users.get(0); WxMsgValidationcode wxMsgValidationcode = new WxMsgValidationcode(); wxMsgValidationcode.setPhone(phone); + wxMsgValidationcode.setTenantId(user.getTenantId()); wxMsgValidationcode.setType(type); - // TODO 登录时不知道哪个tenantId return wxMsgValidationcodeService.sendvalidationcode(wxMsgValidationcode); } @@ -221,103 +229,46 @@ public class HomeController extends BaseController { return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "验证码不能为空"); } - // check 验证码正确 - // TODO -// try { -// return userInfoService.updatepwd(user, code); -// } catch (Exception e) { -// return new ResultData(Result.ERROR, e.getMessage()); -// } - // 获取用户信息列表 List userList = mallUserInfoService.getUserByPhone(phone); if(userList.size() == 1) { - // 唯一用户,直接登录即可 MallUserInfoVo user = userList.get(0); + // check 验证码正确 try { - Subject subject = SecurityUtils.getSubject(); - UseriFormallToken token = new UseriFormallToken(user.getUsername()); - subject.login(token); - MallUserInfo info = (MallUserInfo) SecurityUtils.getSubject().getSession().getAttribute(UserSession.userInfo); - info.setPassword("保密"); - if(StringUtils.isNotBlank(info.getBopenId())) - info.setBopenId("保密"); - if(StringUtils.isNotBlank(info.getWebOpenId())) { - info.setWebOpenId("保密"); - info.setWithWechat(true); + boolean isValidCode = mallUserInfoService.checkCodeValid(user, code); + if(isValidCode) { + // 验证码正确,直接登录 + try { + Subject subject = SecurityUtils.getSubject(); + UseriFormallToken token = new UseriFormallToken(user.getUsername()); + subject.login(token); + MallUserInfo info = (MallUserInfo) SecurityUtils.getSubject().getSession().getAttribute(UserSession.userInfo); + info.setPassword("保密"); + if(StringUtils.isNotBlank(info.getBopenId())) + info.setBopenId("保密"); + if(StringUtils.isNotBlank(info.getWebOpenId())) { + info.setWebOpenId("保密"); + info.setWithWechat(true); + } else { + info.setWithWechat(false); + } + String menus = mallUserRoleService.getPermissionsByUser(info); + if(menus != null) { + info.setMenus(menus); + } + return new ResultData(info); + } catch (Exception e) { + return new ResultData(ResultData.ERROR, "用户名或者密码错误"); + } } else { - info.setWithWechat(false); - } - String menus = mallUserRoleService.getPermissionsByUser(info); - if(menus != null) { - info.setMenus(menus); + return new ResultData(ErrorCode.MSG_VERIFY_CODE_NOT_FOUND); } - return new ResultData(info); } catch (Exception e) { - return new ResultData(ResultData.ERROR, "用户名或者密码错误"); + return new ResultData(Result.ERROR, e.getMessage()); } } else { - // TODO 多个租户,前端界面做选择 - return new ResultData(); - } - } - - @ApiOperation(value = "手机验证码租户登录", notes = "{\"tenantId\",\"string\", \"phone\",\"string\",\"code\",\"string\"}") - @PostMapping("/doLoginByTenantPhone") - public ResultData doLoginByTenantPhone(@RequestBody Map params) { - logger.debug("[" + getIpAddr() + "] HomeController::doLoginByTenantPhone"); - String tenantId = params.get("tenantId"); - String phone = params.get("phone"); - String code = params.get("code"); - - if (StringUtils.isBlank(tenantId)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "tenantId不能为空"); - } - if (StringUtils.isBlank(phone)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "phone不能为空"); - } - if (StringUtils.isBlank(code)) { - return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "验证码不能为空"); - } - - MallUserInfo user = mallUserInfoService.getByPhone(phone, tenantId); - if(user == null) { return new ResultData(ErrorCode.USER_IS_EMPTY); } - - // check 验证码正确 - ResultData r = null; - try { - r = mallUserInfoService.checkCodeValid(user, code); - if(r.code != Result.SUCCESS) { - return r; - } - } catch (Exception e) { - return new ResultData(Result.ERROR, e.getMessage()); - } - - try { - Subject subject = SecurityUtils.getSubject(); - UseriFormallToken token = new UseriFormallToken(user.getUsername()); - subject.login(token); - MallUserInfo info = (MallUserInfo) SecurityUtils.getSubject().getSession().getAttribute(UserSession.userInfo); - info.setPassword("保密"); - if(StringUtils.isNotBlank(info.getBopenId())) - info.setBopenId("保密"); - if(StringUtils.isNotBlank(info.getWebOpenId())) { - info.setWebOpenId("保密"); - info.setWithWechat(true); - } else { - info.setWithWechat(false); - } - String menus = mallUserRoleService.getPermissionsByUser(info); - if(menus != null) { - info.setMenus(menus); - } - return new ResultData(info); - } catch (Exception e) { - return new ResultData(ResultData.ERROR, "用户名或者密码错误"); - } } @ApiOperation("登出") diff --git a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java index e981ca7e3..440bcde91 100644 --- a/mallinkService/src/main/java/com/iformall/common/ErrorCode.java +++ b/mallinkService/src/main/java/com/iformall/common/ErrorCode.java @@ -59,6 +59,7 @@ public enum ErrorCode{ /** * 用户2000-2099 */ + USER_IS_MULTI(1988, "有多个手机号,请联系富茂管理员"), USER_IS_NOT_MEMBER(1989,"用户还未授权手机号成为会员"), USER_PHONE_IS_NOT_FOUND(1990,"手机号不存在"), USER_DEL_SELF(1991,"用户删除自己"), diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumMsgModel.java b/mallinkService/src/main/java/com/iformall/enums/EnumMsgModel.java index 4c955d020..27dadc8b4 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumMsgModel.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumMsgModel.java @@ -11,7 +11,7 @@ public enum EnumMsgModel { FLOW_APPLY_NODIFY(3, "审批通知"), FLOW_PASS_NODIFY(4, "通过审批通知"), FLOW_REJECT_NODIFY(5, "驳回通知"), - VALIDATION_CODE(6, "B端验证码"), + VALIDATION_CODE(6, "验证码"), BILL_WAIT_PAY(7, "账单待缴通知"), BILL_OWE(8, "账单欠缴通知") ; diff --git a/mallinkService/src/main/java/com/iformall/service/MallUserInfoService.java b/mallinkService/src/main/java/com/iformall/service/MallUserInfoService.java index 5debde46c..577ff348f 100644 --- a/mallinkService/src/main/java/com/iformall/service/MallUserInfoService.java +++ b/mallinkService/src/main/java/com/iformall/service/MallUserInfoService.java @@ -82,7 +82,7 @@ public interface MallUserInfoService { ResultData updatepwd(MallUserInfo user, String code); - ResultData checkCodeValid(MallUserInfo user, String code); + boolean checkCodeValid(MallUserInfo user, String code); /** * 根据phone获得实体 diff --git a/mallinkService/src/main/java/com/iformall/service/impl/MallUserInfoServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/MallUserInfoServiceImpl.java index 54e946180..804457c6a 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/MallUserInfoServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/MallUserInfoServiceImpl.java @@ -15,6 +15,7 @@ import com.iformall.mapper.MallUserInfoMapper; import com.iformall.mapper.MallUserRoleMapper; import com.iformall.mapper.WxMsgValidationcodeMapper; import com.iformall.service.MallUserInfoService; +import net.sf.saxon.trans.Err; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -176,15 +177,7 @@ public class MallUserInfoServiceImpl implements MallUserInfoService { @Override public ResultData updatepwd(MallUserInfo user, String code) { - WxMsgValidationcode wxMsgValidationcode = new WxMsgValidationcode(); - wxMsgValidationcode.setTenantId(user.getTenantId()); - wxMsgValidationcode.setPhone(user.getPhone()); - wxMsgValidationcode.setCode(code); - List wxmsgvalidationcodelist = wxMsgValidationcodeMapper.findList(wxMsgValidationcode); - Date currentdate = new Date(); - wxmsgvalidationcodelist = wxmsgvalidationcodelist.stream().filter(validationcode -> - validationcode.getExpiretime().after(currentdate)).collect(Collectors.toList()); - if (wxmsgvalidationcodelist.size() > 0) { + if(checkCodeValid(user, code)) { try { mallUserInfoMapper.updateByPrimaryKey(user); } catch (Exception e) { @@ -192,20 +185,15 @@ public class MallUserInfoServiceImpl implements MallUserInfoService { throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "DB FAILD " + e.getMessage()); } } else { - return new ResultData(Result.ERROR,"验证码不存在或过期",false); + return new ResultData(ErrorCode.MSG_VERIFY_CODE_NOT_FOUND, false); } return new ResultData(); } @Override - public ResultData checkCodeValid(MallUserInfo user, String code) { + public boolean checkCodeValid(MallUserInfo user, String code) { WxMsgValidationcode wxMsgValidationcode = new WxMsgValidationcode(); - if(StringUtils.isNotBlank(user.getTenantId())) { - wxMsgValidationcode.setTenantId(user.getTenantId()); - } else { - // 如果为空, 启用富茂(标准) - wxMsgValidationcode.setTenantId("1"); - } + wxMsgValidationcode.setTenantId(user.getTenantId()); wxMsgValidationcode.setPhone(user.getPhone()); wxMsgValidationcode.setCode(code); List wxmsgvalidationcodelist = wxMsgValidationcodeMapper.findList(wxMsgValidationcode); @@ -213,9 +201,9 @@ public class MallUserInfoServiceImpl implements MallUserInfoService { wxmsgvalidationcodelist = wxmsgvalidationcodelist.stream().filter(validationcode -> validationcode.getExpiretime().after(currentdate)).collect(Collectors.toList()); if (wxmsgvalidationcodelist.size() > 0) { - return new ResultData(); + return true; } else { - return new ResultData(Result.ERROR,"验证码不存在或过期",false); + return false; } }