Browse Source

绑定账号,发送验证码

chao 4 years ago
parent
commit
cdf393e187

+ 2 - 2
pom.xml

@@ -5,7 +5,7 @@
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
-        <version>2.4.3</version>
+        <version>2.4.4</version>
         <relativePath/>
     </parent>
     <groupId>com.caimei365.cloud</groupId>
@@ -15,7 +15,7 @@
     <description>采美365微服务-用户服务</description>
     <properties>
         <java.version>1.8</java.version>
-        <spring-cloud.version>2020.0.1</spring-cloud.version>
+        <spring-cloud.version>2020.0.2</spring-cloud.version>
     </properties>
     <dependencyManagement>
         <dependencies>

+ 25 - 0
src/main/java/com/caimei365/user/controller/BaseApi.java

@@ -74,5 +74,30 @@ public class BaseApi {
         return baseService.getSmsCode(mobile, activateCodeType, platformType, isCheckCaptcha, imgCode, token);
     }
 
+    /**
+     * 绑定账号,发送短信验证
+     *
+     * spi旧接口:/user/note
+     *
+     * @param mobile           运营人员手机号
+     * @param bindMobile       机构手机号
+     * @param platformType     0:www,1:crm/h5,2:小程序
+     * @param isCheckCaptcha   是否检查图片验证码,0:检查,1:不检查
+     * @param imgCode          图片验证码
+     * @param token            图片验证码token
+     */
+    @ApiOperation("获取短信验证码")
+    @ApiImplicitParams({
+        @ApiImplicitParam(required = true, name = "mobile", value = "运营人员手机号"),
+        @ApiImplicitParam(required = true, name = "bindMobile", value = "机构手机号"),
+        @ApiImplicitParam(required = false, name = "platformType", value = "0:www,1:crm/h5,2:小程序"),
+        @ApiImplicitParam(required = false, name = "isCheckCaptcha", value = "是否检查图片验证码,0:检查,1:不检查"),
+        @ApiImplicitParam(required = false, name = "imgCode", value = "图片验证码"),
+        @ApiImplicitParam(required = false, name = "token", value = "图片token")
 
+    })
+    @GetMapping("/sms/bind")
+    public ResponseJson getBindSmsCode(String mobile, String bindMobile, Integer platformType, Integer isCheckCaptcha, String imgCode, String token) {
+        return baseService.getBindSmsCode(mobile, bindMobile, platformType, isCheckCaptcha, imgCode, token);
+    }
 }

+ 2 - 2
src/main/java/com/caimei365/user/controller/RegisterApi.java

@@ -152,7 +152,7 @@ public class RegisterApi {
      */
     @ApiOperation("供应商注册")
     @Idempotent(prefix="idempotent_shop", keys={"#shopRegisterDto"}, expire=5)
-    @PostMapping("/shop/applets")
+    @PostMapping("/shop")
     public ResponseJson shopRegister(ShopRegisterDto shopRegisterDto, @RequestHeader HttpHeaders headers) {
         String passWordConfirm = shopRegisterDto.getPassWordConfirm();
         String smsCode = shopRegisterDto.getSmsCode();
@@ -171,7 +171,7 @@ public class RegisterApi {
      * @return              ShopPo
      */
     @ApiOperation("更新供应商申请信息")
-    @PostMapping("/apply/update")
+    @PostMapping("/shop/apply")
     public ResponseJson updateShopApplyInfo(ShopApplyDto shopApplyDto, @RequestHeader HttpHeaders headers){
         return registerService.updateShopApply(shopApplyDto, headers);
     }

+ 15 - 0
src/main/java/com/caimei365/user/mapper/BaseMapper.java

@@ -26,6 +26,20 @@ public interface BaseMapper {
      * @return 用户Id
      */
     Integer getUserIdByMobile(@Param("mobile") String mobile);
+    /**
+     * 根据运营人员手机号获用户Id
+     *
+     * @param mobile 手机号
+     * @return 用户Id
+     */
+    Integer getOperationUserIdByMobile(String mobile);
+
+    /**
+     * 根据用户Id获取机构状态
+     * @param userId
+     * @return
+     */
+    Integer getClubStatusByUserId(Integer userId);
     /**
      * 根据手机号获取运营人员Id
      *
@@ -71,4 +85,5 @@ public interface BaseMapper {
      * @return
      */
     String getUserNameByUserId(Integer userId);
+
 }

+ 12 - 0
src/main/java/com/caimei365/user/service/BaseService.java

@@ -41,4 +41,16 @@ public interface BaseService {
      * @return void
      */
     ResponseJson getSmsCode(String mobile, Integer activateCodeType, Integer platformType, Integer isCheckCaptcha, String imgCode, String token);
+
+    /**
+     * 绑定账号,发送短信验证
+     *
+     * @param mobile           运营人员手机号
+     * @param bindMobile       机构手机号
+     * @param platformType     0:www,1:crm/h5,2:小程序
+     * @param isCheckCaptcha   是否检查图片验证码,0:检查,1:不检查
+     * @param imgCode          图片验证码
+     * @param token            图片验证码token
+     */
+    ResponseJson getBindSmsCode(String mobile, String bindMobile, Integer platformType, Integer isCheckCaptcha, String imgCode, String token);
 }

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

@@ -100,17 +100,18 @@ public class BaseServiceImpl implements BaseService {
      */
     @Override
     public ResponseJson getSmsCode(String mobile, Integer activateCodeType, Integer platformType, Integer isCheckCaptcha, String imgCode, String token) {
+        // 验证手机号
+        ResponseJson mobileModel = ValidateUtil.validateMobile(mobile);
+        if (mobileModel.getCode() == -1) {
+            return mobileModel;
+        }
+        // 检查图片验证码
         if (null != isCheckCaptcha && isCheckCaptcha == 1){
             Boolean checkFlag = checkCaptchaImage(token, imgCode, platformType);
             if (!checkFlag) {
                 return ResponseJson.error("图片验证码错误");
             }
         }
-        // 验证手机号
-        ResponseJson mobileModel = ValidateUtil.validateMobile(mobile);
-        if (mobileModel.getCode() == -1) {
-            return mobileModel;
-        }
         boolean sendFlag = false;
         // 生成六位验证码
         String randomCode = CodeUtil.generateCodeInt(6);
@@ -145,4 +146,65 @@ public class BaseServiceImpl implements BaseService {
         }
         return ResponseJson.success("发送验证码成功");
     }
+
+    /**
+     * 绑定账号,发送短信验证
+     *
+     * @param mobile         运营人员手机号
+     * @param bindMobile     机构手机号
+     * @param platformType   0:www,1:crm/h5,2:小程序
+     * @param isCheckCaptcha 是否检查图片验证码,0:检查,1:不检查
+     * @param imgCode        图片验证码
+     * @param token          图片验证码token
+     */
+    @Override
+    public ResponseJson getBindSmsCode(String mobile, String bindMobile, Integer platformType, Integer isCheckCaptcha, String imgCode, String token) {
+        // 验证手机号
+        ResponseJson mobileModel = ValidateUtil.validateMobile(mobile);
+        ResponseJson bindMobileModel = ValidateUtil.validateMobile(bindMobile);
+        if (mobileModel.getCode() == -1 || bindMobileModel.getCode() == -1) {
+            return mobileModel;
+        }
+        // 检查图片验证码
+        if (null != isCheckCaptcha && isCheckCaptcha == 1){
+            Boolean checkFlag = checkCaptchaImage(token, imgCode, platformType);
+            if (!checkFlag) {
+                return ResponseJson.error("图片验证码错误");
+            }
+        }
+        // 根据手机号查询用户Id
+        Integer userId = baseMapper.getUserIdByMobile(bindMobile);
+        if (null == userId){
+            return ResponseJson.error("你输入的账号不存在");
+        }
+        Integer operationUserId = baseMapper.getOperationUserIdByMobile(mobile);
+        if (null != operationUserId){
+            // 判断运营人员是否是机构手机号
+            Integer tempId = baseMapper.getUserIdByMobile(mobile);
+            if (null != tempId && tempId.equals(userId)){
+                // 判断机构状态
+                Integer clubStatus = baseMapper.getClubStatusByUserId(operationUserId);
+                if(null != clubStatus && 91 != clubStatus) {
+                    return ResponseJson.error("该手机号已被使用");
+                }
+            }
+        }
+        // 生成六位验证码
+        String randomCode = CodeUtil.generateCodeInt(6);
+        String userName = baseMapper.getUserNameByUserId(userId);
+        // 欢迎成为${name}的运营人员,您的邀请码为${code}。
+        boolean smsFlag = AliyunSmsUtil.sendSms(mobile, 11, "{name:"+ userName +",code:"+ randomCode +"}");
+        if (!smsFlag) {
+            // 短信发送失败重试一次
+            smsFlag = AliyunSmsUtil.sendSms(mobile, 11, "{name:"+ userName +",code:"+ randomCode +"}");
+        }
+        if (smsFlag) {
+            redisService.set("code:"+mobile, randomCode, 1800L);
+            log.info( "绑定账号,发送到:" + mobile + "的短信验证码为: " + randomCode);
+            return ResponseJson.success("发送验证码成功");
+        } else {
+            return ResponseJson.error("验证码发送失败!请稍后重试");
+        }
+    }
+
 }

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

@@ -40,8 +40,6 @@ public class LoginServiceImpl implements LoginService {
     private LoginMapper loginMapper;
     @Resource
     private RegisterMapper registerMapper;
-    @Resource
-    private BaseMapper baseMapper;
 
     /**
      * 小程序邀请码过期天数

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

@@ -11,7 +11,6 @@ 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.model.vo.UserVo;
 import com.caimei365.user.service.RegisterService;
 import com.caimei365.user.components.RedisService;
 import com.caimei365.user.utils.AliyunSmsUtil;
@@ -173,6 +172,8 @@ public class RegisterServiceImpl implements RegisterService {
          */
         if (StringUtils.isNotEmpty(clubRegisterDto.getNickName())) {
             OperationPo operation = new OperationPo();
+            // 组织Id,采美默认0
+            operation.setOrganizeId(0);
             // 用户Id
             operation.setUserId(user.getUserId());
             // 机构Id
@@ -599,7 +600,7 @@ public class RegisterServiceImpl implements RegisterService {
         String ip = headers.getFirst("X-CLIENT-IP");
         log.info("供应商注册 X-CLIENT-IP : " + ip);
         // 参数校验
-        if (null == isAgreed || StringUtils.isBlank(shopRegisterDto.getBindMobile()) || StringUtils.isBlank(smsCode)
+        if (StringUtils.isBlank(shopRegisterDto.getBindMobile()) || StringUtils.isBlank(smsCode)
                 || StringUtils.isBlank(shopRegisterDto.getPassword()) || StringUtils.isBlank(passWordConfirm)) {
             return ResponseJson.error("参数异常");
         }
@@ -627,7 +628,7 @@ public class RegisterServiceImpl implements RegisterService {
         if (2 == whichStep) {
             return ResponseJson.success(null);
         }
-        if (1 != isAgreed) {
+        if (null != isAgreed && 1 != isAgreed) {
             return ResponseJson.error("请勾选同意协议");
         }
         /*

+ 12 - 2
src/main/resources/mapper/BaseMapper.xml

@@ -14,6 +14,16 @@
         ) and u.userIdentity in (1,2,3,4)
         limit 1
     </select>
+    <select id="getOperationUserIdByMobile" resultType="java.lang.Integer">
+        select userID from cm_mall_operation_user
+        where mobile = #{mobile} and delFlag = '0'
+        limit 1
+    </select>
+    <select id="getClubStatusByUserId" resultType="java.lang.Integer">
+        select clubStatus
+        from user
+        where userID = #{userId}
+    </select>
     <select id="getOperationIdByMobile" resultType="java.lang.Integer">
         select id from cm_mall_operation_user
         where mobile = #{mobile} and delFlag = '0'
@@ -33,8 +43,8 @@
     </select>
     <select id="getUserByUserId" resultType="com.caimei365.user.model.vo.UserVo">
         select userID as userId,registerUserTypeID as registerUserTypeId,source,clubID as clubId,shopID as shopId,
-               serviceProviderID as serviceProviderId,userName,email,mobile,bindMobile,password,
-               userIdentity,userPermission,name,clubStatus,manufacturerStatus,serviceProviderStatus,
+               serviceProviderID as serviceProviderId,name,userName,email,mobile,bindMobile,password,
+               userIdentity,userPermission,clubStatus,manufacturerStatus,serviceProviderStatus,auditNote,auditStatus,
                agreeFlag,registerTime,registerIP as registerIp,validFlag
         from user
         where userID = #{userId}

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

@@ -13,9 +13,9 @@
         insert into club(`name`, `sname`, `contractMobile`, `linkMan`, `userID`, `addTime`, `status`, `spID`, `scanFlag`,`contractEmail1`,`linkMan`, `provinceID`, `cityID`,`townID`, `address`, `headpic`, `businessLicenseImage`,`socialCreditCode`,`firstClubType`,`secondClubType`,`department`,`medicalPracticeLicenseImg`,`mainpro`)
                   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="clubId" useGeneratedKeys="true">
-        insert into cm_mall_operation_user(`userID`, `clubID`, `nickName`, `headimgurl`, `userType`, `mobile`, `linkName`, `status`, `unionId`, `openid`, `addTime`, `updateTime`, `bindTime`, `delFlag`)
-                                    values(#{userId},#{clubId},#{nickName},#{avatarUrl},#{UserType},#{mobile},#{linkName},#{status},#{unionId},#{openid},#{addTime},#{updateTime},#{bindTime},#{delFlag})
+    <insert id="insertOperation" parameterType="com.caimei365.user.model.po.OperationPo" keyProperty="id" useGeneratedKeys="true">
+        insert into cm_mall_operation_user(`userID`, `clubID`, `userOrganizeID`, `nickName`, `headimgurl`, `userType`, `mobile`, `linkName`, `status`, `unionId`, `openid`, `addTime`, `updateTime`, `bindTime`, `delFlag`)
+                                    values(#{userId},#{clubId},#{organizeId},#{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(`registerTime`, `registerIP`, `source`, `registerUserTypeID`, `name`, `userName`, `bindMobile`, `email`, `userIdentity`, `userPermission`, `manufacturerStatus` , `password`, `agreeFlag`, `validFlag`)