From 01517c3081be1ae7224276f630f3fb619451c260 Mon Sep 17 00:00:00 2001 From: purple7433 <743367900@qq.com> Date: Tue, 9 May 2023 17:05:04 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E8=AF=86=E5=88=AB=E6=95=B4=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../claimAudit/ClaimAuditTempService.java | 16 ++++ .../claimAudit/ClaimAuditTempServiceImpl.java | 88 +++++++++++++++++++ .../domain/aggregate/file/FileEntity.java | 8 +- .../controller/ClaimAuditController.java | 17 +++- .../interfaces/controller/FileController.java | 2 +- .../controller/RecognizeController.java | 50 ++--------- 6 files changed, 131 insertions(+), 50 deletions(-) create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/claimAudit/ClaimAuditTempService.java create mode 100644 ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/claimAudit/ClaimAuditTempServiceImpl.java diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/claimAudit/ClaimAuditTempService.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/claimAudit/ClaimAuditTempService.java new file mode 100644 index 00000000..4d71710f --- /dev/null +++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/claimAudit/ClaimAuditTempService.java @@ -0,0 +1,16 @@ +package com.seasky.seaskyocr.application.command.claimAudit; + +import com.seasky.seaskyocr.domain.aggregate.file.FileEntity; +import com.seasky.seaskyocr.dto.invoice.InvoiceCmd; + +import java.util.List; +import java.util.Map; + +/** + * @author zhuxiang + * @since 2023-5-9 + */ +public interface ClaimAuditTempService { + + List<Map<String, Object>> invoiceRecognitionForMultipartFile(FileEntity fileEntity, InvoiceCmd invoiceCmd); +} diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/claimAudit/ClaimAuditTempServiceImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/claimAudit/ClaimAuditTempServiceImpl.java new file mode 100644 index 00000000..5b97816a --- /dev/null +++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/command/claimAudit/ClaimAuditTempServiceImpl.java @@ -0,0 +1,88 @@ +package com.seasky.seaskyocr.application.command.claimAudit; + +import com.alibaba.fastjson.JSON; +import com.seasky.core.common.ResponseCode; +import com.seasky.core.common.Result; +import com.seasky.core.util.ExceptionUtil; +import com.seasky.seaskyocr.application.command.utils.ClaimAuditUtil; +import com.seasky.seaskyocr.domain.aggregate.file.FileEntity; +import com.seasky.seaskyocr.dto.invoice.InvoiceCmd; +import com.seasky.seaskyocr.dto.invoice.StatisticsCmd; +import com.seasky.seaskyocr.enums.SourceTypeEnum; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; +import java.util.Map; +import java.util.Objects; + +import static com.seasky.core.common.Response.ok; + +/** + * @author zhuxiang + * @since 2023-5-9 + */ +@Service +@Slf4j +public class ClaimAuditTempServiceImpl implements ClaimAuditTempService { + + @Autowired + ClaimAuditCmdService cmdService; + + @Override + public List<Map<String, Object>> invoiceRecognitionForMultipartFile(FileEntity fileEntity, InvoiceCmd invoiceCmd) { + List<Map<String, Object>> mapList = invoiceRecognitionForMultipartFilePrivate(fileEntity, invoiceCmd); + return mapList; + } + + private List<Map<String, Object>> invoiceRecognitionForMultipartFilePrivate(FileEntity fileEntity, InvoiceCmd invoiceCmd) { + log.info("鎴愬姛杩涘叆invoiceRecognitionForMultipartFile璇嗗埆鎺ュ彛锛�" + "璇嗗埆鐨勬枃浠跺悕绉帮細" + fileEntity.getFileName() + " ;澶у皬锛�" + fileEntity.getFileSize() + "MB"); + //todo 鍚庣画鐨勪笟鍔¢€昏緫 + List<Map<String, Object>> maps = null; + try { + maps = cmdService.invoiceRecognition(fileEntity, invoiceCmd); + //todo 淇濆瓨璋冪敤璁板綍 + Long ocrId = null; + String source = ""; + for (Map<String, Object> mm : maps) { + ocrId = Long.parseLong(mm.get("ocrId").toString()); + source = mm.get("source").toString(); + } + cmdService.saveCount(StatisticsCmd.builder() + .fileName(fileEntity.getFileName()) + .source(source) + .hashId(fileEntity.getHashId()) + .fileID(fileEntity.getFileId()) + .result("鎴愬姛") + .type(SourceTypeEnum.璇嗗埆.val()) + .accountId(invoiceCmd.getAccountId()) + .param(JSON.toJSONString(invoiceCmd)) + .ocrId(ocrId) + .remark("" + invoiceCmd.isCache()) + .build()); + maps = ClaimAuditUtil.excuteSeatPlace(maps, fileEntity.getFileName(), fileEntity.getHashId(), fileEntity.getFile()); + } catch (Exception e) { + cmdService.saveCount(StatisticsCmd.builder() + .fileName(fileEntity.getFileName()) + .source("") + .hashId(fileEntity.getHashId()) + .fileID(fileEntity.getFileId()) + .result("澶辫触锛�" + e.getMessage()) + .type(SourceTypeEnum.璇嗗埆.val()) + .accountId(invoiceCmd.getAccountId()) + .param(JSON.toJSONString(invoiceCmd)) + .ocrId(null) + .remark("" + invoiceCmd.isCache()) + .build()); + throw ExceptionUtil.getException(null, e.getMessage()); + } finally { + fileEntity.getFile().delete(); + } + //todo 鎵嬪姩gc + System.gc(); + return maps; + } +} diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/file/FileEntity.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/file/FileEntity.java index acef0803..6e512449 100644 --- a/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/file/FileEntity.java +++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/domain/aggregate/file/FileEntity.java @@ -35,7 +35,9 @@ public class FileEntity { private String random; - public FileEntity(MultipartFile multipartFile) { + private String fileId; + + public FileEntity(MultipartFile multipartFile, String fileId) { if (ObjectUtil.isNull(multipartFile)) { throw ExceptionUtil.getException(null, "鏂囦欢涓嶈兘涓虹┖锛�"); } @@ -55,9 +57,10 @@ public class FileEntity { throw ExceptionUtil.getException(null, "hashId鑾峰彇澶辫触锛�"); } this.fileResource = 1; + this.fileId = fileId; } - public FileEntity(String fileBytes, String fileName) { + public FileEntity(String fileBytes, String fileName, String fileId) { if (ObjectUtil.isEmpty(fileBytes)) { throw ExceptionUtil.getException(null, "鏂囦欢涓嶈兘涓虹┖锛�"); } @@ -79,5 +82,6 @@ public class FileEntity { this.fileBytes = fileBytes; this.fileSize = fileBytes.length() / 1024.0 / 1024.0; this.fileResource = 2; + this.fileId = fileId; } } diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/ClaimAuditController.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/ClaimAuditController.java index 4daa0ddb..35642178 100644 --- a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/ClaimAuditController.java +++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/ClaimAuditController.java @@ -6,6 +6,7 @@ import com.seasky.core.common.Result; import com.seasky.core.util.ExceptionUtil; import com.seasky.seaskyocr.api.IClaimAuditController; import com.seasky.seaskyocr.application.command.claimAudit.ClaimAuditCmdService; +import com.seasky.seaskyocr.application.command.claimAudit.ClaimAuditTempService; import com.seasky.seaskyocr.application.command.claimAudit.TransactionalService; import com.seasky.seaskyocr.application.command.utils.ClaimAuditUtil; import com.seasky.seaskyocr.application.command.utils.FileUtil; @@ -47,6 +48,9 @@ public class ClaimAuditController implements IClaimAuditController { @Autowired ClaimAuditCmdService cmdService; + @Autowired + ClaimAuditTempService cmdTempService; + @Autowired ClaimAuditQueryService qryService; @@ -137,7 +141,6 @@ public class ClaimAuditController implements IClaimAuditController { @Override public Result<Map<String, Object>> invoiceRecognitionForMultipartFile(MultipartFile file, String accountId, Boolean isCache, String fileID) { //鍏ュ弬寮烘牎楠� - //Preconditions.checkArgument(accountId != null, "accountId涓嶈兘涓虹┖"); if (Objects.isNull(file)) { throw ExceptionUtil.getException(null, "涓婁紶鏂囦欢涓嶈兘涓虹┖锛�"); } @@ -154,8 +157,14 @@ public class ClaimAuditController implements IClaimAuditController { if (StringUtils.isEmpty(fileName)) { throw ExceptionUtil.getException(null, "鏂囦欢鍚嶇О涓嶈兘涓虹┖锛�"); } - FileEntity fileEntity = new FileEntity(file); - log.info("鎴愬姛杩涘叆invoiceRecognitionForMultipartFile璇嗗埆鎺ュ彛锛�" + "璇嗗埆鐨勬枃浠跺悕绉帮細" + fileEntity.getFileName() + " ;澶у皬锛�" + fileEntity.getFileSize() + "MB"); + FileEntity fileEntity = new FileEntity(file, fileID); + InvoiceCmd invoiceCmd = new InvoiceCmd(); + invoiceCmd.setAccountId(Long.parseLong(accountId)); + invoiceCmd.setCache(isCache); + List<Map<String, Object>> mapList = cmdTempService.invoiceRecognitionForMultipartFile(fileEntity, invoiceCmd); + return ok(ResponseCode.SUCCESS, mapList); + + //log.info("鎴愬姛杩涘叆invoiceRecognitionForMultipartFile璇嗗埆鎺ュ彛锛�" + "璇嗗埆鐨勬枃浠跺悕绉帮細" + fileEntity.getFileName() + " ;澶у皬锛�" + fileEntity.getFileSize() + "MB"); //todo 鍚庣画鐨勪笟鍔¢€昏緫 /*String hashId = null; try { @@ -163,6 +172,7 @@ public class ClaimAuditController implements IClaimAuditController { } catch (Exception e) { throw ExceptionUtil.getException(null, "hsahId鑾峰彇澶辫触锛�"); }*/ + /* InvoiceCmd invoiceCmd = new InvoiceCmd(); invoiceCmd.setAccountId(Long.parseLong(accountId)); invoiceCmd.setCache(isCache); @@ -209,6 +219,7 @@ public class ClaimAuditController implements IClaimAuditController { //todo 鎵嬪姩gc System.gc(); return ok(ResponseCode.SUCCESS, maps); + */ } //@PostMapping(path = "claimAuditInvoiceTest") diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/FileController.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/FileController.java index 045484bc..3f17952d 100644 --- a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/FileController.java +++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/FileController.java @@ -46,7 +46,7 @@ public class FileController implements IFileController { @Override public void downloadFromStream(HttpServletResponse response, DownloadFromStreamCmd cmd) { try { - FileEntity fileEntity = new FileEntity(cmd.getFileStream(), cmd.getFileName()); + FileEntity fileEntity = new FileEntity(cmd.getFileStream(), cmd.getFileName(), ""); fileEntity.getFile().delete(); FileUtil.downloadFile(response, fileEntity.getFileBytes(), FileUtil.getFileContentType(FileUtil.getFileExt(fileEntity.getFileName())), fileEntity.getFileName()); } catch (Exception ex) { diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/RecognizeController.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/RecognizeController.java index 627e14a5..ebf48af6 100644 --- a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/RecognizeController.java +++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/RecognizeController.java @@ -7,9 +7,9 @@ import com.seasky.core.common.Result; import com.seasky.core.util.ExceptionUtil; import com.seasky.seaskyocr.api.IRecognizeController; import com.seasky.seaskyocr.application.command.claimAudit.ClaimAuditCmdService; +import com.seasky.seaskyocr.application.command.claimAudit.ClaimAuditTempService; import com.seasky.seaskyocr.application.command.claimAudit.TransactionalService; import com.seasky.seaskyocr.application.command.utils.ClaimAuditUtil; -import com.seasky.seaskyocr.application.command.utils.FileUtil; import com.seasky.seaskyocr.application.query.claimAudit.ClaimAuditQueryService; import com.seasky.seaskyocr.domain.aggregate.file.FileEntity; import com.seasky.seaskyocr.dto.claimAudit.ClaimAuditInvoiceCmd; @@ -52,6 +52,9 @@ public class RecognizeController implements IRecognizeController { @Autowired ClaimAuditCmdService cmdService; + @Autowired + ClaimAuditTempService claimAuditTempService; + @Autowired ClaimAuditQueryService qryService; @@ -208,54 +211,13 @@ public class RecognizeController implements IRecognizeController { } private List<Map<String, Object>> invoiceRecognitionForBase64(@Valid ClaimAuditInvoiceCmd cmd) { - FileEntity fileEntity = new FileEntity(cmd.getBase64Str(), cmd.getFileName()); + FileEntity fileEntity = new FileEntity(cmd.getBase64Str(), cmd.getFileName(), cmd.getFileID()); log.info("鎴愬姛杩涘叆base64瀛楃涓蹭粎璇嗗埆鎺ュ彛锛�" + "璇嗗埆鐨勬枃浠跺悕绉帮細" + fileEntity.getFileName() + " ;澶у皬锛�" + String.format("%.2f", fileEntity.getFileSize()) + "MB"); //todo 鍚庣画鐨勪笟鍔¢€昏緫 InvoiceCmd invoiceCmd = new InvoiceCmd(); invoiceCmd.setAccountId(cmd.getAccountId()); invoiceCmd.setCache(cmd.isCache()); - List<Map<String, Object>> maps = null; - try { - maps = cmdService.invoiceRecognition(fileEntity, invoiceCmd); - //todo 淇濆瓨璋冪敤璁板綍 - Long ocrId = null; - String source = ""; - for (Map<String, Object> mm : maps) { - ocrId = Long.parseLong(mm.get("ocrId").toString()); - source = mm.get("source").toString(); - } - cmdService.saveCount(StatisticsCmd.builder() - .fileName(cmd.getFileName()) - .source(source) - .hashId(fileEntity.getHashId()) - .fileID(cmd.getFileID()) - .result("鎴愬姛") - .type(SourceTypeEnum.璇嗗埆.val()) - .accountId(invoiceCmd.getAccountId()) - .param(JSON.toJSONString(invoiceCmd)) - .ocrId(ocrId) - .remark("" + cmd.isCache()) //remark瀛楁鐢ㄤ簬璁板綍鏄惁璋冪敤缂撳瓨 - .build()); - maps = ClaimAuditUtil.excuteSeatPlace(maps, cmd.getFileName(), fileEntity.getHashId(), fileEntity.getFile()); - } catch (Exception e) { - cmdService.saveCount(StatisticsCmd.builder() - .fileName(cmd.getFileName()) - .source("") - .hashId(fileEntity.getHashId()) - .fileID(cmd.getFileID()) - .result("澶辫触锛�" + e.getMessage()) - .type(SourceTypeEnum.璇嗗埆.val()) - .accountId(invoiceCmd.getAccountId()) - .param(JSON.toJSONString(invoiceCmd)) - .ocrId(null) - .remark("" + cmd.isCache()) //remark瀛楁鐢ㄤ簬璁板綍鏄惁璋冪敤缂撳瓨 - .build()); - throw ExceptionUtil.getException(null, e.getMessage()); - } finally { - fileEntity.getFile().delete(); - } - //todo 鎵嬪姩gc - System.gc(); + List<Map<String, Object>> maps = claimAuditTempService.invoiceRecognitionForMultipartFile(fileEntity, invoiceCmd); return maps; } -- GitLab From 763847401cd7cbd2e8e6df9b497c6578746757f9 Mon Sep 17 00:00:00 2001 From: purple7433 <743367900@qq.com> Date: Tue, 9 May 2023 21:12:35 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=A2=9E=E5=8A=A07=E5=A4=A9=E9=AA=8C?= =?UTF-8?q?=E7=9C=9F=E7=9A=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../claimAudit/ClaimAuditQueryService.java | 2 + .../ClaimAuditQueryServiceImpl.java | 62 +++++++++++++++++-- .../controller/ClaimAuditController.java | 4 ++ 3 files changed, 62 insertions(+), 6 deletions(-) diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/query/claimAudit/ClaimAuditQueryService.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/query/claimAudit/ClaimAuditQueryService.java index c2ecf48d..107bda2a 100644 --- a/ServiceSite/src/main/java/com/seasky/seaskyocr/application/query/claimAudit/ClaimAuditQueryService.java +++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/application/query/claimAudit/ClaimAuditQueryService.java @@ -20,6 +20,8 @@ public interface ClaimAuditQueryService { VerifyOut queryStatisticByParam(HeHeInvoiceQry qry); + VerifyOut queryStatisticByParamDaysBefore(HeHeInvoiceQry qry, int day); + BillTypeOut queryInvoiceSettingById(@Valid Query qry); BillTypeOut queryInvoiceSettingByBillType(Query qry); diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/reader/claimAudit/ClaimAuditQueryServiceImpl.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/reader/claimAudit/ClaimAuditQueryServiceImpl.java index d29db422..1b731978 100644 --- a/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/reader/claimAudit/ClaimAuditQueryServiceImpl.java +++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/infrastructure/reader/claimAudit/ClaimAuditQueryServiceImpl.java @@ -32,6 +32,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; +import java.text.SimpleDateFormat; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; @@ -171,18 +172,67 @@ public class ClaimAuditQueryServiceImpl implements ClaimAuditQueryService { .source(SourceEnum.鍚堝悎楠岀湡.val()) .type(SourceTypeEnum.楠岀湡.val()) .param(JSON.toJSONString(qry)).build()); - wrapper.ge("create_date", DateUtil.getDate()+ " 00:00:00") - .le("create_date", DateUtil.getDate()+ " 23:59:59"); + wrapper.ge("create_date", DateUtil.getDate() + " 00:00:00") + .le("create_date", DateUtil.getDate() + " 23:59:59"); wrapper.orderByDesc("create_date"); List<StatisticsPo> statisticsPos = statisticsMapper.selectList(wrapper); - if (statisticsPos.size() == 0){ + if (statisticsPos.size() == 0) { return null; } - String remark = statisticsPos.get(0).getRemark(); - if (StringUtils.isEmpty(remark)){ + for (StatisticsPo statisticsPo : statisticsPos) { + String ocrId = statisticsPo.getOcrId(); + if ("11".equals(ocrId)) { + continue; + } + String remark = statisticsPo.getRemark(); + if (StringUtils.isEmpty(remark)) { + continue; + } + VerifyOut verifyOut = JSON.parseObject(remark, VerifyOut.class); + return verifyOut; + } + return null; + } + + @Override + public VerifyOut queryStatisticByParamDaysBefore(HeHeInvoiceQry qry, int day) { + QueryWrapper<StatisticsPo> wrapper = new QueryWrapper<>(StatisticsPo.builder() + .source(SourceEnum.鍚堝悎楠岀湡.val()) + .type(SourceTypeEnum.楠岀湡.val()) + .param(JSON.toJSONString(qry)).build()); + Date dateBeg = new Date(); + dateBeg = DateUtil.addDate(dateBeg, 5, -day); + SimpleDateFormat sdfDay = new SimpleDateFormat("yyyy-MM-dd"); + String datBegStr = sdfDay.format(dateBeg); + wrapper.ge("create_date", datBegStr + " 00:00:00") + .le("create_date", DateUtil.getDate() + " 23:59:59"); + wrapper.orderByDesc("create_date"); + List<StatisticsPo> statisticsPos = statisticsMapper.selectList(wrapper); + if (statisticsPos.size() == 0) { return null; } - return JSON.parseObject(remark, VerifyOut.class); + for (StatisticsPo statisticsPo : statisticsPos) { + String ocrId = statisticsPo.getOcrId(); + if ("11".equals(ocrId)) { + continue; + } + String remark = statisticsPo.getRemark(); + if (StringUtils.isEmpty(remark)) { + continue; + } + VerifyOut verifyOut = JSON.parseObject(remark, VerifyOut.class); + if ("009".equals(verifyOut.getCode())) { + continue; + } + if ("999".equals(verifyOut.getCode())) { + continue; + } + if ("-1".equals(verifyOut.getCode())) { + continue; + } + return verifyOut; + } + return null; } //todo 淇濆瓨鍚堝悎楠岀湡杩斿洖鐨勬暟鎹� diff --git a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/ClaimAuditController.java b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/ClaimAuditController.java index 973a5a12..c6b18d0e 100644 --- a/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/ClaimAuditController.java +++ b/ServiceSite/src/main/java/com/seasky/seaskyocr/interfaces/controller/ClaimAuditController.java @@ -341,6 +341,10 @@ public class ClaimAuditController implements IClaimAuditController { if (!Objects.isNull(verifyOut)){ return ok(ResponseCode.SUCCESS, verifyOut); } + verifyOut = qryService.queryStatisticByParamDaysBefore(heHeInvoiceQry, 7); + if (!Objects.isNull(verifyOut)){ + return ok(ResponseCode.SUCCESS, verifyOut); + } try { JSONObject jsonObject = qryService.invoiceVerify(heHeInvoiceQry); VerifyOut out = VerifyOut.builder() -- GitLab