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)); } }