新增删除tag表数据 修改线程池时间

master
bynt 3 years ago
parent a0a1d52195
commit e637234e7f

@ -217,9 +217,9 @@ public class ThreadPoolConfig {
return new ThreadPoolExecutor( return new ThreadPoolExecutor(
buildTaskDataCorePoolSize, buildTaskDataCorePoolSize,
buildTaskMaxPoolSize, buildTaskMaxPoolSize,
// 设置线程超时1分钟 // 设置线程超时1小时
1, 1,
TimeUnit.MINUTES, TimeUnit.HOURS,
new LinkedBlockingDeque<>(remoteTaskQueueCapacity), new LinkedBlockingDeque<>(remoteTaskQueueCapacity),
Executors.defaultThreadFactory(), Executors.defaultThreadFactory(),
new ThreadPoolExecutor.AbortPolicy() new ThreadPoolExecutor.AbortPolicy()
@ -237,9 +237,9 @@ public class ThreadPoolConfig {
return new ThreadPoolExecutor( return new ThreadPoolExecutor(
buildTaskDataCorePoolSize, buildTaskDataCorePoolSize,
buildTaskMaxPoolSize, buildTaskMaxPoolSize,
// 设置线程超市1分钟 // 设置线程超时1小时
1, 1,
TimeUnit.MINUTES, TimeUnit.HOURS,
new LinkedBlockingDeque<>(remoteTaskQueueCapacity), new LinkedBlockingDeque<>(remoteTaskQueueCapacity),
Executors.defaultThreadFactory(), Executors.defaultThreadFactory(),
new ThreadPoolExecutor.AbortPolicy() new ThreadPoolExecutor.AbortPolicy()

@ -115,7 +115,9 @@ public class BuildRecord implements Serializable {
@ApiModelProperty(value = "是否定时任务") @ApiModelProperty(value = "是否定时任务")
private Boolean isTimedTask; private Boolean isTimedTask;
@Column(name = "is_deleted")
@ApiModelProperty(value = "数据是否删除")
private Boolean isDeleted;
@Transient @Transient
@ApiModelProperty(value = "子类集合") @ApiModelProperty(value = "子类集合")

@ -15,6 +15,7 @@
*/ */
package me.zhengjie.modules.buildrecord.repository; package me.zhengjie.modules.buildrecord.repository;
import cn.hutool.core.date.DateTime;
import me.zhengjie.modules.buildrecord.domain.BuildRecord; import me.zhengjie.modules.buildrecord.domain.BuildRecord;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor; import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
@ -107,4 +108,23 @@ public interface BuildRecordRepository extends JpaRepository<BuildRecord, Intege
@Modifying @Modifying
@Query(value = "update BuildRecord set isSend = ?1 where id = ?1") @Query(value = "update BuildRecord set isSend = ?1 where id = ?1")
void updateIsSendByRecordId(Integer id, int nonFinishSendStatus); void updateIsSendByRecordId(Integer id, int nonFinishSendStatus);
/**
*
* @param id
*/
@Modifying
@Query(value = "update BuildRecord set isDeleted = 1 where id = ?1")
void updateIsDeleteByBuildId(Integer id);
/**
*
* @param oneMonthAhead
* @return
*
*/
@Query(value = "select b from BuildRecord b where b.gmtCreate < ?1 and b.isDeleted is null order by b.id ")
List<BuildRecord> getBuildRecordByTime(DateTime oneMonthAhead);
} }

@ -15,6 +15,7 @@
*/ */
package me.zhengjie.modules.buildrecord.service; package me.zhengjie.modules.buildrecord.service;
import cn.hutool.core.date.DateTime;
import me.zhengjie.modules.buildrecord.domain.BuildRecord; import me.zhengjie.modules.buildrecord.domain.BuildRecord;
import me.zhengjie.modules.buildrecord.service.dto.BuildRecordDto; import me.zhengjie.modules.buildrecord.service.dto.BuildRecordDto;
import me.zhengjie.modules.buildrecord.service.dto.BuildRecordQueryCriteria; import me.zhengjie.modules.buildrecord.service.dto.BuildRecordQueryCriteria;
@ -124,4 +125,17 @@ public interface BuildRecordService {
* @param nonFinishSendStatus * @param nonFinishSendStatus
*/ */
void updateIsSendByRecordId(Integer id, int nonFinishSendStatus); void updateIsSendByRecordId(Integer id, int nonFinishSendStatus);
/**
*
* @param oneMonthAhead
* @return
*/
List<BuildRecord> getBuildRecordByTime(DateTime oneMonthAhead);
/**
*
* @param id
*/
void updateIsDeleteByBuildId(Integer id);
} }

@ -15,6 +15,7 @@
*/ */
package me.zhengjie.modules.buildrecord.service.impl; package me.zhengjie.modules.buildrecord.service.impl;
import cn.hutool.core.date.DateTime;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import me.zhengjie.modules.buildrecord.domain.BuildRecord; import me.zhengjie.modules.buildrecord.domain.BuildRecord;
import me.zhengjie.modules.buildrecord.repository.BuildRecordRepository; import me.zhengjie.modules.buildrecord.repository.BuildRecordRepository;
@ -27,14 +28,19 @@ import me.zhengjie.utils.FileUtil;
import me.zhengjie.utils.PageUtil; import me.zhengjie.utils.PageUtil;
import me.zhengjie.utils.QueryHelp; import me.zhengjie.utils.QueryHelp;
import me.zhengjie.utils.ValidationUtil; import me.zhengjie.utils.ValidationUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.util.*; import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -49,9 +55,13 @@ public class BuildRecordServiceImpl implements BuildRecordService {
@Value("${tag.split-table.sum}")
private Integer tableSum;
@PersistenceContext
private EntityManager entityManager;
private final BuildRecordRepository buildRecordRepository;
private final BuildRecordMapper buildRecordMapper; private final BuildRecordMapper buildRecordMapper;
private final BuildRecordRepository buildRecordRepository;
@Override @Override
public Map<String, Object> queryAll(BuildRecordQueryCriteria criteria, Pageable pageable) { public Map<String, Object> queryAll(BuildRecordQueryCriteria criteria, Pageable pageable) {
@ -108,8 +118,18 @@ public class BuildRecordServiceImpl implements BuildRecordService {
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void deleteAll(Integer[] ids) { public void deleteAll(Integer[] ids) {
for (Integer id : ids) { for (Integer id : ids) {
// 获取分表下标
int resultId = id % tableSum;
String deleteStr = "DELETE FROM dc_tag"
+ resultId
+ " WHERE task_id = :id";
Query deleteQuery = entityManager.createNativeQuery(deleteStr);
deleteQuery.setParameter("id", id);
// 执行删除
CompletableFuture.runAsync(deleteQuery::executeUpdate);
buildRecordRepository.deleteById(id); buildRecordRepository.deleteById(id);
} }
} }
@ -170,6 +190,17 @@ public class BuildRecordServiceImpl implements BuildRecordService {
buildRecordRepository.updateIsSendByRecordId(id, nonFinishSendStatus); buildRecordRepository.updateIsSendByRecordId(id, nonFinishSendStatus);
} }
@Override
public List<BuildRecord> getBuildRecordByTime(DateTime oneMonthAhead) {
return buildRecordRepository.getBuildRecordByTime(oneMonthAhead);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void updateIsDeleteByBuildId(Integer id) {
buildRecordRepository.updateIsDeleteByBuildId(id);
}
/** /**
* *
*/ */

@ -27,6 +27,8 @@ import org.springframework.util.CollectionUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.sql.Timestamp; import java.sql.Timestamp;
import java.time.LocalTime; import java.time.LocalTime;
import java.util.Calendar;
import java.util.Date;
import java.util.List; import java.util.List;
/** /**
@ -47,36 +49,32 @@ public class BuildRecordScheduled {
private BuildRecordService buildRecordService; private BuildRecordService buildRecordService;
@Scheduled(cron = "0 0 22 * * ?") @Scheduled(cron = "0 0 22 * * ?")
//@Scheduled(cron = "0 0/1 * * * ?") //@Scheduled(cron = "0 0/1 * * * ?")
public void runBuildRecordTask() { public void runBuildRecordTask() {
log.info("scheduled runBuildRecordTask start time [{}]", LocalTime.now()); log.info("scheduled runBuildRecordTask start time [{}]", LocalTime.now());
// 获取所有开启定时任务开关 // 获取所有开启定时任务开关
List<BuildRecord> buildRecords = buildRecordService.getBuildRecordByIsTimedTask(Boolean.TRUE); List<BuildRecord> buildRecords = buildRecordService.getBuildRecordByIsTimedTask(Boolean.TRUE);
if (!CollectionUtils.isEmpty(buildRecords)) { if (!CollectionUtils.isEmpty(buildRecords)) {
for (BuildRecord record : buildRecords) { for (BuildRecord buildRecord : buildRecords) {
/* 0
BuildTask buildTask = buildTaskService.queryBuildTaskByBuildIdAndTime(record.getId(), LocalTime.now());
if (buildTask == null) {*/
BuildTask buildTask = new BuildTask(); BuildTask buildTask = new BuildTask();
buildTask.setBuildId(record.getId()); buildTask.setBuildId(buildRecord.getId());
buildTask.setIsSend(DefaultConstant.ZERO_NUMBER); buildTask.setIsSend(DefaultConstant.ZERO_NUMBER);
buildTask.setGmtCreate(new Timestamp(System.currentTimeMillis())); buildTask.setGmtCreate(new Timestamp(System.currentTimeMillis()));
BuildTaskDto buildTaskDto = buildTaskService.create(buildTask); BuildTaskDto buildTaskDto = buildTaskService.create(buildTask);
if (buildTaskDto != null) { if (buildTaskDto != null) {
deleteBuildTaskAndSendBuildTask(record, buildTaskDto.getId()); deleteBuildTaskAndSendBuildTask(buildRecord, buildTaskDto.getId());
} }
log.info(" ========================== insert buildTask id as [{}] ===========================", buildTaskDto != null ? buildTaskDto.getId() : null); log.info(" ========================== insert buildTask id as [{}] ===========================", buildTaskDto != null ? buildTaskDto.getId() : null);
/*}*/
} }
log.info("scheduled runBuildRecordTask end time [{}] task size as [{}]", LocalTime.now(), buildRecords.size()); log.info("scheduled runBuildRecordTask end time [{}] task size as [{}]", LocalTime.now(), buildRecords.size());
} }
} }
@Async(value = "buildTaskExecutor") @Async(value = "buildTaskExecutor")
void deleteBuildTaskAndSendBuildTask(BuildRecord record, Integer buildTaskId) { void deleteBuildTaskAndSendBuildTask(BuildRecord buildRecord, Integer buildTaskId) {
// 解析数据 // 解析数据
BuildTaskQueryParamJsonConvert convert = getBuildTaskQueryParamJsonConvert(record.getParams()); BuildTaskQueryParamJsonConvert convert = getBuildTaskQueryParamJsonConvert(buildRecord.getParams());
Rectangle rectangle = null; Rectangle rectangle = null;
// 地图点进行计算,获取选点范围 // 地图点进行计算,获取选点范围
Integer range = convert.getRange(); Integer range = convert.getRange();
@ -90,11 +88,11 @@ public class BuildRecordScheduled {
} }
// 删除并新增任务 // 删除并新增任务
boolean deleteTagByParam = tagService.deleteAndInsertTagByParam boolean deleteTagByParam = tagService.deleteAndInsertTagByParam
(record.getId(), buildTaskId, (buildRecord.getId(), buildTaskId,
convert.getCityCode(), convert.getCityCode(),
convert.getStuGrade(), convert.getStuGrade(),
rectangle); rectangle);
log.info("buildRecordTask taskName as [{}] result as [{}] result time as [{}]", record.getTaskName(), deleteTagByParam, LocalTime.now()); log.info("buildRecordTask taskName as [{}] result as [{}] result time as [{}]", buildRecord.getTaskName(), deleteTagByParam, LocalTime.now());
} }
@ -177,4 +175,27 @@ public class BuildRecordScheduled {
} }
/**
*
*/
@Scheduled(cron = "0 0 1 * * ?")
public void deleteBuildRecordTask() {
// 偏移一个月
DateTime oneMonthAhead = DateUtil.offsetMonth(DateUtil.date(), -1);
List<BuildRecord> buildRecordList = buildRecordService.getBuildRecordByTime(oneMonthAhead);
if (!CollectionUtils.isEmpty(buildRecordList)) {
for (BuildRecord buildRecord : buildRecordList) {
if (buildRecord.getId() != null) {
boolean result = tagService.deleteByTaskId(buildRecord.getId());
if (result) {
// 修改状态
buildRecordService.updateIsDeleteByBuildId(buildRecord.getId());
}
log.info("deleteBuildRecordTask buildRecord as [{}] result as [{}]", buildRecord.getTaskName(), result);
}
}
}
}
} }

@ -137,4 +137,10 @@ public interface TagService {
*/ */
boolean deleteAndInsertTagByParam(Integer id, Integer buildTaskId, List<Integer> cityCode, List<Integer> stuGrade, Rectangle rectangle); boolean deleteAndInsertTagByParam(Integer id, Integer buildTaskId, List<Integer> cityCode, List<Integer> stuGrade, Rectangle rectangle);
/**
* taskId
* @param id
* @return
*/
boolean deleteByTaskId(Integer id);
} }

@ -23,7 +23,6 @@ import me.zhengjie.common.http.ResponseCode;
import me.zhengjie.exception.BadRequestException; import me.zhengjie.exception.BadRequestException;
import me.zhengjie.modules.buildtask.service.BuildTaskService; import me.zhengjie.modules.buildtask.service.BuildTaskService;
import me.zhengjie.modules.common.consts.DefaultConstant; import me.zhengjie.modules.common.consts.DefaultConstant;
import me.zhengjie.modules.school.repository.SchoolRepository;
import me.zhengjie.modules.tag.domain.Tag; import me.zhengjie.modules.tag.domain.Tag;
import me.zhengjie.modules.tag.repository.TagRepository; import me.zhengjie.modules.tag.repository.TagRepository;
import me.zhengjie.modules.tag.service.TagService; import me.zhengjie.modules.tag.service.TagService;
@ -34,6 +33,7 @@ import me.zhengjie.utils.FileUtil;
import me.zhengjie.utils.PageUtil; import me.zhengjie.utils.PageUtil;
import me.zhengjie.utils.QueryHelp; import me.zhengjie.utils.QueryHelp;
import me.zhengjie.utils.ValidationUtil; import me.zhengjie.utils.ValidationUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
@ -50,6 +50,7 @@ import javax.persistence.Query;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.util.*; import java.util.*;
import java.util.concurrent.CompletableFuture;
/** /**
* @website https://el-admin.vip * @website https://el-admin.vip
@ -288,5 +289,27 @@ public class TagServiceImpl implements TagService {
} }
return Boolean.FALSE; 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";
Query deleteQuery = entityManager.createNativeQuery(deleteStr);
deleteQuery.setParameter("id", id);
// 执行删除任务
boolean result = deleteQuery.executeUpdate() > 0;
if (result){
// 删除之前记录 分表情况下,单次可能会有遗漏 多次并不影响
String replaceStr = StringUtils.replace(deleteStr, " = ", " < ");
Query deleteTagByQuery = entityManager.createNativeQuery(replaceStr);
deleteTagByQuery.setParameter("id", id);
CompletableFuture.runAsync(deleteTagByQuery::executeUpdate);
}
return result;
}
} }

Loading…
Cancel
Save