huangzhiguo пре 2 година
родитељ
комит
524bc6c794

+ 34 - 0
src/main/java/com/caimei365/user/controller/LoginApi.java

@@ -50,6 +50,25 @@ public class LoginApi {
         return loginService.passwordLogin(loginPasswordDto);
     }
 
+    /**
+     * 登录(用户名,密码) -- 组织
+     * <p>
+     * spi旧接口:/user/login
+     *
+     * @param loginPasswordDto {
+     *                         mobileOrEmail 手机号或邮箱
+     *                         password      密码
+     *                         unionId       微信unionId
+     *                         }
+     * @return UserLoginVo
+     */
+    @ApiOperation("登录(用户名,密码)")
+    @IpSave(saveName = "用户登录", saveParams = true)
+    @PostMapping("/passwordOrganizeLogin")
+    public ResponseJson<UserLoginVo> passwordOrganizeLogin(LoginPasswordDto loginPasswordDto) throws ParseException {
+        return loginService.passwordOrganizeLogin(loginPasswordDto);
+    }
+
     /**
      * 登录(手机号,验证码)
      * @param loginCodeDto {
@@ -65,6 +84,21 @@ public class LoginApi {
     public ResponseJson<UserLoginVo> codeLogin(LoginCodeDto loginCodeDto) throws ParseException {
         return loginService.codeLogin(loginCodeDto);
     }
+    /**
+     * 登录(手机号,验证码)--组织
+     * @param loginCodeDto {
+     *                      mobile   手机号
+     *                      code     短信验证码
+     *                      unionId  微信unionId
+     *                     }
+     * @return UserLoginVo
+     * @throws ParseException
+     */
+    @ApiOperation("登录(手机号,验证码)")
+    @PostMapping("/codeOrganizeLogin")
+    public ResponseJson<UserLoginVo> codeOrganizeLogin(LoginCodeDto loginCodeDto) throws ParseException {
+        return loginService.codeOrganizeLogin(loginCodeDto);
+    }
 
     /**
      * 协销登录(手机号,密码)

+ 8 - 0
src/main/java/com/caimei365/user/mapper/LoginMapper.java

@@ -33,6 +33,14 @@ public interface LoginMapper {
      */
     UserLoginVo getLoginUserByMobileOrEmail(@Param("mobileOrEmail") String mobileOrEmail);
 
+    /**
+     * 根据手机号或邮箱获取用户
+     *
+     * @param mobileOrEmail 手机号/邮箱
+     * @return BaseUser
+     */
+    UserLoginVo getLoginOrganizeUserByMobileOrEmail(@Param("mobileOrEmail") String mobileOrEmail);
+
     /**
      * 是否绑定微信
      * @param mobileOrEmail

+ 22 - 0
src/main/java/com/caimei365/user/service/LoginService.java

@@ -34,6 +34,17 @@ public interface LoginService {
      * @return BaseUser
      */
     ResponseJson<UserLoginVo> passwordLogin(LoginPasswordDto loginPasswordDto) throws ParseException;
+    /**
+     * 登录(用户名,密码)
+     *
+     * @param loginPasswordDto {
+     *                           mobileOrEmail 手机号或邮箱
+     *                           password      密码
+     *                           unionId       微信unionId
+     *                         }
+     * @return BaseUser
+     */
+    ResponseJson<UserLoginVo> passwordOrganizeLogin(LoginPasswordDto loginPasswordDto) throws ParseException;
 
     /**
      *
@@ -45,6 +56,17 @@ public interface LoginService {
      * @throws ParseException
      */
     ResponseJson<UserLoginVo> codeLogin(LoginCodeDto loginCodeDto) throws ParseException;
+
+    /**
+     *
+     * @param loginCodeDto {
+     *                          mobile   手机号
+     *                          code     短信验证码
+     *                     }
+     * @return
+     * @throws ParseException
+     */
+    ResponseJson<UserLoginVo> codeOrganizeLogin(LoginCodeDto loginCodeDto) throws ParseException;
     /**
      * 微信授权登录(小程序)
      *

+ 4 - 4
src/main/java/com/caimei365/user/service/impl/BaseServiceImpl.java

@@ -194,7 +194,7 @@ public class BaseServiceImpl implements BaseService {
             // 联合丽格
             if (11 == activateCodeType){
                 // 您正在更改手机号,验证码为:{s6},5分钟内有效,请勿泄漏他人。
-                content = "您正在更改手机号,验证码为:" + randomCode + ",5分钟内有效,请勿泄漏他人。";
+                content = "【丽格集采联盟】您正在更改手机号,验证码为:" + randomCode + ",5分钟内有效,请勿泄漏他人。";
             }
             sendFlag = isBeta || remoteCallService.remoteSendSms(0, 1, mobile, content);
             codeTypeTxt = "更换联系人(新手机号验证码)";
@@ -230,7 +230,7 @@ public class BaseServiceImpl implements BaseService {
                     return ResponseJson.error("该手机号暂未注册");
                 }
                 // 欢迎登录联合丽格,您的验证码为:{s6},5分钟内有效,请勿泄漏他人。
-                content = "欢迎登录联合丽格,您的验证码为:" + randomCode + ",5分钟内有效,请勿泄漏他人。";
+                content = "【丽格集采联盟】欢迎登录联合丽格,您的验证码为:" + randomCode + ",5分钟内有效,请勿泄漏他人。";
                 codeTypeTxt = "登录联合丽格";
             } else {
                 return ResponseJson.error("参数错误:activateCodeType");
@@ -255,7 +255,7 @@ public class BaseServiceImpl implements BaseService {
                 return ResponseJson.error("该手机号已注册");
             }
             // 您的验证码为:{s6},5分钟内有效,请勿泄漏他人。
-            String content = "您的验证码为:" + randomCode + ",5分钟内有效,请勿泄漏他人。";
+            String content = "【丽格集采联盟】您的验证码为:" + randomCode + ",5分钟内有效,请勿泄漏他人。";
             sendFlag = isBeta || remoteCallService.remoteSendSms(0,1,mobile,content);
             if (!sendFlag) {
                 // 短信发送失败重试一次
@@ -269,7 +269,7 @@ public class BaseServiceImpl implements BaseService {
                 return ResponseJson.error("该手机号暂未注册");
             }
             // 您正在修改密码,验证码为:{s6},5分钟内有效,请勿泄漏他人。
-            String content = "您正在修改密码,验证码为:" + randomCode + ",5分钟内有效,请勿泄漏他人。";
+            String content = "【丽格集采联盟】您正在修改密码,验证码为:" + randomCode + ",5分钟内有效,请勿泄漏他人。";
             sendFlag = isBeta || remoteCallService.remoteSendSms(0,1,mobile,content);
             if (!sendFlag) {
                 // 短信发送失败重试一次

+ 139 - 0
src/main/java/com/caimei365/user/service/impl/LoginServiceImpl.java

@@ -99,6 +99,88 @@ public class LoginServiceImpl implements LoginService {
         }
         //处理比对密码
         UserLoginVo baseUser = loginMapper.getLoginUserByMobileOrEmail(mobileOrEmail);
+        if (null != baseUser) {
+            String key = "login-" + baseUser.getUserId();
+            boolean exists = redisService.exists(key);
+            //如果30分钟内输入错误记录>=5,return该账号暂时被冻结,请(30-最前一次时间)分钟后重试或直接修改密码
+            if (exists) {
+                String val = (String) redisService.get(key);
+                String[] split = val.split(",");
+                int count = Integer.parseInt(split[0]);
+                if (count >= 5) {
+                    long s = Long.parseLong(split[1]);
+                    int l = (int) Math.floor((System.currentTimeMillis() - s) / 1000 / 60);
+                    return ResponseJson.error("该账号暂时被冻结,请" + (30 - l) + "分钟后重试或直接修改密码", null);
+                }
+            }
+            // 如果前端传入unionId,则存入返回前端
+            baseUser.setUnionId(unionId);
+            // 不是采美组织下
+            if (0 != baseUser.getOrganizeId()) {
+                if (1 == baseUser.getClubStatus()) {
+                    return ResponseJson.error(-1, "账号待审核,请耐心等待审核结果", null);
+                }
+                if (92 == baseUser.getClubStatus()) {
+                    return ResponseJson.error(-1, "账号审核未通过,请重新提交资料", null);
+                }
+            }
+            // 比对密码
+            String md5Password = Md5Util.md5(password);
+            String dbPassword = baseUser.getPassword();
+            if (md5Password.equals(dbPassword)) {
+                if (baseUser.getUserIdentity() == 1) {
+                    // 协销登录
+                    return ResponseJson.success(baseUser);
+                } else {
+                    // 返回登录校验结果
+                    return logonVerify(baseUser);
+                }
+            } else {
+                // 增加一次错误输入密码记录,30分钟内连续五次冻结
+                if (exists) {
+                    String val = (String) redisService.get(key);
+                    String[] split = val.split(",");
+                    int count = Integer.parseInt(split[0]);
+                    if (count < 5) {
+                        count++;
+                        String va = count + "," + System.currentTimeMillis();
+                        redisService.set(key, va);
+                    }
+                    if (count >= 5) {
+                        redisService.set(key, 5 + "," + System.currentTimeMillis(), 1800L);
+                    }
+                } else {
+                    String val = 1 + "," + System.currentTimeMillis();
+                    redisService.set(key, val);
+                }
+            }
+        }
+        return ResponseJson.error("账户名与密码不匹配,请重新输入", null);
+    }
+
+    /**
+     * 登录(用户名,密码)
+     *
+     * @param loginPasswordDto {
+     *                         mobileOrEmail 手机号或邮箱
+     *                         password      密码
+     *                         unionId       微信unionId
+     *                         }
+     * @return BaseUser
+     */
+    @Override
+    public ResponseJson<UserLoginVo> passwordOrganizeLogin(LoginPasswordDto loginPasswordDto) throws ParseException {
+        String mobileOrEmail = loginPasswordDto.getMobileOrEmail();
+        String password = loginPasswordDto.getPassword();
+        String unionId = loginPasswordDto.getUnionId();
+        if (StringUtils.isBlank(mobileOrEmail)) {
+            return ResponseJson.error("请填写账户名", null);
+        }
+        if (StringUtils.isBlank(password)) {
+            return ResponseJson.error("请填写密码", null);
+        }
+        //处理比对密码
+        UserLoginVo baseUser = loginMapper.getLoginOrganizeUserByMobileOrEmail(mobileOrEmail);
         if (null != baseUser) {
             // 绑定微信信息
             Integer operationUser = loginMapper.getOperationUser(mobileOrEmail);
@@ -216,6 +298,63 @@ public class LoginServiceImpl implements LoginService {
                     redisService.remove("code:" + mobile);
                     // 根据手机号获取用户信息
                     UserLoginVo baseUser = loginMapper.getLoginUserByMobileOrEmail(mobile);
+                    if (baseUser.getUserIdentity() == 1) {
+                        // 协销登录
+                        return ResponseJson.success(baseUser);
+                    } else {
+                        // 返回登录校验结果
+                        return logonVerify(baseUser);
+                    }
+                } else {
+                    return ResponseJson.error("验证码不匹配,请重新输入");
+                }
+            } else {
+                return ResponseJson.error("验证码错误,请重新获取");
+            }
+        } else {
+            return ResponseJson.error("验证码错误,请重新获取");
+        }
+    }
+
+    /**
+     * @param loginCodeDto {
+     *                      mobile   手机号
+     *                      code     短信验证码
+     *                     }
+     * @return
+     * @throws ParseException
+     */
+    @Override
+    public ResponseJson<UserLoginVo> codeOrganizeLogin(LoginCodeDto loginCodeDto) throws ParseException {
+        if (ObjectUtils.isEmpty(loginCodeDto.getMobile())) {
+            return ResponseJson.error("请填写手机号",null);
+        }
+        if (ObjectUtils.isEmpty(loginCodeDto.getCode())) {
+            return ResponseJson.error("请输入短信验证码",null);
+        }
+        String mobile = loginCodeDto.getMobile();
+        String code = loginCodeDto.getCode();
+        String unionId = loginCodeDto.getUnionId();
+        String result = ValidateUtil.validateMobile(mobile);
+        if (result != null) {
+            return ResponseJson.error(result);
+        }
+        // 判断redis中是否存在
+        boolean exists = redisService.exists("code:" + mobile);
+        if (exists) {
+            // 查看验证码是否过期
+            long expireTime = redisService.getExpireTime("code:" + mobile);
+            if (expireTime < 0) {
+                return ResponseJson.error("验证码已失效,请重新获取");
+            }
+            // 获取redis手机短信验证码
+            Object randomCode = redisService.get("code:"+mobile);
+
+            if (!ObjectUtils.isEmpty(randomCode)) {
+                if (code.equals(randomCode.toString())) {
+                    redisService.remove("code:" + mobile);
+                    // 根据手机号获取用户信息
+                    UserLoginVo baseUser = loginMapper.getLoginOrganizeUserByMobileOrEmail(mobile);
                     // 绑定微信信息
                     Integer operationUser = loginMapper.getOperationUser(mobile);
                     log.info("operationUser==="+operationUser);

+ 1 - 1
src/main/java/com/caimei365/user/service/impl/RegisterServiceImpl.java

@@ -191,7 +191,7 @@ public class RegisterServiceImpl implements RegisterService {
         // 用户类型,供应商1,会员机构3,普通机构4
         user.setRegisterUserTypeId(4);
         // 采美默认组织机构0
-        user.setOrganizeId(clubRegisterDto.getOrganizeId());
+        user.setOrganizeId(0);
         // 用户名
         user.setName(clubRegisterDto.getUserName());
         user.setUserName(clubRegisterDto.getUserName());

+ 56 - 2
src/main/resources/mapper/LoginMapper.xml

@@ -49,7 +49,7 @@
         left join cm_mall_operation_user cu on cu.userID = u.userID
         where (u.bindMobile = #{mobileOrEmail} or u.email = #{mobileOrEmail})
             and u.userIdentity in (1, 2, 3, 4)
-            # and u.userOrganizeID = 0
+            and u.userOrganizeID = 0
         union
         SELECT u.userID             AS userId,
                u.userOrganizeID     as organizeId,
@@ -76,7 +76,61 @@
             cu.mobile = #{mobileOrEmail}
           and cu.delFlag != 1
           AND u.userIdentity IN (1, 2, 3, 4)
-          # AND u.userOrganizeID = 0
+          AND u.userOrganizeID = 0
+        limit 1
+    </select>
+    <select id="getLoginOrganizeUserByMobileOrEmail" resultType="com.caimei365.user.model.vo.UserLoginVo">
+        select u.userID             as userId,
+               u.userOrganizeID     as organizeId,
+               u.clubID             as clubId,
+               u.shopID             as shopId,
+               u.serviceProviderId  as serviceProviderId,
+               u.userName           as userName,
+               u.name               as name,
+               u.mobile             as mobile,
+               u.bindMobile         as bindMobile,
+               u.email              as email,
+               u.userPermission     as userPermission,
+               u.userIdentity       as userIdentity,
+               u.password           as password,
+               u.guideFlag          as guideFlag,
+               u.clubStatus         as clubStatus,
+               u.manufacturerStatus as shopStatus,
+               cu.id                as operationId,
+               cu.status            as operationStatus,
+               cu.mobile            as operationMobile
+        from user u
+                 left join cm_mall_operation_user cu on cu.userID = u.userID
+        where (u.bindMobile = #{mobileOrEmail} or u.email = #{mobileOrEmail})
+          and u.userIdentity in (1, 2, 3, 4)
+          and u.userOrganizeID = 4
+        union
+        SELECT u.userID             AS userId,
+               u.userOrganizeID     as organizeId,
+               u.clubID             AS clubId,
+               u.shopID             AS shopId,
+               u.serviceProviderId  AS serviceProviderId,
+               u.userName           AS userName,
+               u.name               AS NAME,
+               u.mobile             AS mobile,
+               u.bindMobile         AS bindMobile,
+               u.email              AS email,
+               u.userPermission     AS userPermission,
+               u.userIdentity       AS userIdentity,
+               u.password           AS PASSWORD,
+               u.guideFlag          AS guideFlag,
+               u.clubStatus         AS clubStatus,
+               u.manufacturerStatus AS shopStatus,
+               cu.id                AS operationId,
+               cu.status            AS operationStatus,
+               cu.mobile            AS operationMobile
+        FROM USER u
+                 LEFT JOIN cm_mall_operation_user cu ON cu.userID = u.userID
+        WHERE
+            cu.mobile = #{mobileOrEmail}
+          and cu.delFlag != 1
+          AND u.userIdentity IN (1, 2, 3, 4)
+          AND u.userOrganizeID = 4
         limit 1
     </select>
     <select id="getOperationUser" resultType="java.lang.Integer">