解析短息数据发送至上传平台

master
bynt 4 years ago
parent 8c8e5f5c4b
commit d7b8bc116d

@ -63,4 +63,34 @@ CREATE TABLE liehe_message (
push_time datetime DEFAULT NULL COMMENT '上游推送时间', push_time datetime DEFAULT NULL COMMENT '上游推送时间',
send_status tinyint(1) DEFAULT 0 COMMENT '下游推送状态', send_status tinyint(1) DEFAULT 0 COMMENT '下游推送状态',
PRIMARY KEY (id) PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE liehe_message (
id bigint(20) NOT NULL AUTO_INCREMENT,
gmt_create datetime DEFAULT NULL,
gmt_modified datetime DEFAULT NULL,
rec_id bigint(20) DEFAULT NULL COMMENT '记录id',
pnum varchar(255) DEFAULT NULL COMMENT 'pnum',
act_name varchar(255) DEFAULT NULL COMMENT '业务名',
start_time datetime DEFAULT NULL COMMENT '业务开始时间',
client_type tinyint(1) DEFAULT NULL COMMENT '业务类别(1:A,2:B,3:C,4:D,5:E,6:F)',
app_id varchar(255) DEFAULT NULL COMMENT '上游推送用户id',
push_time datetime DEFAULT NULL COMMENT '上游推送时间',
send_status tinyint(1) DEFAULT 0 COMMENT '下游推送状态',
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE sms_message (
id bigint(20) NOT NULL AUTO_INCREMENT,
gmt_create datetime DEFAULT NULL,
gmt_modified datetime DEFAULT NULL,
rec_id bigint(20) DEFAULT NULL COMMENT '记录id',
act_name varchar(255) DEFAULT NULL COMMENT '业务名',
start_time datetime DEFAULT NULL COMMENT '业务开始时间',
app_id varchar(255) DEFAULT NULL COMMENT '上游推送用户id',
push_time datetime DEFAULT NULL COMMENT '上游推送时间',
send_status tinyint(1) DEFAULT 0 COMMENT '下游推送状态',
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

@ -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("调用失败请重试");
}
}

@ -33,6 +33,7 @@ public class ThreadPoolConfig {
/** /**
* AB 线 * AB 线
*
* @return * @return
*/ */
@Bean @Bean
@ -51,6 +52,7 @@ public class ThreadPoolConfig {
/** /**
* AB 线 * AB 线
*
* @return * @return
*/ */
@Bean @Bean
@ -67,4 +69,22 @@ public class ThreadPoolConfig {
return threadPoolExecutor; return threadPoolExecutor;
} }
/**
* 线
*
* @return
*/
@Bean
public Executor sendSmsExecutors() {
return new ThreadPoolExecutor(
corePoolSize,
maxPoolSize,
3,
TimeUnit.SECONDS,
new LinkedBlockingDeque<>(queueCapacity),
Executors.defaultThreadFactory(),
new ThreadPoolExecutor.DiscardOldestPolicy()
);
}
} }

@ -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 {
/**
* VODTO
*
* @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;
}
/**
* DTODO
*
* @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 DTODO
*
* @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,60 @@
package com.yuyou.openapi.openapi.model.dto;
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* @author Enzo
* @date
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SendSmsMessageCovDTO {
/**
* ID
*/
private String appId;
/**
*
*/
private Long timestamp;
/**
* : sha1(app_id=AppId&nonce_str=time_stamp)
*/
private String signature;
/**
* json
*/
private List<SmsData> data;
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class SmsData {
/**
* Base64
*/
@JSONField(name = "task_name")
@JsonIgnore
private String actName;
/**
* Base64
*/
@JSONField(name = "list")
private List<String> phoneList;
}
}

@ -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,71 @@
package com.yuyou.openapi.openapi.model.pojo;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BlackJsonContent implements Serializable {
/**
*
*
* sig= MD5ID + +
* MD532(:)
* 24yyyyMMddHHmmss50
*/
@JSONField(name = "sig")
private String sig;
/**
* APP ID
*/
@JSONField(name = "appid")
private String appId;
/**
* id
* , 8~16
*/
@JSONField(name = "req_id")
private String reqId;
@JSONField(name = "freq")
private String freq;
@JSONField(name = "resource")
private String resource;
/**
* A
*/
@JSONField(name = "caller")
private String caller;
/**
* B
*/
@JSONField(name = "callee")
private String callee;
/**
* B MD5
*/
@JSONField(name = "callee_md5")
private String calleeMd5;
/**
* id
*/
@JSONField(name = "sessionid")
private String sessionId;
}

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

@ -3,20 +3,24 @@ package com.yuyou.openapi.openapi.task;
import cn.hutool.core.codec.Base64; import cn.hutool.core.codec.Base64;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.SecureUtil;
import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.yuyou.openapi.openapi.api.enums.LuoShiAppIDEnum; import com.yuyou.openapi.openapi.api.enums.LuoShiAppIDEnum;
import com.yuyou.openapi.openapi.common.enums.IntentionEnum; import com.yuyou.openapi.openapi.common.enums.IntentionEnum;
import com.yuyou.openapi.openapi.common.enums.SourceEnum; import com.yuyou.openapi.openapi.common.enums.SourceEnum;
import com.yuyou.openapi.openapi.consts.SmsConstant;
import com.yuyou.openapi.openapi.consts.SpecialCityConst; import com.yuyou.openapi.openapi.consts.SpecialCityConst;
import com.yuyou.openapi.openapi.dao.PhonesRepository; import com.yuyou.openapi.openapi.dao.PhonesRepository;
import com.yuyou.openapi.openapi.model.dto.*; import com.yuyou.openapi.openapi.model.dto.*;
import com.yuyou.openapi.openapi.model.pojo.BlackJsonContent;
import com.yuyou.openapi.openapi.model.pojo.QiZhuangDTO; import com.yuyou.openapi.openapi.model.pojo.QiZhuangDTO;
import com.yuyou.openapi.openapi.model.pojo.token.QiZhuangTokenResponse; import com.yuyou.openapi.openapi.model.pojo.token.QiZhuangTokenResponse;
import com.yuyou.openapi.openapi.model.vo.ABClientXMJMessageVO; import com.yuyou.openapi.openapi.model.vo.ABClientXMJMessageVO;

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

@ -26,6 +26,6 @@ public class DateUtils {
public static void main(String[] args) { public static void main(String[] args) {
System.out.println(date(1597141159L)); System.out.println(System.currentTimeMillis());
} }
} }

@ -1,12 +1,14 @@
package com.yuyou.openapi.openapi.utils; package com.yuyou.openapi.openapi.utils;
import java.util.List;
/** /**
* *
* *
* @version 1.0 * @version 1.0
* @date 2020/8/10 * @date 2020/8/10
*/ */
public class StringUtils { public class StringUtils extends org.apache.commons.lang3.StringUtils {
public static boolean isNumeric(Object obj) { public static boolean isNumeric(Object obj) {
if (obj == null) { if (obj == null) {
return false; return false;
@ -31,4 +33,21 @@ public class StringUtils {
} }
} }
} }
/**
* list -> string [],
*
* @param list list
* @param specialTag
* @return
*/
public static<T> String listPrintWithSpecialSplit(List<T> list, String specialTag){
String str = list.toString().replaceAll("(?:\\[|null|]| +)", "");
if (StringUtils.isNotBlank(specialTag)){
return str.replaceAll(",", specialTag);
}
return str;
}
} }

@ -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…
Cancel
Save