|
|
@@ -1,7 +1,6 @@
|
|
|
package cn.start.tz.module.pressure2.service.boilertaskorder;
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
-import cn.hutool.core.thread.ThreadUtil;
|
|
|
import cn.hutool.core.util.IdUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
@@ -23,7 +22,6 @@ import cn.start.tz.module.bpm.enums.boiler.BoilerBpmModeConstantsEnum;
|
|
|
import cn.start.tz.module.bpm.enums.boiler.BoilerBpmModelConstants;
|
|
|
import cn.start.tz.module.bpm.enums.task.BpmModeConstantsEnum;
|
|
|
import cn.start.tz.module.bpm.enums.task.BpmTaskStatusEnum;
|
|
|
-import cn.start.tz.module.grape.city.api.vo.GrapeCityReqDTO;
|
|
|
import cn.start.tz.module.infra.api.file.FileApi;
|
|
|
import cn.start.tz.module.member.api.templatesendlog.TemplateSendLogApi;
|
|
|
import cn.start.tz.module.member.api.templatesendlog.dto.TemplateSendLogDto;
|
|
|
@@ -31,33 +29,24 @@ import cn.start.tz.module.member.api.templatesendlog.dto.TemplateSendLogRespDto;
|
|
|
import cn.start.tz.module.member.api.user.MemberUserApi;
|
|
|
import cn.start.tz.module.member.api.user.dto.MemberUserRespDTO;
|
|
|
import cn.start.tz.module.pressure.api.taskorder.dto.NonTaxPayStatusDTO;
|
|
|
-import cn.start.tz.module.pressure.enums.EquipmentTypeEnum;
|
|
|
import cn.start.tz.module.pressure2.api.taskorder.dto.UpdatePayStatusDTO;
|
|
|
import cn.start.tz.module.pressure2.constant.TemplateIdConstants;
|
|
|
import cn.start.tz.module.pressure2.controller.admin.boilertaskorderitempart.vo.BoilerTaskOrderItemPartSaveReqVO;
|
|
|
+import cn.start.tz.module.pressure2.controller.admin.platformEquip.vo.BoilerTaskOrderItemDetailsVO;
|
|
|
import cn.start.tz.module.pressure2.controller.admin.equipboilerscheduling.vo.BoilerDeleteTask;
|
|
|
-import cn.start.tz.module.pressure2.controller.admin.pipetaskorder.vo.PipeOrderItemPageRespVO;
|
|
|
-import cn.start.tz.module.pressure2.controller.admin.pipetaskorder.vo.PipeRecheckUserPageReqVO;
|
|
|
-import cn.start.tz.module.pressure2.controller.admin.pipetaskorder.vo.PipeTaskOrderRespVO;
|
|
|
-import cn.start.tz.module.pressure2.controller.admin.pipetaskorder.vo.PipeTaskOrderSyncReportVO;
|
|
|
import cn.start.tz.module.pressure2.controller.appapi.boilertaskorder.vo.BoilerOrderItemBatchClaimVO;
|
|
|
import cn.start.tz.module.pressure2.dal.dataobject.businessmemberrelation.BusinessMemberRelationDO;
|
|
|
-import cn.start.tz.module.pressure2.dal.dataobject.indextodo.IndexTodoDO;
|
|
|
import cn.start.tz.module.pressure2.dal.dataobject.notificationformreport.NotificationformReportDO;
|
|
|
import cn.start.tz.module.pressure2.dal.dataobject.opinionnotificationfollowrecord.OpinionNotificationFollowRecordDO;
|
|
|
-import cn.start.tz.module.pressure2.dal.dataobject.orderreport.OrderReportDO;
|
|
|
import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorder.PipeTaskOrderDO;
|
|
|
import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorderitem.PipeTaskOrderItemDO;
|
|
|
import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorderitemreport.PipeTaskOrderItemReportDO;
|
|
|
-import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorderitemreportuser.PipeTaskOrderItemReportUserDO;
|
|
|
-import cn.start.tz.module.pressure2.dal.dataobject.pipetaskordersecuritycheck.PipeTaskOrderSecurityCheckDO;
|
|
|
import cn.start.tz.module.pressure2.dal.dataobject.pipetaskorderuser.PipeTaskOrderUserDO;
|
|
|
import cn.start.tz.module.pressure2.dal.dataobject.taskordernontaxrecord.TaskOrderNonTaxRecordDO;
|
|
|
import cn.start.tz.module.pressure2.dal.dataobject.taskordernontaxrecorditem.TaskOrderNonTaxRecordItemDO;
|
|
|
import cn.start.tz.module.pressure2.dal.mysql.boileracceptorderuser.BoilerAcceptOrderUserMapper;
|
|
|
import cn.start.tz.module.pressure2.dal.mysql.boilerconnectrecordreport.BoilerConnectRecordReportMapper;
|
|
|
import cn.start.tz.module.pressure2.dal.mysql.businessmemberrelation.BusinessMemberRelationMapper;
|
|
|
-import cn.start.tz.module.pressure2.dal.mysql.indextodo.IndexTodoMapper;
|
|
|
import cn.start.tz.module.pressure2.dal.mysql.notificationformreport.NotificationformReportMapper;
|
|
|
import cn.start.tz.module.pressure2.dal.mysql.pipetaskorder.PipeTaskOrderMapper;
|
|
|
import cn.start.tz.module.pressure2.dal.mysql.pipetaskorderitem.PipeTaskOrderItemMapper;
|
|
|
@@ -73,10 +62,8 @@ import cn.start.tz.module.pressure2.controller.admin.boilertaskorderitem.vo.Boil
|
|
|
import cn.start.tz.module.pressure2.controller.admin.boilertaskorderitemrecheck.vo.BoilerTaskOrderItemRecheckRespVO;
|
|
|
import cn.start.tz.module.pressure2.controller.admin.boilertaskorderitemreport.vo.BoilerTaskOrderItemReportRespVO;
|
|
|
import cn.start.tz.module.pressure2.controller.admin.bpmtaskinfo.vo.BpmTaskRespVO;
|
|
|
-import cn.start.tz.module.pressure2.controller.app.taskorder.vo.TaskOrderPaymentRespVo;
|
|
|
import cn.start.tz.module.pressure2.controller.admin.costfield.vo.CostFieldRespVO;
|
|
|
import cn.start.tz.module.pressure2.controller.admin.dynamictbins.vo.CreateInstantiateWithRuleVO;
|
|
|
-import cn.start.tz.module.pressure2.controller.admin.inspectionnature.vo.InspectionNatureTemplateDetailRespVO;
|
|
|
import cn.start.tz.module.pressure2.controller.admin.reporttemplate.vo.ReportPreviewVO;
|
|
|
import cn.start.tz.module.pressure2.dal.dataobject.acceptorder.AcceptOrderDO;
|
|
|
import cn.start.tz.module.pressure2.dal.dataobject.appointmentconfirmorder.AppointmentConfirmOrderDO;
|
|
|
@@ -138,6 +125,7 @@ import cn.start.tz.module.pressure2.dal.mysql.equipboilercheckhistory.EquipBoile
|
|
|
import cn.start.tz.module.pressure2.dal.mysql.equipboilerscheduling.EquipBoilerSchedulingRecordMapper;
|
|
|
import cn.start.tz.module.pressure2.dal.mysql.equipboilerschedulingitem.EquipBoilerSchedulingCheckMapper;
|
|
|
import cn.start.tz.module.pressure2.dal.mysql.reporttemplate.ReportTemplateMapper;
|
|
|
+import cn.start.tz.module.pressure2.framework.thread.CommonThread;
|
|
|
import cn.start.tz.module.pressure2.service.boilerconnectrecordreport.BoilerConnectRecordReportService;
|
|
|
import cn.start.tz.module.pressure2.service.boilertaskorderfileversion.BoilerTaskOrderFileVersionService;
|
|
|
import cn.start.tz.module.pressure2.service.appointmentconfirmrefuseyearitem.AppointmentConfirmRefuseYearItemService;
|
|
|
@@ -163,12 +151,9 @@ import cn.start.tz.module.pressure2.service.inspectionnature.InspectionNatureTem
|
|
|
import cn.start.tz.module.pressure2.service.opinionnotificationfollowrecord.OpinionNotificationFollowRecordService;
|
|
|
import cn.start.tz.module.pressure2.service.orderreport.OrderReportService;
|
|
|
import cn.start.tz.module.pressure2.service.pdf.PdfService;
|
|
|
-import cn.start.tz.module.pressure2.service.pipetaskorder.PipeTaskOrderService;
|
|
|
-import cn.start.tz.module.pressure2.service.pipetaskorder.PipeTaskOrderServiceImpl;
|
|
|
import cn.start.tz.module.pressure2.service.pipetaskorderissuereport.PipeTaskOrderIssueReportService;
|
|
|
import cn.start.tz.module.pressure2.service.pushtaskorder.PushTaskOrderService;
|
|
|
import cn.start.tz.module.pressure2.service.synchronization.SynchronizationService;
|
|
|
-import cn.start.tz.module.pressure2.service.synchronization.dto.ReportDto;
|
|
|
import cn.start.tz.module.pressure2.service.userwallthicknesstemplate.UserWallThicknessTemplateService;
|
|
|
import cn.start.tz.module.pressure2.util.*;
|
|
|
import cn.start.tz.module.system.api.calendar.CalendarApi;
|
|
|
@@ -179,17 +164,13 @@ import cn.start.tz.module.system.api.dept.dto.DeptRespDTO;
|
|
|
import cn.start.tz.module.system.api.dict.DictDataApi;
|
|
|
import cn.start.tz.module.system.api.dict.dto.DictDataRespDTO;
|
|
|
import cn.start.tz.module.system.api.orgcontact.OrgContactApi;
|
|
|
-import cn.start.tz.module.system.api.orgcontact.dto.OrgContactDTO;
|
|
|
import cn.start.tz.module.system.api.standard.StandardTemplateApi;
|
|
|
-import cn.start.tz.module.system.api.standard.dto.StandardTemplateRespDTO;
|
|
|
import cn.start.tz.module.system.api.template.TemplateInitDataApi;
|
|
|
import cn.start.tz.module.pressure2.util.vo.FieldMetadata;
|
|
|
import cn.start.tz.module.system.api.user.AdminUserApi;
|
|
|
import cn.start.tz.module.system.api.user.dto.AdminUserRespDTO;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
-import cn.start.tz.module.system.enums.TemplateInitDataEnums;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
-import com.alibaba.fastjson2.JSON;
|
|
|
import com.alibaba.nacos.client.naming.utils.CollectionUtils;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
@@ -198,25 +179,16 @@ import com.fasterxml.jackson.databind.JsonNode;
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
import com.github.yulichang.query.MPJLambdaQueryWrapper;
|
|
|
import com.google.common.collect.Lists;
|
|
|
-import com.grapecity.documents.excel.*;
|
|
|
-import com.grapecity.documents.excel.template.DataSource.JsonDataSource;
|
|
|
import jodd.util.StringUtil;
|
|
|
-import lombok.SneakyThrows;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.apache.pdfbox.multipdf.PDFMergerUtility;
|
|
|
-import org.apache.pdfbox.pdmodel.PDDocument;
|
|
|
-import org.apache.pdfbox.pdmodel.PDPage;
|
|
|
-import org.apache.pdfbox.pdmodel.PDPageContentStream;
|
|
|
-import org.apache.pdfbox.pdmodel.font.PDType0Font;
|
|
|
import org.redisson.api.RLock;
|
|
|
import org.redisson.api.RedissonClient;
|
|
|
import org.springframework.beans.BeanWrapper;
|
|
|
import org.springframework.beans.BeanWrapperImpl;
|
|
|
-import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.context.annotation.Lazy;
|
|
|
-import org.springframework.data.redis.core.StringRedisTemplate;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import jakarta.annotation.Resource;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
@@ -227,7 +199,6 @@ import java.beans.PropertyDescriptor;
|
|
|
import java.io.ByteArrayInputStream;
|
|
|
import java.io.ByteArrayOutputStream;
|
|
|
import java.io.IOException;
|
|
|
-import java.io.InputStream;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
@@ -313,6 +284,9 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
|
|
|
@Resource
|
|
|
private CostFieldService costFieldService;
|
|
|
|
|
|
+ @Resource
|
|
|
+ private CommonThread commonThread;
|
|
|
+
|
|
|
@Resource
|
|
|
private EquipBoilerService equipBoilerService;
|
|
|
|
|
|
@@ -1740,6 +1714,43 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
|
|
|
}
|
|
|
indexTodoService.deleteIndexToDO(typeName,null,reportDO.getId(),200);
|
|
|
|
|
|
+ commonThread.runWithOutResult(() -> {
|
|
|
+ try {
|
|
|
+ byte[] bytes = pdfService.pdfByRefId(reportDO.getTemplateId(), reportDO.getId());
|
|
|
+ //检验方案需要拼接附件
|
|
|
+ if (reportDO.getReportType() == 600){
|
|
|
+ if (StringUtils.isNotEmpty(reportDO.getManualUrl())){
|
|
|
+
|
|
|
+ String manualUrl = reportDO.getManualUrl();
|
|
|
+ ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
|
|
|
+
|
|
|
+ if (manualUrl.endsWith(".doc") || manualUrl.endsWith(".docx")) {
|
|
|
+ byte[] wordBytes = fileApi.getFileByPath(manualUrl).getData();
|
|
|
+ byteArrayOutputStream = WordToPdfUtils.doc2pdfOutStream(wordBytes);
|
|
|
+ } else {
|
|
|
+ byte[] bytes1 = fileApi.getFileByPath(manualUrl).getData();
|
|
|
+ byteArrayOutputStream.write(bytes1);
|
|
|
+ }
|
|
|
+
|
|
|
+ ByteArrayOutputStream mergeOutputStream = new ByteArrayOutputStream();
|
|
|
+ PDFMergerUtility mergerUtility = new PDFMergerUtility();
|
|
|
+ mergerUtility.addSource(new ByteArrayInputStream(bytes));
|
|
|
+ mergerUtility.addSource(new ByteArrayInputStream(byteArrayOutputStream.toByteArray()));
|
|
|
+ // pdf 文件流合并
|
|
|
+ mergerUtility.setDestinationStream(mergeOutputStream);
|
|
|
+ mergerUtility.mergeDocuments(null);
|
|
|
+
|
|
|
+ bytes = mergeOutputStream.toByteArray();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ String fileUrl = fileApi.createFile(bytes);
|
|
|
+ BoilerTaskOrderItemReportDO updateItemReportDO = new BoilerTaskOrderItemReportDO().setId(reportDO.getId()).setIssueUrl(fileUrl);
|
|
|
+ taskOrderItemReportMapper.updateById(updateItemReportDO);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("----生成PDF失败:{},{}----", reportDO.getId(), e.getMessage());
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
@@ -5854,6 +5865,23 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
|
|
|
mergedPdfBytes = null;
|
|
|
mergeOutputStream.close();
|
|
|
|
|
|
+ //如果报告办结且没有保存办结报告PDF则生成
|
|
|
+ if (taskOrderItemDO.getIssueUrl() == null || StringUtils.isEmpty(taskOrderItemDO.getIssueUrl())){
|
|
|
+ try {
|
|
|
+
|
|
|
+ if (TaskOrderStatusEnum.REPORT_FINISH.getStatus().equals(taskOrderItemDO.getTaskStatus())){
|
|
|
+ log.info("---生成报告办结PDF---");
|
|
|
+ String fileUrl = fileApi.createFile(pdfWithPageNumbers);
|
|
|
+ BoilerTaskOrderItemDO updateTaskOrderItemDO = new BoilerTaskOrderItemDO()
|
|
|
+ .setId(taskOrderItemDO.getId()).setIssueUrl(fileUrl);
|
|
|
+ boilerTaskOrderItemMapper.updateById(updateTaskOrderItemDO);
|
|
|
+ }
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("---生成报告办结PDF失败---", e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
return pdfWithPageNumbers;
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
@@ -6847,4 +6875,85 @@ public class BoilerTaskOrderServiceImpl extends ServiceImpl<BoilerTaskOrderMappe
|
|
|
});
|
|
|
return list;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 二维码查看设备报告信息
|
|
|
+ *
|
|
|
+ * @param orderItemId 任务单设备id
|
|
|
+ * @return 结果
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public BoilerTaskOrderItemDetailsVO getTaskOrderItemById(String orderItemId) {
|
|
|
+
|
|
|
+ BoilerTaskOrderItemDetailsVO taskOrderItemDetailsVO = new BoilerTaskOrderItemDetailsVO();
|
|
|
+ BoilerTaskOrderItemDO taskOrderItemDO = boilerTaskOrderItemMapper.selectById(orderItemId);
|
|
|
+ if (ObjectUtil.isNull(taskOrderItemDO)) {
|
|
|
+ throw exception(new ErrorCode(1001, "任务单设备不存在!"));
|
|
|
+ }
|
|
|
+
|
|
|
+ EquipBoilerDO equipBoilerDO = equipBoilerMapper.selectById(taskOrderItemDO.getEquipId());
|
|
|
+ if (ObjectUtil.isNull(equipBoilerDO)) {
|
|
|
+ throw exception(new ErrorCode(1001, "锅炉设备不存在!"));
|
|
|
+ }
|
|
|
+
|
|
|
+ BoilerTaskOrderDO taskOrderDO = boilerTaskOrderMapper.selectById(taskOrderItemDO.getOrderId());
|
|
|
+ if (ObjectUtil.isNull(taskOrderDO)) {
|
|
|
+ throw exception(new ErrorCode(1001, "承压任务单不存在!"));
|
|
|
+ }
|
|
|
+
|
|
|
+ List<BoilerTaskOrderItemReportDO> taskOrderItemReports = taskOrderItemReportMapper.selectList(new LambdaQueryWrapperX<BoilerTaskOrderItemReportDO>()
|
|
|
+ .eq(BoilerTaskOrderItemReportDO::getOrderItemId, taskOrderItemDO.getId())
|
|
|
+ .eq(BoilerTaskOrderItemReportDO::getReportType, 100).eq(BoilerTaskOrderItemReportDO::getTaskStatus, 800));
|
|
|
+ if (CollUtil.isEmpty(taskOrderItemReports)) {
|
|
|
+ throw exception(new ErrorCode(1001, "主报告数据丢失!"));
|
|
|
+ }
|
|
|
+
|
|
|
+ taskOrderItemDetailsVO.setId(taskOrderItemDO.getId());
|
|
|
+
|
|
|
+ DictDataRespDTO boilerTypeDTO = dictDataApi.getDictData("system_equip_boiler_type",equipBoilerDO.getType().toString()).getData();
|
|
|
+ if (boilerTypeDTO != null){
|
|
|
+ taskOrderItemDetailsVO.setType(equipBoilerDO.getType());
|
|
|
+ taskOrderItemDetailsVO.setTypeName(boilerTypeDTO.getLabel());
|
|
|
+ }
|
|
|
+ taskOrderItemDetailsVO.setUseRegisterNo(equipBoilerDO.getUseRegisterNo());
|
|
|
+ taskOrderItemDetailsVO.setProductNo(equipBoilerDO.getProductCode());
|
|
|
+ taskOrderItemDetailsVO.setEquipCode(equipBoilerDO.getEquipCode());
|
|
|
+ taskOrderItemDetailsVO.setEquipName(equipBoilerDO.getEquipName());
|
|
|
+ if (equipBoilerDO.getNextInCheckDate() != null){
|
|
|
+ taskOrderItemDetailsVO.setNextInCheckDate(LocalDate.from(equipBoilerDO.getNextInCheckDate()));
|
|
|
+ }
|
|
|
+ if (equipBoilerDO.getNextOutCheckDate() != null){
|
|
|
+ taskOrderItemDetailsVO.setNextOutCheckDate(LocalDate.from(equipBoilerDO.getNextOutCheckDate()));
|
|
|
+ }
|
|
|
+ taskOrderItemDetailsVO.setUseUnitName(taskOrderDO.getUseUnitName());
|
|
|
+ taskOrderItemDetailsVO.setCheckDate(taskOrderDO.getCheckDate());
|
|
|
+ taskOrderItemDetailsVO.setCheckType(taskOrderDO.getCheckType());
|
|
|
+ String checkTypeName = switch (taskOrderDO.getCheckType()) {
|
|
|
+ case 100 -> "内部检验";
|
|
|
+ case 200 -> "外部检验";
|
|
|
+ case 300 -> "耐压检验";
|
|
|
+ default -> "";
|
|
|
+ };
|
|
|
+ taskOrderItemDetailsVO.setCheckTypeName(checkTypeName);
|
|
|
+ //主报告检验结论
|
|
|
+ BoilerTaskOrderItemReportDO mainReport = taskOrderItemReportMapper.selectOne(new LambdaQueryWrapperX<BoilerTaskOrderItemReportDO>()
|
|
|
+ .eq(BoilerTaskOrderItemReportDO::getReportType, 100)
|
|
|
+ .eq(BoilerTaskOrderItemReportDO::getOrderId, taskOrderDO.getId())
|
|
|
+ .eq(BoilerTaskOrderItemReportDO::getTaskStatus, 800), false);
|
|
|
+ if (mainReport != null){
|
|
|
+ taskOrderItemDetailsVO.setMainConclusion(mainReport.getReportConclusion());
|
|
|
+ taskOrderItemDetailsVO.setReportNo(mainReport.getReportNo());
|
|
|
+ }
|
|
|
+ //社会统一信用代码socialCreditCode
|
|
|
+ if (equipBoilerDO.getUnitCode() != null){
|
|
|
+ ClientUnitDTO clientUnit = clientUnitApi.getClientUnitByCode(equipBoilerDO.getUnitCode()).getData();
|
|
|
+ if (clientUnit != null){
|
|
|
+ taskOrderItemDetailsVO.setSocialCreditCode(clientUnit.getSocialCreditCode());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return taskOrderItemDetailsVO;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
}
|