From 13355ac73b8b177f426d842ee79bdc67a2a7d6eb Mon Sep 17 00:00:00 2001 From: "zhenghaiyang@ele-cloud.com" Date: Fri, 17 Mar 2023 20:08:18 +0800 Subject: [PATCH] =?UTF-8?q?feature=201.=E6=8F=90=E4=BA=A4OCR=E8=AF=86?= =?UTF-8?q?=E5=88=AB=E7=9A=84=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dxhy-common/pom.xml | 4 + .../java/com/dxhy/common/util/FileUtil.java | 25 ++ .../impl/OpenServicePlatformServiceImpl.java | 312 ++++++++++++++++-- .../model/ocr/OcrDataListEntity.java | 36 ++ .../model/ocr/OcrDataTypeEnum.java | 197 +++++++++++ .../model/ocr/OcrItemListEntity.java | 13 + .../model/ocr/OcrProductListEntity.java | 12 + .../openservice/model/ocr/OcrResponseVo.java | 15 + .../model/ocr/OcrResultEntity.java | 14 + 9 files changed, 594 insertions(+), 34 deletions(-) create mode 100644 dxhy-core/src/main/java/com/dxhy/core/service/openservice/model/ocr/OcrDataListEntity.java create mode 100644 dxhy-core/src/main/java/com/dxhy/core/service/openservice/model/ocr/OcrDataTypeEnum.java create mode 100644 dxhy-core/src/main/java/com/dxhy/core/service/openservice/model/ocr/OcrItemListEntity.java create mode 100644 dxhy-core/src/main/java/com/dxhy/core/service/openservice/model/ocr/OcrProductListEntity.java create mode 100644 dxhy-core/src/main/java/com/dxhy/core/service/openservice/model/ocr/OcrResponseVo.java create mode 100644 dxhy-core/src/main/java/com/dxhy/core/service/openservice/model/ocr/OcrResultEntity.java 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; + +}