From 1bed868fdda4a0af0f607f9ba2d35286943e3e93 Mon Sep 17 00:00:00 2001 From: bynt Date: Mon, 12 Jun 2023 13:10:03 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=9D=9E=E7=A9=BA?= =?UTF-8?q?=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/baiye/task/GenderConversionTask.java | 2 +- .../src/main/java/com/baiye/task/MailSourceTask.java | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/ad-platform-services/ad-platform-source/src/main/java/com/baiye/task/GenderConversionTask.java b/ad-platform-services/ad-platform-source/src/main/java/com/baiye/task/GenderConversionTask.java index a35f055e..01162064 100644 --- a/ad-platform-services/ad-platform-source/src/main/java/com/baiye/task/GenderConversionTask.java +++ b/ad-platform-services/ad-platform-source/src/main/java/com/baiye/task/GenderConversionTask.java @@ -62,7 +62,7 @@ public class GenderConversionTask { // 单次查询10000 List> resourceList = clueService.queryUnconvertedResource (DefaultNumberConstants.ZERO_NUMBER, DefaultNumberConstants.TEN_THOUSAND); - if (CollUtil.isNotEmpty(resourceList)) { + if (resourceList.size() > DefaultNumberConstants.ONE_THOUSAND && CollUtil.isNotEmpty(resourceList)) { // 对应转换 List list = Convert.toList(QueryClueDTO.class, resourceList); // 第一id diff --git a/ad-platform-services/ad-platform-source/src/main/java/com/baiye/task/MailSourceTask.java b/ad-platform-services/ad-platform-source/src/main/java/com/baiye/task/MailSourceTask.java index 28033d57..9276b030 100644 --- a/ad-platform-services/ad-platform-source/src/main/java/com/baiye/task/MailSourceTask.java +++ b/ad-platform-services/ad-platform-source/src/main/java/com/baiye/task/MailSourceTask.java @@ -115,9 +115,12 @@ public class MailSourceTask { 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; + 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 From 907406ec5ac882e75310a4e8b92c20e26fe0fd9c Mon Sep 17 00:00:00 2001 From: bynt Date: Tue, 13 Jun 2023 15:34:13 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=8F=91=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/baiye/http/ResponseCode.java | 5 + .../main/java/com/baiye/util/CacheKey.java | 8 +- .../baiye/util/TripartiteResponseUtil.java | 2 + .../java/com/baiye/config/ParamsRunner.java | 12 +- .../config/properties/ExchangeProperties.java | 23 ++++ .../rest/CallBackConfigController.java | 36 ++++++ .../service/DeliveryRecordService.java | 8 ++ .../service/dto/ExchangeStripsDTO.java | 29 +++-- .../platform/service/dto/SetCallBackDTO.java | 27 +++++ .../impl/DeliveryRecordServiceImpl.java | 47 ++++++-- .../service/impl/DownRecordServiceImpl.java | 56 ++++----- .../service/impl/TaskImeiServiceImpl.java | 35 +++--- .../com/baiye/timed/DeliveryBalanceTask.java | 42 +++---- .../java/com/baiye/util/FileAndMailUtil.java | 6 +- .../src/main/resources/config/application.yml | 8 ++ .../src/test/java/com/baiye/FileTest.java | 2 + .../src/test/java/com/baiye/SignTest.java | 18 --- .../module/controller/CallbackController.java | 4 +- .../service/dto/InterfaceResponseDTO.java | 41 ++++--- .../service/impl/DmpCallbackServiceImpl.java | 114 +++++++++++------- .../java/com/baiye/task/MailSourceTask.java | 55 +++++---- 21 files changed, 369 insertions(+), 209 deletions(-) create mode 100644 ad-platform-manage/ad-platform-management/src/main/java/com/baiye/config/properties/ExchangeProperties.java create mode 100644 ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/rest/CallBackConfigController.java create mode 100644 ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/service/dto/SetCallBackDTO.java diff --git a/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/http/ResponseCode.java b/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/http/ResponseCode.java index 64617564..9bf1d0fa 100644 --- a/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/http/ResponseCode.java +++ b/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/http/ResponseCode.java @@ -52,6 +52,11 @@ public enum ResponseCode { * 批次号不存在或已发送 */ BATCH_NUMBER_EXIST_OR_SEND(400, "批次号不存在或已发送"), + + /** + * 重复发送 + */ + BATCH_NUMBER_REPEAT_TRANSMISSION(400, "批次号不存在或已发送"), /** * 用户账号过期 */ diff --git a/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/util/CacheKey.java b/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/util/CacheKey.java index efda73dc..0c12b0ec 100644 --- a/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/util/CacheKey.java +++ b/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/util/CacheKey.java @@ -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"; diff --git a/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/util/TripartiteResponseUtil.java b/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/util/TripartiteResponseUtil.java index bff51873..8589ec9d 100644 --- a/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/util/TripartiteResponseUtil.java +++ b/ad-platform-common/ad-platform-common-core/src/main/java/com/baiye/util/TripartiteResponseUtil.java @@ -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() { } diff --git a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/config/ParamsRunner.java b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/config/ParamsRunner.java index 7a9aff7d..d1f7288e 100644 --- a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/config/ParamsRunner.java +++ b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/config/ParamsRunner.java @@ -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); } } } diff --git a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/config/properties/ExchangeProperties.java b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/config/properties/ExchangeProperties.java new file mode 100644 index 00000000..b917cd69 --- /dev/null +++ b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/config/properties/ExchangeProperties.java @@ -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; + + +} diff --git a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/rest/CallBackConfigController.java b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/rest/CallBackConfigController.java new file mode 100644 index 00000000..dc220085 --- /dev/null +++ b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/rest/CallBackConfigController.java @@ -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 queryNotApproved(String url){ + return CommonResponse.createBySuccess(deliveryRecordService.setCallBackUrl(url)); + } + + + +} diff --git a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/service/DeliveryRecordService.java b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/service/DeliveryRecordService.java index f1ef6d4b..0dbf9c71 100644 --- a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/service/DeliveryRecordService.java +++ b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/service/DeliveryRecordService.java @@ -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); } diff --git a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/service/dto/ExchangeStripsDTO.java b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/service/dto/ExchangeStripsDTO.java index 66d27cdb..bb36d5b3 100644 --- a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/service/dto/ExchangeStripsDTO.java +++ b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/service/dto/ExchangeStripsDTO.java @@ -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 imeis; + + @SerializedName("datas") + private List datas; + + @lombok.Data + public static class Data { + @SerializedName("data") + private String data; + } } diff --git a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/service/dto/SetCallBackDTO.java b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/service/dto/SetCallBackDTO.java new file mode 100644 index 00000000..9250c2a4 --- /dev/null +++ b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/service/dto/SetCallBackDTO.java @@ -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; + + +} diff --git a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/service/impl/DeliveryRecordServiceImpl.java b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/service/impl/DeliveryRecordServiceImpl.java index 48aa6342..a30c0ef9 100644 --- a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/service/impl/DeliveryRecordServiceImpl.java +++ b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/service/impl/DeliveryRecordServiceImpl.java @@ -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 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 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; + } } diff --git a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/service/impl/DownRecordServiceImpl.java b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/service/impl/DownRecordServiceImpl.java index 4626b100..83c57744 100644 --- a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/service/impl/DownRecordServiceImpl.java +++ b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/service/impl/DownRecordServiceImpl.java @@ -115,42 +115,41 @@ 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> partition = Lists.partition - (dtoArrayList, DefaultNumberConstants.TWO_HUNDRED); - 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); - Long downId = this.createRecord(dtoArrayList.size(), "超级管理员", taskName, zipPath, filePath, DefaultNumberConstants.TWO_NUMBER); + (dtoArrayList, DefaultNumberConstants.ONE_HUNDRED_THOUSAND); for (List list : partition) { + String uuid = IdUtil.fastSimpleUUID(); + String file = deliveryProperties.getFileUrl().concat(StrPool.SLASH).concat(uuid); String taskImeiName = redisUtils.acquisitionBatch(MailRequestEnum.MM.getCacheName()); - Boolean result = deliveryRecordService.exchangeByInterFace - (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); - } - log.info("=========== the interface conversion result is {} =========== ", result); + 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; } - - // 每次100000 数据 + // 每次1000 数据 List> partition = Lists.partition - (dtoArrayList, DefaultNumberConstants.FIFTY_THOUSAND); + (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.getZipPassword()); + Long downId = this.createRecord(dtoArrayList.size(), "超级管理员", taskName, zipPath, filePath, DefaultNumberConstants.TWO_NUMBER); for (List 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); + Boolean result = deliveryRecordService.exchangeByInterFace + (list, taskImeiName, deliveryProperties.getPublicKey(), deliveryProperties.getPrivateKey()); + if (Boolean.TRUE.equals(result)) { + deliveryRecordService.saveDeliveryRecord(zipPath, taskImeiName, list.size(), null, + SecurityUtils.getCurrentUserId(), DefaultNumberConstants.TWO_NUMBER, DefaultNumberConstants.ONE_NUMBER, downId); + } + log.info("=========== the interface conversion result is {} =========== ", result); } return Boolean.TRUE; } @@ -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; } diff --git a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/service/impl/TaskImeiServiceImpl.java b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/service/impl/TaskImeiServiceImpl.java index 0be01b91..9b250d76 100644 --- a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/service/impl/TaskImeiServiceImpl.java +++ b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/service/impl/TaskImeiServiceImpl.java @@ -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); - 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); - } + Integer type = (Integer) redisUtils.get(CacheKey.DMP_REQUEST_UPLOAD_TYPE); + if (ObjectUtil.isNotNull(type) && type.equals(DefaultNumberConstants.TWO_NUMBER)) { + 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); } - 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.ONE_NUMBER, null); - // 缓存三天 - redisUtils.set(CacheKey.UPLOAD_BATCH.concat(taskImeiDTO.getBatchNo()), recordId, DefaultNumberConstants.ONE_NUMBER, TimeUnit.DAYS); + 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); } diff --git a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/timed/DeliveryBalanceTask.java b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/timed/DeliveryBalanceTask.java index fe085fd4..7e7d7d26 100644 --- a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/timed/DeliveryBalanceTask.java +++ b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/timed/DeliveryBalanceTask.java @@ -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> lists = Lists.partition (list, Boolean.TRUE.equals(typeResult) - ? DefaultNumberConstants.TWO_HUNDRED : DefaultNumberConstants.ONE_HUNDRED_THOUSAND); + ? DefaultNumberConstants.ONE_THOUSAND : DefaultNumberConstants.ONE_HUNDRED_THOUSAND); for (List 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 toList = Convert.toList(ImeiDTO.class, taskImeiList); String taskImeiName = redisUtils.acquisitionBatch(MailRequestEnum.BY.getCacheName()); - // 接口兑换 + if (Boolean.TRUE.equals(typeResult)) { - Boolean result = deliveryRecordService.exchangeByInterFace - (toList, taskImeiName, deliveryProperties.getPublicKey(), deliveryProperties.getPrivateKey()); - if (Boolean.TRUE.equals(result)) { + 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(null, taskImeiName, - toList.size(), taskId, userId, DefaultNumberConstants.ONE_NUMBER, DefaultNumberConstants.TWO_NUMBER, null); + 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); + 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)) { + // 接口兑换 + Boolean result = deliveryRecordService.exchangeByInterFace + (toList, taskImeiName, deliveryProperties.getPublicKey(), deliveryProperties.getPrivateKey()); + if (Boolean.TRUE.equals(result)) { // 保存发送记录 - deliveryRecordService.saveDeliveryRecord(sendMailDTO.getZipPath(), taskImeiName, - taskImeiList.size(), taskId, userId, DefaultNumberConstants.ONE_NUMBER, DefaultNumberConstants.ONE_NUMBER, null); + deliveryRecordService.saveDeliveryRecord(null, taskImeiName, + toList.size(), taskId, userId, DefaultNumberConstants.ONE_NUMBER, DefaultNumberConstants.ONE_NUMBER, null); // 批次修改状态 - taskImeiService.updateBath(taskId, CharSequenceUtil.EMPTY, DefaultNumberConstants.ONE_NUMBER, minId, maxId); + 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); } } } diff --git a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/util/FileAndMailUtil.java b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/util/FileAndMailUtil.java index 74c5530e..7c821cf4 100644 --- a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/util/FileAndMailUtil.java +++ b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/util/FileAndMailUtil.java @@ -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 list, String file, DeliveryProperties deliveryProperties) { + public static String zipFile(List 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; } diff --git a/ad-platform-manage/ad-platform-management/src/main/resources/config/application.yml b/ad-platform-manage/ad-platform-management/src/main/resources/config/application.yml index 7e8890b8..b3c6fdb3 100644 --- a/ad-platform-manage/ad-platform-management/src/main/resources/config/application.yml +++ b/ad-platform-manage/ad-platform-management/src/main/resources/config/application.yml @@ -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 + + diff --git a/ad-platform-manage/ad-platform-management/src/test/java/com/baiye/FileTest.java b/ad-platform-manage/ad-platform-management/src/test/java/com/baiye/FileTest.java index 0aae3588..5180ae5a 100644 --- a/ad-platform-manage/ad-platform-management/src/test/java/com/baiye/FileTest.java +++ b/ad-platform-manage/ad-platform-management/src/test/java/com/baiye/FileTest.java @@ -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 { diff --git a/ad-platform-manage/ad-platform-management/src/test/java/com/baiye/SignTest.java b/ad-platform-manage/ad-platform-management/src/test/java/com/baiye/SignTest.java index 6e66f90e..90720d3e 100644 --- a/ad-platform-manage/ad-platform-management/src/test/java/com/baiye/SignTest.java +++ b/ad-platform-manage/ad-platform-management/src/test/java/com/baiye/SignTest.java @@ -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 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)); } diff --git a/ad-platform-services/ad-platform-source/src/main/java/com/baiye/module/controller/CallbackController.java b/ad-platform-services/ad-platform-source/src/main/java/com/baiye/module/controller/CallbackController.java index 4dc410c5..65a1d99f 100644 --- a/ad-platform-services/ad-platform-source/src/main/java/com/baiye/module/controller/CallbackController.java +++ b/ad-platform-services/ad-platform-source/src/main/java/com/baiye/module/controller/CallbackController.java @@ -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 queryNotApproved(@RequestBody @Validated InterfaceResponseDTO interfaceResponseDTO){ + log.info("================ The receiving batch number is {} ================", interfaceResponseDTO.getBatchId()); return dmpCallbackService.resourceCallback(interfaceResponseDTO); } } diff --git a/ad-platform-services/ad-platform-source/src/main/java/com/baiye/module/service/dto/InterfaceResponseDTO.java b/ad-platform-services/ad-platform-source/src/main/java/com/baiye/module/service/dto/InterfaceResponseDTO.java index cbe8d5b1..820674e0 100644 --- a/ad-platform-services/ad-platform-source/src/main/java/com/baiye/module/service/dto/InterfaceResponseDTO.java +++ b/ad-platform-services/ad-platform-source/src/main/java/com/baiye/module/service/dto/InterfaceResponseDTO.java @@ -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 imeis; + @SerializedName("bath_id") + private String batchId; + + @SerializedName("org_code") + private String orgCode; + + @SerializedName("result") + private Integer result; + + + @SerializedName("datas") + private List datas; + @lombok.Data + public static class Data { + @SerializedName("data") + private String data; + } + + } diff --git a/ad-platform-services/ad-platform-source/src/main/java/com/baiye/module/service/impl/DmpCallbackServiceImpl.java b/ad-platform-services/ad-platform-source/src/main/java/com/baiye/module/service/impl/DmpCallbackServiceImpl.java index 65bca1c5..6e7e7151 100644 --- a/ad-platform-services/ad-platform-source/src/main/java/com/baiye/module/service/impl/DmpCallbackServiceImpl.java +++ b/ad-platform-services/ad-platform-source/src/main/java/com/baiye/module/service/impl/DmpCallbackServiceImpl.java @@ -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,49 +70,48 @@ public class DmpCallbackServiceImpl implements DmpCallbackService { @Override - @SneakyThrows @Transactional(rollbackFor = Exception.class) - public CommonResponse resourceCallback(InterfaceResponseDTO interfaceResponseDTO) { - String sign = interfaceResponseDTO.getSign(); - String bathNo = interfaceResponseDTO.getBathNo(); + public CommonResponse 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); + log.info("================ the receive data taskName as {} ==============", bathNo); Long taskId = byTaskName.getTaskId(); List tagList = Lists.newArrayList(); - List list = interfaceResponseDTO.getImeis(); + List phoneList = Lists.newArrayList(); + List> 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 phoneList = list.stream().map(ImeiZDTO::getZid).collect(Collectors.toList()); // 去除重复数据 + tagList = Lists.newArrayList(Sets.newHashSet(phoneList)); phoneList = Lists.newArrayList(Sets.newHashSet(phoneList)); List 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 tagList, List decryptList) { + private void saveClue(String taskName, DeliveryRecord byTaskName, Long + taskId, List tagList, List decryptList) { + // 请求黑名单 List 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 list, List responseList) throws ZipException { - List csvList = Lists.newArrayList(); + @SneakyThrows + private void downResource(String taskName, DeliveryRecord + byTaskName, List> originalList, List responseList) { String uuid = IdUtil.fastSimpleUUID(); + List 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 collect = Stream.of(dto.getImei(), dto.getTag(), dto.getZid(), encrypt).collect(Collectors.toList()); - String join = Joiner.on(StrPool.COMMA).skipNulls().join(collect); + List 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 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 tagList, List phoneList, List> originalList) { + for (InterfaceResponseDTO.Data data : responseDTO.getDatas()) { + List 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)); + } + } + } } diff --git a/ad-platform-services/ad-platform-source/src/main/java/com/baiye/task/MailSourceTask.java b/ad-platform-services/ad-platform-source/src/main/java/com/baiye/task/MailSourceTask.java index 9276b030..31389e33 100644 --- a/ad-platform-services/ad-platform-source/src/main/java/com/baiye/task/MailSourceTask.java +++ b/ad-platform-services/ad-platform-source/src/main/java/com/baiye/task/MailSourceTask.java @@ -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 decryptList; - Long taskId = byTaskName.getTaskId(); CsvReader reader = CsvUtil.getReader(); List tagList = Lists.newArrayList(); List phoneList = Lists.newArrayList(); @@ -111,23 +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) { - 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)); - } + parsingFile(byTaskName, tagList, phoneList, data); // 去除重复 List phoneSets = Lists.newArrayList(Sets.newHashSet(phoneList)); log.info("=============== the phone list as {} ==================", phoneList.size()); @@ -138,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); @@ -146,6 +129,7 @@ public class MailSourceTask { if (byTaskName.getType() == DefaultNumberConstants.THREE_NUMBER) { sendRequest(taskName, tagList, decryptList, path, unzipPath); } + FileUtil.del(path); } } } @@ -154,6 +138,26 @@ public class MailSourceTask { } } + private static void parsingFile(DeliveryRecord byTaskName, List tagList, List 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 decryptList, String path, List rows, File parseFile) { log.info("========================= the path as {} =========================", path); @@ -178,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 tagList, List decryptList, String path, String unzipPath, File parseFile) { + private void saveClue(String taskName, DeliveryRecord byTaskName, List tagList, List decryptList, String path, String unzipPath) { + Task task = new Task(); + Long taskId = byTaskName.getTaskId(); List 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); From 54f0ecbb0d47771635525e3cfefcd37c4123cde1 Mon Sep 17 00:00:00 2001 From: bynt Date: Tue, 13 Jun 2023 18:18:24 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/TaskImeiServiceImpl.java | 4 ++-- .../src/test/java/ResponseTest.java | 19 +------------------ 2 files changed, 3 insertions(+), 20 deletions(-) diff --git a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/service/impl/TaskImeiServiceImpl.java b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/service/impl/TaskImeiServiceImpl.java index 9b250d76..f4255653 100644 --- a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/service/impl/TaskImeiServiceImpl.java +++ b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/platform/service/impl/TaskImeiServiceImpl.java @@ -153,7 +153,7 @@ public class TaskImeiServiceImpl implements TaskImeiService { (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); } @@ -162,7 +162,7 @@ public class TaskImeiServiceImpl implements TaskImeiService { 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); } diff --git a/ad-platform-services/ad-platform-source/src/test/java/ResponseTest.java b/ad-platform-services/ad-platform-source/src/test/java/ResponseTest.java index 3c30dbef..746cbb0c 100644 --- a/ad-platform-services/ad-platform-source/src/test/java/ResponseTest.java +++ b/ad-platform-services/ad-platform-source/src/test/java/ResponseTest.java @@ -19,24 +19,7 @@ public class ResponseTest { @Test public void signTest() throws Exception { List 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); + }