Переглянути джерело

管道报告管理按照任务单出具报告

xy 3 днів тому
батько
коміт
743973ba4e

+ 3 - 0
build-uat/update.sql

@@ -1467,3 +1467,6 @@ COMMENT ON COLUMN "PRESSURE2_PIPE_TASK_ORDER_ITEM_SUSPEND"."REASON" IS '中止
 COMMENT ON COLUMN "PRESSURE2_PIPE_TASK_ORDER_ITEM_SUSPEND"."APPROVAL_ID" IS '任务单变更审核人id';
 COMMENT ON COLUMN "PRESSURE2_PIPE_TASK_ORDER_ITEM_SUSPEND"."APPROVAL_TIME" IS '任务单变更审核时间';
 
+--20260521
+ALTER TABLE "PRESSURE_TASK_ORDER" ADD COLUMN "ISSUE_URL" VARCHAR(50);
+COMMENT ON COLUMN "PRESSURE_TASK_ORDER"."ISSUE_URL" IS '出具报告文件地址';

+ 3 - 0
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/dal/dataobject/pipetaskorder/PipeTaskOrderDO.java

@@ -327,4 +327,7 @@ public class PipeTaskOrderDO extends BaseDO {
      * 金额
      */
     private BigDecimal payAmount;
+
+    private String issueUrl;
+
 }

+ 190 - 142
tz-module-pressure2/tz-module-pressure2-biz/src/main/java/cn/start/tz/module/pressure2/service/pipetaskorderissuereport/PipeTaskOrderIssueReportServiceImpl.java

@@ -107,6 +107,7 @@ import com.google.common.collect.Lists;
 import jakarta.validation.Valid;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ss.extractor.ExcelExtractor;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import jakarta.annotation.Resource;
@@ -462,7 +463,7 @@ public class PipeTaskOrderIssueReportServiceImpl extends ServiceImpl<PipeTaskOrd
                         taskOrderItemDOList.forEach(taskOrderItemDO -> {
                             try {
 
-                                ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderItemDO);
+                                ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderDO);
                                 String reportUrl = reportUrlInfo.getReportUrl();
                                 String fileUrl = reportUrlInfo.getFileUrl();
 
@@ -626,79 +627,102 @@ public class PipeTaskOrderIssueReportServiceImpl extends ServiceImpl<PipeTaskOrd
             // 邮件发送
             if (taskOrderIssueReportDO.getEmailPush() != null && taskOrderIssueReportDO.getEmailPush()) {
                 // 生成url
-                finalTaskOrderItemDOList.forEach(taskOrderItemDO -> {
-                    try {
+                if (!finalTaskOrderItemDOList.isEmpty()){
 
-                        ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderItemDO);
-                        String reportUrl = reportUrlInfo.getReportUrl();
-                        String fileUrl = reportUrlInfo.getFileUrl();
+                    List<EquipPipeDO> equipPipeDOList = equipPipeMapper.selectList(new LambdaQueryWrapper<EquipPipeDO>().
+                            in(EquipPipeDO::getId, finalTaskOrderItemDOList.stream().map(PipeTaskOrderItemDO::getEquipId).toList()));
+                    if (equipPipeDOList !=  null){
+                        String projectName = equipPipeDOList.stream().map(EquipPipeDO::getProjectName).toList().toString();
+                        String projectNo = equipPipeDOList.stream().map(EquipPipeDO::getProjectNo).toList().toString();
 
-                        //设备信息
-                        EquipPipeDO equipPipeDO = equipPipeMapper.selectById(taskOrderItemDO.getEquipId());
+                        try {
 
-                        // 发送邮件
-                        MailSendSingleToUserReqDTO sendParam = new MailSendSingleToUserReqDTO();
-                        sendParam.setMail(taskOrderIssueReportDO.getEmail());
-                        sendParam.setTemplateCode("task-order-report-email");
-                        Map<String, Object> templateParams = new HashMap<>();
-//                        templateParams.put("reportUrl", reportUrl);
-                        templateParams.put("equipCode", equipPipeDO.getProjectNo());
-                        templateParams.put("equipName", equipPipeDO.getProjectName());
-                        sendParam.setUserId(userId);
-                        sendParam.setTemplateParams(templateParams);
-
-                        List<String> reportUrlList = new ArrayList<>(List.of(reportUrl));
-
-                        // 设置自定义附件名称
-                        String attachmentName =  String.format("%s-%s-%s",taskOrderItemDO.getEquipCode(),equipPipeDO.getProjectName() , "报告.pdf");
-                        List<String> attachmentNames = new ArrayList<>(List.of(attachmentName));
-
-                        String useLogoUrl = null;
-                        if(checkType != null && checkType != 200){
-                            String useRegisterNo = equipPipeDO.getCertificateNo();
-                            if(StringUtils.isNotBlank(useRegisterNo) && useRegisterNo.length() > 5){
-                                //TODO 标志
-                                ByteArrayOutputStream outputStream = getUseLogoOutputStream(taskOrderItemDO.getId(), 100);
-                                useLogoUrl = fileApi.createFile(outputStream.toByteArray());
-                                if (Objects.equals(env, "uat")) {
-                                    useLogoUrl = minioHostouter + useLogoUrl;
-                                } else {
-                                    useLogoUrl = minioHost + useLogoUrl;
-                                }
-                                reportUrlList.add(useLogoUrl);
-                                String useLogoFileName =  String.format("%s-%s-%s",taskOrderItemDO.getEquipCode(),equipPipeDO.getProjectName() , "标志.pdf");
-                                attachmentNames.add(useLogoFileName);
-                            }
-                        }
+                            ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderDO);
+                            String reportUrl = reportUrlInfo.getReportUrl();
+                            String fileUrl = reportUrlInfo.getFileUrl();
+                            log.info("报告url:{}", reportUrl);
+
+                            // 发送邮件
+                            MailSendSingleToUserReqDTO sendParam = new MailSendSingleToUserReqDTO();
+                            sendParam.setMail(taskOrderIssueReportDO.getEmail());
+                            sendParam.setTemplateCode("task-order-report-email");
+                            Map<String, Object> templateParams = new HashMap<>();
+                            templateParams.put("equipCode", projectNo);
+                            templateParams.put("equipName", projectName);
+                            sendParam.setUserId(userId);
+                            sendParam.setTemplateParams(templateParams);
 
-                        sendParam.setFilePath(reportUrlList);
-                        sendParam.setAttachmentNames(attachmentNames);
-                        mailSendApi.sendSingleMailToMember(sendParam);
+                            List<String> reportUrlList = new ArrayList<>(List.of(reportUrl));
 
-                        PipeTaskOrderItemDO updateOb = new PipeTaskOrderItemDO();
-                        updateOb.setId(taskOrderItemDO.getId());
-                        updateOb.setIssueUrl(fileUrl);
-                        if(taskOrderItemDO.getUseLogoTime() == null && StringUtils.isNotBlank(useLogoUrl)){
-                            updateOb.setUseLogoTime(LocalDateTime.now());
-                        }
-                        taskOrderItemMapper.updateById(updateOb);
+                            // 设置自定义附件名称
+                            String attachmentName = String.format("%s-%s",taskOrderDO.getOrderNo(), "报告.pdf");
+                            List<String> attachmentNames = new ArrayList<>(List.of(attachmentName));
 
-                        // 每次发送邮件后睡眠两秒
-                        try {
-                            Thread.sleep(2000);
-                        } catch (InterruptedException e) {
-                            Thread.currentThread().interrupt();
-                            log.error("邮件发送间隔睡眠被中断", e);
+                            sendParam.setFilePath(reportUrlList);
+                            sendParam.setAttachmentNames(attachmentNames);
+                            mailSendApi.sendSingleMailToMember(sendParam);
+
+                            //修改任务单的出具报告地址
+                            PipeTaskOrderDO updateTaskOrder = new PipeTaskOrderDO();
+                            updateTaskOrder.setId(taskOrderDO.getId());
+                            updateTaskOrder.setIssueUrl(fileUrl);
+                            taskOrderMapper.updateById(updateTaskOrder);
+
+                            finalTaskOrderItemDOList.forEach(taskOrderItemDO -> {
+
+                                try {
+
+                                    EquipPipeDO equipPipeDO = equipPipeMapper.selectById(taskOrderItemDO.getEquipId());
+                                    String useLogoUrl = null;
+                                    if (checkType != null && checkType != 200) {
+                                        String useRegisterNo = equipPipeDO.getCertificateNo();
+                                        if (StringUtils.isNotBlank(useRegisterNo) && useRegisterNo.length() > 5) {
+                                            //TODO 标志
+                                            ByteArrayOutputStream outputStream = getUseLogoOutputStream(taskOrderItemDO.getId(), 100);
+                                            useLogoUrl = fileApi.createFile(outputStream.toByteArray());
+                                            if (Objects.equals(env, "uat")) {
+                                                useLogoUrl = minioHostouter + useLogoUrl;
+                                            } else {
+                                                useLogoUrl = minioHost + useLogoUrl;
+                                            }
+                                            reportUrlList.add(useLogoUrl);
+                                            String useLogoFileName = String.format("%s-%s-%s", taskOrderItemDO.getEquipCode(), equipPipeDO.getProjectName(), "标志.pdf");
+                                            attachmentNames.add(useLogoFileName);
+                                        }
+                                    }
+
+                                    PipeTaskOrderItemDO updateOb = new PipeTaskOrderItemDO();
+                                    updateOb.setId(taskOrderItemDO.getId());
+                                    updateOb.setIssueUrl(fileUrl);
+                                    if (taskOrderItemDO.getUseLogoTime() == null && StringUtils.isNotBlank(useLogoUrl)) {
+                                        updateOb.setUseLogoTime(LocalDateTime.now());
+                                    }
+                                    taskOrderItemMapper.updateById(updateOb);
+
+                                }catch (Exception e){
+                                    log.error("生成标志失败", e);
+                                }
+
+                            });
+
+                            // 每次发送邮件后睡眠两秒
+                            try {
+                                Thread.sleep(2000);
+                            } catch (InterruptedException e) {
+                                Thread.currentThread().interrupt();
+                                log.error("邮件发送间隔睡眠被中断", e);
+                                throw new RuntimeException(e);
+                            }
+                            if (Objects.equals(env, "uat")) {
+//                                    this.issueReportPush(taskOrderItemDO.getId());
+                            }
+                        } catch (Exception e) {
+                            log.error("邮件发送失败", e);
                             throw new RuntimeException(e);
                         }
-                        if (Objects.equals(env, "uat")) {
-                            this.issueReportPush(taskOrderItemDO.getId());
-                        }
-                    } catch (Exception e) {
-                        log.error("邮件发送失败", e);
-                        throw new RuntimeException(e);
                     }
-                });
+
+                }
             }
 
             // 公众号推送
@@ -743,7 +767,7 @@ public class PipeTaskOrderIssueReportServiceImpl extends ServiceImpl<PipeTaskOrd
                 finalTaskOrderItemDOList.forEach(taskOrderItemDO -> {
                     try {
 
-                        ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderItemDO);
+                        ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderDO);
                         String reportUrl = reportUrlInfo.getReportUrl();
                         String fileUrl = reportUrlInfo.getFileUrl();
 
@@ -1269,80 +1293,103 @@ public class PipeTaskOrderIssueReportServiceImpl extends ServiceImpl<PipeTaskOrd
                 // 邮件发送
                 if (taskOrderIssueReportDO.getEmailPush() != null && taskOrderIssueReportDO.getEmailPush() && StringUtils.isNotEmpty(taskOrderIssueReportDO.getEmail())) {
                     // 生成url
-                    finalTaskOrderItemDOList.forEach(taskOrderItemDO -> {
-                        try {
-
-                            ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderItemDO);
-                            String reportUrl = reportUrlInfo.getReportUrl();
-                            String fileUrl = reportUrlInfo.getFileUrl();
-                            log.info("报告url:{}", reportUrl);
-
-                            //设备信息
-                            EquipPipeDO equipPipeDO = equipPipeMapper.selectById(taskOrderItemDO.getEquipId());
-
-                            // 发送邮件
-                            MailSendSingleToUserReqDTO sendParam = new MailSendSingleToUserReqDTO();
-                            sendParam.setMail(taskOrderIssueReportDO.getEmail());
-                            sendParam.setTemplateCode("task-order-report-email");
-                            Map<String, Object> templateParams = new HashMap<>();
-                            //                        templateParams.put("reportUrl", reportUrl);
-                            templateParams.put("equipCode", taskOrderItemDO.getEquipCode());
-                            templateParams.put("equipName", equipPipeDO.getProjectName());
-                            sendParam.setUserId(userId);
-                            sendParam.setTemplateParams(templateParams);
+                    if (!finalTaskOrderItemDOList.isEmpty()){
 
-                            List<String> reportUrlList = new ArrayList<>(List.of(reportUrl));
+                        List<EquipPipeDO> equipPipeDOList = equipPipeMapper.selectList(new LambdaQueryWrapper<EquipPipeDO>().
+                                in(EquipPipeDO::getId, finalTaskOrderItemDOList.stream().map(PipeTaskOrderItemDO::getEquipId).toList()));
+                        if (equipPipeDOList !=  null){
+                            String projectName = equipPipeDOList.stream().map(EquipPipeDO::getProjectName).toList().toString();
+                            String projectNo = equipPipeDOList.stream().map(EquipPipeDO::getProjectNo).toList().toString();
 
-                            // 设置自定义附件名称
-                            String attachmentName = String.format("%s-%s-%s", taskOrderItemDO.getEquipCode(), equipPipeDO.getProjectName(), "报告.pdf");
-                            List<String> attachmentNames = new ArrayList<>(List.of(attachmentName));
+                            try {
 
-                            String useLogoUrl = null;
-                            if (checkType != null && checkType != 200) {
-                                String useRegisterNo = equipPipeDO.getCertificateNo();
-                                if (StringUtils.isNotBlank(useRegisterNo) && useRegisterNo.length() > 5) {
-                                    //TODO 标志
-                                    ByteArrayOutputStream outputStream = getUseLogoOutputStream(taskOrderItemDO.getId(), 100);
-                                    useLogoUrl = fileApi.createFile(outputStream.toByteArray());
-                                    if (Objects.equals(env, "uat")) {
-                                        useLogoUrl = minioHostouter + useLogoUrl;
-                                    } else {
-                                        useLogoUrl = minioHost + useLogoUrl;
+                                ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderDO);
+                                String reportUrl = reportUrlInfo.getReportUrl();
+                                String fileUrl = reportUrlInfo.getFileUrl();
+                                log.info("报告url:{}", reportUrl);
+
+                                // 发送邮件
+                                MailSendSingleToUserReqDTO sendParam = new MailSendSingleToUserReqDTO();
+                                sendParam.setMail(taskOrderIssueReportDO.getEmail());
+                                sendParam.setTemplateCode("task-order-report-email");
+                                Map<String, Object> templateParams = new HashMap<>();
+                                templateParams.put("equipCode", projectNo);
+                                templateParams.put("equipName", projectName);
+                                sendParam.setUserId(userId);
+                                sendParam.setTemplateParams(templateParams);
+
+                                List<String> reportUrlList = new ArrayList<>(List.of(reportUrl));
+
+                                // 设置自定义附件名称
+                                String attachmentName = String.format("%s-%s",taskOrderDO.getOrderNo(), "报告.pdf");
+                                List<String> attachmentNames = new ArrayList<>(List.of(attachmentName));
+
+                                sendParam.setFilePath(reportUrlList);
+                                sendParam.setAttachmentNames(attachmentNames);
+                                mailSendApi.sendSingleMailToMember(sendParam);
+
+                                //修改任务单的出具报告地址
+                                PipeTaskOrderDO updateTaskOrder = new PipeTaskOrderDO();
+                                updateTaskOrder.setId(taskOrderDO.getId());
+                                updateTaskOrder.setIssueUrl(fileUrl);
+                                taskOrderMapper.updateById(updateTaskOrder);
+
+                                finalTaskOrderItemDOList.forEach(taskOrderItemDO -> {
+
+                                    try {
+
+                                        EquipPipeDO equipPipeDO = equipPipeMapper.selectById(taskOrderItemDO.getEquipId());
+                                        String useLogoUrl = null;
+                                        if (checkType != null && checkType != 200) {
+                                            String useRegisterNo = equipPipeDO.getCertificateNo();
+                                            if (StringUtils.isNotBlank(useRegisterNo) && useRegisterNo.length() > 5) {
+                                                //TODO 标志
+                                                ByteArrayOutputStream outputStream = getUseLogoOutputStream(taskOrderItemDO.getId(), 100);
+                                                useLogoUrl = fileApi.createFile(outputStream.toByteArray());
+                                                if (Objects.equals(env, "uat")) {
+                                                    useLogoUrl = minioHostouter + useLogoUrl;
+                                                } else {
+                                                    useLogoUrl = minioHost + useLogoUrl;
+                                                }
+                                                reportUrlList.add(useLogoUrl);
+                                                String useLogoFileName = String.format("%s-%s-%s", taskOrderItemDO.getEquipCode(), equipPipeDO.getProjectName(), "标志.pdf");
+                                                attachmentNames.add(useLogoFileName);
+                                            }
+                                        }
+
+                                        PipeTaskOrderItemDO updateOb = new PipeTaskOrderItemDO();
+                                        updateOb.setId(taskOrderItemDO.getId());
+                                        updateOb.setIssueUrl(fileUrl);
+                                        if (taskOrderItemDO.getUseLogoTime() == null && StringUtils.isNotBlank(useLogoUrl)) {
+                                            updateOb.setUseLogoTime(LocalDateTime.now());
+                                        }
+                                        taskOrderItemMapper.updateById(updateOb);
+
+                                    }catch (Exception e){
+                                        log.error("生成标志失败", e);
                                     }
-                                    reportUrlList.add(useLogoUrl);
-                                    String useLogoFileName = String.format("%s-%s-%s", taskOrderItemDO.getEquipCode(), equipPipeDO.getProjectName(), "标志.pdf");
-                                    attachmentNames.add(useLogoFileName);
-                                }
-                            }
 
-                            sendParam.setFilePath(reportUrlList);
-                            sendParam.setAttachmentNames(attachmentNames);
-                            mailSendApi.sendSingleMailToMember(sendParam);
+                                });
 
-                            PipeTaskOrderItemDO updateOb = new PipeTaskOrderItemDO();
-                            updateOb.setId(taskOrderItemDO.getId());
-                            updateOb.setIssueUrl(fileUrl);
-                            if (taskOrderItemDO.getUseLogoTime() == null && StringUtils.isNotBlank(useLogoUrl)) {
-                                updateOb.setUseLogoTime(LocalDateTime.now());
-                            }
-                            taskOrderItemMapper.updateById(updateOb);
-
-                            // 每次发送邮件后睡眠两秒
-                            try {
-                                Thread.sleep(2000);
-                            } catch (InterruptedException e) {
-                                Thread.currentThread().interrupt();
-                                log.error("邮件发送间隔睡眠被中断", e);
+                                // 每次发送邮件后睡眠两秒
+                                try {
+                                    Thread.sleep(2000);
+                                } catch (InterruptedException e) {
+                                    Thread.currentThread().interrupt();
+                                    log.error("邮件发送间隔睡眠被中断", e);
+                                    throw new RuntimeException(e);
+                                }
+                                if (Objects.equals(env, "uat")) {
+//                                    this.issueReportPush(taskOrderItemDO.getId());
+                                }
+                            } catch (Exception e) {
+                                log.error("邮件发送失败", e);
                                 throw new RuntimeException(e);
                             }
-                            if (Objects.equals(env, "uat")) {
-                                this.issueReportPush(taskOrderItemDO.getId());
-                            }
-                        } catch (Exception e) {
-                            log.error("邮件发送失败", e);
-                            throw new RuntimeException(e);
                         }
-                    });
+
+                    }
+
                 }
 
                 // 公众号推送
@@ -1388,7 +1435,7 @@ public class PipeTaskOrderIssueReportServiceImpl extends ServiceImpl<PipeTaskOrd
                         try {
 
                             // 生成报告URL
-                            ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderItemDO);
+                            ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderDO);
                             String reportUrl = reportUrlInfo.getReportUrl();
                             String fileUrl = reportUrlInfo.getFileUrl();
 
@@ -1847,16 +1894,17 @@ public class PipeTaskOrderIssueReportServiceImpl extends ServiceImpl<PipeTaskOrd
     public void createIssueUrl(String orderId) {
         try {
             PipeTaskOrderDO taskOrderDO = taskOrderMapper.selectById(orderId);
+
+            //生成报告pdf
+            ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderDO);
+            String reportUrl = reportUrlInfo.getReportUrl();
+            String fileUrl = reportUrlInfo.getFileUrl();
+
             List<PipeTaskOrderItemDO> taskOrderItemDOS = taskOrderItemMapper.selectList(PipeTaskOrderItemDO::getOrderId, orderId);
             if (CollUtil.isNotEmpty(taskOrderItemDOS)) {
                 for (PipeTaskOrderItemDO taskOrderItemDO : taskOrderItemDOS) {
                     PipeTaskOrderItemDO updateOb = new PipeTaskOrderItemDO();
 
-                    //生成报告pdf
-                    ReportUrlInfo reportUrlInfo = generateReportUrl(taskOrderItemDO);
-                    String reportUrl = reportUrlInfo.getReportUrl();
-                    String fileUrl = reportUrlInfo.getFileUrl();
-
                     if (taskOrderDO.getCheckType() != null && taskOrderDO.getCheckType() != 200) {
 
                         EquipPipeDO equipPipeDO = equipPipeMapper.selectById(taskOrderItemDO.getEquipId());
@@ -2497,17 +2545,17 @@ public class PipeTaskOrderIssueReportServiceImpl extends ServiceImpl<PipeTaskOrd
 
     /**
      * 生成报告URL
-     * @param taskOrderItemDO 任务单项目
+     * @param taskOrderDO 任务单项目
      * @return ReportUrlInfo 包含reportUrl(完整路径)和fileUrl(文件名称)
      */
-    private ReportUrlInfo generateReportUrl(PipeTaskOrderItemDO taskOrderItemDO) {
+    private ReportUrlInfo generateReportUrl(PipeTaskOrderDO taskOrderDO) {
         String reportUrl = "";
         String fileUrl = "";
 
-        if (StringUtils.isNotEmpty(taskOrderItemDO.getIssueUrl())) {
-            fileUrl = taskOrderItemDO.getIssueUrl();
+        if (StringUtils.isNotEmpty(taskOrderDO.getIssueUrl())) {
+            fileUrl = taskOrderDO.getIssueUrl();
         } else {
-            byte[] pdfByte = taskOrderService.getRecordOutputStreamMerge(taskOrderItemDO.getOrderId());
+            byte[] pdfByte = taskOrderService.getRecordOutputStreamMerge(taskOrderDO.getId());
             if (pdfByte != null){
                 fileUrl = fileApi.createFile(pdfByte);
             }