Kaynağa Gözat

运维接口: 履职/演练接口代码提交

jingyuanchao 1 yıl önce
ebeveyn
işleme
80433beaf8

+ 5 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/access/service/impl/TMonitoringRetrievalPlanServiceImpl.java

@@ -1636,4 +1636,9 @@ public class TMonitoringRetrievalPlanServiceImpl extends ServiceImpl<TMonitoring
     public void compensate(CompensateDto compensateDto) {
 
     }
+
+    @Override
+    public void run(Runnable runnable, ThreadPoolTaskExecutor threadPoolTaskExecutor) {
+
+    }
 }

+ 3 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/compense/interfaces/CompensateService.java

@@ -2,6 +2,7 @@ package com.xunmei.core.compense.interfaces;
 
 import com.xunmei.core.compense.dto.CompensateDto;
 import com.xunmei.system.api.enums.BusinessPlanType;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 
 public interface CompensateService {
 
@@ -10,4 +11,6 @@ public interface CompensateService {
 
 
     void compensate(CompensateDto compensateDto);
+
+    void run(Runnable runnable, ThreadPoolTaskExecutor threadPoolTaskExecutor);
 }

+ 58 - 45
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillPlanServiceImpl.java

@@ -12,7 +12,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
 import com.xunmei.common.core.constant.CacheConstants;
 import com.xunmei.common.core.constant.DictConstants;
 import com.xunmei.common.core.constant.ErrorMsgConstants;
@@ -69,9 +69,10 @@ import org.springframework.transaction.support.TransactionSynchronizationManager
 import java.time.Duration;
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
-import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import static java.util.stream.Collectors.toList;
+
 /**
  * 预案演练计划Service业务层处理
  *
@@ -167,7 +168,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
         vo.setBuildTaskNow(ObjectUtil.equal(1, plan.getBuildTaskNow()));
         vo.setFileList(ObjectUtil.isNotEmpty(plan.getFileList()) ? JSON.parseArray(plan.getFileList(), String.class) : null);
         final List<CoreDrillPlanToExecOrg> execOrgList = coreDrillPlanToExecOrgMapper.selectByMap(MapUtil.of("plan_id", id));
-        final List<Long> execOrgIdList = execOrgList.stream().map(CoreDrillPlanToExecOrg::getOrgId).collect(Collectors.toList());
+        final List<Long> execOrgIdList = execOrgList.stream().map(CoreDrillPlanToExecOrg::getOrgId).collect(toList());
         vo.setPlanExecOrgIdList(ObjectUtil.isEmpty(execOrgIdList) ? null : execOrgIdList);
         vo.setCategoryText(DictUtils.getDictLabel(DictConstants.CORE_DRILL_CATEGORY, vo.getCategory()));
         /*final List<CoreDrillPlanToRole> planToRoles = coreDrillPlanToRoleMapper.selectByMap(MapUtil.of("plan_id", id));
@@ -474,7 +475,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
             coreDrillPlanToRoleMapper.delete(new LambdaQueryWrapper<CoreDrillPlanToRole>().in(CoreDrillPlanToRole::getPlanId, planIdList));
         }
         List<CoreDrillTask> taskIdList = coreDrillTaskMapper.selectList(new LambdaQueryWrapper<CoreDrillTask>().in(CoreDrillTask::getPlanId, planIdList).select(CoreDrillTask::getId));
-        List<Long> collect = taskIdList.stream().map(CoreDrillTask::getId).collect(Collectors.toList());
+        List<Long> collect = taskIdList.stream().map(CoreDrillTask::getId).collect(toList());
         if (ObjectUtil.isNotEmpty(collect)) {
             coreDrillTaskMapper.deleteBatchIds(collect);
             coreDrillTaskToRoleMapper.delete(new LambdaQueryWrapper<CoreDrillTaskToRole>().in(CoreDrillTaskToRole::getDrillTaskId, collect));
@@ -837,17 +838,17 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
             case 1:
                 //省联社
                 final List<CoreDrillPlan> sLsPlanList = getPlanList(orgId, 1, 1);
-                return sLsPlanList.stream().map(x -> new IdName<>(x.getId().toString(), x.getPlanName())).collect(Collectors.toList());
+                return sLsPlanList.stream().map(x -> new IdName<>(x.getId().toString(), x.getPlanName())).collect(toList());
             case 2:
                 //办事处
                 SysOrg topOrg = RemoteCallHandlerExecutor.executeRemoteCall(() -> orgService.selectTopOrg(SecurityConstants.INNER), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
                 final List<CoreDrillPlan> lsPlanList = getPlanList(topOrg.getId(), 1, 1);
                 final List<CoreDrillPlan> bscPlanList = getPlanList(orgId, 1, 1);
-                return Stream.of(lsPlanList, bscPlanList).flatMap(Collection::stream).map(x -> new IdName<>(x.getId().toString(), x.getPlanName())).collect(Collectors.toList());
+                return Stream.of(lsPlanList, bscPlanList).flatMap(Collection::stream).map(x -> new IdName<>(x.getId().toString(), x.getPlanName())).collect(toList());
             case 3:
                 //行社
                 final List<CoreDrillPlan> hsPlanList = getPlanList(orgId, 0, 0);
-                return hsPlanList.stream().map(x -> new IdName<>(x.getId().toString(), x.getPlanName())).collect(Collectors.toList());
+                return hsPlanList.stream().map(x -> new IdName<>(x.getId().toString(), x.getPlanName())).collect(toList());
             default:
                 return new ArrayList<>();
         }
@@ -872,7 +873,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
             planRoleList = coreDrillPlanToRoleMapper.selectList(ros);
         }*/
         List<SysOrgVO> all = RedisUtils.getCacheList(CacheConstants.ORG_CACHE_LIST_KEY);
-        all = all.stream().filter(o -> ObjectUtil.isNotEmpty(o.getPath())).collect(Collectors.toList());
+        all = all.stream().filter(o -> ObjectUtil.isNotEmpty(o.getPath())).collect(toList());
         final SysOrgVO planCreateOrg = all.stream().filter(org -> org.getId().equals(plan.getCreateOrgId())).findFirst().get();
         final long count = all.stream()
                 .filter(org -> ObjectUtil.isNotEmpty(org.getPath()))
@@ -956,8 +957,8 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
         final List<CoreDrillPlanToExecOrg> coreDrillPlanToExecOrgList = coreDrillPlanToExecOrgMapper.selectList(eos);
 
         if (ObjectUtil.isNotEmpty(coreDrillPlanToExecOrgList)) {
-            final List<Long> list = coreDrillPlanToExecOrgList.stream().map(CoreDrillPlanToExecOrg::getOrgId).collect(Collectors.toList());
-            return all.stream().filter(org -> list.contains(org.getId())).collect(Collectors.toList());
+            final List<Long> list = coreDrillPlanToExecOrgList.stream().map(CoreDrillPlanToExecOrg::getOrgId).collect(toList());
+            return all.stream().filter(org -> list.contains(org.getId())).collect(toList());
 
         } else {
            /* List<CoreEduTrainingPlanToOrgType> toOrgTypeList = coreEduTrainingPlanToOrgTypeMapper.selectList(new LambdaQueryWrapper<CoreEduTrainingPlanToOrgType>()
@@ -966,22 +967,22 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
             return all.stream().filter(org -> collect.contains(org.getType())).collect(Collectors.toList());*/
 
 
-            return all.stream().filter(org -> ObjectUtil.isNotNull(org.getType())).filter(org -> org.getType().equals(plan.getExecOrgType())).collect(Collectors.toList());
+            return all.stream().filter(org -> ObjectUtil.isNotNull(org.getType())).filter(org -> org.getType().equals(plan.getExecOrgType())).collect(toList());
         }
     }
 
 
     public List<SysOrgVO> getPlanPublishOrgList(List<SysOrgVO> list) {
         //省联社/办事处/行社
-        List<SysOrgVO> collect = list.stream().filter(org -> checkOrgType(org.getType())).collect(Collectors.toList());
+        List<SysOrgVO> collect = list.stream().filter(org -> checkOrgType(org.getType())).collect(toList());
         //行社以下的机构
-        List<SysOrgVO> collect1 = list.stream().filter(org -> !checkOrgType(org.getType())).collect(Collectors.toList());
+        List<SysOrgVO> collect1 = list.stream().filter(org -> !checkOrgType(org.getType())).collect(toList());
 
         if (ObjectUtil.isNotEmpty(collect1)) {
-            List<Long> orgIdList = collect1.stream().map(SysOrgVO::getId).collect(Collectors.toList());
+            List<Long> orgIdList = collect1.stream().map(SysOrgVO::getId).collect(toList());
             List<SysOrg> orgList = RemoteCallHandlerExecutor.executeRemoteCall(() -> orgService.selectParentHs(orgIdList, SecurityConstants.INNER), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
             List<SysOrgVO> sysOrgVOS = BeanHelper.copyProperties(orgList, SysOrgVO.class);
-            return Stream.of(sysOrgVOS, collect).flatMap(Collection::stream).collect(Collectors.toList());
+            return Stream.of(sysOrgVOS, collect).flatMap(Collection::stream).collect(toList());
         }
 
         return collect;
@@ -1026,59 +1027,64 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
 
     }
 
+
+    private static final Set<OrgTypeEnum> INVALID_ORG_TYPES = Sets.newHashSet(OrgTypeEnum.SHEGN_LIAN_SHE, OrgTypeEnum.BAN_SHI_CHU, OrgTypeEnum.DIQU_HANG_SHE);
     private void deducePlanAndBuildTask(CoreDrillPlan drillPlan, List<Long> orgIdList, List<SysOrgVO> orgCacheList) {
-        List<SysOrgVO> orgList = orgCacheList.stream().filter(org -> orgIdList.contains(org.getId())).collect(Collectors.toList());
+        List<SysOrgVO> orgList = orgCacheList.stream().filter(org -> orgIdList.contains(org.getId())).collect(toList());
         if (orgList.isEmpty()) {
             throw new ServiceException("未查询到orgIdList中指定的机构信息");
         }
-        List<Integer> typeList = orgList.stream().map(SysOrgVO::getType).distinct().collect(Collectors.toList());
+        List<Long> idList = orgList.stream().map(SysOrgVO::getId).collect(toList());
+        List<Integer> typeList = orgList.stream().map(SysOrgVO::getType).distinct().collect(toList());
         if (typeList.size() > 1) {
             throw new ServiceException("orgIdList中指定的机构信息存在多种机构类型");
         }
 
         OrgTypeEnum orgTypeEnum = OrgTypeEnum.getOrgTypeEnum(typeList.get(0));
 
-        //省联社创建的计划
+        // 省联社创建的计划
         if (checkIsParentPlan(drillPlan.getId())) {
-            //把传进来的计划转成 行社计划
             List<CoreDrillPlan> allHsPlanList = getHsPlanList(drillPlan);
             if (ObjectUtil.isEmpty(allHsPlanList)) {
                 return;
             }
-            //把传进来的机构信息转成行社机构
+
             Map<String, Object> map = getHsOrg(orgCacheList, orgList, orgTypeEnum);
-            List<Long> hsPlanIdList = allHsPlanList.stream().map(CoreDrillPlan::getId).collect(Collectors.toList());
-            List<Long> hsOrgIdList = ((List<SysOrgVO>) map.get("list")).stream().map(SysOrgVO::getId).collect(Collectors.toList());
+            List<Long> hsPlanIdList = allHsPlanList.stream().map(CoreDrillPlan::getId).collect(toList());
+            List<Long> hsOrgIdList = ((List<SysOrgVO>) map.get("list")).stream().map(SysOrgVO::getId).collect(toList());
+            if (ObjectUtil.hasEmpty(hsPlanIdList, hsOrgIdList)){
+                return;
+            }
             List<CoreDrillPlan> reallyPlanIdList = findReallyPlanIdList(hsPlanIdList, hsOrgIdList);
             boolean underHsOrgType = (boolean) map.get("underHsOrgType");
-            if (underHsOrgType) {
-                List<Long> idList = orgList.stream().map(SysOrgVO::getId).collect(Collectors.toList());
-                for (CoreDrillPlan plan : reallyPlanIdList) {
-                    CompletableFuture.runAsync(() -> {
-                        //其实这里如果真是传入了行社以下的机构,那么大概率这里的reallyPlanIdList 计划id也只会有一个元素
-                        CoreDrillPlanDataVo detailPlanData = getCoreDrillPlanDataVo(plan.getId());
-                        coreDrillTaskService.createTaskForNow(detailPlanData, plan.getPlanStartDate(), plan.getPlanEndDate(),idList);
-                    }, threadPoolTaskExecutor);
-                }
-            } else {
-                for (CoreDrillPlan plan : reallyPlanIdList) {
-                    CompletableFuture.runAsync(() -> {
-                        //如果不是省联社或者办事处,状态启用,并且是无周期或者立即生效
-                        CoreDrillPlanDataVo detailPlanData = getCoreDrillPlanDataVo(plan.getId());
-                        coreDrillTaskService.createTaskForNow(detailPlanData, plan.getPlanStartDate(), plan.getPlanEndDate());
-                    }, threadPoolTaskExecutor);
-                }
+            for (CoreDrillPlan plan : reallyPlanIdList) {
+                create(plan, underHsOrgType ? idList : null, threadPoolTaskExecutor);
             }
             return;
         }
-        //行社自建计划
-        if (OrgTypeEnum.SHEGN_LIAN_SHE.equals(orgTypeEnum) || OrgTypeEnum.BAN_SHI_CHU.equals(orgTypeEnum) || OrgTypeEnum.DIQU_HANG_SHE.equals(orgTypeEnum)) {
+        // 行社自建计划
+        if (INVALID_ORG_TYPES.contains(orgTypeEnum)) {
             throw new ServiceException("orgIdList中传递机构信息错误!与计划信息不匹配");
         }
-        List<CoreDrillPlan> list = Lists.newArrayList(drillPlan);
-        // resumptionTaskBusiness.buildTask(orgIdList, list, new Date());
+
+        if (OrgTypeEnum.HANG_SHE.equals(orgTypeEnum)) {
+            create(drillPlan, null, threadPoolTaskExecutor);
+        } else {
+            //其实这里如果真是传入了行社以下的机构,那么大概率这里的reallyPlanIdList 计划id也只会有一个元素
+            create(drillPlan, idList, threadPoolTaskExecutor);
+        }
 
     }
+    private void create(CoreDrillPlan plan, List<Long> idList, ThreadPoolTaskExecutor executor) {
+        Long planId = plan.getId();
+        Date planStartDate = plan.getPlanStartDate();
+        Date planEndDate = plan.getPlanEndDate();
+
+        executor.execute(() -> {
+            CoreDrillPlanDataVo detailPlanData = getCoreDrillPlanDataVo(planId);
+            coreDrillTaskService.createTaskForNow(detailPlanData, planStartDate, planEndDate, idList);
+        });
+    }
 
     private List<CoreDrillPlan> findReallyPlanIdList(List<Long> planIdList, List<Long> orgIdList) {
 
@@ -1089,8 +1095,10 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
     }
 
     private boolean checkIsParentPlan(Long planId) {
+        //演练与培训的 行社下发的计划 id=parentId
         LambdaQueryWrapper<CoreDrillPlan> countWrapper = new LambdaQueryWrapper<>();
         countWrapper.eq(CoreDrillPlan::getParentId, planId);
+        countWrapper.ne(CoreDrillPlan::getId, planId);
         Long l = baseMapper.selectCount(countWrapper);
         return ObjectUtil.isNotNull(l) && l.compareTo(0L) > 0;
     }
@@ -1119,7 +1127,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
                             .filter(org -> ObjectUtil.isAllNotEmpty(org.getPath(), org.getType()))
                             .filter(org -> org.getPath().contains(path))
                             .filter(org -> org.getType().equals(OrgTypeEnum.HANG_SHE.getCode()))
-                            .collect(Collectors.toList());
+                            .collect(toList());
                     list.addAll(collect);
                 }
                 break;
@@ -1127,7 +1135,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
                 list = needBuildTaskOrgList;
                 break;
             default:    //如果是行社以下机构类型,那么找到上级的行社机构返回
-                List<Long> ids = needBuildTaskOrgList.stream().map(SysOrgVO::getId).collect(Collectors.toList());
+                List<Long> ids = needBuildTaskOrgList.stream().map(SysOrgVO::getId).collect(toList());
                 List<SysOrg> sysOrgs = orgService.selectParentHs(ids, SecurityConstants.INNER);
                 list = BeanHelper.copyProperties(sysOrgs, SysOrgVO.class);
                 underHsOrgType = true;
@@ -1138,4 +1146,9 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
         map.put("underHsOrgType", underHsOrgType);
         return map;
     }
+
+    @Override
+    public void run(Runnable runnable, ThreadPoolTaskExecutor threadPoolTaskExecutor) {
+        CompletableFuture.runAsync(runnable, threadPoolTaskExecutor);
+    }
 }

+ 3 - 3
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/service/impl/CoreDrillTaskServiceImpl.java

@@ -419,10 +419,10 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
 
         List<SysOrg> orgList = getExecOrgList(plan.getPlanExecOrgList(), plan.getExecOrgType(), plan.getBelongOrgPath());
 
-        orgList = orgList.stream().filter(org -> orgIdList.contains(org.getId())).collect(Collectors.toList());
-
+        if (ObjectUtil.isNotEmpty(orgIdList)) {
+            orgList = orgList.stream().filter(org -> orgIdList.contains(org.getId())).collect(Collectors.toList());
+        }
         final List<SysWorkTime> workTimeList = getWorkTimeList(orgList, start, end);
-        //List<SysOrg> execOrgList = getExecOrgList(plan, start, end);
         saveTaskAndRoleData(plan, start, end, orgList, workTimeList);
     }
 

+ 5 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/edu/service/impl/CoreEduTrainingPlanServiceImpl.java

@@ -964,4 +964,9 @@ public class CoreEduTrainingPlanServiceImpl extends ServiceImpl<CoreEduTrainingP
     public void compensate(CompensateDto compensateDto) {
 
     }
+
+    @Override
+    public void run(Runnable runnable, ThreadPoolTaskExecutor threadPoolTaskExecutor) {
+
+    }
 }

+ 18 - 7
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/impl/AppPlanServiceImpl.java

@@ -1493,7 +1493,7 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
     }
 
     @Override
-    @Async(ThreadPoolConfig.SOC_EXECUTOR)
+    @Transactional(rollbackFor = Exception.class)
     public void compensate(CompensateDto compensateDto) {
         /**
          * 1、判断用户传进来的计划是省联社计划id还是办事处/地区行社/行社计划id?
@@ -1551,9 +1551,9 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
             boolean underHsOrgType = (boolean) map.get("underHsOrgType");
             if (underHsOrgType) {
                 List<Long> idList = orgList.stream().map(SysOrgVO::getId).collect(Collectors.toList());
-                resumptionTaskBusiness.buildTask(idList, reallyPlanIdList, new Date());
+                run(() -> resumptionTaskBusiness.buildTask(idList, reallyPlanIdList, new Date()), threadPoolTaskExecutor);
             } else {
-                resumptionTaskBusiness.buildTask(null, reallyPlanIdList, new Date());
+                run(() -> resumptionTaskBusiness.buildTask(null, reallyPlanIdList, new Date()), threadPoolTaskExecutor);
             }
             return;
         }
@@ -1561,11 +1561,20 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
         if (OrgTypeEnum.SHEGN_LIAN_SHE.equals(orgTypeEnum) || OrgTypeEnum.BAN_SHI_CHU.equals(orgTypeEnum) || OrgTypeEnum.DIQU_HANG_SHE.equals(orgTypeEnum)) {
             throw new ServiceException("orgIdList中传递机构信息错误!与计划信息不匹配");
         }
-        List<AppPlan> list = Lists.newArrayList(appPlan);
-        resumptionTaskBusiness.buildTask(orgIdList, list, new Date());
+        if (OrgTypeEnum.HANG_SHE.equals(orgTypeEnum)){
+            run(() -> resumptionTaskBusiness.buildTask(null, Lists.newArrayList(appPlan), new Date()), threadPoolTaskExecutor);
+        }else {
+            run(() -> resumptionTaskBusiness.buildTask(orgIdList, Lists.newArrayList(appPlan), new Date()), threadPoolTaskExecutor);
+        }
+
 
     }
 
+    @Override
+    public void run(Runnable runnable, ThreadPoolTaskExecutor threadPoolTaskExecutor) {
+        CompletableFuture.runAsync(runnable, threadPoolTaskExecutor);
+    }
+
     private List<AppPlan> findReallyPlanIdList(List<Long> planIdList, List<Long> orgIdList) {
 
         LambdaQueryWrapper<AppPlan> wrapper = new LambdaQueryWrapper<>();
@@ -1594,9 +1603,11 @@ public class AppPlanServiceImpl extends ServiceImpl<AppPlanMapper, AppPlan> impl
     private Map<String, Object> getHsOrg(List<SysOrgVO> orgCacheList, List<SysOrgVO> needBuildTaskOrgList, OrgTypeEnum needBuildTaskOrgTypeEnum) {
         List<SysOrgVO> list = new ArrayList<>();
         boolean underHsOrgType = false;
-        switch (needBuildTaskOrgTypeEnum){
+        switch (needBuildTaskOrgTypeEnum) {
             //如果是省联社/办事处/地区行社 那么找到下级的行社
-            case SHEGN_LIAN_SHE: case BAN_SHI_CHU: case DIQU_HANG_SHE:
+            case SHEGN_LIAN_SHE:
+            case BAN_SHI_CHU:
+            case DIQU_HANG_SHE:
                 for (SysOrgVO sysOrgVO : needBuildTaskOrgList) {
                     String path = sysOrgVO.getPath();
                     List<SysOrgVO> collect = orgCacheList

+ 6 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/service/impl/CoreSafecheckPlanServiceImpl.java

@@ -55,6 +55,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Async;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
@@ -1137,4 +1138,9 @@ public class CoreSafecheckPlanServiceImpl extends ServiceImpl<CoreSafecheckPlanM
     public void compensate(CompensateDto compensateDto) {
 
     }
+
+    @Override
+    public void run(Runnable runnable, ThreadPoolTaskExecutor threadPoolTaskExecutor) {
+
+    }
 }