瀏覽代碼

异常管理

qianxb 1 年之前
父節點
當前提交
95e8392145

+ 12 - 4
src/main/java/org/springblade/modules/project/controller/ProjectInfoController.java

@@ -114,7 +114,7 @@ public class ProjectInfoController extends BladeController {
     }
 
     @PostMapping("/save-warning")
-    @ApiOperationSupport(order = 11)
+    @ApiOperationSupport(order = 12)
     @Operation(summary = "项目设置保存预警", description = "传入一个数组,2个对象,每个对象type区分")
     public R<String> saveWarning(@RequestBody ProjectWarningDTO dto) {
         projectInfoService.saveWarning(dto);
@@ -122,7 +122,7 @@ public class ProjectInfoController extends BladeController {
     }
 
     @PostMapping("/detail-warning")
-    @ApiOperationSupport(order = 11)
+    @ApiOperationSupport(order = 13)
     @Operation(summary = "项目预警详情", description = "返回项目预警信息")
     public R<ProjectWarningDTO> detailWarning() {
         ProjectWarningDTO dto = projectInfoService.detailWarning();
@@ -130,13 +130,21 @@ public class ProjectInfoController extends BladeController {
     }
 
     @PostMapping("/page-warning")
-    @ApiOperationSupport(order = 11)
-    @Operation(summary = "异常管理分页", description = "传入分页和搜索参数")
+    @ApiOperationSupport(order = 14)
+    @Operation(summary = "异常管理-分页", description = "传入分页和搜索参数")
     public R<IPage<pageWarningVO>> pageWarning(@RequestBody pageWarningDTO dto) {
         IPage<pageWarningVO> page = projectInfoService.pageWarning(dto);
         return R.data(page);
     }
 
+    @PostMapping("/repeal-warning")
+    @ApiOperationSupport(order = 15)
+    @Operation(summary = "异常管理-撤销", description = "传入分页和搜索参数")
+    public R<String> repealWarning(@RequestBody ProjectRepealDTO dto) {
+        projectInfoService.repealWarning(dto);
+        return R.success("撤销成功");
+    }
+
 
 
 

+ 32 - 0
src/main/java/org/springblade/modules/project/pojo/dto/ProjectRepealDTO.java

@@ -0,0 +1,32 @@
+package org.springblade.modules.project.pojo.dto;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.time.LocalDate;
+
+/**
+ * @Param
+ * @Author wangwl
+ * @Date 2024/4/12 14:34
+ **/
+@Data
+@Schema(description = "异常管理-撤销")
+public class ProjectRepealDTO {
+
+    @Schema(description = "项目id")
+    private Long projectId;
+
+    @Schema(description = "异常类型1投资预警2建设预警")
+    private Integer warningType;
+
+    @Schema(description = "计划年份")
+    private Integer planYear;
+
+    @Schema(description = "季度")
+    private Integer quarter;
+
+    @Schema(description = "撤销结束日期")
+    private LocalDate repealEndDate;
+
+}

+ 3 - 0
src/main/java/org/springblade/modules/project/pojo/vo/pageWarningVO.java

@@ -25,6 +25,9 @@ public class pageWarningVO {
     @Schema(description = "异常类型名称")
     private String warningTypeName;
 
+    @Schema(description = "计划年份")
+    private Integer planYear;
+
     @Schema(description = "季度")
     private Integer quarter;
 

+ 2 - 0
src/main/java/org/springblade/modules/project/service/IProjectInfoService.java

@@ -40,4 +40,6 @@ public interface IProjectInfoService extends BaseService<ProjectInfo> {
     IPage<pageWarningVO> pageWarning(pageWarningDTO dto);
 
     ProjectWarningDTO detailWarning();
+
+    void repealWarning(ProjectRepealDTO dto);
 }

+ 316 - 28
src/main/java/org/springblade/modules/project/service/impl/ProjectInfoServiceImpl.java

@@ -84,22 +84,22 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, P
             if (plan.getOneInvest() != null){
                 all = all.add(plan.getOneInvest());
             }
-            if (plan.getOneInvest() != null){
+            if (plan.getTwoInvest() != null){
                 all = all.add(plan.getTwoInvest());
             }
-            if (plan.getOneInvest() != null){
+            if (plan.getThreeInvest() != null){
                 all = all.add(plan.getThreeInvest());
             }
-            if (plan.getOneInvest() != null){
+            if (plan.getFourInvest() != null){
                 all = all.add(plan.getFourInvest());
             }
-            if ((plan.getYearlyInvest() == null && !all.equals(BigDecimal.ZERO)) || (plan.getYearlyInvest() != null && !all.equals(plan.getYearlyInvest()))){
+            if ((plan.getYearlyInvest() == null && !all.equals(BigDecimal.ZERO)) || (plan.getYearlyInvest() != null && all.compareTo(plan.getYearlyInvest()) != 0)){
                 throw new ServiceException(plan.getPlanYear()+"年全年计划投资与每季度总和不对");
             }
             projectAll = projectAll.add(all);
         }
-        if ((info.getAllInvestMoney() == null && !projectAll.equals(BigDecimal.ZERO) || (info.getAllInvestMoney() != null && !info.getAllInvestMoney().equals(projectAll)) )){
-            throw new ServiceException("所有年计划投资之和不于总投资,请修改后重新保存");
+        if (info.getAllInvestMoney() != null && info.getAllInvestMoney().compareTo(projectAll) == -1){
+            throw new ServiceException("所有年计划投资之和不能大于总投资,请修改后重新保存");
         }
         investPlanService.saveBatch(list);
     }
@@ -367,6 +367,9 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, P
         if (years == null || years.size() == 0){
             return;
         }
+        //删除所有年的详情
+        planProgressService.remove(new LambdaQueryWrapper<ProjectPlanProgress>()
+                .eq(ProjectPlanProgress::getProjectId,dto.getId()));
         List<ProjectInvestPlan> updateYearPlan = new ArrayList<>();
         for (ProjectInvestPlanDTO year : years) {
             //如果此年不能填写,则直接跳过
@@ -396,6 +399,7 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, P
 
             List<ProjectPlanProgress> monthList = year.getList();
             for (ProjectPlanProgress progress : monthList) {
+                progress.setId(null);
                 progress.setInvestMoneyAll(null);
                 //设置当前行已经填写字段
                 Integer fillField = 0;
@@ -611,8 +615,8 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, P
                 }
                 progress.setFillField(fillField);
             }
-            //直接保存或修改月计划集合
-            planProgressService.saveOrUpdateBatch(monthList);
+            //直接保存月计划集合
+            planProgressService.saveBatch(monthList);
             //添加要修改年计划
             yearPlan.setYearFinishInvest(allInvestFinished);
             yearPlan.setYearUnfinishedInvest(year.getYearlyInvest().subtract(allInvestFinished));
@@ -691,8 +695,8 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, P
             }
             //判断项目进程类型
             if (plan.getOneInvest() == null || plan.getTwoInvest() == null || plan.getThreeInvest() == null || plan.getFourInvest() == null ||
-                    plan.getIsOneInvestFinish() == 0 || plan.getIsOneInvestFinish() == 0 || plan.getIsOneInvestFinish() == 0 || plan.getIsOneInvestFinish() == 0 ||
-                    plan.getIsOneInvestFinish() == 0 || plan.getIsOneInvestFinish() == 0 || plan.getIsOneInvestFinish() == 0 || plan.getIsOneInvestFinish() == 0) {
+                    plan.getIsOneInvestFinish() == 0 || plan.getIsTwoInvestFinish() == 0 || plan.getIsThreeInvestFinish() == 0 || plan.getIsFourInvestFinish() == 0 ||
+                    plan.getIsOnePlanFinish() == 0 || plan.getIsTwoPlanFinish() == 0 || plan.getIsThreePlanFinish() == 0 || plan.getIsFourPlanFinish() == 0) {
                 vo2.setScheduleType(3);
             } else {
                 if (plan.getOneInvest().compareTo(plan.getOneInvestFinish()) <= 0 &&
@@ -804,8 +808,8 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, P
             vo2.setFourUnFinished(plan.getFourInvest() == null?BigDecimal.ZERO:plan.getFourInvest().subtract(vo2.getFourFinished()));
             //判断项目进程类型
             if (plan.getOneInvest() == null || plan.getTwoInvest() == null || plan.getThreeInvest() == null || plan.getFourInvest() == null ||
-                    plan.getIsOneInvestFinish() == 0 || plan.getIsOneInvestFinish() == 0 || plan.getIsOneInvestFinish() == 0 || plan.getIsOneInvestFinish() == 0 ||
-                    plan.getIsOneInvestFinish() == 0 || plan.getIsOneInvestFinish() == 0 || plan.getIsOneInvestFinish() == 0 || plan.getIsOneInvestFinish() == 0) {
+                    plan.getIsOneInvestFinish() == 0 || plan.getIsTwoInvestFinish() == 0 || plan.getIsThreeInvestFinish() == 0 || plan.getIsFourInvestFinish() == 0 ||
+                    plan.getIsOnePlanFinish() == 0 || plan.getIsTwoPlanFinish() == 0 || plan.getIsThreePlanFinish() == 0 || plan.getIsFourPlanFinish() == 0) {
                 vo2.setScheduleType(3);
             } else {
                 if (plan.getOneInvest().compareTo(plan.getOneInvestFinish()) <= 0 &&
@@ -996,8 +1000,8 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, P
             }
             //判断项目进程类型
             if (plan.getOneInvest() == null || plan.getTwoInvest() == null || plan.getThreeInvest() == null || plan.getFourInvest() == null ||
-                    plan.getIsOneInvestFinish() == 0 || plan.getIsOneInvestFinish() == 0 || plan.getIsOneInvestFinish() == 0 || plan.getIsOneInvestFinish() == 0 ||
-                    plan.getIsOneInvestFinish() == 0 || plan.getIsOneInvestFinish() == 0 || plan.getIsOneInvestFinish() == 0 || plan.getIsOneInvestFinish() == 0) {
+                    plan.getIsOneInvestFinish() == 0 || plan.getIsTwoInvestFinish() == 0 || plan.getIsThreeInvestFinish() == 0 || plan.getIsFourInvestFinish() == 0 ||
+                    plan.getIsOnePlanFinish() == 0 || plan.getIsTwoPlanFinish() == 0 || plan.getIsThreePlanFinish() == 0 || plan.getIsFourPlanFinish() == 0) {
                 vo2.setScheduleType(3);
             } else {
                 if (plan.getOneInvest().compareTo(plan.getOneInvestFinish()) <= 0 &&
@@ -1110,9 +1114,37 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, P
         return dto;
     }
 
+    @Override
+    public void repealWarning(ProjectRepealDTO dto) {
+        //判断是否已经撤销过
+        RepealRecord one = repealRecordService.getOne(new LambdaQueryWrapper<RepealRecord>()
+                .eq(RepealRecord::getProjectId, dto.getProjectId())
+                .eq(RepealRecord::getPlanYear, dto.getPlanYear())
+                .eq(RepealRecord::getPlanQuarter, dto.getQuarter())
+                .eq(RepealRecord::getPlanType, dto.getWarningType())
+        );
+        if (one != null){
+            throw new ServiceException("请勿重复撤销");
+        }
+        if (dto.getRepealEndDate().compareTo(LocalDate.now()) == -1){
+            throw new ServiceException("结束日期不能小于今天");
+        }
+        RepealRecord record = new RepealRecord();
+        record.setProjectId(dto.getProjectId());
+        record.setPlanYear(dto.getPlanYear());
+        record.setPlanQuarter(dto.getQuarter());
+        record.setPlanType(dto.getWarningType());
+        record.setStartDate(LocalDate.now());
+        record.setEndDate(dto.getRepealEndDate());
+        repealRecordService.save(record);
+
+    }
+
     @Override
     public IPage<pageWarningVO> pageWarning(pageWarningDTO dto) {
-        IPage<pageWarningVO> iPage = new Page<>(dto.getCurrent(),dto.getCurrent());
+        Integer current = dto.getCurrent();
+        Integer size = dto.getSize();
+        IPage<pageWarningVO> iPage = new Page<>(current,size);
         /*查询出所有数据,手动筛选,手动分页*/
         //1 获取所有项目 所有年的计划
         List<InvestPlanWarningVO> planList = baseMapper.getAllYearPlan();
@@ -1138,36 +1170,106 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, P
         //4 循环所有年计划
         List<pageWarningVO> vos = new ArrayList<>();
         for (InvestPlanWarningVO plan : planList) {
-            //      季度计划没有填写 和 实际完成没有填写 则不统计
+            /*季度计划没有填写 和 实际完成没有填写 则不统计*/
+            /*-------------投资-------------*/
+            //一季度
             if (plan.getOneInvest() != null && plan.getIsOneInvestFinish() == 1){
+                Boolean isWarning = false;
+                Integer warningGrade = 0;
+                String warningGradeName = "";
                 //      填写了则每个季度直接对比数值,从1到3
                 if (investWarning.getOneOne() != null && plan.getOneInvestRatio().compareTo(investWarning.getOneOne()) == -1){
-                    pageWarningVO vo = new pageWarningVO(plan.getProjectId(),plan.getProjectName(),1,"项目投资异常",1,"第一季度",LocalDate.of(2022, 4, 1),1,"一级");
+                    isWarning = true;
+                    warningGrade = 1;
+                    warningGradeName = "一级";
+                }else if (investWarning.getOneTwo() != null && plan.getOneInvestRatio().compareTo(investWarning.getOneTwo()) == -1){
+                    isWarning = true;
+                    warningGrade = 2;
+                    warningGradeName = "二级";
+                }else if (investWarning.getOneThree() != null && plan.getOneInvestRatio().compareTo(investWarning.getOneThree()) == -1){
+                    isWarning = true;
+                    warningGrade = 3;
+                    warningGradeName = "三级";
+                }
+                // 如果异常则添加到异常集合中
+                if (isWarning){
+                    pageWarningVO vo = new pageWarningVO(plan.getProjectId(),plan.getProjectName(),1,"项目投资异常",1,"第一季度",LocalDate.of(plan.getPlanYear(), 4, 1),warningGrade,warningGradeName);
                     //判断是否撤销
+                    vo.setPlanYear(plan.getPlanYear());
                     RepealRecord record = recordMap.get(new RepealRecordVO(plan.getProjectId(), plan.getPlanYear(), 1, 1));
-                    // 如果异常则添加到异常集合中,添加前判断是否撤销
                     if (record != null){
                         vo.setIsRepeal("是");
                         vo.setRepealStartDate(record.getStartDate());
                         vo.setRepealEndDate(record.getEndDate());
                     }
                     vos.add(vo);
-                }else if (investWarning.getOneTwo() != null && plan.getOneInvestRatio().compareTo(investWarning.getOneTwo()) == -1){
-                    pageWarningVO vo = new pageWarningVO(plan.getProjectId(),plan.getProjectName(),1,"项目投资异常",1,"第一季度",LocalDate.of(2022, 4, 1),2,"二级");
+                }
+            }
+            //二季度
+            if (plan.getTwoInvest() != null && plan.getIsTwoInvestFinish() == 1){
+                Boolean isWarning = false;
+                Integer warningGrade = 0;
+                String warningGradeName = "";
+                //      填写了则每个季度直接对比数值,从1到3
+                if ((investWarning.getTwoOne() != null && plan.getTwoInvestRatio().compareTo(investWarning.getTwoOne()) == -1) ||
+                        (investWarning.getTwoOneAll() != null && plan.getTwoAggregateRatio().compareTo(investWarning.getTwoOneAll()) == -1)){
+                    isWarning = true;
+                    warningGrade = 1;
+                    warningGradeName = "一级";
+                }else if ((investWarning.getTwoTwo() != null && plan.getTwoInvestRatio().compareTo(investWarning.getTwoTwo()) == -1) ||
+                        (investWarning.getTwoTwoAll() != null && plan.getTwoAggregateRatio().compareTo(investWarning.getTwoTwoAll()) == -1)){
+                    isWarning = true;
+                    warningGrade = 2;
+                    warningGradeName = "二级";
+                }else if ((investWarning.getTwoThree() != null && plan.getTwoInvestRatio().compareTo(investWarning.getTwoThree()) == -1) ||
+                        (investWarning.getTwoThreeAll() != null && plan.getTwoAggregateRatio().compareTo(investWarning.getTwoThreeAll()) == -1)){
+                    isWarning = true;
+                    warningGrade = 3;
+                    warningGradeName = "三级";
+                }
+                // 如果异常则添加到异常集合中
+                if (isWarning){
+                    pageWarningVO vo = new pageWarningVO(plan.getProjectId(),plan.getProjectName(),1,"项目投资异常",2,"第二季度",LocalDate.of(plan.getPlanYear(), 7, 1),warningGrade,warningGradeName);
+                    vo.setPlanYear(plan.getPlanYear());
                     //判断是否撤销
-                    RepealRecord record = recordMap.get(new RepealRecordVO(plan.getProjectId(), plan.getPlanYear(), 1, 1));
-                    // 如果异常则添加到异常集合中,添加前判断是否撤销
+                    RepealRecord record = recordMap.get(new RepealRecordVO(plan.getProjectId(), plan.getPlanYear(), 2, 1));
                     if (record != null){
                         vo.setIsRepeal("是");
                         vo.setRepealStartDate(record.getStartDate());
                         vo.setRepealEndDate(record.getEndDate());
                     }
                     vos.add(vo);
-                }else if (investWarning.getOneThree() != null && plan.getOneInvestRatio().compareTo(investWarning.getOneThree()) == -1){
-                    pageWarningVO vo = new pageWarningVO(plan.getProjectId(),plan.getProjectName(),1,"项目投资异常",1,"第一季度",LocalDate.of(2022, 4, 1),3,"三级");
+                }
+            }
+
+            //三季度
+            if (plan.getThreeInvest() != null && plan.getIsThreeInvestFinish() == 1){
+                Boolean isWarning = false;
+                Integer warningGrade = 0;
+                String warningGradeName = "";
+                //      填写了则每个季度直接对比数值,从1到3
+                if ((investWarning.getThreeOne() != null && plan.getThreeInvestRatio().compareTo(investWarning.getThreeOne()) == -1) ||
+                        (investWarning.getThreeOneAll() != null && plan.getThreeAggregateRatio().compareTo(investWarning.getThreeOneAll()) == -1)){
+                    isWarning = true;
+                    warningGrade = 1;
+                    warningGradeName = "一级";
+                }else if ((investWarning.getThreeTwo() != null && plan.getThreeInvestRatio().compareTo(investWarning.getThreeTwo()) == -1) ||
+                        (investWarning.getThreeTwoAll() != null && plan.getThreeAggregateRatio().compareTo(investWarning.getThreeTwoAll()) == -1)){
+                    isWarning = true;
+                    warningGrade = 2;
+                    warningGradeName = "二级";
+                }else if ((investWarning.getThreeThree() != null && plan.getThreeInvestRatio().compareTo(investWarning.getThreeThree()) == -1) ||
+                        (investWarning.getThreeThreeAll() != null && plan.getThreeAggregateRatio().compareTo(investWarning.getThreeThreeAll()) == -1)){
+                    isWarning = true;
+                    warningGrade = 3;
+                    warningGradeName = "三级";
+                }
+                // 如果异常则添加到异常集合中
+                if (isWarning){
+                    pageWarningVO vo = new pageWarningVO(plan.getProjectId(),plan.getProjectName(),1,"项目投资异常",3,"第三季度",LocalDate.of(plan.getPlanYear(), 10, 1),warningGrade,warningGradeName);
+                    vo.setPlanYear(plan.getPlanYear());
                     //判断是否撤销
-                    RepealRecord record = recordMap.get(new RepealRecordVO(plan.getProjectId(), plan.getPlanYear(), 1, 1));
-                    // 如果异常则添加到异常集合中,添加前判断是否撤销
+                    RepealRecord record = recordMap.get(new RepealRecordVO(plan.getProjectId(), plan.getPlanYear(), 3, 1));
                     if (record != null){
                         vo.setIsRepeal("是");
                         vo.setRepealStartDate(record.getStartDate());
@@ -1177,10 +1279,196 @@ public class ProjectInfoServiceImpl extends BaseServiceImpl<ProjectInfoMapper, P
                 }
             }
 
-        }
+            //四季度
+            if (plan.getFourInvest() != null && plan.getIsFourInvestFinish() == 1){
+                Boolean isWarning = false;
+                Integer warningGrade = 0;
+                String warningGradeName = "";
+                //      填写了则每个季度直接对比数值,从1到3
+                if ((investWarning.getFourOne() != null && plan.getFourInvestRatio().compareTo(investWarning.getFourOne()) == -1) ||
+                        (investWarning.getFourOneAll() != null && plan.getFourAggregateRatio().compareTo(investWarning.getFourOneAll()) == -1)){
+                    isWarning = true;
+                    warningGrade = 1;
+                    warningGradeName = "一级";
+                }else if ((investWarning.getFourTwo() != null && plan.getFourInvestRatio().compareTo(investWarning.getFourTwo()) == -1) ||
+                        (investWarning.getFourTwoAll() != null && plan.getFourAggregateRatio().compareTo(investWarning.getFourTwoAll()) == -1)){
+                    isWarning = true;
+                    warningGrade = 2;
+                    warningGradeName = "二级";
+                }else if ((investWarning.getFourThree() != null && plan.getFourInvestRatio().compareTo(investWarning.getFourThree()) == -1) ||
+                        (investWarning.getFourThreeAll() != null && plan.getFourAggregateRatio().compareTo(investWarning.getFourThreeAll()) == -1)){
+                    isWarning = true;
+                    warningGrade = 3;
+                    warningGradeName = "三级";
+                }
+                // 如果异常则添加到异常集合中
+                if (isWarning){
+                    pageWarningVO vo = new pageWarningVO(plan.getProjectId(),plan.getProjectName(),1,"项目投资异常",4,"第四季度",LocalDate.of(plan.getPlanYear()+1, 1, 1),warningGrade,warningGradeName);
+                    vo.setPlanYear(plan.getPlanYear());
+                    //判断是否撤销
+                    RepealRecord record = recordMap.get(new RepealRecordVO(plan.getProjectId(), plan.getPlanYear(), 4, 1));
+                    if (record != null){
+                        vo.setIsRepeal("是");
+                        vo.setRepealStartDate(record.getStartDate());
+                        vo.setRepealEndDate(record.getEndDate());
+                    }
+                    vos.add(vo);
+                }
+            }
+            /*-------------进度-------------*/
+            //一季度
+            if (StringUtils.isNotBlank(plan.getOnePlan()) && plan.getIsOnePlanFinish() == 1){
+                Boolean isWarning = false;
+                Integer warningGrade = 0;
+                String warningGradeName = "";
+                //      填写了则每个季度直接对比数值,从1到3
+                if (planWarning.getOneOne() != null && plan.getOnePlanRatio().compareTo(planWarning.getOneOne()) == -1){
+                    isWarning = true;
+                    warningGrade = 1;
+                    warningGradeName = "一级";
+                }else if (planWarning.getOneTwo() != null && plan.getOnePlanRatio().compareTo(planWarning.getOneTwo()) == -1){
+                    isWarning = true;
+                    warningGrade = 2;
+                    warningGradeName = "二级";
+                }else if (planWarning.getOneThree() != null && plan.getOnePlanRatio().compareTo(planWarning.getOneThree()) == -1){
+                    isWarning = true;
+                    warningGrade = 3;
+                    warningGradeName = "三级";
+                }
+                // 如果异常则添加到异常集合中
+                if (isWarning){
+                    pageWarningVO vo = new pageWarningVO(plan.getProjectId(),plan.getProjectName(),2,"项目进度异常",1,"第一季度",LocalDate.of(plan.getPlanYear(), 4, 1),warningGrade,warningGradeName);
+                    vo.setPlanYear(plan.getPlanYear());
+                    //判断是否撤销
+                    RepealRecord record = recordMap.get(new RepealRecordVO(plan.getProjectId(), plan.getPlanYear(), 1, 2));
+                    if (record != null){
+                        vo.setIsRepeal("是");
+                        vo.setRepealStartDate(record.getStartDate());
+                        vo.setRepealEndDate(record.getEndDate());
+                    }
+                    vos.add(vo);
+                }
+            }
+            //二季度
+            if (StringUtils.isNotBlank(plan.getOnePlan()) && plan.getIsOnePlanFinish() == 1){
+                Boolean isWarning = false;
+                Integer warningGrade = 0;
+                String warningGradeName = "";
+                //      填写了则每个季度直接对比数值,从1到3
+                if (planWarning.getTwoOne() != null && plan.getTwoPlanRatio().compareTo(planWarning.getTwoOne()) == -1){
+                    isWarning = true;
+                    warningGrade = 1;
+                    warningGradeName = "一级";
+                }else if (planWarning.getTwoTwo() != null && plan.getTwoPlanRatio().compareTo(planWarning.getTwoTwo()) == -1){
+                    isWarning = true;
+                    warningGrade = 2;
+                    warningGradeName = "二级";
+                }else if (planWarning.getTwoThree() != null && plan.getTwoPlanRatio().compareTo(planWarning.getTwoThree()) == -1){
+                    isWarning = true;
+                    warningGrade = 3;
+                    warningGradeName = "三级";
+                }
+                // 如果异常则添加到异常集合中
+                if (isWarning){
+                    pageWarningVO vo = new pageWarningVO(plan.getProjectId(),plan.getProjectName(),2,"项目进度异常",2,"第二季度",LocalDate.of(plan.getPlanYear(), 7, 1),warningGrade,warningGradeName);
+                    vo.setPlanYear(plan.getPlanYear());
+                    //判断是否撤销
+                    RepealRecord record = recordMap.get(new RepealRecordVO(plan.getProjectId(), plan.getPlanYear(), 2, 2));
+                    if (record != null){
+                        vo.setIsRepeal("是");
+                        vo.setRepealStartDate(record.getStartDate());
+                        vo.setRepealEndDate(record.getEndDate());
+                    }
+                    vos.add(vo);
+                }
+            }
+            //三季度
+            if (StringUtils.isNotBlank(plan.getThreePlan()) && plan.getIsThreePlanFinish() == 1){
+                Boolean isWarning = false;
+                Integer warningGrade = 0;
+                String warningGradeName = "";
+                //      填写了则每个季度直接对比数值,从1到3
+                if (planWarning.getThreeOne() != null && plan.getThreePlanRatio().compareTo(planWarning.getThreeOne()) == -1){
+                    isWarning = true;
+                    warningGrade = 1;
+                    warningGradeName = "一级";
+                }else if (planWarning.getThreeTwo() != null && plan.getThreePlanRatio().compareTo(planWarning.getThreeTwo()) == -1){
+                    isWarning = true;
+                    warningGrade = 2;
+                    warningGradeName = "二级";
+                }else if (planWarning.getThreeThree() != null && plan.getThreePlanRatio().compareTo(planWarning.getThreeThree()) == -1){
+                    isWarning = true;
+                    warningGrade = 3;
+                    warningGradeName = "三级";
+                }
+                // 如果异常则添加到异常集合中
+                if (isWarning){
+                    pageWarningVO vo = new pageWarningVO(plan.getProjectId(),plan.getProjectName(),2,"项目进度异常",3,"第三季度",LocalDate.of(plan.getPlanYear(), 10, 1),warningGrade,warningGradeName);
+                    vo.setPlanYear(plan.getPlanYear());
+                    //判断是否撤销
+                    RepealRecord record = recordMap.get(new RepealRecordVO(plan.getProjectId(), plan.getPlanYear(), 3, 2));
+                    if (record != null){
+                        vo.setIsRepeal("是");
+                        vo.setRepealStartDate(record.getStartDate());
+                        vo.setRepealEndDate(record.getEndDate());
+                    }
+                    vos.add(vo);
+                }
+            }
+            //四季度
+            if (StringUtils.isNotBlank(plan.getFourPlan()) && plan.getIsFourPlanFinish() == 1){
+                Boolean isWarning = false;
+                Integer warningGrade = 0;
+                String warningGradeName = "";
+                //      填写了则每个季度直接对比数值,从1到3
+                if (planWarning.getFourOne() != null && plan.getFourPlanRatio().compareTo(planWarning.getFourOne()) == -1){
+                    isWarning = true;
+                    warningGrade = 1;
+                    warningGradeName = "一级";
+                }else if (planWarning.getFourTwo() != null && plan.getFourPlanRatio().compareTo(planWarning.getFourTwo()) == -1){
+                    isWarning = true;
+                    warningGrade = 2;
+                    warningGradeName = "二级";
+                }else if (planWarning.getFourThree() != null && plan.getFourPlanRatio().compareTo(planWarning.getFourThree()) == -1){
+                    isWarning = true;
+                    warningGrade = 3;
+                    warningGradeName = "三级";
+                }
+                // 如果异常则添加到异常集合中
+                if (isWarning){
+                    pageWarningVO vo = new pageWarningVO(plan.getProjectId(),plan.getProjectName(),2,"项目进度异常",4,"第四季度",LocalDate.of(plan.getPlanYear()+1, 1, 1),warningGrade,warningGradeName);
+                    vo.setPlanYear(plan.getPlanYear());
+                    //判断是否撤销
+                    RepealRecord record = recordMap.get(new RepealRecordVO(plan.getProjectId(), plan.getPlanYear(), 4, 2));
+                    if (record != null){
+                        vo.setIsRepeal("是");
+                        vo.setRepealStartDate(record.getStartDate());
+                        vo.setRepealEndDate(record.getEndDate());
+                    }
+                    vos.add(vo);
+                }
+            }
 
+        }
         //5 异常集合先按照搜索条件过滤,再手动分组
-
+        if (dto.getType() != null){
+            vos = vos.stream().filter(l->dto.getType().equals(l.getWarningType())).collect(Collectors.toList());
+        }
+        if (dto.getGrade() != null){
+            vos = vos.stream().filter(l->dto.getGrade().equals(l.getWarningGrade())).collect(Collectors.toList());
+        }
+        if (dto.getIsAnnul() != null){
+            String str = dto.getIsAnnul() == 1? "是" : "否";
+            vos = vos.stream().filter(l->str.equals(l.getIsRepeal())).collect(Collectors.toList());
+        }
+        if (StringUtils.isNotBlank(dto.getSearchValue())){
+            vos = vos.stream().filter(l->l.getProjectName().contains(dto.getSearchValue())).collect(Collectors.toList());
+        }
+        int start = (current-1)*size;
+        int end = current*size > vos.size() ? vos.size() : current*size;
+        List<pageWarningVO> subList = vos.subList(start, end);
+        iPage.setRecords(subList);
+        iPage.setTotal(vos.size());
         return iPage;
     }