解析短息数据发送至上传平台
parent
8c8e5f5c4b
commit
d7b8bc116d
@ -0,0 +1,48 @@
|
||||
package com.yuyou.openapi.openapi.api;
|
||||
|
||||
import com.yuyou.openapi.openapi.common.CommonResponse;
|
||||
import com.yuyou.openapi.openapi.model.convert.SendSmsConverter;
|
||||
import com.yuyou.openapi.openapi.model.dto.SendSmsMessageDTO;
|
||||
import com.yuyou.openapi.openapi.model.vo.SendSmsClientMessageVo;
|
||||
import com.yuyou.openapi.openapi.service.SendSmsMessageService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2021/4/14
|
||||
*
|
||||
* 用户接收下游加密信息 进行短信转发
|
||||
*/
|
||||
@Slf4j
|
||||
@RestController
|
||||
public class SmsClient {
|
||||
|
||||
|
||||
@Autowired
|
||||
private SendSmsMessageService sendSmsService;
|
||||
|
||||
/**
|
||||
* 获取上游信息
|
||||
* 推送到短信端
|
||||
*
|
||||
* @return 返回调用信息
|
||||
*/
|
||||
@PostMapping("/api/req/taginfo/sendSms")
|
||||
public CommonResponse<String> sendMessage(@RequestBody SendSmsClientMessageVo vo) {
|
||||
// 记录日志
|
||||
log.info("====== [ sendSms request comming, request content is {} ] ======", vo.toString());
|
||||
// 转换实体类映射
|
||||
List<SendSmsMessageDTO> dtoList = SendSmsConverter.convertSendSmsMessageDTOFromVO(vo);
|
||||
// 调用业务处理接口 返回校验成功的结果
|
||||
return sendSmsService.sendSmsRecord(dtoList) ?
|
||||
CommonResponse.createBySuccess() : CommonResponse.createByErrorMessage("调用失败请重试");
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
package com.yuyou.openapi.openapi.consts;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2021/4/14
|
||||
*/
|
||||
public class SmsConstant {
|
||||
|
||||
/**APP_ID*/
|
||||
public static final String APP_ID = "";
|
||||
|
||||
/**TOKEN*/
|
||||
public static final String TOKEN = "";
|
||||
|
||||
|
||||
/**SEND_SMS_URL*/
|
||||
public static final String SEND_SMS_URL = "http://47.110.11.213:8000/api/tbSendSms/url/send";
|
||||
|
||||
/**时间转换格式*/
|
||||
public static final String FORMATE_TIMESTAMP = "yyyyMMddHHmmss";
|
||||
|
||||
/**黑名单链接*/
|
||||
public static final String BLACK_URL = "http://bl.hzdaba.cn/v2/Accounts/Bigdata/IsBlacklist";
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package com.yuyou.openapi.openapi.dao;
|
||||
|
||||
import com.yuyou.openapi.openapi.model.dataobject.SendSmsMessageDO;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.data.jpa.repository.Modifying;
|
||||
import org.springframework.data.jpa.repository.Query;
|
||||
import org.springframework.stereotype.Repository;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
* @author
|
||||
*
|
||||
*/
|
||||
@Repository
|
||||
public interface SendSmsMessageRepository extends JpaRepository<SendSmsMessageDO, Long>{
|
||||
|
||||
/**
|
||||
* 修改更新状态值
|
||||
* @param sendStatus
|
||||
* @param recId
|
||||
*/
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Modifying
|
||||
@Query("update SendSmsMessageDO t set t.sendStatus = ?1 where t.recId = ?2")
|
||||
void updateSendSmsStatus(Integer sendStatus,Long recId);
|
||||
}
|
||||
|
@ -0,0 +1,115 @@
|
||||
package com.yuyou.openapi.openapi.model.convert;
|
||||
|
||||
import cn.hutool.core.codec.Base64;
|
||||
import cn.hutool.core.util.CharsetUtil;
|
||||
import com.yuyou.openapi.openapi.model.dataobject.SendSmsMessageDO;
|
||||
import com.yuyou.openapi.openapi.model.dto.SendSmsMessageDTO;
|
||||
import com.yuyou.openapi.openapi.model.vo.SendSmsClientMessageVo;
|
||||
import com.yuyou.openapi.openapi.utils.DateUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* SendSms转换类
|
||||
*/
|
||||
@Slf4j
|
||||
public class SendSmsConverter {
|
||||
|
||||
/**
|
||||
* VO层转为DTO层
|
||||
*
|
||||
* @param sendSmsClientMessageVo
|
||||
* @return
|
||||
*/
|
||||
public static List<SendSmsMessageDTO> convertSendSmsMessageDTOFromVO(SendSmsClientMessageVo sendSmsClientMessageVo) {
|
||||
ArrayList<SendSmsMessageDTO> dtoList = new ArrayList<>();
|
||||
if (sendSmsClientMessageVo == null) {
|
||||
return dtoList;
|
||||
}
|
||||
List<SendSmsClientMessageVo.SmsDataInfo> dataInfos = sendSmsClientMessageVo.getData();
|
||||
if (CollectionUtils.isEmpty(dataInfos)) {
|
||||
return dtoList;
|
||||
}
|
||||
dataInfos.forEach(
|
||||
each -> {
|
||||
SendSmsMessageDTO smsMessageDTO = new SendSmsMessageDTO();
|
||||
smsMessageDTO.setAppId(sendSmsClientMessageVo.getAppId());
|
||||
smsMessageDTO.setTimestamp(sendSmsClientMessageVo.getTimestamp());
|
||||
// 对特殊的ActName进行处理
|
||||
checkSpecailAppName(each);
|
||||
BeanUtils.copyProperties(each, smsMessageDTO);
|
||||
dtoList.add(smsMessageDTO);
|
||||
}
|
||||
);
|
||||
return dtoList;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 批量转DTO为DO
|
||||
*
|
||||
* @param
|
||||
* @return
|
||||
*/
|
||||
public static List<SendSmsMessageDO> convertSendSmsMessageDOFromDTO(List<SendSmsMessageDTO> dtoList) {
|
||||
if (CollectionUtils.isEmpty(dtoList)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
List<SendSmsMessageDO> messageDOList = new ArrayList<>();
|
||||
dtoList.forEach(each -> {
|
||||
SendSmsMessageDO abMessageDO = convertSendSmsMessageDOFromDTO(each);
|
||||
if (abMessageDO != null) {
|
||||
messageDOList.add(abMessageDO);
|
||||
}
|
||||
});
|
||||
return messageDOList;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Luoshi DTO层转为DO层
|
||||
*
|
||||
* @param sendSmsDTO
|
||||
* @return
|
||||
*/
|
||||
public static SendSmsMessageDO convertSendSmsMessageDOFromDTO(SendSmsMessageDTO sendSmsDTO) {
|
||||
SendSmsMessageDO sendSmsMessageDO = new SendSmsMessageDO();
|
||||
if (sendSmsDTO == null) {
|
||||
return sendSmsMessageDO;
|
||||
}
|
||||
|
||||
BeanUtils.copyProperties(sendSmsDTO, sendSmsMessageDO);
|
||||
sendSmsMessageDO.setPushTime(DateUtils.date(sendSmsDTO.getTimestamp()));
|
||||
try{
|
||||
sendSmsMessageDO.setRecId(Long.valueOf(sendSmsDTO.getRecId()));
|
||||
}catch (Exception e){
|
||||
log.error("String convert Long type Error.", e);
|
||||
}
|
||||
return sendSmsMessageDO;
|
||||
}
|
||||
|
||||
/**
|
||||
* 对特殊的AppName进行检查处理
|
||||
* 例如:
|
||||
* 待处理 xxxx-1-1
|
||||
* 处理后 xxxx-1
|
||||
* 无需处理的直接进行返回原值
|
||||
*
|
||||
* @param dataInfo 对需要处理的actName进行处理
|
||||
* @return 返回处理后的结果
|
||||
*/
|
||||
private static void checkSpecailAppName(SendSmsClientMessageVo.SmsDataInfo dataInfo) {
|
||||
String actName = dataInfo.getActName();
|
||||
String decodeStr = Base64.decodeStr(actName, CharsetUtil.UTF_8);
|
||||
log.info("test decodeStr str is {}", decodeStr);
|
||||
String matchActName = StringUtils.substringBeforeLast(decodeStr, "-");
|
||||
dataInfo.setActName(matchActName);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,78 @@
|
||||
package com.yuyou.openapi.openapi.model.dataobject;
|
||||
|
||||
import lombok.Data;
|
||||
import org.springframework.data.annotation.CreatedDate;
|
||||
import org.springframework.data.annotation.LastModifiedDate;
|
||||
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* Copyright (C), 2012 - 2018, qyx
|
||||
* FileName: LuoshiMessageDO
|
||||
* Author: 钱昱欣
|
||||
* Date: 2020/10/22 2:49 PM
|
||||
* Description: TODO
|
||||
* History:
|
||||
* <author> <time> <version> <desc>
|
||||
* 钱昱欣 2020/10/22 v1.0 创建此文件
|
||||
*/
|
||||
@Data
|
||||
@Table(name = "sms_message")
|
||||
@Entity
|
||||
@EntityListeners(AuditingEntityListener.class)
|
||||
public class SendSmsMessageDO {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy= GenerationType.IDENTITY)
|
||||
private Long id;
|
||||
|
||||
@Column(name = "gmt_create")
|
||||
@CreatedDate
|
||||
private Date gmtCreate;
|
||||
|
||||
@Column(name = "gmt_modified")
|
||||
@LastModifiedDate
|
||||
private Date gmtModified;
|
||||
|
||||
/**
|
||||
* 记录id
|
||||
*/
|
||||
@Column(name = "rec_id")
|
||||
private Long recId;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 业务名
|
||||
*/
|
||||
@Column(name = "act_name")
|
||||
private String actName;
|
||||
|
||||
/**
|
||||
* 业务开始时间
|
||||
*/
|
||||
@Column(name = "start_time")
|
||||
private Date startTime;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 上游推送用户id
|
||||
*/
|
||||
@Column(name = "app_id")
|
||||
private String appId;
|
||||
|
||||
/**
|
||||
* 上游推送时间
|
||||
*/
|
||||
@Column(name = "push_time")
|
||||
private Date pushTime;
|
||||
|
||||
/**
|
||||
* 默认值为0 是否处理过请求 0 - 未处理 1 - 处理过
|
||||
*/
|
||||
@Column(name = "send_status")
|
||||
private Integer sendStatus = 0;
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
package com.yuyou.openapi.openapi.model.dto;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date
|
||||
*/
|
||||
@Data
|
||||
public class SendSmsMessageDTO {
|
||||
/**
|
||||
* 推送用户的ID
|
||||
*/
|
||||
|
||||
private String appId;
|
||||
/**
|
||||
* 请求时间戳
|
||||
*/
|
||||
private Long timestamp;
|
||||
|
||||
/**
|
||||
* 业务名称 这个字段是用Base64进行加密
|
||||
*/
|
||||
private String actName;
|
||||
/**
|
||||
* 单条记录标识ID
|
||||
*/
|
||||
private String recId;
|
||||
/**
|
||||
* 电话号码
|
||||
*/
|
||||
private List<String> phoneList;
|
||||
|
||||
}
|
@ -0,0 +1,61 @@
|
||||
package com.yuyou.openapi.openapi.model.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2021/4/14
|
||||
*/
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class SendSmsClientMessageVo extends ABClientBaseVO implements Serializable {
|
||||
|
||||
/**
|
||||
* 详细的数据实体
|
||||
*/
|
||||
@JsonProperty(value = "data")
|
||||
private List<SmsDataInfo> data;
|
||||
|
||||
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public static class SmsDataInfo {
|
||||
|
||||
/**
|
||||
* 业务名称 这个字段是用Base64进行加密
|
||||
*/
|
||||
@JsonProperty("act_name")
|
||||
private String actName;
|
||||
|
||||
/**
|
||||
* 呼叫开始时间 时间戳
|
||||
*/
|
||||
@JsonProperty("time")
|
||||
private Long startTime;
|
||||
|
||||
/**
|
||||
* 单条记录标识ID
|
||||
*/
|
||||
@JsonProperty("rec_id")
|
||||
private String recId;
|
||||
|
||||
/**
|
||||
* 单条记录标识ID
|
||||
*/
|
||||
@JsonProperty("list")
|
||||
private List<String> phoneList;
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
package com.yuyou.openapi.openapi.service;
|
||||
|
||||
import com.yuyou.openapi.openapi.model.dto.SendSmsMessageDTO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2021/4/17
|
||||
*/
|
||||
public interface SendSmsMessageService {
|
||||
|
||||
/**
|
||||
* 发送信息至上传平台
|
||||
* @param smsDTO
|
||||
* @return
|
||||
*/
|
||||
boolean sendSmsRecord(List<SendSmsMessageDTO> smsDTO);
|
||||
}
|
@ -0,0 +1,52 @@
|
||||
package com.yuyou.openapi.openapi.service.impl;
|
||||
|
||||
import com.yuyou.openapi.openapi.dao.SendSmsMessageRepository;
|
||||
import com.yuyou.openapi.openapi.model.convert.SendSmsConverter;
|
||||
import com.yuyou.openapi.openapi.model.dataobject.SendSmsMessageDO;
|
||||
import com.yuyou.openapi.openapi.model.dto.SendSmsMessageDTO;
|
||||
import com.yuyou.openapi.openapi.service.SendSmsMessageService;
|
||||
import com.yuyou.openapi.openapi.task.SendSmsMessageTask;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2021/4/17
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class SendSmsMessageServiceImpl implements SendSmsMessageService {
|
||||
|
||||
@Autowired
|
||||
private SendSmsMessageTask sendSmsMessageTask;
|
||||
|
||||
@Autowired
|
||||
private SendSmsMessageRepository sendSmsMessageRepository;
|
||||
|
||||
|
||||
@Override
|
||||
public boolean sendSmsRecord(List<SendSmsMessageDTO> dtoList) {
|
||||
if (CollectionUtils.isEmpty(dtoList)) {
|
||||
log.error("Param dtoList is empty");
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
List<SendSmsMessageDO> messageDOList = SendSmsConverter.convertSendSmsMessageDOFromDTO(dtoList);
|
||||
if (CollectionUtils.isEmpty(messageDOList)) {
|
||||
log.error("========== [do insert size zero , please check .] ==========");
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
|
||||
List<SendSmsMessageDO> doList = sendSmsMessageRepository.saveAll(messageDOList);
|
||||
if (CollectionUtils.isEmpty(doList)) {
|
||||
log.error("========== [insert data error , please check .] ==========");
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
// 返回处理结果
|
||||
sendSmsMessageTask.doRunSendSmsTask(dtoList);
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
}
|
@ -0,0 +1,132 @@
|
||||
package com.yuyou.openapi.openapi.task;
|
||||
|
||||
import cn.hutool.core.codec.Base64;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.crypto.SecureUtil;
|
||||
import cn.hutool.http.HttpRequest;
|
||||
import cn.hutool.http.HttpResponse;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.yuyou.openapi.openapi.consts.SmsConstant;
|
||||
import com.yuyou.openapi.openapi.dao.SendSmsMessageRepository;
|
||||
import com.yuyou.openapi.openapi.model.dto.SendSmsMessageCovDTO;
|
||||
import com.yuyou.openapi.openapi.model.dto.SendSmsMessageDTO;
|
||||
import com.yuyou.openapi.openapi.model.pojo.BlackJsonContent;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneOffset;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2021/4/17
|
||||
*/
|
||||
@Component
|
||||
@Slf4j
|
||||
public class SendSmsMessageTask {
|
||||
|
||||
|
||||
@Autowired
|
||||
private SendSmsMessageRepository sendSmsMessageRepository;
|
||||
|
||||
@Async(value = "sendSmsExecutors")
|
||||
public void doRunSendSmsTask(List<SendSmsMessageDTO> smsDTO) {
|
||||
Long startMilliSecond = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
|
||||
log.info("====== [ task start running, task name is {} ] ======", "sendSmsTask");
|
||||
sendSmsTask(smsDTO);
|
||||
Long endMilliSecond = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
|
||||
log.info("====== [ task start end, task name is {},cost milliSecond is {} ] ======", "sendSmsTask", (endMilliSecond - startMilliSecond));
|
||||
}
|
||||
|
||||
/**
|
||||
* 真实的任务执行入口
|
||||
*
|
||||
* @param smsDTO
|
||||
* @return
|
||||
*/
|
||||
private boolean sendSmsTask(List<SendSmsMessageDTO> smsDTO) {
|
||||
// 设置请求失败计数
|
||||
int count = 0;
|
||||
SendSmsMessageCovDTO smsMessageCovDTO = new SendSmsMessageCovDTO();
|
||||
|
||||
List<SendSmsMessageCovDTO.SmsData> smsDataList = new ArrayList<>();
|
||||
|
||||
// 号码解密发送
|
||||
smsDTO.forEach(item -> {
|
||||
/*List<String> stringList = item.getPhoneList().stream().map(Base64::decodeStr).collect(Collectors.toList());*/
|
||||
List<String> stringList = item.getPhoneList().stream().map(phone -> {
|
||||
if (phone.length() != 11) {
|
||||
// 去除空字符串 解密
|
||||
phone = Base64.decodeStr(phone.replaceAll(StrUtil.SPACE, StrUtil.EMPTY));
|
||||
}
|
||||
return phone;
|
||||
}).collect(Collectors.toList());
|
||||
SendSmsMessageCovDTO.SmsData smsData = new SendSmsMessageCovDTO.SmsData();
|
||||
smsData.setActName(item.getActName());
|
||||
smsData.setPhoneList(stringList);
|
||||
smsDataList.add(smsData);
|
||||
});
|
||||
// 进行设置
|
||||
if (!CollectionUtils.isEmpty(smsDataList)) {
|
||||
smsMessageCovDTO.setData(smsDataList);
|
||||
}
|
||||
smsMessageCovDTO.setTimestamp(System.currentTimeMillis() / 1000);
|
||||
// TODO 是否加入黑名单 后续可加入一个循环中
|
||||
/* smsDTOList.getPhoneList().removeIf(s -> !checkPhone(s));*/
|
||||
String jsonString = JSON.toJSONString(smsMessageCovDTO);
|
||||
// 失败重发请求3次
|
||||
while (count <= 3) {
|
||||
// 调用HTTP请求发送数据
|
||||
HttpResponse httpResponse = HttpRequest
|
||||
.post(SmsConstant.SEND_SMS_URL)
|
||||
.header("Content-Type", "application/json;charset=utf-8")
|
||||
.body(jsonString)
|
||||
.execute();
|
||||
if (httpResponse.isOk()) {
|
||||
log.info("========== [sendSmsInformation request success, response is {} ] ==========", httpResponse.body());
|
||||
break;
|
||||
} else {
|
||||
count++;
|
||||
log.error("========== [sendSmsInformation request fail, response is {} ] ==========", httpResponse.body());
|
||||
}
|
||||
}
|
||||
if (count > 3) {
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
smsDTO.forEach(each -> sendSmsMessageRepository.updateSendSmsStatus(1, Long.valueOf(each.getRecId())));
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
|
||||
private boolean checkPhone(String phone) {
|
||||
BlackJsonContent sendEncryptJsonContent = new BlackJsonContent();
|
||||
// Base64 解密
|
||||
sendEncryptJsonContent.setCallee(Base64.decodeStr(phone));
|
||||
sendEncryptJsonContent.setReqId(RandomUtil.randomString(10));
|
||||
sendEncryptJsonContent.setAppId(SmsConstant.APP_ID);
|
||||
String signBuilder = SmsConstant.APP_ID +
|
||||
SmsConstant.TOKEN +
|
||||
DateUtil.format(new Date(), SmsConstant.FORMATE_TIMESTAMP);
|
||||
String signStr = SecureUtil.md5(signBuilder).toUpperCase();
|
||||
// 配置 sign
|
||||
sendEncryptJsonContent.setSig(signStr);
|
||||
// 组装成JSON
|
||||
String readSendJsonStr = JSON.toJSONString(sendEncryptJsonContent);
|
||||
// 调用HTTP请求发送数据
|
||||
HttpResponse httpResponse = HttpRequest
|
||||
.post(SmsConstant.BLACK_URL)
|
||||
.header("Content-Type", "application/json;charset=utf-8")
|
||||
.body(readSendJsonStr)
|
||||
.execute();
|
||||
return httpResponse.isOk() && "1".equals(JSONUtil.parseObj(httpResponse.body()).get("forbid"));
|
||||
}
|
||||
}
|
@ -0,0 +1,119 @@
|
||||
package com.yuyou.openapi.openapi;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import cn.hutool.crypto.SecureUtil;
|
||||
import cn.hutool.http.HttpRequest;
|
||||
import cn.hutool.http.HttpResponse;
|
||||
import cn.hutool.http.HttpUtil;
|
||||
import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.yuyou.openapi.openapi.model.pojo.BlackJsonContent;
|
||||
import com.yuyou.openapi.openapi.model.vo.SendSmsClientMessageVo;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author Enzo
|
||||
* @date : 2021/4/15
|
||||
*/
|
||||
@Slf4j
|
||||
public class BlackListTest {
|
||||
|
||||
|
||||
/**
|
||||
* 时间格式
|
||||
*/
|
||||
private final static String FORMATE_TIMESTAMP = "yyyyMMddHHmmss";
|
||||
|
||||
|
||||
private String address = "https://bd.hzdaba.cn:8085/v3/Accounts/yuyoukeji/BigData/EncryptTel";
|
||||
private String httpUrl = " http://bl.hzdaba.cn/v2/Accounts/yuyoukeji/Bigdata/IsBlacklist";
|
||||
|
||||
private String appid = "yuyoukeji";
|
||||
|
||||
private String tk = "e3fb7090b4babe44a5113601487af433";
|
||||
|
||||
@Test
|
||||
public void isBlackList() {
|
||||
|
||||
|
||||
BlackJsonContent sendEncryptJsonContent = new BlackJsonContent();
|
||||
//fixme 还有一个过期时间参数为选填参数,暂时不做设置
|
||||
// String tels = StringUtils.listPrintWithSpecialSplit(list, null);
|
||||
sendEncryptJsonContent.setCallee("13586541001");
|
||||
sendEncryptJsonContent.setReqId(RandomUtil.randomString(10));
|
||||
sendEncryptJsonContent.setAppId(appid);
|
||||
|
||||
// 配置 sign
|
||||
sendEncryptJsonContent.setSig(makeSign());
|
||||
// 组装成JSON
|
||||
String readSendJsonStr = JSON.toJSONString(sendEncryptJsonContent);
|
||||
System.out.println(readSendJsonStr);
|
||||
|
||||
// 调用HTTP请求发送数据
|
||||
HttpResponse httpResponse = sendPostReq(readSendJsonStr);
|
||||
|
||||
System.out.println(httpResponse.body());
|
||||
|
||||
|
||||
}
|
||||
|
||||
private String makeSign() {
|
||||
|
||||
String signBuilder = appid +
|
||||
tk +
|
||||
DateUtil.format(new Date(), FORMATE_TIMESTAMP);
|
||||
|
||||
System.out.println(signBuilder);
|
||||
|
||||
return SecureUtil.md5(signBuilder).toUpperCase();
|
||||
}
|
||||
|
||||
|
||||
private HttpResponse sendPostReq(String json) {
|
||||
|
||||
HttpResponse execute = HttpRequest
|
||||
.post(httpUrl)
|
||||
.header("Content-Type", "application/json;charset=utf-8")
|
||||
.body(json)
|
||||
.execute();
|
||||
|
||||
return execute;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createSendVo(){
|
||||
SendSmsClientMessageVo messageVo = new SendSmsClientMessageVo();
|
||||
|
||||
List<String> list = new ArrayList<>();
|
||||
List<SendSmsClientMessageVo.SmsDataInfo> infoList = new ArrayList<>();
|
||||
list.add("13586541001");
|
||||
list.add("13586541011");
|
||||
SendSmsClientMessageVo.SmsDataInfo dataInfo = new SendSmsClientMessageVo.SmsDataInfo();
|
||||
dataInfo.setActName("by_test");
|
||||
dataInfo.setRecId("123456789");
|
||||
dataInfo.setStartTime(System.currentTimeMillis());
|
||||
dataInfo.setPhoneList(list);
|
||||
infoList.add(dataInfo);
|
||||
messageVo.setData(infoList);
|
||||
messageVo.setAppId("987654321");
|
||||
messageVo.setTimestamp(System.currentTimeMillis());
|
||||
String toJSONString = JSON.toJSONString(messageVo);
|
||||
System.out.println(toJSONString);
|
||||
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue