فهرست منبع

预案演练代码提交

jingyuanchao 2 سال پیش
والد
کامیت
b1b959cc96

+ 1 - 0
soc-common/soc-common-core/src/main/java/com/xunmei/common/core/domain/drill/vo/CoreDrillTaskReportVo.java

@@ -17,6 +17,7 @@ public class CoreDrillTaskReportVo {
 
     @ApiModelProperty(value = "机构名称")
     private String orgName;
+    private String orgPath;
 
 
     @ApiModelProperty(value = "应培训数量")

+ 2 - 0
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/mapper/CoreDrillPlanMapper.java

@@ -76,5 +76,7 @@ public interface CoreDrillPlanMapper extends BaseMapper<CoreDrillPlan> {
 
     List<Long> selectIdByParentId(@Param("planId") Long planId);
 
+    List<Long> selectAllIdByParentId(@Param("planId") Long planId);
+
     List<CoreDrillPlanRoleVo> selectPlanRole(@Param("orgId") Long orgId);
 }

+ 1 - 1
soc-modules/soc-modules-core/src/main/java/com/xunmei/core/drill/mapper/CoreDrillTaskMapper.java

@@ -27,7 +27,7 @@ public interface CoreDrillTaskMapper extends BaseMapper<CoreDrillTask> {
 
     CoreDrillTaskDetailVo selectDrillTaskDetail(@Param("id") Long id);
 
-    List<CoreDrillTaskReportVo> selectReport(@Param("request") CoreDrillTaskReportDto request);
+    List<CoreDrillTaskReportVo> selectReport(@Param("request") CoreDrillTaskReportDto request, @Param("planId") Long planId, @Param("planIdList") List<Long> planIdList);
 
     Integer checkHasTask(@Param("planId") Long planId);
 

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

@@ -29,6 +29,7 @@ import com.xunmei.core.drill.service.ICoreDrillTaskService;
 import com.xunmei.system.api.RemoteOrgService;
 import com.xunmei.system.api.domain.SysOrg;
 import com.xunmei.system.api.function.RemoteCallHandlerExecutor;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -52,6 +53,7 @@ import org.springframework.transaction.support.TransactionSynchronizationManager
  * @author xunmei
  * @date 2023-09-08
  */
+@Slf4j
 @Service
 public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, CoreDrillPlan> implements ICoreDrillPlanService {
     @Autowired
@@ -256,7 +258,7 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
         }
         Long planId = plan.getId();
         //删除原有数据, 然后重新生成计划,任务
-        List<Long> planIdList = coreDrillPlanMapper.selectIdByParentId(planId);
+        List<Long> planIdList = coreDrillPlanMapper.selectAllIdByParentId(planId);
         if (ObjectUtil.isNotEmpty(planIdList)) {
             coreDrillPlanMapper.deleteBatchIds(planIdList);
             coreDrillPlanToExecOrgMapper.delete(new LambdaQueryWrapper<CoreDrillPlanToExecOrg>().in(CoreDrillPlanToExecOrg::getPlanId, planIdList));
@@ -271,6 +273,12 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
         }
         List<CoreDrillPlan> planList = buildPlanData(plan, drillPlanToRoleList);
 
+        if (plan.getPlanStatus()==1){
+            log.info("计划已被修改为禁用,不再生成任务!");
+            return;
+        }
+
+
         for (CoreDrillPlan drillPlan : planList) {
             final CoreDrillPlanDataVo dataVo = getCoreDrillPlanDataVo(drillPlan.getId());
             CompletableFuture.runAsync(() -> {
@@ -293,6 +301,12 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
             //TODO 考虑是否同步修改已生成的任务的名称
             return;
         }
+
+        if (plan.getPlanStatus()==1){
+            log.info("计划已被修改为禁用,不再生成任务!");
+            return;
+        }
+
         //此为情况一,计划没有生成任务或者生成了任务但未执行
         final CoreDrillPlanDataVo dataVo = getCoreDrillPlanDataVo(plan.getId());
         if (ObjectUtil.equal(1, plan.getBuildTaskNow()) && ObjectUtil.equal(0, plan.getPlanStatus())) {
@@ -322,6 +336,10 @@ public class CoreDrillPlanServiceImpl extends ServiceImpl<CoreDrillPlanMapper, C
         if (standardPlanHasDone != null) {
             throw new RuntimeException("该计划下存在任务已执行的情况,无法修改!");
         }
+        //计划状态
+        if (ObjectUtil.notEqual(request.getPlanStatus(), plan.getPlanStatus())) {
+            flag = false;
+        }
         //计划周期
         if (ObjectUtil.notEqual(request.getPlanCycle(), plan.getPlanCycle())) {
             flag = false;

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

@@ -23,6 +23,7 @@ import com.xunmei.common.core.domain.drill.vo.CoreDrillPlanDataVo;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillTaskDetailVo;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillTaskPageVo;
 import com.xunmei.common.core.domain.drill.vo.CoreDrillTaskReportVo;
+import com.xunmei.common.core.domain.edu.vo.CoreEduTrainingTaskReportVo;
 import com.xunmei.common.core.enums.ExportPdfType;
 import com.xunmei.common.core.enums.drill.DrillDoStatus;
 import com.xunmei.common.core.enums.drill.DrillType;
@@ -344,6 +345,16 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
 
     @Override
     public List<CoreDrillTaskReportVo> selectCoreDrillTaskReport(CoreDrillTaskReportDto request) {
+        CoreDrillPlan plan = coreDrillPlanMapper.selectById(request.getPlanId());
+        if (ObjectUtil.isNull(plan)) {
+            throw new SystemException("未获取到该计划信息");
+        }
+        List<Long> planIdList = new ArrayList<>();
+        Long planId = request.getPlanId();
+        if (ObjectUtil.equal(1, plan.getStandard()) && ObjectUtil.equal(1, plan.getIssue())) {
+            planIdList = coreDrillPlanMapper.selectIdByParentId(plan.getId());
+            planId = null;
+        }
         request.setStartDate(DateUtil.beginOfMonth(request.getDate()));
         request.setEndDate(DateUtil.endOfMonth(request.getDate()));
         Long orgId = request.getOrgId();
@@ -353,21 +364,21 @@ public class CoreDrillTaskServiceImpl extends ServiceImpl<CoreDrillTaskMapper, C
             return new ArrayList<>();
         }
         List<CoreDrillTaskReportVo> result = new ArrayList<>();
-        List<CoreDrillTaskReportVo> list = coreDrillTaskMapper.selectReport(request);
+        List<CoreDrillTaskReportVo> list = coreDrillTaskMapper.selectReport(request, planId, planIdList);
         for (SysOrg org : sysOrgList) {
-            Optional<CoreDrillTaskReportVo> optional = list.stream().filter(vo -> ObjectUtil.equal(vo.getOrgId(), org.getId())).findFirst();
-            CoreDrillTaskReportVo reportVo;
-            if (!optional.isPresent()) {
-                reportVo = new CoreDrillTaskReportVo();
-                reportVo.setPlanId(request.getPlanId());
-                reportVo.setOrgId(org.getId());
-                reportVo.setOrgName(org.getName());
+            List<CoreDrillTaskReportVo> childrenOrgData = list.stream().filter(vo -> vo.getOrgPath().startsWith(org.getPath())).collect(Collectors.toList());
+            CoreDrillTaskReportVo reportVo=new CoreDrillTaskReportVo();
+            reportVo.setOrgId(org.getId());
+            reportVo.setOrgName(org.getName());
+            if (ObjectUtil.isEmpty(childrenOrgData)) {;
                 reportVo.setShouldFinish(0);
                 reportVo.setFinish(0);
                 reportVo.setFinishRate("0%");
             } else {
-                reportVo = optional.get();
-                reportVo.setFinishRate(calculatePercent(reportVo.getShouldFinish(), reportVo.getFinish()));
+                childrenOrgData.stream().map(CoreDrillTaskReportVo::getShouldFinish).reduce(Integer::sum).ifPresent(reportVo::setShouldFinish);
+                childrenOrgData.stream().map(CoreDrillTaskReportVo::getFinish).reduce(Integer::sum).ifPresent(reportVo::setFinish);
+
+                reportVo.setFinishRate(calculatePercent(reportVo.getFinish(), reportVo.getShouldFinish()));
             }
             result.add(reportVo);
         }

+ 7 - 0
soc-modules/soc-modules-core/src/main/resources/mapper/drill/CoreDrillPlanMapper.xml

@@ -605,4 +605,11 @@
                  INNER JOIN sys_role sr on r.role_id = sr.id
         where p.belong_org_id = #{orgId}
     </select>
+
+    <select id="selectAllIdByParentId" resultType="java.lang.Long">
+        select id
+        from core_drill_plan
+        where parent_id = #{planId}
+          and deleted = 0
+    </select>
 </mapper>

+ 12 - 5
soc-modules/soc-modules-core/src/main/resources/mapper/drill/CoreDrillTaskMapper.xml

@@ -122,15 +122,22 @@
     <select id="selectReport" resultType="com.xunmei.common.core.domain.drill.vo.CoreDrillTaskReportVo">
         SELECT t.org_id AS orgId,
         t.org_name AS orgName,
+        t.org_path AS orgPath,
         ifnull(count(0),0) AS shouldFinish,
-        ifnull(SUM(t.status != 3),0) AS finish
+        ifnull(SUM(t.status = 3),0) AS finish
         from core_drill_task t inner join sys_org o on t.org_id = o.id
         <where>
-            <if test="request.orgId != null">
-                and o.parent_id=#{request.orgId}
+            <if test="request.orgPath != null">
+                and o.path like concat(#{request.orgPath}, '%')
             </if>
-            <if test="request.planId != null">
-                and t.plan_id=#{request.planId}
+            <if test="planId != null">
+                and t.plan_id=#{planId}
+            </if>
+            <if test="planIdList.size()>0">
+                and t.plan_id in
+                <foreach collection="planIdList" item="item" index="index" open="(" close=")" separator=",">
+                    #{item}
+                </foreach>
             </if>
             <if test="request.startDate != null">
                 and t.start_date>=#{request.startDate}