zhongrj
2023-04-25 81dca23c275d3bd111a07d925f8bf6cf0c22dd2a
短信验证码发送优化,添加手机号码校验
7 files modified
1 files deleted
138 ■■■■ changed files
skjcmanager/skjcmanager-service-api/skjcmanager-user-api/src/main/java/cn/gistack/system/user/feign/IUserClient.java 13 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/pom.xml 5 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/entity/User.java 15 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/controller/SmsController.java 74 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/util/SmsUtils.java 5 ●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/feign/UserClient.java 8 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/service/IUserService.java 8 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/service/impl/UserServiceImpl.java 10 ●●●●● patch | view | raw | blame | history
skjcmanager/skjcmanager-service-api/skjcmanager-user-api/src/main/java/cn/gistack/system/user/feign/IUserClient.java
@@ -27,6 +27,8 @@
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.List;
/**
 * User Feign接口类
 *
@@ -45,6 +47,7 @@
    String USER_INFO_BY_TYPE = API_PREFIX + "/user-info-by-type";
    String USER_INFO_BY_ID = API_PREFIX + "/user-info-by-id";
    String USER_INFO_BY_ACCOUNT = API_PREFIX + "/user-info-by-account";
    String USER_INFO_BY_PHONE = API_PREFIX + "/user-info-by-phone";
    String USER_AUTH_INFO = API_PREFIX + "/user-auth-info";
    String SAVE_USER = API_PREFIX + "/save-user";
    String REMOVE_USER = API_PREFIX + "/remove-user";
@@ -83,6 +86,16 @@
     * 获取用户信息
     *
     * @param tenantId 租户ID
     * @param phone  手机号
     * @return
     */
    @GetMapping(USER_INFO_BY_PHONE)
    R<List<User>> userInfoByPhone(@RequestParam("tenantId") String tenantId, @RequestParam("phone") String phone);
    /**
     * 获取用户信息
     *
     * @param tenantId 租户ID
     * @param account  账号
     * @param userType 用户平台
     * @return
skjcmanager/skjcmanager-service/skjcmanager-sm/pom.xml
@@ -47,6 +47,11 @@
            <version>3.0.1.RELEASE</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>cn.gistack</groupId>
            <artifactId>skjcmanager-user-api</artifactId>
            <version>3.0.1.RELEASE</version>
        </dependency>
    </dependencies>
    <build>
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/entity/User.java
File was deleted
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/controller/SmsController.java
@@ -5,12 +5,17 @@
import cn.gistack.sm.sms.entity.SmsRecord;
import cn.gistack.sm.sms.service.ISmsRecordService;
import cn.gistack.sm.sms.util.SmsUtils;
import cn.gistack.system.user.entity.User;
import cn.gistack.system.user.feign.IUserClient;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.redis.cache.BladeRedis;
import org.springblade.core.tool.api.R;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static cn.gistack.common.cache.CacheNames.PHONE_KEY;
/**
@@ -26,8 +31,9 @@
    private final ISmsRecordService smsRecordService;
    private final BladeRedis bladeRedis;
    private final IUserClient userClient;
    @GetMapping("/test")
    public void setRedis(){
@@ -36,26 +42,64 @@
    /**
     * 发送登录验证码
     * request 必须包含手机号(多个手机号以英文逗号分隔)
     * request 必须包含手机号
     * @param request
     * @return
     */
    @PostMapping("/sendCode")
    public R test(@RequestBody SMSSendRequest request){
        //设置模板相关信息
        String templateId = "2431012205498";
        String randNumber = SmsUtils.getRandNumber();
        String content = "您的登录验证码是" + randNumber + ",5分钟内有效,请勿泄漏,如非本人操作,请忽略此信息";
        request.setMessageContent(content);
        request.setTemplateId(templateId);
        // 发送操作
        String sendMsg = SmsUtils.sendMsg(request);
        // 记录发送记录操作
        saveSendRecord(request,sendMsg);
        // 保存验证码到 redis
        saveCodeForRedis(request.getUserNumber(),randNumber);
        // 手机号码校验
        if(validatePhone(request.getUserNumber())) {
            //设置模板相关信息
            String templateId = "2431012205498";
            String randNumber = SmsUtils.getRandNumber();
            String content = "您的登录验证码是" + randNumber + ",5分钟内有效,请勿泄漏,如非本人操作,请忽略此信息";
            request.setMessageContent(content);
            request.setTemplateId(templateId);
            // 发送操作
            String sendMsg = SmsUtils.sendMsg(request);
            // 记录发送记录操作
            saveSendRecord(request, sendMsg);
            // 保存验证码到 redis
            saveCodeForRedis(request.getUserNumber(), randNumber);
            // 返回发送信息
            return R.data(sendMsg);
        }
        // 返回发送信息
        return R.data(sendMsg);
        return R.fail(400,"该手机号不存在!");
    }
    /**
     * 校验手机号码正确性
     * @param userNumber
     * @return
     */
    private boolean validatePhone(String userNumber) {
        // 校验手机号码正确性
        if (validator(userNumber)){
            // 校验该账户是否已注册,通过手机号查询用户是否存在,tenantId 暂时写死,未登陆情况 tenantId 获取不到
            R<List<User>> list = userClient.userInfoByPhone("000000", userNumber);
            if (list.getData().size()>0){
                return true;
            }
            return false;
        }
        return false;
    }
    /**
     * 校验手机号码
     */
    public static boolean validator(String phone) {
        String regex = "^((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(166)|(17[0,1,3,5,6,7,8])|(18[0-9])|(19[8|9]))\\d{8}$";
        if (phone.length() != 11) {
            return false;
        } else {
            Pattern p = Pattern.compile(regex);
            Matcher m = p.matcher(phone);
            boolean isMatch = m.matches();
            return isMatch;
        }
    }
    /**
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/util/SmsUtils.java
@@ -61,16 +61,13 @@
     * @return
     */
    public static String getRandNumber() {
        // 计算token
//        Date date = new Date();
//        String dateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(date);
        Random random = new Random();
        //把随机生成的数字转成字符串
        String str = String.valueOf(random.nextInt(9));
        for (int i = 0; i < 5; i++) {
            str += random.nextInt(9);
        }
        return String.valueOf(System.currentTimeMillis()) + str;
        return str;
    }
    /**
skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/feign/UserClient.java
@@ -31,6 +31,8 @@
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
 * 用户服务Feign实现类
 *
@@ -62,6 +64,12 @@
    }
    @Override
    @GetMapping(USER_INFO_BY_PHONE)
    public R<List<User>> userInfoByPhone(String tenantId, String phone) {
        return R.data(service.userInfoByPhone(tenantId, phone));
    }
    @Override
    @GetMapping(USER_INFO_BY_TYPE)
    public R<UserInfo> userInfo(String tenantId, String account, String userType) {
        return R.data(service.userInfo(tenantId, account, UserEnum.of(userType)));
skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/service/IUserService.java
@@ -207,4 +207,12 @@
    UserVO platformDetail(User user);
    List<User> customizeGetList(UserVO user);
    /**
     * 根据手机号码查询用户信息
     * @param tenantId
     * @param phone
     * @return
     */
    List<User> userInfoByPhone(String tenantId, String phone);
}
skjcmanager/skjcmanager-service/skjcmanager-user/src/main/java/cn/gistack/system/user/service/impl/UserServiceImpl.java
@@ -435,4 +435,14 @@
        return baseMapper.customizeGetList(user);
    }
    /**
     * 根据手机号码查询用户信息
     * @param tenantId
     * @param phone
     * @return
     */
    @Override
    public List<User> userInfoByPhone(String tenantId, String phone) {
        return list(Wrappers.<User>query().lambda().eq(User::getTenantId, tenantId).eq(User::getPhone, phone).eq(User::getIsDeleted, BladeConstant.DB_NOT_DELETED));
    }
}