Commit fdaf6d97 authored by H2T's avatar H2T

计划重做时删除原先es中数据

parent d84644e8
package com.yeejoin.amos.patrol.business.dao.mapper;
import com.yeejoin.amos.patrol.dao.entity.ESTaskDetailDto;
import com.yeejoin.amos.patrol.dao.entity.PlanTaskDetail;
import org.apache.ibatis.annotations.Param;
......@@ -14,4 +15,6 @@ public interface PlanTaskDetailMapper extends BaseMapper {
List<PlanTaskDetail> findAllByIdInAndStatus(@Param("planTaskIds") List<Long> planTaskNo, @Param("status") String status);
List<ESTaskDetailDto> findAllByTaskNos(@Param("ids") String ids);
}
......@@ -458,19 +458,61 @@ public class PlanTaskServiceImpl implements IPlanTaskService {
return;
}
//3.删除planTask表,按照计划id+日期
List<ESPlanTaskListDto> oldEsPlanTaskListDtos = deletePlanTaskAndDet(param);
//4.删除对应es中数据
CompletableFuture.runAsync(() -> deleteEsData(param));
//5.执行数据生成(具体时间 + 人员)
List<HashMap<String, Object>> list = genAllExeDate(plan, vo, XJConstant.REGEN_FLAG);
//6.插入planTask及planTaskDetail
insertPlanTaskAndDetNew(list, plan, flag, new Date(), oldEsPlanTaskListDtos);
insertPlanTaskAndDetNew(list, plan, flag, new Date());
// 更新统计表
taskStaticExecution(null);
}
private void deleteEsData(HashMap<String, Object> param) {
//删除planTask表,按照计划id+日期
List<ESPlanTaskListDto> oldEsPlanTaskListDtos = deletePlanTaskAndDet(param);
//删除planTaskDetail表
List<String> planTaskIds = oldEsPlanTaskListDtos.stream().map(ESPlanTaskListDto::getPlanTaskId).collect(Collectors.toList());
if (!ValidationUtil.isEmpty(planTaskIds)) {
if (planTaskIds.size() > 5000) {
int index = 5000;
for (int i = 0; i < planTaskIds.size(); i += 5000) {
if (i + 5000 > planTaskIds.size()) {
index = planTaskIds.size() - i;
}
List<String> newList = planTaskIds.subList(i, i + index);
String ids = newList.stream().collect(Collectors.joining("','", "('", "')"));
List<ESTaskDetailDto> maps = planTaskDetailMapper.findAllByTaskNos(ids);
esTaskDetail.deleteAll(maps);
}
} else {
String ids = planTaskIds.stream().collect(Collectors.joining("','", "('", "')"));
List<ESTaskDetailDto> maps = planTaskDetailMapper.findAllByTaskNos(ids);
esTaskDetail.deleteAll(maps);
}
}
if (!ValidationUtil.isEmpty(oldEsPlanTaskListDtos)) {
if (oldEsPlanTaskListDtos.size() > 5000) {
int index = 5000;
for (int i = 0; i < oldEsPlanTaskListDtos.size(); i += 5000) {
if (i + 5000 > oldEsPlanTaskListDtos.size()) {
index = oldEsPlanTaskListDtos.size() - i;
}
List<ESPlanTaskListDto> newList = oldEsPlanTaskListDtos.subList(i, i + index);
esPlanTaskList.deleteAll(newList);
}
} else {
esPlanTaskList.deleteAll(oldEsPlanTaskListDtos);
}
}
}
private void notifyBusinessRefresh(String type) {
try {
......@@ -718,7 +760,7 @@ public class PlanTaskServiceImpl implements IPlanTaskService {
}
//2.5.插入planTask及planTaskDetail
insertPlanTaskAndDetNew(list, plan, XJConstant.SCHED_FLAG, now, null);
insertPlanTaskAndDetNew(list, plan, XJConstant.SCHED_FLAG, now);
// 更新统计表
taskStaticExecution(null);
......@@ -870,7 +912,7 @@ public class PlanTaskServiceImpl implements IPlanTaskService {
* @param plan
* @param flag 是否初始状态0-初始 1-非初始
*/
public void insertPlanTaskAndDetNew(List<HashMap<String, Object>> list, Plan plan, String flag, Date now, List<ESPlanTaskListDto> oldEsPlanTaskListDtos) {
public void insertPlanTaskAndDetNew(List<HashMap<String, Object>> list, Plan plan, String flag, Date now) {
if (list == null || list.size() <= 0) {
HashMap<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("id", plan.getId());
......@@ -1010,7 +1052,7 @@ public class PlanTaskServiceImpl implements IPlanTaskService {
//存在事物,在事务提交之后执行
asyncSaveEs(planTaskDetails, esPlanTaskListDtos, oldEsPlanTaskListDtos);
asyncSaveEs(planTaskDetails, esPlanTaskListDtos);
} catch (Exception e) {
e.printStackTrace();
......@@ -1020,18 +1062,18 @@ public class PlanTaskServiceImpl implements IPlanTaskService {
}
}
private void asyncSaveEs(Iterable<PlanTaskDetail> planTaskDetails, List<ESPlanTaskListDto> esPlanTaskListDtos, List<ESPlanTaskListDto> oldEsPlanTaskListDtos) {
private void asyncSaveEs(Iterable<PlanTaskDetail> planTaskDetails, List<ESPlanTaskListDto> esPlanTaskListDtos) {
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
@Override
public void afterCommit() {
//异步存储任务和任务详情到es
asyncSavePlanTaskAndDetailListToEs(planTaskDetails, esPlanTaskListDtos, oldEsPlanTaskListDtos);
asyncSavePlanTaskAndDetailListToEs(planTaskDetails, esPlanTaskListDtos);
}
});
}
@Async
public void asyncSavePlanTaskAndDetailListToEs(Iterable<PlanTaskDetail> planTaskDetails, List<ESPlanTaskListDto> esPlanTaskListDtos, List<ESPlanTaskListDto> oldEsPlanTaskListDtos) {
public void asyncSavePlanTaskAndDetailListToEs(Iterable<PlanTaskDetail> planTaskDetails, List<ESPlanTaskListDto> esPlanTaskListDtos) {
log.info("异步存储任务和任务详情到es");
Plan plan = planMapper.getPlan(esPlanTaskListDtos.get(0).getPlanId());
StopWatch stopWatch = new StopWatch();
......@@ -1186,7 +1228,7 @@ public class PlanTaskServiceImpl implements IPlanTaskService {
log.info("esPlanTaskListDtos数据组装,耗时:{} 秒", stopWatch6.getTotalTimeSeconds());
StopWatch stopWatch7 = new StopWatch();
stopWatch7.start();
saveEsPlanTaskList(esPlanTaskListDtos, oldEsPlanTaskListDtos);
saveEsPlanTaskList(esPlanTaskListDtos);
stopWatch7.stop();
log.info("任务存入es,耗时:{} 秒", stopWatch7.getTotalTimeSeconds());
}
......@@ -1212,22 +1254,7 @@ public class PlanTaskServiceImpl implements IPlanTaskService {
}
public void saveEsPlanTaskList(List<ESPlanTaskListDto> esPlanTaskListDtos, List<ESPlanTaskListDto> oldEsPlanTaskListDtos) {
if (!ValidationUtil.isEmpty(oldEsPlanTaskListDtos)) {
if (oldEsPlanTaskListDtos.size() > 5000) {
int index = 5000;
for (int i = 0; i < oldEsPlanTaskListDtos.size(); i += 5000) {
if (i + 5000 > oldEsPlanTaskListDtos.size()) {
index = oldEsPlanTaskListDtos.size() - i;
}
List<ESPlanTaskListDto> newList = oldEsPlanTaskListDtos.subList(i, i + index);
esPlanTaskList.deleteAll(newList);
}
} else {
esPlanTaskList.deleteAll(oldEsPlanTaskListDtos);
}
}
public void saveEsPlanTaskList(List<ESPlanTaskListDto> esPlanTaskListDtos) {
if (!ValidationUtil.isEmpty(esPlanTaskListDtos)) {
if (esPlanTaskListDtos.size() > 5000) {
int index = 5000;
......
......@@ -30,4 +30,12 @@
pptd.task_no in <foreach collection="planTaskIds" item="planTaskId" index="index" open="(" separator="," close=")" >#{planTaskId}</foreach>
and pptd.status = #{status}
</select>
<select id="findAllByTaskNos" resultType="com.yeejoin.amos.patrol.dao.entity.PlanTaskDetail">
select
pptd.id
from
"p_plan_task_detail" pptd
where
pptd.task_no in #{ids}
</select>
</mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment