diff --git a/suimangAdmin/src/main/resources/db/migration/V202305230001__wx_c_user_basic_info.sql b/suimangAdmin/src/main/resources/db/migration/V202305230001__wx_c_user_basic_info.sql new file mode 100644 index 0000000..aa628e0 --- /dev/null +++ b/suimangAdmin/src/main/resources/db/migration/V202305230001__wx_c_user_basic_info.sql @@ -0,0 +1,7 @@ +ALTER TABLE `wx_c_user_basic_info` +ADD UNIQUE INDEX `email_UNIQUE`(`email`) USING BTREE; + + +ALTER TABLE `wx_c_user_basic_info` +MODIFY COLUMN `phone` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '微信用户绑定的手机号' AFTER `final_tenant_id`, +MODIFY COLUMN `email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '邮箱' AFTER `id_card`; \ No newline at end of file diff --git a/suimangCApi/src/main/java/com/iformall/controller/WxUserGrantController.java b/suimangCApi/src/main/java/com/iformall/controller/WxUserGrantController.java index cfa2904..4617921 100644 --- a/suimangCApi/src/main/java/com/iformall/controller/WxUserGrantController.java +++ b/suimangCApi/src/main/java/com/iformall/controller/WxUserGrantController.java @@ -118,10 +118,10 @@ public class WxUserGrantController extends BaseController { */ @AuthIgnore @PostMapping("/login") - @ApiOperation(value = "用户登录", notes = "{\"appId\":\"string\",\"code\":\"string\",\"scene\":\"string\",\"sceneAddress\":\"string\",\"latitude\":\"string\",\"longitude\":\"string\",\"systemInfo\":\"string\"}") - public ResultData userLogin(@RequestBody Map map) { + @ApiOperation(value = "用户登录", notes = "{\"phone\":\"string\",\"password\":\"string\",\"code\":\"string\"}") + public ResultData loginByPhone(@RequestBody Map map) { String ipAddr = getIpAddr(); - logger.debug("[" + ipAddr + "] WxUserGrantController::doLogin"); + logger.debug("[" + ipAddr + "] WxUserGrantController::loginByPhone"); String code = map.get("code"); if(StringUtils.isBlank(code)){ return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "请输入验证码"); @@ -147,14 +147,60 @@ public class WxUserGrantController extends BaseController { return new ResultData(ErrorCode.USER_IS_EMPTY); } - String encryptPassword = new PasswordHelper().encryptPassword(phone, password); + String encryptPassword = new PasswordHelper().encryptPassword(password); if(!encryptPassword.equals(basicInfo.getPassword())){ return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "手机号或密码错误"); } wxCUserBasicInfoService.handleLoginUser(basicInfo); Map resultMap = new HashMap(); - resultMap.put("phone", basicInfo.getPhone()); +// resultMap.put("phone", basicInfo.getPhone()); + resultMap.put("token", basicInfo.getToken()); + return new ResultData(resultMap); + } + + @AuthIgnore + @PostMapping("/loginByEmail") + @ApiOperation(value = "用户登录", notes = "{\"email\":\"string\",\"password\":\"string\",\"code\":\"string\"}") + public ResultData loginByEmail(@RequestBody Map map) { + String ipAddr = getIpAddr(); + logger.debug("[" + ipAddr + "] WxUserGrantController::loginByEmail"); + String code = map.get("code"); + if(StringUtils.isBlank(code)){ + return new ResultData(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(), "请输入验证码"); + } + + String key = Constant.captchaPrev + ":" + ipAddr; + String code1 = RedisCacheUtils.getCacheString(redisTemplate, key); + if(StringUtils.isBlank(code1)){ + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "验证码已过期"); + } + if(!code1.equals(code)){ + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "验证码不正确"); + } + + String email = map.get("email"); + String password = map.get("password"); + if(StringUtils.isBlank(email) || StringUtils.isBlank(password)){ + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "邮箱或密码为空"); + } + + WxCUserBasicInfo basicInfo = wxCUserBasicInfoService.findInfoByEmail(getTenantInfo(), email); + if(basicInfo == null){ + return new ResultData(ErrorCode.USER_IS_EMPTY); + } + if(EnumCUserBasicInfoStatus.NOT_ACTIVE.getCode().equals(basicInfo.getStatus())){ + return new ResultData(ErrorCode.MEMBER_IS_LOCKED.getCode(),"该用户未激活"); + } + + String encryptPassword = new PasswordHelper().encryptPassword(password); + + if(!encryptPassword.equals(basicInfo.getPassword())){ + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "邮箱或密码错误"); + } + wxCUserBasicInfoService.handleLoginUser(basicInfo); + Map resultMap = new HashMap(); +// resultMap.put("phone", basicInfo.getPhone()); resultMap.put("token", basicInfo.getToken()); return new ResultData(resultMap); } @@ -328,7 +374,7 @@ public class WxUserGrantController extends BaseController { return new ResultData(Result.ERROR, e.getMessage()); } if(isValidCode) { - String encryptPassword = new PasswordHelper().encryptPassword(phone, pwd); + String encryptPassword = new PasswordHelper().encryptPassword(pwd); WxCUserBasicInfo basicInfoUpd = new WxCUserBasicInfo(); basicInfoUpd.setId(basicInfo.getId()); basicInfoUpd.setPassword(encryptPassword); diff --git a/suimangService/src/main/java/com/iformall/enums/EnumCUserBasicInfoStatus.java b/suimangService/src/main/java/com/iformall/enums/EnumCUserBasicInfoStatus.java index 4058731..162b4e9 100644 --- a/suimangService/src/main/java/com/iformall/enums/EnumCUserBasicInfoStatus.java +++ b/suimangService/src/main/java/com/iformall/enums/EnumCUserBasicInfoStatus.java @@ -6,7 +6,8 @@ package com.iformall.enums; public enum EnumCUserBasicInfoStatus { NORMAL(0, "正常"), - LOCKED(1, "锁定"),; + LOCKED(1, "锁定"), + NOT_ACTIVE(2, "未激活"),; public static EnumCUserBasicInfoStatus getEnum(Integer code) { for (EnumCUserBasicInfoStatus value : values()) { diff --git a/suimangService/src/main/java/com/iformall/service/WxCUserBasicInfoService.java b/suimangService/src/main/java/com/iformall/service/WxCUserBasicInfoService.java index 189849c..790e338 100644 --- a/suimangService/src/main/java/com/iformall/service/WxCUserBasicInfoService.java +++ b/suimangService/src/main/java/com/iformall/service/WxCUserBasicInfoService.java @@ -93,6 +93,8 @@ public interface WxCUserBasicInfoService { List findByPhone(TenantEntity tenantEntity, String phone); WxCUserBasicInfo findInfoByPhone(TenantEntity tenantEntity, String phone); + WxCUserBasicInfo findInfoByEmail(TenantEntity tenantInfo, String email); + /** * 修改会员积分 * diff --git a/suimangService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java b/suimangService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java index f364527..58811c2 100644 --- a/suimangService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java +++ b/suimangService/src/main/java/com/iformall/service/impl/WxCUserBasicInfoServiceImpl.java @@ -674,13 +674,20 @@ public class WxCUserBasicInfoServiceImpl implements WxCUserBasicInfoService,IExc @Override public WxCUserBasicInfo findInfoByPhone(TenantEntity tenantEntity, String phone) { - WxCUserBasicInfo basic = null; WxCUserBasicInfo basicQ = new WxCUserBasicInfo(); basicQ.setFinalTenantId(tenantEntity.getFinalTenantId()); basicQ.setPhone(phone); - basic = wxCUserBasicInfoMapper.selectOne(new QueryWrapper(basicQ)); - return basic; + return wxCUserBasicInfoMapper.selectOne(new QueryWrapper(basicQ)); + } + + @Override + public WxCUserBasicInfo findInfoByEmail(TenantEntity tenantInfo, String email) { + WxCUserBasicInfo basicQ = new WxCUserBasicInfo(); + basicQ.setFinalTenantId(tenantInfo.getFinalTenantId()); + basicQ.setEmail(email); + + return wxCUserBasicInfoMapper.selectOne(new QueryWrapper(basicQ)); } @Override @@ -844,7 +851,7 @@ public class WxCUserBasicInfoServiceImpl implements WxCUserBasicInfoService,IExc basicInfo.setFinalTenantId(tenantEntity.getFinalTenantId()); basicInfo.setPhone(phone); if(StringUtils.isNotBlank(pwd)){ - String encryptPassword = new PasswordHelper().encryptPassword(phone, pwd); + String encryptPassword = new PasswordHelper().encryptPassword(pwd); basicInfo.setPassword(encryptPassword); } this.save(basicInfo); diff --git a/suimangService/src/main/java/com/iformall/utils/PasswordHelper.java b/suimangService/src/main/java/com/iformall/utils/PasswordHelper.java index 48cb430..df85fb9 100644 --- a/suimangService/src/main/java/com/iformall/utils/PasswordHelper.java +++ b/suimangService/src/main/java/com/iformall/utils/PasswordHelper.java @@ -23,6 +23,10 @@ public class PasswordHelper { return new SimpleHash(algorithmName, password, ByteSource.Util.bytes(userName), hashIterations).toHex(); } + public String encryptPassword(String password) { + return new SimpleHash(algorithmName, password, hashIterations).toHex(); + } + public static void main(String[] args) {