Merge remote-tracking branch 'origin/master'

master
wjt 1 year ago
commit fa35fd92af

@ -52,6 +52,11 @@ public enum ResponseCode {
*
*/
BATCH_NUMBER_EXIST_OR_SEND(400, "批次号不存在或已发送"),
/**
*
*/
BATCH_NUMBER_REPEAT_TRANSMISSION(400, "批次号不存在或已发送"),
/**
*
*/

@ -71,7 +71,13 @@ public interface CacheKey {
/**
* dmp
*/
String DMP_REQUEST_TYPE = "dmp::request::type";
String DMP_REQUEST_UPLOAD_TYPE = "dmp::request::upload::type";
/**
* dmp
*/
String DMP_REQUEST_FILE_TYPE = "dmp::request::file::type";

@ -8,6 +8,7 @@ import com.baiye.http.DmpResponse;
import com.baiye.http.ResponseCode;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import java.util.List;
import java.util.Map;
@ -16,6 +17,7 @@ import java.util.Map;
* @author Enzo
* @date : 2023/5/15
*/
@Slf4j
public class TripartiteResponseUtil {
private TripartiteResponseUtil() {
}

@ -21,11 +21,15 @@ public class ParamsRunner implements CommandLineRunner {
private final RedisUtils redisUtils;
@Override
public void run(String... args) throws Exception {
Integer type = (Integer) redisUtils.get(CacheKey.DMP_REQUEST_TYPE);
public void run(String... args) {
Integer fileType = (Integer) redisUtils.get(CacheKey.DMP_REQUEST_FILE_TYPE);
Integer uploadType = (Integer) redisUtils.get(CacheKey.DMP_REQUEST_UPLOAD_TYPE);
// 设置发送
if (ObjectUtil.isNull(type)) {
redisUtils.set(CacheKey.DMP_REQUEST_TYPE, DefaultNumberConstants.ONE_NUMBER);
if (ObjectUtil.isNull(fileType)) {
redisUtils.set(CacheKey.DMP_REQUEST_FILE_TYPE, DefaultNumberConstants.ONE_NUMBER);
}
if (ObjectUtil.isNull(uploadType)) {
redisUtils.set(CacheKey.DMP_REQUEST_UPLOAD_TYPE, DefaultNumberConstants.ONE_NUMBER);
}
}
}

@ -0,0 +1,23 @@
package com.baiye.config.properties;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
/**
* @author Enzo
* @date : 2022/10/18
*/
@Data
@Configuration
@ConfigurationProperties(prefix = "exchange")
public class ExchangeProperties {
private String orgCode;
private String callbackUrl;
private String submitUrl;
}

@ -0,0 +1,36 @@
package com.baiye.modules.platform.rest;
import com.baiye.annotation.Inner;
import com.baiye.http.CommonResponse;
import com.baiye.modules.platform.service.DeliveryRecordService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author Enzo
* @date : 2023/6/12
*/
@Api(tags = "支付宝支付")
@Slf4j
@RestController
@RequestMapping(value = "/callback/v1")
@AllArgsConstructor
public class CallBackConfigController {
private DeliveryRecordService deliveryRecordService;
@Inner(value = false)
@ApiOperation(value = "设置回调接口")
@GetMapping("/set/url")
public CommonResponse<Object> queryNotApproved(String url){
return CommonResponse.createBySuccess(deliveryRecordService.setCallBackUrl(url));
}
}

@ -1,6 +1,7 @@
package com.baiye.modules.platform.service;
import cn.hutool.core.date.DateTime;
import com.baiye.http.CommonResponse;
import com.baiye.modules.platform.domain.DeliveryRecord;
import com.baiye.modules.platform.service.dto.ImeiDTO;
@ -63,4 +64,11 @@ public interface DeliveryRecordService {
* @return
*/
Integer countByUserIdAndDate(Long userId, DateTime beginOfDay, DateTime endOfDay);
/**
*
* @param url
* @return
*/
Boolean setCallBackUrl(String url);
}

@ -2,10 +2,10 @@ package com.baiye.modules.platform.service.dto;
import com.google.gson.annotations.SerializedName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Builder;
import lombok.Data;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.List;
/**
@ -13,22 +13,27 @@ import java.util.List;
* @date : 2023/5/9
*/
@Data
@Builder
public class ExchangeStripsDTO implements Serializable {
@ApiModelProperty("签名")
@SerializedName("sign")
private String sign;
@SerializedName("req_id")
private String reqId;
@ApiModelProperty("批次号")
@SerializedName("batch_no")
private String batchNo;
@SerializedName("batch_id")
private String batchId;
@ApiModelProperty("时间戳")
@SerializedName("timestamp")
private Long timestamp;
@SerializedName("org_code")
private String orgCode;
@SerializedName("imeis")
@ApiModelProperty("请求参数")
private List<ImeiDTO> imeis;
@SerializedName("datas")
private List<Data> datas;
@lombok.Data
public static class Data {
@SerializedName("data")
private String data;
}
}

@ -0,0 +1,27 @@
package com.baiye.modules.platform.service.dto;
import com.google.gson.annotations.SerializedName;
import lombok.Builder;
import lombok.Data;
import java.io.Serializable;
/**
* @author Enzo
* @date : 2023/5/9
*/
@Data
@Builder
public class SetCallBackDTO implements Serializable {
@SerializedName("req_id")
private String reqId;
@SerializedName("org_code")
private String orgCode;
@SerializedName("call_back_url")
private String callBackUrl;
}

@ -1,17 +1,22 @@
package com.baiye.modules.platform.service.impl;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.text.StrPool;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONUtil;
import com.baiye.config.properties.ExchangeProperties;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.modules.platform.domain.DeliveryRecord;
import com.baiye.modules.platform.repository.DeliveryRecordRepository;
import com.baiye.modules.platform.service.DeliveryRecordService;
import com.baiye.modules.platform.service.dto.ExchangeStripsDTO;
import com.baiye.modules.platform.service.dto.ImeiDTO;
import com.baiye.util.RsaUtil;
import com.baiye.modules.platform.service.dto.SetCallBackDTO;
import com.google.common.collect.Lists;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
@ -20,12 +25,16 @@ import java.util.List;
* @author Enzo
* @date : 2022/10/18
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class DeliveryRecordServiceImpl implements DeliveryRecordService {
private final ExchangeProperties exchangeProperties;
private final DeliveryRecordRepository deliveryRecordRepository;
@Override
public Long saveDeliveryRecord(String filePath, String taskName,
Integer num, Long taskId, Long userId, Integer type, Integer exchangeType, Long downId) {
@ -55,18 +64,18 @@ public class DeliveryRecordServiceImpl implements DeliveryRecordService {
@Override
@SneakyThrows
public Boolean exchangeByInterFace(List<ImeiDTO> imeiDTOList, String taskImeiName, String publicKey, String privateKey) {
ExchangeStripsDTO stripsDTO = new ExchangeStripsDTO();
stripsDTO.setTimestamp(System.currentTimeMillis());
stripsDTO.setBatchNo(taskImeiName);
stripsDTO.setImeis(imeiDTOList);
// RSA签名
String sign = RsaUtil.sign
(JSONUtil.toJsonStr(stripsDTO),
RsaUtil.getPrivateKey(privateKey));
stripsDTO.setSign(sign);
HttpUtil.post("https://www.baidu.com/", JSONUtil.toJsonStr(stripsDTO));
List<ExchangeStripsDTO.Data> list = Lists.newArrayList();
imeiDTOList.forEach(imeiDTO -> {
ExchangeStripsDTO.Data data = new ExchangeStripsDTO.Data();
data.setData(Base64.encode(imeiDTO.getImei().concat(StrPool.COMMA).concat(imeiDTO.getTag())));
list.add(data);
});
ExchangeStripsDTO build = ExchangeStripsDTO.builder().batchId(taskImeiName).reqId
(RandomUtil.randomString(DefaultNumberConstants.TEN_NUMBER)).orgCode
(exchangeProperties.getOrgCode()).datas(list).build();
String post = HttpUtil.post(exchangeProperties.getSubmitUrl(), JSONUtil.toJsonStr(build));
log.info("============ the submit result as {} =========", JSONUtil.toJsonStr(post));
return Boolean.TRUE;
}
@ -75,4 +84,16 @@ public class DeliveryRecordServiceImpl implements DeliveryRecordService {
Integer num = deliveryRecordRepository.queryNumberByDateAndUser(beginOfDay, dateTime, userId);
return num != null ? num : DefaultNumberConstants.ZERO_NUMBER;
}
@Override
public Boolean setCallBackUrl(String url) {
SetCallBackDTO build = SetCallBackDTO.builder().callBackUrl(url).reqId
(RandomUtil.randomString(DefaultNumberConstants.TEN_NUMBER)).orgCode
(exchangeProperties.getOrgCode()).build();
String post = HttpUtil.post(exchangeProperties.getCallbackUrl(), JSONUtil.toJsonStr(build));
if (post.contains("true")) {
return Boolean.TRUE;
}
return Boolean.FALSE;
}
}

@ -115,16 +115,31 @@ public class DownRecordServiceImpl implements DownRecordService {
throw new BadRequestException(ResponseCode.SEND_MAIL_NUM_FRIEND.getDesc());
}
// 传输方式
Integer type = (Integer) redisUtils.get(CacheKey.DMP_REQUEST_TYPE);
Integer type = (Integer) redisUtils.get(CacheKey.DMP_REQUEST_FILE_TYPE);
if (ObjectUtil.isNotNull(type) && type.equals(DefaultNumberConstants.TWO_NUMBER)) {
// 每次200 数据
// 每次100000 数据
List<List<ImeiDTO>> partition = Lists.partition
(dtoArrayList, DefaultNumberConstants.ONE_HUNDRED_THOUSAND);
for (List<ImeiDTO> list : partition) {
String uuid = IdUtil.fastSimpleUUID();
String file = deliveryProperties.getFileUrl().concat(StrPool.SLASH).concat(uuid);
String taskImeiName = redisUtils.acquisitionBatch(MailRequestEnum.MM.getCacheName());
SendMailDTO sendMailDTO = FileAndMailUtil.zipFileAndSendDMPMail(list, file, taskImeiName, deliveryProperties, DefaultNumberConstants.TWO_NUMBER);
String filePath = deliveryProperties.getDmpDownPath().concat(uuid).concat(FileConstant.ZIP_FILE_SUB_NAME);
Long downId = this.createRecord(list.size(), "超级管理员", taskName, sendMailDTO.getZipPath(), filePath, DefaultNumberConstants.TWO_NUMBER);
deliveryRecordService.saveDeliveryRecord(sendMailDTO.getZipPath(), taskImeiName, list.size(), null,
SecurityUtils.getCurrentUserId(), DefaultNumberConstants.TWO_NUMBER, DefaultNumberConstants.TWO_NUMBER, downId);
}
return Boolean.TRUE;
}
// 每次1000 数据
List<List<ImeiDTO>> partition = Lists.partition
(dtoArrayList, DefaultNumberConstants.TWO_HUNDRED);
(dtoArrayList, DefaultNumberConstants.ONE_THOUSAND);
String uuid = IdUtil.fastSimpleUUID();
String file = deliveryProperties.getFileUrl().concat(StrPool.SLASH).concat(uuid);
String filePath = deliveryProperties.getDmpDownPath().concat(uuid).concat(FileConstant.ZIP_FILE_SUB_NAME);
// 只保存文件地址不发送邮件
String zipPath = FileAndMailUtil.zipFile(dtoArrayList, file, deliveryProperties);
String zipPath = FileAndMailUtil.zipFile(dtoArrayList, file, deliveryProperties.getZipPassword());
Long downId = this.createRecord(dtoArrayList.size(), "超级管理员", taskName, zipPath, filePath, DefaultNumberConstants.TWO_NUMBER);
for (List<ImeiDTO> list : partition) {
String taskImeiName = redisUtils.acquisitionBatch(MailRequestEnum.MM.getCacheName());
@ -132,28 +147,12 @@ public class DownRecordServiceImpl implements DownRecordService {
(list, taskImeiName, deliveryProperties.getPublicKey(), deliveryProperties.getPrivateKey());
if (Boolean.TRUE.equals(result)) {
deliveryRecordService.saveDeliveryRecord(zipPath, taskImeiName, list.size(), null,
SecurityUtils.getCurrentUserId(), DefaultNumberConstants.TWO_NUMBER, DefaultNumberConstants.TWO_NUMBER, downId);
SecurityUtils.getCurrentUserId(), DefaultNumberConstants.TWO_NUMBER, DefaultNumberConstants.ONE_NUMBER, downId);
}
log.info("=========== the interface conversion result is {} =========== ", result);
}
return Boolean.TRUE;
}
// 每次100000 数据
List<List<ImeiDTO>> partition = Lists.partition
(dtoArrayList, DefaultNumberConstants.FIFTY_THOUSAND);
for (List<ImeiDTO> list : partition) {
String uuid = IdUtil.fastSimpleUUID();
String file = deliveryProperties.getFileUrl().concat(StrPool.SLASH).concat(uuid);
String taskImeiName = redisUtils.acquisitionBatch(MailRequestEnum.MM.getCacheName());
SendMailDTO sendMailDTO = FileAndMailUtil.zipFileAndSendDMPMail(list, file, taskImeiName, deliveryProperties, DefaultNumberConstants.TWO_NUMBER);
String filePath = deliveryProperties.getDmpDownPath().concat(uuid).concat(FileConstant.ZIP_FILE_SUB_NAME);
Long downId = this.createRecord(list.size(), "超级管理员", taskName, sendMailDTO.getZipPath(), filePath, DefaultNumberConstants.TWO_NUMBER);
deliveryRecordService.saveDeliveryRecord(sendMailDTO.getZipPath(), taskImeiName, list.size(), null,
SecurityUtils.getCurrentUserId(), DefaultNumberConstants.TWO_NUMBER, DefaultNumberConstants.ONE_NUMBER, downId);
}
return Boolean.TRUE;
}
}
throw new BadRequestException(ResponseCode.SEND_MAIL_FRIEND.getDesc());
}
@ -168,8 +167,9 @@ public class DownRecordServiceImpl implements DownRecordService {
@Override
public String findPath(Long downId) {
return ObjectUtil.isNotNull(downRecordRepository.findById(downId).orElseGet(DownRecord::new))
? downRecordRepository.findById(downId).orElseGet(DownRecord::new).getResolveFilePath() : CharSequenceUtil.EMPTY;
DownRecord downRecord = downRecordRepository.findById(downId).orElseGet(DownRecord::new);
return ObjectUtil.isNotNull(downRecord) &&
StringUtils.isNotBlank(downRecord.getResolveFilePath()) ? downRecord.getResolveFilePath() : CharSequenceUtil.EMPTY;
}

@ -144,25 +144,28 @@ public class TaskImeiServiceImpl implements TaskImeiService {
(o -> ObjectUtil.isNotNull(o.getImei())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(filterList)) {
log.info("================ the exchange list size as {} =================", filterList.size());
// 传输方式
Integer type = (Integer) redisUtils.get(CacheKey.DMP_REQUEST_TYPE);
Integer type = (Integer) redisUtils.get(CacheKey.DMP_REQUEST_UPLOAD_TYPE);
if (ObjectUtil.isNotNull(type) && type.equals(DefaultNumberConstants.TWO_NUMBER)) {
Boolean result = deliveryRecordService.exchangeByInterFace
(filterList, taskImeiDTO.getBatchNo(), deliveryProperties.getPublicKey(), deliveryProperties.getPrivateKey());
if (Boolean.TRUE.equals(result)) {
Long recordId = deliveryRecordService.saveDeliveryRecord(null, taskImeiDTO.getBatchNo(), dtoList.size(),
null, (long) DefaultNumberConstants.ONE_NUMBER, DefaultNumberConstants.THREE_NUMBER, DefaultNumberConstants.TWO_NUMBER, null);
log.info("============= interface sending send recordId {} =============", recordId);
}
return CommonResponse.createBySuccess(DefaultNumberConstants.TWO_HUNDRED);
}
String file = deliveryProperties.getFileUrl().concat(StrPool.SLASH).concat(taskImeiDTO.getBatchNo());
SendMailDTO sendMailDTO = FileAndMailUtil.zipFileAndSendDMPMail
(filterList, file, taskImeiDTO.getBatchNo(), deliveryProperties, DefaultNumberConstants.TWO_NUMBER);
Long recordId = deliveryRecordService.saveDeliveryRecord(sendMailDTO.getZipPath(), taskImeiDTO.getBatchNo(), dtoList.size(),
null, (long) DefaultNumberConstants.ONE_NUMBER, DefaultNumberConstants.THREE_NUMBER, DefaultNumberConstants.TWO_NUMBER, null);
// 缓存一天
redisUtils.set(CacheKey.UPLOAD_BATCH.concat(taskImeiDTO.getBatchNo()), recordId, DefaultNumberConstants.ONE_NUMBER, TimeUnit.DAYS);
return CommonResponse.createBySuccess(DefaultNumberConstants.TWO_HUNDRED);
}
Boolean result = deliveryRecordService.exchangeByInterFace
(filterList, taskImeiDTO.getBatchNo(), deliveryProperties.getPublicKey(), deliveryProperties.getPrivateKey());
if (Boolean.TRUE.equals(result)) {
Long recordId = deliveryRecordService.saveDeliveryRecord(null, taskImeiDTO.getBatchNo(), dtoList.size(),
null, (long) DefaultNumberConstants.ONE_NUMBER, DefaultNumberConstants.THREE_NUMBER, DefaultNumberConstants.ONE_NUMBER, null);
// 缓存三天
// 缓存一
redisUtils.set(CacheKey.UPLOAD_BATCH.concat(taskImeiDTO.getBatchNo()), recordId, DefaultNumberConstants.ONE_NUMBER, TimeUnit.DAYS);
log.info("============= interface sending send recordId {} =============", recordId);
}
}
return CommonResponse.createBySuccess(DefaultNumberConstants.TWO_HUNDRED);
}

@ -112,7 +112,6 @@ public class DeliveryBalanceTask {
// 统计今天数量
Integer count = deliveryRecordService.countByUserIdAndDate
(userId, DateUtil.beginOfDay(now), DateUtil.endOfDay(now));
int sum = count + list.size();
// 下载统计
downList = CollUtil.sub(list, sum >= dmpLimitNum
@ -134,19 +133,19 @@ public class DeliveryBalanceTask {
// 总量超过50
if (CollUtil.isNotEmpty(list)) {
// 传输方式
Integer type = (Integer) redisUtils.get(CacheKey.DMP_REQUEST_TYPE);
Integer type = (Integer) redisUtils.get(CacheKey.DMP_REQUEST_UPLOAD_TYPE);
Boolean typeResult = ObjectUtil.isNotNull(type) && type.equals(DefaultNumberConstants.TWO_NUMBER);
// 邮件每次每次100000 数据 接口每次200
// 邮件每次每次100000 数据 接口每次1000
List<List<TaskImei>> lists = Lists.partition
(list, Boolean.TRUE.equals(typeResult)
? DefaultNumberConstants.TWO_HUNDRED : DefaultNumberConstants.ONE_HUNDRED_THOUSAND);
? DefaultNumberConstants.ONE_THOUSAND : DefaultNumberConstants.ONE_HUNDRED_THOUSAND);
for (List<TaskImei> taskImeiList : lists) {
// 发送并修改状态
sendMailAndUpdateImeiStatus(taskId, userId, typeResult, taskImeiList);
}
}
// 处理下载包
if (CollUtil.isNotEmpty(downList) && downList.size() > DefaultNumberConstants.ONE_THOUSAND) {
if (CollUtil.isNotEmpty(downList) && downList.size() > DefaultNumberConstants.TWO_HUNDRED) {
zipDownList(taskId, downList, userInfo);
}
} finally {
@ -182,31 +181,32 @@ public class DeliveryBalanceTask {
// 转换DTO
List<ImeiDTO> toList = Convert.toList(ImeiDTO.class, taskImeiList);
String taskImeiName = redisUtils.acquisitionBatch(MailRequestEnum.BY.getCacheName());
// 接口兑换
if (Boolean.TRUE.equals(typeResult)) {
String file = fileUrl.concat(StrPool.SLASH).concat(taskImeiName);
CommonLog.info("发送邮件,当前tag值为".concat(toList.get(DefaultNumberConstants.ZERO_NUMBER).getTag()));
SendMailDTO sendMailDTO = FileAndMailUtil.zipFileAndSendDMPMail(toList, file, taskImeiName, deliveryProperties, DefaultNumberConstants.ONE_NUMBER);
if (sendMailDTO.getSendResult().equals(Boolean.TRUE)) {
// 保存发送记录
deliveryRecordService.saveDeliveryRecord(sendMailDTO.getZipPath(), taskImeiName,
taskImeiList.size(), taskId, userId, DefaultNumberConstants.ONE_NUMBER, DefaultNumberConstants.TWO_NUMBER, null);
// 批次修改状态
taskImeiService.updateBath(taskId, CharSequenceUtil.EMPTY, DefaultNumberConstants.ONE_NUMBER, minId, maxId);
}
return;
}
// 接口兑换
Boolean result = deliveryRecordService.exchangeByInterFace
(toList, taskImeiName, deliveryProperties.getPublicKey(), deliveryProperties.getPrivateKey());
if (Boolean.TRUE.equals(result)) {
// 保存发送记录
deliveryRecordService.saveDeliveryRecord(null, taskImeiName,
toList.size(), taskId, userId, DefaultNumberConstants.ONE_NUMBER, DefaultNumberConstants.TWO_NUMBER, null);
toList.size(), taskId, userId, DefaultNumberConstants.ONE_NUMBER, DefaultNumberConstants.ONE_NUMBER, null);
// 批次修改状态
taskImeiService.updateBath(taskId,
CharSequenceUtil.EMPTY, DefaultNumberConstants.ONE_NUMBER, minId, maxId);
}
log.info("=============== the interface sending a request result as {} batchNo as {} minId {} maxId {} ===============", result, taskImeiName, minId, maxId);
return;
}
String file = fileUrl.concat(StrPool.SLASH).concat(taskImeiName);
CommonLog.info("发送邮件,当前tag值为".concat(toList.get(DefaultNumberConstants.ZERO_NUMBER).getTag()));
SendMailDTO sendMailDTO = FileAndMailUtil.zipFileAndSendDMPMail(toList, file, taskImeiName, deliveryProperties, DefaultNumberConstants.ONE_NUMBER);
if (sendMailDTO.getSendResult().equals(Boolean.TRUE)) {
// 保存发送记录
deliveryRecordService.saveDeliveryRecord(sendMailDTO.getZipPath(), taskImeiName,
taskImeiList.size(), taskId, userId, DefaultNumberConstants.ONE_NUMBER, DefaultNumberConstants.ONE_NUMBER, null);
// 批次修改状态
taskImeiService.updateBath(taskId, CharSequenceUtil.EMPTY, DefaultNumberConstants.ONE_NUMBER, minId, maxId);
}
}
}
}

@ -4,7 +4,6 @@ import cn.hutool.core.io.FileUtil;
import cn.hutool.core.text.StrPool;
import cn.hutool.core.util.ObjectUtil;
import com.baiye.config.properties.DeliveryProperties;
import com.baiye.constant.AdPlatFormConstants;
import com.baiye.constant.DefaultNumberConstants;
import com.baiye.constant.FileConstant;
import com.baiye.model.dto.wechat.SendMailDTO;
@ -12,7 +11,6 @@ import com.baiye.modules.platform.service.dto.ImeiDTO;
import lombok.extern.slf4j.Slf4j;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Enzo
@ -50,13 +48,13 @@ public class FileAndMailUtil {
return sendMailDTO;
}
public static String zipFile(List<ImeiDTO> list, String file, DeliveryProperties deliveryProperties) {
public static String zipFile(List<ImeiDTO> list, String file, String zipPassword) {
String csvPath = file.concat(StrPool.DOT).concat(FileConstant.CSV_FILE_SUB_NAME);
CSVFileUtil.createCsvFile(list, csvPath);
String zipPath = file.concat(FileConstant.ZIP_FILE_SUB_NAME);
// 设置压缩文件
CompressUtil.decryptionCompression
(zipPath, csvPath, deliveryProperties.getZipPassword());
(zipPath, csvPath, zipPassword);
return zipPath;
}

@ -106,3 +106,11 @@ wechat:
generate:
url: https://cb.tuoz.net
exchange:
org-code: org_by
callback-url: http://proxy.hzdaba.cn:58888/pub/data/set
submit-url: http://proxy.hzdaba.cn:58888/pub/data/submit

@ -2,6 +2,7 @@ package com.baiye;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.junit4.SpringRunner;
@ -12,6 +13,7 @@ import java.io.File;
* @author Enzo
* @date : 2023/6/6
*/
@Slf4j
@RunWith(SpringRunner.class)
public class FileTest {

@ -1,18 +1,15 @@
package com.baiye;
import cn.hutool.json.JSONUtil;
import com.baiye.modules.platform.service.dto.ExchangeStripsDTO;
import com.baiye.modules.platform.service.dto.ImeiDTO;
import com.baiye.modules.system.domain.User;
import com.baiye.util.RsaUtil;
import com.google.common.collect.Lists;
import com.google.gson.Gson;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import java.nio.charset.StandardCharsets;
import java.security.KeyPair;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
@ -30,22 +27,7 @@ public class SignTest {
@Test
public void signTest() {
List<ImeiDTO> objects = Lists.newArrayList();
ImeiDTO imeiDTO = new ImeiDTO();
Gson gson = new Gson();
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
ExchangeStripsDTO stripsDTO = new ExchangeStripsDTO();
stripsDTO.setTimestamp(System.currentTimeMillis());
stripsDTO.setBatchNo("XXXX");
imeiDTO.setImei("xxxxx");
imeiDTO.setTag("xxx_xxx");
objects.add(imeiDTO);
stripsDTO.setSign("sign");
stripsDTO.setImeis(objects);
System.out.println(gson.toJson(stripsDTO));
System.out.println(JSONUtil.toJsonStr(stripsDTO));
}

@ -5,6 +5,7 @@ import com.baiye.module.service.DmpCallbackService;
import com.baiye.module.service.dto.InterfaceResponseDTO;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@ -15,7 +16,7 @@ import org.springframework.web.bind.annotation.RestController;
* @author Enzo
* @date : 2023/3/2
*/
@Slf4j
@RestController
@RequestMapping("/dmp/v1/exchange")
@RequiredArgsConstructor
@ -27,6 +28,7 @@ public class CallbackController {
@ApiOperation(value = "兑换接口回调")
@PostMapping("/callback")
public CommonResponse<Object> queryNotApproved(@RequestBody @Validated InterfaceResponseDTO interfaceResponseDTO){
log.info("================ The receiving batch number is {} ================", interfaceResponseDTO.getBatchId());
return dmpCallbackService.resourceCallback(interfaceResponseDTO);
}
}

@ -1,12 +1,9 @@
package com.baiye.module.service.dto;
import com.fasterxml.jackson.annotation.JsonAlias;
import com.google.gson.annotations.SerializedName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import java.util.List;
/**
@ -15,23 +12,27 @@ import java.util.List;
*/
@Data
public class InterfaceResponseDTO {
@NotBlank
@ApiModelProperty("签名")
@SerializedName("sign")
private String sign;
@SerializedName("req_id")
private String reqId;
@NotBlank
@ApiModelProperty("批次号")
@SerializedName("bath_no")
@JsonAlias("bath_no")
private String bathNo;
@ApiModelProperty("时间戳")
@SerializedName("timestamp")
private Long timestamp;
@NotEmpty
@SerializedName("imeis")
@ApiModelProperty("返回参数")
private List<ImeiZDTO> imeis;
@SerializedName("bath_id")
private String batchId;
@SerializedName("org_code")
private String orgCode;
@SerializedName("result")
private Integer result;
@SerializedName("datas")
private List<Data> datas;
@lombok.Data
public static class Data {
@SerializedName("data")
private String data;
}
}

@ -1,13 +1,14 @@
package com.baiye.module.service.impl;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.text.StrPool;
import cn.hutool.core.text.csv.CsvUtil;
import cn.hutool.core.text.csv.CsvWriter;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import com.baiye.config.properties.DeliveryProperties;
import com.baiye.constant.AdPlatFormConstants;
import com.baiye.constant.DefaultNumberConstants;
@ -23,16 +24,15 @@ import com.baiye.module.entity.Task;
import com.baiye.module.service.ClueService;
import com.baiye.module.service.DeliveryRecordService;
import com.baiye.module.service.DmpCallbackService;
import com.baiye.module.service.dto.ImeiZDTO;
import com.baiye.module.service.dto.InterfaceResponseDTO;
import com.baiye.util.*;
import com.google.common.base.Joiner;
import com.google.common.base.Splitter;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import net.lingala.zip4j.exception.ZipException;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpStatus;
import org.springframework.stereotype.Service;
@ -43,7 +43,6 @@ import java.util.List;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* @author Enzo
@ -71,48 +70,47 @@ public class DmpCallbackServiceImpl implements DmpCallbackService {
@Override
@SneakyThrows
@Transactional(rollbackFor = Exception.class)
public CommonResponse<Object> resourceCallback(InterfaceResponseDTO interfaceResponseDTO) {
String sign = interfaceResponseDTO.getSign();
String bathNo = interfaceResponseDTO.getBathNo();
public CommonResponse<Object> resourceCallback(InterfaceResponseDTO responseDTO) {
String bathNo = responseDTO.getBatchId();
Object objCache = redisUtils.get(bathNo);
if (ObjectUtil.isNotNull(objCache)) {
return CommonResponse.createByError();
}
interfaceResponseDTO.setSign(null);
if (!RsaUtil.verify(JSONUtil.toJsonStr(interfaceResponseDTO),
RsaUtil.getPublicKey(deliveryProperties.getPublicKey()), sign)) {
return CommonResponse.createByErrorMessage("visa verification failure");
return CommonResponse.createByErrorCodeMessage
(ResponseCode.BATCH_NUMBER_EXIST_OR_SEND.getCode(),
ResponseCode.BATCH_NUMBER_REPEAT_TRANSMISSION.getDesc());
}
// 设置分钟缓存
redisUtils.set(bathNo, bathNo, DefaultNumberConstants.TEN_NUMBER, TimeUnit.MINUTES);
// 设置五分钟缓存
redisUtils.set(bathNo, bathNo, DefaultNumberConstants.FIVE_NUMBER, TimeUnit.MINUTES);
DeliveryRecord byTaskName = deliveryRecordService.findByTaskName(bathNo);
if (ObjectUtil.isNotNull(byTaskName)
&& byTaskName.getStatus() == DefaultNumberConstants.ZERO_NUMBER) {
log.info("================ the receive data taskName as {} ==============", bathNo);
Long taskId = byTaskName.getTaskId();
List<String> tagList = Lists.newArrayList();
List<ImeiZDTO> list = interfaceResponseDTO.getImeis();
List<String> phoneList = Lists.newArrayList();
List<List<String>> originalList = Lists.newArrayList();
if (responseDTO.getResult() == DefaultNumberConstants.ZERO_NUMBER
&& CollUtil.isNotEmpty(responseDTO.getDatas())) {
aggregateData(responseDTO, byTaskName, tagList, phoneList, originalList);
}
if (ObjectUtil.isNotNull(byTaskName.getType())) {
List<String> phoneList = list.stream().map(ImeiZDTO::getZid).collect(Collectors.toList());
// 去除重复数据
tagList = Lists.newArrayList(Sets.newHashSet(phoneList));
phoneList = Lists.newArrayList(Sets.newHashSet(phoneList));
List<String> responseList = DecryptPnoUtil.decryptPhoneList(phoneList);
// 剔除空值
responseList = responseList.stream().filter(StringUtils::isNotBlank).collect(Collectors.toList());
// 请求黑名单
if (CollUtil.isNotEmpty(responseList)) {
log.info("=================== the responseList size as {} =====================", responseList.size());
if (byTaskName.getType() == DefaultNumberConstants.ONE_NUMBER) {
saveClue(bathNo, byTaskName, taskId, tagList, responseList);
}
if (byTaskName.getType() == DefaultNumberConstants.THREE_NUMBER) {
sendRequest(bathNo, tagList, responseList);
}
if (byTaskName.getType() == DefaultNumberConstants.TWO_NUMBER) {
downResource(bathNo, byTaskName, list, responseList);
downResource(bathNo, byTaskName, originalList, responseList);
}
}
if (byTaskName.getType() == DefaultNumberConstants.THREE_NUMBER) {
sendRequest(bathNo, tagList, responseList);
}
}
return CommonResponse.createBySuccess(HttpStatus.SC_OK);
@ -123,7 +121,9 @@ public class DmpCallbackServiceImpl implements DmpCallbackService {
}
private void saveClue(String taskName, DeliveryRecord byTaskName, Long taskId, List<String> tagList, List<String> decryptList) {
private void saveClue(String taskName, DeliveryRecord byTaskName, Long
taskId, List<String> tagList, List<String> decryptList) {
// 请求黑名单
List<String> isNotblackList = IsBlackUtil.getNotblackList(decryptList);
// 将imei转为线索
Integer saveNumer = clueService.saveClue(tagList, isNotblackList,
@ -146,56 +146,78 @@ public class DmpCallbackServiceImpl implements DmpCallbackService {
}
private void downResource(String taskName, DeliveryRecord byTaskName, List<ImeiZDTO> list, List<String> responseList) throws ZipException {
List<String> csvList = Lists.newArrayList();
@SneakyThrows
private void downResource(String taskName, DeliveryRecord
byTaskName, List<List<String>> originalList, List<String> responseList) {
String uuid = IdUtil.fastSimpleUUID();
List<String> csvList = Lists.newArrayList();
originalList = Lists.newArrayList(Sets.newHashSet(originalList));
String file = deliveryProperties.getFileUrl().concat(StrPool.SLASH).concat(uuid);
String path = String.valueOf(redisUtils.get(CacheKey.DMP_DOWN_URL.concat(String.valueOf(byTaskName.getDownId()))));
// 查询缓存
if (StringUtils.isBlank(path)) {
path = deliveryRecordClient.queryPath(byTaskName.getDownId(), SecurityConstants.FROM_IN).getBody();
}
Object objPath = redisUtils.get(CacheKey.DMP_DOWN_URL.concat(String.valueOf(byTaskName.getDownId())));
String path = ObjectUtil.isNotNull(objPath) ?
String.valueOf(objPath) : deliveryRecordClient.queryPath
(byTaskName.getDownId(), SecurityConstants.FROM_IN).getBody();
if (ObjectUtil.isNotNull(path)) {
// 解压文件
String unzipPath =
CompressUtil.unzipFiles(deliveryProperties.getFileUrl(),
path, deliveryProperties.getZipPassword());
String unzipPath = CompressUtil.unzipFiles
(deliveryProperties.getFileUrl(), path, deliveryProperties.getZipPassword());
File unzipFile = new File(unzipPath);
File parseFile = Objects.requireNonNull
(unzipFile.listFiles())[DefaultNumberConstants.ZERO_NUMBER];
// 解析文件
for (int i = 0; i < responseList.size(); i++) {
ImeiZDTO dto = list.get(i);
String encrypt = EncryptUtil.aesEncrypt(responseList.get(i), AdPlatFormConstants.PLAT_DECRYPTION);
List<String> collect = Stream.of(dto.getImei(), dto.getTag(), dto.getZid(), encrypt).collect(Collectors.toList());
String join = Joiner.on(StrPool.COMMA).skipNulls().join(collect);
List<String> stringList = Lists.newArrayList(originalList.get(i));
stringList.add(EncryptUtil.aesEncrypt(responseList.get(i), AdPlatFormConstants.PLAT_DECRYPTION));
String join = Joiner.on(StrPool.COMMA).skipNulls().join(stringList);
csvList.add(join);
}
FileZipUtil.writeToCsv(csvList, parseFile.getPath(), Boolean.TRUE);
// 设置压缩文件
CompressUtil.decryptionCompression(path, parseFile.getPath(), null);
deliveryRecordService.updateStatusByTaskName(DefaultNumberConstants.ONE_NUMBER, responseList.size(), taskName);
FileUtil.del(unzipPath);
return;
}
// 首次加载
String csvPath = file.concat(StrPool.DOT).concat(FileConstant.CSV_FILE_SUB_NAME);
String zipPath = file.concat(FileConstant.ZIP_FILE_SUB_NAME);
CsvWriter writer = CsvUtil.getWriter(csvPath, CharsetUtil.CHARSET_UTF_8);
String zipPath = file.concat(FileConstant.ZIP_FILE_SUB_NAME);
for (int i = 0; i < responseList.size(); i++) {
ImeiZDTO dto = list.get(i);
String encrypt = EncryptUtil.aesEncrypt(responseList.get(i), AdPlatFormConstants.PLAT_DECRYPTION);
String[] objects = Stream.of(dto.getImei(), dto.getTag(), dto.getZid(), encrypt).toArray(String[]::new);
writer.writeLine(objects);
List<String> stringList = Lists.newArrayList(originalList.get(i));
stringList.add(EncryptUtil.aesEncrypt(responseList.get(i), AdPlatFormConstants.PLAT_DECRYPTION));
writer.writeLine(stringList.toArray(new String[DefaultNumberConstants.ZERO_NUMBER]));
}
writer.close();
// 设置压缩文件
CompressUtil.decryptionCompression(zipPath, csvPath, null);
String filePath = zipPath.substring
(zipPath.lastIndexOf(StrPool.SLASH) + DefaultNumberConstants.ONE_NUMBER);
FileUtil.del(csvPath);
String downUrl = deliveryProperties.getDmpDownPath().concat(filePath);
deliveryRecordService.updateStatusByTaskName(DefaultNumberConstants.ONE_NUMBER, responseList.size(), taskName);
deliveryRecordClient.updatePath(zipPath, downUrl, byTaskName.getDownId(), SecurityConstants.FROM_IN);
redisUtils.set(CacheKey.DMP_DOWN_URL.concat(String.valueOf(byTaskName.getDownId())), downUrl, DefaultNumberConstants.ONE_NUMBER, TimeUnit.DAYS);
deliveryRecordService.updateStatusByTaskName(DefaultNumberConstants.ONE_NUMBER, responseList.size(), taskName);
redisUtils.set(CacheKey.DMP_DOWN_URL.concat(String.valueOf(byTaskName.getDownId())), zipPath, DefaultNumberConstants.ONE_NUMBER, TimeUnit.DAYS);
}
private static void aggregateData(InterfaceResponseDTO responseDTO, DeliveryRecord byTaskName, List<String> tagList, List<String> phoneList, List<List<String>> originalList) {
for (InterfaceResponseDTO.Data data : responseDTO.getDatas()) {
List<String> stringList = Splitter.on(StrPool.COMMA).trimResults()
.omitEmptyStrings().splitToList(Base64.decodeStr(data.getData()));
if (byTaskName.getType() == DefaultNumberConstants.ONE_NUMBER) {
String type = stringList.get(DefaultNumberConstants.THREE_NUMBER);
if (ValidationUtil.isInteger(type)) {
Integer number = Integer.valueOf(type);
if (DisplayNumberUtil.getDefaultSkipNumber().contains(number)) {
continue;
}
}
}
if (stringList.size() > DefaultNumberConstants.THREE_NUMBER) {
originalList.add(stringList);
tagList.add(stringList.get(DefaultNumberConstants.ONE_NUMBER));
phoneList.add(stringList.get(DefaultNumberConstants.TWO_NUMBER));
}
}
}
}

@ -62,7 +62,7 @@ public class GenderConversionTask {
// 单次查询10000
List<Map<Long, String>> resourceList = clueService.queryUnconvertedResource
(DefaultNumberConstants.ZERO_NUMBER, DefaultNumberConstants.TEN_THOUSAND);
if (CollUtil.isNotEmpty(resourceList)) {
if (resourceList.size() > DefaultNumberConstants.ONE_THOUSAND && CollUtil.isNotEmpty(resourceList)) {
// 对应转换
List<QueryClueDTO> list = Convert.toList(QueryClueDTO.class, resourceList);
// 第一id

@ -57,14 +57,15 @@ public class MailSourceTask {
private final ClueService clueService;
private final DeliveryRecordClient deliveryRecordClient;
private final ClueTalkRepository clueTalkRepository;
private final DeliveryProperties deliveryProperties;
private final DeliveryRecordClient deliveryRecordClient;
private final DeliveryRecordService deliveryRecordService;
/**
*
*/
@ -92,9 +93,7 @@ public class MailSourceTask {
if (ObjectUtil.isNotNull(byTaskName)
&& byTaskName.getStatus() == DefaultNumberConstants.ZERO_NUMBER) {
log.info("================ the receive mail taskName as {} ==============", taskName);
Task task = new Task();
List<String> decryptList;
Long taskId = byTaskName.getTaskId();
CsvReader reader = CsvUtil.getReader();
List<String> tagList = Lists.newArrayList();
List<String> phoneList = Lists.newArrayList();
@ -111,20 +110,7 @@ public class MailSourceTask {
(file.listFiles())[DefaultNumberConstants.ZERO_NUMBER];
// 解析文件
CsvData data = reader.read(parseFile);
// csv通配
for (CsvRow row : data.getRows()) {
if (byTaskName.getType() == DefaultNumberConstants.ONE_NUMBER
&& row.size() == DefaultNumberConstants.FOUR_NUMBER) {
Integer number = Integer.valueOf(row.get(DefaultNumberConstants.THREE_NUMBER));
if (DisplayNumberUtil.getDefaultSkipNumber().contains(number)) {
continue;
}
}
phoneList.add(row.size() == DefaultNumberConstants.THREE_NUMBER
? row.get(DefaultNumberConstants.ONE_NUMBER) : row.get(DefaultNumberConstants.TWO_NUMBER));
tagList.add(row.size() == DefaultNumberConstants.THREE_NUMBER
? row.get(DefaultNumberConstants.ZERO_NUMBER) : row.get(DefaultNumberConstants.ONE_NUMBER));
}
parsingFile(byTaskName, tagList, phoneList, data);
// 去除重复
List<String> phoneSets = Lists.newArrayList(Sets.newHashSet(phoneList));
log.info("=============== the phone list as {} ==================", phoneList.size());
@ -135,7 +121,7 @@ public class MailSourceTask {
log.info("=================== the decryptList size as {} =====================", decryptList.size());
if (byTaskName.getType() == DefaultNumberConstants.ONE_NUMBER) {
CommonLog.info("接收邮件,当前tag值为".concat(tagList.get(DefaultNumberConstants.ZERO_NUMBER)));
saveClue(taskName, byTaskName, task, taskId, tagList, decryptList, path, unzipPath, parseFile);
saveClue(taskName, byTaskName, tagList, decryptList, path, unzipPath);
}
if (byTaskName.getType() == DefaultNumberConstants.TWO_NUMBER) {
downResource(taskName, byTaskName, decryptList, path, data.getRows(), parseFile);
@ -143,6 +129,7 @@ public class MailSourceTask {
if (byTaskName.getType() == DefaultNumberConstants.THREE_NUMBER) {
sendRequest(taskName, tagList, decryptList, path, unzipPath);
}
FileUtil.del(path);
}
}
}
@ -151,6 +138,26 @@ public class MailSourceTask {
}
}
private static void parsingFile(DeliveryRecord byTaskName, List<String> tagList, List<String> phoneList, CsvData data) {
// csv通配
for (CsvRow row : data.getRows()) {
if (byTaskName.getType() == DefaultNumberConstants.ONE_NUMBER
&& row.size() == DefaultNumberConstants.FOUR_NUMBER) {
String type = row.get(DefaultNumberConstants.THREE_NUMBER);
if (ValidationUtil.isInteger(type)) {
Integer number = Integer.valueOf(type);
if (DisplayNumberUtil.getDefaultSkipNumber().contains(number)) {
continue;
}
}
}
phoneList.add(row.size() == DefaultNumberConstants.THREE_NUMBER
? row.get(DefaultNumberConstants.ONE_NUMBER) : row.get(DefaultNumberConstants.TWO_NUMBER));
tagList.add(row.size() == DefaultNumberConstants.THREE_NUMBER
? row.get(DefaultNumberConstants.ZERO_NUMBER) : row.get(DefaultNumberConstants.ONE_NUMBER));
}
}
private void downResource(String taskName, DeliveryRecord byTaskName, List<String> decryptList, String path, List<CsvRow> rows, File parseFile) {
log.info("========================= the path as {} =========================", path);
@ -175,12 +182,13 @@ public class MailSourceTask {
log.info("============== message parsing succeeded file path as {} unzip path as {} ===============", path, unzipPath);
}
private void saveClue(String taskName, DeliveryRecord byTaskName, Task task, Long taskId, List<String> tagList, List<String> decryptList, String path, String unzipPath, File parseFile) {
private void saveClue(String taskName, DeliveryRecord byTaskName, List<String> tagList, List<String> decryptList, String path, String unzipPath) {
Task task = new Task();
Long taskId = byTaskName.getTaskId();
List<String> isNotblackList = IsBlackUtil.getNotblackList(decryptList);
// 将imei转为线索
Integer saveNumer = clueService.saveClue
(tagList, isNotblackList,
byTaskName.getTaskId(),
(tagList, isNotblackList, taskId,
byTaskName.getUserId(), DefaultNumberConstants.FOUR_NUMBER);
// 修改任务总条数
Integer taskNum = clueTalkRepository.findTaskNum(taskId);

@ -19,24 +19,7 @@ public class ResponseTest {
@Test
public void signTest() throws Exception {
List<ImeiZDTO> objects = Lists.newArrayList();
ImeiZDTO imeiDTO = new ImeiZDTO();
Gson gson = new Gson();
InterfaceResponseDTO stripsDTO = new InterfaceResponseDTO();
stripsDTO.setTimestamp(System.currentTimeMillis());
stripsDTO.setBathNo("BY_20230512_124");
imeiDTO.setImei("216f7a59d24498e204ef5efd6b383b39");
imeiDTO.setTag("jl-hzjq0-flzx0-001");
imeiDTO.setZid("xxxxxxxxxx");
objects.add(imeiDTO);
stripsDTO.setImeis(objects);
String sign = RsaUtil.sign(JSONUtil.toJsonStr(stripsDTO), RsaUtil.getPrivateKey("MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAJi+nz0zudS+4Sh+SmTnRfzgJOBIEwlLlJhcRgUbInvFx03zUgdzOUrGsvD2OTPPssnY8dv+Zgz2kUSEDYaWWKUs+VAklVOo0sOxzRMaUfwHRBN3Eq9OkqibDerYf6WUdv1k1BJsXSIdTlz8m6rtVbPF2hz8x/kYyJFzhM2IKTITAgMBAAECgYAgTZAXvWy7lXLAwZSyKkce57hkxllgSd+vKTSVt9tfGcDAt4jNkoy3R7ZoR2ppjq9dCMh9ohuq+ipWtya1I+6zC5sflk9HI/rf+5bq3JRJvxq3EJYe5DlSjQitLUMRP6PQorHnZZj/bdqKgRvrulI8XtK5Fv9Cd4jhkbSZtzgpYQJBAOJu0nu4qJCqIYLCmFWDpRzi9cu8/TFCBLVDH0xhNi28JL6G8xOfdzxsQa8ZlLOxPwn56VbS3+Korq34WCOAG5cCQQCssI4I7dshlA7kXeurVSFvui1YV/7ofFOxRs019+V88tfwNby5TAS9YjX7AuvGkobjpBBNEkE0JExf69m6VBzlAkB5te4HuLNKx1gp7CVr2c43n7tVHynNf1n+gKzjJmGz5ayuiOVBx/aUkPAhiZOHnx9uYlnNZJ4ZPGhgdNwTgPnTAkB61pQSMe/AMOtu8ogjNck1CoAa6W0/vsBhx/VNQGsTuEJ2ciMuw65TcLrpNKi2daBR6XBXAnczOebCDKix7AcpAkEArrU+bx6GwR+UbgoNAl1KwFLrV50pasK7Mlp0BkHM0cz4BGB53O5ng+TJHzen03OgC9I1W1WFAYHj03lb84qM/w=="));
stripsDTO.setSign(sign);
boolean verify = RsaUtil.verify(JSONUtil.toJsonStr(stripsDTO), RsaUtil.getPublicKey("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCYvp89M7nUvuEofkpk50X84CTgSBMJS5SYXEYFGyJ7xcdN81IHczlKxrLw9jkzz7LJ2PHb/mYM9pFEhA2GllilLPlQJJVTqNLDsc0TGlH8B0QTdxKvTpKomw3q2H+llHb9ZNQSbF0iHU5c/Juq7VWzxdoc/Mf5GMiRc4TNiCkyEwIDAQAB"), sign);
System.out.println(gson.toJson(stripsDTO));
System.out.println(verify);
}

Loading…
Cancel
Save