保单打印

master
szy 3 weeks ago
parent 6c1bbda6db
commit fba6d66b56
  1. BIN
      micro-modules/micro-print/libs/esspdf-client-1.5.0-SNAPSHOT.jar
  2. BIN
      micro-modules/micro-print/libs/jackson-all-2.0.1.jar
  3. BIN
      micro-modules/micro-print/libs/jackson-module-jaxb-annotations-2.0.6.jar
  4. 21
      micro-modules/micro-print/pom.xml
  5. 30
      micro-modules/micro-print/src/main/java/com/sinosoft/print/core/files/WordToPdfConverter.java
  6. 32
      micro-modules/micro-print/src/main/java/com/sinosoft/print/core/sign/strategy/SignByCA.java
  7. 7
      micro-modules/micro-print/src/main/java/com/sinosoft/print/domain/ContPrintRequestReturn.java
  8. 15
      micro-modules/micro-print/src/main/java/com/sinosoft/print/domain/bo/BiliCard.java
  9. 8
      micro-modules/micro-print/src/main/java/com/sinosoft/print/domain/bo/ContPrintCallbackReqBo.java
  10. 30
      micro-modules/micro-print/src/main/java/com/sinosoft/print/service/impl/ContPrintCallbackServiceImpl.java
  11. 1
      micro-modules/micro-print/src/main/java/com/sinosoft/print/service/impl/FileUploadAndDownService.java

@ -201,6 +201,27 @@
<groupId>com.fasterxml.jackson.dataformat</groupId> <groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId> <artifactId>jackson-dataformat-xml</artifactId>
</dependency> </dependency>
<dependency>
<groupId>com.esspdf</groupId>
<artifactId>esspdf-common</artifactId>
<version>1.5.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/libs/esspdf-client-1.5.0-SNAPSHOT.jar</systemPath>
</dependency>
<dependency>
<groupId>com.jackson</groupId>
<artifactId>jackson-common</artifactId>
<version>2.0.1</version>
<scope>system</scope>
<systemPath>${project.basedir}/libs/jackson-all-2.0.1.jar</systemPath>
</dependency>
<dependency>
<groupId>com.jaxb</groupId>
<artifactId>jaxb-common</artifactId>
<version>2.0.6</version>
<scope>system</scope>
<systemPath>${project.basedir}/libs/jackson-module-jaxb-annotations-2.0.6.jar</systemPath>
</dependency>
</dependencies> </dependencies>
<build> <build>

@ -32,6 +32,7 @@ import java.io.*;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.StandardCopyOption; import java.nio.file.StandardCopyOption;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -152,6 +153,35 @@ public void mergeDocuments(List<InputStream> inputStreams, OutputStream outputSt
// 调用方应负责在使用完毕后清理返回的临时文件 // 调用方应负责在使用完毕后清理返回的临时文件
} }
public static void main(String[] args) throws Exception {
// ================== 1. 准备 PDF 文件 ==================
File pdf1 = new File("C:\\Users\\szy\\Desktop\\FZ接口\\a.pdf");
File pdf2 = new File("C:\\Users\\szy\\Desktop\\FZ接口\\b.pdf");
List<File> pdfFiles = Arrays.asList(pdf1, pdf2);
// ================== 2. 输出文件 ==================
File outputFile = new File("C:\\Users\\szy\\Desktop\\FZ接口\\c.pdf");
try (OutputStream os = new FileOutputStream(outputFile)) {
new WordToPdfConverter().mergePdfDocumentsWithPageNumbers(
pdfFiles,
os,
1, // startPageNumber
300 // totalPages(可写预估)
);
}
// ================== 3. 简单校验 ==================
if (!outputFile.exists()) {
throw new RuntimeException("❌ 合并失败,文件不存在");
}
System.out.println("✅ PDF 合并成功");
System.out.println("📁 输出路径:" + outputFile.getAbsolutePath());
}
public void mergePdfDocumentsWithPageNumbers( public void mergePdfDocumentsWithPageNumbers(
List<File> pdfFiles, List<File> pdfFiles,
OutputStream finalOutput, OutputStream finalOutput,

@ -1,7 +1,7 @@
package com.sinosoft.print.core.sign.strategy; package com.sinosoft.print.core.sign.strategy;
//import cn.org.bjca.seal.esspdf.client.message.ChannelMessage; import cn.org.bjca.seal.esspdf.client.message.ChannelMessage;
//import cn.org.bjca.seal.esspdf.client.tools.ESSPDFClientTool; import cn.org.bjca.seal.esspdf.client.tools.ESSPDFClientTool;
import com.sinosoft.common.core.exception.ServiceException; import com.sinosoft.common.core.exception.ServiceException;
import com.sinosoft.print.core.constant.PrintTempConstants; import com.sinosoft.print.core.constant.PrintTempConstants;
import com.sinosoft.print.domain.vo.SignServiceConfigVo; import com.sinosoft.print.domain.vo.SignServiceConfigVo;
@ -18,22 +18,22 @@ public class SignByCA implements SignInterface {
@Override @Override
public byte[] sign(byte[] signFile, String signNumber,SignServiceConfigVo configVo,String fileName, Map<String, Object> signParams) { public byte[] sign(byte[] signFile, String signNumber,SignServiceConfigVo configVo,String fileName, Map<String, Object> signParams) {
// try { try {
// ESSPDFClientTool tool = new ESSPDFClientTool(configVo.getIp(),configVo.getPort().intValue()); ESSPDFClientTool tool = new ESSPDFClientTool(configVo.getIp(),configVo.getPort().intValue());
// tool.setRespTimeout(configVo.getReadTimeout().intValue()); tool.setRespTimeout(configVo.getReadTimeout().intValue());
// tool.setTimeout(configVo.getConnectTimeout().intValue()); tool.setTimeout(configVo.getConnectTimeout().intValue());
// ChannelMessage message = tool.pdfSign(signNumber,signFile); ChannelMessage message = tool.pdfSign(signNumber,signFile);
// if(PrintTempConstants.SIGN_SUCESS_CODE.equals(message.getStatusCode())) { if(PrintTempConstants.SIGN_SUCESS_CODE.equals(message.getStatusCode())) {
// return message.getBody(); return message.getBody();
// }else { }else {
// throw new ServiceException(message.getStatusInfo()); throw new ServiceException(message.getStatusInfo());
// } }
// } catch (Exception e) { } catch (Exception e) {
// throw new ServiceException("签章失败"+e.getMessage()); throw new ServiceException("签章失败"+e.getMessage());
// } }
//去除私有包 //去除私有包
return new byte[0]; // return new byte[0];
} }
@Override @Override

@ -1,7 +1,10 @@
package com.sinosoft.print.domain; package com.sinosoft.print.domain;
import com.sinosoft.print.domain.bo.BiliCard;
import lombok.Data; import lombok.Data;
import java.util.List;
/** /**
* 保单打印结果回传请求体详细信息 * 保单打印结果回传请求体详细信息
*/ */
@ -20,5 +23,7 @@ public class ContPrintRequestReturn {
//打印日期 //打印日期
String printDate; String printDate;
//打印时间 //打印时间
String printTime; String printSize;
//单证信息
List<BiliCard> biliCardList;
} }

@ -0,0 +1,15 @@
package com.sinosoft.print.domain.bo;
import lombok.Data;
/**
* Description:
* Author:szy
* Create:2026/06/04
*/
@Data
public class BiliCard {
private String bilicardMain;
private String bilicardnoMain;
}

@ -2,6 +2,8 @@ package com.sinosoft.print.domain.bo;
import lombok.Data; import lombok.Data;
import java.util.List;
@Data @Data
public class ContPrintCallbackReqBo { public class ContPrintCallbackReqBo {
//文件名 //文件名
@ -13,11 +15,15 @@ public class ContPrintCallbackReqBo {
//打印日期 //打印日期
private String printDate; private String printDate;
//打印时间 //打印时间
private String printTime; private String printSize;
//打印类型 //打印类型
private String contType; private String contType;
//流水号 //流水号
String serialNo; String serialNo;
//保单号 //保单号
String grpContNo; String grpContNo;
//单证信息
List<BiliCard> biliCardList;
} }

@ -4,9 +4,12 @@ import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.dtflys.forest.exceptions.ForestNetworkException; import com.dtflys.forest.exceptions.ForestNetworkException;
import com.dtflys.forest.exceptions.ForestRuntimeException; import com.dtflys.forest.exceptions.ForestRuntimeException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sinosoft.print.domain.ClientInfoReturn; import com.sinosoft.print.domain.ClientInfoReturn;
import com.sinosoft.print.domain.ContPrintRequestReturn; import com.sinosoft.print.domain.ContPrintRequestReturn;
import com.sinosoft.print.domain.InputData; import com.sinosoft.print.domain.InputData;
import com.sinosoft.print.domain.bo.BiliCard;
import com.sinosoft.print.domain.bo.ContPrintCallbackReqBo; import com.sinosoft.print.domain.bo.ContPrintCallbackReqBo;
import com.sinosoft.print.domain.bo.ContPrintCallbackReturnBo; import com.sinosoft.print.domain.bo.ContPrintCallbackReturnBo;
import com.sinosoft.print.domain.PrintConttrackLog; import com.sinosoft.print.domain.PrintConttrackLog;
@ -56,7 +59,7 @@ public class ContPrintCallbackServiceImpl implements IContPrintCallbackService {
for (Map.Entry<String, JsonNode> entry : callbackReqMap.entrySet()) { for (Map.Entry<String, JsonNode> entry : callbackReqMap.entrySet()) {
String fileName = entry.getKey(); String fileName = entry.getKey();
JsonNode jsonNode = entry.getValue(); JsonNode jsonNode = entry.getValue();
if (jsonNode == null || !jsonNode.has("PrintDate") || !jsonNode.has("PrintTime") || !jsonNode.has("PrintFlag") || !jsonNode.has("ContType")) { if (jsonNode == null) {
log.warn("文件:[{}] 数据或关键字段为空", fileName); log.warn("文件:[{}] 数据或关键字段为空", fileName);
resultList.add(new PrintResultNotifyInfoObj(ResultProcStatusEnum.EMPTY_FILE_NAME, fileName)); resultList.add(new PrintResultNotifyInfoObj(ResultProcStatusEnum.EMPTY_FILE_NAME, fileName));
continue; continue;
@ -74,11 +77,23 @@ public class ContPrintCallbackServiceImpl implements IContPrintCallbackService {
private ResultProcStatusEnum processSingleData(String fileName, JsonNode jsonNode) { private ResultProcStatusEnum processSingleData(String fileName, JsonNode jsonNode) {
ContPrintCallbackReqBo callbackReq = new ContPrintCallbackReqBo(); ContPrintCallbackReqBo callbackReq = new ContPrintCallbackReqBo();
callbackReq.setPringName(fileName); callbackReq.setPringName(fileName);
callbackReq.setPrintDate(jsonNode.get("PrintDate").asText()); callbackReq.setPrintDate(jsonNode.get("PRINT_DATE").asText());
callbackReq.setPrintTime(jsonNode.get("PrintTime").asText()); callbackReq.setPrintResult(jsonNode.get("PRINT_STATUS").asText());
callbackReq.setPrintResult(jsonNode.get("PrintFlag").asText()); callbackReq.setContType(jsonNode.get("DM").asText());
callbackReq.setContType(jsonNode.get("ContType").asText());
callbackReq.setErrorMsg(jsonNode.has("ErrorMsg") ? jsonNode.get("ErrorMsg").asText() : null); callbackReq.setErrorMsg(jsonNode.has("ErrorMsg") ? jsonNode.get("ErrorMsg").asText() : null);
callbackReq.setGrpContNo(jsonNode.get("POLICY_NO").asText());
callbackReq.setSerialNo(jsonNode.get("PRINT_ID").asText());
callbackReq.setPrintSize(jsonNode.get("PRINT_SIZE").asText());
JsonNode bilcardNode = jsonNode.get("BILCARD_LIST");
ObjectMapper objectMapper = new ObjectMapper();
List<BiliCard> biliCards = objectMapper.convertValue(
bilcardNode,
new TypeReference<List<BiliCard>>() {}
);
callbackReq.setBiliCardList(biliCards);
// 根据文件名查询数据库,获取业务流水号和保单号 // 根据文件名查询数据库,获取业务流水号和保单号
LambdaQueryWrapper<PrintConttrackLog> queryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<PrintConttrackLog> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(PrintConttrackLog::getXmlfileName, fileName); queryWrapper.eq(PrintConttrackLog::getXmlfileName, fileName);
@ -88,7 +103,7 @@ public class ContPrintCallbackServiceImpl implements IContPrintCallbackService {
return ResultProcStatusEnum.ERROR; return ResultProcStatusEnum.ERROR;
} }
callbackReq.setSerialNo(printConttrackLog.getBussinessNo()); callbackReq.setSerialNo(printConttrackLog.getBussinessNo());
callbackReq.setGrpContNo(printConttrackLog.getContNo()); // callbackReq.setGrpContNo(printConttrackLog.getContNo());
log.info("文件:[{}] 查询到业务流水号:[{}],保单号:[{}]", fileName, printConttrackLog.getBussinessNo(), printConttrackLog.getContNo()); log.info("文件:[{}] 查询到业务流水号:[{}],保单号:[{}]", fileName, printConttrackLog.getBussinessNo(), printConttrackLog.getContNo());
return processCallbackReq(callbackReq); return processCallbackReq(callbackReq);
@ -108,7 +123,8 @@ public class ContPrintCallbackServiceImpl implements IContPrintCallbackService {
contPrintRequestReturn.setPrintFlag(callbackReq.getPrintResult()); contPrintRequestReturn.setPrintFlag(callbackReq.getPrintResult());
contPrintRequestReturn.setErrorMsg(callbackReq.getErrorMsg()); contPrintRequestReturn.setErrorMsg(callbackReq.getErrorMsg());
contPrintRequestReturn.setPrintDate(callbackReq.getPrintDate()); contPrintRequestReturn.setPrintDate(callbackReq.getPrintDate());
contPrintRequestReturn.setPrintTime(callbackReq.getPrintTime()); contPrintRequestReturn.setPrintSize(callbackReq.getPrintSize());
contPrintRequestReturn.setBiliCardList(callbackReq.getBiliCardList());
//保单打印请求体 //保单打印请求体
InputData inputData = new InputData(); InputData inputData = new InputData();
inputData.setResponse(List.of(contPrintRequestReturn)); inputData.setResponse(List.of(contPrintRequestReturn));

@ -99,6 +99,7 @@ public class FileUploadAndDownService {
String printName = jsonObject.getString(PrintTempConstants.CONT_PRINT_NAME); String printName = jsonObject.getString(PrintTempConstants.CONT_PRINT_NAME);
String system = jsonObject.getString(PrintTempConstants.CONT_PRINT_FROM_SYSTEM); String system = jsonObject.getString(PrintTempConstants.CONT_PRINT_FROM_SYSTEM);
String XmlData =PrintTempConstants.XML_DECLARATION + JSONUtil.toXmlStr(JSONUtil.parse(Xml0bject)); String XmlData =PrintTempConstants.XML_DECLARATION + JSONUtil.toXmlStr(JSONUtil.parse(Xml0bject));
log.info("保单打印报文xml:" + XmlData);
if(StringUtils.isEmpty(XmlData)){ if(StringUtils.isEmpty(XmlData)){
return failedResponse("打印请求数据不能为空"); return failedResponse("打印请求数据不能为空");
//throw new RuntimeException("打印请求数据不能为空"); //throw new RuntimeException("打印请求数据不能为空");

Loading…
Cancel
Save