diff --git a/src/main/java/com/biutag/supervision/controller/warning/WarningController.java b/src/main/java/com/biutag/supervision/controller/warning/WarningController.java index 3ea95c4..d41b14f 100644 --- a/src/main/java/com/biutag/supervision/controller/warning/WarningController.java +++ b/src/main/java/com/biutag/supervision/controller/warning/WarningController.java @@ -56,79 +56,15 @@ public class WarningController { //预警督察列表 @PostMapping("/getPage") - public Result> getPage(@RequestBody WarningQueryParam queryParam){ + public Result> getPage(@RequestBody WarningQueryParam queryParam) { UserAuth user = UserContextHolder.getCurrentUser(); - QueryWrapper wrapper= new QueryWrapper() - .like(StrUtil.isNotBlank(queryParam.getReportName()),"p.report_name",queryParam.getReportName()) - .eq("f.report_link","end") - .eq("f.approver_state","end") - .eq(StrUtil.isNotBlank(queryParam.getWarningState()),"p.warning_state",queryParam.getWarningState()) - .eq("p.node",FlowStateEnum.End.getLabel()) - .eq("p.delete_flag", DeleteStatusEnum.NO.getCode()); - if ("cwlnt".equals(queryParam.getSpecialArea())) { - wrapper.in("p.audit_unit_id", departService.getAllNodeIds(CWLN)); - } - if (StrUtil.isNotBlank(queryParam.getAuditUnitId())) { - // 获取选择的审计单位及其所有子部门的ID - wrapper.in("p.audit_unit_id", departService.getAllNodeIds(queryParam.getAuditUnitId())); - } - if (StrUtil.isNotBlank(queryParam.getProjectUnitId())){ - wrapper.in("p.project_unit_id", departService.getAllNodeIds(queryParam.getProjectUnitId())); - } - if (!AppConstants.USER_TYPE_SUPER.equals(user.getUserType()) && !user.getRoleCodes().contains(RoleCodeEnum.FIRST_ADMIN.getCode())) { - List orgIds =new ArrayList<>(); - if(!user.getAuthDepartIds().isEmpty()){ - orgIds = departService.getAllNodeIds(user.getAuthDepartIds()); - wrapper.in("p.project_unit_id", orgIds); - }else{ - orgIds = departService.getAllNodeIds(user.getDepartId()); - wrapper.in("p.project_unit_id", orgIds); - } -// List orgIds = departService.getAllNodeIds(user.getAuthDepartIds()); -// wrapper.in("p.project_unit_id", orgIds); - } - if(CollectionUtil.isNotEmpty(queryParam.getPublicationDate())){ - wrapper.between(CollectionUtil.isNotEmpty(queryParam.getPublicationDate()),"p.publication_date",queryParam.getPublicationDate().get(0),queryParam.getPublicationDate().get(1)); - } - if(CollectionUtil.isNotEmpty(queryParam.getEndDate())){ - wrapper.between(CollectionUtil.isNotEmpty(queryParam.getEndDate()),"p.archiving",queryParam.getEndDate().get(0),queryParam.getEndDate().get(1)); - } - wrapper.orderByAsc("p.warning_state"); - wrapper.groupBy("p.id"); - Page page= reportProjectService.getPageWarning(new Page<>(queryParam.getCurrent(),queryParam.getSize()),wrapper,queryParam.getWarningState()); - List entryWindowVos = page.getRecords(); - entryWindowVos.forEach(s->{ - List list = recordService.list(new LambdaQueryWrapper().eq(WarningRecord::getReportId,s.getId())); - if(CollectionUtil.isNotEmpty(list)) { - //1的代表已下发问题 - List records= list.stream().filter(x-> "1".equals(x.getFlowState())).toList(); -// 为空表示已提交审核 -// List auditNumber= list.stream().filter(x-> StrUtil.isEmpty(x.getFlowState())).toList(); - //1 为 已下发问题 ,2 为已提交审核,0为常规 -// String stateData = CollectionUtil.isNotEmpty(records)?"1":(CollectionUtil.isNotEmpty(auditNumber)?"2":"0"); - String stateData = !records.isEmpty()? "1": "0"; - s.setStateData(stateData); - List ids = list.stream().map(x -> x.getId()).toList(); - long counts = contentService.count(new LambdaQueryWrapper().in(WarningContent::getWarningId, ids) - .isNotNull(WarningContent::getRemark)); - s.setWarningContent(counts); - } - SupDepart auditById = departService.getById(s.getAuditUnitId()); - SupDepart projectById = departService.getById(s.getProjectUnitId()); - if (3==(auditById.getLevel())){ - SupDepart byPId = departService.getById(auditById.getPid()); - s.setAuditUnitStr(byPId.getShortName() +"/" + auditById.getShortName()); - }else { - s.setAuditUnitStr(auditById.getShortName() +"/"); - } - if (3==projectById.getLevel()){ - SupDepart byPId = departService.getById(projectById.getPid()); - s.setProjectUnitStr(byPId.getShortName() +"/" + projectById.getShortName()); - }else { - s.setProjectUnitStr(projectById.getShortName() +"/"); - } - }); - page.setRecords(entryWindowVos); + QueryWrapper wrapper = buildWarningWrapper(queryParam, user); + Page page = reportProjectService.getPageWarning( + new Page<>(queryParam.getCurrent(), queryParam.getSize()), wrapper, queryParam.getWarningState()); + + page.getRecords().forEach(this::fillProjectData); + sortByLastWarningTime(page.getRecords()); + return Result.success(page); } /** @@ -255,4 +191,107 @@ public class WarningController { } + + // ==================== 私有方法 ==================== + + /** + * 构建查询条件 + */ + private QueryWrapper buildWarningWrapper(WarningQueryParam queryParam, UserAuth user) { + QueryWrapper wrapper = new QueryWrapper() + .like(StrUtil.isNotBlank(queryParam.getReportName()), "p.report_name", queryParam.getReportName()) + .eq("f.report_link", "end") + .eq("f.approver_state", "end") + .eq(StrUtil.isNotBlank(queryParam.getWarningState()), "p.warning_state", queryParam.getWarningState()) + .eq("p.node", FlowStateEnum.End.getLabel()) + .eq("p.delete_flag", DeleteStatusEnum.NO.getCode()); + + // 长望浏宁Tab + if ("cwlnt".equals(queryParam.getSpecialArea())) { + wrapper.in("p.audit_unit_id", departService.getAllNodeIds(CWLN)); + } else { + // 排除督审支队和长望浏宁 + List excludeOrgIds = new ArrayList<>(departService.getAllNodeIds(AppConstants.DSZD)); + excludeOrgIds.addAll(departService.getAllNodeIds(AppConstants.CWLN)); + wrapper.notIn("p.audit_unit_id", excludeOrgIds); + } + + // 审计单位 + if (StrUtil.isNotBlank(queryParam.getAuditUnitId())) { + wrapper.in("p.audit_unit_id", departService.getAllNodeIds(queryParam.getAuditUnitId())); + } + // 项目单位 + if (StrUtil.isNotBlank(queryParam.getProjectUnitId())) { + wrapper.in("p.project_unit_id", departService.getAllNodeIds(queryParam.getProjectUnitId())); + } + // 权限控制 + if (!AppConstants.USER_TYPE_SUPER.equals(user.getUserType()) && !user.getRoleCodes().contains(RoleCodeEnum.FIRST_ADMIN.getCode())) { + List orgIds = user.getAuthDepartIds().isEmpty() + ? departService.getAllNodeIds(user.getDepartId()) + : departService.getAllNodeIds(user.getAuthDepartIds()); + wrapper.in("p.project_unit_id", orgIds); + } + // 日期范围 + if (CollectionUtil.isNotEmpty(queryParam.getPublicationDate())) { + wrapper.between(true, "p.publication_date", queryParam.getPublicationDate().get(0), queryParam.getPublicationDate().get(1)); + } + if (CollectionUtil.isNotEmpty(queryParam.getEndDate())) { + wrapper.between(true, "p.archiving", queryParam.getEndDate().get(0), queryParam.getEndDate().get(1)); + } + + wrapper.orderByAsc("p.warning_state").groupBy("p.id"); + return wrapper; + } + + /** + * 填充项目数据 + */ + private void fillProjectData(EntryWindowVo s) { + List list = recordService.list( + new LambdaQueryWrapper().eq(WarningRecord::getReportId, s.getId())); + + if (CollectionUtil.isNotEmpty(list)) { + // 是否已下发问题 + s.setStateData(list.stream().anyMatch(x -> "1".equals(x.getFlowState())) ? "1" : "0"); + // 最新预警时间 + list.stream().filter(r -> r.getSupervisionTime() != null) + .max((a, b) -> a.getSupervisionTime().compareTo(b.getSupervisionTime())) + .ifPresent(r -> s.setLastWarningTime(r.getSupervisionTime() + .format(java.time.format.DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")))); + // 预警问题数 + List ids = list.stream().map(WarningRecord::getId).toList(); + s.setWarningContent(contentService.count( + new LambdaQueryWrapper().in(WarningContent::getWarningId, ids).isNotNull(WarningContent::getRemark))); + } + + // 格式化单位字符串 + s.setAuditUnitStr(formatDepartStr(departService.getById(s.getAuditUnitId()))); + s.setProjectUnitStr(formatDepartStr(departService.getById(s.getProjectUnitId()))); + } + + /** + * 格式化部门字符串 + */ + private String formatDepartStr(SupDepart depart) { + if (depart == null) return "/"; + if (depart.getLevel() == 3) { + SupDepart parent = departService.getById(depart.getPid()); + return parent.getShortName() + "/" + depart.getShortName(); + } + return depart.getShortName() + "/"; + } + + /** + * 按最新预警时间倒序排列 + */ + private void sortByLastWarningTime(List list) { + list.sort((a, b) -> { + if (a.getLastWarningTime() == null && b.getLastWarningTime() == null) return 0; + if (a.getLastWarningTime() == null) return 1; + if (b.getLastWarningTime() == null) return -1; + return b.getLastWarningTime().compareTo(a.getLastWarningTime()); + }); + } + + } diff --git a/src/main/java/com/biutag/supervision/pojo/vo/entryWindow/EntryWindowVo.java b/src/main/java/com/biutag/supervision/pojo/vo/entryWindow/EntryWindowVo.java index 8bcd3b9..4999199 100644 --- a/src/main/java/com/biutag/supervision/pojo/vo/entryWindow/EntryWindowVo.java +++ b/src/main/java/com/biutag/supervision/pojo/vo/entryWindow/EntryWindowVo.java @@ -31,4 +31,7 @@ public class EntryWindowVo extends ReportProject { @Schema(description = "是否是本单位的数据, 1是, 0否") private String isSelfData; + @Schema(description = "最新预警时间") + private String lastWarningTime; + }