From da7c19af6c60b07764163ab290926270c4392e7f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=83=AD=E5=BA=86=E6=B3=B0?=
<12369755+htcloud1@user.noreply.gitee.com>
Date: Sat, 22 Aug 2026 16:27:54 +0800
Subject: [PATCH] =?UTF-8?q?feat(detail):=20=E5=8F=82=E4=BC=9A=E4=BA=BA?=
=?UTF-8?q?=E8=A1=A8=E6=96=B0=E5=A2=9E=20=E5=A2=9E=E5=80=BC=E7=A8=8E?=
=?UTF-8?q?=E5=8F=8A=E9=99=84=E5=8A=A0/=E6=91=98=E8=A6=81/=E7=8E=B0?=
=?UTF-8?q?=E5=9C=BA=E7=85=A7=E7=89=87=203=20=E5=88=97=20+=20=E5=8A=B3?=
=?UTF-8?q?=E5=8A=A1=E5=8D=8F=E8=AE=AE=E5=B1=95=E7=A4=BA,=20=E8=A7=92?=
=?UTF-8?q?=E8=89=B2=3D=E5=8A=B3=E5=8A=A1=E5=BD=A2=E5=BC=8F,=20=E8=B4=B9?=
=?UTF-8?q?=E9=A1=B9=E6=94=B9=E5=90=8D=20=E5=BA=94=E5=8F=91=E9=87=91?=
=?UTF-8?q?=E9=A2=9D/=E4=B8=AA=E7=A8=8E=E7=A8=8E=E9=87=91/=E5=AE=9E?=
=?UTF-8?q?=E5=8F=91=E9=87=91=E9=A2=9D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../business/domain/BizMeetingAttendee.java | 12 +
.../business/BizMeetingAttendeeMapper.xml | 19 +-
ry-h5/.gitignore | 4 +
ry-h5/App.uvue | 51 ++
ry-h5/composables/useCamera.ts | 93 ++++
ry-h5/index.html | 31 ++
ry-h5/main.uts | 9 +
ry-h5/manifest.json | 82 ++++
ry-h5/nginx.conf.example | 44 ++
ry-h5/pages.json | 38 ++
ry-h5/pages/index/index.uvue | 154 +++++++
ry-h5/pages/panorama/index.uvue | 299 ++++++++++++
ry-h5/pages/signin/index.uvue | 299 ++++++++++++
ry-h5/platformConfig.json | 5 +
ry-h5/static/logo.png | Bin 0 -> 4023 bytes
ry-h5/static/overlay/panorama.svg | 18 +
ry-h5/static/overlay/signin.svg | 16 +
ry-h5/uni.scss | 76 +++
ry-h5/utils/camera.ts | 138 ++++++
ry-ocr-java/.gitignore | 38 ++
ry-ocr-java/README.md | 373 +++++++++++++++
ry-ocr-java/pom.xml | 148 ++++++
.../java/com/ruoyi/ocr/OcrApplication.java | 19 +
.../ruoyi/ocr/api/GlobalExceptionHandler.java | 85 ++++
.../java/com/ruoyi/ocr/api/OcrController.java | 181 ++++++++
.../com/ruoyi/ocr/config/OcrProperties.java | 71 +++
.../java/com/ruoyi/ocr/core/CtcDecoder.java | 53 +++
.../com/ruoyi/ocr/core/DbPostProcessor.java | 150 ++++++
.../java/com/ruoyi/ocr/core/Dictionary.java | 56 +++
.../com/ruoyi/ocr/core/ImageProcessor.java | 227 +++++++++
.../java/com/ruoyi/ocr/core/OcrEngine.java | 218 +++++++++
.../java/com/ruoyi/ocr/core/PdfProcessor.java | 86 ++++
.../java/com/ruoyi/ocr/core/TextDetector.java | 156 +++++++
.../com/ruoyi/ocr/core/TextRecognizer.java | 181 ++++++++
.../ocr/exception/OcrTimeoutException.java | 17 +
.../com/ruoyi/ocr/model/HealthResponse.java | 27 ++
.../com/ruoyi/ocr/model/InvoiceFields.java | 68 +++
.../com/ruoyi/ocr/model/InvoiceResult.java | 65 +++
.../java/com/ruoyi/ocr/model/OcrLine.java | 36 ++
.../ruoyi/ocr/model/PathRecognizeRequest.java | 21 +
.../com/ruoyi/ocr/model/QrDecodeResult.java | 31 ++
.../ruoyi/ocr/service/InvoiceExtractor.java | 434 ++++++++++++++++++
.../java/com/ruoyi/ocr/service/QrDecoder.java | 159 +++++++
.../ruoyi/ocr/service/RecognizeService.java | 312 +++++++++++++
.../java/com/ruoyi/ocr/util/AmountUtils.java | 296 ++++++++++++
.../src/main/resources/application.yml | 44 ++
ry-vue3/src/views/manager/MeetingDetail.vue | 51 +-
47 files changed, 4976 insertions(+), 15 deletions(-)
create mode 100644 ry-h5/.gitignore
create mode 100644 ry-h5/App.uvue
create mode 100644 ry-h5/composables/useCamera.ts
create mode 100644 ry-h5/index.html
create mode 100644 ry-h5/main.uts
create mode 100644 ry-h5/manifest.json
create mode 100644 ry-h5/nginx.conf.example
create mode 100644 ry-h5/pages.json
create mode 100644 ry-h5/pages/index/index.uvue
create mode 100644 ry-h5/pages/panorama/index.uvue
create mode 100644 ry-h5/pages/signin/index.uvue
create mode 100644 ry-h5/platformConfig.json
create mode 100644 ry-h5/static/logo.png
create mode 100644 ry-h5/static/overlay/panorama.svg
create mode 100644 ry-h5/static/overlay/signin.svg
create mode 100644 ry-h5/uni.scss
create mode 100644 ry-h5/utils/camera.ts
create mode 100644 ry-ocr-java/.gitignore
create mode 100644 ry-ocr-java/README.md
create mode 100644 ry-ocr-java/pom.xml
create mode 100644 ry-ocr-java/src/main/java/com/ruoyi/ocr/OcrApplication.java
create mode 100644 ry-ocr-java/src/main/java/com/ruoyi/ocr/api/GlobalExceptionHandler.java
create mode 100644 ry-ocr-java/src/main/java/com/ruoyi/ocr/api/OcrController.java
create mode 100644 ry-ocr-java/src/main/java/com/ruoyi/ocr/config/OcrProperties.java
create mode 100644 ry-ocr-java/src/main/java/com/ruoyi/ocr/core/CtcDecoder.java
create mode 100644 ry-ocr-java/src/main/java/com/ruoyi/ocr/core/DbPostProcessor.java
create mode 100644 ry-ocr-java/src/main/java/com/ruoyi/ocr/core/Dictionary.java
create mode 100644 ry-ocr-java/src/main/java/com/ruoyi/ocr/core/ImageProcessor.java
create mode 100644 ry-ocr-java/src/main/java/com/ruoyi/ocr/core/OcrEngine.java
create mode 100644 ry-ocr-java/src/main/java/com/ruoyi/ocr/core/PdfProcessor.java
create mode 100644 ry-ocr-java/src/main/java/com/ruoyi/ocr/core/TextDetector.java
create mode 100644 ry-ocr-java/src/main/java/com/ruoyi/ocr/core/TextRecognizer.java
create mode 100644 ry-ocr-java/src/main/java/com/ruoyi/ocr/exception/OcrTimeoutException.java
create mode 100644 ry-ocr-java/src/main/java/com/ruoyi/ocr/model/HealthResponse.java
create mode 100644 ry-ocr-java/src/main/java/com/ruoyi/ocr/model/InvoiceFields.java
create mode 100644 ry-ocr-java/src/main/java/com/ruoyi/ocr/model/InvoiceResult.java
create mode 100644 ry-ocr-java/src/main/java/com/ruoyi/ocr/model/OcrLine.java
create mode 100644 ry-ocr-java/src/main/java/com/ruoyi/ocr/model/PathRecognizeRequest.java
create mode 100644 ry-ocr-java/src/main/java/com/ruoyi/ocr/model/QrDecodeResult.java
create mode 100644 ry-ocr-java/src/main/java/com/ruoyi/ocr/service/InvoiceExtractor.java
create mode 100644 ry-ocr-java/src/main/java/com/ruoyi/ocr/service/QrDecoder.java
create mode 100644 ry-ocr-java/src/main/java/com/ruoyi/ocr/service/RecognizeService.java
create mode 100644 ry-ocr-java/src/main/java/com/ruoyi/ocr/util/AmountUtils.java
create mode 100644 ry-ocr-java/src/main/resources/application.yml
diff --git a/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/domain/BizMeetingAttendee.java b/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/domain/BizMeetingAttendee.java
index fb48e96..090e86d 100644
--- a/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/domain/BizMeetingAttendee.java
+++ b/ry-api/ruoyi-business/src/main/java/com/ruoyi/business/domain/BizMeetingAttendee.java
@@ -38,6 +38,12 @@ public class BizMeetingAttendee extends BaseEntity {
private BigDecimal feePreTax;
private BigDecimal tax;
private BigDecimal fee;
+ /** 增值税及附加成本 (财务口径: 平台承担的开票税 + 附加税) */
+ private BigDecimal vatAndSurcharge;
+ /** 摘要 (备注/说明) */
+ private String summary;
+ /** 现场照片 (OSS URLs, 多张用逗号分隔) */
+ private String onSitePhotos;
/* ===== 审计 + 签字结果 ===== */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date signedAt;
@@ -97,6 +103,12 @@ public class BizMeetingAttendee extends BaseEntity {
public void setTax(BigDecimal tax) { this.tax = tax; }
public BigDecimal getFee() { return fee; }
public void setFee(BigDecimal fee) { this.fee = fee; }
+ public BigDecimal getVatAndSurcharge() { return vatAndSurcharge; }
+ public void setVatAndSurcharge(BigDecimal vatAndSurcharge) { this.vatAndSurcharge = vatAndSurcharge; }
+ public String getSummary() { return summary; }
+ public void setSummary(String summary) { this.summary = summary; }
+ public String getOnSitePhotos() { return onSitePhotos; }
+ public void setOnSitePhotos(String onSitePhotos) { this.onSitePhotos = onSitePhotos; }
public Date getSignedAt() { return signedAt; }
public void setSignedAt(Date signedAt) { this.signedAt = signedAt; }
public String getSignedIp() { return signedIp; }
diff --git a/ry-api/ruoyi-business/src/main/resources/mapper/business/BizMeetingAttendeeMapper.xml b/ry-api/ruoyi-business/src/main/resources/mapper/business/BizMeetingAttendeeMapper.xml
index 7619993..553773c 100644
--- a/ry-api/ruoyi-business/src/main/resources/mapper/business/BizMeetingAttendeeMapper.xml
+++ b/ry-api/ruoyi-business/src/main/resources/mapper/business/BizMeetingAttendeeMapper.xml
@@ -22,6 +22,9 @@
+
+
+
@@ -49,10 +52,13 @@
insert into biz_meeting_attendee(meeting_id, user_id, name, phone, work_unit, department, title,
id_card, bank_card, bank_name, bank_branch, bank_region, bank_address, account_name,
- id_card_attachments, labor_form, fee_pre_tax, tax, fee, create_by, create_time)
+ id_card_attachments, labor_form, fee_pre_tax, tax, fee, vat_and_surcharge, summary, on_site_photos,
+ create_by, create_time)
values(#{meetingId}, #{userId}, #{name}, #{phone}, #{workUnit}, #{department}, #{title},
#{idCard}, #{bankCard}, #{bankName}, #{bankBranch}, #{bankRegion}, #{bankAddress}, #{accountName},
- #{idCardAttachments}, #{laborForm}, #{feePreTax}, #{tax}, #{fee}, #{createBy}, sysdate())
+ #{idCardAttachments}, #{laborForm}, #{feePreTax}, #{tax}, #{fee},
+ #{vatAndSurcharge}, #{summary}, #{onSitePhotos},
+ #{createBy}, sysdate())
@@ -83,6 +89,9 @@
fee_pre_tax = #{feePreTax},
tax = #{tax},
fee = #{fee},
+ vat_and_surcharge = #{vatAndSurcharge},
+ summary = #{summary},
+ on_site_photos = #{onSitePhotos},
update_by = #{updateBy},
update_time = sysdate()
@@ -125,15 +134,15 @@
delete from biz_meeting_attendee where meeting_id = #{meetingId} and user_id = #{userId}
+
+
+
+
+
+
+
+