Sfoglia il codice sorgente

运营人员绑定微信逻辑优化

chao 4 anni fa
parent
commit
6b84675b2d

+ 91 - 0
src/main/java/com/caimei365/user/components/CommonService.java

@@ -0,0 +1,91 @@
+package com.caimei365.user.components;
+
+import com.caimei365.user.mapper.BaseMapper;
+import com.caimei365.user.mapper.LoginMapper;
+import com.caimei365.user.model.ResponseJson;
+import com.caimei365.user.model.vo.UserLoginVo;
+import com.caimei365.user.utils.ValidateUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2021/3/26
+ */
+@Slf4j
+@Service
+public class CommonService {
+    @Resource
+    private RedisService redisService;
+    @Resource
+    private BaseMapper baseMapper;
+    @Resource
+    private LoginMapper loginMapper;
+    /**
+     * 校验邮箱
+     * @param email 邮箱
+     * @return errorMsg
+     */
+    public String emailValidate(String email) {
+        if (!ValidateUtil.validateEmail(email)) {
+            return  "邮箱格式不正确";
+        }
+        Integer userIdByEmail = baseMapper.getUserIdByEmail(email);
+        if (null != userIdByEmail && userIdByEmail > 0 ) {
+            return "该邮箱已被使用";
+        }
+        return null;
+    }
+    /**
+     * 校验手机号与验证码
+     * @param mobile 手机号
+     * @param smsCode 验证码
+     * @return errorMsg
+     */
+    public String mobileAndCodeValidate(String mobile, String smsCode) {
+        ResponseJson model = ValidateUtil.validateMobile(mobile);
+        if (model.getCode() == -1) {
+            return model.getMsg();
+        }
+        if (StringUtils.isNotBlank(smsCode)){
+            String redisSmsCode = (String) redisService.get("code:" + mobile);
+            if (!redisSmsCode.equals(smsCode)) {
+                return "手机验证码错误";
+            }
+        }
+        boolean flag = false;
+        // 查找用户表是否存在
+        Integer dbUserId = baseMapper.getUserIdByMobile(mobile);
+        if (null != dbUserId && dbUserId > 0) {
+            UserLoginVo user = loginMapper.getLoginUserByUserId(dbUserId);
+            String showName = ValidateUtil.nameConversion(user.getUserName());
+            if (2 == user.getUserIdentity() || 4 == user.getUserIdentity()) {
+                return "该手机号已绑定机构(" + showName + ")联系人,请重新填写手机号";
+            } else if (3 == user.getUserIdentity()) {
+                return "该手机号已绑定供应商(" + showName + ")联系人,请重新填写手机号";
+            }
+            flag = true;
+        }
+        // 查找运营人员表是否存在
+        Integer dbOperationId = baseMapper.getOperationIdByMobile(mobile);
+        if (null != dbOperationId && dbOperationId > 0) {
+            UserLoginVo operation = loginMapper.getOperationUserByOperationId(dbOperationId);
+            String showName = ValidateUtil.nameConversion(operation.getUserName());
+            if (2 == operation.getUserIdentity() || 4 == operation.getUserIdentity()) {
+                return "该手机号已绑定机构(" + showName + ")运营人员,请重新填写手机号";
+            } else if (3 == operation.getUserIdentity()) {
+                return "该手机号已绑定供应商(" + showName + ")运营人员,请重新填写手机号";
+            }
+            flag = true;
+        }
+        if (flag) {
+            return "该手机号已被使用";
+        }
+        return null;
+    }
+}

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

@@ -28,6 +28,13 @@ public interface LoginMapper {
      * @return BaseUser
      */
     UserLoginVo getLoginUserByMobileOrEmail(@Param("mobileOrEmail") String mobileOrEmail);
+    /**
+     * 根据手机号获取用户
+     *
+     * @param mobile 手机号/邮箱
+     * @return BaseUser
+     */
+    UserLoginVo getLoginUserByMobile(@Param("mobile") String mobile);
     /**
      * 根据手机号获取运营人员
      *

+ 4 - 0
src/main/java/com/caimei365/user/model/dto/AuthBindDto.java

@@ -34,6 +34,10 @@ public class AuthBindDto implements Serializable {
     @NotNull
     @ApiModelProperty("手机验证码")
     private String smsCode;
+    /**
+     * 联系人
+     */
+    private String linkName;
     /**
      * 微信unionId
      */

+ 26 - 15
src/main/java/com/caimei365/user/service/impl/LoginServiceImpl.java

@@ -2,6 +2,7 @@ package com.caimei365.user.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.caimei365.user.components.CommonService;
 import com.caimei365.user.components.WeChatService;
 import com.caimei365.user.mapper.LoginMapper;
 import com.caimei365.user.mapper.RegisterMapper;
@@ -38,6 +39,8 @@ public class LoginServiceImpl implements LoginService {
     @Resource
     private WeChatService weChatService;
     @Resource
+    private CommonService commonService;
+    @Resource
     private LoginMapper loginMapper;
     @Resource
     private RegisterMapper registerMapper;
@@ -442,6 +445,7 @@ public class LoginServiceImpl implements LoginService {
         Integer userId = authBindDto.getUserId();
         String mobile = authBindDto.getMobile();
         String smsCode = authBindDto.getSmsCode();
+        String linkName = authBindDto.getLinkName();
         String unionId = authBindDto.getUnionId();
         String nickName = authBindDto.getNickName();
         String avatarUrl = authBindDto.getAvatarUrl();
@@ -453,20 +457,24 @@ public class LoginServiceImpl implements LoginService {
         if (!redisSmsCode.equals(smsCode)) {
             return ResponseJson.error("手机验证码错误", null);
         }
-        // 使用该手机号的运营人员
-        OperationPo operationByMobile = loginMapper.getOperationByMobile(mobile);
-        // 使用该手机号的运营人员或用户
-        UserLoginVo userByMobile = loginMapper.getLoginUserByMobileOrEmail(mobile);
-        // 判断手机号有没有成为运营人员或机构手机号
-        boolean b = userByMobile != null && !userId.equals(userByMobile.getUserId());
-        if (operationByMobile != null) {
-            userByMobile = loginMapper.getLoginUserByUserId(operationByMobile.getUserId());
-            boolean b2 = (null != userByMobile.getClubStatus() && 91 != userByMobile.getClubStatus()) || (null != userByMobile.getShopStatus() && 91 != userByMobile.getShopStatus());
-            if (b || b2) {
-                return ResponseJson.error("该手机号已被使用", null);
+        // 手机号验证
+        String result = commonService.mobileAndCodeValidate(mobile, null);
+        if (result != null) {
+            // 查询使用该手机号的运营人员或用户
+            UserLoginVo dbUser = loginMapper.getLoginUserByMobile(mobile);
+            boolean offlineClub = false;
+            boolean offlineShop = false;
+            if (null != dbUser){
+                // 已下线机构
+                offlineClub = null != dbUser.getClubStatus() && 91 == dbUser.getClubStatus();
+                // 已下线供应商
+                offlineShop = null != dbUser.getShopStatus() && 91 == dbUser.getShopStatus();
+            }
+            if (offlineClub || offlineShop) {
+                // 解绑已下线的运营人员
+                unbindOperation(dbUser.getOperationId());
             } else {
-                // 解绑运营人员
-                unbindOperation(operationByMobile);
+                return ResponseJson.error(result, null);
             }
         }
         Map<Object, Object> infoData = redisService.getEntries("wxInfo:applets:" + unionId);
@@ -487,6 +495,7 @@ public class LoginServiceImpl implements LoginService {
         operation.setUserId(userId);
         // 手机号
         operation.setMobile(mobile);
+        operation.setLinkName(linkName);
         // 微信昵称头像
         operation.setNickName(nickName);
         operation.setAvatarUrl(avatarUrl);
@@ -525,9 +534,11 @@ public class LoginServiceImpl implements LoginService {
     /**
      * 解绑运营人员
      *
-     * @param operation 运营人员
+     * @param operationId 运营人员Id
      */
-    private void unbindOperation(OperationPo operation) {
+    private void unbindOperation(Integer operationId) {
+        OperationPo operation = new OperationPo();
+        operation.setId(operationId);
         operation.setUnionId("");
         operation.setOpenId("");
         operation.setNickName("");

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

@@ -1,5 +1,6 @@
 package com.caimei365.user.service.impl;
 
+import com.caimei365.user.components.CommonService;
 import com.caimei365.user.mapper.BaseMapper;
 import com.caimei365.user.mapper.LoginMapper;
 import com.caimei365.user.mapper.RegisterMapper;
@@ -10,7 +11,6 @@ import com.caimei365.user.model.po.OperationPo;
 import com.caimei365.user.model.po.ShopPo;
 import com.caimei365.user.model.po.UserPo;
 import com.caimei365.user.model.vo.ServiceProviderVo;
-import com.caimei365.user.model.vo.UserLoginVo;
 import com.caimei365.user.service.RegisterService;
 import com.caimei365.user.components.RedisService;
 import com.caimei365.user.utils.AliyunSmsUtil;
@@ -35,11 +35,13 @@ import java.util.Map;
  */
 @Slf4j
 @Service
-public class RegisterServiceImpl implements RegisterService {
+public class RegisterServiceImpl implements RegisterService{
 
     @Resource
     private RedisService redisService;
     @Resource
+    private CommonService commonService;
+    @Resource
     private BaseMapper baseMapper;
     @Resource
     private LoginMapper loginMapper;
@@ -55,10 +57,10 @@ public class RegisterServiceImpl implements RegisterService {
     @Override
     public ResponseJson registerCheck(String mobileOrEmail) {
         // 手机号验证
-        String mobileResult = mobileAndCodeValidate(mobileOrEmail, null);
+        String mobileResult = commonService.mobileAndCodeValidate(mobileOrEmail, null);
         if (mobileResult != null) {return ResponseJson.error(mobileResult);}
         // 邮箱验证
-        String emailResult = emailValidate(mobileOrEmail);
+        String emailResult = commonService.emailValidate(mobileOrEmail);
         if (emailResult != null) {return ResponseJson.error(emailResult);}
         return ResponseJson.success("该账号可以注册");
     }
@@ -100,7 +102,7 @@ public class RegisterServiceImpl implements RegisterService {
             return ResponseJson.error("输入的密码不一致");
         }
         // 手机号与验证码校验
-        String result = mobileAndCodeValidate(clubRegisterDto.getBindMobile(), clubRegisterDto.getSmsCode());
+        String result = commonService.mobileAndCodeValidate(clubRegisterDto.getBindMobile(), clubRegisterDto.getSmsCode());
         if (result != null) {return ResponseJson.error(result);}
         /*
             组装用户数据 user
@@ -405,7 +407,7 @@ public class RegisterServiceImpl implements RegisterService {
         String email = onlineDto.getContractEmail();
         if (StringUtils.isNotBlank(email)) {
             // 邮箱验证
-            String emailCheck = emailValidate(email);
+            String emailCheck = commonService.emailValidate(email);
             if (emailCheck != null) {return ResponseJson.error(emailCheck);}
             // 机构名称检查
             ResponseJson responseJson = ValidateUtil.validateClubName(onlineDto.getName());
@@ -423,7 +425,7 @@ public class RegisterServiceImpl implements RegisterService {
             }
         }
         // 手机号验证
-        String result = mobileAndCodeValidate(mobile, null);
+        String result = commonService.mobileAndCodeValidate(mobile, null);
         if (result != null) {return ResponseJson.error(result);}
         // 获取协销信息
         Integer userId = onlineDto.getUserId();
@@ -623,7 +625,7 @@ public class RegisterServiceImpl implements RegisterService {
             return ResponseJson.error("两次输入的密码不一致");
         }
         // 手机号与验证码校验
-        String result = mobileAndCodeValidate(shopRegisterDto.getBindMobile(), smsCode);
+        String result = commonService.mobileAndCodeValidate(shopRegisterDto.getBindMobile(), smsCode);
         if (result != null) {return ResponseJson.error(result, null);}
         // 小程序第一步校验完成
         if (1 == whichStep) {
@@ -771,67 +773,5 @@ public class RegisterServiceImpl implements RegisterService {
 
     }
 
-    /**
-     * 校验邮箱
-     * @param email 邮箱
-     * @return errorMsg
-     */
-    private String emailValidate(String email) {
-        if (!ValidateUtil.validateEmail(email)) {
-            return  "邮箱格式不正确";
-        }
-        Integer userIdByEmail = baseMapper.getUserIdByEmail(email);
-        if (null != userIdByEmail && userIdByEmail > 0 ) {
-            return "该邮箱已被使用";
-        }
-        return null;
-    }
-    /**
-     * 校验手机号与验证码
-     * @param mobile 手机号
-     * @param smsCode 验证码
-     * @return errorMsg
-     */
-    private String mobileAndCodeValidate(String mobile, String smsCode) {
-        ResponseJson model = ValidateUtil.validateMobile(mobile);
-        if (model.getCode() == -1) {
-            return model.getMsg();
-        }
-        if (StringUtils.isNotBlank(smsCode)){
-            String redisSmsCode = (String) redisService.get("code:" + mobile);
-            if (!redisSmsCode.equals(smsCode)) {
-                return "手机验证码错误";
-            }
-        }
-        boolean flag = false;
-        // 查找用户表是否存在
-        Integer dbUserId = baseMapper.getUserIdByMobile(mobile);
-        if (null != dbUserId && dbUserId > 0) {
-            UserLoginVo user = loginMapper.getLoginUserByUserId(dbUserId);
-            String showName = ValidateUtil.nameConversion(user.getUserName());
-            if (2 == user.getUserIdentity() || 4 == user.getUserIdentity()) {
-                return "该手机号已绑定机构(" + showName + ")联系人,请重新填写手机号";
-            } else if (3 == user.getUserIdentity()) {
-                return "该手机号已绑定供应商(" + showName + ")联系人,请重新填写手机号";
-            }
-            flag = true;
-        }
-        // 查找运营人员表是否存在
-        Integer dbOperationId = baseMapper.getOperationIdByMobile(mobile);
-        if (null != dbOperationId && dbOperationId > 0) {
-            UserLoginVo operation = loginMapper.getOperationUserByOperationId(dbOperationId);
-            String showName = ValidateUtil.nameConversion(operation.getUserName());
-            if (2 == operation.getUserIdentity() || 4 == operation.getUserIdentity()) {
-                return "该手机号已绑定机构(" + showName + ")运营人员,请重新填写手机号";
-            } else if (3 == operation.getUserIdentity()) {
-                return "该手机号已绑定供应商(" + showName + ")运营人员,请重新填写手机号";
-            }
-            flag = true;
-        }
-        if (flag) {
-            return "该手机号已被使用";
-        }
-        return null;
-    }
 }
 

+ 27 - 1
src/main/resources/mapper/LoginMapper.xml

@@ -33,6 +33,7 @@
             u.password as password,
             u.clubStatus as clubStatus,
             u.manufacturerStatus as shopStatus,
+            cu.id as operationId,
             cu.status as operationStatus,
             cu.mobile as operationMobile
         from user u
@@ -43,8 +44,33 @@
         ) and u.userIdentity in (1,2,3,4) and u.userOrganizeID = 0
         limit 1
     </select>
+    <select id="getLoginUserByMobile" resultType="com.caimei365.user.model.vo.UserLoginVo">
+        select u.userID as userId,
+            u.clubID as clubId,
+            u.shopID as shopId,
+            u.serviceProviderId as serviceProviderId,
+            u.userName as userName,
+            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.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.userOrganizeID = 0 and cu.delFlag != 1
+        and (u.bindMobile = #{mobile} or cu.mobile = #{mobile} )
+        and u.userIdentity in (1,2,3,4)
+        limit 1
+    </select>
     <select id="getOperationByMobile" resultType="com.caimei365.user.model.po.OperationPo">
-        select o.userID as userId,
+        select o.id as id,
+               o.userID as userId,
                o.mobile as mobile,
                o.clubID as clubId,
                o.shopID as shopId,

+ 2 - 2
src/main/resources/mapper/RegisterMapper.xml

@@ -14,8 +14,8 @@
                   values(#{name},#{shortName},#{contractMobile},#{linkMan},#{userId},#{addTime},#{status},#{serviceProviderId},#{scanFlag},#{contractEmail},#{linkMan},#{provinceId},#{cityId},#{townId},#{address},#{shopPhoto},#{businessLicense},#{socialCreditCode},#{firstClubType},#{secondClubType},#{department},#{medicalPracticeLicense},#{mainProduct})
     </insert>
     <insert id="insertOperation" parameterType="com.caimei365.user.model.po.OperationPo" keyProperty="id" useGeneratedKeys="true">
-        insert into cm_mall_operation_user(`userID`, `clubID`, `shopID`, `userOrganizeID`, `nickName`, `headimgurl`, `userType`, `mobile`, `linkName`, `status`, `unionId`, `openid`, `addTime`, `updateTime`, `bindTime`, `delFlag`)
-                                    values(#{userId},#{clubId},#{shopId},#{organizeId},#{nickName},#{avatarUrl},#{userType},#{mobile},#{linkName},#{status},#{unionId},#{openId},#{addTime},#{updateTime},#{bindTime},#{delFlag})
+        insert into cm_mall_operation_user(`userID`, `clubID`, `shopID`, `userOrganizeID`,`linkName`, `nickName`, `headimgurl`, `userType`, `mobile`, `linkName`, `status`, `unionId`, `openid`, `addTime`, `updateTime`, `bindTime`, `delFlag`)
+                                    values(#{userId},#{clubId},#{shopId},#{organizeId},#{linkName},#{nickName},#{avatarUrl},#{userType},#{mobile},#{linkName},#{status},#{unionId},#{openId},#{addTime},#{updateTime},#{bindTime},#{delFlag})
     </insert>
     <insert id="insertShopUser" parameterType="com.caimei365.user.model.po.UserPo" keyProperty="userId" useGeneratedKeys="true">
         insert into user(`userOrganizeID`,`registerTime`, `registerIP`, `source`, `registerUserTypeID`, `name`, `userName`, `bindMobile`, `email`, `userIdentity`, `userPermission`, `manufacturerStatus` , `password`, `agreeFlag`, `validFlag`)