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

master
bynt 3 years ago
parent a0a1d52195
commit e637234e7f

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

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

@ -15,6 +15,7 @@
*/
package me.zhengjie.modules.buildrecord.repository;
import cn.hutool.core.date.DateTime;
import me.zhengjie.modules.buildrecord.domain.BuildRecord;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
@ -107,4 +108,23 @@ public interface BuildRecordRepository extends JpaRepository<BuildRecord, Intege
@Modifying
@Query(value = "update BuildRecord set isSend = ?1 where id = ?1")
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;
import cn.hutool.core.date.DateTime;
import me.zhengjie.modules.buildrecord.domain.BuildRecord;
import me.zhengjie.modules.buildrecord.service.dto.BuildRecordDto;
import me.zhengjie.modules.buildrecord.service.dto.BuildRecordQueryCriteria;
@ -124,4 +125,17 @@ public interface BuildRecordService {
* @param 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;
import cn.hutool.core.date.DateTime;
import lombok.RequiredArgsConstructor;
import me.zhengjie.modules.buildrecord.domain.BuildRecord;
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.QueryHelp;
import me.zhengjie.utils.ValidationUtil;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.CompletableFuture;
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 BuildRecordRepository buildRecordRepository;
@Override
public Map<String, Object> queryAll(BuildRecordQueryCriteria criteria, Pageable pageable) {
@ -108,8 +118,18 @@ public class BuildRecordServiceImpl implements BuildRecordService {
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteAll(Integer[] 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);
}
}
@ -170,6 +190,17 @@ public class BuildRecordServiceImpl implements BuildRecordService {
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 java.sql.Timestamp;
import java.time.LocalTime;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
@ -54,29 +56,25 @@ public class BuildRecordScheduled {
// 获取所有开启定时任务开关
List<BuildRecord> buildRecords = buildRecordService.getBuildRecordByIsTimedTask(Boolean.TRUE);
if (!CollectionUtils.isEmpty(buildRecords)) {
for (BuildRecord record : buildRecords) {
/* 0
BuildTask buildTask = buildTaskService.queryBuildTaskByBuildIdAndTime(record.getId(), LocalTime.now());
if (buildTask == null) {*/
for (BuildRecord buildRecord : buildRecords) {
BuildTask buildTask = new BuildTask();
buildTask.setBuildId(record.getId());
buildTask.setBuildId(buildRecord.getId());
buildTask.setIsSend(DefaultConstant.ZERO_NUMBER);
buildTask.setGmtCreate(new Timestamp(System.currentTimeMillis()));
BuildTaskDto buildTaskDto = buildTaskService.create(buildTask);
if (buildTaskDto != null) {
deleteBuildTaskAndSendBuildTask(record, buildTaskDto.getId());
deleteBuildTaskAndSendBuildTask(buildRecord, buildTaskDto.getId());
}
log.info(" ========================== insert buildTask id as [{}] ===========================", buildTaskDto != null ? buildTaskDto.getId() : null);
/*}*/
}
log.info("scheduled runBuildRecordTask end time [{}] task size as [{}]", LocalTime.now(), buildRecords.size());
}
}
@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;
// 地图点进行计算,获取选点范围
Integer range = convert.getRange();
@ -90,11 +88,11 @@ public class BuildRecordScheduled {
}
// 删除并新增任务
boolean deleteTagByParam = tagService.deleteAndInsertTagByParam
(record.getId(), buildTaskId,
(buildRecord.getId(), buildTaskId,
convert.getCityCode(),
convert.getStuGrade(),
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);
/**
* 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.modules.buildtask.service.BuildTaskService;
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.repository.TagRepository;
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.QueryHelp;
import me.zhengjie.utils.ValidationUtil;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
@ -50,6 +50,7 @@ import javax.persistence.Query;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.CompletableFuture;
/**
* @website https://el-admin.vip
@ -288,5 +289,27 @@ 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";
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