From 000e8698a5ca980055671e6021b8dfdeb01d6a8d Mon Sep 17 00:00:00 2001 From: wjj <2069666735@qq.com> Date: Tue, 26 May 2026 16:37:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=B6=89=E7=96=91=E4=BA=A4?= =?UTF-8?q?=E6=98=93=E6=A8=A1=E5=9E=8B=E5=8F=A3=E5=BE=84=E5=92=8C=E6=8A=A5?= =?UTF-8?q?=E5=91=8A=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CcdiProjectOverviewController.java | 4 +- ...cdiProjectSuspiciousTransactionItemVO.java | 2 + .../CcdiProjectOverviewReportPdfExporter.java | 28 ++- .../project/CcdiBankTagAnalysisMapper.xml | 228 +++++++++++++++--- .../project/CcdiProjectOverviewMapper.xml | 92 +++++-- .../CcdiBankTagAnalysisMapperXmlTest.java | 27 ++- .../CcdiProjectOverviewMapperSqlTest.java | 40 +++ ...iProjectOverviewReportPdfExporterTest.java | 17 ++ ...mal-customer-transaction-implementation.md | 65 +++++ ...ome-relative-null-income-implementation.md | 17 ++ .../2026-05-26-dev-ui-submit-checklist.md | 63 +++++ ...26-pull-bank-info-dialog-implementation.md | 24 ++ ...port-pdf-section-spacing-implementation.md | 20 ++ .../components/detail/PreliminaryCheck.vue | 2 +- .../components/detail/RiskDetailSection.vue | 69 +++++- .../components/detail/UploadData.vue | 49 +++- 16 files changed, 672 insertions(+), 75 deletions(-) create mode 100644 docs/reports/implementation/2026-05-21-abnormal-customer-transaction-implementation.md create mode 100644 docs/reports/implementation/2026-05-25-low-income-relative-null-income-implementation.md create mode 100644 docs/reports/implementation/2026-05-26-dev-ui-submit-checklist.md create mode 100644 docs/reports/implementation/2026-05-26-pull-bank-info-dialog-implementation.md create mode 100644 docs/reports/implementation/2026-05-26-report-pdf-section-spacing-implementation.md diff --git a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/controller/CcdiProjectOverviewController.java b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/controller/CcdiProjectOverviewController.java index 2bbc9e4d..cbbc999e 100644 --- a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/controller/CcdiProjectOverviewController.java +++ b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/controller/CcdiProjectOverviewController.java @@ -184,10 +184,10 @@ public class CcdiProjectOverviewController extends BaseController { } /** - * 一键导出结果总览报告 + * 导出结果总览报告 */ @RequestMapping(value = "/report/export", method = { RequestMethod.GET, RequestMethod.POST }) - @Operation(summary = "一键导出结果总览报告") + @Operation(summary = "导出结果总览报告") @PreAuthorize("@ss.hasPermi('ccdi:project:query')") public void exportOverviewReport(HttpServletResponse response, Long projectId) { overviewService.exportOverviewReport(response, projectId); diff --git a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectSuspiciousTransactionItemVO.java b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectSuspiciousTransactionItemVO.java index 736afb79..ac2a834c 100644 --- a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectSuspiciousTransactionItemVO.java +++ b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/domain/vo/CcdiProjectSuspiciousTransactionItemVO.java @@ -33,4 +33,6 @@ public class CcdiProjectSuspiciousTransactionItemVO { private Boolean hasModelRuleHit; private Boolean hasNameListHit; + + private String nameListHitType; } diff --git a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewReportPdfExporter.java b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewReportPdfExporter.java index 2fc11ea6..87790ff8 100644 --- a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewReportPdfExporter.java +++ b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewReportPdfExporter.java @@ -469,6 +469,7 @@ public class CcdiProjectOverviewReportPdfExporter { private static final float SUBSECTION_FONT_SIZE = 12F; private static final float LINE_HEIGHT = 12F; private static final float CELL_PADDING = 5F; + private static final float TABLE_AFTER_GAP = 32F; private final PDDocument document; private final PDType0Font font; @@ -496,7 +497,7 @@ public class CcdiProjectOverviewReportPdfExporter { } void title(String text) throws IOException { - writeLine(text, TITLE_FONT_SIZE, new Color(18, 56, 93), 0F, 28F); + writeLine(text, TITLE_FONT_SIZE, new Color(18, 56, 93), 0F, 28F, true); } void text(String text, float fontSize, Color color) throws IOException { @@ -505,12 +506,12 @@ public class CcdiProjectOverviewReportPdfExporter { void section(String text) throws IOException { ensureSpace(32F); - writeLine(text, SECTION_FONT_SIZE, new Color(18, 56, 93), 0F, 26F); + writeLine(text, SECTION_FONT_SIZE, new Color(18, 56, 93), 0F, 26F, true); } void subsection(String text) throws IOException { ensureSpace(26F); - writeLine(text, SUBSECTION_FONT_SIZE, new Color(51, 65, 85), 0F, 22F); + writeLine(text, SUBSECTION_FONT_SIZE, new Color(51, 65, 85), 0F, 22F, true); } void separator() throws IOException { @@ -557,7 +558,7 @@ public class CcdiProjectOverviewReportPdfExporter { for (List row : safeRows) { drawRow(row, widths, false); } - y -= 8F; + y -= TABLE_AFTER_GAP; } private float[] calculateWidths(float[] ratios) { @@ -632,6 +633,17 @@ public class CcdiProjectOverviewReportPdfExporter { } private void writeLine(String text, float fontSize, Color color, float indent, float advance) throws IOException { + writeLine(text, fontSize, color, indent, advance, false); + } + + private void writeLine( + String text, + float fontSize, + Color color, + float indent, + float advance, + boolean bold + ) throws IOException { ensureSpace(advance); content.beginText(); content.setNonStrokingColor(color); @@ -639,6 +651,14 @@ public class CcdiProjectOverviewReportPdfExporter { content.newLineAtOffset(MARGIN + indent, y); content.showText(text); content.endText(); + if (bold) { + content.beginText(); + content.setNonStrokingColor(color); + content.setFont(font, fontSize); + content.newLineAtOffset(MARGIN + indent + 0.25F, y); + content.showText(text); + content.endText(); + } y -= advance; } diff --git a/ccdi-project/src/main/resources/mapper/ccdi/project/CcdiBankTagAnalysisMapper.xml b/ccdi-project/src/main/resources/mapper/ccdi/project/CcdiBankTagAnalysisMapper.xml index 4c0d8af8..fbc8071a 100644 --- a/ccdi-project/src/main/resources/mapper/ccdi/project/CcdiBankTagAnalysisMapper.xml +++ b/ccdi-project/src/main/resources/mapper/ccdi/project/CcdiBankTagAnalysisMapper.xml @@ -105,36 +105,69 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" not ( - bs.CUSTOMER_ACCOUNT_NAME = '浙江兰溪农村商业银行股份有限公司' - and ( - IFNULL(bs.USER_MEMO, '') LIKE '%代发%' - or IFNULL(bs.USER_MEMO, '') LIKE '%工资%' - or IFNULL(bs.USER_MEMO, '') LIKE '%奖金%' - or IFNULL(bs.USER_MEMO, '') LIKE '%薪酬%' - or IFNULL(bs.USER_MEMO, '') LIKE '%薪金%' - or IFNULL(bs.USER_MEMO, '') LIKE '%补贴%' - or IFNULL(bs.USER_MEMO, '') LIKE '%薪%' - or IFNULL(bs.USER_MEMO, '') LIKE '%年终奖%' - or IFNULL(bs.USER_MEMO, '') LIKE '%年金%' - or IFNULL(bs.USER_MEMO, '') LIKE '%加班费%' - or IFNULL(bs.USER_MEMO, '') LIKE '%劳务费%' - or IFNULL(bs.USER_MEMO, '') LIKE '%劳务外包%' - or IFNULL(bs.USER_MEMO, '') LIKE '%提成%' - or IFNULL(bs.USER_MEMO, '') LIKE '%劳务派遣%' - or IFNULL(bs.USER_MEMO, '') LIKE '%绩效%' - or IFNULL(bs.USER_MEMO, '') LIKE '%酬劳%' - or IFNULL(bs.USER_MEMO, '') LIKE '%PAYROLL%' - or IFNULL(bs.USER_MEMO, '') LIKE '%SALA%' - or IFNULL(bs.USER_MEMO, '') LIKE '%CPF%' - or IFNULL(bs.USER_MEMO, '') LIKE '%directors%fees%' - or IFNULL(bs.USER_MEMO, '') LIKE '%批量代付%' - or IFNULL(bs.CASH_TYPE, '') LIKE '%代发%' - or IFNULL(bs.CASH_TYPE, '') LIKE '%工资%' - or IFNULL(bs.CASH_TYPE, '') LIKE '%劳务费%' + ( + bs.CUSTOMER_ACCOUNT_NAME = '浙江兰溪农村商业银行股份有限公司' + and ( + IFNULL(bs.USER_MEMO, '') LIKE '%代发%' + or IFNULL(bs.USER_MEMO, '') LIKE '%工资%' + or IFNULL(bs.USER_MEMO, '') LIKE '%奖金%' + or IFNULL(bs.USER_MEMO, '') LIKE '%薪酬%' + or IFNULL(bs.USER_MEMO, '') LIKE '%薪金%' + or IFNULL(bs.USER_MEMO, '') LIKE '%补贴%' + or IFNULL(bs.USER_MEMO, '') LIKE '%薪%' + or IFNULL(bs.USER_MEMO, '') LIKE '%年终奖%' + or IFNULL(bs.USER_MEMO, '') LIKE '%年金%' + or IFNULL(bs.USER_MEMO, '') LIKE '%加班费%' + or IFNULL(bs.USER_MEMO, '') LIKE '%劳务费%' + or IFNULL(bs.USER_MEMO, '') LIKE '%劳务外包%' + or IFNULL(bs.USER_MEMO, '') LIKE '%提成%' + or IFNULL(bs.USER_MEMO, '') LIKE '%劳务派遣%' + or IFNULL(bs.USER_MEMO, '') LIKE '%绩效%' + or IFNULL(bs.USER_MEMO, '') LIKE '%酬劳%' + or IFNULL(bs.USER_MEMO, '') LIKE '%PAYROLL%' + or IFNULL(bs.USER_MEMO, '') LIKE '%SALA%' + or IFNULL(bs.USER_MEMO, '') LIKE '%CPF%' + or IFNULL(bs.USER_MEMO, '') LIKE '%directors%fees%' + or IFNULL(bs.USER_MEMO, '') LIKE '%批量代付%' + or IFNULL(bs.CASH_TYPE, '') LIKE '%代发%' + or IFNULL(bs.CASH_TYPE, '') LIKE '%工资%' + or IFNULL(bs.CASH_TYPE, '') LIKE '%劳务费%' + ) + ) + or ( + IFNULL(bs.CUSTOMER_ACCOUNT_NAME, '') LIKE '%公积金中心%' + and ( + IFNULL(bs.USER_MEMO, '') LIKE '%公积金%' + or IFNULL(bs.USER_MEMO, '') LIKE '%批量代付%' + or IFNULL(bs.CASH_TYPE, '') LIKE '%公积金%' + or IFNULL(bs.CASH_TYPE, '') LIKE '%批量代付%' + ) ) ) + + select + staff.id_card as subjectCertNo, + staff.name as subjectName, + '本人' as subjectType + from ccdi_base_staff staff + + union all + + select + relation.relation_cert_no as subjectCertNo, + relation.relation_name as subjectName, + case + when relation.relation_type is not null and trim(relation.relation_type) != '' then relation.relation_type + else '关系人' + end as subjectType + from ccdi_staff_fmy_relation relation + where relation.status = 1 + and relation.relation_cert_no is not null + and trim(relation.relation_cert_no) != '' + + bs.CUSTOMER_ACCOUNT_NAME = '浙江兰溪农村商业银行股份有限公司' and ( @@ -392,12 +425,130 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"