diff --git a/dxhy-common/pom.xml b/dxhy-common/pom.xml
index 8dc0d9b9..fdd134f4 100644
--- a/dxhy-common/pom.xml
+++ b/dxhy-common/pom.xml
@@ -169,6 +169,10 @@
redis.clients
jedis
+
+ org.apache.httpcomponents
+ httpmime
+
diff --git a/dxhy-common/src/main/java/com/dxhy/common/util/FileUtil.java b/dxhy-common/src/main/java/com/dxhy/common/util/FileUtil.java
index 40e14f8f..aad66723 100644
--- a/dxhy-common/src/main/java/com/dxhy/common/util/FileUtil.java
+++ b/dxhy-common/src/main/java/com/dxhy/common/util/FileUtil.java
@@ -1,8 +1,16 @@
package com.dxhy.common.util;
import java.io.*;
+import java.nio.charset.Charset;
import cn.hutool.core.codec.Base64;
+import org.apache.commons.io.IOUtils;
+import org.apache.http.HttpEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.mime.MultipartEntityBuilder;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
/**
* @author jiaohongyang
@@ -163,4 +171,21 @@ public class FileUtil {
return base64;
}
+ //新增文件上传接口
+ public static String uploadFile(String url, String fileStream) {
+ HttpPost httpPost = new HttpPost(url);
+ MultipartEntityBuilder builder = MultipartEntityBuilder.create();
+ builder.addBinaryBody("file",fileStream.getBytes(Charset.forName("UTF-8")));
+ HttpEntity multipart = builder.build();
+ httpPost.setEntity(multipart);
+ String result = "";
+ try {
+ CloseableHttpResponse response = HttpClients.createDefault().execute(httpPost);
+ InputStream content = response.getEntity().getContent();
+ result = IOUtils.toString(content, "utf-8");
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ return result;
+ }
}
diff --git a/dxhy-core/src/main/java/com/dxhy/core/service/openservice/impl/OpenServicePlatformServiceImpl.java b/dxhy-core/src/main/java/com/dxhy/core/service/openservice/impl/OpenServicePlatformServiceImpl.java
index 40051567..e64e1122 100644
--- a/dxhy-core/src/main/java/com/dxhy/core/service/openservice/impl/OpenServicePlatformServiceImpl.java
+++ b/dxhy-core/src/main/java/com/dxhy/core/service/openservice/impl/OpenServicePlatformServiceImpl.java
@@ -1,12 +1,16 @@
package com.dxhy.core.service.openservice.impl;
-import java.util.Date;
-import java.util.List;
-import java.util.Optional;
-import java.util.UUID;
+import java.io.*;
+import java.util.*;
+import java.util.stream.Collectors;
import javax.annotation.Resource;
+import cn.hutool.core.codec.Base64Decoder;
+import com.dxhy.common.util.FileUtil;
+import com.dxhy.core.service.openservice.model.ocr.*;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@@ -57,6 +61,8 @@ public class OpenServicePlatformServiceImpl implements IOpenServicePlatformServi
private String ocrTaxno;
@Value("${openService.ocrUrl:}")
private String ocrUrl;
+ @Value("${sn.ocrUrl:}")
+ private String snOcrUrl;
@Resource
private MakeAppSecService makeAppSecService;
@@ -154,38 +160,276 @@ public class OpenServicePlatformServiceImpl implements IOpenServicePlatformServi
@Override
public List ocrInvoice(String picture, String userName, String password, String taxno) {
+ return OcrToSn(picture);
+// String sendDate = DateUtil.format(new Date(), DatePattern.PURE_DATETIME_PATTERN);
+// String signStr = "username=%s&sendDate=%s&version=%s";
+// String version = "1.0";
+// if (StringUtils.isBlank(userName) || StringUtils.isBlank(password) || StringUtils.isBlank(taxno)) {
+// userName = ocrUserName;
+// password = ocrPassword;
+// taxno = ocrTaxno;
+// }
+// signStr = String.format(signStr, userName, sendDate, version);
+// JSONObject dataJson = new JSONObject();
+// dataJson.put("taxno", taxno);
+// dataJson.put("picture", picture);
+// JSONObject json = new JSONObject();
+// json.put("username", userName);
+// json.put("password", password);
+// json.put("sendDate", sendDate);
+// json.put("signature", makeAppSecService.getSign(signStr, password));
+// json.put("version", version);
+// log.info("请求报文,去除picture:{} , picture是否有值:{}", json.toJSONString(), StringUtils.isNotBlank(picture));
+// json.put("data", Base64.encode(dataJson.toString()));
+//
+// String post = HttpUtil.post(ocrUrl, json.toString(), 60000);
+// log.info("ocr识别结果:{}", post);
+// JSONObject jsonObject = JSONObject.parseObject(post, JSONObject.class);
+// String returnCode = jsonObject.getString("returnCode");
+//
+// if (!"0000".equals(returnCode)) {
+// return null;
+// }
+//
+// String decodeStr = Base64.decodeStr(jsonObject.getString("data"));
+// return JSONObject.parseArray(decodeStr, OpenServiceOcr.class);
+ }
- String sendDate = DateUtil.format(new Date(), DatePattern.PURE_DATETIME_PATTERN);
- String signStr = "username=%s&sendDate=%s&version=%s";
- String version = "1.0";
- if (StringUtils.isBlank(userName) || StringUtils.isBlank(password) || StringUtils.isBlank(taxno)) {
- userName = ocrUserName;
- password = ocrPassword;
- taxno = ocrTaxno;
- }
- signStr = String.format(signStr, userName, sendDate, version);
- JSONObject dataJson = new JSONObject();
- dataJson.put("taxno", taxno);
- dataJson.put("picture", picture);
- JSONObject json = new JSONObject();
- json.put("username", userName);
- json.put("password", password);
- json.put("sendDate", sendDate);
- json.put("signature", makeAppSecService.getSign(signStr, password));
- json.put("version", version);
- log.info("请求报文,去除picture:{} , picture是否有值:{}", json.toJSONString(), StringUtils.isNotBlank(picture));
- json.put("data", Base64.encode(dataJson.toString()));
-
- String post = HttpUtil.post(ocrUrl, json.toString(), 60000);
- log.info("ocr识别结果:{}", post);
- JSONObject jsonObject = JSONObject.parseObject(post, JSONObject.class);
- String returnCode = jsonObject.getString("returnCode");
-
- if (!"0000".equals(returnCode)) {
- return null;
+ /**
+ * Ocr识别使用山能
+ * @param picture 文件流
+ * @return
+ */
+ public List OcrToSn(String picture){
+ //判断是否为图片流文件, 兼容公司平台进行base64解密
+ String str = Base64Decoder.decodeStr(picture);
+ String requestUrl = snOcrUrl;
+ String result = FileUtil.uploadFile(requestUrl, str);
+ if(StringUtils.isBlank(result)){
+ log.info("调用山能ocr识别失败");
+ }else {
+ OcrResponseVo ocrResponseVo = JSONObject.parseObject(result, OcrResponseVo.class);
+ if(ocrResponseVo != null && ocrResponseVo.getCode() == 200){
+ List ocrDataListEntities = ocrResponseVo.getResult().getObjectList();
+ return dxOcrConvertSnOcr(ocrDataListEntities);
+ }
}
+ return null;
+ }
+
+ //实现实体类转换
+ public List dxOcrConvertSnOcr(List ocrDataListEntities){
+ List openServices = Lists.newArrayList();
+ for (OcrDataListEntity ocrDataListEntity : ocrDataListEntities) {
+ OpenServiceOcr serviceOcr = new OpenServiceOcr();
+ List> productList = ocrDataListEntity.getProductList();
+
+ List itemList = ocrDataListEntity.getItemList();
+
+ Map itemData = itemList.stream().collect(Collectors.toMap(OcrItemListEntity::getKey, OcrItemListEntity::getValue));
+ OpenServiceOcr openServiceOcr = new OpenServiceOcr();
+
+ String type = ocrDataListEntity.getType();
+ //type 为 vat_special_invoice(增值税专用发票)、vat_electronic_invoice(增
+ //值税电子普通发票)、vat_common_invoice(增值税普通发票)、
+ //vat_electronic_toll_invoice(增值税电子普通发票(通行费))
+ //type 为 motor_vehicle_sale_invoice(机动车销售统一发票)
+ //type 为 used_car_purchase_invoice(二手车销售统一发票)
+ //type 为 vat_roll_invoice(增值税普通发票(卷票))
+ //type 为 vehicle_toll(过路过桥费发票、汽车通行费)
+ //type 为 quota_invoice(通用定额发票)
+ //type 为 taxi_ticket(出租车发票)
+ //type 为 air_transport(行程单)
+ //type 为 train_ticket(火车票)
+ //type 为 general_machine_invoice(通用机打发票)、 highway_passenger_invoice(公路客运发票)、shipping_invoice(船运客票)、passenger_transport_invoice(旅客运输普票)
+ //type 为 parking_invoice(停车费发票)
+
+ openServiceOcr.setFPLXDM(itemData.get(OcrDataTypeEnum.VAT_INVOICE_TYPE.getKey()));
+// openServiceOcr.setXZJD(itemData.get(OcrDataTypeEnum.VAT_INVOICE_TYPE.getKey()));
+
+ OpenServiceOcr.InvoiceOcrData invoiceOcrData = new OpenServiceOcr.InvoiceOcrData();
+ invoiceOcrData.setSFCY("0"); //是否查验
+ //判断发票类型
+ if("vat_special_invoice".equals(type) || "vat_electronic_invoice".equals(type) || "vat_common_invoice".equals(type) || "vat_electronic_toll_invoice".equals(type)){
+ invoiceOcrData.setJYM(itemData.get(OcrDataTypeEnum.VAT_INVOICE_CORRECT_CODE.getKey()));
+ invoiceOcrData.setFPDM(itemData.get(OcrDataTypeEnum.VAT_INVOICE_DAIMA.getKey()));
+ invoiceOcrData.setFPHM(itemData.get(OcrDataTypeEnum.VAT_INVOICE_HAOMA.getKey()));
+
+ invoiceOcrData.setKPRQ(itemData.get(OcrDataTypeEnum.VAT_INVOICE_ISSUE_DATE.getKey()));
+ invoiceOcrData.setGMFSBH(itemData.get(OcrDataTypeEnum.VAT_INVOICE_RATE_PAYER_ID.getKey()));
+
- String decodeStr = Base64.decodeStr(jsonObject.getString("data"));
- return JSONObject.parseArray(decodeStr, OpenServiceOcr.class);
+ invoiceOcrData.setJDHM(itemData.get(OcrDataTypeEnum.VAT_INVOICE_JIDA_HAOMA.getKey()));
+ invoiceOcrData.setXHFMC(itemData.get(OcrDataTypeEnum.VAT_INVOICE_SELLER_NAME.getKey()));
+ invoiceOcrData.setXHFSBH(itemData.get(OcrDataTypeEnum.VAT_INVOICE_SELLER_ID.getKey()));
+ invoiceOcrData.setXHFDZDH(itemData.get(OcrDataTypeEnum.VAT_INVOICE_SELLER_ADDR_TELL.getKey()));
+ invoiceOcrData.setXHFYHZH(itemData.get(OcrDataTypeEnum.VAT_INVOICE_SELLER_BANK_ACCOUNT.getKey()));
+ invoiceOcrData.setGMFMC(itemData.get(OcrDataTypeEnum.VAT_INVOICE_PAYER_NAME.getKey()));
+ invoiceOcrData.setGMFDZDH(itemData.get(OcrDataTypeEnum.VAT_INVOICE_PAYER_ADDR_TELL.getKey()));
+ invoiceOcrData.setGMFYHZH(itemData.get(OcrDataTypeEnum.VAT_INVOICE_PAYER_BANK_ACCOUNT.getKey()));
+
+ invoiceOcrData.setHJJE(itemData.get(OcrDataTypeEnum.VAT_INVOICE_PRICE_LIST.getKey()));
+
+
+ //是否代开 vat_invoice_zhuan_yong_flag TODO
+ invoiceOcrData.setSFDK(itemData.get(OcrDataTypeEnum.VAT_INVOICE_DAI_KAI_FLAG.getKey()));
+ invoiceOcrData.setHJSE(itemData.get(OcrDataTypeEnum.VAT_INVOICE_TAX_TOTAL.getKey()));
+
+ invoiceOcrData.setJSHJ(itemData.get(OcrDataTypeEnum.VAT_INVOICE_TOTAL_COVER_TAX_DIGITS.getKey()));
+ invoiceOcrData.setFPLC(itemData.get(OcrDataTypeEnum.VAT_INVOICE_PAGE_NUMBER.getKey()));
+ openServiceOcr.setFPLXDM(itemData.get(OcrDataTypeEnum.VAT_INVOICE_TYPE.getKey()));
+ invoiceOcrData.setBZ(itemData.get(OcrDataTypeEnum.VAT_INVOICE_TOTAL_NOTE.getKey()));
+ invoiceOcrData.setFWM(itemData.get(OcrDataTypeEnum.VAT_INVOICE_CIPHER_FIELD.getKey()));
+ invoiceOcrData.setSKR(itemData.get(OcrDataTypeEnum.VAT_INVOICE_PAYEE.getKey()));
+ invoiceOcrData.setFHR(itemData.get(OcrDataTypeEnum.VAT_INVOICE_REVIEW.getKey()));
+ invoiceOcrData.setKPR(itemData.get(OcrDataTypeEnum.VAT_INVOICE_DRAWER.getKey()));
+ invoiceOcrData.setSFYGSYZ("False".equals(itemData.get(OcrDataTypeEnum.EXIST_STAMPLE.getKey()))?"0":"1");
+
+ List invoiceOcrDetailList = Lists.newArrayList();
+ for (List productListEntities : productList) {
+ OpenServiceOcr.InvoiceOcrDetail invoiceOcrDetail = new OpenServiceOcr.InvoiceOcrDetail();
+// invoiceOcrDetail.setMXXH(itemData.get(OcrDataTypeEnum.VAT_INVOICE_TYPE.getKey()));
+ invoiceOcrDetail.setHWMC(itemData.get(OcrDataTypeEnum.VAT_INVOICE_GOODS.getKey()));
+ invoiceOcrDetail.setGGXH(itemData.get(OcrDataTypeEnum.VAT_INVOICE_PLATE_SPECIFIC.getKey()));
+ invoiceOcrDetail.setDW(itemData.get(OcrDataTypeEnum.VAT_INVOICE_ELECTRANS_UNIT.getKey()));
+ invoiceOcrDetail.setSPSL(itemData.get(OcrDataTypeEnum.VAT_INVOICE_ELECTRANS_QUANTITY.getKey()));
+ invoiceOcrDetail.setDJ(itemData.get(OcrDataTypeEnum.VAT_INVOICE_ELECTRANS_UNIT_PRICE.getKey()));
+ invoiceOcrDetail.setJE(itemData.get(OcrDataTypeEnum.VAT_INVOICE_PRICE.getKey()));
+ invoiceOcrDetail.setSL(itemData.get(OcrDataTypeEnum.VAT_INVOICE_TAX_RATE.getKey()));
+ invoiceOcrDetail.setSE(itemData.get(OcrDataTypeEnum.VAT_INVOICE_TAX.getKey()));
+ invoiceOcrDetailList.add(invoiceOcrDetail);
+ invoiceOcrData.setFPMX(invoiceOcrDetailList);
+ }
+ } else if ("vat_roll_invoice".equals(type)) {
+ invoiceOcrData.setKPRQ(itemData.get(OcrDataTypeEnum.DATE_OF_INVOICE.getKey()));
+ invoiceOcrData.setFPBT(itemData.get(OcrDataTypeEnum.INVOICE_HEAD.getKey()));
+ invoiceOcrData.setJYM(itemData.get(OcrDataTypeEnum.CHECK_NUMBER.getKey()));
+ invoiceOcrData.setFPDM(itemData.get(OcrDataTypeEnum.INVOICE_NUMBER.getKey()));
+ invoiceOcrData.setFPHM(itemData.get(OcrDataTypeEnum.INVOICE_NUMBER.getKey()));
+ invoiceOcrData.setJQBM(itemData.get(OcrDataTypeEnum.MACHINE_CODE.getKey()));
+ invoiceOcrData.setGMFSBH(itemData.get(OcrDataTypeEnum.BUY_TAX_NUMBER.getKey()));
+ invoiceOcrData.setJSHJ(itemData.get(OcrDataTypeEnum.TOTAL_MONEY.getKey()));
+ invoiceOcrData.setXHFMC(itemData.get(OcrDataTypeEnum.SOLD_NAME.getKey()));
+ invoiceOcrData.setXHFSBH(itemData.get(OcrDataTypeEnum.SOLD_TAX_NUMBER.getKey()));
+ invoiceOcrData.setGMFMC(itemData.get(OcrDataTypeEnum.BUY_NAME.getKey()));
+ invoiceOcrData.setSKR(itemData.get(OcrDataTypeEnum.CASHIER_NAME.getKey()));
+ //是否代开 vat_invoice_zhuan_yong_flag TODO
+ invoiceOcrData.setSFYGSYZ("False".equals(itemData.get(OcrDataTypeEnum.EXIST_STAMPLE.getKey()))?"0":"1");
+
+ List invoiceOcrDetailList = Lists.newArrayList();
+ for (List productListEntities : productList) {
+ OpenServiceOcr.InvoiceOcrDetail invoiceOcrDetail = new OpenServiceOcr.InvoiceOcrDetail();
+// invoiceOcrDetail.setMXXH(itemData.get(OcrDataTypeEnum.VAT_INVOICE_TYPE.getKey()));
+ invoiceOcrDetail.setHWMC(itemData.get(OcrDataTypeEnum.VAT_INVOICE_GOODS.getKey()));
+ invoiceOcrDetail.setGGXH(itemData.get(OcrDataTypeEnum.VAT_INVOICE_PLATE_SPECIFIC.getKey()));
+ invoiceOcrDetail.setDW(itemData.get(OcrDataTypeEnum.VAT_INVOICE_ELECTRANS_UNIT.getKey()));
+ invoiceOcrDetail.setSPSL(itemData.get(OcrDataTypeEnum.VAT_INVOICE_ELECTRANS_QUANTITY.getKey()));
+ invoiceOcrDetail.setDJ(itemData.get(OcrDataTypeEnum.VAT_INVOICE_ELECTRANS_UNIT_PRICE.getKey()));
+ invoiceOcrDetail.setJE(itemData.get(OcrDataTypeEnum.VAT_INVOICE_PRICE.getKey()));
+ invoiceOcrDetail.setSL(itemData.get(OcrDataTypeEnum.VAT_INVOICE_TAX_RATE.getKey()));
+ invoiceOcrDetail.setSE(itemData.get(OcrDataTypeEnum.VAT_INVOICE_TAX.getKey()));
+ invoiceOcrDetailList.add(invoiceOcrDetail);
+ invoiceOcrData.setFPMX(invoiceOcrDetailList);
+ }
+ } else if ("motor_vehicle_sale_invoice".equals(type)) {
+ // -------------机动车销售统一发票特殊字段--------------
+ invoiceOcrData.setGMFMC(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_BUYER.getKey()));
+ invoiceOcrData.setGMFSBH(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_BUYER_ID.getKey()));
+ invoiceOcrData.setCPXH(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_CAR_MODEL.getKey()));
+ invoiceOcrData.setHGZH(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_CERT_ID.getKey()));
+ invoiceOcrData.setFDJHM(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_ENGINE_ID.getKey()));
+ invoiceOcrData.setCLSBH(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_CAR_VIN.getKey()));
+ invoiceOcrData.setHJJE(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_PRICE_WITHOUT_TAX.getKey()));
+ invoiceOcrData.setZGSWJG(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_TAX_AUTHORITH.getKey()));
+ invoiceOcrData.setZGSWJGDM(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_TAX_AUTHORITH_ID.getKey()));
+
+
+ invoiceOcrData.setJSHJ(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_TOTAL_PRICE_DIGITS.getKey()));
+ invoiceOcrData.setKPRQ(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_ISSUE_DATE.getKey()));
+ invoiceOcrData.setFPDM(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_DAIMA.getKey()));
+ invoiceOcrData.setFPHM(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_HAOMA.getKey()));
+ } else if ("used_car_purchase_invoice".equals(type)) {
+ // -------------二手车销售统一发票特殊字段--------------
+ invoiceOcrData.setGMFMC(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_BUYER.getKey()));
+ invoiceOcrData.setGMFSBH(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_BUYER_ID.getKey()));
+ invoiceOcrData.setXHFMC(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_SELLER.getKey()));
+ invoiceOcrData.setXHFSBH(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_SELLER_ID.getKey()));
+ invoiceOcrData.setESCSC(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_MARKET.getKey()));
+ invoiceOcrData.setCPZH(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_PLATE_NUM.getKey()));
+ invoiceOcrData.setDJZH(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_CAR_MODEL.getKey()));
+ invoiceOcrData.setCLSBH(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_VIN.getKey()));
+ invoiceOcrData.setCPXH(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_CAR_MODEL.getKey()));
+ invoiceOcrData.setESCNSRSBH(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_MARKET_TAX_ID.getKey()));
+ invoiceOcrData.setESCNSRSBH(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_MARKET_TAX_ID.getKey()));
+ invoiceOcrData.setJSHJ(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_TOTAL_PRICE_DIGITS.getKey()));
+ invoiceOcrData.setKPRQ(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_ISSUE_DATE.getKey()));
+ invoiceOcrData.setFPDM(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_DAIMA.getKey()));
+ invoiceOcrData.setFPHM(itemData.get(OcrDataTypeEnum.VEHICLE_INVOICE_HAOMA.getKey()));
+ } else if("vehicle_toll".equals(type)){
+ // -------------过路费特殊字段--------------
+ invoiceOcrData.setJSHJ(itemData.get(OcrDataTypeEnum.MONEY.getKey()));
+ invoiceOcrData.setKPRQ(itemData.get(OcrDataTypeEnum.DATE.getKey()));
+ invoiceOcrData.setSJ(itemData.get(OcrDataTypeEnum.TIME.getKey()));
+ invoiceOcrData.setFPDM(itemData.get(OcrDataTypeEnum.TOLL_CODE.getKey()));
+ invoiceOcrData.setFPHM(itemData.get(OcrDataTypeEnum.TOLL_NUMBER.getKey()));
+
+ }else if ("quota_invoice".equals(type)) {
+ invoiceOcrData.setJSHJ(itemData.get(OcrDataTypeEnum.MONEY_SMALL.getKey()));
+ invoiceOcrData.setFPDM(itemData.get(OcrDataTypeEnum.QUOTA_INVOICE_CODE.getKey()));
+ invoiceOcrData.setFPHM(itemData.get(OcrDataTypeEnum.QUOTA_INVOICE_NUMBER.getKey()));
+
+ } else if ("taxi_ticket".equals(type)) {
+ // -------------出租车发票特殊字段--------------
+ invoiceOcrData.setJSHJ(itemData.get(OcrDataTypeEnum.SUM.getKey()));
+ invoiceOcrData.setFPDM(itemData.get(OcrDataTypeEnum.INVOICE_CODE.getKey()));
+ invoiceOcrData.setFPHM(itemData.get(OcrDataTypeEnum.INVOICE_NO.getKey()));
+ invoiceOcrData.setKPRQ(itemData.get(OcrDataTypeEnum.DATE.getKey()));
+ invoiceOcrData.setSCSJ(itemData.get(OcrDataTypeEnum.BOARDING_TIME.getKey()));
+ invoiceOcrData.setXCSJ(itemData.get(OcrDataTypeEnum.LANDING_TIME.getKey()));
+ invoiceOcrData.setLC(itemData.get(OcrDataTypeEnum.MILEAGE.getKey()));
+ invoiceOcrData.setSZD(itemData.get(OcrDataTypeEnum.LOCATION.getKey()));
+ invoiceOcrData.setCPZH(itemData.get(OcrDataTypeEnum.TAXI_NO.getKey()));
+ } else if("air_transport".equals(type)){
+ invoiceOcrData.setXM(itemData.get(OcrDataTypeEnum.PASSENGER_NAME.getKey()));
+ invoiceOcrData.setSFZH(itemData.get(OcrDataTypeEnum.ID_NO.getKey()));
+ invoiceOcrData.setPZHM(itemData.get(OcrDataTypeEnum.E_TICKET_NO.getKey()));
+ invoiceOcrData.setTKRQ(itemData.get(OcrDataTypeEnum.ISSUED_DATE.getKey()));
+ invoiceOcrData.setTKDW(itemData.get(OcrDataTypeEnum.ISSUED_BY.getKey()));
+ invoiceOcrData.setPJ(itemData.get(OcrDataTypeEnum.FARE.getKey()));
+ invoiceOcrData.setMHFZJJ(itemData.get(OcrDataTypeEnum.CIVIL_AVIATION_FUND.getKey()));
+ invoiceOcrData.setRYFJF(itemData.get(OcrDataTypeEnum.FUEL_SURCHARGE.getKey()));
+ invoiceOcrData.setQTSF(itemData.get(OcrDataTypeEnum.OTHER_TAXES.getKey()));
+ invoiceOcrData.setZE(itemData.get(OcrDataTypeEnum.TOTAL.getKey()));
+ invoiceOcrData.setBXF(itemData.get(OcrDataTypeEnum.INSURANCE.getKey()));
+ } else if("train_ticket".equals(type)){
+ // -------------火车票特殊字段--------------
+// invoiceOcrData.setPZHM(itemData.get(OcrDataTypeEnum.VAT_INVOICE_TYPE.getKey()));
+ invoiceOcrData.setKPRQ(itemData.get(OcrDataTypeEnum.DEPARTURE_DATE.getKey()));
+ invoiceOcrData.setSJ(itemData.get(OcrDataTypeEnum.DEPARTURE_DATE.getKey()));
+// invoiceOcrData.setXM(itemData.get(OcrDataTypeEnum.VAT_INVOICE_TYPE.getKey()));
+ invoiceOcrData.setCFZD(itemData.get(OcrDataTypeEnum.DEPARTURE_STATION.getKey()));
+ invoiceOcrData.setDDZD(itemData.get(OcrDataTypeEnum.ARRIVAL_STATION.getKey()));
+ invoiceOcrData.setCC(itemData.get(OcrDataTypeEnum.TRAIN_NUMBER.getKey()));
+ invoiceOcrData.setZWDJ(itemData.get(OcrDataTypeEnum.CLASS.getKey()));
+ invoiceOcrData.setXLH(itemData.get(OcrDataTypeEnum.SEAT_NUMBER.getKey()));
+ invoiceOcrData.setSFZH(itemData.get(OcrDataTypeEnum.PASSENGER_ID.getKey()));
+ } else if ("general_machine_invoice".equals(type) || "highway_passenger_invoice".equals(type) || "shipping_invoice".equals(type) || "passenger_transport_invoice".equals(type)) {
+ //为 general_machine_invoice(通用机打发票)、 highway_passenger_invoice(公路客运发票)、shipping_invoice(船运客票)、passenger_transport_invoice(旅客运输普票)
+
+ // -------------航空运输电子客票行程单特殊字段--------------
+ invoiceOcrData.setJSHJ(itemData.get(OcrDataTypeEnum.MONEY.getKey()));
+ invoiceOcrData.setFPDM(itemData.get(OcrDataTypeEnum.INVOICE_CODE.getKey()));
+ invoiceOcrData.setFPHM(itemData.get(OcrDataTypeEnum.INVOICE_NUMBER.getKey()));
+ invoiceOcrData.setKPRQ(itemData.get(OcrDataTypeEnum.DATE.getKey()));
+ invoiceOcrData.setSJ(itemData.get(OcrDataTypeEnum.TIME.getKey()));
+ } else if ("parking_invoice".equals(type)) {
+ invoiceOcrData.setJSHJ(itemData.get(OcrDataTypeEnum.MONEY.getKey()));
+ invoiceOcrData.setFPHM(itemData.get(OcrDataTypeEnum.INVOICE_NUMBER.getKey()));
+ }
+
+ openServiceOcr.setRegion(ocrDataListEntity.getPosition());
+ openServices.add(openServiceOcr);
+ }
+ return openServices;
}
}
diff --git a/dxhy-core/src/main/java/com/dxhy/core/service/openservice/model/ocr/OcrDataListEntity.java b/dxhy-core/src/main/java/com/dxhy/core/service/openservice/model/ocr/OcrDataListEntity.java
new file mode 100644
index 00000000..c46b2077
--- /dev/null
+++ b/dxhy-core/src/main/java/com/dxhy/core/service/openservice/model/ocr/OcrDataListEntity.java
@@ -0,0 +1,36 @@
+package com.dxhy.core.service.openservice.model.ocr;
+
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class OcrDataListEntity {
+
+ @JsonProperty("image_angle")
+ private int imageAngle;
+ @JsonProperty("rotated_image_width")
+ private int rotatedImageWidth;
+ @JsonProperty("rotated_image_height")
+ private int rotatedImageHeight;
+ private String type;
+ @JsonProperty("type_description")
+ private String typeDescription;
+ //头信息
+ @JsonProperty("item_list")
+ private List itemList;
+ //发票明细数据
+ @JsonProperty("product_list")
+ private List> productList;
+
+ //特殊字符无法作为常量key
+ private String CLASS;
+ private String kind;
+ @JsonProperty("kind_description")
+ private String kindDescription;
+ private List position;
+
+ private String image;
+}
diff --git a/dxhy-core/src/main/java/com/dxhy/core/service/openservice/model/ocr/OcrDataTypeEnum.java b/dxhy-core/src/main/java/com/dxhy/core/service/openservice/model/ocr/OcrDataTypeEnum.java
new file mode 100644
index 00000000..1ca4a7af
--- /dev/null
+++ b/dxhy-core/src/main/java/com/dxhy/core/service/openservice/model/ocr/OcrDataTypeEnum.java
@@ -0,0 +1,197 @@
+package com.dxhy.core.service.openservice.model.ocr;
+
+import lombok.AllArgsConstructor;
+
+@AllArgsConstructor
+public enum OcrDataTypeEnum {
+
+ //➢type 为 vat_special_invoice(增值税专用发票)、vat_electronic_invoice(增
+ //值税电子普通发票)、vat_common_invoice(增值税普通发票)、
+ //vat_electronic_toll_invoice(增值税电子普通发票(通行费))
+ VAT_INVOICE_CORRECT_CODE("vat_invoice_correct_code","校验码"),
+ VAT_INVOICE_DAIMA ("vat_invoice_daima","发票代码"),
+ VAT_INVOICE_HAOMA("vat_invoice_haoma","发票号码"),
+ VAT_INVOICE_HAOMA_LARGE_SIZE("vat_invoice_haoma_large_size","字体较大的发票号码"),
+ VAT_INVOICE_ISSUE_DATE("vat_invoice_issue_date","开票日期"),
+ VAT_INVOICE_RATE_PAYER_ID("vat_invoice_rate_payer_id","购买方纳税人识别号"),
+ VAT_INVOICE_TOTAL("vat_invoice_total","合计"),
+ VAT_INVOICE_TAX_RATE("vat_invoice_tax_rate","税率"),
+ VAT_INVOICE_JIDA_HAOMA("vat_invoice_jida_haoma","机打号码"),
+ VAT_INVOICE_SELLER_NAME("vat_invoice_seller_name","销售方名称"),
+ VAT_INVOICE_SELLER_BANK_ACCOUNT("vat_invoice_seller_bank_account","销售方开户行及帐号"),
+ VAT_INVOICE_SELLER_ID ("vat_invoice_seller_id","销售方纳税人识别号"),
+ VAT_INVOICE_SELLER_ADDR_TELL ("vat_invoice_seller_addr_tell","销售方地址、电话"),
+ VAT_INVOICE_PAYER_NAME ("vat_invoice_payer_name","购买方名称"),
+ VAT_INVOICE_PAYER_BANK_ACCOUNT ("vat_invoice_payer_bank_account","购买方开户行及帐号"),
+ VAT_INVOICE_PAYER_ADDR_TELL ("vat_invoice_payer_addr_tell","购买方地址、电话"),
+ VAT_INVOICE_TOTAL_COVER_TAX ("vat_invoice_total_cover_tax","价税合计大写"),
+ VAT_INVOICE_TOTAL_COVER_TAX_DIGITS ("vat_invoice_total_cover_tax_digits","价税合计小写"),
+ VAT_INVOICE_HEADLINE_PAGE_NUMBER ("vat_invoice_headline_page_number","标题发票联(普票,电子发票,专票增加字段)"),
+ VAT_INVOICE_TOTAL_PRINT ("vat_invoice_total_print","打印合计(普票,电子发票,专票增加字段)"),
+ VAT_INVOICE_CORRENT_CODE_PRINT ("vat_invoice_corrent_code_print","打印校验码(普票,电子发票,专票增加字段)"),
+ VAT_INVOICE_TAX_TOTAL("vat_invoice_tax_total","税额合计"),
+ VAT_INVOICE_GOODS_LIST ("vat_invoice_goods_list","货物或服务名称"),
+ VAT_INVOICE_GOODS("vat_invoice_goods","货物或服务名称"),
+ VAT_INVOICE_PRICE_LIST ("vat_invoice_price_list","金额明细"),
+ VAT_INVOICE_PRICE ("vat_invoice_price","金额明细"),
+ VAT_INVOICE_TAX_RATE_LIST ("vat_invoice_tax_rate_list","税率明细"),
+ VAT_INVOICE_TAX_LIST ("vat_invoice_tax_list","税额明细"),
+ VAT_INVOICE_TAX ("vat_invoice_tax","税额明细"),
+ VAT_INVOICE_ZHUAN_YONG_FLAG ("vat_invoice_zhuan_yong_flag","专票/普票/区块链发票"),
+ VAT_INVOICE_DAI_KAI_FLAG ("vat_invoice_dai_kai_flag","代开(非代开条目为空)"),
+ VAT_INVOICE_PLATE_SPECIFIC("vat_invoice_plate_specific","规格型号明细"),
+ VAT_INVOICE_ELECTRANS_UNIT ("vat_invoice_electrans_unit","单位明细"),
+ VAT_INVOICE_ELECTRANS_QUANTITY("vat_invoice_electrans_quantity","数量明细"),
+ VAT_INVOICE_ELECTRANS_UNIT_PRICE ("vat_invoice_electrans_unit_price","单价明细"),
+ VAT_INVOICE_DAIMA_RIGHT_SIDE ("vat_invoice_daima_right_side","右侧打印发票代码"),
+ VAT_INVOICE_HAOMA_RIGHT_SIDE ("vat_invoice_haoma_right_side","右侧打印发票号码"),
+ VAT_INVOICE_PAGE_NUMBER ("vat_invoice_page_number","抵扣联/发票联"),
+ VAT_INVOICE_TYPE ("vat_invoice_type","发票类型"),
+ VAT_INVOICE_TOTAL_NOTE ("vat_invoice_total_note","备注"),
+ VAT_INVOICE_CIPHER_FIELD ("vat_invoice_cipher_field","密码区"),
+ VAT_INVOICE_DRAWER ("vat_invoice_drawer","开票人"),
+ VAT_INVOICE_REVIEW ("vat_invoice_review","复核人"),
+ VAT_INVOICE_PAYEE ("vat_invoice_payee","收款人"),
+ EXIST_STAMPLE("exist_stample","盖章存在性判断"),
+
+ VEHICLE_INVOICE_BUYER("vehicle_invoice_buyer","购买方名称"),
+ VEHICLE_INVOICE_BUYER_ID ("vehicle_invoice_buyer_id","购买方名称的身份证号码或组织机构代码"),
+ VEHICLE_INVOICE_CAR_MODEL ("vehicle_invoice_car_model","厂牌型号"),
+ VEHICLE_INVOICE_CAR_MADE_PLACE("vehicle_invoice_car_made_place","产地"),
+ VEHICLE_INVOICE_CERT_ID ("vehicle_invoice_cert_id","合格证号"),
+ VEHICLE_INVOICE_ENGINE_ID ("vehicle_invoice_engine_id","发动机号码"),
+ VEHICLE_INVOICE_CAR_VIN("vehicle_invoice_car_vin","车辆识别代号/车架号"),
+ VEHICLE_INVOICE_TOTAL_PRICE("vehicle_invoice_total_price","价税合计"),
+ VEHICLE_INVOICE_TOTAL_PRICE_DIGITS("vehicle_invoice_total_price_digits","价税合计小写"),
+ VEHICLE_INVOICE_PRICE_WITHOUT_TAX("VEHICLE_INVOICE_PRICE_WITHOUT_TAX","不含税价"),
+ VEHICLE_INVOICE_TAX_RATE("vehicle_invoice_tax_rate","税率"),
+ VEHICLE_INVOICE_TAX_AMOUNT ("vehicle_invoice_tax_amount","税额"),
+ VEHICLE_INVOICE_TELEPHONE ("vehicle_invoice_telephone","电话"),
+ VEHICLE_INVOICE_ISSUE_DATE("vehicle_invoice_issue_date","开票日期"),
+ VEHICLE_INVOICE_DAIMA("vehicle_invoice_daima","发票代码"),
+ VEHICLE_INVOICE_HAOMA("vehicle_invoice_haoma","发票号码"),
+ VEHICLE_INVOICE_DEALER("vehicle_invoice_dealer","销货单位"),
+ VEHICLE_INVOICE_JIDA_DAIMA ("vehicle_invoice_jida_daima","机打代码"),
+ VEHICLE_INVOICE_JIDA_HAOMA ("vehicle_invoice_jida_haoma","机打号码"),
+ VEHICLE_INVOICE_MACHINE_ID ("vehicle_invoice_machine_id","机器编码"),
+ VEHICLE_INVOICE_TAX_AUTHORITH_ID("vehicle_invoice_tax_authorith_id","主管税务代码"),
+ VEHICLE_INVOICE_TAX_AUTHORITH ("vehicle_invoice_tax_authorith","主管税务机关"),
+ VEHICLE_INVOICE_SELLER_BANK_NAME ("vehicle_invoice_seller_bank_name","开户银行"),
+ VEHICLE_INVOICE_SELLER_BANK_ACCOUNT("vehicle_invoice_seller_bank_account","账号"),
+ VEHICLE_INVOICE_SELLER_TAX_ID ("vehicle_invoice_seller_tax_id","纳税人识别号"),
+ VEHICLE_INVOICE_COMMODITY_INSPECTION_ID ("vehicle_invoice_commodity_inspection_id","商检单号"),
+ VEHICLE_INVOICE_IMPORT_CERTIFICATE_ID ("vehicle_invoice_import_certificate_id","进口证明书号"),
+ VEHICLE_INVOICE_SELLER_ADDRESS ("vehicle_invoice_seller_address","地址"),
+
+// vehicle_invoice_daima("vehicle_invoice_daima","购车发票代码"),
+// vehicle_invoice_haoma ("vehicle_invoice_haoma","购车发票号码"),
+// vehicle_invoice_buyer ("vehicle_invoice_buyer","购货单位(人)"),
+// vehicle_invoice_buyer_id ("vehicle_invoice_buyer_id","购买身份证号码/组织机构代码"),
+ VEHICLE_INVOICE_BUYER_ADDR("vehicle_invoice_buyer_addr","购买方地址"),
+ VEHICLE_INVOICE_BUYER_PHONE ("vehicle_invoice_buyer_phone","购买方电话号码"),
+ VEHICLE_INVOICE_SELLER ("vehicle_invoice_seller","卖方单位(人)"),
+ VEHICLE_INVOICE_SELLER_ID ("vehicle_invoice_seller_id","买方身份证号码/组织机构代码"),
+ VEHICLE_INVOICE_SELLER_ADDR ("vehicle_invoice_seller_addr","卖方地址"),
+ VEHICLE_INVOICE_SELLER_PHONE ("vehicle_invoice_seller_phone","卖方电话号码"),
+ VEHICLE_INVOICE_PLATE_NUM ("vehicle_invoice_plate_num","车牌照号"),
+ VEHICLE_INVOICE_REGISTER_NUM("vehicle_invoice_register_num","登记证号"),
+ VEHICLE_INVOICE_VEHICLE_TYPE ("vehicle_invoice_vehicle_type","车辆类型"),
+ VEHICLE_INVOICE_VIN ("vehicle_invoice_vin","车架号/车辆识别代码"),
+// vehicle_invoice_car_model("vehicle_invoice_car_model","厂牌型号"),
+ VEHICLE_INVOICE_DMV("vehicle_invoice_dmv","转入地车辆管理所名称"),
+ VEHICLE_INVOICE_PRICE_TOTAL_PRICE ("vehicle_invoice_price_total_price","价税合计"),
+// vehicle_invoice_total_price_digits ("vehicle_invoice_total_price_digits","价税合计小写"),
+ VEHICLE_INVOICE_AUCTION_HOUSE ("vehicle_invoice_auction_house","经营、拍卖单位"),
+ VEHICLE_INVOICE_AUCTION_HOUSE_ADDR("vehicle_invoice_auction_house_addr","经营、拍卖单位地址"),
+ VEHICLE_INVOICE_AUCTION_HOUSE_TAX_ID ("vehicle_invoice_auction_house_tax_id","经营、拍卖单位纳税人识别号"),
+ VEHICLE_INVOICE_AUCTION_HOUSE_BANK_ACCOUNT ("vehicle_invoice_auction_house_bank_account","经营、拍卖单位开户银行、账号"),
+ VEHICLE_INVOICE_AUCTION_HOUSE_PHONE ("vehicle_invoice_auction_house_phone","经营、拍卖单位电话"),
+ VEHICLE_INVOICE_MARKET ("vehicle_invoice_market","二手车市场"),
+ VEHICLE_INVOICE_MARKET_ADDR ("vehicle_invoice_market_addr","二手车市场地址"),
+ VEHICLE_INVOICE_MARKET_TAX_ID ("vehicle_invoice_market_tax_id","二手车市场纳税人识别号"),
+ VEHICLE_INVOICE_MARKET_BANK_ACOUNT ("vehicle_invoice_market_bank_acount","二手车市场开户银行、账号"),
+ VEHICLE_INVOICE_MARKET_PHONE ("vehicle_invoice_market_phone","二手车市场电话"),
+ VEHICLE_INVOICE_NOTE ("vehicle_invoice_note","备注"),
+// vehicle_invoice_issue_date ("vehicle_invoice_issue_date","购车发票开票日期"),
+
+ INVOICE_HEAD("invoice_head","发票票头"),
+ INVOICE_NUMBER("invoice_number","发票号码"),
+ INVOICE_CODE("invoice_code","发票代码"),
+ MACHINE_NUMBER ("machine_number","机器号码"),
+ MACHINE_CODE ("machine_code","机器编码"),
+ TOTAL_MONEY("total_money","合计金额(小写)"),
+ TOTAL_MONEY_BIG ("total_money_big","合计金额(大写)"),
+ DATE_OF_INVOICE ("date_of_invoice","开票日期"),
+ CHECK_NUMBER ("check_number","校验码"),
+ BUY_NAME("buy_name","购方名称"),
+ BUY_TAX_NUMBER("buy_tax_number","购方纳税人识别号"),
+ SOLD_NAME ("sold_name","销方名称"),
+ SOLD_TAX_NUMBER ("sold_tax_number","销方纳税人识别号"),
+ CASHIER_NAME ("cashier_name","收款员"),
+
+ QUOTA_INVOICE_CODE("quota_invoice_code","发票代码"),
+ QUOTA_INVOICE_NUMBER ("quota_invoice_number","发票号码"),
+ MONEY_SMALL ("money_small","金额(小写)"),
+ MONEY_BIG ("money_big","金额(大写)"),
+ LOCATION ("location","发票所在地"),
+
+// invoice_code ("invoice_code","发票代码"),
+ INVOICE_NO ("invoice_no","发票号码"),
+ DATE ("date","日期"),
+ TAXI_NO ("taxi_no","车号"),
+ BOARDING_TIME("boarding_time","上车时间"),
+ LANDING_TIME ("landing_time","下车时间"),
+ MILEAGE ("mileage","里程"),
+ SUM ("sum","金额"),
+// location ("location","发票所在地"),
+
+ PASSENGER_NAME ("passenger_name","旅客姓名"),
+ ID_NO ("id_no","身份证件号码"),
+ SERIAL_NUMBER ("serial_number","印刷序号"),
+ TOTAL("total","合计金额"),
+ FARE ("fare","票价"),
+ CIVIL_AVIATION_FUND ("civil_aviation_fund","民航发展基金"),
+ FUEL_SURCHARGE ("fuel_surcharge","燃油附加费"),
+ OTHER_TAXES("other_taxes","其他税费"),
+ ISSUED_DATE ("issued_date","填开日期"),
+ ISSUED_BY ("issued_by","填开单位"),
+ E_TICKET_NO ("e_ticket_no","电子客票号码"),
+ INSURANCE ("insurance","保险费"),
+
+// passenger_name("passenger_name","乘客名称"),
+ PASSENGER_ID("passenger_id","乘客身份证"),
+ TRAIN_NUMBER ("train_number","车次号"),
+ DEPARTURE_STATION ("departure_station","出发地"),
+ DEPARTURE_DATE ("departure_date","乘车时间"),
+ //TODO
+ CLASS ("class","座位类别"),
+ TICKET_NUMBER ("ticket_number","火车票红色编码"),
+ ARRIVAL_STATION ("arrival_station","目的地"),
+ SEAT_NUMBER ("seat_number","座位号"),
+ PRICE ("price","价格"),
+ CHECK ("check","检票口"),
+ TICKET_ID ("ticket_id","火车票ID"),
+
+
+
+// invoice_code ("invoice_code","发票代码"),
+// invoice_number ("invoice_number","发票号码"),
+ MONEY ("money","金额"),
+// date ("date","日期"),
+ TIME ("time","时间"),
+ TOLL_CODE ("toll_code","车辆通行费代码"),
+ TOLL_NUMBER ("toll_number","车辆通行费号码"),
+
+
+// invoice_number ("invoice_number","发票号码"),
+// money ("money","金额"),
+
+ ;
+ private String key;
+
+ private String value;
+
+ public String getKey() {
+ return key;
+ }
+}
diff --git a/dxhy-core/src/main/java/com/dxhy/core/service/openservice/model/ocr/OcrItemListEntity.java b/dxhy-core/src/main/java/com/dxhy/core/service/openservice/model/ocr/OcrItemListEntity.java
new file mode 100644
index 00000000..b2c62d43
--- /dev/null
+++ b/dxhy-core/src/main/java/com/dxhy/core/service/openservice/model/ocr/OcrItemListEntity.java
@@ -0,0 +1,13 @@
+package com.dxhy.core.service.openservice.model.ocr;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class OcrItemListEntity {
+ private String value;
+ private String description;
+ private String key;
+ private List position;
+}
diff --git a/dxhy-core/src/main/java/com/dxhy/core/service/openservice/model/ocr/OcrProductListEntity.java b/dxhy-core/src/main/java/com/dxhy/core/service/openservice/model/ocr/OcrProductListEntity.java
new file mode 100644
index 00000000..642e51e3
--- /dev/null
+++ b/dxhy-core/src/main/java/com/dxhy/core/service/openservice/model/ocr/OcrProductListEntity.java
@@ -0,0 +1,12 @@
+package com.dxhy.core.service.openservice.model.ocr;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class OcrProductListEntity {
+ private String description;
+ private String key;
+ private String value;
+}
diff --git a/dxhy-core/src/main/java/com/dxhy/core/service/openservice/model/ocr/OcrResponseVo.java b/dxhy-core/src/main/java/com/dxhy/core/service/openservice/model/ocr/OcrResponseVo.java
new file mode 100644
index 00000000..b4546b88
--- /dev/null
+++ b/dxhy-core/src/main/java/com/dxhy/core/service/openservice/model/ocr/OcrResponseVo.java
@@ -0,0 +1,15 @@
+package com.dxhy.core.service.openservice.model.ocr;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+@Data
+public class OcrResponseVo {
+
+
+ private OcrResultEntity result;
+ @JsonProperty("cost_time")
+ private int costTime;
+ private int code;
+ private String message;
+}
diff --git a/dxhy-core/src/main/java/com/dxhy/core/service/openservice/model/ocr/OcrResultEntity.java b/dxhy-core/src/main/java/com/dxhy/core/service/openservice/model/ocr/OcrResultEntity.java
new file mode 100644
index 00000000..c284ae56
--- /dev/null
+++ b/dxhy-core/src/main/java/com/dxhy/core/service/openservice/model/ocr/OcrResultEntity.java
@@ -0,0 +1,14 @@
+package com.dxhy.core.service.openservice.model.ocr;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class OcrResultEntity {
+
+ @JsonProperty("object_list")
+ private List objectList;
+
+}