From 95e1be5f4cdf7716282ba47f8201dfebd4ff3982 Mon Sep 17 00:00:00 2001 From: bynt Date: Wed, 9 Jun 2021 13:52:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=88=A0=E9=99=A4tag?= =?UTF-8?q?=E8=A1=A8=E9=80=BB=E8=BE=91(=E7=AD=89=E7=BA=A7=E4=B8=89?= =?UTF-8?q?=E7=BA=A7=E4=B8=94time=E5=A4=A7=E4=BA=8E0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../repository/BuildRecordRepository.java | 16 ++- .../service/BuildRecordService.java | 11 +- .../service/dto/BuildRecordQueryCriteria.java | 3 + .../service/impl/BuildRecordServiceImpl.java | 15 ++- .../common/consts/DefaultConstant.java | 6 + .../common/handler/BuildRecordScheduled.java | 33 ++++-- .../zhengjie/modules/mnt/util/ZipUtils.java | 7 +- .../modules/tag/repository/TagRepository.java | 2 +- .../tag/service/impl/TagServiceImpl.java | 112 +++++++++++------- 9 files changed, 140 insertions(+), 65 deletions(-) diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/buildrecord/repository/BuildRecordRepository.java b/eladmin-system/src/main/java/me/zhengjie/modules/buildrecord/repository/BuildRecordRepository.java index 7e1ac41..179ee6b 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/buildrecord/repository/BuildRecordRepository.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/buildrecord/repository/BuildRecordRepository.java @@ -112,11 +112,12 @@ public interface BuildRecordRepository extends JpaRepository getBuildRecordByTime(DateTime oneMonthAhead, int threeNumber); + + /** + * 查询所有三级 time + * @param threeNumber + * @param flag + * @return + */ + @Query(value = "select b from BuildRecord b where b.level = ?1 and b.isDeleted = ?2 and b.timePeriod > 0 order by b.id") + List getBuildRecordByIsDelete(int threeNumber, Boolean flag); } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/buildrecord/service/BuildRecordService.java b/eladmin-system/src/main/java/me/zhengjie/modules/buildrecord/service/BuildRecordService.java index 8532915..daa8281 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/buildrecord/service/BuildRecordService.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/buildrecord/service/BuildRecordService.java @@ -136,7 +136,16 @@ public interface BuildRecordService { /** * 修改状态值 + * @param result * @param id */ - void updateIsDeleteByBuildId(Integer id); + void updateIsDeleteByBuildId(boolean result, Integer id); + + /** + * 查询任务 + * @param threeNumber + * @param flag + * @return + */ + List getBuildRecordByIsDelete(int threeNumber, Boolean flag); } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/buildrecord/service/dto/BuildRecordQueryCriteria.java b/eladmin-system/src/main/java/me/zhengjie/modules/buildrecord/service/dto/BuildRecordQueryCriteria.java index eefd1be..a1d04cb 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/buildrecord/service/dto/BuildRecordQueryCriteria.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/buildrecord/service/dto/BuildRecordQueryCriteria.java @@ -39,5 +39,8 @@ public class BuildRecordQueryCriteria{ @Query(type = Query.Type.EQUAL) private Boolean flag; + @Query(type = Query.Type.EQUAL) + private Boolean isDeleted; + } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/buildrecord/service/impl/BuildRecordServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/buildrecord/service/impl/BuildRecordServiceImpl.java index 301ae8a..c4a9c0d 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/buildrecord/service/impl/BuildRecordServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/buildrecord/service/impl/BuildRecordServiceImpl.java @@ -69,6 +69,7 @@ public class BuildRecordServiceImpl implements BuildRecordService { if (criteria.getFlag() != null && !criteria.getFlag()) { criteria.setParentId(null); criteria.setLevel(DefaultConstant.THREE_NUMBER); + criteria.setIsDeleted(Boolean.FALSE); } // 无实体对应 赋初始值 criteria.setFlag(null); @@ -101,9 +102,14 @@ public class BuildRecordServiceImpl implements BuildRecordService { @Override @Transactional(rollbackFor = Exception.class) public BuildRecordDto create(BuildRecord resources) { + // 修改时间周期 + resources.setTimePeriod(resources.getTimePeriod() != null ? + resources.getTimePeriod() : DefaultConstant.ONE_THOUSAND); + if (resources.getLevel() != null && resources.getLevel().equals(DefaultConstant.ONE_NUMBER)) { resources.setParentId(DefaultConstant.ZERO_NUMBER); + resources.setIsDeleted(Boolean.FALSE); } return buildRecordMapper.toDto(buildRecordRepository.save(resources)); } @@ -197,8 +203,13 @@ public class BuildRecordServiceImpl implements BuildRecordService { @Override @Transactional(rollbackFor = Exception.class) - public void updateIsDeleteByBuildId(Integer id) { - buildRecordRepository.updateIsDeleteByBuildId(id); + public void updateIsDeleteByBuildId(boolean result, Integer id) { + buildRecordRepository.updateIsDeleteByBuildId(result,id); + } + + @Override + public List getBuildRecordByIsDelete(int threeNumber, Boolean flag) { + return buildRecordRepository.getBuildRecordByIsDelete(threeNumber,flag); } /** diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/common/consts/DefaultConstant.java b/eladmin-system/src/main/java/me/zhengjie/modules/common/consts/DefaultConstant.java index 21369c0..19143bd 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/common/consts/DefaultConstant.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/common/consts/DefaultConstant.java @@ -48,5 +48,11 @@ public class DefaultConstant { */ public static final int TEN_NUMBER = 10; + /** + * 10 + */ + public static final int ONE_THOUSAND = 1000; + + } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/common/handler/BuildRecordScheduled.java b/eladmin-system/src/main/java/me/zhengjie/modules/common/handler/BuildRecordScheduled.java index 5788117..f4525fc 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/common/handler/BuildRecordScheduled.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/common/handler/BuildRecordScheduled.java @@ -95,7 +95,6 @@ public class BuildRecordScheduled { @Scheduled(cron = "0 0 4 * * ?") - // @Scheduled(cron = "0 0/1 * * * ?") public void resendBuildRecordTask() { log.info("scheduled resendBuildRecordTask start time [{}]", LocalTime.now()); // 偏移天数 @@ -176,24 +175,32 @@ public class BuildRecordScheduled { /** * 凌晨一点 查询定时任务 删除记录 */ - @Scheduled(cron = "0 0 1 * * ?") + // @Scheduled(cron = "0 0 1 * * ?") + @Scheduled(cron = "0 0/1 * * * ?") public void deleteBuildRecordTask() { - // 偏移一个月 - DateTime oneMonthAhead = DateUtil.offsetMonth(DateUtil.date(), -1); - List buildRecordList = buildRecordService.getBuildRecordByTime(oneMonthAhead,DefaultConstant.THREE_NUMBER); - if (!CollectionUtils.isEmpty(buildRecordList)) { - for (BuildRecord buildRecord : buildRecordList) { - if (buildRecord.getId() != null) { + List buildRecordByIsDelete = + buildRecordService.getBuildRecordByIsDelete + (DefaultConstant.THREE_NUMBER, Boolean.FALSE); + + if (!CollectionUtils.isEmpty(buildRecordByIsDelete)) { + for (BuildRecord buildRecord : buildRecordByIsDelete) { + // 查询已做非空判断 + buildRecord.setTimePeriod(buildRecord.getTimePeriod() != null ? + buildRecord.getTimePeriod() - DefaultConstant.ONE_NUMBER : 0); + + if (buildRecord.getId() != null && + buildRecord.getTimePeriod().equals(DefaultConstant.ZERO_NUMBER)) { boolean result = tagService.deleteByTaskId(buildRecord.getId()); - if (result) { - // 修改状态 - buildRecordService.updateIsDeleteByBuildId(buildRecord.getId()); + if (!result) { + // 删除失败周期重试 + buildRecord.setTimePeriod + (buildRecord.getTimePeriod() + DefaultConstant.ONE_NUMBER); } + buildRecord.setIsDeleted(result); log.info("deleteBuildRecordTask buildRecord as [{}] result as [{}]", buildRecord.getTaskName(), result); } + buildRecordService.update(buildRecord); } } } - - } diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/mnt/util/ZipUtils.java b/eladmin-system/src/main/java/me/zhengjie/modules/mnt/util/ZipUtils.java index a9ade06..3154d3b 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/mnt/util/ZipUtils.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/mnt/util/ZipUtils.java @@ -21,6 +21,8 @@ import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.List; + +import me.zhengjie.modules.buildrecord.util.WordFilter; import org.apache.commons.lang3.StringUtils; import net.lingala.zip4j.core.ZipFile; @@ -224,7 +226,10 @@ public class ZipUtils { } public static void main(String[] args) { - zip("C:\\Users\\Administrator\\Desktop\\123\\", "C:\\Users\\Administrator\\Desktop\\123\\cc.zip", "123"); + Integer integer = 127; + Integer integer1 = 127; + System.out.println(integer.equals(integer1)); + // try { // File[] files = unzip("d:\\test\\汉字.zip", "aa"); 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 08d1d5d..2c8230f 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 @@ -27,4 +27,4 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor; 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/impl/TagServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/tag/service/impl/TagServiceImpl.java index c4d1723..708f86a 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 @@ -1,18 +1,18 @@ /* -* Copyright 2019-2020 Zheng Jie -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ + * Copyright 2019-2020 Zheng Jie + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package me.zhengjie.modules.tag.service.impl; import cn.hutool.core.collection.CollectionUtil; @@ -49,15 +49,15 @@ import javax.persistence.PersistenceContext; import javax.persistence.Query; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.math.BigInteger; import java.util.*; -import java.util.concurrent.CompletableFuture; /** -* @website https://el-admin.vip -* @description 服务实现 -* @author x -* @date 2020-09-22 -**/ + * @author x + * @website https://el-admin.vip + * @description 服务实现 + * @date 2020-09-22 + **/ @Slf4j @Service @RequiredArgsConstructor @@ -74,27 +74,27 @@ public class TagServiceImpl implements TagService { private EntityManager entityManager; @Override - public Map queryAll(TagQueryCriteria criteria, Pageable pageable){ - Page page = tagRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable); + public Map queryAll(TagQueryCriteria criteria, Pageable pageable) { + Page page = tagRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder), pageable); return PageUtil.toPage(page.map(tagMapper::toDto)); } @Override public List queryAllBySlice(TagQueryCriteria criteria, Pageable pageable) { - Slice slice = tagRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),pageable); + Slice slice = tagRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder), pageable); return slice.getContent(); } @Override - public List queryAll(TagQueryCriteria criteria){ - return tagMapper.toDto(tagRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder))); + public List queryAll(TagQueryCriteria criteria) { + return tagMapper.toDto(tagRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root, criteria, criteriaBuilder))); } @Override @Transactional public TagDto findById(Long id) { Tag tag = tagRepository.findById(id).orElseGet(Tag::new); - ValidationUtil.isNull(tag.getId(),"Tag","id",id); + ValidationUtil.isNull(tag.getId(), "Tag", "id", id); return tagMapper.toDto(tag); } @@ -108,7 +108,7 @@ public class TagServiceImpl implements TagService { @Transactional(rollbackFor = Exception.class) public void update(Tag resources) { Tag tag = tagRepository.findById(resources.getId()).orElseGet(Tag::new); - ValidationUtil.isNull( tag.getId(),"Tag","id",resources.getId()); + ValidationUtil.isNull(tag.getId(), "Tag", "id", resources.getId()); tag.copy(resources); tagRepository.save(tag); } @@ -124,10 +124,10 @@ public class TagServiceImpl implements TagService { public void download(List all, HttpServletResponse response) throws IOException { List> list = new ArrayList<>(); for (TagDto tag : all) { - Map map = new LinkedHashMap<>(); - map.put(" uid", tag.getUid()); - map.put(" taskId", tag.getTaskId()); - map.put(" pushStatus", tag.getPushStatus()); + Map map = new LinkedHashMap<>(); + map.put(" uid", tag.getUid()); + map.put(" taskId", tag.getTaskId()); + map.put(" pushStatus", tag.getPushStatus()); list.add(map); } FileUtil.downloadExcel(list, response); @@ -136,11 +136,11 @@ public class TagServiceImpl implements TagService { @Override @Transactional(rollbackFor = Exception.class) public Integer saveAll(List collect) { - if (CollectionUtils.isEmpty(collect)){ + if (CollectionUtils.isEmpty(collect)) { return 0; } - List tagList= tagRepository.saveAll(collect); - if (CollectionUtils.isEmpty(tagList)){ + List tagList = tagRepository.saveAll(collect); + if (CollectionUtils.isEmpty(tagList)) { return 0; } return tagList.size(); @@ -176,7 +176,7 @@ public class TagServiceImpl implements TagService { } // 坐标 - if (Objects.nonNull(rectangle)){ + if (Objects.nonNull(rectangle)) { whereSql.append(" AND s.lng >= :minX AND s.lng < :maxX AND s.lat >= :minY AND s.lat < :maxY "); } // 拼接成完整sql @@ -186,13 +186,13 @@ public class TagServiceImpl implements TagService { //创建本地sql查询实例 Query dataQuery = entityManager.createNativeQuery(insertSql.toString()); // 设置参数 - if (CollectionUtil.isNotEmpty(stuGrade)){ + if (CollectionUtil.isNotEmpty(stuGrade)) { dataQuery.setParameter("stuGrade", stuGrade); } - if (CollectionUtil.isNotEmpty(cityCode)){ + if (CollectionUtil.isNotEmpty(cityCode)) { dataQuery.setParameter("cityCode", cityCode); } - if (Objects.nonNull(rectangle)){ + if (Objects.nonNull(rectangle)) { // 经度范围 dataQuery.setParameter("minX", rectangle.getMinX()); dataQuery.setParameter("maxX", rectangle.getMaxX()); @@ -290,26 +290,50 @@ public class TagServiceImpl implements TagService { return Boolean.FALSE; } + @Override @Transactional(rollbackFor = Exception.class) public boolean deleteByTaskId(Integer id) { // 获取分表下标 int resultId = id % tableSum; String deleteStr = "DELETE FROM dc_tag" - + resultId - + " WHERE task_id = :id"; + + resultId + + " WHERE task_id = :id "; Query deleteQuery = entityManager.createNativeQuery(deleteStr); deleteQuery.setParameter("id", id); // 执行删除任务 boolean result = deleteQuery.executeUpdate() > 0; - if (result){ + if (result) { + //数据中需要删除的数据量 + long expiredCount; + //已经删除数据量 + long totalDeleted = 0L; // 删除之前记录 分表情况下,单次可能会有遗漏 多次并不影响 String replaceStr = StringUtils.replace(deleteStr, " = ", " < "); - Query deleteTagByQuery = entityManager.createNativeQuery(replaceStr); - deleteTagByQuery.setParameter("id", id); - deleteTagByQuery.executeUpdate(); + do { + Query deleteTagByQuery = entityManager.createNativeQuery(replaceStr + " limit 50000"); + deleteTagByQuery.setParameter("id", id); + int executeUpdate = deleteTagByQuery.executeUpdate(); + totalDeleted += executeUpdate; + expiredCount = queryCount(resultId, id); + } while (expiredCount > 0); + log.info("======== delete tag{} table size as [{}] ========", resultId, totalDeleted); } return result; } + + /** + * 查询数据 + * @param resultId + * @param id + * @return + */ + private Long queryCount(int resultId, int id) { + String sql = "select count(1) FROM dc_tag" + resultId + " where task_id < :id "; + Query selectQueryCount = entityManager.createNativeQuery(sql); + selectQueryCount.setParameter("id", id); + BigInteger bigInteger = (BigInteger) selectQueryCount.getSingleResult(); + return bigInteger.longValue(); + } }