From ea300dbd1f56421dbe48c21c8972e080bbc80a62 Mon Sep 17 00:00:00 2001 From: lucky Date: Wed, 26 Jan 2022 10:42:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E7=A5=A8=E5=9B=BE=E7=89=87=E8=AF=86?= =?UTF-8?q?=E5=88=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ccsens/ptccsens/api/OcrController.java | 3 +- .../com/ccsens/ptccsens/bean/vo/OcrVo.java | 13 +++---- .../ccsens/ptccsens/service/IOcrService.java | 4 ++- .../ccsens/ptccsens/service/OcrService.java | 35 +++++++++++++------ 4 files changed, 34 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/ccsens/ptccsens/api/OcrController.java b/src/main/java/com/ccsens/ptccsens/api/OcrController.java index 7a923df..181d09d 100644 --- a/src/main/java/com/ccsens/ptccsens/api/OcrController.java +++ b/src/main/java/com/ccsens/ptccsens/api/OcrController.java @@ -26,6 +26,7 @@ import javax.imageio.ImageIO; import javax.servlet.http.Part; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.text.ParseException; /** @@ -42,7 +43,7 @@ public class OcrController { @ApiOperation(value = "图像识别", notes = "whj") @RequestMapping(value = "/bill", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) - public JsonResponse identifyBill(@RequestParam(required = true) Part part) throws IOException { + public JsonResponse identifyBill(@RequestParam(required = true) Part part) throws Exception { log.info("图像识别"); // 压缩图像 ByteArrayOutputStream out = new ByteArrayOutputStream(); diff --git a/src/main/java/com/ccsens/ptccsens/bean/vo/OcrVo.java b/src/main/java/com/ccsens/ptccsens/bean/vo/OcrVo.java index cd23594..464b1a2 100644 --- a/src/main/java/com/ccsens/ptccsens/bean/vo/OcrVo.java +++ b/src/main/java/com/ccsens/ptccsens/bean/vo/OcrVo.java @@ -11,20 +11,15 @@ public class OcrVo { @Data @ApiModel("发票信息") public static class BillInfo { - @JSONField(name = "InvoiceCode") @ApiModelProperty("发票代码") private String invoiceCode; - @JSONField(name = "InvoiceNum") @ApiModelProperty("发票号码") - private String invoiceNumber; - @JSONField(name = "CommodityAmount") + private String invoiceNum; @ApiModelProperty("金额") - private Long money; - @JSONField(name = "CommodityTax") + private Long totalAmount; @ApiModelProperty("税额") - private Long taxMoney; - @JSONField(name = "InvoiceDate") + private Long totalTax; @ApiModelProperty("开票时间") - private String invoiceTime; + private Long invoiceDate; } } diff --git a/src/main/java/com/ccsens/ptccsens/service/IOcrService.java b/src/main/java/com/ccsens/ptccsens/service/IOcrService.java index 4b042d5..aefc14b 100644 --- a/src/main/java/com/ccsens/ptccsens/service/IOcrService.java +++ b/src/main/java/com/ccsens/ptccsens/service/IOcrService.java @@ -2,11 +2,13 @@ package com.ccsens.ptccsens.service; import com.ccsens.ptccsens.bean.vo.OcrVo; +import java.text.ParseException; + public interface IOcrService { /** * 发票识别 * @param img 发表base64 * @return 识别结果 */ - OcrVo.BillInfo identifyBill(String img); + OcrVo.BillInfo identifyBill(String img) throws ParseException; } diff --git a/src/main/java/com/ccsens/ptccsens/service/OcrService.java b/src/main/java/com/ccsens/ptccsens/service/OcrService.java index 997e207..00925ba 100644 --- a/src/main/java/com/ccsens/ptccsens/service/OcrService.java +++ b/src/main/java/com/ccsens/ptccsens/service/OcrService.java @@ -1,6 +1,9 @@ package com.ccsens.ptccsens.service; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.StrUtil; +import com.alibaba.druid.sql.visitor.functions.If; import com.ccsens.ptccsens.bean.vo.OcrVo; import com.ccsens.ptccsens.util.BasicsConstant; import com.ccsens.util.RestTemplateUtil; @@ -12,26 +15,38 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; +import java.text.ParseException; +import java.text.SimpleDateFormat; + @Service @Slf4j @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) public class OcrService implements IOcrService{ @Override - public OcrVo.BillInfo identifyBill(String img) { + public OcrVo.BillInfo identifyBill(String img) throws ParseException { // 图像识别 BaiDuDto.GeneralBasic basic = new BaiDuDto.GeneralBasic(); basic.setImage(img); -// BaiDuVo.BillBasic words = BaiDuUtil.billBasic(BasicsConstant.BaiDu.APP_KEY, BasicsConstant.BaiDu.SECRET_KEY, basic); -// log.info("识别结果:{}",words); - String token = BaiDuUtil.getToken(BasicsConstant.BaiDu.INVOICE_APP_KEY, BasicsConstant.BaiDu.INVOICE_SECRET_KEY); - String invoiceUrl = "https://aip.baidubce.com/rest/2.0/ocr/v1/vat_invoice?access_token={}"; - String url = StrUtil.format(invoiceUrl, token); - String result = RestTemplateUtil.postUrlEncode(url, basic); - log.info("result:{}", result); + BaiDuVo.BillBasic words = BaiDuUtil.billBasic(BasicsConstant.BaiDu.INVOICE_APP_KEY, BasicsConstant.BaiDu.INVOICE_SECRET_KEY, basic); + log.info("识别结果:{}",words); +// String token = BaiDuUtil.getToken(BasicsConstant.BaiDu.INVOICE_APP_KEY, BasicsConstant.BaiDu.INVOICE_SECRET_KEY); +// String invoiceUrl = "https://aip.baidubce.com/rest/2.0/ocr/v1/vat_invoice?access_token={}"; +// String url = StrUtil.format(invoiceUrl, token); +// String result = RestTemplateUtil.postUrlEncode(url, basic); +// log.info("result:{}", result); // 返回数据 - OcrVo.BillInfo personMsg = new OcrVo.BillInfo(); + OcrVo.BillInfo billInfo = new OcrVo.BillInfo(); + if (CollectionUtil.isNotEmpty(words.getWordsResult())) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd"); + BeanUtil.copyProperties(words.getWordsResult().get(0),billInfo); + billInfo.setTotalAmount(new BigDecimal(words.getWordsResult().get(0).getTotalAmount()).multiply(BigDecimal.valueOf(100)).longValue()); + billInfo.setTotalTax(new BigDecimal(words.getWordsResult().get(0).getTotalTax()).multiply(BigDecimal.valueOf(100)).longValue()); + billInfo.setInvoiceDate(sdf.parse(words.getWordsResult().get(0).getInvoiceDate()).getTime()); + + } // personMsg.toMsg(words.getWordsResult()); - return personMsg; + return billInfo; } }