|
|
@@ -7,6 +7,7 @@ import cn.hutool.core.util.ObjectUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
+import com.xunmei.common.core.constant.Constants;
|
|
|
import com.xunmei.common.core.constant.SecurityConstants;
|
|
|
import com.xunmei.common.core.domain.DateRange;
|
|
|
import com.xunmei.common.core.domain.worktime.domain.SysWorkTime;
|
|
|
@@ -96,7 +97,7 @@ public class SafetyCheckJobBusiness extends TaskCreatingServiceImplBase<CoreSafe
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
public void createTaskForCycle(DateTime dateTime, Date start, Date end, CoreSafecheckPlan plan, Boolean isNeedSendTodo, Integer sourceType) throws Exception {
|
|
|
- List<PlanTaskBuildVo> planTask = createPlanTask(plan,new ArrayList<>());
|
|
|
+ List<PlanTaskBuildVo> planTask = createPlanTask(plan, new ArrayList<>());
|
|
|
//生成具体任务
|
|
|
buildTask(dateTime, planTask, start, end, isNeedSendTodo, sourceType);
|
|
|
}
|
|
|
@@ -159,7 +160,7 @@ public class SafetyCheckJobBusiness extends TaskCreatingServiceImplBase<CoreSafe
|
|
|
|
|
|
List<PlanTaskBuildVo> tasks = new ArrayList<>();
|
|
|
for (CoreSafecheckPlan plan : plans) {
|
|
|
- List<PlanTaskBuildVo> planTask = createPlanTask(plan,new ArrayList<>());
|
|
|
+ List<PlanTaskBuildVo> planTask = createPlanTask(plan, new ArrayList<>());
|
|
|
tasks.addAll(planTask);
|
|
|
}
|
|
|
|
|
|
@@ -175,23 +176,22 @@ public class SafetyCheckJobBusiness extends TaskCreatingServiceImplBase<CoreSafe
|
|
|
*/
|
|
|
@Async
|
|
|
public void createTaskByPlans(List<CoreSafecheckPlan> plans) {
|
|
|
- createTask(plans,null);
|
|
|
+ createTask(plans, null);
|
|
|
}
|
|
|
|
|
|
@Async
|
|
|
- public void createTaskByPlans(List<CoreSafecheckPlan> plans,Long parentPlanId) {
|
|
|
- String redisKey="SafeCheck_Creating_Task" + parentPlanId;
|
|
|
+ public void createTaskByPlans(List<CoreSafecheckPlan> plans, Long parentPlanId) {
|
|
|
+ String redisKey = "SafeCheck_Creating_Task" + parentPlanId;
|
|
|
RedisUtils.deleteObject(redisKey);
|
|
|
Boolean hasKey = RedisUtils.hasKey(redisKey);
|
|
|
if (!hasKey) {
|
|
|
- RedisUtils.setCacheObject(redisKey, parentPlanId, Duration.ofMillis(1000 * 60*5));
|
|
|
+ RedisUtils.setCacheObject(redisKey, parentPlanId, Duration.ofMillis(1000 * 60 * 5));
|
|
|
}
|
|
|
- createTask(plans,null);
|
|
|
+ createTask(plans, null);
|
|
|
RedisUtils.deleteObject(redisKey);
|
|
|
}
|
|
|
|
|
|
- public void createTask(List<CoreSafecheckPlan> plans,List<Long> needBuildTaskOrgIds)
|
|
|
- {
|
|
|
+ public void createTask(List<CoreSafecheckPlan> plans, List<Long> needBuildTaskOrgIds) {
|
|
|
try {
|
|
|
if (plans != null && plans.size() > 0) {
|
|
|
DateTime datetime = new DateTime();
|
|
|
@@ -207,13 +207,13 @@ public class SafetyCheckJobBusiness extends TaskCreatingServiceImplBase<CoreSafe
|
|
|
if (ObjectUtil.notEqual(plan.getPlanStatus(), PlanStatus.USING.getCode())) {
|
|
|
continue;
|
|
|
}
|
|
|
- List<PlanTaskBuildVo> planTask = createPlanTask(plan,needBuildTaskOrgIds);
|
|
|
+ List<PlanTaskBuildVo> planTask = createPlanTask(plan, needBuildTaskOrgIds);
|
|
|
tasks.addAll(planTask);
|
|
|
}
|
|
|
|
|
|
String collect = tasks.stream().map(t -> t.getExecOrg().getId()).distinct().map(String::valueOf).collect(Collectors.joining(","));
|
|
|
- System.out.println("("+collect+")");
|
|
|
- System.out.println("("+collect.split(",").length+")");
|
|
|
+ System.out.println("(" + collect + ")");
|
|
|
+ System.out.println("(" + collect.split(",").length + ")");
|
|
|
|
|
|
//生成具体任务
|
|
|
buildTask(datetime, tasks, dateRange.getStartTime(), dateRange.getEndTime(), true, 0);
|
|
|
@@ -228,7 +228,7 @@ public class SafetyCheckJobBusiness extends TaskCreatingServiceImplBase<CoreSafe
|
|
|
*
|
|
|
* @param plan
|
|
|
*/
|
|
|
- private List<PlanTaskBuildVo> createPlanTask(CoreSafecheckPlan plan,List<Long> needBuildTaskOrgIds) {
|
|
|
+ private List<PlanTaskBuildVo> createPlanTask(CoreSafecheckPlan plan, List<Long> needBuildTaskOrgIds) {
|
|
|
|
|
|
List<PlanTaskBuildVo> list = new ArrayList<>();
|
|
|
Integer execOrgType = Math.toIntExact(plan.getExecOrgType());
|
|
|
@@ -295,7 +295,7 @@ public class SafetyCheckJobBusiness extends TaskCreatingServiceImplBase<CoreSafe
|
|
|
checkOrgs = checkOrgs.stream().filter(o -> o.getIsLock() < 1).collect(Collectors.toList());
|
|
|
if (ObjectUtil.isNotEmpty(needBuildTaskOrgIds)) {
|
|
|
//此处是运维接口需要指定生成某个机构的情况下需要过滤
|
|
|
- checkOrgs=checkOrgs.stream().filter(o->needBuildTaskOrgIds.contains(o.getId())).collect(Collectors.toList());
|
|
|
+ checkOrgs = checkOrgs.stream().filter(o -> needBuildTaskOrgIds.contains(o.getId())).collect(Collectors.toList());
|
|
|
}
|
|
|
//构建数据
|
|
|
List<PlanTaskBuildVo> bs = getBuild(plan, org, checkOrgs, roles);
|
|
|
@@ -405,6 +405,18 @@ public class SafetyCheckJobBusiness extends TaskCreatingServiceImplBase<CoreSafe
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
+ //递归查找最早的计划id,任务在多次撤回编辑下发后任务id发生变化,为避免生成重复任务,需要查询到最初的计划来查询是否存在相同周期的任务来去重
|
|
|
+ private Long getReallyPlanId(Long planId, Long copyPlanId) {
|
|
|
+ if (ObjectUtil.equal(planId, copyPlanId)) {
|
|
|
+ return planId;
|
|
|
+ }
|
|
|
+ final CoreSafecheckPlan plan = planMapper.get(copyPlanId);
|
|
|
+ if (plan == null) {
|
|
|
+ return planId;
|
|
|
+ }
|
|
|
+ return getReallyPlanId(copyPlanId, plan.getSolidId());
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 构建任务所需条件
|
|
|
*
|
|
|
@@ -415,6 +427,12 @@ public class SafetyCheckJobBusiness extends TaskCreatingServiceImplBase<CoreSafe
|
|
|
* @return
|
|
|
*/
|
|
|
private List<PlanTaskBuildVo> getBuild(CoreSafecheckPlan plan, SysOrg check, List<SysOrg> execOrgList, List<CoreSafecheckPlanToRole> roles) {
|
|
|
+ List<CoreSafetyTask> exitTaskList = new ArrayList<>();
|
|
|
+ if (ObjectUtil.notEqual(plan.getId(), plan.getSolidId())) {
|
|
|
+ Long planId = getReallyPlanId(plan.getId(), plan.getSolidId());
|
|
|
+ exitTaskList = checkTaskService.selectTaskListByPlanId(planId);
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
List<PlanTaskBuildVo> list = new ArrayList<>();
|
|
|
|
|
|
@@ -470,12 +488,29 @@ public class SafetyCheckJobBusiness extends TaskCreatingServiceImplBase<CoreSafe
|
|
|
vo.setCount((int) i);
|
|
|
vo.setPlanCycle(Math.toIntExact(plan.getPlanCycle()));
|
|
|
//任务名称去除为1
|
|
|
- if (rangeMap.size()<=1) {
|
|
|
+ if (rangeMap.size() <= 1) {
|
|
|
vo.setPlanName(plan.getPlanName());
|
|
|
} else {
|
|
|
vo.setPlanName(plan.getPlanName() + "第" + cou + "次");
|
|
|
}
|
|
|
cou++;
|
|
|
+ if (!exitTaskList.isEmpty()) {
|
|
|
+ PlanTaskBuildVo finalVo = vo;
|
|
|
+ final Optional<CoreSafetyTask> optional = exitTaskList.stream().filter(t->{
|
|
|
+ final String exitST = DateUtil.format(t.getPlanStartTime(), Constants.HMS_FORMAT);
|
|
|
+ final String exitED = DateUtil.format(t.getPlanEndTime(), Constants.HMS_FORMAT);
|
|
|
+ final String newST = DateUtil.format(finalVo.getStartTime(), Constants.HMS_FORMAT);
|
|
|
+ final String newED = DateUtil.format(finalVo.getEndTime(), Constants.HMS_FORMAT);
|
|
|
+ if (ObjectUtil.equal(exitST,newST)&&ObjectUtil.equal(exitED,newED)&&ObjectUtil.equal(t.getOrgId(),finalVo.getExecOrg().getId())){
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }).findAny();
|
|
|
+ if (optional.isPresent()){
|
|
|
+ log.info("安全检查任务生成时,发现计划{}已存在相同周期任务",plan.getPlanName());
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
list.add(vo);
|
|
|
}
|
|
|
// for (CoreSafecheckPlanToRole role : roles) {
|
|
|
@@ -642,7 +677,7 @@ public class SafetyCheckJobBusiness extends TaskCreatingServiceImplBase<CoreSafe
|
|
|
}
|
|
|
|
|
|
public void rebuildTask(List<Long> orgIds, Date startDate, Date endDate, CycleCommonEnum cycle) {
|
|
|
- DateRange range=DateUtils.getStartAndEnd(startDate,cycle);
|
|
|
+ DateRange range = DateUtils.getStartAndEnd(startDate, cycle);
|
|
|
Map<Long, Boolean> workingMap = orgWorkTimeStatusMap(range, orgIds);
|
|
|
// List<Long> deleteTaskIds = new ArrayList<>();
|
|
|
Integer planCycle = 0;
|