Kaynağa Gözat

Merge remote-tracking branch 'origin/V0.0.2' into V0.0.2

# Conflicts:
#	soc-modules/soc-modules-system/src/main/java/com/xunmei/system/listener/WorkTimeChangeEventListener.java
jingyuanchao 2 yıl önce
ebeveyn
işleme
cbaf9ae7bb
13 değiştirilmiş dosya ile 406 ekleme ve 234 silme
  1. 8 1
      project_data/sql/0.0.2/soc/soc.sql
  2. 16 0
      soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/retrieval/vo/KeyValueVo.java
  3. 106 20
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/TaskCreatingServiceImplBase.java
  4. 1 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/domain/Resumption.java
  5. 19 5
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/impl/ResumptionRecordServiceImpl.java
  6. 2 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/impl/ResumptionServiceImpl.java
  7. 133 64
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/task/RebuildResumptionTaskBusiness.java
  8. 7 51
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/task/ResumptionTaskBusiness.java
  9. 2 0
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/retrieval/mapper/CoreMonitoringRetrievalTaskMapper.java
  10. 97 89
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/retrieval/service/impl/CoreMonitoringRetrievalTaskServiceImpl.java
  11. 5 1
      soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/job/SafetyCheckJobBusiness.java
  12. 2 2
      soc-modules/soc-modules-core/src/main/resources/mapper/resumption/ResumptionRecordMapper.xml
  13. 8 0
      soc-modules/soc-modules-core/src/main/resources/mapper/retrieval/CoreMonitoringRetrievalTaskMapper.xml

+ 8 - 1
project_data/sql/0.0.2/soc/soc.sql

@@ -1097,7 +1097,7 @@ END IF;
     -- 安全检查检查项所属机构id
     IF
         NOT EXISTS ( SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = DATABASE () and  TABLE_NAME = 'core_safecheck_plan_to_point' AND COLUMN_NAME = 'of_org_id' ) THEN
-        ALTER TABLE `core_safecheck_plan_to_point` ADD COLUMN `of_org_id` INT NULL DEFAULT NULL COMMENT '所属机构id';
+        ALTER TABLE `core_safecheck_plan_to_point` ADD COLUMN `of_org_id` bigint NULL COMMENT '所属机构id';
 
     END IF;
 
@@ -1108,6 +1108,13 @@ END IF;
 
     END IF;
 
+	-- 履职任务表存储父计划id及创建任务计划id
+    IF
+        NOT EXISTS ( SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = DATABASE () and TABLE_NAME = 'core_resumption' AND COLUMN_NAME = 'parent_plan_id' ) THEN
+        ALTER TABLE `core_resumption` 
+			CHANGE COLUMN `plan_id` `parent_plan_id` bigint NULL DEFAULT NULL COMMENT '父计划id,没有就与plan_id一致' AFTER `ymd_minute`,
+			ADD COLUMN `plan_id` bigint NULL COMMENT '生成任务的计划id' AFTER `parent_plan_id`;
+    END IF;
 
 
 	ALTER TABLE `core_protection` MODIFY COLUMN `device_id` BIGINT NULL DEFAULT NULL COMMENT '设备ID' AFTER `id`;

+ 16 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/retrieval/vo/KeyValueVo.java

@@ -0,0 +1,16 @@
+package com.xunmei.common.core.domain.retrieval.vo;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * 监控调阅任务对象 core_monitoring_retrieval_task
+ *
+ * @author xunmei
+ * @date 2023-08-25
+ */
+@Data
+public class KeyValueVo {
+    private Long key;
+    private Long value;
+}

+ 106 - 20
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/TaskCreatingServiceImplBase.java

@@ -4,16 +4,23 @@ import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 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.R;
 import com.xunmei.common.core.domain.worktime.dto.WorkTimeDto;
+import com.xunmei.common.core.enums.OrgTypeEnum;
 import com.xunmei.common.core.event.WorkTimeChangeEvent;
 import com.xunmei.common.core.utils.DateUtils;
 import com.xunmei.common.core.enums.CycleCommonEnum;
+import com.xunmei.core.resumption.domain.AppPlan;
+import com.xunmei.system.api.Eto.OrgListByTypesConditionEto;
+import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.RemoteWorkTimeService;
 import com.xunmei.common.core.domain.worktime.domain.SysWorkTime;
+import com.xunmei.system.api.domain.SysOrg;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import java.util.*;
@@ -23,6 +30,9 @@ public abstract class TaskCreatingServiceImplBase<M extends BaseMapper<T>, T> ex
     @Autowired
     private RemoteWorkTimeService workTimeService;
 
+    @Autowired
+    private RemoteOrgService orgService;
+
     public List<SysWorkTime> selectWorkTimeList(Date now, CycleCommonEnum cycle, WorkTimeChangeEvent event) {
         return selectWorkTimeList(now, cycle, event.getOrgIds());
     }
@@ -39,14 +49,15 @@ public abstract class TaskCreatingServiceImplBase<M extends BaseMapper<T>, T> ex
         workTimeDto.setOrgIdList(orgIds);
         workTimeDto.setStartTime(startTime);
         workTimeDto.setEndTime(endTime);
+
 //
         return workTimeService.findWorkTimeByRange(workTimeDto, SecurityConstants.FROM_SOURCE).getData();
     }
 
     public Map<Long, Boolean> orgWorkTimeStatusMap(Date now, CycleCommonEnum cycle, List<Long> orgIds) {
         List<SysWorkTime> times = selectWorkTimeList(now, cycle, orgIds);
-        if(CollectionUtil.isEmpty(times)){
-            return  new HashMap<>();
+        if (CollectionUtil.isEmpty(times)) {
+            return new HashMap<>();
         }
         Map<Long, List<SysWorkTime>> map = times.stream()
                 .filter(t -> ObjectUtil.equal(t.getIsEnable(), 1L))
@@ -58,38 +69,59 @@ public abstract class TaskCreatingServiceImplBase<M extends BaseMapper<T>, T> ex
         return r;
     }
 
+    public Map<Long, SysWorkTime> orgSingleWorkTimeMap(Date now, CycleCommonEnum cycle, List<Long> orgIds) {
+        List<SysWorkTime> times = selectWorkTimeList(now, cycle, orgIds);
+        if (CollectionUtil.isEmpty(times)) {
+            return new HashMap<>();
+        }
+        Map<Long, List<SysWorkTime>> map = times.stream()
+                .filter(t -> ObjectUtil.equal(t.getIsEnable(), 1L))
+                .collect(Collectors.groupingBy(t -> t.getOrgId()));
+        Map<Long, SysWorkTime> r = new HashMap<>();
+        map.forEach((k, v) -> {
+            r.put(k, CollectionUtil.isNotEmpty(v) ? v.get(0) : null);
+        });
+        return r;
+    }
+
     public void rebuildTask(WorkTimeChangeEvent timeChangeEvent) {
-        if(containCurrentCycle(timeChangeEvent.getDataList(),CycleCommonEnum.DAILY)){
-            SysWorkTime today= timeChangeEvent.getDataList().stream().filter(d->d.getYmdDate().equals (DateUtil.beginOfDay(new Date()) )).findFirst().get();
+        if (containCurrentCycle(timeChangeEvent.getDataList(), CycleCommonEnum.DAILY)) {
+            SysWorkTime today = timeChangeEvent.getDataList().stream().filter(d -> d.getYmdDate().equals(DateUtil.beginOfDay(new Date()))).findFirst().get();
             rebuildDayTask(timeChangeEvent.getOrgIds(), today);
         }
 
-        if(containCurrentCycle(timeChangeEvent.getDataList(),CycleCommonEnum.WEEKLY)){
+        if (containCurrentCycle(timeChangeEvent.getDataList(), CycleCommonEnum.WEEKLY)) {
             DateRange range = DateUtils.getStartAndEnd(new Date(), CycleCommonEnum.WEEKLY);
-            rebuildWeeklyTask(timeChangeEvent.getOrgIds(),range.getStartTime(),range.getEndTime());
+            rebuildWeeklyTask(timeChangeEvent.getOrgIds(), range.getStartTime(), range.getEndTime());
         }
 
-        if(containCurrentCycle(timeChangeEvent.getDataList(),CycleCommonEnum.MONTHLY)){
+        if (containCurrentCycle(timeChangeEvent.getDataList(), CycleCommonEnum.MONTHLY)) {
             DateRange range = DateUtils.getStartAndEnd(new Date(), CycleCommonEnum.MONTHLY);
-            rebuildMonthTask(timeChangeEvent.getOrgIds(),range.getStartTime(),range.getEndTime());
+            rebuildMonthTask(timeChangeEvent.getOrgIds(), range.getStartTime(), range.getEndTime());
         }
 
-        if(containCurrentCycle(timeChangeEvent.getDataList(),CycleCommonEnum.QUARTERLY)){
+        if (containCurrentCycle(timeChangeEvent.getDataList(), CycleCommonEnum.QUARTERLY)) {
             DateRange range = DateUtils.getStartAndEnd(new Date(), CycleCommonEnum.QUARTERLY);
-            rebuildQuarterTask(timeChangeEvent.getOrgIds(),range.getStartTime(),range.getEndTime());
+            rebuildQuarterTask(timeChangeEvent.getOrgIds(), range.getStartTime(), range.getEndTime());
         }
 
-        if(containCurrentCycle(timeChangeEvent.getDataList(),CycleCommonEnum.HALF_YEARLY)){
+        if (containCurrentCycle(timeChangeEvent.getDataList(), CycleCommonEnum.HALF_YEARLY)) {
             DateRange range = DateUtils.getStartAndEnd(new Date(), CycleCommonEnum.HALF_YEARLY);
-            rebuildHalfYearTask(timeChangeEvent.getOrgIds(),range.getStartTime(),range.getEndTime());
+            rebuildHalfYearTask(timeChangeEvent.getOrgIds(), range.getStartTime(), range.getEndTime());
         }
 
-        if(containCurrentCycle(timeChangeEvent.getDataList(),CycleCommonEnum.YEARLY)){
+        if (containCurrentCycle(timeChangeEvent.getDataList(), CycleCommonEnum.YEARLY)) {
             DateRange range = DateUtils.getStartAndEnd(new Date(), CycleCommonEnum.YEARLY);
-            rebuildYearTask(timeChangeEvent.getOrgIds(),range.getStartTime(),range.getEndTime());
+            rebuildYearTask(timeChangeEvent.getOrgIds(), range.getStartTime(), range.getEndTime());
         }
     }
 
+    /*
+     * 按计划重新生成。为保持通用,参数使用object
+     * */
+    public void rebuildCurrentCycleTask(List<Object> plans) {
+    }
+
     private Boolean containCurrentCycle(List<SysWorkTime> workTimes, CycleCommonEnum cycle) {
         DateRange range = DateUtils.getStartAndEnd(new Date(), cycle);
         Date start = range.getStartTime();
@@ -110,15 +142,69 @@ public abstract class TaskCreatingServiceImplBase<M extends BaseMapper<T>, T> ex
         }
     }
 
-    public  void rebuildDayTask(List<Long> orgIds, SysWorkTime workTime){}
+    public void rebuildDayTask(List<Long> orgIds, SysWorkTime workTime) {
+    }
 
-    public  void rebuildWeeklyTask(List<Long> orgIds, Date startDate, Date endDate){}
+    public void rebuildWeeklyTask(List<Long> orgIds, Date startDate, Date endDate) {
+    }
 
-    public  void rebuildMonthTask(List<Long> orgIds, Date startDate, Date endDate){}
+    public void rebuildMonthTask(List<Long> orgIds, Date startDate, Date endDate) {
+    }
+
+    public void rebuildQuarterTask(List<Long> orgIds, Date startDate, Date endDate) {
+    }
+
+    public void rebuildHalfYearTask(List<Long> orgIds, Date startDate, Date endDate) {
+    }
+
+    public void rebuildYearTask(List<Long> orgIds, Date startDate, Date endDate) {
+    }
+
+    /**
+     * 获取计划的执行机构id
+     *
+     * @param appPlan
+     * @return
+     */
+    protected List<Long> getPlanOrgIds(AppPlan appPlan) {
+        List<Long> orgIds = null;
+//        if (appPlan.getExecType()!=null&&appPlan.getExecType() == 0) {//0机构类型需要安类型去机构里查询所以的机构
+        OrgListByTypesConditionEto cond = new OrgListByTypesConditionEto();
+        cond.setOrgId(appPlan.getPlanOfOrgId());
+        cond.setOrgTypes(Arrays.asList(appPlan.getExecOrgType().toString()));
+        R<List<SysOrg>> r = orgService.listByTypes(cond);
+        if (ObjectUtil.isNull(r) || ObjectUtil.isEmpty(r.getData())) {
+            return new ArrayList<>();
+        }
+        orgIds = r.getData().stream().map(i -> i.getId()).collect(Collectors.toList());
+//        }
+//        else {
+//            List<SysOrg> sysOrgs = orgService.selectByOrgType(appPlan.getExecOrgType(), SecurityConstants.INNER);
+//             orgIds = sysOrgs.stream().map(SysOrg::getId).collect(Collectors.toList());
+////            orgIds = appPlanService.findExecOrgByPlan(appPlan.getId());
+//        }
+
+        return orgIds;
+    }
+
+//    protected List<SysOrg> getPlanOrgs(AppPlan appPlan) {
+//        List<Long> orgIds = null;
+//        if (appPlan.getExecType() == 0) {//0机构类型需要安类型去机构里查询所以的机构
+//            orgIds = orgService.findListByOrgType(appPlan.getExecOrgType(), SecurityConstants.INNER).getData();
+//        } else {
+//            orgIds = appPlanService.findExecOrgByPlan(appPlan.getId());
+//        }
+//
+//        return orgService.listByIds(orgIds, SecurityConstants.INNER).getData();
+//    }
 
-    public  void rebuildQuarterTask(List<Long> orgIds, Date startDate, Date endDate){}
+    protected List<Long> getHangsheOrgIds() {
+        R<List<Long>> allHangshe = orgService.findListByOrgType(OrgTypeEnum.HANG_SHE.getCode(), SecurityConstants.INNER);
+        if (ObjectUtil.isNull(allHangshe) || ObjectUtil.isEmpty(allHangshe.getData())) {
+            return new ArrayList<>();
+        }
 
-    public  void rebuildHalfYearTask(List<Long> orgIds, Date startDate, Date endDate){}
+        return allHangshe.getData();
+    }
 
-    public  void rebuildYearTask(List<Long> orgIds, Date startDate, Date endDate){}
 }

+ 1 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/domain/Resumption.java

@@ -93,6 +93,7 @@ public class Resumption extends BaseEntity {
     private AppPlan plan;
 
 
+    private Long parentPlanId;
     private Long planId;
     private Date startTime;
     private Date endTime;

+ 19 - 5
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/impl/ResumptionRecordServiceImpl.java

@@ -13,11 +13,13 @@ import com.xunmei.common.core.exception.ServiceException;
 import com.xunmei.common.core.utils.DateHelper;
 import com.xunmei.common.core.vo.IdNameVo;
 import com.xunmei.common.core.web.page.TableDataInfo;
+import com.xunmei.core.resumption.domain.AppPlanToRole;
 import com.xunmei.core.resumption.domain.Resumption;
 import com.xunmei.core.resumption.dto.resumptionRecord.ResumptionNFCDto;
 import com.xunmei.core.resumption.dto.resumptionRecord.ResumptionRecordPageDto;
 import com.xunmei.core.resumption.dto.resumptionRecord.ResumptionRoleDto;
 import com.xunmei.core.resumption.mapper.AppPlanMapper;
+import com.xunmei.core.resumption.mapper.AppPlanToRoleMapper;
 import com.xunmei.core.resumption.mapper.AppResumptionDataRemarkimgMapper;
 import com.xunmei.core.resumption.mapper.ResumptionRecordMapper;
 import com.xunmei.core.resumption.service.AppPlanService;
@@ -69,6 +71,9 @@ public class ResumptionRecordServiceImpl extends ServiceImpl<ResumptionRecordMap
     @Resource
     private RemoteDictDataService remoteDictDataService;
 
+    @Resource
+    private AppPlanToRoleMapper appPlanToRoleMapper;
+
     @Override
     public TableDataInfo selectList(ResumptionRecordPageDto pageDto) {
         Page<ResumptionRecordPageVo> page = pageDto.getPageDto();
@@ -225,9 +230,15 @@ public class ResumptionRecordServiceImpl extends ServiceImpl<ResumptionRecordMap
         List<IdNameVo> orgNames = orgService.getParentName(list.stream()
                         .map(i -> i.getOrgId()).distinct().collect(Collectors.toList()), SecurityConstants.INNER)
                 .getData();
+
+
+        LambdaQueryWrapper<AppPlanToRole> prWrapper = new LambdaQueryWrapper<>();
+        prWrapper.in(AppPlanToRole::getPlanId, list.stream().map(ResumptionRecordPageVo::getPlanId).distinct().collect(Collectors.toList()));
+        List<AppPlanToRole> prMapper = appPlanToRoleMapper.selectList(prWrapper);
+
         List<IdNameVo> roleNames = roleService.getNames(RoleConditionEto
                 .builder()
-                .ids(list.stream().map(i -> i.getRoleId()).distinct().collect(Collectors.toList())).build());
+                .ids(prMapper.stream().map(i -> i.getRoleId()).distinct().collect(Collectors.toList())).build());
         list.stream().filter(pageVo -> ObjectUtil.equal(pageVo.getStatus(), "1")).forEach(pageVo -> pageVo.setSubmitter(null));
 
         //List<Org> orgList = orgService.all();
@@ -244,10 +255,13 @@ public class ResumptionRecordServiceImpl extends ServiceImpl<ResumptionRecordMap
 //            if (plan.isPresent()) {
 //                vo.setPlanName(plan.get().getName());
 //            }
+            List<Long> roleIds = prMapper.stream().filter(pr -> ObjectUtil.equal(pr.getPlanId(), vo.getPlanId()))
+                    .map(AppPlanToRole::getRoleId)
+                    .collect(Collectors.toList());
 
-            Optional<IdNameVo> role = roleNames.stream().filter(r -> r.getId().equals(vo.getRoleId())).findFirst();
-            if (role.isPresent()) {
-                vo.setRoleName(role.get().getName());
+            List<IdNameVo> roles = roleNames.stream().filter(r -> roleIds.contains(r.getId())).collect(Collectors.toList());
+            if (CollectionUtil.isNotEmpty(roles)) {
+                vo.setRoleName(StringUtils.join(roles.stream().map(IdNameVo::getName).collect(Collectors.toList()), ","));
             }
         }
     }
@@ -346,7 +360,7 @@ public class ResumptionRecordServiceImpl extends ServiceImpl<ResumptionRecordMap
         Map<String, SysDictData> dicts = remoteDictDataService.selectDictByeType("resumption_status", SecurityConstants.INNER)
                 .stream().collect(Collectors.toMap(SysDictData::getDictValue, v -> v));
         List<ResumptionRecordPageVo> limit = data.stream().limit(10000).collect(Collectors.toList());
-        int index=1;
+        int index = 1;
         for (ResumptionRecordPageVo r : limit) {
             r.setIndex(index++);
             if (dicts.containsKey(r.getStatus())) {

+ 2 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/service/impl/ResumptionServiceImpl.java

@@ -139,7 +139,8 @@ public class ResumptionServiceImpl extends ServiceImpl<ResumptionMapper, Resumpt
             resumption.setYmdHour(Long.valueOf(ymd.getHour()));
             resumption.setYmdQuarter(Long.valueOf(ymd.getQuarter()));
             resumption.setYmdHalfyear(Long.valueOf(ymd.getHalfyear()));
-            resumption.setPlanId((ObjectUtil.equal(appPlan.getParentId(), -1L) || ObjectUtil.isNull(appPlan.getParentId())) ? appPlan.getId() : appPlan.getParentId());
+            resumption.setParentPlanId((ObjectUtil.equal(appPlan.getParentId(), -1L) || ObjectUtil.isNull(appPlan.getParentId())) ? appPlan.getId() : appPlan.getParentId());
+            resumption.setPlanId(appPlan.getId());
             resumption.setOrgId(orgId);
             resumption.setType(type.getValue());
             resumption.setRoleId(roleId);

+ 133 - 64
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/task/RebuildResumptionTaskBusiness.java

@@ -4,14 +4,18 @@ import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.io.unit.DataUnit;
 import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.google.common.collect.Lists;
 import com.xunmei.common.core.constant.SecurityConstants;
+import com.xunmei.common.core.domain.DateRange;
 import com.xunmei.common.core.domain.worktime.domain.SysWorkTime;
 import com.xunmei.common.core.enums.CycleCommonEnum;
+import com.xunmei.common.core.utils.DateUtils;
+import com.xunmei.common.core.utils.ResumptionType;
 import com.xunmei.common.core.utils.Ymd;
 import com.xunmei.core.TaskCreatingServiceImplBase;
 import com.xunmei.core.resumption.domain.AppPlan;
@@ -20,101 +24,157 @@ import com.xunmei.core.resumption.domain.Resumption;
 import com.xunmei.core.resumption.mapper.AppPlanMapper;
 import com.xunmei.core.resumption.mapper.AppPlanToRoleMapper;
 import com.xunmei.core.resumption.mapper.ResumptionMapper;
+import com.xunmei.core.resumption.service.AppPlanService;
+import com.xunmei.core.resumption.service.IAppRulePointService;
+import com.xunmei.core.resumption.vo.AppRulePointTaskVo;
 import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.domain.SysOrg;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
 import java.util.stream.Collectors;
 
 @Component
+@Slf4j
 public class RebuildResumptionTaskBusiness extends TaskCreatingServiceImplBase<ResumptionMapper, Resumption> {
     @Autowired
     private AppPlanMapper appPlanMapper;
 
     @Autowired
-    private AppPlanToRoleMapper appPlanToRoleMapper;
+    private RemoteOrgService remoteOrgService;
 
     @Autowired
-    private RemoteOrgService remoteOrgService;
+    private IAppRulePointService appRulePointService;
+
+    @Autowired
+    private AppPlanService appPlanService;
 
+    /*
+     * 按计划重新生成。为保持通用,参数使用object.只支持同属一个父计划的子计划
+     * */
     @Override
-    public void rebuildDayTask(List<Long> orgIds, SysWorkTime workTime) {
-        try {
-            List<Resumption> resumptionList = queryTask(workTime.getYmdDate(), CycleCommonEnum.DAILY, orgIds);
-            List<Resumption> resumptionListYlz = resumptionList.stream().filter(item -> item.getStatus() == 3).collect(Collectors.toList());
-            if (CollectionUtils.isNotEmpty(resumptionList)) {
-                //取出未履职的数据(待履职,进行中)
-                List<Resumption> resumptionListWlz = resumptionList.stream().filter(item -> item.getStatus() == 1 || item.getStatus() == 2).collect(Collectors.toList());
-                //删除这些数据
-                if (CollectionUtils.isNotEmpty(resumptionListWlz)) {
-                    baseMapper.deleteBatchIds(resumptionListWlz.stream().map(Resumption::getId).collect(Collectors.toList()));
-                }
+    @Transactional
+    public void rebuildCurrentCycleTask(List<Object> plans) {
+        if (CollectionUtils.isEmpty(plans)) {
+            return;
+        }
+
+        List<AppPlan> appPlans = new ArrayList<>();
+        for (Object plan : plans) {
+            if (plan.getClass() == AppPlan.class) {
+                appPlans.add((AppPlan) plan);
             }
+        }
+        if (CollectionUtils.isEmpty(appPlans)) {
+            return;
+        }
+
+        AppPlan plan = appPlans.get(0);
+        CycleCommonEnum cycle = CycleCommonEnum.getEnum(plan.getPlanCycle());
+        DateRange range = DateUtils.getStartAndEnd(new Date(), cycle);
 
-            //营业重新生成任务
-            if (workTime.getIsEnable() == 1) {
-                List<Long> hsOrgIds = remoteOrgService.selectParentHs(orgIds, SecurityConstants.INNER)
-                        .stream().map(SysOrg::getId)
-                        .collect(Collectors.toList());
-                List<AppPlan> listPlans = queryPlans(hsOrgIds, CycleCommonEnum.DAILY,new ArrayList<>());
-                //通过计划id获取计划关系的角色
-                if (CollectionUtils.isNotEmpty(listPlans)) {
-                    List<Long> planIds = listPlans.stream().map(AppPlan::getId).collect(Collectors.toList());
-                    List<AppPlanToRole> appPlanToRoles = appPlanToRoleMapper.selectList(new QueryWrapper<AppPlanToRole>().lambda().in(AppPlanToRole::getPlanId, planIds));
-                    List<Resumption> newResumptionList = new ArrayList<>();
-                    for (AppPlan plan : listPlans) {
-                        //根据计划获取角色
-//                        List<AppPlanToRole> planToRoles = appPlanToRoles.stream().filter(item -> item.getPlanId().equals(plan.getId())).collect(Collectors.toList());
-                        List<Resumption> resumptionLista = this.buildResumptions(plan,  workTime);
-                        if (CollectionUtils.isNotEmpty(resumptionLista)) {
-                            //根据planId和roleId是否判断resumptionLista中的数据是否在resumptionListYlz中
-                            List<Resumption> resumptionListb = resumptionLista.stream().filter(item -> !resumptionListYlz.stream().filter(item1 -> item1.getPlanId().equals(item.getPlanId())
-                                    && item1.getRoleId().equals(item.getRoleId())).findFirst().isPresent()).collect(Collectors.toList());
-                            if (CollectionUtils.isNotEmpty(resumptionListb)) {
-                                newResumptionList.addAll(resumptionListb);
-                            }
-                        }
-                    }
-                    this.saveBatch(newResumptionList);
+        List<Resumption> resumptionList = queryTask(range.getStartTime(), cycle, null, appPlans.stream().map(AppPlan::getId).collect(Collectors.toList()));
+        List<Long> deleteIds = resumptionList.stream()
+                .filter(r -> (ObjectUtil.equal(r.getStatus(), 1) || ObjectUtil.equal(r.getStatus(), 2)))
+                .map(Resumption::getId).collect(Collectors.toList());
+        if (CollectionUtils.isNotEmpty(deleteIds)) {
+            baseMapper.deleteBatchIds(deleteIds);
+        }
+
+        createTask(appPlans);
+    }
+
+    private void createTask(List<AppPlan> appPlanList) {
+        List<Resumption> resumptions = new ArrayList<>();
+        for (AppPlan appPlan : appPlanList) {
+            //获取履职计划中对应的检查要点
+            List<AppRulePointTaskVo> pointList = appRulePointService.findPointByPlan(appPlan.getId());
+            if (pointList.size() <= 0) {//没有检查项不生成履职任务
+                log.info("error:该计划ID:" + appPlan.getId() + "没有检查项");
+                continue;
+            }
+
+            List<Long> orgIdList = getPlanOrgIds(appPlan);
+            if (CollectionUtils.isEmpty(orgIdList)) {//没有检查项不生成履职任务
+                log.info("error:该计划ID:{}没有执行机构", appPlan.getId());
+                continue;
+            }
+            //获取履职角色
+            List<Long> roleIds = appPlanService.findRoleByPlan(appPlan.getId());
+            if (CollectionUtils.isEmpty(roleIds)) {//没有检查项不生成履职任务
+                log.info("error:该计划ID:{}没有履职角色", appPlan.getId());
+                continue;
+            }
+            CycleCommonEnum cycleCommonEnum=CycleCommonEnum.getEnum(appPlan.getPlanCycle());
+            DateRange range=  DateUtils.getStartAndEnd(new Date(), cycleCommonEnum);
+            Map<Long, SysWorkTime> workTimes = orgSingleWorkTimeMap(new Date(), cycleCommonEnum, orgIdList);
+            for (Long orgId : orgIdList) {
+                if (!workTimes.containsKey(orgId) || ObjectUtil.isNull(workTimes.get(orgId)) || ObjectUtil.notEqual(workTimes.get(orgId).getIsEnable(), 1)) {
+                    continue;
                 }
+                SysWorkTime workTime = workTimes.get(orgId);
 
+                List<Resumption> tasks;
+                if(ObjectUtil.equal(CycleCommonEnum.DAILY.getCode(),appPlan.getPlanCycle())){
+                    tasks= buildResumptions(appPlan, orgId, workTime);
+                }else{
+                    tasks=buildResumptions(appPlan,orgId,range.getStartTime(),range.getEndTime(),0L);
+                }
 
+                if (CollectionUtils.isNotEmpty(tasks)) {
+                    resumptions.addAll(tasks);
+                }
             }
-        } catch (Exception e) {
-            e.printStackTrace();
         }
+
+        this.saveBatch(resumptions);
+    }
+
+    @Override
+    public void rebuildDayTask(List<Long> orgIds, SysWorkTime workTime) {
+        rebuildTask(orgIds, workTime.getYmdDate(), workTime.getYmdDate(), CycleCommonEnum.DAILY, workTime);
     }
 
     @Override
     public void rebuildWeeklyTask(List<Long> orgIds, Date startDate, Date endDate) {
-        rebuildTask(orgIds, startDate, endDate, CycleCommonEnum.WEEKLY);
+        rebuildTask(orgIds, startDate, endDate, CycleCommonEnum.WEEKLY, null);
     }
 
 
     @Override
     public void rebuildMonthTask(List<Long> orgIds, Date startDate, Date endDate) {
-        rebuildTask(orgIds, startDate, endDate, CycleCommonEnum.MONTHLY);
+        rebuildTask(orgIds, startDate, endDate, CycleCommonEnum.MONTHLY, null);
     }
 
     @Override
     public void rebuildQuarterTask(List<Long> orgIds, Date startDate, Date endDate) {
-        rebuildTask(orgIds, startDate, endDate, CycleCommonEnum.QUARTERLY);
+        rebuildTask(orgIds, startDate, endDate, CycleCommonEnum.QUARTERLY, null);
     }
 
     @Override
     public void rebuildHalfYearTask(List<Long> orgIds, Date startDate, Date endDate) {
-        rebuildTask(orgIds, startDate, endDate, CycleCommonEnum.HALF_YEARLY);
+        rebuildTask(orgIds, startDate, endDate, CycleCommonEnum.HALF_YEARLY, null);
     }
 
     @Override
     public void rebuildYearTask(List<Long> orgIds, Date startDate, Date endDate) {
-        rebuildTask(orgIds, startDate, endDate, CycleCommonEnum.YEARLY);
+        rebuildTask(orgIds, startDate, endDate, CycleCommonEnum.YEARLY, null);
     }
 
-    private void rebuildTask(List<Long> orgIds, Date startDate, Date endDate, CycleCommonEnum cycle) {
-        List<Resumption> resumptionList = queryTask(startDate, cycle, orgIds);
+    /**
+     * @param orgIds
+     * @param startDate
+     * @param endDate
+     * @param cycle
+     * @param workTime  周期为每日时,使用该值
+     */
+    @Transactional
+    public void rebuildTask(List<Long> orgIds, Date startDate, Date endDate, CycleCommonEnum cycle, SysWorkTime workTime) {
+        List<Resumption> resumptionList = queryTask(startDate, cycle, orgIds, null);
         List<Long> deleteIds = resumptionList.stream()
                 .filter(r -> (ObjectUtil.equal(r.getStatus(), 1) || ObjectUtil.equal(r.getStatus(), 2)))
                 .map(Resumption::getId).collect(Collectors.toList());
@@ -130,7 +190,7 @@ public class RebuildResumptionTaskBusiness extends TaskCreatingServiceImplBase<R
 
         List<SysOrg> orgs = remoteOrgService.selectByOrgIdList(orgIds, SecurityConstants.INNER);
         for (SysOrg org : orgs) {
-            if(ObjectUtil.isNull(org.getType())){
+            if (ObjectUtil.isNull(org.getType())) {
                 continue;
             }
 
@@ -154,24 +214,27 @@ public class RebuildResumptionTaskBusiness extends TaskCreatingServiceImplBase<R
             for (AppPlan plan : listPlans) {
                 //根据计划获取角色
 //                List<AppPlanToRole> planToRoles = appPlanToRoles.stream().filter(item -> item.getPlanId().equals(plan.getId())).collect(Collectors.toList());
+
                 Long executedCount = executedResumptionList.stream()
                         .filter(r -> ObjectUtil.equal(r.getOrgId(), orgId) && ObjectUtil.equal(r.getPlanId(), plan.getParentId()))
                         .count();
-                List<Resumption> planResumptionList = this.buildResumptions(plan, startDate, endDate, executedCount);
+
+                List<Resumption> planResumptionList;
+                if (ObjectUtil.equal(cycle, CycleCommonEnum.DAILY)) {
+                    planResumptionList = this.buildResumptions(plan, orgId, workTime);
+                } else {
+                    planResumptionList = this.buildResumptions(plan, orgId, startDate, endDate, executedCount);
+                }
+
                 if (CollectionUtils.isNotEmpty(planResumptionList)) {
-                    //根据planId和roleId是否判断resumptionLista中的数据是否在resumptionListYlz中
-//                    List<Resumption> resumptionListb = resumptionLista.stream().filter(item -> !resumptionListYlz.stream().filter(item1 -> item1.getPlanId().equals(item.getPlanId())
-//                            && item1.getRoleId().equals(item.getRoleId())).findFirst().isPresent()).collect(Collectors.toList());
-//                    if (CollectionUtils.isNotEmpty(resumptionListb)) {
                     newResumptionList.addAll(planResumptionList);
-//                    }
                 }
             }
             this.saveBatch(newResumptionList);
         }
     }
 
-    private List<Resumption> buildResumptions(AppPlan appPlan, SysWorkTime workTime) {
+    private List<Resumption> buildResumptions(AppPlan appPlan, Long execOrgId, SysWorkTime workTime) {
         DateTime dateTime = new DateTime(workTime.getYmdDate());
         String opentime = workTime.getOpenTime();//营业时间
         String closetime = workTime.getCloseTime();//营业终了
@@ -197,10 +260,10 @@ public class RebuildResumptionTaskBusiness extends TaskCreatingServiceImplBase<R
             planendTime = DateUtil.endOfDay(time2).setField(DateField.MILLISECOND, 0);
         }
 
-        return buildResumptions(appPlan, planstartTime, planendTime, 0L);
+        return buildResumptions(appPlan, execOrgId, planstartTime, planendTime, 0L);
     }
 
-    private List<Resumption> buildResumptions(AppPlan appPlan, Date planStartTime, Date planEndTime, Long executedCount) {
+    private List<Resumption> buildResumptions(AppPlan appPlan, Long execOrgId, Date planStartTime, Date planEndTime, Long executedCount) {
         List<Resumption> resumptionList = new ArrayList<>();
         Long count = 1L;
         if (NumberUtil.isNumber(appPlan.getCount())) {
@@ -221,8 +284,9 @@ public class RebuildResumptionTaskBusiness extends TaskCreatingServiceImplBase<R
             resumption.setYmdHour(Long.valueOf(ymd.getHour()));
             resumption.setYmdQuarter(Long.valueOf(ymd.getQuarter()));
             resumption.setYmdHalfyear(Long.valueOf(ymd.getHalfyear()));
-            resumption.setPlanId((ObjectUtil.equal(appPlan.getParentId(), -1L) || ObjectUtil.isNull(appPlan.getParentId())) ? appPlan.getId() : appPlan.getParentId());
-            resumption.setOrgId(appPlan.getPlanOfOrgId());
+            resumption.setParentPlanId((ObjectUtil.equal(appPlan.getParentId(), -1L) || ObjectUtil.isNull(appPlan.getParentId())) ? appPlan.getId() : appPlan.getParentId());
+            resumption.setPlanId(appPlan.getId());
+            resumption.setOrgId(execOrgId);
             resumption.setType(appPlan.getPlanCycle());
             resumption.setPlanStartTime(planStartTime);
             resumption.setPlanEndTime(planEndTime);
@@ -233,10 +297,15 @@ public class RebuildResumptionTaskBusiness extends TaskCreatingServiceImplBase<R
         return resumptionList;
     }
 
-    private List<Resumption> queryTask(Date ymdDate, CycleCommonEnum cycle, List<Long> orgIds) {
+    private List<Resumption> queryTask(Date ymdDate, CycleCommonEnum cycle, List<Long> orgIds, List<Long> planIds) {
         QueryWrapper<Resumption> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(Resumption::getYmdDate, ymdDate);
-        queryWrapper.lambda().in(Resumption::getOrgId, orgIds);
+        if (CollectionUtils.isNotEmpty(orgIds)) {
+            queryWrapper.lambda().in(Resumption::getOrgId, orgIds);
+        }
+        if (CollectionUtils.isNotEmpty(planIds)) {
+            queryWrapper.lambda().in(Resumption::getPlanId, planIds);
+        }
         queryWrapper.lambda().eq(Resumption::getType, cycle.getCode());
 
         List<Resumption> resumptionList = baseMapper.selectList(queryWrapper);
@@ -250,7 +319,7 @@ public class RebuildResumptionTaskBusiness extends TaskCreatingServiceImplBase<R
      * @param cycle
      * @return
      */
-    private List<AppPlan> queryPlans(List<Long> planOfOrgId, CycleCommonEnum cycle,List<Integer> execOrgTypes) {
+    private List<AppPlan> queryPlans(List<Long> planOfOrgId, CycleCommonEnum cycle, List<Integer> execOrgTypes) {
         if (CollectionUtils.isEmpty(planOfOrgId)) {
             return new ArrayList<>();
         }
@@ -259,8 +328,8 @@ public class RebuildResumptionTaskBusiness extends TaskCreatingServiceImplBase<R
         qw.lambda().eq(AppPlan::getPlanCycle, cycle.getCode());
         qw.lambda().in(AppPlan::getPlanOfOrgId, planOfOrgId);
 
-        if(CollectionUtils.isNotEmpty(execOrgTypes)){
-            qw.lambda().in(AppPlan::getExecOrgType,execOrgTypes);
+        if (CollectionUtils.isNotEmpty(execOrgTypes)) {
+            qw.lambda().in(AppPlan::getExecOrgType, execOrgTypes);
         }
         List<AppPlan> listPlans = appPlanMapper.selectList(qw);
 

+ 7 - 51
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/resumption/task/ResumptionTaskBusiness.java

@@ -49,8 +49,7 @@ public class ResumptionTaskBusiness extends TaskCreatingServiceImplBase<AppPlanM
     private ResumptionService resumptionService;
     @Autowired
     private RemoteWorkTimeService workTimeService;
-    @Autowired
-    private RemoteOrgService orgService;
+
     @Autowired
     private AppPlanService appPlanService;
     @Autowired
@@ -225,12 +224,12 @@ public class ResumptionTaskBusiness extends TaskCreatingServiceImplBase<AppPlanM
                 continue;
             }
             //获取所有要点中的区域id
-            Set<Long> nfcBindIdList = new HashSet<>();
-            for (AppRulePointTaskVo p : pointList) {
-                if (p.getNfcBindId() != null && p.getPointScan() == 1) {
-                    nfcBindIdList.add(p.getNfcBindId());
-                }
-            }
+//            Set<Long> nfcBindIdList = new HashSet<>();
+//            for (AppRulePointTaskVo p : pointList) {
+//                if (p.getNfcBindId() != null && p.getPointScan() == 1) {
+//                    nfcBindIdList.add(p.getNfcBindId());
+//                }
+//            }
             //根据区域获取区域内绑定的nfc
             /*NFCBindJobDto jobDto = new NFCBindJobDto();
             jobDto.setAreaIds(new ArrayList(areaList));
@@ -751,52 +750,9 @@ public class ResumptionTaskBusiness extends TaskCreatingServiceImplBase<AppPlanM
 //        this.resumptionService.updateTaskStatus();
 //    }
 
-    /**
-     * 获取计划的执行机构id
-     *
-     * @param appPlan
-     * @return
-     */
-    private List<Long> getPlanOrgIds(AppPlan appPlan) {
-        List<Long> orgIds = null;
-//        if (appPlan.getExecType()!=null&&appPlan.getExecType() == 0) {//0机构类型需要安类型去机构里查询所以的机构
-        OrgListByTypesConditionEto cond = new OrgListByTypesConditionEto();
-        cond.setOrgId(appPlan.getPlanOfOrgId());
-        cond.setOrgTypes(Arrays.asList(appPlan.getExecOrgType().toString()));
-        R<List<SysOrg>> r = orgService.listByTypes(cond);
-        if (ObjectUtil.isNull(r) || ObjectUtil.isEmpty(r.getData())) {
-            return new ArrayList<>();
-        }
-        orgIds = r.getData().stream().map(i -> i.getId()).collect(Collectors.toList());
-//        }
-//        else {
-//            List<SysOrg> sysOrgs = orgService.selectByOrgType(appPlan.getExecOrgType(), SecurityConstants.INNER);
-//             orgIds = sysOrgs.stream().map(SysOrg::getId).collect(Collectors.toList());
-////            orgIds = appPlanService.findExecOrgByPlan(appPlan.getId());
-//        }
-
-        return orgIds;
-    }
 
-    private List<SysOrg> getPlanOrgs(AppPlan appPlan) {
-        List<Long> orgIds = null;
-        if (appPlan.getExecType() == 0) {//0机构类型需要安类型去机构里查询所以的机构
-            orgIds = orgService.findListByOrgType(appPlan.getExecOrgType(), SecurityConstants.INNER).getData();
-        } else {
-            orgIds = appPlanService.findExecOrgByPlan(appPlan.getId());
-        }
 
-        return orgService.listByIds(orgIds, SecurityConstants.INNER).getData();
-    }
 
-    private List<Long> getHangsheOrgIds() {
-        R<List<Long>> allHangshe = orgService.findListByOrgType(OrgTypeEnum.HANG_SHE.getCode(), SecurityConstants.INNER);
-        if (ObjectUtil.isNull(allHangshe) || ObjectUtil.isEmpty(allHangshe.getData())) {
-            return new ArrayList<>();
-        }
-
-        return allHangshe.getData();
-    }
 
     /**
      * 根据作息变更生成新的每日每小时履职任务

+ 2 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/retrieval/mapper/CoreMonitoringRetrievalTaskMapper.java

@@ -174,4 +174,6 @@ public interface CoreMonitoringRetrievalTaskMapper extends BaseMapper<CoreMonito
     List<CoreSafetyExceptionData> selectMonitorOverTimeExceptionData(@Param("time") DateTime time);
 
     List<CoreSafetyExceptionData> selectMonitorNumsExceptionData(@Param("time") DateTime time);
+
+    List<CoreMonitoringRetrievalTask> selectTaskList(@Param("taskTime")LocalDate taskTime, @Param("orgIds")List<Long> orgIds,  @Param("cycle")Integer cycle);
 }

+ 97 - 89
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/retrieval/service/impl/CoreMonitoringRetrievalTaskServiceImpl.java

@@ -19,10 +19,7 @@ import com.xunmei.common.core.domain.panel.enums.PanelTypeEnums;
 import com.xunmei.common.core.domain.panel.vo.PanelListVo;
 import com.xunmei.common.core.domain.retrieval.domain.CoreMonitoringRetrievalTask;
 import com.xunmei.common.core.domain.retrieval.dto.RetrievalTaskPageDto;
-import com.xunmei.common.core.domain.retrieval.vo.CoreMonitoringRetrievalTaskExcelVo;
-import com.xunmei.common.core.domain.retrieval.vo.CoreMonitoringRetrievalTaskOneVo;
-import com.xunmei.common.core.domain.retrieval.vo.CoreMonitoringRetrievalTaskVo;
-import com.xunmei.common.core.domain.retrieval.vo.TaskDataVo;
+import com.xunmei.common.core.domain.retrieval.vo.*;
 import com.xunmei.common.core.domain.safetyindex.domain.CoreSafetyExceptionData;
 import com.xunmei.common.core.enums.edu.EduTrainingPlanCycleEnum;
 import com.xunmei.common.core.domain.worktime.domain.SysWorkTime;
@@ -108,6 +105,7 @@ public class CoreMonitoringRetrievalTaskServiceImpl extends ServiceImpl<CoreMoni
         }
         //获取数据
         page = coreMonitoringRetrievalTaskMapper.selectPageList(page, request);
+        this.taskChangeForTimeWorkChange(null);
         //抓换为TableDataInfo适配前端
         return TableDataInfo.build(page);
     }
@@ -606,112 +604,107 @@ public class CoreMonitoringRetrievalTaskServiceImpl extends ServiceImpl<CoreMoni
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void taskChangeForTimeWorkChange(WorkTimeChangeEvent event) {
+   public void taskChangeForTimeWorkChange(WorkTimeChangeEvent event) {
         //修改的作息的日期
         Date ymdDate  =  event.getDataList().get(0).getDate();
 
         //受影响的机构
         List<Long> orgIds = event.getOrgIds();
+    /*    //测试用的数据
+         Date ymdDate  =  new Date();
+        //受影响的机构
+        List<Long> orgIds = new ArrayList<>();
+        orgIds.add(4358025846521957L);
+        orgIds.add(4358025846456575L);*/
         //判断ymdDate是否是当天
         Date today = new Date();
         //要删除的任务
         List<CoreMonitoringRetrievalTask> deleteTaskList = new ArrayList<>();
         //要重新生成任务的机构和计划
-        List<KeyValue> keyValues = new ArrayList<>();
+        List<KeyValueVo> keyValues = new ArrayList<>();
+
+        Map<String,Object> dayObjectMap = null;
+        Map<String,Object> weekObjectMap=null;
+        Map<String,Object> monthObjectMap=null;
+        Map<String,Object> quarterObjectMap=null;
+        Map<String,Object> halfYearObjectMap=null;
+        Map<String,Object> yearObjectMap=null;
         //判断ymdDate 月today是否是同一日期
         if(DateUtil.isSameDay(ymdDate,today)){
            //获取当天的调阅任务
-            Map<String,Object> dayObjectMap = this.deleteTaskList(ymdDate,orgIds,RetrievalTaskCycle.DAYCYCLE.getCode());
-            List<CoreMonitoringRetrievalTask> list = (List<CoreMonitoringRetrievalTask>) dayObjectMap.get("deleteTaskList");
-            if(CollectionUtil.isNotEmpty(list)){
-                deleteTaskList.addAll(list);
-            }
-            List<KeyValue> keyValueList = (List<KeyValue>) dayObjectMap.get("keyValues");
-            if(CollectionUtil.isNotEmpty(keyValueList)){
-                keyValues.addAll(keyValueList);
-            }
-        }else{
-            //周
-            Map<String,Object> weekObjectMap = this.deleteTaskList(ymdDate,orgIds,RetrievalTaskCycle.WEEKCYCLE.getCode());
-            List<CoreMonitoringRetrievalTask> listweek = (List<CoreMonitoringRetrievalTask>) weekObjectMap.get("deleteTaskList");
-            if(CollectionUtil.isNotEmpty(listweek)){
-                deleteTaskList.addAll(listweek);
-            }
-            List<KeyValue> keyValueListweek = (List<KeyValue>) weekObjectMap.get("keyValues");
-            if(CollectionUtil.isNotEmpty(keyValueListweek)){
-                keyValues.addAll(keyValueListweek);
-            }
-            //月
-            Map<String,Object> monthObjectMap = this.deleteTaskList(ymdDate,orgIds,RetrievalTaskCycle.MONTHCYCLE.getCode());
-            List<CoreMonitoringRetrievalTask> listmonth = (List<CoreMonitoringRetrievalTask>) monthObjectMap.get("deleteTaskList");
-            if(CollectionUtil.isNotEmpty(listmonth)){
-                deleteTaskList.addAll(listmonth);
-            }
-            List<KeyValue> keyValueListmonth = (List<KeyValue>) monthObjectMap.get("keyValues");
-            if(CollectionUtil.isNotEmpty(keyValueListmonth)){
-                keyValues.addAll(keyValueListmonth);
-            }
-            //季度
-            Map<String,Object> quarterObjectMap = this.deleteTaskList(ymdDate,orgIds,RetrievalTaskCycle.QUARTERCYCLE.getCode());
-            List<CoreMonitoringRetrievalTask> listquarter = (List<CoreMonitoringRetrievalTask>) quarterObjectMap.get("deleteTaskList");
-            if(CollectionUtil.isNotEmpty(listquarter)){
-                deleteTaskList.addAll(listquarter);
-            }
-            List<KeyValue> keyValueListquarter = (List<KeyValue>) quarterObjectMap.get("keyValues");
-            if(CollectionUtil.isNotEmpty(keyValueListquarter)){
-                keyValues.addAll(keyValueListquarter);
-            }
-            //半年
-            Map<String,Object> halfYearObjectMap = this.deleteTaskList(ymdDate,orgIds,RetrievalTaskCycle.HALFYEARCYCLE.getCode());
-            List<CoreMonitoringRetrievalTask> listhalfYear = (List<CoreMonitoringRetrievalTask>) halfYearObjectMap.get("deleteTaskList");
-            if(CollectionUtil.isNotEmpty(listhalfYear)){
-                deleteTaskList.addAll(listhalfYear);
-            }
-            List<KeyValue> keyValueListhalfYear = (List<KeyValue>) halfYearObjectMap.get("keyValues");
-            if(CollectionUtil.isNotEmpty(keyValueListhalfYear)){
-                keyValues.addAll(keyValueListhalfYear);
-            }
-            //年
-            Map<String,Object> yearObjectMap = this.deleteTaskList(ymdDate,orgIds,RetrievalTaskCycle.YEARCYCLE.getCode());
-            List<CoreMonitoringRetrievalTask> listYear = (List<CoreMonitoringRetrievalTask>) yearObjectMap.get("deleteTaskList");
-            if(CollectionUtil.isNotEmpty(listYear)){
-                deleteTaskList.addAll(listYear);
-            }
-            List<KeyValue> keyValueListYear = (List<KeyValue>) yearObjectMap.get("keyValues");
-            if(CollectionUtil.isNotEmpty(keyValueListYear)){
-                keyValues.addAll(keyValueListYear);
-            }
+            dayObjectMap = this.deleteTaskList(ymdDate,orgIds,RetrievalTaskCycle.DAYCYCLE.getCode());
         }
+            weekObjectMap = this.deleteTaskList(ymdDate,orgIds,RetrievalTaskCycle.WEEKCYCLE.getCode());
+            monthObjectMap = this.deleteTaskList(ymdDate,orgIds,RetrievalTaskCycle.MONTHCYCLE.getCode());
+            quarterObjectMap = this.deleteTaskList(ymdDate,orgIds,RetrievalTaskCycle.QUARTERCYCLE.getCode());
+            halfYearObjectMap = this.deleteTaskList(ymdDate,orgIds,RetrievalTaskCycle.HALFYEARCYCLE.getCode());
+            yearObjectMap = this.deleteTaskList(ymdDate,orgIds,RetrievalTaskCycle.YEARCYCLE.getCode());
+
+        Map<String,Object> allMap = this.buildDeleteTaskList(dayObjectMap,weekObjectMap,monthObjectMap,quarterObjectMap,halfYearObjectMap,yearObjectMap);
+        deleteTaskList = (List<CoreMonitoringRetrievalTask>) allMap.get("deleteTaskList");
+        keyValues = (List<KeyValueVo>) allMap.get("keyValues");
         //删除任务
         if(CollectionUtil.isNotEmpty(deleteTaskList)){
             this.removeBatchByIds(deleteTaskList);
         }
         //生成新的任务
-        if(CollectionUtil.isNotEmpty(keyValues)){
-           this.createNewtask(keyValues,ymdDate);
-        }
+       // if(CollectionUtil.isNotEmpty(keyValues)){
+           this.createNewtask(keyValues,ymdDate,orgIds);
+       // }
 
     }
 
-    private void createNewtask(List<KeyValue> keyValues,Date taskTime) {
-        List<CoreMonitoringRetrievalTask> taskList = new ArrayList<>();
-        Set<Long>  planId = new HashSet<>();
-        for(KeyValue keyValue:keyValues){
-            planId.add((Long) keyValue.getValue());
+    private Map<String, Object> buildDeleteTaskList(Map<String, Object>... ObjMaps) {
+        Map<String, Object> deleteTaskListMap = new HashMap<>();
+        List<CoreMonitoringRetrievalTask> deleteTaskList = new ArrayList<>();
+        List<KeyValueVo> keyValues = new ArrayList<>();
+        for (Map<String, Object> objMap : ObjMaps) {
+            if(objMap != null&&objMap.containsKey("deleteTaskList")&&objMap.containsKey("keyValues")){
+                List<CoreMonitoringRetrievalTask> listTask = (List<CoreMonitoringRetrievalTask>) objMap.get("deleteTaskList");
+                List<KeyValueVo> keyValueList = (List<KeyValueVo>) objMap.get("keyValues");
+                if(CollectionUtil.isNotEmpty(listTask)){
+                    deleteTaskList.addAll(listTask);
+                }
+                if (CollectionUtil.isNotEmpty(keyValueList)) {
+                    keyValues.addAll(keyValueList);
+                }
+            }
+
         }
+        deleteTaskListMap.put("deleteTaskList", deleteTaskList);
+        deleteTaskListMap.put("keyValues", keyValues);
+        return deleteTaskListMap;
+    }
+    private void createNewtask(List<KeyValueVo> keyValues,Date taskTime,List<Long> orgIds) {
+        //获取所有机构
+        List<SysOrg> orgList = RemoteCallHandlerExecutor.executeRemoteCall(() -> orgService.findAllOrg(SecurityConstants.INNER), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
+        List<SysOrg> orgs = orgList.stream().filter(r->orgIds.contains(r.getId())).collect(Collectors.toList());
+        //通过parentId获取orgList中orgs的直属上级
+        List<SysOrg> parentOrgList =  orgList.stream().filter(r->orgs.stream().anyMatch(s->s.getParentId().equals(r.getId()))).collect(Collectors.toList());
+        List<Long> orgParentIds = parentOrgList.stream().map(r->r.getId()).collect(Collectors.toList());
+
+        //获取计划
+        List<CoreMonitoringRetrievalTask> taskList = new ArrayList<>();
         QueryWrapper<TMonitoringRetrievalPlan> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().in(TMonitoringRetrievalPlan::getId, planId);
+        queryWrapper.lambda().in(TMonitoringRetrievalPlan::getOrgId, orgParentIds);
         queryWrapper.lambda().eq(TMonitoringRetrievalPlan::getPlanStatus, 1);
         queryWrapper.lambda().eq(TMonitoringRetrievalPlan::getIsDeleted, 0);
-        queryWrapper.lambda().eq(TMonitoringRetrievalPlan::getCreateType, 1);
+        /*queryWrapper.lambda().eq(TMonitoringRetrievalPlan::getCreateType, 1);*/
         List<TMonitoringRetrievalPlan> plans = itMonitoringRetrievalPlanService.list(queryWrapper);
         List<TMonitoringRetrievalPlan> planList = new ArrayList<>();
-        //获取所有机构
-        List<SysOrg> orgList = RemoteCallHandlerExecutor.executeRemoteCall(() -> orgService.findAllOrg(SecurityConstants.INNER), ErrorMsgConstants.QUERY_ORG_DATA_ERROR);
+
         for(TMonitoringRetrievalPlan p:plans){
-            List<KeyValue> keyValuesa = keyValues.stream().filter(r->r.getValue().toString().equals(p.getId().toString())).collect(Collectors.toList());
-            List<SysOrg> orgs = orgList.stream().filter(r->keyValuesa.stream().anyMatch(s->s.getKey().toString().equals(r.getId().toString()))).collect(Collectors.toList());
             for (SysOrg s : orgs) {
+                if(CollectionUtil.isNotEmpty(keyValues)){
+                    //机构和计划没有同时在排除的范围内的计划不生成任务
+                    if(keyValues.stream().filter(r->r.getValue().equals(p.getId())&&r.getKey().equals(s.getId())).count()>0){
+                        continue;
+                    }
+                }
+                //计划的机构id不是当前机构的直属父机构,不生成任务
+                if(!p.getOrgId().equals(s.getParentId())){
+                    continue;
+                }
                 TMonitoringRetrievalPlan plan = new TMonitoringRetrievalPlan();
                 BeanUtils.copyProperties(p, plan);
                 plan.setPlanName(p.getPlanName());
@@ -736,22 +729,34 @@ public class CoreMonitoringRetrievalTaskServiceImpl extends ServiceImpl<CoreMoni
             }
         }
         for (TMonitoringRetrievalPlan plan : planList) {
-            DateRange dateRange =  DateUtils.getStartAndEnd(taskTime, Integer.valueOf(plan.getPlanCycle()+1));
+            //任务的开始时间按周期计算用下面的方式
+            DateRange dateRange =  DateUtils.getStartAndEnd(taskTime, Integer.valueOf(plan.getPlanCycle()));
             Instant instant = dateRange.getStartTime().toInstant();
-
             // 创建 ZonedDateTime 对象,并指定时区
             ZonedDateTime zdt = instant.atZone(ZoneId.systemDefault());
             // 转换为 LocalDate 对象
             LocalDate localDate = zdt.toLocalDate();
-            //获取计划关联的机构
+
+            //任务整体按周期日期计算,最终结果排除所修改的日期前面的数据
             List<SysOrg> listByType = orgList.stream().filter(r -> r.getId().equals(plan.getOrgId()) && r.getDeleted() == 0 && r.getIsLock().equals(0)).collect(Collectors.toList());
             if (CollectionUtil.isNotEmpty(listByType)) {
                 List<CoreMonitoringRetrievalTask> list = this.buildCoreMonitoringRetrievalTask(plan, localDate, listByType.get(0));
                 if (CollectionUtil.isNotEmpty(list)) {
-                    taskList.addAll(list);
+                    if(!plan.getPlanCycle().equals(RetrievalTaskCycle.DAYCYCLE.getCode().toString())){
+                        List<CoreMonitoringRetrievalTask> lista = list.stream().filter(r -> r.getPlanEndTime().after(taskTime)).collect(Collectors.toList());
+                        if(CollectionUtil.isNotEmpty(lista)){
+                            taskList.addAll(lista);
+                        }
+                    }else{
+                        List<CoreMonitoringRetrievalTask> lista = list.stream().filter(r -> r.getPlanEndTime().after(new Date())).collect(Collectors.toList());
+                        if(CollectionUtil.isNotEmpty(lista)){
+                            taskList.addAll(lista);
+                        }
+                    }
                 }
             }
         }
+
         this.saveBatch(taskList);
     }
 
@@ -762,16 +767,18 @@ public class CoreMonitoringRetrievalTaskServiceImpl extends ServiceImpl<CoreMoni
         Date datetime = ymdDate;
         if(!cycle.equals(RetrievalTaskCycle.DAYCYCLE.getCode())){
              //根据ymdDate获取周的第一天的日期
-            DateRange dateRange =  DateUtils.getStartAndEnd(ymdDate,cycle+1);
+            DateRange dateRange =  DateUtils.getStartAndEnd(ymdDate,cycle);
             datetime = dateRange.getStartTime();
         }
-        queryWrapper.lambda().eq(CoreMonitoringRetrievalTask::getYmdDate,datetime);
+        LocalDate taskTime=DateUtils.toLocalDate(datetime);
+/*        queryWrapper.lambda().eq(CoreMonitoringRetrievalTask::getYmdDate,taskTime);
         //公共条件
         queryWrapper.lambda().in(CoreMonitoringRetrievalTask::getOrgId,orgIds);
         queryWrapper.lambda().eq(CoreMonitoringRetrievalTask::getCycle,cycle);
-        List<CoreMonitoringRetrievalTask> taskList = this.list(queryWrapper);
+        List<CoreMonitoringRetrievalTask> taskList = this.list(queryWrapper);*/
+        List<CoreMonitoringRetrievalTask> taskList = baseMapper.selectTaskList(taskTime,orgIds,cycle);
         List<CoreMonitoringRetrievalTask> deleteTaskList = new ArrayList<>();
-        List<KeyValue> keyValues = new ArrayList<>();
+        List<KeyValueVo> keyValues = new ArrayList<>();
         if(CollectionUtil.isNotEmpty(taskList)){
             //将数据按机构分组
             Map<Long,List<CoreMonitoringRetrievalTask>> taskMap = taskList.stream().collect(Collectors.groupingBy(CoreMonitoringRetrievalTask::getOrgId));
@@ -785,8 +792,9 @@ public class CoreMonitoringRetrievalTaskServiceImpl extends ServiceImpl<CoreMoni
                     //没有完成的任务,改批次的任务删除
                     if(num==0){
                         deleteTaskList.addAll(taskList2);
+                    }else{
                         Long planId = taskList2.get(0).getPlanId();
-                        KeyValue keyValue = new KeyValue();
+                        KeyValueVo keyValue = new KeyValueVo();
                         keyValue.setKey(key);
                         keyValue.setValue(planId);
                         keyValues.add(keyValue);

+ 5 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/safetyCheck/job/SafetyCheckJobBusiness.java

@@ -299,7 +299,11 @@ public class SafetyCheckJobBusiness {
                 vo.setCheckOrg(check);
                 vo.setExecOrg(org);
                 vo.setPlanCycle(Math.toIntExact(plan.getPlanCycle()));
-                vo.setPlanName(plan.getPlanName()+"第"+(i+1)+"次");
+                if (plan.getCount()==1){
+                    vo.setPlanName(plan.getPlanName());
+                }else {
+                    vo.setPlanName(plan.getPlanName() + "第" + (i + 1) + "次");
+                }
                 list.add(vo);
             }
 //            for (CoreSafecheckPlanToRole role : roles) {

+ 2 - 2
soc-modules/soc-modules-core/src/main/resources/mapper/resumption/ResumptionRecordMapper.xml

@@ -207,10 +207,10 @@
                 </foreach>
             </if>
             <if test="pageDto.executeRole !=null ">
-                and r.role_id = #{pageDto.executeRole}
+                and r.plan_id in (select plan_id from core_resumption_plan_to_role where role_id=#{pageDto.executeRole})
             </if>
             <if test="pageDto.planId !=null ">
-                and r.plan_id = #{pageDto.planId}
+                and r.parent_plan_id = #{pageDto.planId}
             </if>
             <!--            <if test="pageDto.checkSub == true">-->
             <!--                and o.path like concat(#{pageDto.orgPath},'%')-->

+ 8 - 0
soc-modules/soc-modules-core/src/main/resources/mapper/retrieval/CoreMonitoringRetrievalTaskMapper.xml

@@ -533,4 +533,12 @@
             plan_id = #{planId}
         and    `status` IN (2,3)
     </select>
+    <select id="selectTaskList"
+            resultType="com.xunmei.common.core.domain.retrieval.domain.CoreMonitoringRetrievalTask">
+       select * from  core_monitoring_retrieval_task where ymd_date = #{taskTime} and cycle=#{cycle} and org_id in
+        <foreach item="orgId" collection="orgIds" open="(" separator="," close=")">
+            #{orgId}
+        </foreach>
+
+    </select>
 </mapper>