diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/quality/BizQualitySupervisionRepController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/quality/BizQualitySupervisionRepController.java index 39f0dab..8ef84c7 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/quality/BizQualitySupervisionRepController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/quality/BizQualitySupervisionRepController.java @@ -8,6 +8,7 @@ import com.casic.missiles.dto.*; import com.casic.missiles.dto.quality.BizQualitySupervisionRepVO; import com.casic.missiles.dto.quality.approval.SupervisionRepDTO; +import com.casic.missiles.model.quality.BizQualitySupervisionRecord; import com.casic.missiles.model.quality.BizQualitySupervisionRep; import com.casic.missiles.service.IGeneralApprovalService; import com.casic.missiles.service.quality.IBizQualitySupervisionRepService; @@ -64,9 +65,12 @@ @ApiOperation("导出") @PostMapping("/listExport") - public void export(@RequestBody IdsDTO ids, HttpServletResponse response) throws Exception { + public void export(@RequestBody BizQualitySupervisionRepVO bizQualitySupervisionRepVO, HttpServletResponse response) throws Exception { //to-do 所有文件压缩包导出 - bizQualitySupervisionRepService.export(ids,response); + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = bizQualitySupervisionRepVO.genQuery(); + List supervisionRepList = bizQualitySupervisionRepService.selectBizQualitySupervisionRepPage(queryWrapper, page); + bizQualitySupervisionRepService.exportZip(supervisionRepList, response); } @ApiOperation("导出word/pdf/打印") diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/quality/BizQualitySupervisionRepController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/quality/BizQualitySupervisionRepController.java index 39f0dab..8ef84c7 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/quality/BizQualitySupervisionRepController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/quality/BizQualitySupervisionRepController.java @@ -8,6 +8,7 @@ import com.casic.missiles.dto.*; import com.casic.missiles.dto.quality.BizQualitySupervisionRepVO; import com.casic.missiles.dto.quality.approval.SupervisionRepDTO; +import com.casic.missiles.model.quality.BizQualitySupervisionRecord; import com.casic.missiles.model.quality.BizQualitySupervisionRep; import com.casic.missiles.service.IGeneralApprovalService; import com.casic.missiles.service.quality.IBizQualitySupervisionRepService; @@ -64,9 +65,12 @@ @ApiOperation("导出") @PostMapping("/listExport") - public void export(@RequestBody IdsDTO ids, HttpServletResponse response) throws Exception { + public void export(@RequestBody BizQualitySupervisionRepVO bizQualitySupervisionRepVO, HttpServletResponse response) throws Exception { //to-do 所有文件压缩包导出 - bizQualitySupervisionRepService.export(ids,response); + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = bizQualitySupervisionRepVO.genQuery(); + List supervisionRepList = bizQualitySupervisionRepService.selectBizQualitySupervisionRepPage(queryWrapper, page); + bizQualitySupervisionRepService.exportZip(supervisionRepList, response); } @ApiOperation("导出word/pdf/打印") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualitySupervisionRecordServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualitySupervisionRecordServiceImpl.java index bd1fac4..7a40cd8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualitySupervisionRecordServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualitySupervisionRecordServiceImpl.java @@ -148,7 +148,12 @@ return; } //创建线程组 - ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, recordList.size(), 100, + int corePoolSize = 1; + if (recordList.size() > 5) { + corePoolSize = 5; + } + //创建线程组 + ThreadPoolExecutor threadPool = new ThreadPoolExecutor(corePoolSize, recordList.size(), 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(10)); String rootFileName = "质量监督记录" + new SimpleDateFormat("yyyyMMddHHmm").format(new Date()); List> futures = new ArrayList<>(); @@ -156,6 +161,14 @@ //todo 技术能力分析报告 if (ObjectUtil.isNotEmpty(supervisionRecord)) { Map map = BeanUtil.beanToMap(supervisionRecord); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(SystemSign::getSignUserId, supervisionRecord.getCreator()); + lambdaQueryWrapper.last("limit 1"); + SystemSign sign = signService.getOne(lambdaQueryWrapper); + if (ObjectUtil.isEmpty(sign)) { + throw new BusinessException(16000, "该用户签名不存在"); + } + map.put("imagesName", sign.getMinioFileName()); CompletableFuture exportFileTask = CompletableFuture.supplyAsync( () -> { //添加附件 @@ -165,7 +178,7 @@ attachmentFiles.add(conformanceFileRel.getFileName()); } } - printFileRegister.registerPrintFile(QUALITY_TECHNICAL_ANALYSIS_REPORT, EXPORT_TEMPLATE, null, + printFileRegister.registerPrintFile(QUALITY_SUPERVISION_RECORD, EXPORT_TEMPLATE, null, RegisterCustomParameters.builder() .pdf(false) .customParam(map) @@ -201,6 +214,7 @@ LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(SystemSign::getSignUserId, record.getCreator()); + lambdaQueryWrapper.last("limit 1"); SystemSign sign = signService.getOne(lambdaQueryWrapper); if (ObjectUtil.isEmpty(sign)) { throw new BusinessException(16000, "该用户签名不存在"); @@ -220,7 +234,7 @@ contentList.add(content); } map.put("contentList", contentList); - map.put("fileName", sign.getMinioFileName()); + map.put("imagesName", sign.getMinioFileName()); printFileRegister.registerPrintFile(QUALITY_SUPERVISION_RECORD, "导出模板", null, map, exportDTO.isPdf(), response); } } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/quality/BizQualitySupervisionRepController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/quality/BizQualitySupervisionRepController.java index 39f0dab..8ef84c7 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/quality/BizQualitySupervisionRepController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/quality/BizQualitySupervisionRepController.java @@ -8,6 +8,7 @@ import com.casic.missiles.dto.*; import com.casic.missiles.dto.quality.BizQualitySupervisionRepVO; import com.casic.missiles.dto.quality.approval.SupervisionRepDTO; +import com.casic.missiles.model.quality.BizQualitySupervisionRecord; import com.casic.missiles.model.quality.BizQualitySupervisionRep; import com.casic.missiles.service.IGeneralApprovalService; import com.casic.missiles.service.quality.IBizQualitySupervisionRepService; @@ -64,9 +65,12 @@ @ApiOperation("导出") @PostMapping("/listExport") - public void export(@RequestBody IdsDTO ids, HttpServletResponse response) throws Exception { + public void export(@RequestBody BizQualitySupervisionRepVO bizQualitySupervisionRepVO, HttpServletResponse response) throws Exception { //to-do 所有文件压缩包导出 - bizQualitySupervisionRepService.export(ids,response); + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = bizQualitySupervisionRepVO.genQuery(); + List supervisionRepList = bizQualitySupervisionRepService.selectBizQualitySupervisionRepPage(queryWrapper, page); + bizQualitySupervisionRepService.exportZip(supervisionRepList, response); } @ApiOperation("导出word/pdf/打印") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualitySupervisionRecordServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualitySupervisionRecordServiceImpl.java index bd1fac4..7a40cd8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualitySupervisionRecordServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualitySupervisionRecordServiceImpl.java @@ -148,7 +148,12 @@ return; } //创建线程组 - ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, recordList.size(), 100, + int corePoolSize = 1; + if (recordList.size() > 5) { + corePoolSize = 5; + } + //创建线程组 + ThreadPoolExecutor threadPool = new ThreadPoolExecutor(corePoolSize, recordList.size(), 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(10)); String rootFileName = "质量监督记录" + new SimpleDateFormat("yyyyMMddHHmm").format(new Date()); List> futures = new ArrayList<>(); @@ -156,6 +161,14 @@ //todo 技术能力分析报告 if (ObjectUtil.isNotEmpty(supervisionRecord)) { Map map = BeanUtil.beanToMap(supervisionRecord); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(SystemSign::getSignUserId, supervisionRecord.getCreator()); + lambdaQueryWrapper.last("limit 1"); + SystemSign sign = signService.getOne(lambdaQueryWrapper); + if (ObjectUtil.isEmpty(sign)) { + throw new BusinessException(16000, "该用户签名不存在"); + } + map.put("imagesName", sign.getMinioFileName()); CompletableFuture exportFileTask = CompletableFuture.supplyAsync( () -> { //添加附件 @@ -165,7 +178,7 @@ attachmentFiles.add(conformanceFileRel.getFileName()); } } - printFileRegister.registerPrintFile(QUALITY_TECHNICAL_ANALYSIS_REPORT, EXPORT_TEMPLATE, null, + printFileRegister.registerPrintFile(QUALITY_SUPERVISION_RECORD, EXPORT_TEMPLATE, null, RegisterCustomParameters.builder() .pdf(false) .customParam(map) @@ -201,6 +214,7 @@ LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(SystemSign::getSignUserId, record.getCreator()); + lambdaQueryWrapper.last("limit 1"); SystemSign sign = signService.getOne(lambdaQueryWrapper); if (ObjectUtil.isEmpty(sign)) { throw new BusinessException(16000, "该用户签名不存在"); @@ -220,7 +234,7 @@ contentList.add(content); } map.put("contentList", contentList); - map.put("fileName", sign.getMinioFileName()); + map.put("imagesName", sign.getMinioFileName()); printFileRegister.registerPrintFile(QUALITY_SUPERVISION_RECORD, "导出模板", null, map, exportDTO.isPdf(), response); } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualitySupervisionRepServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualitySupervisionRepServiceImpl.java index 41ce093..99ccd78 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualitySupervisionRepServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualitySupervisionRepServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; import com.alibaba.druid.util.HttpClientUtils; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -13,30 +14,38 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.*; +import com.casic.missiles.dto.certificate.CompressParameter; +import com.casic.missiles.dto.certificate.RegisterCustomParameters; import com.casic.missiles.dto.quality.BizQualitySupervisionRepVO; import com.casic.missiles.dto.quality.approval.SupervisionRepDTO; import com.casic.missiles.enums.quality.QualityDictTypeEnum; import com.casic.missiles.enums.quality.QualityTableEnum; import com.casic.missiles.enums.system.ApprovalStatusEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.quality.BizQualitySupervisionRepMapper; import com.casic.missiles.model.quality.*; import com.casic.missiles.service.Impl.GeneralApprovalServiceImpl; import com.casic.missiles.service.listeners.register.PrintFileRegister; import com.casic.missiles.service.quality.*; import com.casic.missiles.service.quality.base.IBaseFileCodeService; +import com.casic.missiles.utils.ZipUtils; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletResponse; import java.io.Serializable; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; -import static com.casic.missiles.enums.PrintFileModuleNameEnum.QUALITY_SUPERVISION_REPORT; +import static com.casic.missiles.enums.PrintFileModuleNameEnum.*; /** @@ -68,6 +77,9 @@ private final PrintFileRegister printFileRegister; + @Value("${casic.file.dir}") + private String localFileDir; + public BizQualitySupervisionRepServiceImpl(IBizQualityRepRelService bizQualityRepRelService, AbstractPermissionContext permissionContext, IBizQualityNonConformanceRepService bizQualityNonConformanceRepService, IBizLabRelDeptService relDeptService, @Lazy IBizQualityPreventRecordService bizQualityPreventRecordService, @Lazy IBizQualityCorrectiveRecordService bizQualityCorrectiveRecordService, AbstractDictService dictService, PrintFileRegister printFileRegister) { this.bizQualityRepRelService = bizQualityRepRelService; this.permissionContext = permissionContext; @@ -129,27 +141,74 @@ String date = DateUtil.format(bizQualitySupervisionRep.getLogTime(), "yyyy-MM-dd"); Map map = BeanUtil.beanToMap(bizQualitySupervisionRep); map.put("logTime", date); -// if (bizQualitySupervisionRep.getConfirmTime() != null){ -// String date = DateUtil.format(bizQualitySupervisionRep.getConfirmTime(), "yyyy-MM-dd"); -// Calendar calendar = Calendar.getInstance(); -// try { -// calendar.setTime(new SimpleDateFormat("yyyy-MM-dd").parse(date)); -// } catch (Exception e) { -// throw new BusinessException(1500, String.format(date, "质量监督报告确认日期,格式不正确")); -// } -// map.put("year1",calendar.get(Calendar.YEAR)); -// map.put("month1",calendar.get(Calendar.MONTH)+1); -// map.put("day1",calendar.get(Calendar.DAY_OF_MONTH)); -// } - printFileRegister.registerPrintFile(QUALITY_SUPERVISION_REPORT, "导出模板", null, map, exportDTO.isPdf(), response); } } - @Transactional + /** + * @param supervisionRepList 分页数据 + * @param response 响应 + */ @Override - public void export(IdsDTO ids, HttpServletResponse response) { - + public void exportZip(List supervisionRepList, HttpServletResponse response) { + if (CollectionUtil.isEmpty(supervisionRepList)){ + return; + } + //创建线程组 + ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, supervisionRepList.size(), 100, + TimeUnit.SECONDS, new LinkedBlockingQueue<>(10)); + String rootFileName = "质量监督报告" + new SimpleDateFormat("yyyyMMddHHmm").format(new Date()); + List> futures = new ArrayList<>(); + for (BizQualitySupervisionRep supervisionRep : supervisionRepList) { + if (ObjectUtil.isNotEmpty(supervisionRep)){ + Map map = BeanUtil.beanToMap(supervisionRep); + CompletableFuture completableFuture = CompletableFuture.supplyAsync( + ()->{ + //添加附件 + List attachmentFiles = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(supervisionRep.getReps())){ + for (BizQualityNonConformanceRep rep : supervisionRep.getReps()) { + attachmentFiles.add(rep.getFileName()); + } + } + if (CollectionUtils.isNotEmpty(supervisionRep.getCorrectiveRecords())){ + for (BizQualityCorrectiveRecord correctiveRecord : supervisionRep.getCorrectiveRecords()) { + attachmentFiles.add(correctiveRecord.getFileName()); + } + } + if (CollectionUtils.isNotEmpty(supervisionRep.getPreventRecords())){ + for (BizQualityPreventRecord preventRecord : supervisionRep.getPreventRecords()) { + attachmentFiles.add(preventRecord.getFileName()); + } + } + if (CollectionUtils.isNotEmpty(supervisionRep.getRecords())){ + for (BizQualitySupervisionRecord record : supervisionRep.getRecords()) { + attachmentFiles.add(record.getFileName()); + } + } + printFileRegister.registerPrintFile(QUALITY_SUPERVISION_REPORT, EXPORT_TEMPLATE, null, + RegisterCustomParameters.builder() + .pdf(false) + .customParam(map) + .response(null) + .customFileName(supervisionRep.getFileCode() + supervisionRep.getFileName()) + .compressParameter(CompressParameter.builder() + .zip(true) + .attachmentFiles(attachmentFiles) + .rootDirName(rootFileName) + .build()) + .customTemplateUrls(null) + .build()); + return null; + }, threadPool); + futures.add(completableFuture); + } + } + CompletableFuture[] futuresArr = futures.toArray(new CompletableFuture[0]); + //所有线程并发执行 + CompletableFuture.allOf(futuresArr).join(); + //等待所有生成的线程结束,则进行数据的打包下载 + ZipUtils.batchDownloadFiles(rootFileName, response,localFileDir); } /** diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/quality/BizQualitySupervisionRepController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/quality/BizQualitySupervisionRepController.java index 39f0dab..8ef84c7 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/quality/BizQualitySupervisionRepController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/quality/BizQualitySupervisionRepController.java @@ -8,6 +8,7 @@ import com.casic.missiles.dto.*; import com.casic.missiles.dto.quality.BizQualitySupervisionRepVO; import com.casic.missiles.dto.quality.approval.SupervisionRepDTO; +import com.casic.missiles.model.quality.BizQualitySupervisionRecord; import com.casic.missiles.model.quality.BizQualitySupervisionRep; import com.casic.missiles.service.IGeneralApprovalService; import com.casic.missiles.service.quality.IBizQualitySupervisionRepService; @@ -64,9 +65,12 @@ @ApiOperation("导出") @PostMapping("/listExport") - public void export(@RequestBody IdsDTO ids, HttpServletResponse response) throws Exception { + public void export(@RequestBody BizQualitySupervisionRepVO bizQualitySupervisionRepVO, HttpServletResponse response) throws Exception { //to-do 所有文件压缩包导出 - bizQualitySupervisionRepService.export(ids,response); + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = bizQualitySupervisionRepVO.genQuery(); + List supervisionRepList = bizQualitySupervisionRepService.selectBizQualitySupervisionRepPage(queryWrapper, page); + bizQualitySupervisionRepService.exportZip(supervisionRepList, response); } @ApiOperation("导出word/pdf/打印") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualitySupervisionRecordServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualitySupervisionRecordServiceImpl.java index bd1fac4..7a40cd8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualitySupervisionRecordServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualitySupervisionRecordServiceImpl.java @@ -148,7 +148,12 @@ return; } //创建线程组 - ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, recordList.size(), 100, + int corePoolSize = 1; + if (recordList.size() > 5) { + corePoolSize = 5; + } + //创建线程组 + ThreadPoolExecutor threadPool = new ThreadPoolExecutor(corePoolSize, recordList.size(), 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(10)); String rootFileName = "质量监督记录" + new SimpleDateFormat("yyyyMMddHHmm").format(new Date()); List> futures = new ArrayList<>(); @@ -156,6 +161,14 @@ //todo 技术能力分析报告 if (ObjectUtil.isNotEmpty(supervisionRecord)) { Map map = BeanUtil.beanToMap(supervisionRecord); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(SystemSign::getSignUserId, supervisionRecord.getCreator()); + lambdaQueryWrapper.last("limit 1"); + SystemSign sign = signService.getOne(lambdaQueryWrapper); + if (ObjectUtil.isEmpty(sign)) { + throw new BusinessException(16000, "该用户签名不存在"); + } + map.put("imagesName", sign.getMinioFileName()); CompletableFuture exportFileTask = CompletableFuture.supplyAsync( () -> { //添加附件 @@ -165,7 +178,7 @@ attachmentFiles.add(conformanceFileRel.getFileName()); } } - printFileRegister.registerPrintFile(QUALITY_TECHNICAL_ANALYSIS_REPORT, EXPORT_TEMPLATE, null, + printFileRegister.registerPrintFile(QUALITY_SUPERVISION_RECORD, EXPORT_TEMPLATE, null, RegisterCustomParameters.builder() .pdf(false) .customParam(map) @@ -201,6 +214,7 @@ LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(SystemSign::getSignUserId, record.getCreator()); + lambdaQueryWrapper.last("limit 1"); SystemSign sign = signService.getOne(lambdaQueryWrapper); if (ObjectUtil.isEmpty(sign)) { throw new BusinessException(16000, "该用户签名不存在"); @@ -220,7 +234,7 @@ contentList.add(content); } map.put("contentList", contentList); - map.put("fileName", sign.getMinioFileName()); + map.put("imagesName", sign.getMinioFileName()); printFileRegister.registerPrintFile(QUALITY_SUPERVISION_RECORD, "导出模板", null, map, exportDTO.isPdf(), response); } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualitySupervisionRepServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualitySupervisionRepServiceImpl.java index 41ce093..99ccd78 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualitySupervisionRepServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualitySupervisionRepServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; import com.alibaba.druid.util.HttpClientUtils; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -13,30 +14,38 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.*; +import com.casic.missiles.dto.certificate.CompressParameter; +import com.casic.missiles.dto.certificate.RegisterCustomParameters; import com.casic.missiles.dto.quality.BizQualitySupervisionRepVO; import com.casic.missiles.dto.quality.approval.SupervisionRepDTO; import com.casic.missiles.enums.quality.QualityDictTypeEnum; import com.casic.missiles.enums.quality.QualityTableEnum; import com.casic.missiles.enums.system.ApprovalStatusEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.quality.BizQualitySupervisionRepMapper; import com.casic.missiles.model.quality.*; import com.casic.missiles.service.Impl.GeneralApprovalServiceImpl; import com.casic.missiles.service.listeners.register.PrintFileRegister; import com.casic.missiles.service.quality.*; import com.casic.missiles.service.quality.base.IBaseFileCodeService; +import com.casic.missiles.utils.ZipUtils; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletResponse; import java.io.Serializable; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; -import static com.casic.missiles.enums.PrintFileModuleNameEnum.QUALITY_SUPERVISION_REPORT; +import static com.casic.missiles.enums.PrintFileModuleNameEnum.*; /** @@ -68,6 +77,9 @@ private final PrintFileRegister printFileRegister; + @Value("${casic.file.dir}") + private String localFileDir; + public BizQualitySupervisionRepServiceImpl(IBizQualityRepRelService bizQualityRepRelService, AbstractPermissionContext permissionContext, IBizQualityNonConformanceRepService bizQualityNonConformanceRepService, IBizLabRelDeptService relDeptService, @Lazy IBizQualityPreventRecordService bizQualityPreventRecordService, @Lazy IBizQualityCorrectiveRecordService bizQualityCorrectiveRecordService, AbstractDictService dictService, PrintFileRegister printFileRegister) { this.bizQualityRepRelService = bizQualityRepRelService; this.permissionContext = permissionContext; @@ -129,27 +141,74 @@ String date = DateUtil.format(bizQualitySupervisionRep.getLogTime(), "yyyy-MM-dd"); Map map = BeanUtil.beanToMap(bizQualitySupervisionRep); map.put("logTime", date); -// if (bizQualitySupervisionRep.getConfirmTime() != null){ -// String date = DateUtil.format(bizQualitySupervisionRep.getConfirmTime(), "yyyy-MM-dd"); -// Calendar calendar = Calendar.getInstance(); -// try { -// calendar.setTime(new SimpleDateFormat("yyyy-MM-dd").parse(date)); -// } catch (Exception e) { -// throw new BusinessException(1500, String.format(date, "质量监督报告确认日期,格式不正确")); -// } -// map.put("year1",calendar.get(Calendar.YEAR)); -// map.put("month1",calendar.get(Calendar.MONTH)+1); -// map.put("day1",calendar.get(Calendar.DAY_OF_MONTH)); -// } - printFileRegister.registerPrintFile(QUALITY_SUPERVISION_REPORT, "导出模板", null, map, exportDTO.isPdf(), response); } } - @Transactional + /** + * @param supervisionRepList 分页数据 + * @param response 响应 + */ @Override - public void export(IdsDTO ids, HttpServletResponse response) { - + public void exportZip(List supervisionRepList, HttpServletResponse response) { + if (CollectionUtil.isEmpty(supervisionRepList)){ + return; + } + //创建线程组 + ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, supervisionRepList.size(), 100, + TimeUnit.SECONDS, new LinkedBlockingQueue<>(10)); + String rootFileName = "质量监督报告" + new SimpleDateFormat("yyyyMMddHHmm").format(new Date()); + List> futures = new ArrayList<>(); + for (BizQualitySupervisionRep supervisionRep : supervisionRepList) { + if (ObjectUtil.isNotEmpty(supervisionRep)){ + Map map = BeanUtil.beanToMap(supervisionRep); + CompletableFuture completableFuture = CompletableFuture.supplyAsync( + ()->{ + //添加附件 + List attachmentFiles = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(supervisionRep.getReps())){ + for (BizQualityNonConformanceRep rep : supervisionRep.getReps()) { + attachmentFiles.add(rep.getFileName()); + } + } + if (CollectionUtils.isNotEmpty(supervisionRep.getCorrectiveRecords())){ + for (BizQualityCorrectiveRecord correctiveRecord : supervisionRep.getCorrectiveRecords()) { + attachmentFiles.add(correctiveRecord.getFileName()); + } + } + if (CollectionUtils.isNotEmpty(supervisionRep.getPreventRecords())){ + for (BizQualityPreventRecord preventRecord : supervisionRep.getPreventRecords()) { + attachmentFiles.add(preventRecord.getFileName()); + } + } + if (CollectionUtils.isNotEmpty(supervisionRep.getRecords())){ + for (BizQualitySupervisionRecord record : supervisionRep.getRecords()) { + attachmentFiles.add(record.getFileName()); + } + } + printFileRegister.registerPrintFile(QUALITY_SUPERVISION_REPORT, EXPORT_TEMPLATE, null, + RegisterCustomParameters.builder() + .pdf(false) + .customParam(map) + .response(null) + .customFileName(supervisionRep.getFileCode() + supervisionRep.getFileName()) + .compressParameter(CompressParameter.builder() + .zip(true) + .attachmentFiles(attachmentFiles) + .rootDirName(rootFileName) + .build()) + .customTemplateUrls(null) + .build()); + return null; + }, threadPool); + futures.add(completableFuture); + } + } + CompletableFuture[] futuresArr = futures.toArray(new CompletableFuture[0]); + //所有线程并发执行 + CompletableFuture.allOf(futuresArr).join(); + //等待所有生成的线程结束,则进行数据的打包下载 + ZipUtils.batchDownloadFiles(rootFileName, response,localFileDir); } /** diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityTechnicalAnalysisRepServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityTechnicalAnalysisRepServiceImpl.java index 57bffb7..94097ee 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityTechnicalAnalysisRepServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityTechnicalAnalysisRepServiceImpl.java @@ -96,7 +96,11 @@ return; } //创建线程组 - ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, list.size(), 100, + int corePoolSize = 1; + if (list.size() > 5) { + corePoolSize = 5; + } + ThreadPoolExecutor threadPool = new ThreadPoolExecutor(corePoolSize, list.size(), 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(10)); String rootFileName = "技术能力分析报告" + new SimpleDateFormat("yyyyMMddHHmm").format(new Date()); List> futures = new ArrayList<>(); @@ -124,7 +128,7 @@ //所有线程并发执行 CompletableFuture.allOf(futuresArr).join(); //等待所有生成的线程结束,则进行数据的打包下载 - ZipUtils.batchDownloadFiles(rootFileName, response,localFileDir); + ZipUtils.batchDownloadFiles(rootFileName, response, localFileDir); } @Override diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/quality/BizQualitySupervisionRepController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/quality/BizQualitySupervisionRepController.java index 39f0dab..8ef84c7 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/quality/BizQualitySupervisionRepController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/quality/BizQualitySupervisionRepController.java @@ -8,6 +8,7 @@ import com.casic.missiles.dto.*; import com.casic.missiles.dto.quality.BizQualitySupervisionRepVO; import com.casic.missiles.dto.quality.approval.SupervisionRepDTO; +import com.casic.missiles.model.quality.BizQualitySupervisionRecord; import com.casic.missiles.model.quality.BizQualitySupervisionRep; import com.casic.missiles.service.IGeneralApprovalService; import com.casic.missiles.service.quality.IBizQualitySupervisionRepService; @@ -64,9 +65,12 @@ @ApiOperation("导出") @PostMapping("/listExport") - public void export(@RequestBody IdsDTO ids, HttpServletResponse response) throws Exception { + public void export(@RequestBody BizQualitySupervisionRepVO bizQualitySupervisionRepVO, HttpServletResponse response) throws Exception { //to-do 所有文件压缩包导出 - bizQualitySupervisionRepService.export(ids,response); + Page page = PageFactory.defaultPage(); + QueryWrapper queryWrapper = bizQualitySupervisionRepVO.genQuery(); + List supervisionRepList = bizQualitySupervisionRepService.selectBizQualitySupervisionRepPage(queryWrapper, page); + bizQualitySupervisionRepService.exportZip(supervisionRepList, response); } @ApiOperation("导出word/pdf/打印") diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualitySupervisionRecordServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualitySupervisionRecordServiceImpl.java index bd1fac4..7a40cd8 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualitySupervisionRecordServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualitySupervisionRecordServiceImpl.java @@ -148,7 +148,12 @@ return; } //创建线程组 - ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, recordList.size(), 100, + int corePoolSize = 1; + if (recordList.size() > 5) { + corePoolSize = 5; + } + //创建线程组 + ThreadPoolExecutor threadPool = new ThreadPoolExecutor(corePoolSize, recordList.size(), 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(10)); String rootFileName = "质量监督记录" + new SimpleDateFormat("yyyyMMddHHmm").format(new Date()); List> futures = new ArrayList<>(); @@ -156,6 +161,14 @@ //todo 技术能力分析报告 if (ObjectUtil.isNotEmpty(supervisionRecord)) { Map map = BeanUtil.beanToMap(supervisionRecord); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(SystemSign::getSignUserId, supervisionRecord.getCreator()); + lambdaQueryWrapper.last("limit 1"); + SystemSign sign = signService.getOne(lambdaQueryWrapper); + if (ObjectUtil.isEmpty(sign)) { + throw new BusinessException(16000, "该用户签名不存在"); + } + map.put("imagesName", sign.getMinioFileName()); CompletableFuture exportFileTask = CompletableFuture.supplyAsync( () -> { //添加附件 @@ -165,7 +178,7 @@ attachmentFiles.add(conformanceFileRel.getFileName()); } } - printFileRegister.registerPrintFile(QUALITY_TECHNICAL_ANALYSIS_REPORT, EXPORT_TEMPLATE, null, + printFileRegister.registerPrintFile(QUALITY_SUPERVISION_RECORD, EXPORT_TEMPLATE, null, RegisterCustomParameters.builder() .pdf(false) .customParam(map) @@ -201,6 +214,7 @@ LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); lambdaQueryWrapper.eq(SystemSign::getSignUserId, record.getCreator()); + lambdaQueryWrapper.last("limit 1"); SystemSign sign = signService.getOne(lambdaQueryWrapper); if (ObjectUtil.isEmpty(sign)) { throw new BusinessException(16000, "该用户签名不存在"); @@ -220,7 +234,7 @@ contentList.add(content); } map.put("contentList", contentList); - map.put("fileName", sign.getMinioFileName()); + map.put("imagesName", sign.getMinioFileName()); printFileRegister.registerPrintFile(QUALITY_SUPERVISION_RECORD, "导出模板", null, map, exportDTO.isPdf(), response); } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualitySupervisionRepServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualitySupervisionRepServiceImpl.java index 41ce093..99ccd78 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualitySupervisionRepServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualitySupervisionRepServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; import com.alibaba.druid.util.HttpClientUtils; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; @@ -13,30 +14,38 @@ import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.dto.*; +import com.casic.missiles.dto.certificate.CompressParameter; +import com.casic.missiles.dto.certificate.RegisterCustomParameters; import com.casic.missiles.dto.quality.BizQualitySupervisionRepVO; import com.casic.missiles.dto.quality.approval.SupervisionRepDTO; import com.casic.missiles.enums.quality.QualityDictTypeEnum; import com.casic.missiles.enums.quality.QualityTableEnum; import com.casic.missiles.enums.system.ApprovalStatusEnum; +import com.casic.missiles.exception.BusinessException; import com.casic.missiles.mapper.quality.BizQualitySupervisionRepMapper; import com.casic.missiles.model.quality.*; import com.casic.missiles.service.Impl.GeneralApprovalServiceImpl; import com.casic.missiles.service.listeners.register.PrintFileRegister; import com.casic.missiles.service.quality.*; import com.casic.missiles.service.quality.base.IBaseFileCodeService; +import com.casic.missiles.utils.ZipUtils; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletResponse; import java.io.Serializable; -import java.util.Date; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; -import static com.casic.missiles.enums.PrintFileModuleNameEnum.QUALITY_SUPERVISION_REPORT; +import static com.casic.missiles.enums.PrintFileModuleNameEnum.*; /** @@ -68,6 +77,9 @@ private final PrintFileRegister printFileRegister; + @Value("${casic.file.dir}") + private String localFileDir; + public BizQualitySupervisionRepServiceImpl(IBizQualityRepRelService bizQualityRepRelService, AbstractPermissionContext permissionContext, IBizQualityNonConformanceRepService bizQualityNonConformanceRepService, IBizLabRelDeptService relDeptService, @Lazy IBizQualityPreventRecordService bizQualityPreventRecordService, @Lazy IBizQualityCorrectiveRecordService bizQualityCorrectiveRecordService, AbstractDictService dictService, PrintFileRegister printFileRegister) { this.bizQualityRepRelService = bizQualityRepRelService; this.permissionContext = permissionContext; @@ -129,27 +141,74 @@ String date = DateUtil.format(bizQualitySupervisionRep.getLogTime(), "yyyy-MM-dd"); Map map = BeanUtil.beanToMap(bizQualitySupervisionRep); map.put("logTime", date); -// if (bizQualitySupervisionRep.getConfirmTime() != null){ -// String date = DateUtil.format(bizQualitySupervisionRep.getConfirmTime(), "yyyy-MM-dd"); -// Calendar calendar = Calendar.getInstance(); -// try { -// calendar.setTime(new SimpleDateFormat("yyyy-MM-dd").parse(date)); -// } catch (Exception e) { -// throw new BusinessException(1500, String.format(date, "质量监督报告确认日期,格式不正确")); -// } -// map.put("year1",calendar.get(Calendar.YEAR)); -// map.put("month1",calendar.get(Calendar.MONTH)+1); -// map.put("day1",calendar.get(Calendar.DAY_OF_MONTH)); -// } - printFileRegister.registerPrintFile(QUALITY_SUPERVISION_REPORT, "导出模板", null, map, exportDTO.isPdf(), response); } } - @Transactional + /** + * @param supervisionRepList 分页数据 + * @param response 响应 + */ @Override - public void export(IdsDTO ids, HttpServletResponse response) { - + public void exportZip(List supervisionRepList, HttpServletResponse response) { + if (CollectionUtil.isEmpty(supervisionRepList)){ + return; + } + //创建线程组 + ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, supervisionRepList.size(), 100, + TimeUnit.SECONDS, new LinkedBlockingQueue<>(10)); + String rootFileName = "质量监督报告" + new SimpleDateFormat("yyyyMMddHHmm").format(new Date()); + List> futures = new ArrayList<>(); + for (BizQualitySupervisionRep supervisionRep : supervisionRepList) { + if (ObjectUtil.isNotEmpty(supervisionRep)){ + Map map = BeanUtil.beanToMap(supervisionRep); + CompletableFuture completableFuture = CompletableFuture.supplyAsync( + ()->{ + //添加附件 + List attachmentFiles = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(supervisionRep.getReps())){ + for (BizQualityNonConformanceRep rep : supervisionRep.getReps()) { + attachmentFiles.add(rep.getFileName()); + } + } + if (CollectionUtils.isNotEmpty(supervisionRep.getCorrectiveRecords())){ + for (BizQualityCorrectiveRecord correctiveRecord : supervisionRep.getCorrectiveRecords()) { + attachmentFiles.add(correctiveRecord.getFileName()); + } + } + if (CollectionUtils.isNotEmpty(supervisionRep.getPreventRecords())){ + for (BizQualityPreventRecord preventRecord : supervisionRep.getPreventRecords()) { + attachmentFiles.add(preventRecord.getFileName()); + } + } + if (CollectionUtils.isNotEmpty(supervisionRep.getRecords())){ + for (BizQualitySupervisionRecord record : supervisionRep.getRecords()) { + attachmentFiles.add(record.getFileName()); + } + } + printFileRegister.registerPrintFile(QUALITY_SUPERVISION_REPORT, EXPORT_TEMPLATE, null, + RegisterCustomParameters.builder() + .pdf(false) + .customParam(map) + .response(null) + .customFileName(supervisionRep.getFileCode() + supervisionRep.getFileName()) + .compressParameter(CompressParameter.builder() + .zip(true) + .attachmentFiles(attachmentFiles) + .rootDirName(rootFileName) + .build()) + .customTemplateUrls(null) + .build()); + return null; + }, threadPool); + futures.add(completableFuture); + } + } + CompletableFuture[] futuresArr = futures.toArray(new CompletableFuture[0]); + //所有线程并发执行 + CompletableFuture.allOf(futuresArr).join(); + //等待所有生成的线程结束,则进行数据的打包下载 + ZipUtils.batchDownloadFiles(rootFileName, response,localFileDir); } /** diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityTechnicalAnalysisRepServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityTechnicalAnalysisRepServiceImpl.java index 57bffb7..94097ee 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityTechnicalAnalysisRepServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/quality/BizQualityTechnicalAnalysisRepServiceImpl.java @@ -96,7 +96,11 @@ return; } //创建线程组 - ThreadPoolExecutor threadPool = new ThreadPoolExecutor(5, list.size(), 100, + int corePoolSize = 1; + if (list.size() > 5) { + corePoolSize = 5; + } + ThreadPoolExecutor threadPool = new ThreadPoolExecutor(corePoolSize, list.size(), 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(10)); String rootFileName = "技术能力分析报告" + new SimpleDateFormat("yyyyMMddHHmm").format(new Date()); List> futures = new ArrayList<>(); @@ -124,7 +128,7 @@ //所有线程并发执行 CompletableFuture.allOf(futuresArr).join(); //等待所有生成的线程结束,则进行数据的打包下载 - ZipUtils.batchDownloadFiles(rootFileName, response,localFileDir); + ZipUtils.batchDownloadFiles(rootFileName, response, localFileDir); } @Override diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/quality/IBizQualitySupervisionRepService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/quality/IBizQualitySupervisionRepService.java index ab8bc56..50bd428 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/quality/IBizQualitySupervisionRepService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/quality/IBizQualitySupervisionRepService.java @@ -40,10 +40,11 @@ void exportFile(ExportDTO exportDTO, HttpServletResponse response); + /** * 文件打包导出 - * @param ids 主键 + * @param supervisionRepList 分页数据 * @param response 响应 */ - void export(IdsDTO ids, HttpServletResponse response); + void exportZip(List supervisionRepList, HttpServletResponse response); }