From 5d0685e83e039d320ddfe5c83ac9e01e41fbb4f5 Mon Sep 17 00:00:00 2001 From: qyx <565485304@qq.com> Date: Thu, 22 Oct 2020 14:42:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BA=86=E9=83=A8=E5=88=86?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + .../buildrecord/task/SendBigDataTask.java | 19 ++++++++++-- .../mailtask/rest/MailTaskController.java | 29 +++++++++++++++++-- .../mailtask/service/MailTaskService.java | 9 ++++++ .../service/impl/MailTaskServiceImpl.java | 23 +++++++++++++++ .../modules/tag/repository/TagRepository.java | 2 ++ .../modules/tag/service/TagService.java | 9 ++++++ .../tag/service/impl/TagServiceImpl.java | 5 ++++ .../taskrecord/task/SendRecordTask.java | 2 +- .../src/main/resources/config/application.yml | 2 +- eladmin-system/src/main/resources/logback.xml | 4 +-- .../test/java/me/zhengjie/SpringJPATest.java | 10 +++++++ .../src/test/java/me/zhengjie/TempTest.java | 15 +++++++--- 13 files changed, 116 insertions(+), 14 deletions(-) diff --git a/.gitignore b/.gitignore index b55fcf9..e99bc64 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ */target/* */*.iml .github/ +/log/ diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/buildrecord/task/SendBigDataTask.java b/eladmin-system/src/main/java/me/zhengjie/modules/buildrecord/task/SendBigDataTask.java index 21b798c..7da4a7e 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/buildrecord/task/SendBigDataTask.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/buildrecord/task/SendBigDataTask.java @@ -62,7 +62,7 @@ public class SendBigDataTask { /** * 用于随机选的环境代替字符, 如果添加环境就进行自动添加 */ - public static final String BASE_URL_CHAR_NUMBER = "123456"; + public static final String BASE_URL_CHAR_NUMBER = "1234567"; /** * 下游发送url @@ -135,7 +135,10 @@ public class SendBigDataTask { } // 过滤的集合 Set filterCollect = collect.stream().map(Tag::getUid).filter(fileLines::contains).collect(Collectors.toSet()); - collect = collect.stream().filter(one -> !filterCollect.contains(one.getUid())).collect(Collectors.toList()); + if (CollectionUtil.isNotEmpty(filterCollect)){ + log.info("================== [Filter collect is ready, collect size is {} ] ================================",filterCollect.size()); + collect = collect.stream().filter(one -> !filterCollect.contains(one.getUid())).collect(Collectors.toList()); + } } // 乱序 // Collections.shuffle(collect); @@ -148,10 +151,20 @@ public class SendBigDataTask { Long sendTotal = atomicLong.get(); // 之前要进行校验 Long dbCount = buildRecordDto.getSendTotal(); + // 这个数字会不准确和最开始的记录可能有冲突,这边加一个统计校验 + Long sendCountFromDB = tagService.countSendSum(Long.valueOf(id), FINISH_SEND_TAG); if (dbCount == null){ dbCount = 0L; } - buildRecordDto.setSendTotal( sendTotal + dbCount); + if (sendCountFromDB == null){ + sendCountFromDB = 0L; + } + if (!Objects.equals((sendTotal + dbCount), sendCountFromDB)){ + // 设置一个容错校验 + buildRecordDto.setSendTotal(sendCountFromDB); + }else{ + buildRecordDto.setSendTotal(sendTotal + dbCount); + } BeanUtil.copyProperties(buildRecordDto, buildRecord); buildRecordService.update(buildRecord); }catch (Exception e){ diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/mailtask/rest/MailTaskController.java b/eladmin-system/src/main/java/me/zhengjie/modules/mailtask/rest/MailTaskController.java index 6913b1c..75d23ad 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/mailtask/rest/MailTaskController.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/mailtask/rest/MailTaskController.java @@ -42,17 +42,40 @@ public class MailTaskController { } // 构建一次性链接 String result = mailTaskService.buildOnceLinkForInputFile(files); + return getOnceLinktResponseEntity(result); + } + + /** + * 生成一次性链接,支持任意文件格式下载 + * + * @param filePath 多个存储的文件地址 + * @return + */ + @Log("生成文件一次性链接") + @PostMapping("link/nofile") + @ApiOperation("生成一次性链接") + @AnonymousAccess // fixme 需要测试完成后进行去除和使用上面的权限注解 + public ResponseEntity buildRequestNoFile(@RequestParam(value = "filePath") String filePath){ + if (StringUtils.isBlank(filePath)){ + return new ResponseEntity<>(CommonResponse.createByError(ResponseCode.EMPTY_ARGUMENT), HttpStatus.OK); + } + // 生成一次性链接, 返回生成的一次性链接地址 + String result = mailTaskService.buildOnceLinkFromServer(filePath); + return getOnceLinktResponseEntity(result); + } + + private ResponseEntity getOnceLinktResponseEntity(String result) { OnceLinkMsgJsonContent content = new OnceLinkMsgJsonContent(); - if (StringUtils.isNotBlank(result)){ + if (StringUtils.isNotBlank(result)) { // 进行json相关的转换 content.setOnceLink(result); - }else { + } else { return new ResponseEntity<>(CommonResponse.createByError(ResponseCode.NO_MATCH_ARGUMENT_SET), HttpStatus.OK); } - return new ResponseEntity<>(CommonResponse.createBySuccess(content), HttpStatus.OK); } + /** * 请求一次性链接,进行下载文件 */ diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/mailtask/service/MailTaskService.java b/eladmin-system/src/main/java/me/zhengjie/modules/mailtask/service/MailTaskService.java index e4c6d2d..4a802b4 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/mailtask/service/MailTaskService.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/mailtask/service/MailTaskService.java @@ -23,4 +23,13 @@ public interface MailTaskService { * @param rand 验证下载码 */ void downloadFilesByRandCode(String rand, HttpServletResponse response, HttpServletRequest request); + + /** + * 传入多个文件路径,生成一次性链接 + * + * @param filePath 传入的文件路径 + * @return 一次性链接地址 + */ + String buildOnceLinkFromServer(String filePath); + } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/mailtask/service/impl/MailTaskServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/mailtask/service/impl/MailTaskServiceImpl.java index 6babe79..ef068e5 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/mailtask/service/impl/MailTaskServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/mailtask/service/impl/MailTaskServiceImpl.java @@ -30,6 +30,7 @@ import java.nio.charset.Charset; import java.nio.file.FileSystem; import java.nio.file.Paths; import java.util.List; +import java.util.Objects; @Service @RequiredArgsConstructor @@ -178,4 +179,26 @@ public class MailTaskServiceImpl implements MailTaskService { } // return Boolean.FALSE; } + + @Override + public String buildOnceLinkFromServer(String filePath) { + // 任务记录 + TempFileRecord tempFileRecord = new TempFileRecord(); + // 保存当次任务生成的所有日志地址,然后保存在一次,用逗号分隔 + tempFileRecord.setFilePaths(filePath); + // 默认保存7天 + tempFileRecord.setDays(7); + // 生成验证码 + String verificationCode = RandomUtil.randomString(11); + tempFileRecord.setVerificationCode(verificationCode); + // 文件标记 - 生成但是未读 + tempFileRecord.setFileStatus(FINISH_BUILD_FILE_STATUS_CODE); + + TempFileRecordDto tempFileRecordDto = tempFileRecordService.create(tempFileRecord); + if (tempFileRecordDto == null){ + log.error(" ====== [make verificationCode fail. please check .tempFileRecord is {} ] ======", tempFileRecord.toString()); + return ""; + } + return remoteFileServerAddress + "?" + "rand=" + verificationCode; + } } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/tag/repository/TagRepository.java b/eladmin-system/src/main/java/me/zhengjie/modules/tag/repository/TagRepository.java index 4a231b3..08d1d5d 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/tag/repository/TagRepository.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/tag/repository/TagRepository.java @@ -25,4 +25,6 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor; * @date 2020-09-22 **/ public interface TagRepository extends JpaRepository, JpaSpecificationExecutor { + + Long countByTaskIdAndPushStatus(Long taskId, Integer pushStatus); } \ No newline at end of file diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/tag/service/TagService.java b/eladmin-system/src/main/java/me/zhengjie/modules/tag/service/TagService.java index bcdeeb9..ac87552 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/tag/service/TagService.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/tag/service/TagService.java @@ -116,4 +116,13 @@ public interface TagService { * @param rectangle */ Integer queryAndBatchInsertData(Integer taskId,List cityCode, List stuGrade, Rectangle rectangle); + + /** + * 统计分表 已经发送/未发送 总数 + * + * @param taskId + * @param pushStatus + * @return + */ + Long countSendSum(Long taskId, Integer pushStatus); } \ No newline at end of file diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/tag/service/impl/TagServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/tag/service/impl/TagServiceImpl.java index 1c3f904..78f092f 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/tag/service/impl/TagServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/tag/service/impl/TagServiceImpl.java @@ -210,4 +210,9 @@ public class TagServiceImpl implements TagService { return nativeQuery.executeUpdate(); } + + @Override + public Long countSendSum(Long taskId, Integer pushStatus) { + return tagRepository.countByTaskIdAndPushStatus(taskId, pushStatus); + } } \ No newline at end of file diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/taskrecord/task/SendRecordTask.java b/eladmin-system/src/main/java/me/zhengjie/modules/taskrecord/task/SendRecordTask.java index 9880468..46f513e 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/taskrecord/task/SendRecordTask.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/taskrecord/task/SendRecordTask.java @@ -56,7 +56,7 @@ public class SendRecordTask { /** * 用于随机选的环境代替字符, 如果添加环境就进行自动添加 */ - public static final String BASE_URL_CHAR_NUMBER = "12345"; + public static final String BASE_URL_CHAR_NUMBER = "1234567"; /** * 下游发送url diff --git a/eladmin-system/src/main/resources/config/application.yml b/eladmin-system/src/main/resources/config/application.yml index a99ee5b..6a02dab 100644 --- a/eladmin-system/src/main/resources/config/application.yml +++ b/eladmin-system/src/main/resources/config/application.yml @@ -5,7 +5,7 @@ spring: freemarker: check-template-location: false profiles: - active: dev + active: test jackson: time-zone: GMT+8 data: diff --git a/eladmin-system/src/main/resources/logback.xml b/eladmin-system/src/main/resources/logback.xml index 30ccc85..dcf1306 100644 --- a/eladmin-system/src/main/resources/logback.xml +++ b/eladmin-system/src/main/resources/logback.xml @@ -77,7 +77,7 @@ - - + + \ No newline at end of file diff --git a/eladmin-system/src/test/java/me/zhengjie/SpringJPATest.java b/eladmin-system/src/test/java/me/zhengjie/SpringJPATest.java index fedbb75..78d0f4c 100644 --- a/eladmin-system/src/test/java/me/zhengjie/SpringJPATest.java +++ b/eladmin-system/src/test/java/me/zhengjie/SpringJPATest.java @@ -298,4 +298,14 @@ public class SpringJPATest { Integer aLong = tagService.updateAllPushStatus(pushIds, taskId); System.out.println(aLong); } + + /** + * 统计校验 + */ + @Test + public void testCount(){ + Long taskId = 26L; + + System.out.println(tagService.countSendSum(taskId, 1)); + } } diff --git a/eladmin-system/src/test/java/me/zhengjie/TempTest.java b/eladmin-system/src/test/java/me/zhengjie/TempTest.java index 2096f12..871d0ea 100644 --- a/eladmin-system/src/test/java/me/zhengjie/TempTest.java +++ b/eladmin-system/src/test/java/me/zhengjie/TempTest.java @@ -12,10 +12,7 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; /** @@ -128,4 +125,14 @@ public class TempTest { return ""; } } + + @Test + public void testLongComp(){ + Long a = 2L; + Long b = 2L; + + if (Objects.equals(a, b)){ + System.out.println("yes"); + } + } }