diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectStatusBoardController.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectStatusBoardController.java index d2da8dcb3..e1fb9be12 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectStatusBoardController.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/ProjectStatusBoardController.java @@ -45,8 +45,8 @@ public class ProjectStatusBoardController { @ApiOperation(value="时间轴列表", notes="时间轴列表") @GetMapping(value = "/timelineList") @RequiresPermissions("ProjectStatusBoard:info") - public Result timelineList(ProjectLibraryBase projectLibraryBase, HttpServletRequest req) { - List> result = iProjectStatusBoardService.timelineList(projectLibraryBase, req); + public Result timelineList(ProjectLibraryBase projectLibraryBase, HttpServletRequest req,@RequestParam("queryAllProject") boolean queryAllProject) { + List> result = iProjectStatusBoardService.timelineList(projectLibraryBase, req,queryAllProject); if(result==null) { return Result.error("未找到对应数据"); } @@ -85,8 +85,8 @@ public class ProjectStatusBoardController { // 导出excel文件 @RequestMapping(value = "/exportXls") - public void exportXls(HttpServletResponse response, HttpServletRequest request, ProjectLibraryBase projectLibraryBase) { - this.iProjectStatusBoardService.exportXls(response,request, projectLibraryBase); + public void exportXls(HttpServletResponse response, HttpServletRequest request, ProjectLibraryBase projectLibraryBase,@RequestParam("queryAllProject") boolean queryAllProject) { + this.iProjectStatusBoardService.exportXls(response,request, projectLibraryBase,queryAllProject); } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/entity/ProjectCertificationInventoryEO.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/entity/ProjectCertificationInventoryEO.java index 81f7d6d4b..ce184bbfd 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/entity/ProjectCertificationInventoryEO.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/entity/ProjectCertificationInventoryEO.java @@ -254,4 +254,8 @@ public class ProjectCertificationInventoryEO implements Serializable { /**认证类型*/ @ApiModelProperty(value = "认证类型") private String attestationType; + + /**一级责任领域**/ + @TableField(exist = false) + private String firstLevelDutyTerritory; } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectStatusBoardService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectStatusBoardService.java index 3194b7e20..4c740a141 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectStatusBoardService.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/IProjectStatusBoardService.java @@ -22,7 +22,7 @@ public interface IProjectStatusBoardService { * @param req * @return */ - List> timelineList(ProjectLibraryBase projectLibraryBase, HttpServletRequest req); + List> timelineList(ProjectLibraryBase projectLibraryBase, HttpServletRequest req,boolean queryAllProject); List timeline(String startTime, String endTime); @@ -39,5 +39,5 @@ public interface IProjectStatusBoardService { * @param request * @param projectLibraryBase */ - void exportXls(HttpServletResponse response, HttpServletRequest request, ProjectLibraryBase projectLibraryBase); + void exportXls(HttpServletResponse response, HttpServletRequest request, ProjectLibraryBase projectLibraryBase,boolean queryAllProject); } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectCertificationInventoryEOServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectCertificationInventoryEOServiceImpl.java index e0c444871..b02fa2963 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectCertificationInventoryEOServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectCertificationInventoryEOServiceImpl.java @@ -30,6 +30,7 @@ import com.jero.modules.document.entity.BussDocumentLibraryEO; import com.jero.modules.document.mapper.BussDocumentLibraryEOMapper; import com.jero.modules.document.service.IBussDocumentLibraryEOService; import com.jero.modules.dummy.enums.OrderEnum; +import com.jero.modules.enums.DictCodeEnum; import com.jero.modules.feishu.enums.TemplateInfoEnum2; import com.jero.modules.feishu.service.IFeishuService; import com.jero.modules.oss.entity.OSSFile; @@ -1415,6 +1416,36 @@ public class ProjectCertificationInventoryEOServiceImpl extends ServiceImpl sysDictItems = this.sysDictItemServiceImpl.selectItemsAll(); + List dutyTerritorys = new ArrayList<>(); + Map> firstLevelDTMap = this.sysDictItemServiceImpl.getFirstLevelSysDictItemByDictCode(DictCodeEnum.DUTY_TERRITORY.getValue(), sysDictItems); + String[] firstLevelDTArr = projectCertificationInventoryEO.getFirstLevelDutyTerritory().split(","); + for (String firstLevelDT : firstLevelDTArr){ + if(CollectionUtils.isNotEmpty(firstLevelDTMap.get(firstLevelDT))){ + dutyTerritorys.addAll(firstLevelDTMap.get(firstLevelDT)); + } + } + if(CollectionUtils.isNotEmpty(dutyTerritorys)){ + dutyTerritoryStr = dutyTerritorys.stream().map(SysDictItem::getItemValue).distinct().collect(Collectors.joining(",")); + } + } + if (StringUtils.isNotEmpty(dutyTerritoryStr)) { + String finalDutyTerritoryStr = dutyTerritoryStr.replaceAll("\\*",""); + queryWrapper.and(query -> { + query.lambda().like(ProjectCertificationInventoryEO::getDutyTerritory, finalDutyTerritoryStr); + if(StringUtils.contains(finalDutyTerritoryStr,",")){ + String[] dutyTerritoryArr = finalDutyTerritoryStr.split(","); + for (String duty : dutyTerritoryArr) { + query.or(q -> { + q.like("duty_territory",duty); + }); + } + } + }); + } IPage pageList = this.page(page, queryWrapper); this.disposeData(pageList.getRecords(),cut); List records = this.hearSort(projectCertificationInventoryEO, pageList.getRecords()); diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectStatusBoardServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectStatusBoardServiceImpl.java index c8bc99b02..63a5cde6b 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectStatusBoardServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/ProjectStatusBoardServiceImpl.java @@ -30,6 +30,7 @@ import com.jero.modules.system.service.IProjectUserBrandService; import com.jero.modules.system.service.ISysUserService; import com.jero.modules.system.service.impl.SysDictItemServiceImpl; import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; @@ -38,6 +39,7 @@ import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.shiro.SecurityUtils; +import org.jetbrains.annotations.NotNull; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -49,6 +51,7 @@ import java.io.OutputStream; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.*; +import java.util.concurrent.CountDownLatch; import java.util.stream.Collectors; /** @@ -56,6 +59,7 @@ import java.util.stream.Collectors; * @date 2022/5/13 9:59 * @auth zhn */ +@Slf4j @Service public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService { private static DecimalFormat df = new DecimalFormat("#.00"); @@ -98,7 +102,7 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService */ @SneakyThrows @Override - public List> timelineList(ProjectLibraryBase projectLibraryBase, HttpServletRequest req) { + public List> timelineList(ProjectLibraryBase projectLibraryBase, HttpServletRequest req,boolean queryAllProject) { if(StringUtils.isNotBlank(projectLibraryBase.getProjectName())){ String s = projectLibraryBase.getProjectName().replaceAll("\\*", ""); projectLibraryBase.setProjectName(s); @@ -107,6 +111,13 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); //项目库信息 List projectLibraryBaseList = projectLibraryBaseService.getList(projectLibraryBase); + if(!queryAllProject){ + // 如果不是查询所有项目,只查询主项目 + projectLibraryBaseList = projectLibraryBaseList.stream().filter(plbEo -> { + boolean flag = (StringUtils.isEmpty(plbEo.getParentId()) || StringUtils.equals(plbEo.getProjectVersion(),"00")); + return flag; + }).collect(Collectors.toList()); + } List> list = new ArrayList<>(); List> result = new ArrayList<>(); @@ -538,12 +549,25 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService @Override - public void exportXls(HttpServletResponse response, HttpServletRequest request,ProjectLibraryBase projectLibraryBase) { + public void exportXls(HttpServletResponse response, HttpServletRequest request,ProjectLibraryBase projectLibraryBase,boolean queryAllProject) { + long startTime = System.currentTimeMillis(); String fileName = ""; String cut = projectLibraryBase.getCut(); OutputStream ops = null; HSSFWorkbook workbook = new HSSFWorkbook(); + + if(StringUtils.isNotBlank(projectLibraryBase.getProjectName())){ + String s = projectLibraryBase.getProjectName().replaceAll("\\*", ""); + projectLibraryBase.setProjectName(s); + } List plbEoList = this.projectLibraryBaseService.getList(projectLibraryBase); + if(!queryAllProject){ + // 如果不是查询所有项目,只查询主项目 + plbEoList = plbEoList.stream().filter(plbEo -> { + boolean flag = (StringUtils.isEmpty(plbEo.getParentId()) || StringUtils.equals(plbEo.getProjectVersion(),"00")); + return flag; + }).collect(Collectors.toList()); + } List dictItemList = sysDictItemServiceImpl.selectItemsByDictCode("region"); for (ProjectLibraryBase libraryBase : plbEoList) { targetMarket(projectLibraryBase, dictItemList, libraryBase); @@ -552,10 +576,49 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService List pciEoList = this.projectCertificationInventoryEOService.list(); List ptpEoList = this.projectTaskPlanningService.list(); List pmEoList = this.paramsManifestEOService.list(); + log.info("一阶段消耗时间:" + (System.currentTimeMillis() - startTime)); List pcmEoList = this.paramsCollectManifestEOService.getList(null); - this.exportCrossProjectProgress(workbook,projectLibraryBase,plbEoList,pliEoList,pciEoList,pmEoList,pcmEoList,ptpEoList); - this.exportOverviewCrossProjectProgress(workbook,projectLibraryBase,plbEoList,pliEoList,pciEoList,pmEoList,pcmEoList,ptpEoList); + log.info("二阶段消耗时间:" + (System.currentTimeMillis() - startTime)); + +// this.exportCrossProjectProgress(workbook,projectLibraryBase,plbEoList,pliEoList,pciEoList,pmEoList,pcmEoList,ptpEoList); +// this.exportOverviewCrossProjectProgress(workbook,projectLibraryBase,plbEoList,pliEoList,pciEoList,pmEoList,pcmEoList,ptpEoList); + + HSSFSheet corssProjectProgressSheet = createCorssProjectProgressSheet(workbook, projectLibraryBase); + HSSFSheet overviewCrossProjectProgressSheet = this.createOverviewCrossProjectProgressSheet(workbook, projectLibraryBase); + CellStyle cellStyleTitle = workbook.createCellStyle(); + cellStyleTitle.setAlignment(HorizontalAlignment.CENTER); + cellStyleTitle.setVerticalAlignment(VerticalAlignment.CENTER); + + // 多线程代码 + // 创建线程一 + List finalPlbEoList = plbEoList; + Thread thread1 = new Thread(new Runnable() { + @Override + public void run() { + exportCrossProjectProgressSetData(finalPlbEoList, corssProjectProgressSheet,pliEoList,pciEoList,pmEoList,pcmEoList,projectLibraryBase,ptpEoList); + } + }); + + // 创建线程二 + Thread thread2 = new Thread(new Runnable() { + @Override + public void run() { + exportOverviewCrossProjectProgressSetData(finalPlbEoList, overviewCrossProjectProgressSheet,pliEoList,pciEoList,pmEoList,pcmEoList,projectLibraryBase,ptpEoList,cellStyleTitle); + } + }); + + // 启动线程一和线程二 + thread1.start(); + thread2.start(); + + // 等待线程一和线程二执行完毕 + try { + thread1.join(); + thread2.join(); + } catch (InterruptedException e) { + e.printStackTrace(); + } try { response.setHeader("Content-Disposition", "attachment; filename=" + fileName); @@ -573,6 +636,7 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService }finally { IOUtils.closeQuietly(ops); } + log.info("总消耗时间:" + (System.currentTimeMillis() - startTime)); } /** @@ -586,7 +650,7 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService * @param pcmEoList * @param ptpEoList */ - private void exportCrossProjectProgress(HSSFWorkbook workbook, + private void exportCrossProjectProgress(HSSFSheet sheet, ProjectLibraryBase projectLibraryBase, List plbEoList, List pliEoList, @@ -594,6 +658,11 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService List pmEoList, List pcmEoList, List ptpEoList) { + this.exportCrossProjectProgressSetData(plbEoList, sheet,pliEoList,pciEoList,pmEoList,pcmEoList,projectLibraryBase,ptpEoList); + } + + @NotNull + private HSSFSheet createCorssProjectProgressSheet(HSSFWorkbook workbook, ProjectLibraryBase projectLibraryBase) { String cut = projectLibraryBase.getCut(); String sheetName = "项目进度"; String firstTitle = "项目," + @@ -682,8 +751,7 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService secondRowCell.setCellValue(secondTitleArr[i-1]); } } - - this.exportCrossProjectProgressSetData(plbEoList, sheet,pliEoList,pciEoList,pmEoList,pcmEoList,projectLibraryBase,ptpEoList); + return sheet; } /** @@ -707,6 +775,7 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService List ptpEoList) { int dataIndex = 2; for (ProjectLibraryBase plbEo : plbEoList) { + long startTime = System.currentTimeMillis(); Row dataRow = sheet.createRow(dataIndex); dataRow.createCell(0).setCellValue(plbEo.getShowName()); @@ -900,6 +969,8 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService dataRow.createCell(55).setCellValue(parameterCollectingPercentageStr + percentSign); dataRow.createCell(56).setCellValue(certificationSubmissionStr); dataIndex ++; + + log.info("11111处理"+ dataIndex +"个项目消耗时间:" + (System.currentTimeMillis() - startTime)); } } @@ -914,14 +985,19 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService * @param pcmEoList * @param ptpEoList */ - private void exportOverviewCrossProjectProgress(HSSFWorkbook workbook, + private void exportOverviewCrossProjectProgress(HSSFSheet sheet, ProjectLibraryBase projectLibraryBase, List plbEoList, List pliEoList, List pciEoList, List pmEoList, List pcmEoList, - List ptpEoList) { + List ptpEoList, + CellStyle cellStyleTitle) { + this.exportOverviewCrossProjectProgressSetData(plbEoList, sheet,pliEoList,pciEoList,pmEoList,pcmEoList,projectLibraryBase,ptpEoList,cellStyleTitle); + } + + public HSSFSheet createOverviewCrossProjectProgressSheet(HSSFWorkbook workbook, ProjectLibraryBase projectLibraryBase){ String cut = projectLibraryBase.getCut(); String sheetName = "项目进度概览"; String firstTitle = "项目,R&H Studio,法规符合性管理,认证活动管理"; @@ -975,7 +1051,7 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService secondRowCell.setCellValue(secondTitleArr[i]); } } - this.exportOverviewCrossProjectProgressSetData(plbEoList, sheet,pliEoList,pciEoList,pmEoList,pcmEoList,projectLibraryBase,ptpEoList,cellStyleTitle); + return sheet; } /** @@ -1001,6 +1077,7 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService CellStyle cellStyleTitle) { int dataIndex = 2; for (ProjectLibraryBase plbEo : plbEoList) { + long startTime = System.currentTimeMillis(); List ptpEoListTemp = ptpEoList.stream().filter(ptpEo -> StringUtils.equals(ptpEo.getProjectId(), plbEo.getId())).collect(Collectors.toList()); String legalTaskConfirmationStr = ""; String designDeadlineStr = ""; @@ -1131,6 +1208,7 @@ public class ProjectStatusBoardServiceImpl implements IProjectStatusBoardService } } dataIndex += 2; + log.info("22222处理"+ dataIndex +"个项目消耗时间:" + (System.currentTimeMillis() - startTime)); } }