NoticeUtil.java 2.8 KB
Newer Older
苗卫卫 committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
package com.boco.nbd.wios.flow.util;

import com.boco.nbd.framework.common.util.SpringContextUtil;
import com.boco.nbd.wios.flow.sms.aliyun.AliyunSendHandler;
import com.boco.nbd.wios.flow.sms.aliyun.properties.AliyunProperties;
import com.boco.nbd.wios.flow.sms.aliyun.entity.NoticeData;
import com.boco.nbd.wios.flow.sms.aliyun.exception.NotFindSendHandlerException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;

import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

/**
 * @ClassName NoticeUtil
 * @Description 短信通知
 * @Author songyanfei
 * @Email songyanfei@boco.com.cn
 * @Date 2022/10/28 11:17
 * @Version V1.0
 */
@Slf4j
@Component
public class NoticeUtil {

    /**
     * 手机号码正则规则.
     */
    private static final String REGX = "^1[3-9]\\d{9}$";

    /**
     * 手机号码规则验证.
     *
     * @param phone 手机号码
     * @return 是否验证通过
     */
    public boolean phoneRegValidation(String phone) {
        return StringUtils.isNotBlank(phone) && Pattern.matches(REGX,phone);
    }

    /**
     * 发送通知(一次发送到多个号码).
     *
     * @param noticeData 通知内容
     * @param phones     手机号列表
     * @return 是否发送成功
     */
    public boolean send(NoticeData noticeData, Collection<String> phones) {
        if (phones.isEmpty()) {
            log.error("phones is empty");
            return false;
        }

        // 正则校验手机号码是否正确
        List<String> phoneList = phones.stream().filter(this::phoneRegValidation).collect(Collectors.toList());

        if (phoneList.isEmpty()) {
            log.error("after filter phones is empty");
            return false;
        }

        AliyunProperties aliyunProperties = SpringContextUtil.getBean(AliyunProperties.class);
        ObjectMapper objectMapper = SpringContextUtil.getBean(ObjectMapper.class);
        AliyunSendHandler sendHandler = new AliyunSendHandler(aliyunProperties,objectMapper);
        boolean isAccept = sendHandler.acceptSend(noticeData.getType());

        if(!isAccept){
            throw new NotFindSendHandlerException();
        }

        return sendHandler.send(noticeData, phones);
    }

    /**
     * 发送通知(单独发送到目标号码).
     *
     * @param noticeData 通知内容
     * @param phone      手机号
     * @return 是否发送成功
     */
    public boolean send(NoticeData noticeData, String phone) {
        if (StringUtils.isBlank(phone)) {
            return false;
        }

        return send(noticeData, Collections.singletonList(phone));
    }

}