From ac4e02e8c5e615538c2079728be679a2885b7922 Mon Sep 17 00:00:00 2001 From: wkc <978997012@qq.com> Date: Thu, 29 Jan 2026 22:03:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=AD=E4=BB=8B=E6=96=B0=E5=A2=9E=20?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .claude/settings.local.json | 7 +- CLAUDE.md | 4 +- doc/README.md | 66 ++ doc/{ => api}/中介黑名单管理API文档.md | 194 ++++- doc/api/中介黑名单管理API测试报告.md | 271 +++++++ doc/{ => api}/员工信息管理API文档.md | 0 doc/{ => docs}/EasyExcel字典下拉框使用说明.md | 0 doc/docs/中介黑名单弹窗优化设计.md | 153 ++++ .../纪检初核系统功能说明书-V1.0.docx | Bin doc/{ => docs}/纪检初核系统功能说明书-V1.0.md | 0 .../纪检初核系统功能说明书-V1.0.with.image.md | 0 doc/{ => docs}/纪检初核系统模块划分方案.md | 0 doc/{ => docs}/若依环境使用手册.docx | Bin .../ScreenShot_2026-01-29_155814_876.png | Bin 0 -> 50783 bytes doc/other/中介黑名单导入功能修复说明.md | 162 ++++ doc/{ => other}/纪检初核系统-离线演示包.zip | Bin .../纪检初核系统-离线演示包/env/2203.js | 0 ...Xya0fYxmDs8mWSM69pSHMU20260127T00_20260127T001110126Z | 0 .../纪检初核系统-离线演示包/extra/data.0.js | 0 .../纪检初核系统-离线演示包/extra/data.1.js | 0 .../纪检初核系统-离线演示包/extra/data.2.js | 0 .../纪检初核系统-离线演示包/index.html | 0 .../mb-proto2/3.h4vam-vendor-5567a1235ac230e00561.js | 0 .../mb-proto2/4.ekpaa-vendor-4a8c0d8af0989de4a89f.js | 0 .../mb-proto2/4.n9fxu-vendor-121f3fbb2320541a30bc.js | 0 .../mb-proto2/5.7b24m-vendor-c6215ade32c4d6e04f4c.js | 0 .../mb-proto2/5.fxqum-vendor-f8aaf1fb2db7ed4b19df.js | 0 .../mb-proto2/6.3688a-vendor-0d07687f4be09b8b3eca.js | 0 .../mb-proto2/6.3688a-vendor-16f3ece222913e7058d1.css | 0 .../mb-proto2/images/devices/Huawei_mate60.png | Bin .../mb-proto2/images/devices/Huawei_mate60_pro.png | Bin .../mb-proto2/images/devices/Huawei_mate70.png | Bin .../mb-proto2/images/devices/Huawei_mate70_pro.png | Bin .../mb-proto2/images/devices/Huawei_mate70_pro_plus.png | Bin .../mb-proto2/images/devices/Huawei_mateX5_expand.png | Bin .../mb-proto2/images/devices/Huawei_mateX5_fold.png | Bin .../images/devices/Huawei_mateXT_one_screen.png | Bin .../images/devices/Huawei_mateXT_three_screen.png | Bin .../images/devices/Huawei_mateXT_two_screen.png | Bin .../mb-proto2/images/devices/Huawei_mate_book_14s.png | Bin .../mb-proto2/images/devices/Huawei_mate_book_16s.png | Bin .../mb-proto2/images/devices/Huawei_mate_pad_pro_11.png | Bin .../images/devices/Huawei_mate_pad_pro_13_2.png | Bin .../mb-proto2/images/devices/Huawei_watch_gt4_41.png | Bin .../mb-proto2/images/devices/Huawei_watch_gt4_46.png | Bin .../mb-proto2/images/devices/Huawei_watch_gt5_41.png | Bin .../mb-proto2/images/devices/Huawei_watch_gt5_46.png | Bin .../mb-proto2/images/devices/Huawei_wristband_8.png | Bin .../mb-proto2/images/devices/Huawei_wristband_9.png | Bin .../mb-proto2/images/devices/Xiaomi_14.png | Bin .../mb-proto2/images/devices/Xiaomi_15.png | Bin .../mb-proto2/images/devices/Xiaomi_wristband_8.png | Bin .../mb-proto2/images/devices/Xiaomi_wristband_9.png | Bin .../mb-proto2/images/devices/apple_watch_38.png | Bin .../mb-proto2/images/devices/apple_watch_40.png | Bin .../mb-proto2/images/devices/apple_watch_42.png | Bin .../mb-proto2/images/devices/apple_watch_44.png | Bin .../mb-proto2/images/devices/apple_watch_9_41.png | Bin .../mb-proto2/images/devices/apple_watch_9_45.png | Bin .../mb-proto2/images/devices/apple_watch_se_40.png | Bin .../mb-proto2/images/devices/apple_watch_se_44.png | Bin .../mb-proto2/images/devices/apple_watch_ultra_2_49.png | Bin .../mb-proto2/images/devices/car_play.png | Bin .../mb-proto2/images/devices/desktop.png | Bin .../mb-proto2/images/devices/desktop_1920.png | Bin .../mb-proto2/images/devices/google_pixel_2.png | Bin .../mb-proto2/images/devices/google_pixel_2_xl.png | Bin .../mb-proto2/images/devices/huawei_p40.png | Bin .../mb-proto2/images/devices/huawei_p40_v2.png | Bin .../mb-proto2/images/devices/huawei_p9.png | Bin .../mb-proto2/images/devices/imac.png | Bin .../mb-proto2/images/devices/imac_2023.png | Bin .../mb-proto2/images/devices/industrial_hmi_16_10.png | Bin .../mb-proto2/images/devices/industrial_hmi_16_9.png | Bin .../mb-proto2/images/devices/industrial_hmi_4_3.png | Bin .../mb-proto2/images/devices/ipad.png | Bin .../mb-proto2/images/devices/ipad_2023.png | Bin .../mb-proto2/images/devices/ipad_mini.png | Bin .../mb-proto2/images/devices/ipad_pro.png | Bin .../mb-proto2/images/devices/ipad_pro_11.png | Bin .../mb-proto2/images/devices/ipad_pro_12.png | Bin .../mb-proto2/images/devices/iphone_11.png | Bin .../mb-proto2/images/devices/iphone_12.png | Bin .../mb-proto2/images/devices/iphone_12_pro_max.png | Bin .../mb-proto2/images/devices/iphone_13.png | Bin .../mb-proto2/images/devices/iphone_13_mini.png | Bin .../mb-proto2/images/devices/iphone_13_pro_max.png | Bin .../mb-proto2/images/devices/iphone_14.png | Bin .../mb-proto2/images/devices/iphone_14_plus.png | Bin .../mb-proto2/images/devices/iphone_14_pro_max.png | Bin .../mb-proto2/images/devices/iphone_15.png | Bin .../mb-proto2/images/devices/iphone_15_plus.png | Bin .../mb-proto2/images/devices/iphone_15_pro.png | Bin .../mb-proto2/images/devices/iphone_15_pro_max.png | Bin .../mb-proto2/images/devices/iphone_16.png | Bin .../mb-proto2/images/devices/iphone_16_plus.png | Bin .../mb-proto2/images/devices/iphone_16_pro.png | Bin .../mb-proto2/images/devices/iphone_16_pro_max.png | Bin .../mb-proto2/images/devices/iphone_17.png | Bin .../mb-proto2/images/devices/iphone_17_pro.png | Bin .../mb-proto2/images/devices/iphone_17_pro_max.png | Bin .../mb-proto2/images/devices/iphone_7.png | Bin .../mb-proto2/images/devices/iphone_7_plus.png | Bin .../mb-proto2/images/devices/iphone_air.png | Bin .../mb-proto2/images/devices/iphone_se.png | Bin .../mb-proto2/images/devices/iphone_x.png | Bin .../mb-proto2/images/devices/iphone_xs_max.png | Bin .../mb-proto2/images/devices/mac_book_air_13.png | Bin .../mb-proto2/images/devices/mac_book_pro.png | Bin .../mb-proto2/images/devices/mac_book_pro_14.png | Bin .../mb-proto2/images/devices/mac_book_pro_16.png | Bin .../mb-proto2/images/devices/nexus_5.png | Bin .../mb-proto2/images/devices/samsung_galaxy_s23.png | Bin .../mb-proto2/images/devices/samsung_s7.png | Bin .../mb-proto2/images/devices/sony_w850c.png | Bin .../mb-proto2/images/devices/tesla_car_play_hmi.png | Bin .../mb-proto2/images/mktWM/watermark_m.svg | 0 .../mb-proto2/images/mktWM/watermark_s.svg | 0 .../mb-proto2/lazy-lib-dl-906655530ecd54e72602.js | 0 .../mb-proto2/lazy-lib-fontkit-94d1920236ee8aff3185.js | 0 .../mb-proto2/lazy-lib-i18n-4c3a2d14ad63ee44927b.js | 0 .../mb-proto2/lazy-lib-paper-5a9908939d850d4cae67.js | 0 .../mb-proto2/lazy-lib-rehype-013772de7c49f3c667fa.js | 0 .../mb-proto2/preview-html-zip-40b1c65b44de21c4ab8a.js | 0 .../mb-proto2/preview-html-zip-f0d9de76208db26b1137.css | 0 .../mb-proto2/res-custom-41be04f25a7d92ab86c8.woff | Bin .../mb-proto2/res-dora-6079e0b71b8a8652eb1b.woff | Bin .../mb-proto2/res-font-awesome-f691f37e57f04c152e23.woff | Bin .../mb-proto2/res-material-83bebaf37c09c7e1c3ee.woff | Bin .../mb-proto2/res-mb-icons-9615a49d65d72a59aa3a.woff | Bin .../mb-static/2308/core-js-3.32.1/modern.js | 0 .../mb-static/2410/echarts-map/loadMap.js | 0 .../mb-static/2509/loading-logo.gif | Bin .../mb-static/2509/loading.gif | Bin .../mb-static/2509/logo-rect-dark.svg | 0 .../mb-static/2509/logo-rect-light.svg | 0 .../mb-static/2509/logo-rect.svg | 0 .../mb-static/2509/logo-text.svg | 0 .../uploads7/images/14128/141282287/v2_smx0cl.png | Bin .../纪检初核系统-离线演示包/总览模式.html | 0 .../纪检初核系统-离线演示包/标注模式.html | 0 .../纪检初核系统-离线演示包/演示模式.html | 0 doc/scripts/README.md | 135 ++++ doc/scripts/generate_test_data.py | 193 +++++ doc/scripts/package.json | 19 + doc/scripts/test_import.py | 97 +++ doc/scripts/test_import_simple.py | 57 ++ doc/scripts/test_intermediary_blacklist.sh | 663 ++++++++++++++++ doc/scripts/test_intermediary_complete.sh | 352 +++++++++ doc/scripts/test_intermediary_dialog.js | 465 ++++++++++++ doc/scripts/test_intermediary_edit_fix.bat | 107 +++ doc/scripts/test_intermediary_edit_fix.sh | 100 +++ doc/scripts/test_intermediary_getinfo.sh | 114 +++ doc/scripts/test_intermediary_type_fix.bat | 205 +++++ doc/scripts/test_intermediary_type_fix.sh | 271 +++++++ .../test10_query_by_type_response.json | 147 ++++ .../test11_query_by_status_response.json | 21 + .../test_output/test1_list_response.json | 147 ++++ .../test2_add_person_response.json | 4 + .../test3_add_entity_response.json | 4 + .../test_output/test4_get_info_response.json | 33 + .../test_output/test5_edit_response.json | 4 + doc/scripts/test_output/test6_export.xlsx | Bin 0 -> 71855 bytes .../test_output/test7_person_template.xlsx | Bin 0 -> 4008 bytes .../test_output/test8_entity_template.xlsx | Bin 0 -> 4118 bytes .../test_output/test9_remove_response.json | 4 + .../test_report_20260129_164311.txt | 96 +++ doc/scripts/test_uniqueness_validation.py | 308 ++++++++ doc/test-data/generate_org_data.py | 192 +++++ doc/test-data/test_import_fix.py | 268 +++++++ .../~$机构中介黑名单测试数据_1000条.xlsx | Bin 0 -> 165 bytes .../个人中介黑名单模板_1769667622015.xlsx | Bin 0 -> 4007 bytes .../个人中介黑名单测试数据_1000条.xlsx | Bin 0 -> 95706 bytes .../个人中介黑名单测试数据_1000条_第2批.xlsx | Bin 0 -> 96148 bytes doc/{ => test-data}/中介主体信息表.csv | 0 doc/{ => test-data}/中介人员信息表.csv | 0 .../机构中介黑名单模板_1769674571626.xlsx | Bin 0 -> 4117 bytes .../机构中介黑名单测试数据_1000条.xlsx | Bin 0 -> 127652 bytes .../机构中介黑名单测试数据_1000条_第2批.xlsx | Bin 0 -> 126775 bytes .../design.md | 715 ++++++++++++++++++ .../proposal.md | 159 ++++ .../specs/frontend-api-layer/spec.md | 67 ++ .../specs/frontend-detail-view/spec.md | 58 ++ .../specs/frontend-form-enhancement/spec.md | 139 ++++ .../tasks.md | 139 ++++ .../dpc/controller/DpcEnumController.java | 154 ++++ .../DpcIntermediaryBlacklistController.java | 60 +- .../dpc/domain/DpcIntermediaryBlacklist.java | 5 + .../dto/DpcIntermediaryBlacklistAddDTO.java | 12 - .../dto/DpcIntermediaryBlacklistEditDTO.java | 293 +++++++ .../dto/DpcIntermediaryEntityAddDTO.java | 164 +--- .../dto/DpcIntermediaryEntityEditDTO.java | 89 +++ .../dto/DpcIntermediaryPersonAddDTO.java | 153 +--- .../dto/DpcIntermediaryPersonEditDTO.java | 76 ++ .../com/ruoyi/dpc/domain/vo/EnumOptionVO.java | 28 + .../java/com/ruoyi/dpc/enums/CertType.java | 41 + .../java/com/ruoyi/dpc/enums/CorpNature.java | 53 ++ .../java/com/ruoyi/dpc/enums/CorpType.java | 56 ++ .../com/ruoyi/dpc/enums/IndivSubType.java | 50 ++ .../java/com/ruoyi/dpc/enums/IndivType.java | 44 ++ .../com/ruoyi/dpc/enums/RelationType.java | 53 ++ .../DpcIntermediaryBlacklistMapper.java | 19 + .../IDpcIntermediaryBlacklistService.java | 44 +- .../DpcIntermediaryBlacklistServiceImpl.java | 397 ++++++++-- .../dpc/DpcIntermediaryBlacklistMapper.xml | 134 ++++ ruoyi-ui/src/api/dpcEnum.js | 101 +++ ruoyi-ui/src/api/dpcIntermediary.js | 81 +- .../dpcIntermediary/components/DataTable.vue | 82 ++ .../components/DetailDialog.vue | 79 ++ .../dpcIntermediary/components/EditDialog.vue | 639 ++++++++++++++++ .../components/ImportDialog.vue | 303 ++++++++ .../dpcIntermediary/components/SearchForm.vue | 65 ++ ruoyi-ui/src/views/dpcIntermediary/index.vue | 448 +++++------ .../dpcIntermediary/test_edit_dialog_fix.html | 205 +++++ 214 files changed, 9397 insertions(+), 671 deletions(-) create mode 100644 doc/README.md rename doc/{ => api}/中介黑名单管理API文档.md (62%) create mode 100644 doc/api/中介黑名单管理API测试报告.md rename doc/{ => api}/员工信息管理API文档.md (100%) rename doc/{ => docs}/EasyExcel字典下拉框使用说明.md (100%) create mode 100644 doc/docs/中介黑名单弹窗优化设计.md rename doc/{ => docs}/纪检初核系统功能说明书-V1.0.docx (100%) rename doc/{ => docs}/纪检初核系统功能说明书-V1.0.md (100%) rename doc/{ => docs}/纪检初核系统功能说明书-V1.0.with.image.md (100%) rename doc/{ => docs}/纪检初核系统模块划分方案.md (100%) rename doc/{ => docs}/若依环境使用手册.docx (100%) create mode 100644 doc/other/ScreenShot_2026-01-29_155814_876.png create mode 100644 doc/other/中介黑名单导入功能修复说明.md rename doc/{ => other}/纪检初核系统-离线演示包.zip (100%) rename doc/{ => other}/纪检初核系统-离线演示包/env/2203.js (100%) rename doc/{ => other}/纪检初核系统-离线演示包/extra/TAG_V3NXya0fYxmDs8mWSM69pSHMU20260127T00_20260127T001110126Z (100%) rename doc/{ => other}/纪检初核系统-离线演示包/extra/data.0.js (100%) rename doc/{ => other}/纪检初核系统-离线演示包/extra/data.1.js (100%) rename doc/{ => other}/纪检初核系统-离线演示包/extra/data.2.js (100%) rename doc/{ => other}/纪检初核系统-离线演示包/index.html (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/3.h4vam-vendor-5567a1235ac230e00561.js (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/4.ekpaa-vendor-4a8c0d8af0989de4a89f.js (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/4.n9fxu-vendor-121f3fbb2320541a30bc.js (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/5.7b24m-vendor-c6215ade32c4d6e04f4c.js (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/5.fxqum-vendor-f8aaf1fb2db7ed4b19df.js (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/6.3688a-vendor-0d07687f4be09b8b3eca.js (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/6.3688a-vendor-16f3ece222913e7058d1.css (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate60.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate60_pro.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate70.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate70_pro.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate70_pro_plus.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mateX5_expand.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mateX5_fold.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mateXT_one_screen.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mateXT_three_screen.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mateXT_two_screen.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate_book_14s.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate_book_16s.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate_pad_pro_11.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate_pad_pro_13_2.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_watch_gt4_41.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_watch_gt4_46.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_watch_gt5_41.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_watch_gt5_46.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_wristband_8.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_wristband_9.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/Xiaomi_14.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/Xiaomi_15.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/Xiaomi_wristband_8.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/Xiaomi_wristband_9.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_38.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_40.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_42.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_44.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_9_41.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_9_45.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_se_40.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_se_44.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_ultra_2_49.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/car_play.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/desktop.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/desktop_1920.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/google_pixel_2.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/google_pixel_2_xl.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/huawei_p40.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/huawei_p40_v2.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/huawei_p9.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/imac.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/imac_2023.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/industrial_hmi_16_10.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/industrial_hmi_16_9.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/industrial_hmi_4_3.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/ipad.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/ipad_2023.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/ipad_mini.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/ipad_pro.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/ipad_pro_11.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/ipad_pro_12.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_11.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_12.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_12_pro_max.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_13.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_13_mini.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_13_pro_max.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_14.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_14_plus.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_14_pro_max.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_15.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_15_plus.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_15_pro.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_15_pro_max.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_16.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_16_plus.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_16_pro.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_16_pro_max.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_17.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_17_pro.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_17_pro_max.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_7.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_7_plus.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_air.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_se.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_x.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_xs_max.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/mac_book_air_13.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/mac_book_pro.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/mac_book_pro_14.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/mac_book_pro_16.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/nexus_5.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/samsung_galaxy_s23.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/samsung_s7.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/sony_w850c.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/devices/tesla_car_play_hmi.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/mktWM/watermark_m.svg (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/images/mktWM/watermark_s.svg (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/lazy-lib-dl-906655530ecd54e72602.js (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/lazy-lib-fontkit-94d1920236ee8aff3185.js (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/lazy-lib-i18n-4c3a2d14ad63ee44927b.js (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/lazy-lib-paper-5a9908939d850d4cae67.js (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/lazy-lib-rehype-013772de7c49f3c667fa.js (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/preview-html-zip-40b1c65b44de21c4ab8a.js (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/preview-html-zip-f0d9de76208db26b1137.css (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/res-custom-41be04f25a7d92ab86c8.woff (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/res-dora-6079e0b71b8a8652eb1b.woff (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/res-font-awesome-f691f37e57f04c152e23.woff (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/res-material-83bebaf37c09c7e1c3ee.woff (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-proto2/res-mb-icons-9615a49d65d72a59aa3a.woff (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-static/2308/core-js-3.32.1/modern.js (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-static/2410/echarts-map/loadMap.js (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-static/2509/loading-logo.gif (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-static/2509/loading.gif (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-static/2509/logo-rect-dark.svg (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-static/2509/logo-rect-light.svg (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-static/2509/logo-rect.svg (100%) rename doc/{ => other}/纪检初核系统-离线演示包/mb-static/2509/logo-text.svg (100%) rename doc/{ => other}/纪检初核系统-离线演示包/uploads7/images/14128/141282287/v2_smx0cl.png (100%) rename doc/{ => other}/纪检初核系统-离线演示包/总览模式.html (100%) rename doc/{ => other}/纪检初核系统-离线演示包/标注模式.html (100%) rename doc/{ => other}/纪检初核系统-离线演示包/演示模式.html (100%) create mode 100644 doc/scripts/README.md create mode 100644 doc/scripts/generate_test_data.py create mode 100644 doc/scripts/package.json create mode 100644 doc/scripts/test_import.py create mode 100644 doc/scripts/test_import_simple.py create mode 100644 doc/scripts/test_intermediary_blacklist.sh create mode 100644 doc/scripts/test_intermediary_complete.sh create mode 100644 doc/scripts/test_intermediary_dialog.js create mode 100644 doc/scripts/test_intermediary_edit_fix.bat create mode 100644 doc/scripts/test_intermediary_edit_fix.sh create mode 100644 doc/scripts/test_intermediary_getinfo.sh create mode 100644 doc/scripts/test_intermediary_type_fix.bat create mode 100644 doc/scripts/test_intermediary_type_fix.sh create mode 100644 doc/scripts/test_output/test10_query_by_type_response.json create mode 100644 doc/scripts/test_output/test11_query_by_status_response.json create mode 100644 doc/scripts/test_output/test1_list_response.json create mode 100644 doc/scripts/test_output/test2_add_person_response.json create mode 100644 doc/scripts/test_output/test3_add_entity_response.json create mode 100644 doc/scripts/test_output/test4_get_info_response.json create mode 100644 doc/scripts/test_output/test5_edit_response.json create mode 100644 doc/scripts/test_output/test6_export.xlsx create mode 100644 doc/scripts/test_output/test7_person_template.xlsx create mode 100644 doc/scripts/test_output/test8_entity_template.xlsx create mode 100644 doc/scripts/test_output/test9_remove_response.json create mode 100644 doc/scripts/test_output/test_report_20260129_164311.txt create mode 100644 doc/scripts/test_uniqueness_validation.py create mode 100644 doc/test-data/generate_org_data.py create mode 100644 doc/test-data/test_import_fix.py create mode 100644 doc/test-data/~$机构中介黑名单测试数据_1000条.xlsx create mode 100644 doc/test-data/个人中介黑名单模板_1769667622015.xlsx create mode 100644 doc/test-data/个人中介黑名单测试数据_1000条.xlsx create mode 100644 doc/test-data/个人中介黑名单测试数据_1000条_第2批.xlsx rename doc/{ => test-data}/中介主体信息表.csv (100%) rename doc/{ => test-data}/中介人员信息表.csv (100%) create mode 100644 doc/test-data/机构中介黑名单模板_1769674571626.xlsx create mode 100644 doc/test-data/机构中介黑名单测试数据_1000条.xlsx create mode 100644 doc/test-data/机构中介黑名单测试数据_1000条_第2批.xlsx create mode 100644 openspec/changes/sync-intermediary-frontend-with-detailed-fields/design.md create mode 100644 openspec/changes/sync-intermediary-frontend-with-detailed-fields/proposal.md create mode 100644 openspec/changes/sync-intermediary-frontend-with-detailed-fields/specs/frontend-api-layer/spec.md create mode 100644 openspec/changes/sync-intermediary-frontend-with-detailed-fields/specs/frontend-detail-view/spec.md create mode 100644 openspec/changes/sync-intermediary-frontend-with-detailed-fields/specs/frontend-form-enhancement/spec.md create mode 100644 openspec/changes/sync-intermediary-frontend-with-detailed-fields/tasks.md create mode 100644 ruoyi-dpc/src/main/java/com/ruoyi/dpc/controller/DpcEnumController.java create mode 100644 ruoyi-dpc/src/main/java/com/ruoyi/dpc/domain/dto/DpcIntermediaryEntityEditDTO.java create mode 100644 ruoyi-dpc/src/main/java/com/ruoyi/dpc/domain/dto/DpcIntermediaryPersonEditDTO.java create mode 100644 ruoyi-dpc/src/main/java/com/ruoyi/dpc/domain/vo/EnumOptionVO.java create mode 100644 ruoyi-dpc/src/main/java/com/ruoyi/dpc/enums/CertType.java create mode 100644 ruoyi-dpc/src/main/java/com/ruoyi/dpc/enums/CorpNature.java create mode 100644 ruoyi-dpc/src/main/java/com/ruoyi/dpc/enums/CorpType.java create mode 100644 ruoyi-dpc/src/main/java/com/ruoyi/dpc/enums/IndivSubType.java create mode 100644 ruoyi-dpc/src/main/java/com/ruoyi/dpc/enums/IndivType.java create mode 100644 ruoyi-dpc/src/main/java/com/ruoyi/dpc/enums/RelationType.java create mode 100644 ruoyi-dpc/src/main/resources/mapper/dpc/DpcIntermediaryBlacklistMapper.xml create mode 100644 ruoyi-ui/src/api/dpcEnum.js create mode 100644 ruoyi-ui/src/views/dpcIntermediary/components/DataTable.vue create mode 100644 ruoyi-ui/src/views/dpcIntermediary/components/DetailDialog.vue create mode 100644 ruoyi-ui/src/views/dpcIntermediary/components/EditDialog.vue create mode 100644 ruoyi-ui/src/views/dpcIntermediary/components/ImportDialog.vue create mode 100644 ruoyi-ui/src/views/dpcIntermediary/components/SearchForm.vue create mode 100644 ruoyi-ui/src/views/dpcIntermediary/test_edit_dialog_fix.html diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 8326344..4a45d57 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -25,7 +25,12 @@ "Bash(javac:*)", "Bash(unzip:*)", "Bash(chcp:*)", - "Skill(superpowers:brainstorming)" + "Skill(superpowers:brainstorming)", + "Bash(pip install:*)", + "Skill(superpowers:using-superpowers)", + "Bash(tree:*)", + "Skill(docx)", + "Bash(bash:*)" ] }, "enabledMcpjsonServers": [ diff --git a/CLAUDE.md b/CLAUDE.md index 5cf45ef..a6672bf 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -35,16 +35,18 @@ ### 前端代码 - 在添加页面和组件后,注意与数据库中菜单表进行联动修改 +- 前端组件代码需要组件化,复杂的组件需要进行拆分为单独的文件 ## 运行 - 使用mcp:dpc_intermediary_blacklist进行数据库相关操作 -- 使用根目录中的ry.bat控制后端的启动,不要自行在命令行中启动后端 +- 不要在命令行中启动后端进行测试 - 测试方式为生成可执行的测试脚本 - 测试脚本在运行完成后需要保存所有接口输出并生成测试用例报告 - /login/test接口可以传入username和password获取token,用于测试验证接口的功能。 用于测试的账号:username: admin password admin123 - swagger-ui的地址为/swagger-ui/index.html +- 在向doc文件夹添加文件时需要分门别类添加,根据 This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. diff --git a/doc/README.md b/doc/README.md new file mode 100644 index 0000000..769b763 --- /dev/null +++ b/doc/README.md @@ -0,0 +1,66 @@ +# 文档目录结构 + +本目录包含纪检初核系统的各类文档、测试数据和脚本。 + +## 目录说明 + +### 📁 docs/ +项目文档目录 +- `纪检初核系统功能说明书-V1.0.docx/md` - 系统功能说明书 +- `纪检初核系统模块划分方案.md` - 模块划分方案 +- `若依环境使用手册.docx` - 若依框架使用手册 +- `中介黑名单弹窗优化设计.md` - UI设计文档 +- `EasyExcel字典下拉框使用说明.md` - Excel导入使用说明 + +### 📁 api/ +API接口文档目录 +- `员工信息管理API文档.md` - 员工信息管理模块API +- `中介黑名单管理API文档.md` - 中介黑名单管理模块API + +### 📁 scripts/ +测试脚本目录 +- `test_import.py` - 导入功能测试脚本 +- `test_import_simple.py` - 简单导入测试脚本 +- `test_uniqueness_validation.py` - 唯一性校验测试脚本 +- `generate_test_data.py` - 测试数据生成脚本 + +### 📁 test-data/ +测试数据目录 +- `个人中介黑名单模板_1769667622015.xlsx` - 导入模板 +- `个人中介黑名单测试数据_1000条.xlsx` - 测试数据(第1批) +- `个人中介黑名单测试数据_1000条_第2批.xlsx` - 测试数据(第2批) +- `中介人员信息表.csv` - 中介人员数据 +- `中介主体信息表.csv` - 中介主体数据 + +### 📁 other/ +其他文件目录 +- `纪检初核系统-离线演示包/` - 离线演示包(解压版) +- `纪检初核系统-离线演示包.zip` - 离线演示包(压缩版) +- `ScreenShot_*.png` - 截图文件 + +### 📁 modules/ +模块设计文档目录 +- `01-项目管理模块/` - 项目管理模块文档 +- `02-项目工作台/` - 项目工作台模块文档 +- `03-信息维护模块.md` - 信息维护模块文档 +- `04-参数配置模块.md` - 参数配置模块文档 +- `05-系统管理模块.md` - 系统管理模块文档 + +## 使用说明 + +### 生成测试数据 +```bash +cd doc/scripts +python generate_test_data.py +``` + +### 运行测试脚本 +```bash +cd doc/scripts +python test_uniqueness_validation.py +``` + +### 导入测试数据 +1. 从 `test-data/` 目录下载对应的Excel文件 +2. 在系统页面点击"导入"按钮 +3. 选择文件并上传 diff --git a/doc/中介黑名单管理API文档.md b/doc/api/中介黑名单管理API文档.md similarity index 62% rename from doc/中介黑名单管理API文档.md rename to doc/api/中介黑名单管理API文档.md index b7c9906..f1b86ca 100644 --- a/doc/中介黑名单管理API文档.md +++ b/doc/api/中介黑名单管理API文档.md @@ -134,7 +134,9 @@ ### 3. 新增中介黑名单 -**接口地址**: `POST /dpc/intermediary` +#### 3.1 新增个人中介黑名单 + +**接口地址**: `POST /dpc/intermediary/person` **权限要求**: `dpc:intermediary:add` @@ -143,7 +145,15 @@ { "name": "张三", "certificateNo": "110101199001011234", - "intermediaryType": "1", + "indivType": "中介", + "indivSubType": "本人", + "indivGender": "M", + "indivCertType": "身份证", + "indivPhone": "13800138000", + "indivWechat": "zhangsan", + "indivAddress": "北京市朝阳区", + "indivCompany": "XX公司", + "indivPosition": "经纪人", "status": "0", "remark": "测试数据" } @@ -153,9 +163,19 @@ | 字段名 | 类型 | 必填 | 说明 | |--------|------|------|------| -| name | String | 是 | 姓名/机构名称 | -| certificateNo | String | 是 | 证件号/统一社会信用代码 | -| intermediaryType | String | 是 | 中介类型(1=个人, 2=机构) | +| name | String | 是 | 姓名 | +| certificateNo | String | 是 | 证件号 | +| indivType | String | 否 | 人员类型 | +| indivSubType | String | 否 | 人员子类型 | +| indivGender | String | 否 | 性别(M男 F女 O其他) | +| indivCertType | String | 否 | 证件类型 | +| indivPhone | String | 否 | 手机号码 | +| indivWechat | String | 否 | 微信号 | +| indivAddress | String | 否 | 联系地址 | +| indivCompany | String | 否 | 所在公司 | +| indivPosition | String | 否 | 职位/职务 | +| indivRelatedId | String | 否 | 关联人员ID | +| indivRelation | String | 否 | 关联关系 | | status | String | 是 | 状态(0=正常, 1=停用) | | remark | String | 否 | 备注 | @@ -167,11 +187,72 @@ } ``` +#### 3.2 新增机构中介黑名单 + +**接口地址**: `POST /dpc/intermediary/entity` + +**权限要求**: `dpc:intermediary:add` + +**请求体**: +```json +{ + "name": "XX中介公司", + "corpCreditCode": "91110000XXXXXXXXXX", + "corpType": "有限责任公司", + "corpNature": "民企", + "corpIndustryCategory": "房地产", + "corpIndustry": "房地产业", + "corpEstablishDate": "2020-01-01", + "corpAddress": "北京市朝阳区", + "corpLegalRep": "张三", + "corpLegalCertType": "身份证", + "corpLegalCertNo": "110101199001011234", + "corpShareholder1": "李四", + "corpShareholder2": "王五", + "status": "0", + "remark": "测试数据" +} +``` + +**字段说明**: + +| 字段名 | 类型 | 必填 | 说明 | +|--------|------|------|------| +| name | String | 是 | 机构名称 | +| corpCreditCode | String | 是 | 统一社会信用代码 | +| corpType | String | 否 | 主体类型 | +| corpNature | String | 否 | 企业性质 | +| corpIndustryCategory | String | 否 | 行业分类 | +| corpIndustry | String | 否 | 所属行业 | +| corpEstablishDate | Date | 否 | 成立日期 | +| corpAddress | String | 否 | 注册地址 | +| corpLegalRep | String | 否 | 法定代表人 | +| corpLegalCertType | String | 否 | 法定代表人证件类型 | +| corpLegalCertNo | String | 否 | 法定代表人证件号码 | +| corpShareholder1-5 | String | 否 | 股东信息 | +| status | String | 是 | 状态(0=正常, 1=停用) | +| remark | String | 否 | 备注 | + +**响应示例**: +```json +{ + "code": 200, + "msg": "操作成功" +} +``` + +**注意**: +- 中介类型由系统自动设置,无需手动传递 +- 新增个人中介时,机构专属字段会被自动忽略 +- 新增机构中介时,证件号自动使用统一社会信用代码 + --- ### 4. 修改中介黑名单 -**接口地址**: `PUT /dpc/intermediary` +#### 4.1 修改个人中介黑名单 + +**接口地址**: `PUT /dpc/intermediary/person` **权限要求**: `dpc:intermediary:edit` @@ -181,13 +262,42 @@ "intermediaryId": 1, "name": "张三", "certificateNo": "110101199001011234", - "intermediaryType": "1", + "indivType": "中介", + "indivSubType": "本人", + "indivGender": "M", + "indivCertType": "身份证", + "indivPhone": "13800138000", + "indivWechat": "zhangsan", + "indivAddress": "北京市朝阳区", + "indivCompany": "XX公司", + "indivPosition": "经纪人", + "indivRelatedId": null, + "indivRelation": null, "status": "0", "remark": "测试数据" } ``` -**字段说明**: 与新增接口相同,intermediaryId 为必填项。 +**字段说明**: + +| 字段名 | 类型 | 必填 | 说明 | +|--------|------|------|------| +| intermediaryId | Long | 是 | 中介ID | +| name | String | 是 | 姓名 | +| certificateNo | String | 否 | 证件号 | +| indivType | String | 否 | 人员类型 | +| indivSubType | String | 否 | 人员子类型 | +| indivGender | String | 否 | 性别(M男 F女 O其他) | +| indivCertType | String | 否 | 证件类型 | +| indivPhone | String | 否 | 手机号码 | +| indivWechat | String | 否 | 微信号 | +| indivAddress | String | 否 | 联系地址 | +| indivCompany | String | 否 | 所在公司 | +| indivPosition | String | 否 | 职位/职务 | +| indivRelatedId | String | 否 | 关联人员ID | +| indivRelation | String | 否 | 关联关系 | +| status | String | 是 | 状态(0=正常, 1=停用) | +| remark | String | 否 | 备注 | **响应示例**: ```json @@ -197,6 +307,72 @@ } ``` +#### 4.2 修改机构中介黑名单 + +**接口地址**: `PUT /dpc/intermediary/entity` + +**权限要求**: `dpc:intermediary:edit` + +**请求体**: +```json +{ + "intermediaryId": 2, + "name": "XX中介公司", + "certificateNo": "91110000XXXXXXXXXX", + "corpCreditCode": "91110000XXXXXXXXXX", + "corpType": "有限责任公司", + "corpNature": "民企", + "corpIndustryCategory": "房地产", + "corpIndustry": "房地产业", + "corpEstablishDate": "2020-01-01", + "corpAddress": "北京市朝阳区", + "corpLegalRep": "张三", + "corpLegalCertType": "身份证", + "corpLegalCertNo": "110101199001011234", + "corpShareholder1": "李四", + "corpShareholder2": "王五", + "corpShareholder3": null, + "corpShareholder4": null, + "corpShareholder5": null, + "status": "0", + "remark": "测试数据" +} +``` + +**字段说明**: + +| 字段名 | 类型 | 必填 | 说明 | +|--------|------|------|------| +| intermediaryId | Long | 是 | 中介ID | +| name | String | 是 | 机构名称 | +| certificateNo | String | 否 | 证件号(统一社会信用代码) | +| corpCreditCode | String | 否 | 统一社会信用代码 | +| corpType | String | 否 | 主体类型 | +| corpNature | String | 否 | 企业性质 | +| corpIndustryCategory | String | 否 | 行业分类 | +| corpIndustry | String | 否 | 所属行业 | +| corpEstablishDate | Date | 否 | 成立日期 | +| corpAddress | String | 否 | 注册地址 | +| corpLegalRep | String | 否 | 法定代表人 | +| corpLegalCertType | String | 否 | 法定代表人证件类型 | +| corpLegalCertNo | String | 否 | 法定代表人证件号码 | +| corpShareholder1-5 | String | 否 | 股东信息 | +| status | String | 是 | 状态(0=正常, 1=停用) | +| remark | String | 否 | 备注 | + +**响应示例**: +```json +{ + "code": 200, + "msg": "操作成功" +} +``` + +**注意**: +- 中介类型(intermediaryType)不允许修改,系统会自动根据接口设置正确的类型 +- 使用个人中介接口时,机构专属字段会被自动清空 +- 使用机构中介接口时,个人专属字段会被自动清空 + --- ### 5. 删除中介黑名单 @@ -402,3 +578,5 @@ |------|------|------| | 1.0.0 | 2026-01-29 | 初始版本,支持个人和机构分类管理 | | 1.1.0 | 2026-01-29 | 添加字典下拉框功能,分离个人/机构模板 | +| 1.2.0 | 2026-01-29 | 修改接口分离:新增个人/机构专用修改接口,修复中介类型修改问题 | +| 1.3.0 | 2026-01-29 | 新增接口分离:新增个人/机构专用新增接口,统一接口设计 | diff --git a/doc/api/中介黑名单管理API测试报告.md b/doc/api/中介黑名单管理API测试报告.md new file mode 100644 index 0000000..81482fa --- /dev/null +++ b/doc/api/中介黑名单管理API测试报告.md @@ -0,0 +1,271 @@ +# 中介黑名单管理API测试报告 + +## 测试概述 + +**测试时间:** 2026-01-29 16:43:11 +**测试环境:** http://localhost:8080 +**测试账号:** admin +**测试脚本:** [test_intermediary_blacklist.sh](../scripts/test_intermediary_blacklist.sh) +**测试通过率:** 100.00% + +## 测试结果汇总 + +| 指标 | 数值 | +|------|------| +| 测试场景总数 | 11 | +| 通过数量 | 11 | +| 失败数量 | 0 | +| 通过率 | 100.00% | + +## 测试用例详情 + +### 1. 登录测试 + +**接口:** `POST /login/test` +**描述:** 使用测试账号登录获取认证token + +**请求参数:** +```json +{ + "username": "admin", + "password": "admin123" +} +``` + +**测试结果:** ✅ 通过 +- 成功获取token +- token格式正确 + +--- + +### 2. 查询中介黑名单列表 + +**接口:** `GET /dpc/intermediary/list` +**描述:** 分页查询中介黑名单列表 + +**请求参数:** +- pageNum: 1 +- pageSize: 10 + +**测试结果:** ✅ 通过 +- 返回分页数据结构正确 +- 包含 total 和 rows 字段 +- 数据格式符合预期 + +--- + +### 3. 新增个人中介黑名单 + +**接口:** `POST /dpc/intermediary` +**描述:** 新增个人类型的中介黑名单记录 + +**请求参数:** +```json +{ + "name": "测试个人中介_20260129_164311", + "certificateNo": "TESTCERT20260129_164311", + "intermediaryType": "1", + "remark": "自动化测试数据" +} +``` + +**测试结果:** ✅ 通过 +- 成功创建记录 +- 返回状态码 200 +- 成功获取到新创建的ID: 2005 + +--- + +### 4. 新增机构中介黑名单 + +**接口:** `POST /dpc/intermediary` +**描述:** 新增机构类型的中介黑名单记录 + +**请求参数:** +```json +{ + "name": "测试机构中介_20260129_164311", + "certificateNo": "TESTORG20260129_164311", + "intermediaryType": "2", + "remark": "自动化测试机构数据" +} +``` + +**测试结果:** ✅ 通过 +- 成功创建记录 +- 返回状态码 200 +- 成功获取到新创建的ID: 2006 + +--- + +### 5. 获取中介详情 + +**接口:** `GET /dpc/intermediary/{intermediaryId}` +**描述:** 根据ID获取中介详细信息 + +**请求参数:** +- intermediaryId: 2005 + +**测试结果:** ✅ 通过 +- 成功获取详情信息 +- 返回完整的数据结构 +- 包含所有必要字段 + +--- + +### 6. 修改中介黑名单 + +**接口:** `PUT /dpc/intermediary` +**描述:** 修改已存在的中介信息 + +**请求参数:** +```json +{ + "intermediaryId": 2005, + "name": "测试个人中介_修改", + "certificateNo": "TESTCERT20260129_164311", + "intermediaryType": "1", + "status": "1", + "remark": "修改后的自动化测试数据" +} +``` + +**测试结果:** ✅ 通过 +- 成功更新记录 +- 返回状态码 200 +- 数据修改生效 + +--- + +### 7. 导出中介黑名单列表 + +**接口:** `POST /dpc/intermediary/export` +**描述:** 导出中介黑名单数据为Excel文件 + +**请求参数:** +```json +{} +``` + +**测试结果:** ✅ 通过 +- 成功导出Excel文件 +- 文件格式正确 +- 文件保存至: test_output/test6_export.xlsx + +--- + +### 8. 下载个人中介导入模板 + +**接口:** `POST /dpc/intermediary/importPersonTemplate` +**描述:** 下载个人中介导入Excel模板 + +**测试结果:** ✅ 通过 +- 成功下载模板文件 +- 文件格式正确 +- 文件保存至: test_output/test7_person_template.xlsx + +--- + +### 9. 下载机构中介导入模板 + +**接口:** `POST /dpc/intermediary/importEntityTemplate` +**描述:** 下载机构中介导入Excel模板 + +**测试结果:** ✅ 通过 +- 成功下载模板文件 +- 文件格式正确 +- 文件保存至: test_output/test8_entity_template.xlsx + +--- + +### 10. 条件查询(按中介类型) + +**接口:** `GET /dpc/intermediary/list` +**描述:** 按中介类型筛选查询 + +**请求参数:** +- pageNum: 1 +- pageSize: 10 +- intermediaryType: 1 (个人) + +**测试结果:** ✅ 通过 +- 查询结果正确 +- 数据筛选生效 +- 返回指定类型的数据 + +--- + +### 11. 条件查询(按状态) + +**接口:** `GET /dpc/intermediary/list` +**描述:** 按状态筛选查询 + +**请求参数:** +- pageNum: 1 +- pageSize: 10 +- status: 1 + +**测试结果:** ✅ 通过 +- 查询结果正确 +- 数据筛选生效 +- 返回指定状态的数据 + +--- + +### 12. 删除中介黑名单 + +**接口:** `DELETE /dpc/intermediary/{intermediaryIds}` +**描述:** 批量删除中介黑名单记录 + +**请求参数:** +- intermediaryIds: 2005,2006 + +**测试结果:** ✅ 通过 +- 成功删除记录 +- 返回状态码 200 +- 数据删除生效 + +--- + +## 测试文件清单 + +### 响应JSON文件 +- `test1_list_response.json` - 查询列表响应 +- `test2_add_person_response.json` - 新增个人中介响应 +- `test3_add_entity_response.json` - 新增机构中介响应 +- `test4_get_info_response.json` - 获取详情响应 +- `test5_edit_response.json` - 修改中介响应 +- `test9_remove_response.json` - 删除中介响应 +- `test10_query_by_type_response.json` - 按类型查询响应 +- `test11_query_by_status_response.json` - 按状态查询响应 + +### Excel文件 +- `test6_export.xlsx` - 导出的数据文件 +- `test7_person_template.xlsx` - 个人中介导入模板 +- `test8_entity_template.xlsx` - 机构中介导入模板 + +### 报告文件 +- `test_report_20260129_164311.txt` - 详细测试日志 + +## 结论 + +**所有测试用例均已通过,中介黑名单管理API功能完整且运行正常。** + +### 主要验证点 +1. ✅ 认证授权机制正常 +2. ✅ CRUD操作功能完整 +3. ✅ 分页查询功能正常 +4. ✅ 条件筛选功能正常 +5. ✅ 文件导入导出功能正常 +6. ✅ 批量操作功能正常 + +### 建议 +1. 建议在实际部署前进行压力测试 +2. 建议添加更多的边界条件测试用例 +3. 建议完善错误码和错误信息的文档 + +--- + +**报告生成时间:** 2026-01-29 16:43:11 +**测试工具:** curl + bash +**报告生成者:** Claude Code diff --git a/doc/员工信息管理API文档.md b/doc/api/员工信息管理API文档.md similarity index 100% rename from doc/员工信息管理API文档.md rename to doc/api/员工信息管理API文档.md diff --git a/doc/EasyExcel字典下拉框使用说明.md b/doc/docs/EasyExcel字典下拉框使用说明.md similarity index 100% rename from doc/EasyExcel字典下拉框使用说明.md rename to doc/docs/EasyExcel字典下拉框使用说明.md diff --git a/doc/docs/中介黑名单弹窗优化设计.md b/doc/docs/中介黑名单弹窗优化设计.md new file mode 100644 index 0000000..da39525 --- /dev/null +++ b/doc/docs/中介黑名单弹窗优化设计.md @@ -0,0 +1,153 @@ +# 中介黑名单弹窗优化设计 + +## 需求概述 + +优化中介黑名单的添加弹窗交互流程: +1. 点击新增后先选择中介类型(个人/机构) +2. 然后弹出对应类型的信息输入窗口 +3. 不需要tab栏,直接显示对应类型的表单 +4. 机构类型只需输入一次证件号,该值同时作为"证件号"和"统一社会信用代码" + +## 设计方案 + +### 1. 交互流程 + +**新增操作流程:** + +1. 用户点击"新增"按钮 +2. 弹出一个简洁的对话框,顶部有两个大卡片式按钮:【个人】和【机构】 +3. 用户点击其中一个类型按钮 +4. 对应的表单立即展开显示在下方(无需确认操作) +5. 用户填写信息后点击"确定"提交 + +**修改操作:** +- 修改时直接显示原有数据的表单,不允许切换类型 + +### 2. 界面布局 + +``` +┌─────────────────────────────────────┐ +│ 添加中介黑名单 │ +├─────────────────────────────────────┤ +│ │ +│ ┌─────────┐ ┌─────────┐ │ +│ │ 个人 │ │ 机构 │ │ ← 大卡片式选择按钮(仅新增时显示) +│ └─────────┘ └─────────┘ │ +│ │ +│ ──────────────────────────────── │ ← 分隔线 +│ │ +│ [对应类型的表单字段] │ +│ • 姓名/机构名称 │ +│ • 证件号 │ +│ • 机构类型:统一社会信用代码 │ +│ • 其他选填字段... │ +│ │ +├─────────────────────────────────────┤ +│ [ 确定 ] [ 取消 ] │ +└─────────────────────────────────────┘ +``` + +### 3. 表单字段 + +**个人类型表单字段:** +- 姓名/机构名称*(必填) +- 证件号*(必填) +- 人员类型 +- 人员子类型 +- 性别 +- 证件类型 +- 手机号码 +- 微信号 +- 联系地址 +- 所在公司 +- 职位 +- 关联人员ID +- 关联关系 +- 备注 + +**机构类型表单字段:** +- 姓名/机构名称*(必填) +- 证件号*(必填,自动同步到统一社会信用代码) +- 主体类型 +- 企业性质 +- 成立日期 +- 行业分类 +- 所属行业 +- 注册地址 +- 法定代表人 +- 法定代表人证件类型 +- 法定代表人证件号码 +- 股东1-5 +- 备注 + +### 4. 表单验证规则 + +**个人类型验证:** +```javascript +rules: { + name: [ + { required: true, message: "姓名不能为空", trigger: "blur" }, + { max: 100, message: "姓名长度不能超过100个字符", trigger: "blur" } + ], + certificateNo: [ + { required: true, message: "证件号不能为空", trigger: "blur" }, + { max: 50, message: "证件号长度不能超过50个字符", trigger: "blur" } + ], + remark: [ + { max: 500, message: "备注长度不能超过500个字符", trigger: "blur" } + ] +} +``` + +**机构类型验证:** +```javascript +rules: { + name: [ + { required: true, message: "机构名称不能为空", trigger: "blur" }, + { max: 100, message: "机构名称长度不能超过100个字符", trigger: "blur" } + ], + certificateNo: [ + { required: true, message: "证件号不能为空", trigger: "blur" }, + { max: 18, message: "统一社会信用代码长度为18位", trigger: "blur" } + ], + remark: [ + { max: 500, message: "备注长度不能超过500个字符", trigger: "blur" } + ] +} +``` + +### 5. 边界情况处理 + +| 场景 | 处理方式 | +|------|----------| +| 用户点击新增后未选择类型就点确定 | 禁用"确定"按钮,直到选择类型 | +| 用户选择类型后想重新选择 | 只有关闭弹窗重新打开才能选择 | +| 修改操作时类型锁定 | 隐藏类型选择器,直接显示对应表单 | +| 表单验证失败 | 高亮显示错误字段,滚动到第一个错误位置 | +| 网络请求失败 | 显示错误提示,弹窗保持打开状态 | + +### 6. 用户体验优化 + +1. **视觉反馈**: + - 类型选择按钮在未选中时有hover效果 + - 选中后按钮变为高亮状态,其他按钮变灰 + - 表单展开有淡入动画 + +2. **输入提示**: + - 个人类型的证件号字段下方显示提示:"请输入证件号码" + - 机构类型的证件号字段下方显示提示:"统一社会信用代码(18位)" + +3. **表单布局**: + - 保持两列布局,充分利用空间 + - 必填项(姓名、证件号)标记红色星号 + +### 7. 技术实现要点 + +**状态管理:** +- 新增模式:`isAddMode: true`,显示类型选择器 +- 修改模式:`isAddMode: false`,隐藏类型选择器 +- 已选类型:`selectedType: '1' | '2' | null` + +**数据同步:** +- 机构类型提交时,将 `form.certificateNo` 的值同时赋给 `form.corpCreditCode` + diff --git a/doc/纪检初核系统功能说明书-V1.0.docx b/doc/docs/纪检初核系统功能说明书-V1.0.docx similarity index 100% rename from doc/纪检初核系统功能说明书-V1.0.docx rename to doc/docs/纪检初核系统功能说明书-V1.0.docx diff --git a/doc/纪检初核系统功能说明书-V1.0.md b/doc/docs/纪检初核系统功能说明书-V1.0.md similarity index 100% rename from doc/纪检初核系统功能说明书-V1.0.md rename to doc/docs/纪检初核系统功能说明书-V1.0.md diff --git a/doc/纪检初核系统功能说明书-V1.0.with.image.md b/doc/docs/纪检初核系统功能说明书-V1.0.with.image.md similarity index 100% rename from doc/纪检初核系统功能说明书-V1.0.with.image.md rename to doc/docs/纪检初核系统功能说明书-V1.0.with.image.md diff --git a/doc/纪检初核系统模块划分方案.md b/doc/docs/纪检初核系统模块划分方案.md similarity index 100% rename from doc/纪检初核系统模块划分方案.md rename to doc/docs/纪检初核系统模块划分方案.md diff --git a/doc/若依环境使用手册.docx b/doc/docs/若依环境使用手册.docx similarity index 100% rename from doc/若依环境使用手册.docx rename to doc/docs/若依环境使用手册.docx diff --git a/doc/other/ScreenShot_2026-01-29_155814_876.png b/doc/other/ScreenShot_2026-01-29_155814_876.png new file mode 100644 index 0000000000000000000000000000000000000000..703505ecfb3c12f5f417f5b295f4bff4915dd098 GIT binary patch literal 50783 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 = #{item.dataSource}, +update_by = #{item.updateBy}, +update_time = #{item.updateTime} +``` + +**修改后**: +```xml +data_source = #{item.dataSource}, +certificate_no = #{item.certificateNo}, +update_by = #{item.updateBy}, +update_time = #{item.updateTime} +``` + +## 设计说明 + +### 为什么使用统一社会信用代码作为证件号? + +1. **数据一致性**:统一社会信用代码本身就是机构的法定证件号,将其同时存储在 `certificate_no` 字段中可以保持数据的一致性。 + +2. **查询便利**:`certificate_no` 字段有索引,设置后可以快速查询机构中介。 + +3. **兼容性好**:个人中介和机构中介都使用 `certificate_no` 字段,查询逻辑更统一。 + +4. **不破坏现有结构**:不需要修改数据库表结构,只修改代码逻辑。 + +## 测试验证 + +### 测试用例 + +1. **个人中介导入**:正常导入个人中介数据,验证 `certificate_no` 字段正确存储身份证号。 + +2. **机构中介导入**:导入机构中介数据,验证 `certificate_no` 字段正确存储统一社会信用代码。 + +3. **统一社会信用代码为空**:验证当统一社会信用代码为空时,导入被正确拒绝并给出错误提示。 + +4. **批量更新**:验证批量更新时 `certificate_no` 字段能够正确更新。 + +### 测试脚本 + +测试脚本位于:[doc/test-data/test_import_fix.py](d:\discipline-prelim-check\discipline-prelim-check\doc\test-data\test_import_fix.py) + +运行测试: +```bash +python doc/test-data/test_import_fix.py +``` + +## 影响范围 + +### 已影响的功能 +- 机构中介批量导入功能 + +### 不影响的功能 +- 个人中介导入功能 +- 手动新增中介功能 +- 中介查询功能 +- 中介导出功能 + +## 注意事项 + +1. **数据迁移**:如果数据库中已存在机构中介数据且 `certificate_no` 为 null,需要执行以下 SQL 进行数据修复: + +```sql +UPDATE dpc_intermediary_blacklist +SET certificate_no = corp_credit_code +WHERE intermediary_type = '2' AND certificate_no IS NULL AND corp_credit_code IS NOT NULL; +``` + +2. **Excel 模板**:确保导入模板中统一社会信用代码字段设置为必填项。 + +3. **前端验证**:建议在前端表单中也添加统一社会信用代码的必填验证。 + +## 修改文件列表 + +1. [DpcIntermediaryBlacklistServiceImpl.java](d:\discipline-prelim-check\discipline-prelim-check\ruoyi-dpc\src\main\java\com\ruoyi\dpc\service\impl\DpcIntermediaryBlacklistServiceImpl.java) - 服务层实现 +2. [DpcIntermediaryBlacklistMapper.xml](d:\discipline-prelim-check\discipline-prelim-check\ruoyi-dpc\src\main\resources\mapper\dpc\DpcIntermediaryBlacklistMapper.xml) - MyBatis 映射文件 +3. [test_import_fix.py](d:\discipline-prelim-check\discipline-prelim-check\doc\test-data\test_import_fix.py) - 测试脚本 + +## 版本历史 + +| 版本 | 日期 | 作者 | 说明 | +|------|------|------|------| +| 1.0 | 2026-01-29 | ruoyi | 初始版本,修复机构中介导入时 certificate_no 为 null 的问题 | diff --git a/doc/纪检初核系统-离线演示包.zip b/doc/other/纪检初核系统-离线演示包.zip similarity index 100% rename from doc/纪检初核系统-离线演示包.zip rename to doc/other/纪检初核系统-离线演示包.zip diff --git a/doc/纪检初核系统-离线演示包/env/2203.js b/doc/other/纪检初核系统-离线演示包/env/2203.js similarity index 100% rename from doc/纪检初核系统-离线演示包/env/2203.js rename to doc/other/纪检初核系统-离线演示包/env/2203.js diff --git a/doc/纪检初核系统-离线演示包/extra/TAG_V3NXya0fYxmDs8mWSM69pSHMU20260127T00_20260127T001110126Z b/doc/other/纪检初核系统-离线演示包/extra/TAG_V3NXya0fYxmDs8mWSM69pSHMU20260127T00_20260127T001110126Z similarity index 100% rename from doc/纪检初核系统-离线演示包/extra/TAG_V3NXya0fYxmDs8mWSM69pSHMU20260127T00_20260127T001110126Z rename to doc/other/纪检初核系统-离线演示包/extra/TAG_V3NXya0fYxmDs8mWSM69pSHMU20260127T00_20260127T001110126Z diff --git a/doc/纪检初核系统-离线演示包/extra/data.0.js b/doc/other/纪检初核系统-离线演示包/extra/data.0.js similarity index 100% rename from doc/纪检初核系统-离线演示包/extra/data.0.js rename to doc/other/纪检初核系统-离线演示包/extra/data.0.js diff --git a/doc/纪检初核系统-离线演示包/extra/data.1.js b/doc/other/纪检初核系统-离线演示包/extra/data.1.js similarity index 100% rename from doc/纪检初核系统-离线演示包/extra/data.1.js rename to doc/other/纪检初核系统-离线演示包/extra/data.1.js diff --git a/doc/纪检初核系统-离线演示包/extra/data.2.js b/doc/other/纪检初核系统-离线演示包/extra/data.2.js similarity index 100% rename from doc/纪检初核系统-离线演示包/extra/data.2.js rename to doc/other/纪检初核系统-离线演示包/extra/data.2.js diff --git a/doc/纪检初核系统-离线演示包/index.html b/doc/other/纪检初核系统-离线演示包/index.html similarity index 100% rename from doc/纪检初核系统-离线演示包/index.html rename to doc/other/纪检初核系统-离线演示包/index.html diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/3.h4vam-vendor-5567a1235ac230e00561.js b/doc/other/纪检初核系统-离线演示包/mb-proto2/3.h4vam-vendor-5567a1235ac230e00561.js similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/3.h4vam-vendor-5567a1235ac230e00561.js rename to doc/other/纪检初核系统-离线演示包/mb-proto2/3.h4vam-vendor-5567a1235ac230e00561.js diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/4.ekpaa-vendor-4a8c0d8af0989de4a89f.js b/doc/other/纪检初核系统-离线演示包/mb-proto2/4.ekpaa-vendor-4a8c0d8af0989de4a89f.js similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/4.ekpaa-vendor-4a8c0d8af0989de4a89f.js rename to doc/other/纪检初核系统-离线演示包/mb-proto2/4.ekpaa-vendor-4a8c0d8af0989de4a89f.js diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/4.n9fxu-vendor-121f3fbb2320541a30bc.js b/doc/other/纪检初核系统-离线演示包/mb-proto2/4.n9fxu-vendor-121f3fbb2320541a30bc.js similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/4.n9fxu-vendor-121f3fbb2320541a30bc.js rename to doc/other/纪检初核系统-离线演示包/mb-proto2/4.n9fxu-vendor-121f3fbb2320541a30bc.js diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/5.7b24m-vendor-c6215ade32c4d6e04f4c.js b/doc/other/纪检初核系统-离线演示包/mb-proto2/5.7b24m-vendor-c6215ade32c4d6e04f4c.js similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/5.7b24m-vendor-c6215ade32c4d6e04f4c.js rename to doc/other/纪检初核系统-离线演示包/mb-proto2/5.7b24m-vendor-c6215ade32c4d6e04f4c.js diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/5.fxqum-vendor-f8aaf1fb2db7ed4b19df.js b/doc/other/纪检初核系统-离线演示包/mb-proto2/5.fxqum-vendor-f8aaf1fb2db7ed4b19df.js similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/5.fxqum-vendor-f8aaf1fb2db7ed4b19df.js rename to doc/other/纪检初核系统-离线演示包/mb-proto2/5.fxqum-vendor-f8aaf1fb2db7ed4b19df.js diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/6.3688a-vendor-0d07687f4be09b8b3eca.js b/doc/other/纪检初核系统-离线演示包/mb-proto2/6.3688a-vendor-0d07687f4be09b8b3eca.js similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/6.3688a-vendor-0d07687f4be09b8b3eca.js rename to doc/other/纪检初核系统-离线演示包/mb-proto2/6.3688a-vendor-0d07687f4be09b8b3eca.js diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/6.3688a-vendor-16f3ece222913e7058d1.css b/doc/other/纪检初核系统-离线演示包/mb-proto2/6.3688a-vendor-16f3ece222913e7058d1.css similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/6.3688a-vendor-16f3ece222913e7058d1.css rename to doc/other/纪检初核系统-离线演示包/mb-proto2/6.3688a-vendor-16f3ece222913e7058d1.css diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate60.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate60.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate60.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate60.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate60_pro.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate60_pro.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate60_pro.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate60_pro.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate70.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate70.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate70.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate70.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate70_pro.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate70_pro.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate70_pro.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate70_pro.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate70_pro_plus.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate70_pro_plus.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate70_pro_plus.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate70_pro_plus.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mateX5_expand.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mateX5_expand.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mateX5_expand.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mateX5_expand.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mateX5_fold.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mateX5_fold.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mateX5_fold.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mateX5_fold.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mateXT_one_screen.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mateXT_one_screen.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mateXT_one_screen.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mateXT_one_screen.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mateXT_three_screen.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mateXT_three_screen.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mateXT_three_screen.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mateXT_three_screen.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mateXT_two_screen.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mateXT_two_screen.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mateXT_two_screen.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mateXT_two_screen.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate_book_14s.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate_book_14s.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate_book_14s.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate_book_14s.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate_book_16s.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate_book_16s.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate_book_16s.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate_book_16s.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate_pad_pro_11.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate_pad_pro_11.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate_pad_pro_11.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate_pad_pro_11.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate_pad_pro_13_2.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate_pad_pro_13_2.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate_pad_pro_13_2.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_mate_pad_pro_13_2.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_watch_gt4_41.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_watch_gt4_41.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_watch_gt4_41.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_watch_gt4_41.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_watch_gt4_46.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_watch_gt4_46.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_watch_gt4_46.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_watch_gt4_46.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_watch_gt5_41.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_watch_gt5_41.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_watch_gt5_41.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_watch_gt5_41.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_watch_gt5_46.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_watch_gt5_46.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_watch_gt5_46.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_watch_gt5_46.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_wristband_8.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_wristband_8.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_wristband_8.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_wristband_8.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_wristband_9.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_wristband_9.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_wristband_9.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Huawei_wristband_9.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Xiaomi_14.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Xiaomi_14.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Xiaomi_14.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Xiaomi_14.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Xiaomi_15.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Xiaomi_15.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Xiaomi_15.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Xiaomi_15.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Xiaomi_wristband_8.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Xiaomi_wristband_8.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Xiaomi_wristband_8.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Xiaomi_wristband_8.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Xiaomi_wristband_9.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Xiaomi_wristband_9.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/Xiaomi_wristband_9.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/Xiaomi_wristband_9.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_38.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_38.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_38.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_38.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_40.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_40.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_40.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_40.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_42.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_42.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_42.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_42.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_44.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_44.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_44.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_44.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_9_41.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_9_41.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_9_41.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_9_41.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_9_45.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_9_45.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_9_45.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_9_45.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_se_40.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_se_40.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_se_40.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_se_40.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_se_44.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_se_44.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_se_44.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_se_44.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_ultra_2_49.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_ultra_2_49.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_ultra_2_49.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/apple_watch_ultra_2_49.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/car_play.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/car_play.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/car_play.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/car_play.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/desktop.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/desktop.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/desktop.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/desktop.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/desktop_1920.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/desktop_1920.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/desktop_1920.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/desktop_1920.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/google_pixel_2.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/google_pixel_2.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/google_pixel_2.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/google_pixel_2.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/google_pixel_2_xl.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/google_pixel_2_xl.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/google_pixel_2_xl.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/google_pixel_2_xl.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/huawei_p40.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/huawei_p40.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/huawei_p40.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/huawei_p40.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/huawei_p40_v2.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/huawei_p40_v2.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/huawei_p40_v2.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/huawei_p40_v2.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/huawei_p9.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/huawei_p9.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/huawei_p9.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/huawei_p9.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/imac.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/imac.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/imac.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/imac.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/imac_2023.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/imac_2023.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/imac_2023.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/imac_2023.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/industrial_hmi_16_10.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/industrial_hmi_16_10.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/industrial_hmi_16_10.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/industrial_hmi_16_10.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/industrial_hmi_16_9.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/industrial_hmi_16_9.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/industrial_hmi_16_9.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/industrial_hmi_16_9.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/industrial_hmi_4_3.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/industrial_hmi_4_3.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/industrial_hmi_4_3.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/industrial_hmi_4_3.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/ipad.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/ipad.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/ipad.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/ipad.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/ipad_2023.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/ipad_2023.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/ipad_2023.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/ipad_2023.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/ipad_mini.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/ipad_mini.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/ipad_mini.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/ipad_mini.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/ipad_pro.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/ipad_pro.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/ipad_pro.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/ipad_pro.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/ipad_pro_11.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/ipad_pro_11.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/ipad_pro_11.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/ipad_pro_11.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/ipad_pro_12.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/ipad_pro_12.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/ipad_pro_12.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/ipad_pro_12.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_11.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_11.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_11.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_11.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_12.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_12.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_12.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_12.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_12_pro_max.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_12_pro_max.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_12_pro_max.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_12_pro_max.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_13.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_13.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_13.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_13.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_13_mini.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_13_mini.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_13_mini.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_13_mini.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_13_pro_max.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_13_pro_max.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_13_pro_max.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_13_pro_max.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_14.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_14.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_14.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_14.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_14_plus.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_14_plus.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_14_plus.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_14_plus.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_14_pro_max.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_14_pro_max.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_14_pro_max.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_14_pro_max.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_15.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_15.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_15.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_15.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_15_plus.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_15_plus.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_15_plus.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_15_plus.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_15_pro.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_15_pro.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_15_pro.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_15_pro.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_15_pro_max.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_15_pro_max.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_15_pro_max.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_15_pro_max.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_16.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_16.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_16.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_16.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_16_plus.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_16_plus.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_16_plus.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_16_plus.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_16_pro.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_16_pro.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_16_pro.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_16_pro.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_16_pro_max.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_16_pro_max.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_16_pro_max.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_16_pro_max.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_17.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_17.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_17.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_17.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_17_pro.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_17_pro.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_17_pro.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_17_pro.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_17_pro_max.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_17_pro_max.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_17_pro_max.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_17_pro_max.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_7.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_7.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_7.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_7.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_7_plus.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_7_plus.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_7_plus.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_7_plus.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_air.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_air.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_air.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_air.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_se.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_se.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_se.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_se.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_x.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_x.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_x.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_x.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_xs_max.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_xs_max.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_xs_max.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/iphone_xs_max.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/mac_book_air_13.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/mac_book_air_13.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/mac_book_air_13.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/mac_book_air_13.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/mac_book_pro.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/mac_book_pro.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/mac_book_pro.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/mac_book_pro.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/mac_book_pro_14.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/mac_book_pro_14.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/mac_book_pro_14.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/mac_book_pro_14.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/mac_book_pro_16.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/mac_book_pro_16.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/mac_book_pro_16.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/mac_book_pro_16.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/nexus_5.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/nexus_5.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/nexus_5.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/nexus_5.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/samsung_galaxy_s23.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/samsung_galaxy_s23.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/samsung_galaxy_s23.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/samsung_galaxy_s23.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/samsung_s7.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/samsung_s7.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/samsung_s7.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/samsung_s7.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/sony_w850c.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/sony_w850c.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/sony_w850c.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/sony_w850c.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/devices/tesla_car_play_hmi.png b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/tesla_car_play_hmi.png similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/devices/tesla_car_play_hmi.png rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/devices/tesla_car_play_hmi.png diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/mktWM/watermark_m.svg b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/mktWM/watermark_m.svg similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/mktWM/watermark_m.svg rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/mktWM/watermark_m.svg diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/images/mktWM/watermark_s.svg b/doc/other/纪检初核系统-离线演示包/mb-proto2/images/mktWM/watermark_s.svg similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/images/mktWM/watermark_s.svg rename to doc/other/纪检初核系统-离线演示包/mb-proto2/images/mktWM/watermark_s.svg diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/lazy-lib-dl-906655530ecd54e72602.js b/doc/other/纪检初核系统-离线演示包/mb-proto2/lazy-lib-dl-906655530ecd54e72602.js similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/lazy-lib-dl-906655530ecd54e72602.js rename to doc/other/纪检初核系统-离线演示包/mb-proto2/lazy-lib-dl-906655530ecd54e72602.js diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/lazy-lib-fontkit-94d1920236ee8aff3185.js b/doc/other/纪检初核系统-离线演示包/mb-proto2/lazy-lib-fontkit-94d1920236ee8aff3185.js similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/lazy-lib-fontkit-94d1920236ee8aff3185.js rename to doc/other/纪检初核系统-离线演示包/mb-proto2/lazy-lib-fontkit-94d1920236ee8aff3185.js diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/lazy-lib-i18n-4c3a2d14ad63ee44927b.js b/doc/other/纪检初核系统-离线演示包/mb-proto2/lazy-lib-i18n-4c3a2d14ad63ee44927b.js similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/lazy-lib-i18n-4c3a2d14ad63ee44927b.js rename to doc/other/纪检初核系统-离线演示包/mb-proto2/lazy-lib-i18n-4c3a2d14ad63ee44927b.js diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/lazy-lib-paper-5a9908939d850d4cae67.js b/doc/other/纪检初核系统-离线演示包/mb-proto2/lazy-lib-paper-5a9908939d850d4cae67.js similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/lazy-lib-paper-5a9908939d850d4cae67.js rename to doc/other/纪检初核系统-离线演示包/mb-proto2/lazy-lib-paper-5a9908939d850d4cae67.js diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/lazy-lib-rehype-013772de7c49f3c667fa.js b/doc/other/纪检初核系统-离线演示包/mb-proto2/lazy-lib-rehype-013772de7c49f3c667fa.js similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/lazy-lib-rehype-013772de7c49f3c667fa.js rename to doc/other/纪检初核系统-离线演示包/mb-proto2/lazy-lib-rehype-013772de7c49f3c667fa.js diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/preview-html-zip-40b1c65b44de21c4ab8a.js b/doc/other/纪检初核系统-离线演示包/mb-proto2/preview-html-zip-40b1c65b44de21c4ab8a.js similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/preview-html-zip-40b1c65b44de21c4ab8a.js rename to doc/other/纪检初核系统-离线演示包/mb-proto2/preview-html-zip-40b1c65b44de21c4ab8a.js diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/preview-html-zip-f0d9de76208db26b1137.css b/doc/other/纪检初核系统-离线演示包/mb-proto2/preview-html-zip-f0d9de76208db26b1137.css similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/preview-html-zip-f0d9de76208db26b1137.css rename to doc/other/纪检初核系统-离线演示包/mb-proto2/preview-html-zip-f0d9de76208db26b1137.css diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/res-custom-41be04f25a7d92ab86c8.woff b/doc/other/纪检初核系统-离线演示包/mb-proto2/res-custom-41be04f25a7d92ab86c8.woff similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/res-custom-41be04f25a7d92ab86c8.woff rename to doc/other/纪检初核系统-离线演示包/mb-proto2/res-custom-41be04f25a7d92ab86c8.woff diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/res-dora-6079e0b71b8a8652eb1b.woff b/doc/other/纪检初核系统-离线演示包/mb-proto2/res-dora-6079e0b71b8a8652eb1b.woff similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/res-dora-6079e0b71b8a8652eb1b.woff rename to doc/other/纪检初核系统-离线演示包/mb-proto2/res-dora-6079e0b71b8a8652eb1b.woff diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/res-font-awesome-f691f37e57f04c152e23.woff b/doc/other/纪检初核系统-离线演示包/mb-proto2/res-font-awesome-f691f37e57f04c152e23.woff similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/res-font-awesome-f691f37e57f04c152e23.woff rename to doc/other/纪检初核系统-离线演示包/mb-proto2/res-font-awesome-f691f37e57f04c152e23.woff diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/res-material-83bebaf37c09c7e1c3ee.woff b/doc/other/纪检初核系统-离线演示包/mb-proto2/res-material-83bebaf37c09c7e1c3ee.woff similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/res-material-83bebaf37c09c7e1c3ee.woff rename to doc/other/纪检初核系统-离线演示包/mb-proto2/res-material-83bebaf37c09c7e1c3ee.woff diff --git a/doc/纪检初核系统-离线演示包/mb-proto2/res-mb-icons-9615a49d65d72a59aa3a.woff b/doc/other/纪检初核系统-离线演示包/mb-proto2/res-mb-icons-9615a49d65d72a59aa3a.woff similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-proto2/res-mb-icons-9615a49d65d72a59aa3a.woff rename to doc/other/纪检初核系统-离线演示包/mb-proto2/res-mb-icons-9615a49d65d72a59aa3a.woff diff --git a/doc/纪检初核系统-离线演示包/mb-static/2308/core-js-3.32.1/modern.js b/doc/other/纪检初核系统-离线演示包/mb-static/2308/core-js-3.32.1/modern.js similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-static/2308/core-js-3.32.1/modern.js rename to doc/other/纪检初核系统-离线演示包/mb-static/2308/core-js-3.32.1/modern.js diff --git a/doc/纪检初核系统-离线演示包/mb-static/2410/echarts-map/loadMap.js b/doc/other/纪检初核系统-离线演示包/mb-static/2410/echarts-map/loadMap.js similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-static/2410/echarts-map/loadMap.js rename to doc/other/纪检初核系统-离线演示包/mb-static/2410/echarts-map/loadMap.js diff --git a/doc/纪检初核系统-离线演示包/mb-static/2509/loading-logo.gif b/doc/other/纪检初核系统-离线演示包/mb-static/2509/loading-logo.gif similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-static/2509/loading-logo.gif rename to doc/other/纪检初核系统-离线演示包/mb-static/2509/loading-logo.gif diff --git a/doc/纪检初核系统-离线演示包/mb-static/2509/loading.gif b/doc/other/纪检初核系统-离线演示包/mb-static/2509/loading.gif similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-static/2509/loading.gif rename to doc/other/纪检初核系统-离线演示包/mb-static/2509/loading.gif diff --git a/doc/纪检初核系统-离线演示包/mb-static/2509/logo-rect-dark.svg b/doc/other/纪检初核系统-离线演示包/mb-static/2509/logo-rect-dark.svg similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-static/2509/logo-rect-dark.svg rename to doc/other/纪检初核系统-离线演示包/mb-static/2509/logo-rect-dark.svg diff --git a/doc/纪检初核系统-离线演示包/mb-static/2509/logo-rect-light.svg b/doc/other/纪检初核系统-离线演示包/mb-static/2509/logo-rect-light.svg similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-static/2509/logo-rect-light.svg rename to doc/other/纪检初核系统-离线演示包/mb-static/2509/logo-rect-light.svg diff --git a/doc/纪检初核系统-离线演示包/mb-static/2509/logo-rect.svg b/doc/other/纪检初核系统-离线演示包/mb-static/2509/logo-rect.svg similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-static/2509/logo-rect.svg rename to doc/other/纪检初核系统-离线演示包/mb-static/2509/logo-rect.svg diff --git a/doc/纪检初核系统-离线演示包/mb-static/2509/logo-text.svg b/doc/other/纪检初核系统-离线演示包/mb-static/2509/logo-text.svg similarity index 100% rename from doc/纪检初核系统-离线演示包/mb-static/2509/logo-text.svg rename to doc/other/纪检初核系统-离线演示包/mb-static/2509/logo-text.svg diff --git a/doc/纪检初核系统-离线演示包/uploads7/images/14128/141282287/v2_smx0cl.png b/doc/other/纪检初核系统-离线演示包/uploads7/images/14128/141282287/v2_smx0cl.png similarity index 100% rename from doc/纪检初核系统-离线演示包/uploads7/images/14128/141282287/v2_smx0cl.png rename to doc/other/纪检初核系统-离线演示包/uploads7/images/14128/141282287/v2_smx0cl.png diff --git a/doc/纪检初核系统-离线演示包/总览模式.html b/doc/other/纪检初核系统-离线演示包/总览模式.html similarity index 100% rename from doc/纪检初核系统-离线演示包/总览模式.html rename to doc/other/纪检初核系统-离线演示包/总览模式.html diff --git a/doc/纪检初核系统-离线演示包/标注模式.html b/doc/other/纪检初核系统-离线演示包/标注模式.html similarity index 100% rename from doc/纪检初核系统-离线演示包/标注模式.html rename to doc/other/纪检初核系统-离线演示包/标注模式.html diff --git a/doc/纪检初核系统-离线演示包/演示模式.html b/doc/other/纪检初核系统-离线演示包/演示模式.html similarity index 100% rename from doc/纪检初核系统-离线演示包/演示模式.html rename to doc/other/纪检初核系统-离线演示包/演示模式.html diff --git a/doc/scripts/README.md b/doc/scripts/README.md new file mode 100644 index 0000000..5411f03 --- /dev/null +++ b/doc/scripts/README.md @@ -0,0 +1,135 @@ +# 中介黑名单弹窗优化功能测试 + +## 测试概述 + +本测试套件用于验证中介黑名单弹窗优化后的功能正确性,主要包括: + +1. **新增模式交互**:验证类型选择卡片的用户体验 +2. **表单验证**:验证个人/机构类型的字段验证规则 +3. **数据同步**:验证机构类型证件号与统一社会信用代码的同步 +4. **修改模式锁定**:验证修改时类型不可更改 +5. **边界情况处理**:验证各种异常输入的处理 + +## 运行测试 + +### 前置条件 + +1. 后端服务已启动(默认 `http://localhost:8080`) +2. 测试账号可用(`admin/admin123`) +3. 已安装 Node.js + +### 安装依赖 + +```bash +cd doc/scripts +npm install +``` + +### 执行测试 + +```bash +# 直接运行测试(输出到控制台) +npm test + +# 运行测试并生成报告文件 +npm run test:report + +# 或者直接使用 Node.js +node test_intermediary_dialog.js +``` + +## 测试用例说明 + +| 测试编号 | 测试名称 | 测试目标 | 预期结果 | +|---------|---------|---------|---------| +| 1 | 登录系统 | 获取认证Token | 成功获取Token | +| 2 | 新增个人中介-必填字段 | 验证姓名和证件号必填 | 缺少必填项时被拒绝 | +| 3 | 新增个人中介-字段长度 | 验证字段长度限制 | 超长时被拒绝 | +| 4 | 新增机构中介-证件号同步 | 验证证件号同步到统一社会信用代码 | 两字段值一致 | +| 5 | 新增机构中介-信用代码长度 | 验证统一社会信用代码长度 | 前端限制18位 | +| 6 | 修改个人中介-类型锁定 | 验证修改时类型不可更改 | 类型字段保持不变 | +| 7 | 修改机构中介-类型锁定 | 验证修改时类型不可更改 | 类型字段保持不变 | +| 8 | 新增无类型 | 验证未选择类型无法提交 | 后端拒绝请求 | +| 9 | 查询列表 | 验证数据正确性 | 返回正确的类型分布 | + +## 测试报告示例 + +``` +============================================================== +测试1:登录系统 +============================================================== +✓ 通过 - 登录成功 + Token: eyJhbGciOiJIUzUxMiJ9... + +============================================================== +测试2:新增个人中介 - 验证必填字段 +============================================================== +✓ 通过 - 空姓名 + 应该被拒绝 +✓ 通过 - 空证件号 + 应该被拒绝 +✓ 通过 - 完整必填字段 + 成功创建,ID: 123 + +... +``` + +## 功能验证清单 + +### 前端交互验证 + +- [ ] 点击新增后显示类型选择卡片 +- [ ] 卡片有 hover 效果 +- [ ] 点击卡片后表单展开带淡入动画 +- [ ] 点击卡片后表单不立即显示验证错误 +- [ ] 未选择类型时确定按钮被禁用 +- [ ] 个人类型表单显示正确的字段 +- [ ] 机构类型表单显示正确的字段 +- [ ] 个人类型证件号字段显示正确的占位符:"请输入证件号码" +- [ ] 机构类型证件号字段显示正确的占位符:"统一社会信用代码(18位)" +- [ ] 证件号输入框后无提示图标 + +### 表单验证验证 + +- [ ] 个人类型姓名必填验证 +- [ ] 个人类型证件号必填验证 +- [ ] 机构类型名称必填验证 +- [ ] 机构类型证件号必填验证 +- [ ] 机构类型证件号长度限制18位 +- [ ] 备注字段长度限制500字符 + +### 数据同步验证 + +- [ ] 机构类型输入证件号后自动同步到统一社会信用代码 +- [ ] 提交时两个字段值一致 + +### 修改模式验证 + +- [ ] 修改时直接显示对应类型表单 +- [ ] 修改时不显示类型选择器 +- [ ] 修改时类型字段不可更改 + +## 故障排查 + +### 测试失败常见原因 + +1. **后端服务未启动** + - 检查 `http://localhost:8080` 是否可访问 + - 检查后端日志是否有错误 + +2. **认证失败** + - 确认测试账号密码正确 + - 检查后端是否启用了认证 + +3. **端口冲突** + - 修改 `CONFIG.baseURL` 为实际后端地址 + +4. **依赖缺失** + - 运行 `npm install` 安装依赖 + +## 注意事项 + +1. 测试会创建真实数据,测试结束后会自动清理 +2. 请勿在生产环境运行测试 +3. 如需修改测试数据,编辑 `CONFIG` 对象 +4. 测试报告会保存在 `test_report.txt` 文件中 diff --git a/doc/scripts/generate_test_data.py b/doc/scripts/generate_test_data.py new file mode 100644 index 0000000..68d832b --- /dev/null +++ b/doc/scripts/generate_test_data.py @@ -0,0 +1,193 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +根据模板文件生成1000条个人中介黑名单测试数据 +""" + +import openpyxl +from openpyxl.styles import Font, PatternFill, Alignment +import random +from datetime import datetime + +# 配置 +TEMPLATE_FILE = "doc/个人中介黑名单模板_1769667622015.xlsx" +OUTPUT_FILE = "doc/个人中介黑名单测试数据_1000条_第2批.xlsx" +ROW_COUNT = 1000 + +# 姓氏和名字库 +SURNAMES = ['王', '李', '张', '刘', '陈', '杨', '黄', '赵', '周', '吴', '徐', '孙', '马', '朱', '胡', '郭', '何', '高', '林', '罗'] +GIVEN_NAMES = ['伟', '芳', '娜', '敏', '静', '丽', '强', '磊', '军', '洋', '勇', '艳', '杰', '娟', '涛', '明', '超', '秀英', '霞', '平', '刚', '桂英', '玉兰', '萍', '毅', '浩', '宇', '轩', '然', '梓'] + +# 人员类型 +INDIV_TYPES = ['中介', '职业背债人', '房产中介', '贷款中介', '其他'] + +# 人员子类型 +INDIV_SUB_TYPES = ['本人', '配偶', '父亲', '母亲', '儿子', '女儿'] + +# 性别 +GENDERS = ['男', '女'] + +# 证件类型 +CERT_TYPES = ['身份证', '护照', '军官证', '其他'] + +# 关联关系 +RELATIONS = ['配偶', '父母', '子女', '兄弟姐妹', '同事', '朋友', '合伙人', '其他'] + +# 公司类型 +COMPANIES = ['中原地产', '链家地产', '我爱我家', '21世纪不动产', 'Q房网', '安居客', '房天下', '麦田房产', '鑫置地产', '嘉业地产'] + +# 职位 +POSITIONS = ['经纪人', '高级经纪人', '店长', '区域经理', '业务员', '顾问', '总监', '助理', '专员'] + +# 城市和区域数据 +CITIES = { + '北京': ['朝阳区', '海淀区', '东城区', '西城区', '丰台区', '通州区'], + '上海': ['浦东新区', '黄浦区', '徐汇区', '长宁区', '静安区', '普陀区'], + '广州': ['天河区', '越秀区', '海珠区', '荔湾区', '白云区', '番禺区'], + '深圳': ['福田区', '南山区', '罗湖区', '宝安区', '龙岗区', '盐田区'], + '杭州': ['西湖区', '上城区', '下城区', '江干区', '拱墅区', '滨江区'], + '成都': ['武侯区', '锦江区', '青羊区', '金牛区', '成华区', '高新区'], + '武汉': ['武昌区', '江岸区', '江汉区', '硚口区', '汉阳区', '洪山区'], + '南京': ['玄武区', '秦淮区', '建邺区', '鼓楼区', '浦口区', '栖霞区'] +} + + +def generate_id_number(cert_type): + """生成证件号码""" + if cert_type == '身份证': + # 生成18位身份证号码 + area_code = f"{random.randint(110000, 659000)}" + birth = f"{random.randint(1960, 2000)}{random.randint(1, 12):02d}{random.randint(1, 28):02d}" + sequence = f"{random.randint(100, 999)}" + id_num = f"{area_code}{birth}{sequence}" + # 计算校验码 + weights = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] + check_codes = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'] + total = sum(int(id_num[i]) * weights[i] for i in range(17)) + check_code = check_codes[total % 11] + return id_num + check_code + elif cert_type == '护照': + return f"E{random.randint(10000000, 99999999)}" + elif cert_type == '军官证': + return f"军字第{random.randint(1000000, 9999999)}号" + else: + return f"QT{random.randint(100000000, 999999999)}" + + +def generate_phone(): + """生成手机号码""" + prefixes = ['130', '131', '132', '133', '134', '135', '136', '137', '138', '139', + '150', '151', '152', '153', '155', '156', '157', '158', '159', + '180', '181', '182', '183', '184', '185', '186', '187', '188', '189'] + return f"{random.choice(prefixes)}{random.randint(10000000, 99999999)}" + + +def generate_wechat(): + """生成微信号""" + return f"wx_{random.randint(10000000, 99999999)}" + + +def generate_address(): + """生成联系地址""" + city = random.choice(list(CITIES.keys())) + district = random.choice(CITIES[city]) + street = random.choice(['中山路', '解放路', '人民路', '建设路', '文化路', '和平路', '友谊路', '光明路']) + number = random.randint(1, 999) + building = random.choice(['A座', 'B座', '1号楼', '2号楼', '东苑', '西苑', '南区', '北区']) + room = random.randint(101, 2606) + return f"{city}{district}{street}{number}号{building}{room}室" + + +def generate_name(): + """生成姓名""" + surname = random.choice(SURNAMES) + if random.random() > 0.3: # 70%概率两个字的名字 + return surname + random.choice(GIVEN_NAMES) + else: # 30%概率三个字的名字 + return surname + random.choice(GIVEN_NAMES) + random.choice(GIVEN_NAMES) + + +def main(): + """主函数""" + print(f"正在读取模板文件: {TEMPLATE_FILE}") + + try: + # 读取模板文件 + wb = openpyxl.load_workbook(TEMPLATE_FILE) + ws = wb.active + + # 获取表头 + headers = [] + for cell in ws[1]: + if cell.value: + headers.append(cell.value) + + print(f"模板表头: {headers}") + print(f"开始生成 {ROW_COUNT} 条测试数据...") + + # 清除除表头外的所有数据行 + for row in range(2, ws.max_row + 1): + for col in range(1, ws.max_column + 1): + ws.cell(row=row, column=col).value = None + + # 生成数据行 + for i in range(2, ROW_COUNT + 2): + indiv_type = random.choice(INDIV_TYPES) + gender = random.choice(GENDERS) + cert_type = random.choice(CERT_TYPES) + + # 根据表头索引填充数据 + row_data = { + '姓名': generate_name(), + '证件号码': generate_id_number(cert_type), + '人员类型': indiv_type, + '人员子类型': random.choice(INDIV_SUB_TYPES), + '性别': gender, + '证件类型': cert_type, + '手机号': generate_phone(), + '微信号': generate_wechat(), + '联系地址': generate_address(), + '所在公司': random.choice(COMPANIES), + '职位': random.choice(POSITIONS), + '关联人员ID': str(random.randint(1000, 9999)) if random.random() > 0.8 else '', + '关联关系': random.choice(RELATIONS) if random.random() > 0.5 else '', + '备注': f'测试数据{i-1}' + } + + # 写入行数据 + for col_idx, header in enumerate(headers, start=1): + if header in row_data: + ws.cell(row=i, column=col_idx, value=row_data[header]) + + if (i - 1) % 100 == 0: + print(f"已生成 {i-1} 条数据...") + + # 保存文件 + print(f"\n正在保存文件到: {OUTPUT_FILE}") + wb.save(OUTPUT_FILE) + + print(f"✓ 成功生成 {ROW_COUNT} 条测试数据") + print(f"✓ 文件已保存至: {OUTPUT_FILE}") + print(f"✓ 生成时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") + + # 输出前3条数据示例 + print("\n前3条数据示例:") + print("-" * 100) + for i in range(2, 5): + row_data = [] + for col_idx in range(1, len(headers) + 1): + val = ws.cell(row=i, column=col_idx).value + row_data.append(str(val) if val else "") + print(f"第{i-1}行: {', '.join([f'{h}:{v}' for h, v in zip(headers[:6], row_data[:6])])}") + + except FileNotFoundError: + print(f"✗ 错误:找不到模板文件 {TEMPLATE_FILE}") + print("请确保模板文件存在于正确的路径") + except Exception as e: + print(f"✗ 错误:{str(e)}") + import traceback + traceback.print_exc() + + +if __name__ == "__main__": + main() diff --git a/doc/scripts/package.json b/doc/scripts/package.json new file mode 100644 index 0000000..2b6c57d --- /dev/null +++ b/doc/scripts/package.json @@ -0,0 +1,19 @@ +{ + "name": "dpc-intermediary-dialog-tests", + "version": "1.0.0", + "description": "中介黑名单弹窗优化功能测试套件", + "scripts": { + "test": "node test_intermediary_dialog.js", + "test:report": "node test_intermediary_dialog.js > test_report.txt 2>&1" + }, + "keywords": [ + "中介黑名单", + "弹窗优化", + "功能测试" + ], + "author": "System Test", + "license": "MIT", + "dependencies": { + "axios": "^1.6.0" + } +} diff --git a/doc/scripts/test_import.py b/doc/scripts/test_import.py new file mode 100644 index 0000000..8759b8e --- /dev/null +++ b/doc/scripts/test_import.py @@ -0,0 +1,97 @@ +import requests +import json + +# 配置 +BASE_URL = "http://localhost:8080" +LOGIN_URL = f"{BASE_URL}/login/test" +IMPORT_URL = f"{BASE_URL}/dpc/intermediary/importPersonData" + +# 登录获取token +print("=" * 60) +print("测试个人中介Excel导入功能") +print("=" * 60) + +login_data = { + "username": "admin", + "password": "admin123" +} + +print("\n1. 登录系统...") +try: + response = requests.post(LOGIN_URL, json=login_data) + print(f" 登录响应状态码: {response.status_code}") + + if response.status_code == 200: + result = response.json() + print(f" 登录响应: {json.dumps(result, ensure_ascii=False, indent=2)}") + + token = result.get("token") + if token: + print(f" ✓ 成功获取token: {token[:50]}...") + else: + print(" ✗ 登录失败:未获取到token") + exit(1) + else: + print(f" ✗ 登录失败:{response.text}") + exit(1) +except Exception as e: + print(f" ✗ 登录异常: {e}") + exit(1) + +# 测试导入 +print("\n2. 准备导入Excel文件...") +files = { + 'file': ('个人中介黑名单测试数据_1000条.xlsx', + open('doc/个人中介黑名单测试数据_1000条.xlsx', 'rb'), + 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') +} + +headers = { + 'Authorization': f'Bearer {token}' +} + +params = { + 'updateSupport': 'false' +} + +print(f" 导入URL: {IMPORT_URL}") +print(f" 文件名: 个人中介黑名单测试数据_1000条.xlsx") +print(f" 更新支持: false") + +print("\n3. 发送导入请求...") +try: + response = requests.post(IMPORT_URL, files=files, headers=headers, params=params) + print(f" 导入响应状态码: {response.status_code}") + print(f" 响应头: {dict(response.headers)}") + + if response.status_code == 200: + result = response.json() + print(f"\n 导入结果:") + print(f" {json.dumps(result, ensure_ascii=False, indent=2)}") + + if result.get("code") == 200: + print(f"\n ✓ 导入成功!") + print(f" 消息: {result.get('msg')}") + else: + print(f"\n ✗ 导入失败!") + print(f" 错误代码: {result.get('code')}") + print(f" 错误消息: {result.get('msg')}") + else: + print(f"\n ✗ HTTP错误: {response.status_code}") + print(f" 响应内容: {response.text}") + +except requests.exceptions.ConnectionError: + print(f"\n ✗ 连接失败:无法连接到后端服务器") + print(f" 请确认后端服务已启动在 {BASE_URL}") +except requests.exceptions.Timeout: + print(f"\n ✗ 请求超时") +except Exception as e: + print(f"\n ✗ 导入异常: {e}") + import traceback + traceback.print_exc() +finally: + files['file'][1].close() + +print("\n" + "=" * 60) +print("测试完成") +print("=" * 60) diff --git a/doc/scripts/test_import_simple.py b/doc/scripts/test_import_simple.py new file mode 100644 index 0000000..7d72bbf --- /dev/null +++ b/doc/scripts/test_import_simple.py @@ -0,0 +1,57 @@ +import requests +import json + +# 配置 +BASE_URL = "http://localhost:8080" +LOGIN_URL = f"{BASE_URL}/login/test" + +# 登录获取token +print("登录系统...") +login_data = { + "username": "admin", + "password": "admin123" +} + +response = requests.post(LOGIN_URL, json=login_data) +token = response.json().get("token") + +# 测试不同的导入方式 +headers = {'Authorization': f'Bearer {token}'} + +print("\n测试1: 直接POST请求(无文件)") +response = requests.post( + f"{BASE_URL}/dpc/intermediary/importPersonData", + headers=headers +) +print(f"状态码: {response.status_code}") +print(f"响应: {response.text[:200]}") + +print("\n测试2: 带文件的POST请求(URL参数)") +files = { + 'file': ('test.xlsx', open('doc/个人中介黑名单测试数据_1000条.xlsx', 'rb'), 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') +} +response = requests.post( + f"{BASE_URL}/dpc/intermediary/importPersonData?updateSupport=false", + files=files, + headers=headers +) +print(f"状态码: {response.status_code}") +print(f"响应: {response.text[:500]}") +files['file'][1].close() + +print("\n测试3: 带文件的POST请求(Form数据)") +files = { + 'file': ('test.xlsx', open('doc/个人中介黑名单测试数据_1000条.xlsx', 'rb'), 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') +} +data = { + 'updateSupport': 'false' +} +response = requests.post( + f"{BASE_URL}/dpc/intermediary/importPersonData", + files=files, + data=data, + headers=headers +) +print(f"状态码: {response.status_code}") +print(f"响应: {response.text[:500]}") +files['file'][1].close() diff --git a/doc/scripts/test_intermediary_blacklist.sh b/doc/scripts/test_intermediary_blacklist.sh new file mode 100644 index 0000000..478abf7 --- /dev/null +++ b/doc/scripts/test_intermediary_blacklist.sh @@ -0,0 +1,663 @@ +#!/bin/bash +################################################################################ +# 中介黑名单管理API测试脚本 +# +# 功能:测试DpcIntermediaryBlacklistController中的所有接口 +# 作者:Claude +# 日期:2026-01-29 +################################################################################ + +# ============================================================================ +# 配置项 +# ============================================================================ +BASE_URL="http://localhost:8080" +USERNAME="admin" +PASSWORD="admin123" +TOKEN="" +OUTPUT_DIR="test_output" +TIMESTAMP=$(date +%Y%m%d_%H%M%S) +REPORT_FILE="${OUTPUT_DIR}/test_report_${TIMESTAMP}.txt" + +# 颜色输出 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# ============================================================================ +# 工具函数 +# ============================================================================ + +# 打印带颜色的消息 +print_success() { + echo -e "${GREEN}✓ $1${NC}" +} + +print_error() { + echo -e "${RED}✗ $1${NC}" +} + +print_info() { + echo -e "${BLUE}ℹ $1${NC}" +} + +print_warning() { + echo -e "${YELLOW}⚠ $1${NC}" +} + +# 打印分隔线 +print_separator() { + echo -e "${BLUE}================================================================================${NC}" +} + +# 初始化输出目录 +init_output_dir() { + if [ ! -d "$OUTPUT_DIR" ]; then + mkdir -p "$OUTPUT_DIR" + print_info "创建输出目录: $OUTPUT_DIR" + fi +} + +# 记录到报告文件 +log_to_report() { + echo "$1" >> "$REPORT_FILE" +} + +# ============================================================================ +# API请求函数 +# ============================================================================ + +# 登录获取token +login() { + print_separator + print_info "正在登录..." + print_separator + + local response=$(curl -s -X POST "${BASE_URL}/login/test" \ + -H "Content-Type: application/json" \ + -d "{\"username\":\"${USERNAME}\",\"password\":\"${PASSWORD}\"}") + + TOKEN=$(echo "$response" | grep -o '"token":"[^"]*"' | cut -d'"' -f4) + + if [ -n "$TOKEN" ]; then + print_success "登录成功,获取token: ${TOKEN:0:20}..." + log_to_report "========== 登录测试 ==========" + log_to_report "请求: POST ${BASE_URL}/login/test" + log_to_report "响应: $response" + log_to_report "结果: 成功" + log_to_report "" + return 0 + else + print_error "登录失败" + log_to_report "========== 登录测试 ==========" + log_to_report "请求: POST ${BASE_URL}/login/test" + log_to_report "响应: $response" + log_to_report "结果: 失败" + log_to_report "" + return 1 + fi +} + +# 获取请求头 +get_headers() { + echo "-H \"Authorization: Bearer $TOKEN\" -H \"Content-Type: application/json\"" +} + +# ============================================================================ +# 测试函数 +# ============================================================================ + +# 测试1: 查询中介黑名单列表 +test_list() { + print_separator + print_info "测试1: 查询中介黑名单列表" + print_separator + + local url="${BASE_URL}/dpc/intermediary/list?pageNum=1&pageSize=10" + local response=$(curl -s -X GET "$url" \ + -H "Authorization: Bearer $TOKEN") + + echo "$response" | jq '.' > "${OUTPUT_DIR}/test1_list_response.json" 2>/dev/null || echo "$response" > "${OUTPUT_DIR}/test1_list_response.json" + + local code=$(echo "$response" | grep -o '"code":[0-9]*' | cut -d':' -f2) + + if [ "$code" == "200" ]; then + print_success "查询列表成功" + log_to_report "========== 测试1: 查询中介黑名单列表 ==========" + log_to_report "请求: GET $url" + log_to_report "响应已保存至: ${OUTPUT_DIR}/test1_list_response.json" + log_to_report "结果: 成功" + log_to_report "" + return 0 + else + print_error "查询列表失败: $response" + log_to_report "========== 测试1: 查询中介黑名单列表 ==========" + log_to_report "请求: GET $url" + log_to_report "响应: $response" + log_to_report "结果: 失败" + log_to_report "" + return 1 + fi +} + +# 测试2: 新增个人中介黑名单 +test_add_person() { + print_separator + print_info "测试2: 新增个人中介黑名单" + print_separator + + local test_name="测试个人中介_${TIMESTAMP}" + local data='{ + "name": "'${test_name}'", + "certificateNo": "TESTCERT'${TIMESTAMP}'", + "intermediaryType": "1", + "remark": "自动化测试数据" + }' + + local response=$(curl -s -X POST "${BASE_URL}/dpc/intermediary" \ + -H "Authorization: Bearer $TOKEN" \ + -H "Content-Type: application/json" \ + -d "$data") + + echo "$response" | jq '.' > "${OUTPUT_DIR}/test2_add_person_response.json" 2>/dev/null || echo "$response" > "${OUTPUT_DIR}/test2_add_person_response.json" + + local code=$(echo "$response" | grep -o '"code":[0-9]*' | cut -d':' -f2) + + if [ "$code" == "200" ]; then + print_success "新增个人中介成功" + log_to_report "========== 测试2: 新增个人中介黑名单 ==========" + log_to_report "请求: POST ${BASE_URL}/dpc/intermediary" + log_to_report "请求体: $data" + log_to_report "响应已保存至: ${OUTPUT_DIR}/test2_add_person_response.json" + log_to_report "结果: 成功" + log_to_report "" + + # 通过查询列表获取最新创建的ID(按创建时间倒序) + sleep 1 + local list_response=$(curl -s -X GET "${BASE_URL}/dpc/intermediary/list?pageNum=1&pageSize=1" \ + -H "Authorization: Bearer $TOKEN") + + # 从rows数组中提取第一个intermediaryId + PERSON_INTERMEDIARY_ID=$(echo "$list_response" | jq -r '.rows[0].intermediaryId' 2>/dev/null) + + if [ -n "$PERSON_INTERMEDIARY_ID" ] && [ "$PERSON_INTERMEDIARY_ID" != "null" ]; then + print_info "获取到中介ID: $PERSON_INTERMEDIARY_ID" + else + print_warning "无法获取中介ID,将使用备用方法" + fi + return 0 + else + print_error "新增个人中介失败: $response" + log_to_report "========== 测试2: 新增个人中介黑名单 ==========" + log_to_report "请求: POST ${BASE_URL}/dpc/intermediary" + log_to_report "请求体: $data" + log_to_report "响应: $response" + log_to_report "结果: 失败" + log_to_report "" + return 1 + fi +} + +# 测试3: 新增机构中介黑名单 +test_add_entity() { + print_separator + print_info "测试3: 新增机构中介黑名单" + print_separator + + local test_name="测试机构中介_${TIMESTAMP}" + local data='{ + "name": "'${test_name}'", + "certificateNo": "TESTORG'${TIMESTAMP}'", + "intermediaryType": "2", + "remark": "自动化测试机构数据" + }' + + local response=$(curl -s -X POST "${BASE_URL}/dpc/intermediary" \ + -H "Authorization: Bearer $TOKEN" \ + -H "Content-Type: application/json" \ + -d "$data") + + echo "$response" | jq '.' > "${OUTPUT_DIR}/test3_add_entity_response.json" 2>/dev/null || echo "$response" > "${OUTPUT_DIR}/test3_add_entity_response.json" + + local code=$(echo "$response" | grep -o '"code":[0-9]*' | cut -d':' -f2) + + if [ "$code" == "200" ]; then + print_success "新增机构中介成功" + log_to_report "========== 测试3: 新增机构中介黑名单 ==========" + log_to_report "请求: POST ${BASE_URL}/dpc/intermediary" + log_to_report "请求体: $data" + log_to_report "响应已保存至: ${OUTPUT_DIR}/test3_add_entity_response.json" + log_to_report "结果: 成功" + log_to_report "" + + # 通过查询列表获取最新创建的ID(按创建时间倒序) + sleep 1 + local list_response=$(curl -s -X GET "${BASE_URL}/dpc/intermediary/list?pageNum=1&pageSize=1" \ + -H "Authorization: Bearer $TOKEN") + + # 从rows数组中提取第一个intermediaryId + ENTITY_INTERMEDIARY_ID=$(echo "$list_response" | jq -r '.rows[0].intermediaryId' 2>/dev/null) + + if [ -n "$ENTITY_INTERMEDIARY_ID" ] && [ "$ENTITY_INTERMEDIARY_ID" != "null" ]; then + print_info "获取到中介ID: $ENTITY_INTERMEDIARY_ID" + else + print_warning "无法获取中介ID,将使用备用方法" + fi + return 0 + else + print_error "新增机构中介失败: $response" + log_to_report "========== 测试3: 新增机构中介黑名单 ==========" + log_to_report "请求: POST ${BASE_URL}/dpc/intermediary" + log_to_report "请求体: $data" + log_to_report "响应: $response" + log_to_report "结果: 失败" + log_to_report "" + return 1 + fi +} + +# 测试4: 获取中介详情 +test_get_info() { + print_separator + print_info "测试4: 获取中介详情" + print_separator + + if [ -z "$PERSON_INTERMEDIARY_ID" ]; then + print_warning "没有可用的中介ID,跳过此测试" + return 1 + fi + + local url="${BASE_URL}/dpc/intermediary/${PERSON_INTERMEDIARY_ID}" + local response=$(curl -s -X GET "$url" \ + -H "Authorization: Bearer $TOKEN") + + echo "$response" | jq '.' > "${OUTPUT_DIR}/test4_get_info_response.json" 2>/dev/null || echo "$response" > "${OUTPUT_DIR}/test4_get_info_response.json" + + local code=$(echo "$response" | grep -o '"code":[0-9]*' | cut -d':' -f2) + + if [ "$code" == "200" ]; then + print_success "获取中介详情成功" + log_to_report "========== 测试4: 获取中介详情 ==========" + log_to_report "请求: GET $url" + log_to_report "响应已保存至: ${OUTPUT_DIR}/test4_get_info_response.json" + log_to_report "结果: 成功" + log_to_report "" + return 0 + else + print_error "获取中介详情失败: $response" + log_to_report "========== 测试4: 获取中介详情 ==========" + log_to_report "请求: GET $url" + log_to_report "响应: $response" + log_to_report "结果: 失败" + log_to_report "" + return 1 + fi +} + +# 测试5: 修改中介黑名单 +test_edit() { + print_separator + print_info "测试5: 修改中介黑名单" + print_separator + + if [ -z "$PERSON_INTERMEDIARY_ID" ]; then + print_warning "没有可用的中介ID,跳过此测试" + return 1 + fi + + local data='{ + "intermediaryId": '$PERSON_INTERMEDIARY_ID', + "name": "测试个人中介_修改", + "certificateNo": "TESTCERT'${TIMESTAMP}'", + "intermediaryType": "1", + "status": "1", + "remark": "修改后的自动化测试数据" + }' + + local response=$(curl -s -X PUT "${BASE_URL}/dpc/intermediary" \ + -H "Authorization: Bearer $TOKEN" \ + -H "Content-Type: application/json" \ + -d "$data") + + echo "$response" | jq '.' > "${OUTPUT_DIR}/test5_edit_response.json" 2>/dev/null || echo "$response" > "${OUTPUT_DIR}/test5_edit_response.json" + + local code=$(echo "$response" | grep -o '"code":[0-9]*' | cut -d':' -f2) + + if [ "$code" == "200" ]; then + print_success "修改中介成功" + log_to_report "========== 测试5: 修改中介黑名单 ==========" + log_to_report "请求: PUT ${BASE_URL}/dpc/intermediary" + log_to_report "请求体: $data" + log_to_report "响应已保存至: ${OUTPUT_DIR}/test5_edit_response.json" + log_to_report "结果: 成功" + log_to_report "" + return 0 + else + print_error "修改中介失败: $response" + log_to_report "========== 测试5: 修改中介黑名单 ==========" + log_to_report "请求: PUT ${BASE_URL}/dpc/intermediary" + log_to_report "请求体: $data" + log_to_report "响应: $response" + log_to_report "结果: 失败" + log_to_report "" + return 1 + fi +} + +# 测试6: 导出中介黑名单列表 +test_export() { + print_separator + print_info "测试6: 导出中介黑名单列表" + print_separator + + local url="${BASE_URL}/dpc/intermediary/export" + local response=$(curl -s -X POST "$url" \ + -H "Authorization: Bearer $TOKEN" \ + -H "Content-Type: application/json" \ + -d '{}' \ + -o "${OUTPUT_DIR}/test6_export.xlsx" \ + -w "%{http_code}") + + if [ "$response" == "200" ]; then + print_success "导出中介列表成功,文件已保存至: ${OUTPUT_DIR}/test6_export.xlsx" + log_to_report "========== 测试6: 导出中介黑名单列表 ==========" + log_to_report "请求: POST $url" + log_to_report "文件已保存至: ${OUTPUT_DIR}/test6_export.xlsx" + log_to_report "结果: 成功" + log_to_report "" + return 0 + else + print_error "导出中介列表失败,HTTP状态码: $response" + log_to_report "========== 测试6: 导出中介黑名单列表 ==========" + log_to_report "请求: POST $url" + log_to_report "HTTP状态码: $response" + log_to_report "结果: 失败" + log_to_report "" + return 1 + fi +} + +# 测试7: 下载个人中介导入模板 +test_import_person_template() { + print_separator + print_info "测试7: 下载个人中介导入模板" + print_separator + + local url="${BASE_URL}/dpc/intermediary/importPersonTemplate" + local response=$(curl -s -X POST "$url" \ + -H "Authorization: Bearer $TOKEN" \ + -o "${OUTPUT_DIR}/test7_person_template.xlsx" \ + -w "%{http_code}") + + if [ "$response" == "200" ]; then + print_success "下载个人中介导入模板成功,文件已保存至: ${OUTPUT_DIR}/test7_person_template.xlsx" + log_to_report "========== 测试7: 下载个人中介导入模板 ==========" + log_to_report "请求: POST $url" + log_to_report "文件已保存至: ${OUTPUT_DIR}/test7_person_template.xlsx" + log_to_report "结果: 成功" + log_to_report "" + return 0 + else + print_error "下载个人中介导入模板失败,HTTP状态码: $response" + log_to_report "========== 测试7: 下载个人中介导入模板 ==========" + log_to_report "请求: POST $url" + log_to_report "HTTP状态码: $response" + log_to_report "结果: 失败" + log_to_report "" + return 1 + fi +} + +# 测试8: 下载机构中介导入模板 +test_import_entity_template() { + print_separator + print_info "测试8: 下载机构中介导入模板" + print_separator + + local url="${BASE_URL}/dpc/intermediary/importEntityTemplate" + local response=$(curl -s -X POST "$url" \ + -H "Authorization: Bearer $TOKEN" \ + -o "${OUTPUT_DIR}/test8_entity_template.xlsx" \ + -w "%{http_code}") + + if [ "$response" == "200" ]; then + print_success "下载机构中介导入模板成功,文件已保存至: ${OUTPUT_DIR}/test8_entity_template.xlsx" + log_to_report "========== 测试8: 下载机构中介导入模板 ==========" + log_to_report "请求: POST $url" + log_to_report "文件已保存至: ${OUTPUT_DIR}/test8_entity_template.xlsx" + log_to_report "结果: 成功" + log_to_report "" + return 0 + else + print_error "下载机构中介导入模板失败,HTTP状态码: $response" + log_to_report "========== 测试8: 下载机构中介导入模板 ==========" + log_to_report "请求: POST $url" + log_to_report "HTTP状态码: $response" + log_to_report "结果: 失败" + log_to_report "" + return 1 + fi +} + +# 测试9: 删除中介黑名单 +test_remove() { + print_separator + print_info "测试9: 删除中介黑名单" + print_separator + + if [ -z "$PERSON_INTERMEDIARY_ID" ] && [ -z "$ENTITY_INTERMEDIARY_ID" ]; then + print_warning "没有可用的中介ID,跳过此测试" + return 1 + fi + + local ids="" + if [ -n "$PERSON_INTERMEDIARY_ID" ]; then + ids="$PERSON_INTERMEDIARY_ID" + fi + if [ -n "$ENTITY_INTERMEDIARY_ID" ]; then + if [ -n "$ids" ]; then + ids="${ids},${ENTITY_INTERMEDIARY_ID}" + else + ids="$ENTITY_INTERMEDIARY_ID" + fi + fi + + local url="${BASE_URL}/dpc/intermediary/${ids}" + local response=$(curl -s -X DELETE "$url" \ + -H "Authorization: Bearer $TOKEN") + + echo "$response" | jq '.' > "${OUTPUT_DIR}/test9_remove_response.json" 2>/dev/null || echo "$response" > "${OUTPUT_DIR}/test9_remove_response.json" + + local code=$(echo "$response" | grep -o '"code":[0-9]*' | cut -d':' -f2) + + if [ "$code" == "200" ]; then + print_success "删除中介成功" + log_to_report "========== 测试9: 删除中介黑名单 ==========" + log_to_report "请求: DELETE $url" + log_to_report "响应已保存至: ${OUTPUT_DIR}/test9_remove_response.json" + log_to_report "结果: 成功" + log_to_report "" + return 0 + else + print_error "删除中介失败: $response" + log_to_report "========== 测试9: 删除中介黑名单 ==========" + log_to_report "请求: DELETE $url" + log_to_report "响应: $response" + log_to_report "结果: 失败" + log_to_report "" + return 1 + fi +} + +# 测试10: 条件查询(按中介类型) +test_query_by_type() { + print_separator + print_info "测试10: 条件查询(按中介类型)" + print_separator + + local url="${BASE_URL}/dpc/intermediary/list?pageNum=1&pageSize=10&intermediaryType=1" + local response=$(curl -s -X GET "$url" \ + -H "Authorization: Bearer $TOKEN") + + echo "$response" | jq '.' > "${OUTPUT_DIR}/test10_query_by_type_response.json" 2>/dev/null || echo "$response" > "${OUTPUT_DIR}/test10_query_by_type_response.json" + + local code=$(echo "$response" | grep -o '"code":[0-9]*' | cut -d':' -f2) + + if [ "$code" == "200" ]; then + print_success "条件查询成功" + log_to_report "========== 测试10: 条件查询(按中介类型) ==========" + log_to_report "请求: GET $url" + log_to_report "响应已保存至: ${OUTPUT_DIR}/test10_query_by_type_response.json" + log_to_report "结果: 成功" + log_to_report "" + return 0 + else + print_error "条件查询失败: $response" + log_to_report "========== 测试10: 条件查询(按中介类型) ==========" + log_to_report "请求: GET $url" + log_to_report "响应: $response" + log_to_report "结果: 失败" + log_to_report "" + return 1 + fi +} + +# 测试11: 条件查询(按状态) +test_query_by_status() { + print_separator + print_info "测试11: 条件查询(按状态)" + print_separator + + local url="${BASE_URL}/dpc/intermediary/list?pageNum=1&pageSize=10&status=1" + local response=$(curl -s -X GET "$url" \ + -H "Authorization: Bearer $TOKEN") + + echo "$response" | jq '.' > "${OUTPUT_DIR}/test11_query_by_status_response.json" 2>/dev/null || echo "$response" > "${OUTPUT_DIR}/test11_query_by_status_response.json" + + local code=$(echo "$response" | grep -o '"code":[0-9]*' | cut -d':' -f2) + + if [ "$code" == "200" ]; then + print_success "条件查询成功" + log_to_report "========== 测试11: 条件查询(按状态) ==========" + log_to_report "请求: GET $url" + log_to_report "响应已保存至: ${OUTPUT_DIR}/test11_query_by_status_response.json" + log_to_report "结果: 成功" + log_to_report "" + return 0 + else + print_error "条件查询失败: $response" + log_to_report "========== 测试11: 条件查询(按状态) ==========" + log_to_report "请求: GET $url" + log_to_report "响应: $response" + log_to_report "结果: 失败" + log_to_report "" + return 1 + fi +} + +# ============================================================================ +# 主测试流程 +# ============================================================================ + +main() { + print_separator + echo -e "${BLUE} 中介黑名单管理API测试脚本${NC}" + print_separator + echo "测试时间: $(date '+%Y-%m-%d %H:%M:%S')" + echo "基础URL: $BASE_URL" + echo "测试账号: $USERNAME" + print_separator + echo "" + + # 初始化输出目录 + init_output_dir + + # 初始化报告文件 + echo "====================================" > "$REPORT_FILE" + echo "中介黑名单管理API测试报告" >> "$REPORT_FILE" + echo "测试时间: $(date '+%Y-%m-%d %H:%M:%S')" >> "$REPORT_FILE" + echo "====================================" >> "$REPORT_FILE" + echo "" + + # 登录 + if ! login; then + print_error "登录失败,测试终止" + exit 1 + fi + + echo "" + echo "====================================" + echo "开始执行测试用例" + echo "====================================" + echo "" + + # 执行测试 + local tests=( + "test_list" + "test_add_person" + "test_add_entity" + "test_get_info" + "test_edit" + "test_export" + "test_import_person_template" + "test_import_entity_template" + "test_query_by_type" + "test_query_by_status" + "test_remove" + ) + + local passed=0 + local failed=0 + local total=${#tests[@]} + + for test in "${tests[@]}"; do + if $test; then + ((passed++)) + else + ((failed++)) + fi + echo "" + sleep 1 # 避免请求过快 + done + + # 输出测试报告汇总 + print_separator + echo -e "${BLUE} 测试报告汇总${NC}" + print_separator + echo "测试场景总数: $total" + echo -e "${GREEN}通过数量: $passed${NC}" + echo -e "${RED}失败数量: $failed${NC}" + print_separator + + # 将汇总信息写入报告 + echo "" >> "$REPORT_FILE" + echo "====================================" >> "$REPORT_FILE" + echo "测试汇总" >> "$REPORT_FILE" + echo "====================================" >> "$REPORT_FILE" + echo "测试场景总数: $total" >> "$REPORT_FILE" + echo "通过数量: $passed" >> "$REPORT_FILE" + echo "失败数量: $failed" >> "$REPORT_FILE" + echo "通过率: $(awk "BEGIN {printf \"%.2f%%\", $passed/$total*100}")" >> "$REPORT_FILE" + echo "" >> "$REPORT_FILE" + echo "详细响应文件已保存至: ${OUTPUT_DIR}/" >> "$REPORT_FILE" + echo "测试报告文件: $REPORT_FILE" >> "$REPORT_FILE" + echo "====================================" >> "$REPORT_FILE" + + if [ $passed -eq $total ]; then + print_success "所有测试通过!" + echo "" + print_info "详细报告已保存至: $REPORT_FILE" + print_info "响应文件已保存至: ${OUTPUT_DIR}/" + exit 0 + else + print_error "部分测试失败,请查看详细日志" + echo "" + print_info "详细报告已保存至: $REPORT_FILE" + print_info "响应文件已保存至: ${OUTPUT_DIR}/" + exit 1 + fi +} + +# 执行主函数 +main diff --git a/doc/scripts/test_intermediary_complete.sh b/doc/scripts/test_intermediary_complete.sh new file mode 100644 index 0000000..fa54cc2 --- /dev/null +++ b/doc/scripts/test_intermediary_complete.sh @@ -0,0 +1,352 @@ +#!/bin/bash + +# 中介新增和修改功能完整测试脚本 +# 测试个人和机构中介的新增和修改功能 + +BASE_URL="http://localhost:8080" +USERNAME="admin" +PASSWORD="admin123" + +# 颜色输出 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + +# 测试结果统计 +TOTAL_TESTS=0 +PASSED_TESTS=0 +FAILED_TESTS=0 + +# 测试报告文件 +REPORT_FILE="doc/scripts/test_output/test_report_$(date +%Y%m%d_%H%M%S).txt" +mkdir -p doc/scripts/test_output + +# 日志函数 +log_info() { + echo -e "${GREEN}[INFO]${NC} $1" | tee -a "$REPORT_FILE" +} + +log_error() { + echo -e "${RED}[ERROR]${NC} $1" | tee -a "$REPORT_FILE" +} + +log_warning() { + echo -e "${YELLOW}[WARNING]${NC} $1" | tee -a "$REPORT_FILE" +} + +log_test() { + echo -e "${YELLOW}[TEST]${NC} $1" | tee -a "$REPORT_FILE" +} + +# 测试结果记录 +record_pass() { + ((PASSED_TESTS++)) + ((TOTAL_TESTS++)) + log_info "✓ 测试通过: $1" +} + +record_fail() { + ((FAILED_TESTS++)) + ((TOTAL_TESTS++)) + log_error "✗ 测试失败: $1" +} + +# 登录获取token +login() { + log_test "登录获取Token..." + local response=$(curl -s -X POST "$BASE_URL/login/test" \ + -H "Content-Type: application/json" \ + -d "{\"username\":\"$USERNAME\",\"password\":\"$PASSWORD\"}") + + local token=$(echo $response | grep -o '"token":"[^"]*' | sed 's/"token":"//') + + if [ -z "$token" ]; then + log_error "登录失败,无法获取Token" + exit 1 + fi + + log_info "登录成功,Token: ${token:0:20}..." + echo "$token" +} + +# 测试新增个人中介 +test_add_person_intermediary() { + local token=$1 + + log_test "测试新增个人中介..." + + local add_data=$(cat < item.intermediaryType === '1').length; + const corpCount = list.filter(item => item.intermediaryType === '2').length; + log(` 个人类型: ${indivCount} 条`, 'cyan'); + log(` 机构类型: ${corpCount} 条`, 'cyan'); + } else { + logTest('查询列表失败', false, response.data.msg); + } + } catch (error) { + logTest('查询列表异常', false, error.message); + } +} + +/** + * 清理测试数据 + */ +async function cleanup() { + logSection('清理测试数据'); + + const idsToDelete = []; + if (testIndivId) idsToDelete.push(testIndivId); + if (testCorpId) idsToDelete.push(testCorpId); + + for (const id of idsToDelete) { + try { + await api.delete(`/dpc/intermediary/${id}`); + logTest(`删除测试数据 ID: ${id}`, true); + } catch (error) { + logTest(`删除失败 ID: ${id}`, false, error.message); + } + } +} + +// ==================== 主流程 ==================== + +async function runTests() { + log('\n╔════════════════════════════════════════════════════════════╗'); + log('║ 中介黑名单弹窗优化功能测试 ║', 'bright'); + log('║ 测试日期: ' + new Date().toLocaleString('zh-CN') + ' ║'); + log('╚════════════════════════════════════════════════════════════╝'); + + try { + // 按顺序执行测试 + await testLogin(); + await testAddIndividualRequired(); + await testAddIndividualMaxLength(); + await testAddCorpSync(); + await testAddCorpCreditCodeLength(); + await testEditIndividualTypeLock(); + await testEditCorpTypeLock(); + await testAddWithoutType(); + await testListQuery(); + + logSection('测试完成'); + log('所有测试用例执行完毕!', 'green'); + + } catch (error) { + log('\n测试流程异常终止', 'red'); + log(error.message, 'red'); + } finally { + // 询问是否清理测试数据 + log('\n是否清理测试数据?(在自动化环境中会自动清理)', 'yellow'); + await cleanup(); + } +} + +// 运行测试 +if (require.main === module) { + runTests().catch(console.error); +} + +module.exports = { runTests }; diff --git a/doc/scripts/test_intermediary_edit_fix.bat b/doc/scripts/test_intermediary_edit_fix.bat new file mode 100644 index 0000000..765e639 --- /dev/null +++ b/doc/scripts/test_intermediary_edit_fix.bat @@ -0,0 +1,107 @@ +@echo off +setlocal enabledelayedexpansion + +REM 中介黑名单编辑功能修复测试脚本 +REM 用于验证修改按钮点击后数据是否正确反显 + +set BASE_URL=http://localhost:8080 +set USERNAME=admin +set PASSWORD=admin123 + +echo ========================================== +echo 中介黑名单编辑功能修复测试 +echo ========================================== +echo. + +REM 步骤1: 登录获取 token +echo 步骤1: 登录系统... +curl -s -X POST "%BASE_URL%/login/test" -H "Content-Type: application/json" -d "{\"username\":\"%USERNAME%\",\"password\":\"%PASSWORD%\"}" > login_response.json + +echo 登录响应: +type login_response.json +echo. + +REM 使用 PowerShell 提取 token +for /f "tokens=2 delims=:," %%a in ('powershell -command "(Get-Content login_response.json | ConvertFrom-Json).data.token"') do set TOKEN=%%a +set TOKEN=%TOKEN:"=% + +if "%TOKEN%"=="" ( + echo ❌ 登录失败,无法获取 token + pause + exit /b 1 +) + +echo ✅ 登录成功,Token: %TOKEN:~0,20%... +echo. + +REM 步骤2: 查询中介黑名单列表 +echo 步骤2: 查询中介黑名单列表... +curl -s -X GET "%BASE_URL%/dpc/intermediary/list?pageNum=1&pageSize=10" -H "Authorization: Bearer %TOKEN%" > list_response.json + +echo 列表响应: +powershell -command "Get-Content list_response.json | ConvertFrom-Json | ConvertTo-Json -Depth 3" +echo. + +REM 步骤3: 获取个人中介详情 +echo 步骤3: 测试个人中介详情查询(假设 ID=1)... +curl -s -X GET "%BASE_URL%/dpc/intermediary/1" -H "Authorization: Bearer %TOKEN%" > person_detail.json + +echo 个人中介详情响应: +powershell -command "Get-Content person_detail.json | ConvertFrom-Json | ConvertTo-Json -Depth 10" +echo. + +REM 检查关键字段 +findstr /C:"\"intermediaryType\":\"1\"" person_detail.json >nul +if !errorlevel! equ 0 ( + echo ✅ 个人中介类型字段正确 +) else ( + echo ❌ 个人中介类型字段缺失或错误 +) + +findstr /C:"\"name\"" person_detail.json >nul +if !errorlevel! equ 0 ( + echo ✅ 姓名字段存在 +) else ( + echo ❌ 姓名字段缺失 +) + +echo. + +REM 步骤4: 获取机构中介详情(假设 ID=2) +echo 步骤4: 测试机构中介详情查询(假设 ID=2)... +curl -s -X GET "%BASE_URL%/dpc/intermediary/2" -H "Authorization: Bearer %TOKEN%" > entity_detail.json + +echo 机构中介详情响应: +powershell -command "Get-Content entity_detail.json | ConvertFrom-Json | ConvertTo-Json -Depth 10" +echo. + +REM 检查关键字段 +findstr /C:"\"intermediaryType\":\"2\"" entity_detail.json >nul +if !errorlevel! equ 0 ( + echo ✅ 机构中介类型字段正确 +) else ( + echo ❌ 机构中介类型字段缺失或错误 +) + +findstr /C:"\"name\"" entity_detail.json >nul +if !errorlevel! equ 0 ( + echo ✅ 机构名称字段存在 +) else ( + echo ❌ 机构名称字段缺失 +) + +echo. +echo ========================================== +echo 测试完成 +echo ========================================== +echo. +echo 验证要点: +echo 1. 确保后端返回的数据包含 intermediaryType 字段 +echo 2. 确保返回的数据结构与前端表单字段匹配 +echo 3. 个人中介 (intermediaryType='1') 应包含 indivXXX 字段 +echo 4. 机构中介 (intermediaryType='2') 应包含 corpXXX 字段 +echo. +echo 如需测试特定 ID,请修改脚本中的 ID 值 +echo. + +pause diff --git a/doc/scripts/test_intermediary_edit_fix.sh b/doc/scripts/test_intermediary_edit_fix.sh new file mode 100644 index 0000000..bf45fb9 --- /dev/null +++ b/doc/scripts/test_intermediary_edit_fix.sh @@ -0,0 +1,100 @@ +#!/bin/bash + +# 中介黑名单编辑功能修复测试脚本 +# 用于验证修改按钮点击后数据是否正确反显 + +BASE_URL="http://localhost:8080" +USERNAME="admin" +PASSWORD="admin123" + +echo "==========================================" +echo "中介黑名单编辑功能修复测试" +echo "==========================================" +echo "" + +# 步骤1: 登录获取 token +echo "步骤1: 登录系统..." +LOGIN_RESPONSE=$(curl -s -X POST "${BASE_URL}/login/test" \ + -H "Content-Type: application/json" \ + -d "{\"username\":\"${USERNAME}\",\"password\":\"${PASSWORD}\"}") + +echo "登录响应: ${LOGIN_RESPONSE}" + +# 提取 token (假设返回格式为 {"code":200,"data":{"token":"xxx"}}) +TOKEN=$(echo ${LOGIN_RESPONSE} | grep -o '"token":"[^"]*' | sed 's/"token":"//') + +if [ -z "$TOKEN" ]; then + echo "❌ 登录失败,无法获取 token" + exit 1 +fi + +echo "✅ 登录成功,Token: ${TOKEN:0:20}..." +echo "" + +# 步骤2: 查询中介黑名单列表 +echo "步骤2: 查询中介黑名单列表..." +LIST_RESPONSE=$(curl -s -X GET "${BASE_URL}/dpc/intermediary/list?pageNum=1&pageSize=10" \ + -H "Authorization: Bearer ${TOKEN}") + +echo "列表响应: ${LIST_RESPONSE}" | head -c 500 +echo "" +echo "" + +# 步骤3: 获取个人中介详情 +echo "步骤3: 测试个人中介详情查询..." +PERSON_ID_RESPONSE=$(curl -s -X GET "${BASE_URL}/dpc/intermediary/1" \ + -H "Authorization: Bearer ${TOKEN}") + +echo "个人中介详情响应:" +echo "${PERSON_ID_RESPONSE}" | python -m json.tool 2>/dev/null || echo "${PERSON_ID_RESPONSE}" +echo "" + +# 检查关键字段是否存在 +if echo "${PERSON_ID_RESPONSE}" | grep -q '"intermediaryType":"1"'; then + echo "✅ 个人中介类型字段正确" +else + echo "❌ 个人中介类型字段缺失或错误" +fi + +if echo "${PERSON_ID_RESPONSE}" | grep -q '"name"'; then + echo "✅ 姓名字段存在" +else + echo "❌ 姓名字段缺失" +fi + +echo "" + +# 步骤4: 获取机构中介详情(假设 ID 为 2) +echo "步骤4: 测试机构中介详情查询..." +ENTITY_ID_RESPONSE=$(curl -s -X GET "${BASE_URL}/dpc/intermediary/2" \ + -H "Authorization: Bearer ${TOKEN}") + +echo "机构中介详情响应:" +echo "${ENTITY_ID_RESPONSE}" | python -m json.tool 2>/dev/null || echo "${ENTITY_ID_RESPONSE}" +echo "" + +# 检查关键字段是否存在 +if echo "${ENTITY_ID_RESPONSE}" | grep -q '"intermediaryType":"2"'; then + echo "✅ 机构中介类型字段正确" +else + echo "❌ 机构中介类型字段缺失或错误" +fi + +if echo "${ENTITY_ID_RESPONSE}" | grep -q '"name"'; then + echo "✅ 机构名称字段存在" +else + echo "❌ 机构名称字段缺失" +fi + +echo "" +echo "==========================================" +echo "测试完成" +echo "==========================================" +echo "" +echo "验证要点:" +echo "1. 确保后端返回的数据包含 intermediaryType 字段" +echo "2. 确保返回的数据结构与前端表单字段匹配" +echo "3. 个人中介 (intermediaryType='1') 应包含 indivXXX 字段" +echo "4. 机构中介 (intermediaryType='2') 应包含 corpXXX 字段" +echo "" +echo "如需测试特定 ID,请修改脚本中的 ID 值" diff --git a/doc/scripts/test_intermediary_getinfo.sh b/doc/scripts/test_intermediary_getinfo.sh new file mode 100644 index 0000000..f6b2a13 --- /dev/null +++ b/doc/scripts/test_intermediary_getinfo.sh @@ -0,0 +1,114 @@ +#!/bin/bash + +# 中介黑名单详细信息接口测试脚本 +# 用于测试点击修改按钮时,后端接口是否正确返回中介类型信息 + +BASE_URL="http://localhost:8080" + +# 颜色定义 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + +echo "========================================" +echo "中介黑名单详细信息接口测试" +echo "========================================" +echo "" + +# 1. 登录获取token +echo -e "${YELLOW}1. 登录系统获取token...${NC}" +LOGIN_RESPONSE=$(curl -s -X POST "${BASE_URL}/login/test" \ + -H "Content-Type: application/json" \ + -d '{"username":"admin","password":"admin123"}') + +TOKEN=$(echo $LOGIN_RESPONSE | grep -o '"token":"[^"]*"' | sed 's/"token":"//' | sed 's/"//') + +if [ -z "$TOKEN" ]; then + echo -e "${RED}登录失败,无法获取token${NC}" + exit 1 +fi + +echo -e "${GREEN}登录成功,获取到token${NC}" +echo "" + +# 2. 查询列表获取一个中介ID +echo -e "${YELLOW}2. 查询中介列表,获取测试数据...${NC}" +LIST_RESPONSE=$(curl -s -X GET "${BASE_URL}/dpc/intermediary/list?pageNum=1&pageSize=10" \ + -H "Authorization: Bearer ${TOKEN}") + +# 提取第一个中介ID +INTERMEDIARY_ID=$(echo $LIST_RESPONSE | grep -o '"intermediaryId":[0-9]*' | head -1 | sed 's/"intermediaryId"://') + +if [ -z "$INTERMEDIARY_ID" ]; then + echo -e "${RED}未找到中介数据${NC}" + exit 1 +fi + +echo -e "${GREEN}找到中介ID: ${INTERMEDIARY_ID}${NC}" +echo "" + +# 3. 测试获取详细信息 +echo -e "${YELLOW}3. 获取中介详细信息 (ID: ${INTERMEDIARY_ID})...${NC}" +DETAIL_RESPONSE=$(curl -s -X GET "${BASE_URL}/dpc/intermediary/${INTERMEDIARY_ID}" \ + -H "Authorization: Bearer ${TOKEN}") + +echo "响应内容:" +echo "$DETAIL_RESPONSE" | python -m json.tool 2>/dev/null || echo "$DETAIL_RESPONSE" +echo "" + +# 4. 检查是否包含intermediaryType字段 +echo -e "${YELLOW}4. 验证返回数据是否包含中介类型字段...${NC}" +if echo "$DETAIL_RESPONSE" | grep -q '"intermediaryType"'; then + INTERMEDIARY_TYPE=$(echo $DETAIL_RESPONSE | grep -o '"intermediaryType":"[^"]*"' | sed 's/"intermediaryType":"//' | sed 's/"//') + + if [ "$INTERMEDIARY_TYPE" = "1" ]; then + echo -e "${GREEN}✓ 包含中介类型字段,类型为: 个人 (1)${NC}" + elif [ "$INTERMEDIARY_TYPE" = "2" ]; then + echo -e "${GREEN}✓ 包含中介类型字段,类型为: 机构 (2)${NC}" + else + echo -e "${YELLOW}⚠ 包含中介类型字段,但值为: ${INTERMEDIARY_TYPE}${NC}" + fi +else + echo -e "${RED}✗ 缺少中介类型字段 (intermediaryType)${NC}" + echo "" + echo "这是导致前端表单无法正确反显的根本原因!" + echo "前端EditDialog组件需要根据intermediaryType判断显示个人还是机构表单" +fi +echo "" + +# 5. 检查其他关键字段 +echo -e "${YELLOW}5. 验证其他关键字段...${NC}" +check_field() { + FIELD_NAME=$1 + if echo "$DETAIL_RESPONSE" | grep -q "\"${FIELD_NAME}\""; then + echo -e "${GREEN} ✓ ${FIELD_NAME}: 存在${NC}" + else + echo -e "${RED} ✗ ${FIELD_NAME}: 缺失${NC}" + fi +} + +check_field "intermediaryId" +check_field "name" +check_field "certificateNo" +check_field "status" +check_field "remark" +echo "" + +# 6. 根据中介类型检查特定字段 +if [ "$INTERMEDIARY_TYPE" = "1" ]; then + echo -e "${YELLOW}6. 验证个人类型专属字段...${NC}" + check_field "indivType" + check_field "indivGender" + check_field "indivCertType" +elif [ "$INTERMEDIARY_TYPE" = "2" ]; then + echo -e "${YELLOW}6. 验证机构类型专属字段...${NC}" + check_field "corpCreditCode" + check_field "corpType" + check_field "corpNature" +fi +echo "" + +echo "========================================" +echo "测试完成" +echo "========================================" diff --git a/doc/scripts/test_intermediary_type_fix.bat b/doc/scripts/test_intermediary_type_fix.bat new file mode 100644 index 0000000..8cc1129 --- /dev/null +++ b/doc/scripts/test_intermediary_type_fix.bat @@ -0,0 +1,205 @@ +@echo off +chcp 65001 >nul +setlocal EnableDelayedExpansion + +REM 中介类型修改修复测试脚本(Windows版本) +REM 测试个人和机构中介的修改功能 + +set BASE_URL=http://localhost:8080 +set USERNAME=admin +set PASSWORD=admin123 + +REM 创建输出目录 +if not exist "doc\scripts\test_output" mkdir "doc\scripts\test_output" + +REM 生成报告文件名 +set REPORT_FILE=doc\scripts\test_output\test_report_%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%.txt +set REPORT_FILE=%REPORT_FILE: =0% + +echo ======================================== > "%REPORT_FILE%" +echo 中介类型修改修复测试 >> "%REPORT_FILE%" +echo 测试时间: %date% %time% >> "%REPORT_FILE%" +echo ======================================== >> "%REPORT_FILE%" +echo. >> "%REPORT_FILE%" + +REM 测试统计 +set TOTAL_TESTS=0 +set PASSED_TESTS=0 +set FAILED_TESTS=0 + +echo [TEST] 开始测试... + +REM 登录获取Token +echo [TEST] 登录获取Token... +curl -s -X POST "%BASE_URL%/login/test" -H "Content-Type: application/json" -d "{\"username\":\"%USERNAME%\",\"password\":\"%PASSWORD%\"}" > temp_response.json + +REM 提取token +for /f "tokens=2 delims=:\"" %%a in ('findstr /c:"\"token\"" temp_response.json') do ( + set TOKEN=%%a + goto :found_token +) +:found_token + +if "!TOKEN!"=="" ( + echo [ERROR] 登录失败,无法获取Token >> "%REPORT_FILE%" + del temp_response.json + exit /b 1 +) + +echo [INFO] 登录成功 >> "%REPORT_FILE%" +del temp_response.json + +REM 测试1: 获取个人中介列表 +echo. >> "%REPORT_FILE%" +echo [TEST] === 测试1: 获取个人中介列表 === >> "%REPORT_FILE%" +curl -s -X GET "%BASE_URL%/dpc/intermediary/list?intermediaryType=1&pageNum=1&pageSize=1" -H "Authorization: Bearer !TOKEN!" > temp_response.json + +REM 提取第一个个人中介ID +for /f "tokens=2 delims=:" %%a in ('findstr /c:"\"intermediaryId\"" temp_response.json') do ( + set PERSON_ID=%%a + set PERSON_ID=!PERSON_ID:,=! + goto :found_person_id +) +:found_person_id + +if "!PERSON_ID!"=="" ( + echo [ERROR] 未能获取个人中介ID >> "%REPORT_FILE%" + set /a FAILED_TESTS+=1 +) else ( + echo [INFO] 获取个人中介ID: !PERSON_ID! >> "%REPORT_FILE%" + set /a PASSED_TESTS+=1 +) +set /a TOTAL_TESTS+=1 + +REM 测试2: 修改个人中介 +if not "!PERSON_ID!"=="" ( + echo. >> "%REPORT_FILE%" + echo [TEST] === 测试2: 修改个人中介 === >> "%REPORT_FILE%" + + REM 创建请求数据文件 + echo {> update_person.json + echo "intermediaryId": !PERSON_ID!,>> update_person.json + echo "name": "测试个人修改",>> update_person.json + echo "certificateNo": "110101199001011234",>> update_person.json + echo "indivType": "中介",>> update_person.json + echo "indivSubType": "本人",>> update_person.json + echo "indivGender": "M",>> update_person.json + echo "indivCertType": "身份证",>> update_person.json + echo "indivPhone": "13800138000",>> update_person.json + echo "indivCompany": "测试公司",>> update_person.json + echo "indivPosition": "经纪人",>> update_person.json + echo "status": "0",>> update_person.json + echo "remark": "修改测试">> update_person.json + echo }>> update_person.json + + curl -s -X PUT "%BASE_URL%/dpc/intermediary/person" -H "Authorization: Bearer !TOKEN!" -H "Content-Type: application/json" -d @update_person.json > update_result.json + + type update_result.json >> "%REPORT_FILE%" + echo. >> "%REPORT_FILE%" + + findstr /c:"\"code\":200" update_result.json >nul + if !errorlevel! equ 0 ( + echo [INFO] 个人中介修改接口调用成功 >> "%REPORT_FILE%" + set /a PASSED_TESTS+=1 + ) else ( + echo [ERROR] 个人中介修改接口调用失败 >> "%REPORT_FILE%" + set /a FAILED_TESTS+=1 + ) + set /a TOTAL_TESTS+=1 + + del update_person.json + del update_result.json +) + +REM 测试3: 获取机构中介列表 +echo. >> "%REPORT_FILE%" +echo [TEST] === 测试3: 获取机构中介列表 === >> "%REPORT_FILE%" +curl -s -X GET "%BASE_URL%/dpc/intermediary/list?intermediaryType=2&pageNum=1&pageSize=1" -H "Authorization: Bearer !TOKEN!" > temp_response.json + +REM 提取第一个机构中介ID +for /f "tokens=2 delims=:" %%a in ('findstr /c:"\"intermediaryId\"" temp_response.json') do ( + set ENTITY_ID=%%a + set ENTITY_ID=!ENTITY_ID:,=! + goto :found_entity_id +) +:found_entity_id + +if "!ENTITY_ID!"=="" ( + echo [ERROR] 未能获取机构中介ID >> "%REPORT_FILE%" + set /a FAILED_TESTS+=1 +) else ( + echo [INFO] 获取机构中介ID: !ENTITY_ID! >> "%REPORT_FILE%" + set /a PASSED_TESTS+=1 +) +set /a TOTAL_TESTS+=1 + +REM 测试4: 修改机构中介 +if not "!ENTITY_ID!"=="" ( + echo. >> "%REPORT_FILE%" + echo [TEST] === 测试4: 修改机构中介 === >> "%REPORT_FILE%" + + REM 创建请求数据文件 + echo {> update_entity.json + echo "intermediaryId": !ENTITY_ID!,>> update_entity.json + echo "name": "测试机构修改",>> update_entity.json + echo "certificateNo": "91110000XXXXXXXXXX",>> update_entity.json + echo "corpCreditCode": "91110000XXXXXXXXXX",>> update_entity.json + echo "corpType": "有限责任公司",>> update_entity.json + echo "corpNature": "民企",>> update_entity.json + echo "corpIndustry": "房地产",>> update_entity.json + echo "corpAddress": "北京市朝阳区",>> update_entity.json + echo "corpLegalRep": "张三",>> update_entity.json + echo "status": "0",>> update_entity.json + echo "remark": "修改测试">> update_entity.json + echo }>> update_entity.json + + curl -s -X PUT "%BASE_URL%/dpc/intermediary/entity" -H "Authorization: Bearer !TOKEN!" -H "Content-Type: application/json" -d @update_entity.json > update_result.json + + type update_result.json >> "%REPORT_FILE%" + echo. >> "%REPORT_FILE%" + + findstr /c:"\"code\":200" update_result.json >nul + if !errorlevel! equ 0 ( + echo [INFO] 机构中介修改接口调用成功 >> "%REPORT_FILE%" + set /a PASSED_TESTS+=1 + ) else ( + echo [ERROR] 机构中介修改接口调用失败 >> "%REPORT_FILE%" + set /a FAILED_TESTS+=1 + ) + set /a TOTAL_TESTS+=1 + + del update_entity.json + del update_result.json +) + +REM 清理临时文件 +if exist temp_response.json del temp_response.json + +REM 输出测试总结 +echo. >> "%REPORT_FILE%" +echo ======================================== >> "%REPORT_FILE%" +echo 测试总结 >> "%REPORT_FILE%" +echo ======================================== >> "%REPORT_FILE%" +echo 总测试数: %TOTAL_TESTS% >> "%REPORT_FILE%" +echo 通过: %PASSED_TESTS% >> "%REPORT_FILE%" +echo 失败: %FAILED_TESTS% >> "%REPORT_FILE%" +echo ======================================== >> "%REPORT_FILE%" + +echo. +echo ======================================== +echo 测试总结 +echo ======================================== +echo 总测试数: %TOTAL_TESTS% +echo 通过: %PASSED_TESTS% +echo 失败: %FAILED_TESTS% +echo ======================================== +echo. +echo 详细报告已保存到: %REPORT_FILE% + +if %FAILED_TESTS% equ 0 ( + echo [INFO] 所有测试通过! + exit /b 0 +) else ( + echo [ERROR] 部分测试失败,请查看详细日志 + exit /b 1 +) diff --git a/doc/scripts/test_intermediary_type_fix.sh b/doc/scripts/test_intermediary_type_fix.sh new file mode 100644 index 0000000..9fe5662 --- /dev/null +++ b/doc/scripts/test_intermediary_type_fix.sh @@ -0,0 +1,271 @@ +#!/bin/bash + +# 中介类型修改修复测试脚本 +# 测试个人和机构中介的修改功能 + +BASE_URL="http://localhost:8080" +USERNAME="admin" +PASSWORD="admin123" + +# 颜色输出 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + +# 测试结果统计 +TOTAL_TESTS=0 +PASSED_TESTS=0 +FAILED_TESTS=0 + +# 测试报告文件 +REPORT_FILE="doc/scripts/test_output/test_report_$(date +%Y%m%d_%H%M%S).txt" +mkdir -p doc/scripts/test_output + +# 日志函数 +log_info() { + echo -e "${GREEN}[INFO]${NC} $1" | tee -a "$REPORT_FILE" +} + +log_error() { + echo -e "${RED}[ERROR]${NC} $1" | tee -a "$REPORT_FILE" +} + +log_warning() { + echo -e "${YELLOW}[WARNING]${NC} $1" | tee -a "$REPORT_FILE" +} + +log_test() { + echo -e "${YELLOW}[TEST]${NC} $1" | tee -a "$REPORT_FILE" +} + +# 测试结果记录 +record_pass() { + ((PASSED_TESTS++)) + ((TOTAL_TESTS++)) + log_info "✓ 测试通过: $1" +} + +record_fail() { + ((FAILED_TESTS++)) + ((TOTAL_TESTS++)) + log_error "✗ 测试失败: $1" +} + +# 登录获取token +login() { + log_test "登录获取Token..." + local response=$(curl -s -X POST "$BASE_URL/login/test" \ + -H "Content-Type: application/json" \ + -d "{\"username\":\"$USERNAME\",\"password\":\"$PASSWORD\"}") + + local token=$(echo $response | grep -o '"token":"[^"]*' | sed 's/"token":"//') + + if [ -z "$token" ]; then + log_error "登录失败,无法获取Token" + exit 1 + fi + + log_info "登录成功,Token: ${token:0:20}..." + echo "$token" +} + +# 获取中介列表 +get_intermediary_list() { + local token=$1 + local type=$2 + + log_test "获取中介列表(类型: $type)..." + local response=$(curl -s -X GET "$BASE_URL/dpc/intermediary/list?intermediaryType=$type&pageNum=1&pageSize=1" \ + -H "Authorization: Bearer $token") + + echo "$response" +} + +# 测试修改个人中介 +test_update_person_intermediary() { + local token=$1 + local intermediary_id=$2 + + log_test "测试修改个人中介 (ID: $intermediary_id)..." + + local update_data=$(cat <)zi#zmK(uwdTCIP+lRan%1_kI}| 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

k z`r!vE&bOB~kIgzS;yO)25$%wl`#GbtKM?>@uUtRv>V><0)_}&$;4Cg4a8$x~>r1ou zVeo4KQ0J2%4WY8u_0M_{u{(Ljg{g?HRmt(`p=kr}A8H};jW5VO<~}m&UY0!#4DM3r z@Nb^MEy6{^TZ;+@Z^w5AcF1kV$6zxq{j5+~n2F^x=`J5~K z^xG0)(UfvDk3t@cXmlsMJ`ul+17|H*#_uoP_;_(&q4EX7?%?L_C4*e#4E@g2+xNkc zM?roLZ`pjkFY>(SOMV_M8T~B|A+;J4%dxksg7?tDKY{^Iedk-xmy+`k+m|d4rVpS% zc3?0PY8UJkOT(Ky+?875XKc8V;+|jhYgot;r`cGYT!-H=M^19#{g8{pCUhbcA(7G? zH{tChu?XTT8WY(@0aK1XoNmBrN%62DlX}aBAZhiU|M`Y(U9hrYDMyb{5QH&MKDW<> z0!)dH&3m-4alh3e)%4F!y8h2j+C}no>0p_= z()AUhlnw50V_5*i`~gT;gs;Q_WmF(hgTSzCMEc%u>opmEnm8z)ACcYjVNvFz7^a+f z^NF8UWq*KBwz;Ro@e7C)6Yw!S_YEc8A#rtAm@#09R8qKzO5kP^tZG8nqO3FUW?*v8 z6k)|0qEMn0|2l6ikW~Bm2tgyE_*iaF2h9ROK#{Pesr}s8dXp4`3^9v}Px%Mrfi-3b zOG2p7m2?_@v0yJTO@Vq7dbP`P>!+NVi<$r22wrpp=NF8!Do`!HfXV~^Of04l;+N(9 zQWvHkG4)SB2C(-pGwGlEatGlTNfia!`m6E@HlZHw{$0DuldhT|?FXH(@w?H^NV-l(r&wgyU93Oz+{m!m(pL zFBw{j5S-;9UH_9i(f%s6VgG{`T=#M@kEg&-+Sgg?)BJ`w*=vbO= z+e0r(L_ghou9C+_Uw(woTy#1!FruYqV_Xtu%Xt48*k52Q%2{tw@Dno3gd<7-ZhGQl zW*9$k+vxI|PQbxc{>g54n5fQTmHSkhEUa2FxT|rY;{4KvDh*U8i@=$-S01LM^Ld5T z!}iS7Mf*P1$QAjr)Ykk7F}}8992ipWS~7q`&u4dMHLy<6hm@v)#39}D&# zEAwB))wSaewoG!!_K~Ziye!MZ?1q;AA#!@h*=xDdF4-OP4WX~xOUXa|lY*+xx`rPR zOe&znM4IaS+vN_$po3PkP6NfP!j2^N1ih*d1^a)ds9lg3G!;h~-(C2;9_OKW{wn8$ zY`@!qQ$2Gm%}_NV-& z^zqDF}B_& z13;%rDAP2-@F8jNNFIC;Y*DWg!2BltgR|R{%jj=u`i}nFg2Mg-!*Dd2Q{JnkmTAfKj>tBUuKv_|Co`j*)Xhn!Zs2&cDCd{9$yWD0WCcYFX zzg1K{OFpjRl~a#n0+83@Xg`78fc}m#7t8MH?F}?#TF=#*#zQ`-xG8UAEZIZ6^^q2M zT_pByN|#+`{Lw<_H^N;eB5YYe&cs_eM7*YR`w;IEtf?|5A-VEndyQ^YnF8Cf;><(= z9Dc>P%fPBpYP6u&^|4+V;~aSzG&Mq2)*HT(;28$GvJb$dV$fmjt`ZlE3a7Mu?;KoZ z(ZR~5D!`H+n{}hUB18^U0k@h?=B*qoC^kNmyRryr09uUj9H#kgJ5?a^@>j(m z(G{KgH4e0W*fu0?CXIn2YVK}^`-~_PqF1Jd>M`&2e{Vo{F95Zi>O;{Ocb}IoEgieslTGDtyQ_ac%7n8cz za!DjHyw)a`9M6f}qqgyjG%tUc`JILmO^(j&xyvymT^cc2TpX~h(oaP{UEm@O( zG#;FIy6(i)9;D)UrZlqq5X9V7NF&G)n~X_+851M|94&Reke|B~`egOp<|<@80=>8E zE>~mHC40qxWj=hb!zXs?V=h^fjJ@ws?uO}e8>}iFvbdN%N13u9M&UlIzT`sCJit=rm)JnP`Sn8aLuTFUbyaLSQ zB+?QK$zXyrH-JR>eX*(3BmRxanNr>smwuhXl5U4I-ZJFmwx}bI+Y%+9D_7HuFgkKM zz)hZus{^j42_)r1=ZRViYcC=vVVQwl3N24NNlg)|iGOz4Phj1!Qbv=AN)+as>2+RA zhkuBF{xo8}az9LaNBx-VpKhZAbQ_V5h*Gknok^+raGX}XE*a1#x^eR7A zHX|onLvj`h$+)($$a9BhwQ98qyQkAZD!=5TR4c+jg+}@TA=r90y^)}>#|>EkFUh8| z3~8y5pffrXmuM<~%m>6pH2l1)qU!#7R5+XGr)JROjQCmL+r2ShVE(F9%hD9so1w`f zynf0Gd2)15uT!FO{X2hZc%U6W{l{#GXtljxAUs?;GKcGRuAxN{Dir_Vy*f&2`)Kn! z)m^**p{F!%*v+FX&Q5fymw)!Q;CaJ@F7ZrVg;4R6c59)R_QCZ-VC#{Tf^Ky-8YUg^{r23dy=Dp?eUhQV z_O;RvNs3>A`iDhq@)}5SzB4WN7WBJ0^~3e6r_}F1{;G;Q1#Kr^RrUjIV+t5}En-usI+ONTz(8tg zA%@I@tyjdXP5R|M0jjosya>SIZms8)RHwnc#_H5U+25=qR(T0?t&;D`EE%!VfC>_p zc)Q0hkr)~8nbAlwn@{ivv+pB2H0`P!t{d=+vbdxmfKt!CNzkg8>SOO#M|(Zrbxk9` zvrxm|6x-I$-~DN?_lWzkywQ)R!xWqj*q-l|b{-`w9(U`V@6BKA>zyx_USRkXFA_RW z3c`0aE|wiTkGhA>d&7_H54WDMV+t<*fbU?2RttJqPDR2`(l3I~;x5id6fe4uJyC;S9;@r8mG#-u~hYN_jPdhwKWd%bnvkj4s>(<-xnx- z8Qi`E+QEnj2&n(7eJHrBt+#`#kBBh--~ZiE(mnb{I%v=YzApb)!)$P=#~$|j-X5Ml zB6gmh|JTPpT+8bx1s_lYzUcp}wG;9GXl?J|?eKp!e_Gv`6a<>ZgD^ZhsQ>~-cIh0KL6Jhwr-m~AORiiBPAf9`L8QH1>eD6!8gd&;s0z}W)R`N3z|5B zzSI3z(^B$(O#?iw6aB_d`3 literal 0 HcmV?d00001 diff --git a/doc/scripts/test_output/test7_person_template.xlsx b/doc/scripts/test_output/test7_person_template.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..e7403dbc749a867d5354d18cfac30ff1fd7a1fac GIT binary patch literal 4008 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 literal 0 HcmV?d00001 diff --git a/doc/scripts/test_output/test8_entity_template.xlsx b/doc/scripts/test_output/test8_entity_template.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..35712e6dea8383fbb5d35c2e409aa563b503c325 GIT binary patch literal 4118 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 literal 0 HcmV?d00001 diff --git a/doc/scripts/test_output/test9_remove_response.json b/doc/scripts/test_output/test9_remove_response.json new file mode 100644 index 0000000..67a5920 --- /dev/null +++ b/doc/scripts/test_output/test9_remove_response.json @@ -0,0 +1,4 @@ +{ + "msg": "操作成功", + "code": 200 +} diff --git a/doc/scripts/test_output/test_report_20260129_164311.txt b/doc/scripts/test_output/test_report_20260129_164311.txt new file mode 100644 index 0000000..3d524db --- /dev/null +++ b/doc/scripts/test_output/test_report_20260129_164311.txt @@ -0,0 +1,96 @@ +==================================== +中介黑名单管理API测试报告 +测试时间: 2026-01-29 16:43:11 +==================================== +========== 登录测试 ========== +请求: POST http://localhost:8080/login/test +响应: {"msg":"操作成功","code":200,"token":"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImxvZ2luX3VzZXJfa2V5IjoiNzJlZTM0OTMtOGMyNS00OTM3LWIyMTEtZjc3MDkwZTIwZGNkIn0.wteMG8WO8U03TJysq7MeAbBflFrZdJXrsKFSdIgVlf-irCLNN1BsyKISTCfnSqJbZ4TM74DhrEPAefYN0mvtaA"} +结果: 成功 + +========== 测试1: 查询中介黑名单列表 ========== +请求: GET http://localhost:8080/dpc/intermediary/list?pageNum=1&pageSize=10 +响应已保存至: test_output/test1_list_response.json +结果: 成功 + +========== 测试2: 新增个人中介黑名单 ========== +请求: POST http://localhost:8080/dpc/intermediary +请求体: { + "name": "测试个人中介_20260129_164311", + "certificateNo": "TESTCERT20260129_164311", + "intermediaryType": "1", + "remark": "自动化测试数据" + } +响应已保存至: test_output/test2_add_person_response.json +结果: 成功 + +========== 测试3: 新增机构中介黑名单 ========== +请求: POST http://localhost:8080/dpc/intermediary +请求体: { + "name": "测试机构中介_20260129_164311", + "certificateNo": "TESTORG20260129_164311", + "intermediaryType": "2", + "remark": "自动化测试机构数据" + } +响应已保存至: test_output/test3_add_entity_response.json +结果: 成功 + +========== 测试4: 获取中介详情 ========== +请求: GET http://localhost:8080/dpc/intermediary/2005 +响应已保存至: test_output/test4_get_info_response.json +结果: 成功 + +========== 测试5: 修改中介黑名单 ========== +请求: PUT http://localhost:8080/dpc/intermediary +请求体: { + "intermediaryId": 2005, + "name": "测试个人中介_修改", + "certificateNo": "TESTCERT20260129_164311", + "intermediaryType": "1", + "status": "1", + "remark": "修改后的自动化测试数据" + } +响应已保存至: test_output/test5_edit_response.json +结果: 成功 + +========== 测试6: 导出中介黑名单列表 ========== +请求: POST http://localhost:8080/dpc/intermediary/export +文件已保存至: test_output/test6_export.xlsx +结果: 成功 + +========== 测试7: 下载个人中介导入模板 ========== +请求: POST http://localhost:8080/dpc/intermediary/importPersonTemplate +文件已保存至: test_output/test7_person_template.xlsx +结果: 成功 + +========== 测试8: 下载机构中介导入模板 ========== +请求: POST http://localhost:8080/dpc/intermediary/importEntityTemplate +文件已保存至: test_output/test8_entity_template.xlsx +结果: 成功 + +========== 测试10: 条件查询(按中介类型) ========== +请求: GET http://localhost:8080/dpc/intermediary/list?pageNum=1&pageSize=10&intermediaryType=1 +响应已保存至: test_output/test10_query_by_type_response.json +结果: 成功 + +========== 测试11: 条件查询(按状态) ========== +请求: GET http://localhost:8080/dpc/intermediary/list?pageNum=1&pageSize=10&status=1 +响应已保存至: test_output/test11_query_by_status_response.json +结果: 成功 + +========== 测试9: 删除中介黑名单 ========== +请求: DELETE http://localhost:8080/dpc/intermediary/2005,2006 +响应已保存至: test_output/test9_remove_response.json +结果: 成功 + + +==================================== +测试汇总 +==================================== +测试场景总数: 11 +通过数量: 11 +失败数量: 0 +通过率: 100.00% + +详细响应文件已保存至: test_output/ +测试报告文件: test_output/test_report_20260129_164311.txt +==================================== diff --git a/doc/scripts/test_uniqueness_validation.py b/doc/scripts/test_uniqueness_validation.py new file mode 100644 index 0000000..78e6e02 --- /dev/null +++ b/doc/scripts/test_uniqueness_validation.py @@ -0,0 +1,308 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +中介导入唯一性校验测试脚本 + +测试场景: +1. 个人中介导入 - 证件号重复导入(非更新模式)应失败 +2. 个人中介导入 - 证件号重复导入(更新模式)应成功 +3. 机构中介导入 - 统一社会信用代码重复导入(非更新模式)应失败 +4. 机构中介导入 - 统一社会信用代码重复导入(更新模式)应成功 +""" + +import requests +import json +import time +from datetime import datetime + +# 配置 +BASE_URL = "http://localhost:8080" +USERNAME = "admin" +PASSWORD = "admin123" + +# 全局变量存储token +token = None + + +def login(): + """登录获取token""" + global token + url = f"{BASE_URL}/login/test" + data = { + "username": USERNAME, + "password": PASSWORD + } + response = requests.post(url, data=data) + result = response.json() + if result.get("code") == 200: + token = result.get("token") + print(f"✓ 登录成功,获取token: {token[:20]}...") + return True + else: + print(f"✗ 登录失败: {result}") + return False + + +def get_headers(): + """获取带token的请求头""" + return { + "Authorization": f"Bearer {token}" + } + + +def test_import_person_without_update(file_path, cert_no): + """ + 测试场景1: 个人中介导入(非更新模式)- 证件号重复 + 期望:导入失败,提示证件号已存在 + """ + print(f"\n{'='*60}") + print(f"测试场景1: 个人中介导入(非更新模式)- 证件号 {cert_no} 重复") + print(f"{'='*60}") + + url = f"{BASE_URL}/dpc/intermediary/importPersonData" + files = {"file": open(file_path, "rb")} + data = {"updateSupport": "false"} + + response = requests.post(url, files=files, data=data, headers=get_headers()) + result = response.json() + + print(f"响应状态码: {response.status_code}") + print(f"响应内容: {json.dumps(result, ensure_ascii=False, indent=2)}") + + # 验证结果 + if result.get("code") == 500: + if "已存在" in result.get("msg", ""): + print(f"✓ 测试通过:系统正确拒绝了重复的证件号") + return True + else: + print(f"✗ 测试失败:错误信息不符合预期") + return False + else: + print(f"✗ 测试失败:系统应该拒绝重复的证件号") + return False + + +def test_import_person_with_update(file_path, cert_no): + """ + 测试场景2: 个人中介导入(更新模式)- 证件号重复 + 期望:导入成功,更新已存在的记录 + """ + print(f"\n{'='*60}") + print(f"测试场景2: 个人中介导入(更新模式)- 证件号 {cert_no} 重复") + print(f"{'='*60}") + + url = f"{BASE_URL}/dpc/intermediary/importPersonData" + files = {"file": open(file_path, "rb")} + data = {"updateSupport": "true"} + + response = requests.post(url, files=files, data=data, headers=get_headers()) + result = response.json() + + print(f"响应状态码: {response.status_code}") + print(f"响应内容: {json.dumps(result, ensure_ascii=False, indent=2)}") + + # 验证结果 + if result.get("code") == 200: + print(f"✓ 测试通过:系统成功更新了已存在的记录") + return True + else: + print(f"✗ 测试失败:系统应该允许更新模式") + return False + + +def test_import_entity_without_update(file_path, credit_code): + """ + 测试场景3: 机构中介导入(非更新模式)- 统一社会信用代码重复 + 期望:导入失败,提示统一社会信用代码已存在 + """ + print(f"\n{'='*60}") + print(f"测试场景3: 机构中介导入(非更新模式)- 统一社会信用代码 {credit_code} 重复") + print(f"{'='*60}") + + url = f"{BASE_URL}/dpc/intermediary/importEntityData" + files = {"file": open(file_path, "rb")} + data = {"updateSupport": "false"} + + response = requests.post(url, files=files, data=data, headers=get_headers()) + result = response.json() + + print(f"响应状态码: {response.status_code}") + print(f"响应内容: {json.dumps(result, ensure_ascii=False, indent=2)}") + + # 验证结果 + if result.get("code") == 500: + if "已存在" in result.get("msg", ""): + print(f"✓ 测试通过:系统正确拒绝了重复的统一社会信用代码") + return True + else: + print(f"✗ 测试失败:错误信息不符合预期") + return False + else: + print(f"✗ 测试失败:系统应该拒绝重复的统一社会信用代码") + return False + + +def test_import_entity_with_update(file_path, credit_code): + """ + 测试场景4: 机构中介导入(更新模式)- 统一社会信用代码重复 + 期望:导入成功,更新已存在的记录 + """ + print(f"\n{'='*60}") + print(f"测试场景4: 机构中介导入(更新模式)- 统一社会信用代码 {credit_code} 重复") + print(f"{'='*60}") + + url = f"{BASE_URL}/dpc/intermediary/importEntityData" + files = {"file": open(file_path, "rb")} + data = {"updateSupport": "true"} + + response = requests.post(url, files=files, data=data, headers=get_headers()) + result = response.json() + + print(f"响应状态码: {response.status_code}") + print(f"响应内容: {json.dumps(result, ensure_ascii=False, indent=2)}") + + # 验证结果 + if result.get("code") == 200: + print(f"✓ 测试通过:系统成功更新了已存在的记录") + return True + else: + print(f"✗ 测试失败:系统应该允许更新模式") + return False + + +def create_test_person_excel(file_path, cert_no, name="测试用户"): + """创建测试用的个人中介Excel文件""" + import openpyxl + from openpyxl.styles import Protection + + wb = openpyxl.Workbook() + ws = wb.active + ws.title = "个人中介黑名单" + + # 表头 + headers = ["姓名", "证件号码", "人员类型", "人员子类型", "性别", "证件类型", "手机号", "微信号", + "联系地址", "所在公司", "职位", "关联人员ID", "关联关系", "备注"] + ws.append(headers) + + # 添加测试数据 + ws.append([name, cert_no, "中介", "本人", "男", "身份证", "13800138000", + "test_wxh", "测试地址", "测试公司", "测试职位", "", "", "测试备注"]) + + wb.save(file_path) + print(f"✓ 创建测试Excel文件: {file_path}") + + +def create_test_entity_excel(file_path, credit_code, name="测试机构"): + """创建测试用的机构中介Excel文件""" + import openpyxl + + wb = openpyxl.Workbook() + ws = wb.active + ws.title = "机构中介黑名单" + + # 表头 + headers = ["机构名称", "统一社会信用代码", "主体类型", "企业性质", "行业分类", "所属行业", "成立日期", + "注册地址", "法定代表人", "法定代表人证件类型", "法定代表人证件号码", "股东1", "股东2", + "股东3", "股东4", "股东5", "备注"] + ws.append(headers) + + # 添加测试数据 + ws.append([name, credit_code, "有限责任公司", "民企", "金融业", "银行业", "2020-01-01", + "北京市测试区测试路123号", "张三", "身份证", "110101199001011234", + "股东A", "股东B", "股东C", "股东D", "股东E", "测试备注"]) + + wb.save(file_path) + print(f"✓ 创建测试Excel文件: {file_path}") + + +def main(): + """主测试流程""" + print(f"\n{'#'*60}") + print(f"# 中介导入唯一性校验测试") + print(f"# 测试时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") + print(f"{'#'*60}") + + # 登录 + if not login(): + return + + # 测试参数 + test_cert_no = f"TEST{int(time.time())}" # 生成唯一测试证件号 + test_credit_code = f"91{int(time.time())}001" # 生成唯一测试统一社会信用代码 + + test_results = [] + + # 准备测试文件 + person_file = "test_person_uniqueness.xlsx" + entity_file = "test_entity_uniqueness.xlsx" + + # ========== 场景1: 先导入一条个人数据 ========== + print(f"\n{'='*60}") + print(f"准备步骤: 首次导入个人中介数据(证件号: {test_cert_no})") + print(f"{'='*60}") + + create_test_person_excel(person_file, test_cert_no) + + url = f"{BASE_URL}/dpc/intermediary/importPersonData" + files = {"file": open(person_file, "rb")} + data = {"updateSupport": "false"} + + response = requests.post(url, files=files, data=data, headers=get_headers()) + result = response.json() + + if result.get("code") == 200: + print(f"✓ 首次导入成功") + else: + print(f"✗ 首次导入失败: {result}") + return + + # ========== 场景1: 非更新模式导入重复个人数据 ========== + test_results.append(test_import_person_without_update(person_file, test_cert_no)) + + # ========== 场景2: 更新模式导入重复个人数据 ========== + test_results.append(test_import_person_with_update(person_file, test_cert_no)) + + # ========== 准备: 首次导入机构数据 ========== + print(f"\n{'='*60}") + print(f"准备步骤: 首次导入机构中介数据(统一社会信用代码: {test_credit_code})") + print(f"{'='*60}") + + create_test_entity_excel(entity_file, test_credit_code) + + url = f"{BASE_URL}/dpc/intermediary/importEntityData" + files = {"file": open(entity_file, "rb")} + data = {"updateSupport": "false"} + + response = requests.post(url, files=files, data=data, headers=get_headers()) + result = response.json() + + if result.get("code") == 200: + print(f"✓ 首次导入成功") + else: + print(f"✗ 首次导入失败: {result}") + return + + # ========== 场景3: 非更新模式导入重复机构数据 ========== + test_results.append(test_import_entity_without_update(entity_file, test_credit_code)) + + # ========== 场景4: 更新模式导入重复机构数据 ========== + test_results.append(test_import_entity_with_update(entity_file, test_credit_code)) + + # ========== 输出测试报告 ========== + print(f"\n{'='*60}") + print(f"测试报告汇总") + print(f"{'='*60}") + print(f"测试场景总数: {len(test_results)}") + print(f"通过数量: {sum(test_results)}") + print(f"失败数量: {len(test_results) - sum(test_results)}") + + if all(test_results): + print(f"\n✓ 所有测试通过!") + else: + print(f"\n✗ 部分测试失败,请查看上方详细日志") + + print(f"\n测试完成时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") + + +if __name__ == "__main__": + main() diff --git a/doc/test-data/generate_org_data.py b/doc/test-data/generate_org_data.py new file mode 100644 index 0000000..1e8f758 --- /dev/null +++ b/doc/test-data/generate_org_data.py @@ -0,0 +1,192 @@ +import openpyxl +from openpyxl import Workbook +import random +from datetime import datetime, timedelta + +# 机构名称前缀 +org_prefixes = [ + "北京", "上海", "广州", "深圳", "杭州", "成都", "重庆", "武汉", "西安", "南京", + "天津", "苏州", "长沙", "郑州", "东莞", "青岛", "沈阳", "宁波", "厦门", "佛山" +] + +# 机构类型关键词 +org_types = [ + "投资咨询", "资产管理", "证券投资", "基金管理", "股权投资", + "财富管理", "金融信息服务", "商务咨询", "企业咨询", "投资顾问" +] + +# 机构后缀 +org_suffixes = ["有限公司", "股份有限公司", "集团", "企业", "事务所"] + +# 主体类型 +entity_types = ["企业", "事业单位", "社会组织"] + +# 企业性质 +corp_natures = [ + "有限责任公司", "股份有限公司", "国有独资", "集体企业", + "私营企业", "中外合资", "外商独资", "港澳台合资" +] + +# 行业分类 +industry_classes = ["金融业", "商务服务业", "科学研究和技术服务业"] + +# 所属行业 +industries = [ + "货币金融服务", "资本市场服务", "保险业", "其他金融业", + "企业管理服务", "法律服务", "咨询与调查", "广告业", + "研究和试验发展", "专业技术服务业", "科技推广和应用服务业" +] + +# 证件类型 +id_types = ["身份证", "护照", "其他"] + +# 统一社会信用代码生成(18位) +def generate_credit_code(): + area_code = f"{random.randint(110000, 659900):06d}" + org_code = ''.join([str(random.randint(0, 9)) for _ in range(9)]) + check_code = random.randint(0, 9) + return f"{area_code}{org_code}{check_code}" + +# 生成法定代表人姓名 +def generate_person_name(): + surnames = ["王", "李", "张", "刘", "陈", "杨", "黄", "赵", "周", "吴", + "徐", "孙", "马", "胡", "朱", "郭", "何", "罗", "高", "林"] + names1 = ["伟", "芳", "娜", "敏", "静", "丽", "强", "磊", "军", "洋", + "勇", "艳", "杰", "娟", "涛", "明", "超", "秀英", "霞", "平"] + names2 = ["", "刚", "英", "华", "文", "平", "建", "国", "志", "海"] + return random.choice(surnames) + random.choice(names1) + random.choice(names2) + +# 生成身份证号(18位) +def generate_id_card(): + # 地区码(6位) + 出生日期(8位) + 顺序码(3位) + 校验码(1位) + area_code = f"{random.randint(110000, 659900):06d}" + year = random.randint(1960, 1995) + month = f"{random.randint(1, 12):02d}" + day = f"{random.randint(1, 28):02d}" + birth_date = f"{year}{month}{day}" + sequence = f"{random.randint(1, 999):03d}" + check_code = random.randint(0, 9) + return f"{area_code}{birth_date}{sequence}{check_code}" + +# 生成注册地址 +def generate_address(): + districts = ["朝阳区", "海淀区", "西城区", "东城区", "丰台区", + "浦东新区", "黄浦区", "静安区", "徐汇区", "天河区", + "福田区", "南山区", "罗湖区", "西湖区", "江干区"] + streets = ["建设路", "人民路", "解放路", "和平路", "文化路", + "科技路", "创新路", "发展路", "创业路", "工业路"] + buildings = ["大厦", "中心", "广场", "写字楼", "科技园"] + return f"{random.choice(districts)}{random.choice(streets)}{random.randint(1,999)}号{random.choice(buildings)}" + +# 生成成立日期 +def generate_establish_date(): + start_date = datetime(2000, 1, 1) + end_date = datetime(2024, 12, 31) + days_between = (end_date - start_date).days + random_days = random.randint(0, days_between) + return (start_date + timedelta(days=random_days)).strftime("%Y-%m-%d") + +# 生成股东名称 +def generate_shareholder(): + types = [ + lambda: f"{random.choice(org_prefixes)}{random.choice(['投资', '资本', '控股', '集团'])}有限公司", + lambda: generate_person_name() + random.choice(["", "(自然人)"]) + ] + return random.choice(types)() + +# 生成备注 +def generate_remark(): + remarks = [ + "", "", "", "", + "重点监控", "已整改", "存在风险", "待核查" + ] + return random.choice(remarks) + +# 生成单条机构数据 +def generate_org_data(index): + # 随机决定有几个股东(1-5个) + shareholder_count = random.randint(1, 5) + shareholders = [generate_shareholder() for _ in range(shareholder_count)] + # 补齐到5个 + while len(shareholders) < 5: + shareholders.append("") + + # 证件类型 + id_type = random.choice(id_types) + id_card = generate_id_card() if id_type == "身份证" else f"{random.choice(['A', 'B', 'C'])}{random.randint(10000, 99999)}" + + return { + "id": index, + "orgName": f"{random.choice(org_prefixes)}{random.choice(org_types)}{random.choice(org_suffixes)}", + "creditCode": generate_credit_code(), + "entityType": random.choice(entity_types), + "corpNature": random.choice(corp_natures) if random.choice([True, False]) else "", + "industryClass": random.choice(industry_classes), + "industry": random.choice(industries), + "establishDate": generate_establish_date(), + "regAddress": generate_address(), + "legalRep": generate_person_name(), + "legalRepIdType": id_type, + "legalRepIdNo": id_card, + "shareholder1": shareholders[0], + "shareholder2": shareholders[1], + "shareholder3": shareholders[2], + "shareholder4": shareholders[3], + "shareholder5": shareholders[4], + "remark": generate_remark() + } + +# 生成数据并保存到Excel +def generate_org_test_data(filename, count=1000, start_id=1): + # 读取模板获取表头 + template_path = "机构中介黑名单模板_1769674571626.xlsx" + template_wb = openpyxl.load_workbook(template_path) + template_ws = template_wb.active + + # 创建新工作簿 + wb = Workbook() + ws = wb.active + ws.title = "机构中介黑名单" + + # 复制表头 + for cell in template_ws[1]: + new_cell = ws.cell(row=1, column=cell.column, value=cell.value) + + # 生成数据 + data_list = [] + for i in range(count): + data = generate_org_data(start_id + i) + data_list.append(data) + + # 按照模板列顺序写入数据 + # 列顺序:机构名称、统一社会信用代码、主体类型、企业性质、行业分类、所属行业、 + # 成立日期、注册地址、法定代表人、法定代表人证件类型、法定代表人证件号码、 + # 股东1、股东2、股东3、股东4、股东5、备注 + for row_idx, data in enumerate(data_list, start=2): + ws.cell(row=row_idx, column=1, value=data["orgName"]) + ws.cell(row=row_idx, column=2, value=data["creditCode"]) + ws.cell(row=row_idx, column=3, value=data["entityType"]) + ws.cell(row=row_idx, column=4, value=data["corpNature"]) + ws.cell(row=row_idx, column=5, value=data["industryClass"]) + ws.cell(row=row_idx, column=6, value=data["industry"]) + ws.cell(row=row_idx, column=7, value=data["establishDate"]) + ws.cell(row=row_idx, column=8, value=data["regAddress"]) + ws.cell(row=row_idx, column=9, value=data["legalRep"]) + ws.cell(row=row_idx, column=10, value=data["legalRepIdType"]) + ws.cell(row=row_idx, column=11, value=data["legalRepIdNo"]) + ws.cell(row=row_idx, column=12, value=data["shareholder1"]) + ws.cell(row=row_idx, column=13, value=data["shareholder2"]) + ws.cell(row=row_idx, column=14, value=data["shareholder3"]) + ws.cell(row=row_idx, column=15, value=data["shareholder4"]) + ws.cell(row=row_idx, column=16, value=data["shareholder5"]) + ws.cell(row=row_idx, column=17, value=data["remark"]) + + # 保存文件 + wb.save(filename) + print(f"已生成文件: {filename}") + +if __name__ == "__main__": + print("开始生成机构中介黑名单测试数据...") + generate_org_test_data("机构中介黑名单测试数据_1000条.xlsx", 1000, 1) + generate_org_test_data("机构中介黑名单测试数据_1000条_第2批.xlsx", 1000, 1001) + print("完成!") diff --git a/doc/test-data/test_import_fix.py b/doc/test-data/test_import_fix.py new file mode 100644 index 0000000..d9b06b0 --- /dev/null +++ b/doc/test-data/test_import_fix.py @@ -0,0 +1,268 @@ +""" +中介黑名单导入功能测试脚本 + +测试目标: +1. 验证机构中介导入时 certificate_no 字段不能为 null 的修复 +2. 验证个人中介导入功能正常 +3. 验证更新模式功能正常 + +测试数据准备: +- 个人中介:2条记录 +- 机构中介:2条记录 +""" + +import requests +import json +from datetime import datetime + +BASE_URL = "http://localhost:8080" + +def login(): + """登录并获取token""" + url = f"{BASE_URL}/login/test" + data = { + "username": "admin", + "password": "admin123" + } + response = requests.post(url, json=data) + if response.status_code == 200: + result = response.json() + if result.get("code") == 200: + token = result.get("token") + print(f"✓ 登录成功,获取token: {token[:20]}...") + return token + print(f"✗ 登录失败: {response.text}") + return None + +def get_headers(token): + """获取请求头""" + return { + "Authorization": f"Bearer {token}" + } + +def test_import_person_intermediary(token): + """测试个人中介导入""" + print("\n" + "="*60) + print("测试1: 个人中介导入功能") + print("="*60) + + # 准备个人中介数据(直接通过API调用测试) + url = f"{BASE_URL}/dpc/intermediary" + headers = get_headers(token) + headers["Content-Type"] = "application/json" + + person_data = { + "name": "测试个人中介", + "certificateNo": "110101199001011234", + "intermediaryType": "1", + "status": "0", + "remark": "测试个人中介导入", + "indivType": "中介", + "indivSubType": "本人", + "indivGender": "M", + "indivCertType": "身份证", + "indivPhone": "13800138000", + "indivWechat": "test_wx_id", + "indivAddress": "北京市朝阳区", + "indivCompany": "测试公司", + "indivPosition": "经纪人" + } + + response = requests.post(url, json=person_data, headers=headers) + if response.status_code == 200: + result = response.json() + if result.get("code") == 200: + print("✓ 个人中介导入成功") + return True + else: + print(f"✗ 个人中介导入失败: {result.get('msg')}") + return False + else: + print(f"✗ 个人中介导入请求失败: {response.status_code} - {response.text}") + return False + +def test_import_entity_intermediary(token): + """测试机构中介导入""" + print("\n" + "="*60) + print("测试2: 机构中介导入功能") + print("="*60) + + # 准备机构中介数据 + url = f"{BASE_URL}/dpc/intermediary" + headers = get_headers(token) + headers["Content-Type"] = "application/json" + + entity_data = { + "name": "测试机构中介有限公司", + "certificateNo": "91110108MA0000001A", # 统一社会信用代码 + "intermediaryType": "2", + "status": "0", + "remark": "测试机构中介导入", + "corpCreditCode": "91110108MA0000001A", + "corpType": "有限责任公司", + "corpNature": "民营企业", + "corpIndustryCategory": "房地产业", + "corpIndustry": "房地产中介服务", + "corpEstablishDate": "2020-01-01", + "corpAddress": "北京市海淀区", + "corpLegalRep": "张三", + "corpLegalCertType": "身份证", + "corpLegalCertNo": "110101199001011235", + "corpShareholder1": "李四", + "corpShareholder2": "王五" + } + + response = requests.post(url, json=entity_data, headers=headers) + if response.status_code == 200: + result = response.json() + if result.get("code") == 200: + print("✓ 机构中介导入成功") + print(f" - 机构名称: {entity_data['name']}") + print(f" - 统一社会信用代码: {entity_data['corpCreditCode']}") + print(f" - 证件号字段: {entity_data['certificateNo']}") + return True + else: + print(f"✗ 机构中介导入失败: {result.get('msg')}") + return False + else: + print(f"✗ 机构中介导入请求失败: {response.status_code} - {response.text}") + return False + +def test_import_entity_without_credit_code(token): + """测试机构中介导入时统一社会信用代码为空的情况""" + print("\n" + "="*60) + print("测试4: 机构中介导入时统一社会信用代码为空(应该失败)") + print("="*60) + + url = f"{BASE_URL}/dpc/intermediary" + headers = get_headers(token) + headers["Content-Type"] = "application/json" + + # 故意不提供统一社会信用代码 + entity_data = { + "name": "测试机构中介有限公司(无信用代码)", + "certificateNo": "", # 空字符串 + "intermediaryType": "2", + "status": "0", + "remark": "测试统一社会信用代码为空的情况", + "corpCreditCode": "", # 空字符串 + "corpType": "有限责任公司" + } + + response = requests.post(url, json=entity_data, headers=headers) + if response.status_code == 200: + result = response.json() + if result.get("code") != 200: + # 预期失败 + print(f"✓ 预期行为:导入被拒绝,错误信息: {result.get('msg')}") + return True + else: + # 不应该成功 + print(f"✗ 测试失败:统一社会信用代码为空时不应该导入成功") + return False + else: + print(f"✗ 请求失败: {response.status_code} - {response.text}") + return False + +def test_query_intermediary_list(token): + """测试查询中介列表""" + print("\n" + "="*60) + print("测试3: 查询中介列表") + print("="*60) + + url = f"{BASE_URL}/dpc/intermediary/list" + headers = get_headers(token) + + params = { + "pageNum": 1, + "pageSize": 10 + } + + response = requests.get(url, params=params, headers=headers) + if response.status_code == 200: + result = response.json() + if result.get("code") == 200: + rows = result.get("rows", []) + total = result.get("total", 0) + print(f"✓ 查询成功,共 {total} 条记录") + for item in rows: + print(f" - {item['name']} ({item.get('intermediaryTypeName', '未知')}) - 证件号: {item.get('certificateNo', '无')}") + return True + else: + print(f"✗ 查询失败: {result.get('msg')}") + return False + else: + print(f"✗ 查询请求失败: {response.status_code} - {response.text}") + return False + +def generate_test_report(results): + """生成测试报告""" + print("\n" + "="*60) + print("测试报告") + print("="*60) + + total_tests = len(results) + passed_tests = sum(1 for r in results.values() if r) + failed_tests = total_tests - passed_tests + + print(f"\n总测试数: {total_tests}") + print(f"通过: {passed_tests}") + print(f"失败: {failed_tests}") + print(f"通过率: {passed_tests/total_tests*100:.1f}%") + + print("\n详细结果:") + for test_name, result in results.items(): + status = "✓ 通过" if result else "✗ 失败" + print(f" {test_name}: {status}") + + # 保存报告到文件 + report_content = { + "测试时间": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), + "总测试数": total_tests, + "通过": passed_tests, + "失败": failed_tests, + "通过率": f"{passed_tests/total_tests*100:.1f}%", + "详细结果": {k: "通过" if v else "失败" for k, v in results.items()} + } + + with open("doc/test-data/import_test_report.json", "w", encoding="utf-8") as f: + json.dump(report_content, f, ensure_ascii=False, indent=2) + + print(f"\n测试报告已保存至: doc/test-data/import_test_report.json") + +def main(): + """主测试函数""" + print("="*60) + print("中介黑名单导入功能测试") + print(f"测试时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") + print("="*60) + + results = {} + + # 1. 登录 + token = login() + if not token: + print("登录失败,无法继续测试") + return + + # 2. 测试个人中介导入 + results["个人中介导入"] = test_import_person_intermediary(token) + + # 3. 测试机构中介导入 + results["机构中介导入"] = test_import_entity_intermediary(token) + + # 4. 测试统一社会信用代码为空的情况 + results["机构中介无信用代码校验"] = test_import_entity_without_credit_code(token) + + # 5. 测试查询列表 + results["查询列表"] = test_query_intermediary_list(token) + + # 5. 生成测试报告 + generate_test_report(results) + + print("\n" + "="*60) + print("测试完成") + print("="*60) + +if __name__ == "__main__": + main() diff --git a/doc/test-data/~$机构中介黑名单测试数据_1000条.xlsx b/doc/test-data/~$机构中介黑名单测试数据_1000条.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..3c3a794080821fc614a37e537889505a44d8e2ae GIT binary patch literal 165 ZcmZQB&rVh#9WXPLGh{O)Gbqpn0sshg4^aRB literal 0 HcmV?d00001 diff --git a/doc/test-data/个人中介黑名单模板_1769667622015.xlsx b/doc/test-data/个人中介黑名单模板_1769667622015.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..4b890b5f1d7ffb85d6041b76f45ffccc0cffba94 GIT binary patch literal 4007 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 literal 0 HcmV?d00001 diff --git a/doc/test-data/个人中介黑名单测试数据_1000条.xlsx b/doc/test-data/个人中介黑名单测试数据_1000条.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..ace84dbfdc9748def29d7989c05769de49a800bc GIT binary patch literal 95706 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

B7Q~4bv#GK7+6nhf`(6)d6}&OADvfBYkA~ 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±LfmAl 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 literal 0 HcmV?d00001 diff --git a/doc/test-data/机构中介黑名单测试数据_1000条.xlsx b/doc/test-data/机构中介黑名单测试数据_1000条.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..651514fae6782361522eb34fa3d05a2176dcbac1 GIT binary patch literal 127652 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

UvR}vkOaVLM8_1FCnZH_C&Ddj2% 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

-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 E4cYi$H)m2^f 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%0D4*1@HG63!oGF@6%^Y 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 u!{60WYQT7p7H^;CI2)q>+~s9xHr%w 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.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�q-5X-%gjjjD$+6V#3p# zF1{E^2Cjd-1kG07(hHxN-E25jnsfy0f%-byz2WeVmMh2|Nc(!U!lXswp5cC2(#&`F zpbvDpeUI`)6$O<9003YD%0k7BC(w=*w2=V-MQi{75Amy)J-3^?x4o4c*vr9w39=Bq zzyrJ`T_-3_$;fJC^e&})Vl&jWFKf1Gpn=-lSl!Bad-akLR-e7DeFe#0$rKjhvo7Qv z`RK_q@RlH_Wuvrke|EdGXB`LBrZM*#S~MK078Bht!eAme=~INrQt~-a+1YI5n|^+$^krM9G2} zHtk%XQ+iKIHmsOl7~hmS)*E5-U?@!SfEb63oBe?;u04dtE#9aNuE7|-hcz2IT8PEv{UHL(wif` zQ?lL()%Ya_ljkP)c$k7!Za@iP>SN&@X(g7^EgHE==i7GCx64)Y1eYdA9UoV@s0w|X zf_6_|2Cm1E>v}(h%f-b(E6(&q2EAQ!b@Ii*Qoze?}UdvneCu5}~;+Gw{JVj9xv+`KXPMF5&$5C=qSN&EAw=6wR`U5 zWcSO?;u1$yx}|`;fJ_p}E&d-pO^uyHK9k(^lphp+~+L>^41 zcGoZKbP|!^Py_^-T@UlxDdK13SLv$j`t7TYe8!vAQ@%n)3*L4M(Rn|FJYCq;NWQ8O zzeDnsiWN-vVj(?YZ};}<)}hVk!dTpaHa&Z@reQ+?-PR$2+LNVh`<-2e^i^AaXK`YF z$Z3~Lxl?0eRLiG8_KCYr^WFY%ws4_W^F<=FVz)=%sGH9J5CPxrdUH8~_16e7Q2rLd zZ*}{(ApTOlx+HP@P#)ayN}^2wdFfO>axu7!lQ^Itv7j*tnXLUeEz1ppvMbka!H$#$ryJ3PhSfCDzSc^lvWl2EcQqw^x1`(Kf3?51vMEAwHueIx3G1dZ_{DACU$eL(y z%1fWRV8eYbt5F)K_gL+N#0JAPCA?MEdQGw8luS|UYb$U9l_Po9CfEMXUO8iDnY^f) z*L0^GtGX9HL8-A3_8i1*N`1BkHOSjGNJB%E*3Gyc4kTOe&f-;7VzCN)(Svfh6vw}i z@*gFd-+ce-_$;wWX=BO(oA6s5Y9K7vej6IoFO%4BEW8nBx%Z7F?7Iuz6+}q$f}!x$ zA?lY;!=Mw-w=B0tl->mSw+Fs6l|?DNns~2Q#VaL|o~R-rlK}pSjS7A0N^cNc{EE1M zi0ki95Q4)1fTfeg6IUl^H*Rxh=U + + +``` + +#### 2. 导入对话框改造 + +支持选择导入类型,并根据类型下载对应模板: + +```vue + + + + + + 个人中介 + 机构中介 + + + + + +

+
+ 是否更新已经存在的数据 + 下载模板 +
+
+ 仅允许导入"xls"或"xlsx"格式文件。 +
+ + + +``` + +### 详情对话框设计 + +#### 对话框结构 + +```vue + + + + + {{ detailData.intermediaryId }} + {{ detailData.intermediaryTypeName }} + {{ detailData.name }} + {{ detailData.certificateNo }} + + 正常 + 停用 + + {{ detailData.dataSourceName }} + + + + + + + + + {{ detailData.remark || '-' }} + {{ detailData.createTime }} + {{ detailData.createBy }} + + + +``` + +#### 数据属性 + +```javascript +data() { + return { + // ... 现有数据 ... + + // 详情对话框 + detailOpen: false, + detailData: {}, + + // 导入参数 + upload: { + open: false, + title: "", + isUploading: false, + updateSupport: 0, + importType: "person", // person 或 entity + headers: { Authorization: "Bearer " + getToken() }, + url: "" // 动态设置 + } + } +} +``` + +#### 方法实现 + +```javascript +methods: { + /** 查看详情操作 */ + handleDetail(row) { + const intermediaryId = row.intermediaryId; + getIntermediary(intermediaryId).then(response => { + this.detailData = response.data; + this.detailOpen = true; + }); + }, + + /** 导入按钮操作 */ + handleImport() { + this.upload.title = "中介黑名单数据导入"; + this.upload.importType = "person"; // 默认个人 + this.upload.updateSupport = 0; + this.upload.open = true; + }, + + /** 下载导入模板 */ + downloadImportTemplate() { + if (this.upload.importType === 'person') { + this.download('dpc/intermediary/importPersonTemplate', {}, `个人中介黑名单模板_${new Date().getTime()}.xlsx`); + } else { + this.download('dpc/intermediary/importEntityTemplate', {}, `机构中介黑名单模板_${new Date().getTime()}.xlsx`); + } + }, + + // 文件上传中处理 + handleFileUploadProgress(event, file, fileList) { + this.upload.isUploading = true; + }, + + // 文件上传成功处理 + handleFileSuccess(response, file, fileList) { + this.upload.isUploading = false; + this.upload.open = false; + this.getList(); + this.$alert("
" + response.msg + "
", "导入结果"); + }, + + // 提交上传文件 + submitFileForm() { + // 根据导入类型设置上传地址 + if (this.upload.importType === 'person') { + this.upload.url = process.env.VUE_APP_BASE_API + "/dpc/intermediary/importPersonData?updateSupport=" + this.upload.updateSupport; + } else { + this.upload.url = process.env.VUE_APP_BASE_API + "/dpc/intermediary/importEntityData?updateSupport=" + this.upload.updateSupport; + } + this.$refs.upload.submit(); + } +} +``` + +### 新增/编辑对话框增强 + +#### 使用 Tabs 分组展示字段 + +```vue + + + + + + + + + + + + + + + + 个人 + 机构 + + + + + + + + + + + + + + 正常 + 停用 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 股东信息 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +``` + +#### 数据属性和方法 + +```javascript +data() { + return { + // ... 现有数据 ... + activeTab: 'basic' + } +}, + +methods: { + // 表单重置 + reset() { + this.form = { + intermediaryId: null, + name: null, + certificateNo: null, + intermediaryType: "1", + status: "0", + remark: null, + // 个人字段 + indivType: null, + indivSubType: null, + indivGender: null, + indivCertType: null, + indivPhone: null, + indivWechat: null, + indivAddress: null, + indivCompany: null, + indivPosition: null, + indivRelatedId: null, + indivRelation: null, + // 机构字段 + corpCreditCode: null, + corpType: null, + corpNature: null, + corpIndustryCategory: null, + corpIndustry: null, + corpEstablishDate: null, + corpAddress: null, + corpLegalRep: null, + corpLegalCertType: null, + corpLegalCertNo: null, + corpShareholder1: null, + corpShareholder2: null, + corpShareholder3: null, + corpShareholder4: null, + corpShareholder5: null + }; + this.activeTab = 'basic'; + this.resetForm("form"); + }, + + // 中介类型切换处理 + handleTypeChange(value) { + // 切换到对应的标签页 + if (value === '1') { + this.activeTab = 'person'; + } else if (value === '2') { + this.activeTab = 'entity'; + } + } +} +``` + +## 数据流设计 + +### 详情数据流 + +``` +用户点击"详情"按钮 + ↓ +调用 getIntermediary(id) + ↓ +后端根据 intermediaryType 返回不同的 VO + ↓ +前端接收响应并存储到 detailData + ↓ +详情对话框根据 detailData.intermediaryType 渲染不同字段 +``` + +### 导入数据流 + +``` +用户点击"导入"按钮 + ↓ +打开导入对话框,默认选择"个人"类型 + ↓ +用户选择导入类型(个人/机构) + ↓ +用户点击"下载模板" + ↓ +根据类型调用对应的模板下载接口 + ↓ +用户填写 Excel 并上传 + ↓ +根据类型设置上传地址 + ↓ +调用对应的导入接口 + ↓ +后端处理并返回结果 +``` + +### 表单提交数据流 + +``` +用户点击"新增"或"修改" + ↓ +打开表单对话框 + ↓ +用户选择中介类型(自动切换到对应标签页) + ↓ +用户填写基本信息和详细字段 + ↓ +用户点击"确定" + ↓ +前端合并所有字段(核心字段 + 类型专属字段) + ↓ +调用 addIntermediary 或 updateIntermediary + ↓ +后端根据 intermediaryType 保存对应字段 +``` + +## 字段映射表 + +### 个人字段映射 + +| 前端表单字段 | 后端字段 | 显示名称 | +|------------|---------|---------| +| indivType | indiv_type | 人员类型 | +| indivSubType | indiv_sub_type | 人员子类型 | +| indivGender | indiv_gender | 性别 | +| indivCertType | indiv_cert_type | 证件类型 | +| indivPhone | indiv_phone | 手机号码 | +| indivWechat | indiv_wechat | 微信号 | +| indivAddress | indiv_address | 联系地址 | +| indivCompany | indiv_company | 所在公司 | +| indivPosition | indiv_position | 职位 | +| indivRelatedId | indiv_related_id | 关联人员ID | +| indivRelation | indiv_relation | 关联关系 | + +### 机构字段映射 + +| 前端表单字段 | 后端字段 | 显示名称 | +|------------|---------|---------| +| corpCreditCode | corp_credit_code | 统一社会信用代码 | +| corpType | corp_type | 主体类型 | +| corpNature | corp_nature | 企业性质 | +| corpIndustryCategory | corp_industry_category | 行业分类 | +| corpIndustry | corp_industry | 所属行业 | +| corpEstablishDate | corp_establish_date | 成立日期 | +| corpAddress | corp_address | 注册地址 | +| corpLegalRep | corp_legal_rep | 法定代表人 | +| corpLegalCertType | corp_legal_cert_type | 法定代表人证件类型 | +| corpLegalCertNo | corp_legal_cert_no | 法定代表人证件号码 | +| corpShareholder1 | corp_shareholder_1 | 股东1 | +| corpShareholder2 | corp_shareholder_2 | 股东2 | +| corpShareholder3 | corp_shareholder_3 | 股东3 | +| corpShareholder4 | corp_shareholder_4 | 股东4 | +| corpShareholder5 | corp_shareholder_5 | 股东5 | + +## 用户体验设计 + +### 交互细节 + +1. **类型切换自动跳转** + - 用户选择"个人"类型,自动跳转到"个人信息"标签页 + - 用户选择"机构"类型,自动跳转到"机构信息"标签页 + +2. **导入类型提示** + - 导入对话框顶部显示当前选择的导入类型 + - 下载模板链接根据类型变化 + +3. **详情字段空值处理** + - 字段值为空时显示 "-" + - 避免显示空白或 undefined + +4. **表单验证** + - 基本信息标签页的字段保持原有验证规则 + - 详细信息字段暂时设为可选,减少录入压力 + +### 样式优化 + +- 使用 `el-tabs` 组织大量字段,提高可读性 +- 使用 `el-row` 和 `el-col` 实现响应式布局 +- 详情对话框使用 `el-descriptions` 组件,展示更美观 +- 对话框宽度适当增加,容纳更多字段 + +## 技术约束 + +1. **前端框架**:Vue 2.6.12 +2. **UI 组件库**:Element UI 2.15.14 +3. **HTTP 客户端**:Axios 0.28.1 +4. **向后兼容**:保持现有功能不变,只做增强 + +## 测试要点 + +### 功能测试 +- [ ] 详情对话框正确显示个人类型字段 +- [ ] 详情对话框正确显示机构类型字段 +- [ ] 新增/编辑对话框正确切换标签页 +- [ ] 个人中介模板下载正常 +- [ ] 机构中介模板下载正常 +- [ ] 个人中介数据导入正常 +- [ ] 机构中介数据导入正常 + +### 兼容性测试 +- [ ] 旧数据详情显示正常(字段为空时显示"-") +- [ ] 现有列表查询功能正常 +- [ ] 现有新增/编辑功能正常 +- [ ] 现有删除功能正常 +- [ ] 现有导出功能正常 diff --git a/openspec/changes/sync-intermediary-frontend-with-detailed-fields/proposal.md b/openspec/changes/sync-intermediary-frontend-with-detailed-fields/proposal.md new file mode 100644 index 0000000..fe43cd2 --- /dev/null +++ b/openspec/changes/sync-intermediary-frontend-with-detailed-fields/proposal.md @@ -0,0 +1,159 @@ +# Proposal: 同步前端以支持中介黑名单详细字段和类型化模板导入 + +## Change ID +`sync-intermediary-frontend-with-detailed-fields` + +## Summary +同步前端代码,使其与后端 API 文档中定义的中介黑名单增强功能保持一致,支持个人和机构类型的详细字段展示,以及类型化的模板下载和导入功能。 + +## Motivation + +### 问题背景 +后端已完成中介黑名单的增强(变更 `enhance-intermediary-with-detailed-fields`),新增了: +1. 个人类型的详细字段(人员类型、性别、证件类型、手机号码、微信号等) +2. 机构类型的详细字段(统一社会信用代码、主体类型、企业性质、法定代表人、股东等) +3. 分离的个人和机构导入模板下载接口 +4. 分离的个人和机构导入接口 + +### 现状 +当前前端代码 [ruoyi-ui/src/views/dpcIntermediary/index.vue](../../../../ruoyi-ui/src/views/dpcIntermediary/index.vue) 和 [ruoyi-ui/src/api/dpcIntermediary.js](../../../../ruoyi-ui/src/api/dpcIntermediary.js) 仅支持基础字段: +- 只显示核心字段(姓名/机构名称、证件号、中介类型、状态、备注) +- 只有一个通用的导入模板下载接口 +- 只有一个通用的导入接口 +- 详情对话框不支持根据类型显示不同字段 + +### 业务需求 +1. 列表页面保持简洁,显示核心字段 +2. 详情对话框需要根据中介类型显示不同的详细字段 +3. 导入功能需要支持分别下载和导入个人/机构模板 +4. 新增/编辑对话框需要支持详细字段的录入 + +## Scope + +### 包含的功能 + +#### 2.1 API 接口层修改 +- 添加个人中介模板下载接口调用 +- 添加机构中介模板下载接口调用 +- 添加个人中介数据导入接口调用 +- 添加机构中介数据导入接口调用 +- 保留原有通用接口以保持向后兼容 + +#### 2.2 列表页面修改 +- 保持列表显示简洁(核心字段) +- 添加"查看详情"按钮 +- 导入功能改为支持类型选择(个人/机构) + +#### 2.3 详情对话框新增 +- 根据中介类型动态显示不同的字段 +- 个人类型显示:人员类型、人员子类型、性别、证件类型、手机号码、微信号等 +- 机构类型显示:统一社会信用代码、主体类型、企业性质、法定代表人、股东等 +- 支持只读模式,不提供编辑功能 + +#### 2.4 新增/编辑对话框增强 +- 根据中介类型显示对应的字段组 +- 个人类型显示个人相关字段 +- 机构类型显示机构相关字段 +- 使用表单验证确保数据完整性 + +### 明确排除 +- 后端代码修改(已在 `enhance-intermediary-with-detailed-fields` 中完成) +- 数据库结构修改(已在 `enhance-intermediary-with-detailed-fields` 中完成) +- 路由和菜单配置修改(保持现有配置) + +## Proposed Design +详见 [design.md](./design.md) + +## Alternatives Considered + +### 选项1:在列表中展开显示所有字段 +**优点**: +- 用户无需点击详情即可看到完整信息 + +**缺点**: +- 列表过于拥挤,不利于快速浏览 +- 个人和机构字段混杂,难以阅读 + +**决定**:不采用。保持列表简洁,详情通过对话框展示。 + +### 选项2:使用两个独立的页面(个人列表和机构列表) +**优点**: +- 页面结构清晰,各自独立 + +**缺点**: +- 需要添加新的路由和菜单配置 +- 代码重复度高 +- 不符合单一数据源的管理模式 + +**决定**:不采用。使用同一个列表页面,通过中介类型区分。 + +### 选项3:在现有对话框中内嵌详情视图 +**优点**: +- 减少对话框数量 + +**缺点**: +- 编辑和查看模式混合,逻辑复杂 +- 表单验证逻辑难以处理 + +**决定**:不采用。分离详情对话框和编辑对话框,职责更清晰。 + +## Impact + +### 前端影响 + +#### API 层 +- 新增 4 个接口调用函数(模板下载 × 2,数据导入 × 2) +- 修改导入对话框以支持类型选择 + +#### 视图层 +- 新增详情对话框组件 +- 修改列表操作列(添加"查看详情"按钮) +- 修改新增/编辑对话框(添加详细字段) +- 修改导入对话框(支持类型选择和对应的模板下载) + +#### 数据流 +- 详情接口返回的数据结构根据类型不同 +- 表单提交需要包含对应类型的字段 + +### 用户体验影响 +- **正面**:可以看到更完整的中介信息 +- **正面**:导入模板更符合实际需求,减少录入错误 +- **中性**:导入时需要先选择类型,增加一步操作 + +## Dependencies +- 依赖后端变更 `enhance-intermediary-with-detailed-fields` 必须先完成 +- 依赖后端 API 接口按 [doc/中介黑名单管理API文档.md](../../../../doc/中介黑名单管理API文档.md) 定义实现 + +## Related Changes +- `enhance-intermediary-with-detailed-fields` - 后端增强功能 + +## Open Questions + +1. **详情对话框是否支持编辑?** + - 建议:不支持编辑,只做展示。编辑使用现有的编辑对话框。 + +2. **新增/编辑对话框如何处理大量字段?** + - 建议:使用 el-tabs 或 el-row/el-col 分组展示,提高可读性。 + +3. **导入时是否需要类型验证?** + - 建议:在后端验证,前端只负责选择正确的模板和接口。 + +4. **旧数据的详情如何处理?** + - 建议:旧数据没有详细字段,详情对话框显示空值或占位符(如"未填写")。 + +## Success Criteria +- [ ] API 接口层添加新的接口调用函数 +- [ ] 列表页面添加"查看详情"按钮 +- [ ] 详情对话框根据类型正确显示不同字段 +- [ ] 新增/编辑对话框支持详细字段录入 +- [ ] 导入功能支持个人/机构类型选择 +- [ ] 可以下载个人中介专用模板 +- [ ] 可以下载机构中介专用模板 +- [ ] 可以使用个人模板导入数据 +- [ ] 可以使用机构模板导入数据 +- [ ] 现有功能保持正常运行 + +## References +- [doc/中介黑名单管理API文档.md](../../../../doc/中介黑名单管理API文档.md) +- [openspec/changes/enhance-intermediary-with-detailed-fields/proposal.md](../enhance-intermediary-with-detailed-fields/proposal.md) +- [openspec/changes/enhance-intermediary-with-detailed-fields/design.md](../enhance-intermediary-with-detailed-fields/design.md) diff --git a/openspec/changes/sync-intermediary-frontend-with-detailed-fields/specs/frontend-api-layer/spec.md b/openspec/changes/sync-intermediary-frontend-with-detailed-fields/specs/frontend-api-layer/spec.md new file mode 100644 index 0000000..1d39e34 --- /dev/null +++ b/openspec/changes/sync-intermediary-frontend-with-detailed-fields/specs/frontend-api-layer/spec.md @@ -0,0 +1,67 @@ +# Spec: 前端 API 层扩展 + +## ADDED Requirements + +### Requirement: 添加个人中介模板下载接口调用 + +前端 SHALL 提供调用个人中介模板下载接口的函数。 + +#### Scenario: 用户下载个人中介导入模板 + +**Given** 用户在中介黑名单列表页面 +**And** 用户点击"导入"按钮 +**And** 用户选择"个人中介"类型 +**When** 用户点击"下载模板"链接 +**Then** 系统调用 `/dpc/intermediary/importPersonTemplate` 接口 +**And** 系统下载个人中介黑名单模板 Excel 文件 +**And** 文件名格式为 `个人中介黑名单模板_{timestamp}.xlsx` + +--- + +### Requirement: 添加机构中介模板下载接口调用 + +前端 SHALL 提供调用机构中介模板下载接口的函数。 + +#### Scenario: 用户下载机构中介导入模板 + +**Given** 用户在中介黑名单列表页面 +**And** 用户点击"导入"按钮 +**And** 用户选择"机构中介"类型 +**When** 用户点击"下载模板"链接 +**Then** 系统调用 `/dpc/intermediary/importEntityTemplate` 接口 +**And** 系统下载机构中介黑名单模板 Excel 文件 +**And** 文件名格式为 `机构中介黑名单模板_{timestamp}.xlsx` + +--- + +### Requirement: 添加个人中介数据导入接口调用 + +前端 SHALL 提供调用个人中介数据导入接口的函数。 + +#### Scenario: 用户导入个人中介数据 + +**Given** 用户在中介黑名单列表页面 +**And** 用户点击"导入"按钮 +**And** 用户选择"个人中介"类型 +**And** 用户已下载并填写了个人中介模板 +**When** 用户上传 Excel 文件 +**Then** 系统调用 `/dpc/intermediary/importPersonData` 接口 +**And** 系统传递 `updateSupport` 参数 +**And** 系统显示导入结果 + +--- + +### Requirement: 添加机构中介数据导入接口调用 + +前端 SHALL 提供调用机构中介数据导入接口的函数。 + +#### Scenario: 用户导入机构中介数据 + +**Given** 用户在中介黑名单列表页面 +**And** 用户点击"导入"按钮 +**And** 用户选择"机构中介"类型 +**And** 用户已下载并填写了机构中介模板 +**When** 用户上传 Excel 文件 +**Then** 系统调用 `/dpc/intermediary/importEntityData` 接口 +**And** 系统传递 `updateSupport` 参数 +**And** 系统显示导入结果 diff --git a/openspec/changes/sync-intermediary-frontend-with-detailed-fields/specs/frontend-detail-view/spec.md b/openspec/changes/sync-intermediary-frontend-with-detailed-fields/specs/frontend-detail-view/spec.md new file mode 100644 index 0000000..dfe62b8 --- /dev/null +++ b/openspec/changes/sync-intermediary-frontend-with-detailed-fields/specs/frontend-detail-view/spec.md @@ -0,0 +1,58 @@ +# Spec: 前端详情视图 + +## ADDED Requirements + +### Requirement: 添加中介详情查看功能 + +前端 SHALL 提供查看中介详细信息的对话框,根据中介类型显示不同的字段。 + +#### Scenario: 查看个人类型中介详情 + +**Given** 用户在中介黑名单列表页面 +**And** 列表中存在一条个人类型的中介记录 +**When** 用户点击该记录的"详情"按钮 +**Then** 系统打开详情对话框 +**And** 标题为"中介黑名单详情" +**And** 显示核心字段(中介ID、中介类型、姓名、证件号、状态、数据来源) +**And** 显示个人专属字段(人员类型、人员子类型、性别、证件类型、手机号码、微信号、联系地址、所在公司、职位、关联人员ID、关联关系) +**And** 不显示机构专属字段 +**And** 空值字段显示"-" +**And** 对话框只有"关闭"按钮 + +#### Scenario: 查看机构类型中介详情 + +**Given** 用户在中介黑名单列表页面 +**And** 列表中存在一条机构类型的中介记录 +**When** 用户点击该记录的"详情"按钮 +**Then** 系统打开详情对话框 +**And** 标题为"中介黑名单详情" +**And** 显示核心字段(中介ID、中介类型、机构名称、统一社会信用代码、状态、数据来源) +**And** 显示机构专属字段(主体类型、企业性质、行业分类、所属行业、成立日期、注册地址、法定代表人、法定代表人证件类型、法定代表人证件号码、股东1-5) +**And** 不显示个人专属字段 +**And** 空值字段显示"-" +**And** 对话框只有"关闭"按钮 + +#### Scenario: 查看旧数据详情(无详细字段) + +**Given** 用户在中介黑名单列表页面 +**And** 列表中存在一条旧数据记录(详细字段为空) +**When** 用户点击该记录的"详情"按钮 +**Then** 系统打开详情对话框 +**And** 核心字段正常显示 +**And** 详细字段显示"-" +**And** 对话框正常关闭 + +--- + +### Requirement: 列表操作列添加详情按钮 + +列表 SHALL 在操作列中添加"详情"按钮。 + +#### Scenario: 操作列显示详情按钮 + +**Given** 用户在中介黑名单列表页面 +**When** 列表加载完成 +**Then** 操作列显示"详情"按钮 +**And** "详情"按钮不需要权限控制 +**And** "详情"按钮图标为 "el-icon-view" +**And** 操作列宽度调整为 240px(原 180px) diff --git a/openspec/changes/sync-intermediary-frontend-with-detailed-fields/specs/frontend-form-enhancement/spec.md b/openspec/changes/sync-intermediary-frontend-with-detailed-fields/specs/frontend-form-enhancement/spec.md new file mode 100644 index 0000000..84b5cc2 --- /dev/null +++ b/openspec/changes/sync-intermediary-frontend-with-detailed-fields/specs/frontend-form-enhancement/spec.md @@ -0,0 +1,139 @@ +# Spec: 前端表单增强 + +## ADDED Requirements + +### Requirement: 新增/编辑对话框支持详细字段录入 + +新增和编辑对话框 SHALL 扩展以支持个人和机构类型的详细字段录入。 + +#### Scenario: 新增个人类型中介 + +**Given** 用户点击"新增"按钮 +**And** 对话框打开,默认选择"个人"类型 +**When** 用户查看对话框 +**Then** 显示"基本信息"、"个人信息"两个标签页 +**And** 自动切换到"个人信息"标签页 +**When** 用户填写个人信息字段 +**And** 用户点击"确定"按钮 +**Then** 系统提交核心字段和个人字段到后端 +**And** 显示"新增成功"提示 +**And** 列表刷新 + +#### Scenario: 新增机构类型中介 + +**Given** 用户点击"新增"按钮 +**And** 用户将中介类型切换为"机构" +**When** 用户查看对话框 +**Then** 显示"基本信息"、"机构信息"两个标签页 +**And** 自动切换到"机构信息"标签页 +**When** 用户填写机构信息字段 +**And** 用户点击"确定"按钮 +**Then** 系统提交核心字段和机构字段到后端 +**And** 显示"新增成功"提示 +**And** 列表刷新 + +#### Scenario: 编辑个人类型中介 + +**Given** 用户点击一条个人类型记录的"修改"按钮 +**When** 对话框打开 +**Then** 系统加载该记录的详细信息 +**And** "个人信息"标签页显示已保存的个人字段值 +**When** 用户修改个人信息字段 +**And** 用户点击"确定"按钮 +**Then** 系统提交修改后的数据到后端 +**And** 显示"修改成功"提示 +**And** 列表刷新 + +#### Scenario: 编辑机构类型中介 + +**Given** 用户点击一条机构类型记录的"修改"按钮 +**When** 对话框打开 +**Then** 系统加载该记录的详细信息 +**And** "机构信息"标签页显示已保存的机构字段值 +**When** 用户修改机构信息字段 +**And** 用户点击"确定"按钮 +**Then** 系统提交修改后的数据到后端 +**And** 显示"修改成功"提示 +**And** 列表刷新 + +#### Scenario: 切换中介类型时自动跳转标签页 + +**Given** 用户在新增或编辑对话框中 +**And** 当前选择的是"个人"类型 +**When** 用户将中介类型切换为"机构" +**Then** 对话框自动切换到"机构信息"标签页 +**And** 个人字段保持不变(隐藏但保留值) + +--- + +### Requirement: 导入对话框支持类型选择 + +导入对话框 SHALL 支持选择导入类型(个人/机构),并根据类型下载对应模板。 + +#### Scenario: 选择个人类型导入 + +**Given** 用户点击"导入"按钮 +**When** 对话框打开 +**Then** 默认选择"个人中介"类型 +**And** 显示"是否更新已经存在的数据"复选框 +**And** 显示"下载模板"链接 +**When** 用户保持"个人中介"类型 +**And** 用户点击"下载模板"链接 +**Then** 系统下载个人中介模板 + +#### Scenario: 选择机构类型导入 + +**Given** 用户点击"导入"按钮 +**When** 对话框打开 +**And** 用户选择"机构中介"类型 +**And** 用户点击"下载模板"链接 +**Then** 系统下载机构中介模板 + +#### Scenario: 上传个人中介文件 + +**Given** 用户在导入对话框中 +**And** 用户选择"个人中介"类型 +**And** 用户勾选"是否更新已经存在的数据" +**When** 用户上传 Excel 文件 +**And** 用户点击"确定"按钮 +**Then** 系统调用 `/dpc/intermediary/importPersonData` 接口 +**And** 系统传递 `updateSupport=true` 参数 +**And** 显示导入结果 + +#### Scenario: 上传机构中介文件 + +**Given** 用户在导入对话框中 +**And** 用户选择"机构中介"类型 +**And** 用户不勾选"是否更新已经存在的数据" +**When** 用户上传 Excel 文件 +**And** 用户点击"确定"按钮 +**Then** 系统调用 `/dpc/intermediary/importEntityData` 接口 +**And** 系统传递 `updateSupport=false` 参数 +**And** 显示导入结果 + +--- + +### Requirement: 表单字段布局优化 + +表单 SHALL 使用标签页和响应式布局优化大量字段的展示。 + +#### Scenario: 个人信息标签页布局 + +**Given** 用户在新增或编辑对话框中 +**And** 中介类型为"个人" +**When** 用户查看"个人信息"标签页 +**Then** 字段使用两列布局(el-col :span="12") +**And** 长文本字段(如联系地址)使用整行布局 +**And** 字段标签宽度为 120px +**And** 输入框有合适的 maxlength 限制 + +#### Scenario: 机构信息标签页布局 + +**Given** 用户在新增或编辑对话框中 +**And** 中介类型为"机构" +**When** 用户查看"机构信息"标签页 +**Then** 字段使用两列布局 +**And** 长文本字段(如注册地址)使用整行布局 +**And** 股东信息区域使用分隔线(el-divider)分隔 +**And** 字段标签宽度为 140px( accommodate 更长的标签名称) +**And** 输入框有合适的 maxlength 限制 diff --git a/openspec/changes/sync-intermediary-frontend-with-detailed-fields/tasks.md b/openspec/changes/sync-intermediary-frontend-with-detailed-fields/tasks.md new file mode 100644 index 0000000..4635449 --- /dev/null +++ b/openspec/changes/sync-intermediary-frontend-with-detailed-fields/tasks.md @@ -0,0 +1,139 @@ +# Tasks: 同步前端以支持中介黑名单详细字段和类型化模板导入 + +## 任务列表 + +### 阶段 1:API 接口层扩展 + +- [x] 1.1 在 `ruoyi-ui/src/api/dpcIntermediary.js` 中添加 `importPersonTemplate` 函数 + - 调用 `POST /dpc/intermediary/importPersonTemplate` + - 返回个人中介模板文件 + +- [x] 1.2 在 `ruoyi-ui/src/api/dpcIntermediary.js` 中添加 `importEntityTemplate` 函数 + - 调用 `POST /dpc/intermediary/importEntityTemplate` + - 返回机构中介模板文件 + +- [x] 1.3 在 `ruoyi-ui/src/api/dpcIntermediary.js` 中添加 `importPersonData` 函数 + - 调用 `POST /dpc/intermediary/importPersonData` + - 支持传递 `updateSupport` 参数 + +- [x] 1.4 在 `ruoyi-ui/src/api/dpcIntermediary.js` 中添加 `importEntityData` 函数 + - 调用 `POST /dpc/intermediary/importEntityData` + - 支持传递 `updateSupport` 参数 + +### 阶段 2:详情对话框实现 + +- [x] 2.1 在 `ruoyi-ui/src/views/dpcIntermediary/index.vue` 的 data 中添加详情相关属性 + - 添加 `detailOpen: false` + - 添加 `detailData: {}` + +- [x] 2.2 在 `ruoyi-ui/src/views/dpcIntermediary/index.vue` 的 template 中添加详情对话框 + - 使用 `el-descriptions` 组件展示字段 + - 根据中介类型条件渲染个人/机构专属字段 + +- [x] 2.3 实现 `handleDetail` 方法 + - 调用 `getIntermediary` 接口获取详情 + - 将数据存储到 `detailData` + - 打开详情对话框 + +- [x] 2.4 在列表操作列添加"详情"按钮 + - 使用 `el-icon-view` 图标 + - 绑定 `handleDetail` 方法 + - 调整操作列宽度为 240px + +### 阶段 3:新增/编辑对话框增强 + +- [x] 3.1 在 `ruoyi-ui/src/views/dpcIntermediary/index.vue` 的 data 中添加 `activeTab` 属性 + - 默认值为 `'basic'` + +- [x] 3.2 在表单中添加 `el-tabs` 组件 + - 添加"基本信息"标签页(name="basic") + - 添加"个人信息"标签页(name="person") + - 添加"机构信息"标签页(name="entity") + +- [x] 3.3 实现"个人信息"标签页内容 + - 添加人员类型、人员子类型、性别、证件类型字段 + - 添加手机号码、微信号、联系地址字段 + - 添加所在公司、职位、关联人员ID、关联关系字段 + - 使用两列响应式布局 + +- [x] 3.4 实现"机构信息"标签页内容 + - 添加统一社会信用代码、主体类型、企业性质字段 + - 添加行业分类、所属行业、成立日期、注册地址字段 + - 添加法定代表人及其证件信息字段 + - 添加股东1-5字段,使用分隔线分组 + +- [x] 3.5 更新 `reset` 方法 + - 添加所有个人字段的初始化 + - 添加所有机构字段的初始化 + - 重置 `activeTab` 为 `'basic'` + +- [x] 3.6 实现 `handleTypeChange` 方法 + - 监听中介类型变化 + - 自动切换到对应的标签页 + +- [x] 3.7 调整对话框宽度 + - 将宽度从 600px 调整为 900px + - 适应更多字段的展示 + +### 阶段 4:导入对话框改造 + +- [x] 4.1 在导入对话框中添加类型选择单选框组 + - 选项:个人中介(person)、机构中介(entity) + - 默认选择"个人中介" + +- [x] 4.2 在 `upload` 数据中添加 `importType` 属性 + - 默认值为 `'person'` + +- [x] 4.3 修改 `downloadImportTemplate` 方法 + - 根据 `upload.importType` 调用对应的模板下载接口 + - 个人类型调用 `importPersonTemplate` + - 机构类型调用 `importEntityTemplate` + +- [x] 4.4 修改 `submitFileForm` 方法 + - 根据 `upload.importType` 动态设置 `upload.url` + - 个人类型使用 `/dpc/intermediary/importPersonData` + - 机构类型使用 `/dpc/intermediary/importEntityData` + - 添加 `updateSupport` 参数到 URL + +- [x] 4.5 调整导入对话框宽度 + - 从 400px 调整为 450px + - 适应新增的类型选择区域 + +### 阶段 5:测试验证 + +- [x] 5.1 测试详情对话框功能 + - 测试个人类型详情显示 + - 测试机构类型详情显示 + - 测试旧数据详情显示(字段为空) + +- [x] 5.2 测试新增/编辑功能 + - 测试新增个人类型中介 + - 测试新增机构类型中介 + - 测试编辑个人类型中介 + - 测试编辑机构类型中介 + - 测试类型切换时标签页自动跳转 + +- [x] 5.3 测试导入功能 + - 测试个人类型模板下载 + - 测试机构类型模板下载 + - 测试个人类型数据导入 + - 测试机构类型数据导入 + - 测试更新支持选项 + +- [x] 5.4 测试兼容性 + - 测试现有列表查询功能 + - 测试现有删除功能 + - 测试现有导出功能 + +## 依赖关系 + +- 阶段 1 必须首先完成,为后续阶段提供 API 接口 +- 阶段 2、3、4 可以并行开发 +- 阶段 5 必须在所有开发阶段完成后进行 + +## 验收标准 + +每个任务完成后应满足: +- 代码符合 Vue 2.x 和 Element UI 规范 +- 功能与设计文档描述一致 +- 不影响现有功能的正常运行 diff --git a/ruoyi-dpc/src/main/java/com/ruoyi/dpc/controller/DpcEnumController.java b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/controller/DpcEnumController.java new file mode 100644 index 0000000..e49f070 --- /dev/null +++ b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/controller/DpcEnumController.java @@ -0,0 +1,154 @@ +package com.ruoyi.dpc.controller; + +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.dpc.domain.vo.EnumOptionVO; +import com.ruoyi.dpc.enums.*; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.ArrayList; +import java.util.List; + +/** + * DPC枚举接口Controller + * + * @author ruoyi + */ +@Tag(name = "DPC枚举接口", description = "中介黑名单相关枚举选项接口") +@RestController +@RequestMapping("/dpc/enum") +public class DpcEnumController { + + /** + * 获取人员类型选项 + */ + @Operation(summary = "获取人员类型选项") + @GetMapping("/indivType") + public AjaxResult getIndivTypeOptions() { + List options = new ArrayList<>(); + for (IndivType type : IndivType.values()) { + options.add(new EnumOptionVO(type.getCode(), type.getDesc())); + } + return AjaxResult.success(options); + } + + /** + * 获取人员子类型选项 + */ + @Operation(summary = "获取人员子类型选项") + @GetMapping("/indivSubType") + public AjaxResult getIndivSubTypeOptions() { + List options = new ArrayList<>(); + for (IndivSubType type : IndivSubType.values()) { + options.add(new EnumOptionVO(type.getCode(), type.getDesc())); + } + return AjaxResult.success(options); + } + + /** + * 获取性别选项 + */ + @Operation(summary = "获取性别选项") + @GetMapping("/gender") + public AjaxResult getGenderOptions() { + List options = new ArrayList<>(); + for (Gender gender : Gender.values()) { + options.add(new EnumOptionVO(gender.getCode(), gender.getDesc())); + } + return AjaxResult.success(options); + } + + /** + * 获取证件类型选项 + */ + @Operation(summary = "获取证件类型选项") + @GetMapping("/certType") + public AjaxResult getCertTypeOptions() { + List options = new ArrayList<>(); + for (CertType type : CertType.values()) { + options.add(new EnumOptionVO(type.getCode(), type.getDesc())); + } + return AjaxResult.success(options); + } + + /** + * 获取关联关系选项 + */ + @Operation(summary = "获取关联关系选项") + @GetMapping("/relationType") + public AjaxResult getRelationTypeOptions() { + List options = new ArrayList<>(); + for (RelationType type : RelationType.values()) { + options.add(new EnumOptionVO(type.getCode(), type.getDesc())); + } + return AjaxResult.success(options); + } + + /** + * 获取主体类型选项 + */ + @Operation(summary = "获取主体类型选项") + @GetMapping("/corpType") + public AjaxResult getCorpTypeOptions() { + List options = new ArrayList<>(); + for (CorpType type : CorpType.values()) { + options.add(new EnumOptionVO(type.getCode(), type.getDesc())); + } + return AjaxResult.success(options); + } + + /** + * 获取企业性质选项 + */ + @Operation(summary = "获取企业性质选项") + @GetMapping("/corpNature") + public AjaxResult getCorpNatureOptions() { + List options = new ArrayList<>(); + for (CorpNature nature : CorpNature.values()) { + options.add(new EnumOptionVO(nature.getCode(), nature.getDesc())); + } + return AjaxResult.success(options); + } + + /** + * 获取中介类型选项 + */ + @Operation(summary = "获取中介类型选项") + @GetMapping("/intermediaryType") + public AjaxResult getIntermediaryTypeOptions() { + List options = new ArrayList<>(); + for (IntermediaryType type : IntermediaryType.values()) { + options.add(new EnumOptionVO(type.getCode(), type.getDesc())); + } + return AjaxResult.success(options); + } + + /** + * 获取中介状态选项 + */ + @Operation(summary = "获取中介状态选项") + @GetMapping("/intermediaryStatus") + public AjaxResult getIntermediaryStatusOptions() { + List options = new ArrayList<>(); + for (IntermediaryStatus status : IntermediaryStatus.values()) { + options.add(new EnumOptionVO(status.getCode(), status.getDesc())); + } + return AjaxResult.success(options); + } + + /** + * 获取数据来源选项 + */ + @Operation(summary = "获取数据来源选项") + @GetMapping("/dataSource") + public AjaxResult getDataSourceOptions() { + List options = new ArrayList<>(); + for (DataSource source : DataSource.values()) { + options.add(new EnumOptionVO(source.getCode(), source.getDesc())); + } + return AjaxResult.success(options); + } +} diff --git a/ruoyi-dpc/src/main/java/com/ruoyi/dpc/controller/DpcIntermediaryBlacklistController.java b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/controller/DpcIntermediaryBlacklistController.java index e43fc8a..4fc495e 100644 --- a/ruoyi-dpc/src/main/java/com/ruoyi/dpc/controller/DpcIntermediaryBlacklistController.java +++ b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/controller/DpcIntermediaryBlacklistController.java @@ -9,9 +9,7 @@ import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.page.TableSupport; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.dpc.domain.DpcIntermediaryBlacklist; -import com.ruoyi.dpc.domain.dto.DpcIntermediaryBlacklistAddDTO; -import com.ruoyi.dpc.domain.dto.DpcIntermediaryBlacklistEditDTO; -import com.ruoyi.dpc.domain.dto.DpcIntermediaryBlacklistQueryDTO; +import com.ruoyi.dpc.domain.dto.*; import com.ruoyi.dpc.domain.excel.DpcIntermediaryBlacklistExcel; import com.ruoyi.dpc.domain.excel.DpcIntermediaryEntityExcel; import com.ruoyi.dpc.domain.excel.DpcIntermediaryPersonExcel; @@ -80,27 +78,73 @@ public class DpcIntermediaryBlacklistController extends BaseController { } /** - * 新增中介黑名单 + * 新增中介黑名单(已废弃,请使用类型专用接口) */ - @Operation(summary = "新增中介黑名单") + @Operation(summary = "新增中介黑名单(已废弃,请使用类型专用接口)") @PreAuthorize("@ss.hasPermi('dpc:intermediary:add')") @Log(title = "中介黑名单", businessType = BusinessType.INSERT) @PostMapping + @Deprecated public AjaxResult add(@Validated @RequestBody DpcIntermediaryBlacklistAddDTO addDTO) { return toAjax(intermediaryService.insertIntermediary(addDTO)); } + /** + * 新增个人中介黑名单 + */ + @Operation(summary = "新增个人中介黑名单") + @PreAuthorize("@ss.hasPermi('dpc:intermediary:add')") + @Log(title = "个人中介黑名单", businessType = BusinessType.INSERT) + @PostMapping("/person") + public AjaxResult addPerson(@Validated @RequestBody DpcIntermediaryPersonAddDTO addDTO) { + return toAjax(intermediaryService.insertPersonIntermediary(addDTO)); + } + + /** + * 新增机构中介黑名单 + */ + @Operation(summary = "新增机构中介黑名单") + @PreAuthorize("@ss.hasPermi('dpc:intermediary:add')") + @Log(title = "机构中介黑名单", businessType = BusinessType.INSERT) + @PostMapping("/entity") + public AjaxResult addEntity(@Validated @RequestBody DpcIntermediaryEntityAddDTO addDTO) { + return toAjax(intermediaryService.insertEntityIntermediary(addDTO)); + } + /** * 修改中介黑名单 */ - @Operation(summary = "修改中介黑名单") + @Operation(summary = "修改中介黑名单(已废弃,请使用类型专用接口)") @PreAuthorize("@ss.hasPermi('dpc:intermediary:edit')") @Log(title = "中介黑名单", businessType = BusinessType.UPDATE) @PutMapping + @Deprecated public AjaxResult edit(@Validated @RequestBody DpcIntermediaryBlacklistEditDTO editDTO) { return toAjax(intermediaryService.updateIntermediary(editDTO)); } + /** + * 修改个人中介黑名单 + */ + @Operation(summary = "修改个人中介黑名单") + @PreAuthorize("@ss.hasPermi('dpc:intermediary:edit')") + @Log(title = "个人中介黑名单", businessType = BusinessType.UPDATE) + @PutMapping("/person") + public AjaxResult editPerson(@Validated @RequestBody DpcIntermediaryPersonEditDTO editDTO) { + return toAjax(intermediaryService.updatePersonIntermediary(editDTO)); + } + + /** + * 修改机构中介黑名单 + */ + @Operation(summary = "修改机构中介黑名单") + @PreAuthorize("@ss.hasPermi('dpc:intermediary:edit')") + @Log(title = "机构中介黑名单", businessType = BusinessType.UPDATE) + @PutMapping("/entity") + public AjaxResult editEntity(@Validated @RequestBody DpcIntermediaryEntityEditDTO editDTO) { + return toAjax(intermediaryService.updateEntityIntermediary(editDTO)); + } + /** * 删除中介黑名单 */ @@ -137,7 +181,7 @@ public class DpcIntermediaryBlacklistController extends BaseController { @PreAuthorize("@ss.hasPermi('dpc:intermediary:import')") @Log(title = "中介黑名单", businessType = BusinessType.IMPORT) @PostMapping("/importPersonData") - public AjaxResult importPersonData(MultipartFile file, boolean updateSupport) throws Exception { + public AjaxResult importPersonData(@RequestParam("file") MultipartFile file, @RequestParam(value = "updateSupport", defaultValue = "false") boolean updateSupport) throws Exception { List list = EasyExcelUtil.importExcel(file.getInputStream(), DpcIntermediaryPersonExcel.class); String message = intermediaryService.importPersonIntermediary(list, updateSupport); return success(message); @@ -150,7 +194,7 @@ public class DpcIntermediaryBlacklistController extends BaseController { @PreAuthorize("@ss.hasPermi('dpc:intermediary:import')") @Log(title = "中介黑名单", businessType = BusinessType.IMPORT) @PostMapping("/importEntityData") - public AjaxResult importEntityData(MultipartFile file, boolean updateSupport) throws Exception { + public AjaxResult importEntityData(@RequestParam("file") MultipartFile file, @RequestParam(value = "updateSupport", defaultValue = "false") boolean updateSupport) throws Exception { List list = EasyExcelUtil.importExcel(file.getInputStream(), DpcIntermediaryEntityExcel.class); String message = intermediaryService.importEntityIntermediary(list, updateSupport); return success(message); diff --git a/ruoyi-dpc/src/main/java/com/ruoyi/dpc/domain/DpcIntermediaryBlacklist.java b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/domain/DpcIntermediaryBlacklist.java index cf22e55..1dc8fca 100644 --- a/ruoyi-dpc/src/main/java/com/ruoyi/dpc/domain/DpcIntermediaryBlacklist.java +++ b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/domain/DpcIntermediaryBlacklist.java @@ -111,18 +111,23 @@ public class DpcIntermediaryBlacklist implements Serializable { private String corpLegalCertNo; /** 股东1 */ + @TableField("corp_shareholder_1") private String corpShareholder1; /** 股东2 */ + @TableField("corp_shareholder_2") private String corpShareholder2; /** 股东3 */ + @TableField("corp_shareholder_3") private String corpShareholder3; /** 股东4 */ + @TableField("corp_shareholder_4") private String corpShareholder4; /** 股东5 */ + @TableField("corp_shareholder_5") private String corpShareholder5; // ============================================================ diff --git a/ruoyi-dpc/src/main/java/com/ruoyi/dpc/domain/dto/DpcIntermediaryBlacklistAddDTO.java b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/domain/dto/DpcIntermediaryBlacklistAddDTO.java index 7d35c17..8126684 100644 --- a/ruoyi-dpc/src/main/java/com/ruoyi/dpc/domain/dto/DpcIntermediaryBlacklistAddDTO.java +++ b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/domain/dto/DpcIntermediaryBlacklistAddDTO.java @@ -30,10 +30,6 @@ public class DpcIntermediaryBlacklistAddDTO implements Serializable { @NotBlank(message = "中介类型不能为空") private String intermediaryType; - /** 状态 */ - @NotBlank(message = "状态不能为空") - private String status; - /** 备注 */ @Size(max = 500, message = "备注长度不能超过500个字符") private String remark; @@ -62,14 +58,6 @@ public class DpcIntermediaryBlacklistAddDTO implements Serializable { this.intermediaryType = intermediaryType; } - public String getStatus() { - return status; - } - - public void setStatus(String status) { - this.status = status; - } - public String getRemark() { return remark; } diff --git a/ruoyi-dpc/src/main/java/com/ruoyi/dpc/domain/dto/DpcIntermediaryBlacklistEditDTO.java b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/domain/dto/DpcIntermediaryBlacklistEditDTO.java index 2728a4c..ff34bea 100644 --- a/ruoyi-dpc/src/main/java/com/ruoyi/dpc/domain/dto/DpcIntermediaryBlacklistEditDTO.java +++ b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/domain/dto/DpcIntermediaryBlacklistEditDTO.java @@ -6,6 +6,7 @@ import jakarta.validation.constraints.Size; import java.io.Serial; import java.io.Serializable; +import java.util.Date; /** * 中介人员黑名单编辑 DTO @@ -43,6 +44,90 @@ public class DpcIntermediaryBlacklistEditDTO implements Serializable { @Size(max = 500, message = "备注长度不能超过500个字符") private String remark; + // ============================================================ + // 个人类型字段 (以 indiv_ 前缀标识,individual 缩写) + // ============================================================ + /** 人员类型(中介、职业背债人、房产中介等) */ + private String indivType; + + /** 人员子类型(本人、配偶等) */ + private String indivSubType; + + /** 性别(M男 F女 O其他) */ + private String indivGender; + + /** 证件类型 */ + private String indivCertType; + + /** 手机号码(加密存储) */ + private String indivPhone; + + /** 微信号 */ + private String indivWechat; + + /** 联系地址 */ + private String indivAddress; + + /** 所在公司 */ + private String indivCompany; + + /** 职位/职务 */ + private String indivPosition; + + /** 关联人员ID */ + private String indivRelatedId; + + /** 关联关系 */ + private String indivRelation; + + // ============================================================ + // 机构类型字段 (以 corp_ 前缀标识,corporation 缩写) + // ============================================================ + /** 统一社会信用代码 */ + private String corpCreditCode; + + /** 主体类型(有限责任公司、股份有限公司等) */ + private String corpType; + + /** 企业性质(国企、民企、外企等) */ + private String corpNature; + + /** 行业分类 */ + private String corpIndustryCategory; + + /** 所属行业 */ + private String corpIndustry; + + /** 成立日期 */ + private Date corpEstablishDate; + + /** 注册地址 */ + private String corpAddress; + + /** 法定代表人 */ + private String corpLegalRep; + + /** 法定代表人证件类型 */ + private String corpLegalCertType; + + /** 法定代表人证件号码 */ + private String corpLegalCertNo; + + /** 股东1 */ + private String corpShareholder1; + + /** 股东2 */ + private String corpShareholder2; + + /** 股东3 */ + private String corpShareholder3; + + /** 股东4 */ + private String corpShareholder4; + + /** 股东5 */ + private String corpShareholder5; + public Long getIntermediaryId() { return intermediaryId; } @@ -90,4 +175,212 @@ public class DpcIntermediaryBlacklistEditDTO implements Serializable { public void setRemark(String remark) { this.remark = remark; } + + public String getIndivType() { + return indivType; + } + + public void setIndivType(String indivType) { + this.indivType = indivType; + } + + public String getIndivSubType() { + return indivSubType; + } + + public void setIndivSubType(String indivSubType) { + this.indivSubType = indivSubType; + } + + public String getIndivGender() { + return indivGender; + } + + public void setIndivGender(String indivGender) { + this.indivGender = indivGender; + } + + public String getIndivCertType() { + return indivCertType; + } + + public void setIndivCertType(String indivCertType) { + this.indivCertType = indivCertType; + } + + public String getIndivPhone() { + return indivPhone; + } + + public void setIndivPhone(String indivPhone) { + this.indivPhone = indivPhone; + } + + public String getIndivWechat() { + return indivWechat; + } + + public void setIndivWechat(String indivWechat) { + this.indivWechat = indivWechat; + } + + public String getIndivAddress() { + return indivAddress; + } + + public void setIndivAddress(String indivAddress) { + this.indivAddress = indivAddress; + } + + public String getIndivCompany() { + return indivCompany; + } + + public void setIndivCompany(String indivCompany) { + this.indivCompany = indivCompany; + } + + public String getIndivPosition() { + return indivPosition; + } + + public void setIndivPosition(String indivPosition) { + this.indivPosition = indivPosition; + } + + public String getIndivRelatedId() { + return indivRelatedId; + } + + public void setIndivRelatedId(String indivRelatedId) { + this.indivRelatedId = indivRelatedId; + } + + public String getIndivRelation() { + return indivRelation; + } + + public void setIndivRelation(String indivRelation) { + this.indivRelation = indivRelation; + } + + public String getCorpCreditCode() { + return corpCreditCode; + } + + public void setCorpCreditCode(String corpCreditCode) { + this.corpCreditCode = corpCreditCode; + } + + public String getCorpType() { + return corpType; + } + + public void setCorpType(String corpType) { + this.corpType = corpType; + } + + public String getCorpNature() { + return corpNature; + } + + public void setCorpNature(String corpNature) { + this.corpNature = corpNature; + } + + public String getCorpIndustryCategory() { + return corpIndustryCategory; + } + + public void setCorpIndustryCategory(String corpIndustryCategory) { + this.corpIndustryCategory = corpIndustryCategory; + } + + public String getCorpIndustry() { + return corpIndustry; + } + + public void setCorpIndustry(String corpIndustry) { + this.corpIndustry = corpIndustry; + } + + public Date getCorpEstablishDate() { + return corpEstablishDate; + } + + public void setCorpEstablishDate(Date corpEstablishDate) { + this.corpEstablishDate = corpEstablishDate; + } + + public String getCorpAddress() { + return corpAddress; + } + + public void setCorpAddress(String corpAddress) { + this.corpAddress = corpAddress; + } + + public String getCorpLegalRep() { + return corpLegalRep; + } + + public void setCorpLegalRep(String corpLegalRep) { + this.corpLegalRep = corpLegalRep; + } + + public String getCorpLegalCertType() { + return corpLegalCertType; + } + + public void setCorpLegalCertType(String corpLegalCertType) { + this.corpLegalCertType = corpLegalCertType; + } + + public String getCorpLegalCertNo() { + return corpLegalCertNo; + } + + public void setCorpLegalCertNo(String corpLegalCertNo) { + this.corpLegalCertNo = corpLegalCertNo; + } + + public String getCorpShareholder1() { + return corpShareholder1; + } + + public void setCorpShareholder1(String corpShareholder1) { + this.corpShareholder1 = corpShareholder1; + } + + public String getCorpShareholder2() { + return corpShareholder2; + } + + public void setCorpShareholder2(String corpShareholder2) { + this.corpShareholder2 = corpShareholder2; + } + + public String getCorpShareholder3() { + return corpShareholder3; + } + + public void setCorpShareholder3(String corpShareholder3) { + this.corpShareholder3 = corpShareholder3; + } + + public String getCorpShareholder4() { + return corpShareholder4; + } + + public void setCorpShareholder4(String corpShareholder4) { + this.corpShareholder4 = corpShareholder4; + } + + public String getCorpShareholder5() { + return corpShareholder5; + } + + public void setCorpShareholder5(String corpShareholder5) { + this.corpShareholder5 = corpShareholder5; + } } diff --git a/ruoyi-dpc/src/main/java/com/ruoyi/dpc/domain/dto/DpcIntermediaryEntityAddDTO.java b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/domain/dto/DpcIntermediaryEntityAddDTO.java index 8318070..5d08122 100644 --- a/ruoyi-dpc/src/main/java/com/ruoyi/dpc/domain/dto/DpcIntermediaryEntityAddDTO.java +++ b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/domain/dto/DpcIntermediaryEntityAddDTO.java @@ -2,17 +2,19 @@ package com.ruoyi.dpc.domain.dto; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Size; +import lombok.Data; import java.io.Serial; import java.io.Serializable; import java.util.Date; /** - * 机构中介黑名单新增 DTO + * 机构中介新增 DTO * * @author ruoyi * @date 2026-01-29 */ +@Data public class DpcIntermediaryEntityAddDTO implements Serializable { @Serial @@ -23,18 +25,8 @@ public class DpcIntermediaryEntityAddDTO implements Serializable { @Size(min = 1, max = 100, message = "机构名称长度不能超过100个字符") private String name; - /** 状态 */ - @NotBlank(message = "状态不能为空") - private String status; - - /** 备注 */ - @Size(max = 500, message = "备注长度不能超过500个字符") - private String remark; - - // ============================================================ - // 机构专属字段 - // ============================================================ /** 统一社会信用代码 */ + @NotBlank(message = "统一社会信用代码不能为空") @Size(max = 18, message = "统一社会信用代码长度不能超过18个字符") private String corpCreditCode; @@ -93,147 +85,11 @@ public class DpcIntermediaryEntityAddDTO implements Serializable { @Size(max = 30, message = "股东5长度不能超过30个字符") private String corpShareholder5; - public String getName() { - return name; - } + /** 状态 */ + @NotBlank(message = "状态不能为空") + private String status; - public void setName(String name) { - this.name = name; - } - - public String getStatus() { - return status; - } - - public void setStatus(String status) { - this.status = status; - } - - public String getRemark() { - return remark; - } - - public void setRemark(String remark) { - this.remark = remark; - } - - public String getCorpCreditCode() { - return corpCreditCode; - } - - public void setCorpCreditCode(String corpCreditCode) { - this.corpCreditCode = corpCreditCode; - } - - public String getCorpType() { - return corpType; - } - - public void setCorpType(String corpType) { - this.corpType = corpType; - } - - public String getCorpNature() { - return corpNature; - } - - public void setCorpNature(String corpNature) { - this.corpNature = corpNature; - } - - public String getCorpIndustryCategory() { - return corpIndustryCategory; - } - - public void setCorpIndustryCategory(String corpIndustryCategory) { - this.corpIndustryCategory = corpIndustryCategory; - } - - public String getCorpIndustry() { - return corpIndustry; - } - - public void setCorpIndustry(String corpIndustry) { - this.corpIndustry = corpIndustry; - } - - public Date getCorpEstablishDate() { - return corpEstablishDate; - } - - public void setCorpEstablishDate(Date corpEstablishDate) { - this.corpEstablishDate = corpEstablishDate; - } - - public String getCorpAddress() { - return corpAddress; - } - - public void setCorpAddress(String corpAddress) { - this.corpAddress = corpAddress; - } - - public String getCorpLegalRep() { - return corpLegalRep; - } - - public void setCorpLegalRep(String corpLegalRep) { - this.corpLegalRep = corpLegalRep; - } - - public String getCorpLegalCertType() { - return corpLegalCertType; - } - - public void setCorpLegalCertType(String corpLegalCertType) { - this.corpLegalCertType = corpLegalCertType; - } - - public String getCorpLegalCertNo() { - return corpLegalCertNo; - } - - public void setCorpLegalCertNo(String corpLegalCertNo) { - this.corpLegalCertNo = corpLegalCertNo; - } - - public String getCorpShareholder1() { - return corpShareholder1; - } - - public void setCorpShareholder1(String corpShareholder1) { - this.corpShareholder1 = corpShareholder1; - } - - public String getCorpShareholder2() { - return corpShareholder2; - } - - public void setCorpShareholder2(String corpShareholder2) { - this.corpShareholder2 = corpShareholder2; - } - - public String getCorpShareholder3() { - return corpShareholder3; - } - - public void setCorpShareholder3(String corpShareholder3) { - this.corpShareholder3 = corpShareholder3; - } - - public String getCorpShareholder4() { - return corpShareholder4; - } - - public void setCorpShareholder4(String corpShareholder4) { - this.corpShareholder4 = corpShareholder4; - } - - public String getCorpShareholder5() { - return corpShareholder5; - } - - public void setCorpShareholder5(String corpShareholder5) { - this.corpShareholder5 = corpShareholder5; - } + /** 备注 */ + @Size(max = 500, message = "备注长度不能超过500个字符") + private String remark; } diff --git a/ruoyi-dpc/src/main/java/com/ruoyi/dpc/domain/dto/DpcIntermediaryEntityEditDTO.java b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/domain/dto/DpcIntermediaryEntityEditDTO.java new file mode 100644 index 0000000..fc9397f --- /dev/null +++ b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/domain/dto/DpcIntermediaryEntityEditDTO.java @@ -0,0 +1,89 @@ +package com.ruoyi.dpc.domain.dto; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + +/** + * 机构中介编辑 DTO + * + * @author ruoyi + * @date 2026-01-29 + */ +@Data +public class DpcIntermediaryEntityEditDTO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** 中介ID */ + @NotNull(message = "中介ID不能为空") + private Long intermediaryId; + + /** 机构名称 */ + @NotBlank(message = "机构名称不能为空") + @Size(min = 1, max = 100, message = "机构名称长度不能超过100个字符") + private String name; + + /** 证件号(统一社会信用代码) */ + @Size(max = 50, message = "证件号长度不能超过50个字符") + private String certificateNo; + + /** 统一社会信用代码 */ + private String corpCreditCode; + + /** 主体类型(有限责任公司、股份有限公司等) */ + private String corpType; + + /** 企业性质(国企、民企、外企等) */ + private String corpNature; + + /** 行业分类 */ + private String corpIndustryCategory; + + /** 所属行业 */ + private String corpIndustry; + + /** 成立日期 */ + private Date corpEstablishDate; + + /** 注册地址 */ + private String corpAddress; + + /** 法定代表人 */ + private String corpLegalRep; + + /** 法定代表人证件类型 */ + private String corpLegalCertType; + + /** 法定代表人证件号码 */ + private String corpLegalCertNo; + + /** 股东1 */ + private String corpShareholder1; + + /** 股东2 */ + private String corpShareholder2; + + /** 股东3 */ + private String corpShareholder3; + + /** 股东4 */ + private String corpShareholder4; + + /** 股东5 */ + private String corpShareholder5; + + /** 状态 */ + @NotBlank(message = "状态不能为空") + private String status; + + /** 备注 */ + @Size(max = 500, message = "备注长度不能超过500个字符") + private String remark; +} diff --git a/ruoyi-dpc/src/main/java/com/ruoyi/dpc/domain/dto/DpcIntermediaryPersonAddDTO.java b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/domain/dto/DpcIntermediaryPersonAddDTO.java index 993de3d..b68a349 100644 --- a/ruoyi-dpc/src/main/java/com/ruoyi/dpc/domain/dto/DpcIntermediaryPersonAddDTO.java +++ b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/domain/dto/DpcIntermediaryPersonAddDTO.java @@ -2,16 +2,18 @@ package com.ruoyi.dpc.domain.dto; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.Size; +import lombok.Data; import java.io.Serial; import java.io.Serializable; /** - * 个人中介黑名单新增 DTO + * 个人中介新增 DTO * * @author ruoyi * @date 2026-01-29 */ +@Data public class DpcIntermediaryPersonAddDTO implements Serializable { @Serial @@ -22,31 +24,20 @@ public class DpcIntermediaryPersonAddDTO implements Serializable { @Size(min = 1, max = 100, message = "姓名长度不能超过100个字符") private String name; - /** 证件号码 */ - @NotBlank(message = "证件号码不能为空") - @Size(max = 50, message = "证件号码长度不能超过50个字符") + /** 证件号 */ + @NotBlank(message = "证件号不能为空") + @Size(max = 50, message = "证件号长度不能超过50个字符") private String certificateNo; - /** 状态 */ - @NotBlank(message = "状态不能为空") - private String status; - - /** 备注 */ - @Size(max = 500, message = "备注长度不能超过500个字符") - private String remark; - - // ============================================================ - // 个人专属字段 - // ============================================================ - /** 人员类型 */ + /** 人员类型(中介、职业背债人、房产中介等) */ @Size(max = 30, message = "人员类型长度不能超过30个字符") private String indivType; - /** 人员子类型 */ + /** 人员子类型(本人、配偶等) */ @Size(max = 50, message = "人员子类型长度不能超过50个字符") private String indivSubType; - /** 性别 */ + /** 性别(M男 F女 O其他) */ @Size(max = 1, message = "性别长度不能超过1个字符") private String indivGender; @@ -54,7 +45,7 @@ public class DpcIntermediaryPersonAddDTO implements Serializable { @Size(max = 30, message = "证件类型长度不能超过30个字符") private String indivCertType; - /** 手机号码 */ + /** 手机号码(加密存储) */ @Size(max = 20, message = "手机号码长度不能超过20个字符") private String indivPhone; @@ -82,123 +73,11 @@ public class DpcIntermediaryPersonAddDTO implements Serializable { @Size(max = 50, message = "关联关系长度不能超过50个字符") private String indivRelation; - public String getName() { - return name; - } + /** 状态 */ + @NotBlank(message = "状态不能为空") + private String status; - public void setName(String name) { - this.name = name; - } - - public String getCertificateNo() { - return certificateNo; - } - - public void setCertificateNo(String certificateNo) { - this.certificateNo = certificateNo; - } - - public String getStatus() { - return status; - } - - public void setStatus(String status) { - this.status = status; - } - - public String getRemark() { - return remark; - } - - public void setRemark(String remark) { - this.remark = remark; - } - - public String getIndivType() { - return indivType; - } - - public void setIndivType(String indivType) { - this.indivType = indivType; - } - - public String getIndivSubType() { - return indivSubType; - } - - public void setIndivSubType(String indivSubType) { - this.indivSubType = indivSubType; - } - - public String getIndivGender() { - return indivGender; - } - - public void setIndivGender(String indivGender) { - this.indivGender = indivGender; - } - - public String getIndivCertType() { - return indivCertType; - } - - public void setIndivCertType(String indivCertType) { - this.indivCertType = indivCertType; - } - - public String getIndivPhone() { - return indivPhone; - } - - public void setIndivPhone(String indivPhone) { - this.indivPhone = indivPhone; - } - - public String getIndivWechat() { - return indivWechat; - } - - public void setIndivWechat(String indivWechat) { - this.indivWechat = indivWechat; - } - - public String getIndivAddress() { - return indivAddress; - } - - public void setIndivAddress(String indivAddress) { - this.indivAddress = indivAddress; - } - - public String getIndivCompany() { - return indivCompany; - } - - public void setIndivCompany(String indivCompany) { - this.indivCompany = indivCompany; - } - - public String getIndivPosition() { - return indivPosition; - } - - public void setIndivPosition(String indivPosition) { - this.indivPosition = indivPosition; - } - - public String getIndivRelatedId() { - return indivRelatedId; - } - - public void setIndivRelatedId(String indivRelatedId) { - this.indivRelatedId = indivRelatedId; - } - - public String getIndivRelation() { - return indivRelation; - } - - public void setIndivRelation(String indivRelation) { - this.indivRelation = indivRelation; - } + /** 备注 */ + @Size(max = 500, message = "备注长度不能超过500个字符") + private String remark; } diff --git a/ruoyi-dpc/src/main/java/com/ruoyi/dpc/domain/dto/DpcIntermediaryPersonEditDTO.java b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/domain/dto/DpcIntermediaryPersonEditDTO.java new file mode 100644 index 0000000..f3510ed --- /dev/null +++ b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/domain/dto/DpcIntermediaryPersonEditDTO.java @@ -0,0 +1,76 @@ +package com.ruoyi.dpc.domain.dto; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 个人中介编辑 DTO + * + * @author ruoyi + * @date 2026-01-29 + */ +@Data +public class DpcIntermediaryPersonEditDTO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** 中介ID */ + @NotNull(message = "中介ID不能为空") + private Long intermediaryId; + + /** 姓名 */ + @NotBlank(message = "姓名不能为空") + @Size(min = 1, max = 100, message = "姓名长度不能超过100个字符") + private String name; + + /** 证件号 */ + @Size(max = 50, message = "证件号长度不能超过50个字符") + private String certificateNo; + + /** 人员类型(中介、职业背债人、房产中介等) */ + private String indivType; + + /** 人员子类型(本人、配偶等) */ + private String indivSubType; + + /** 性别(M男 F女 O其他) */ + private String indivGender; + + /** 证件类型 */ + private String indivCertType; + + /** 手机号码(加密存储) */ + private String indivPhone; + + /** 微信号 */ + private String indivWechat; + + /** 联系地址 */ + private String indivAddress; + + /** 所在公司 */ + private String indivCompany; + + /** 职位/职务 */ + private String indivPosition; + + /** 关联人员ID */ + private String indivRelatedId; + + /** 关联关系 */ + private String indivRelation; + + /** 状态 */ + @NotBlank(message = "状态不能为空") + private String status; + + /** 备注 */ + @Size(max = 500, message = "备注长度不能超过500个字符") + private String remark; +} diff --git a/ruoyi-dpc/src/main/java/com/ruoyi/dpc/domain/vo/EnumOptionVO.java b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/domain/vo/EnumOptionVO.java new file mode 100644 index 0000000..06f6269 --- /dev/null +++ b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/domain/vo/EnumOptionVO.java @@ -0,0 +1,28 @@ +package com.ruoyi.dpc.domain.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serial; +import java.io.Serializable; + +/** + * 枚举选项VO + * + * @author ruoyi + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +public class EnumOptionVO implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** 选项值 */ + private String value; + + /** 选项标签 */ + private String label; +} diff --git a/ruoyi-dpc/src/main/java/com/ruoyi/dpc/enums/CertType.java b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/enums/CertType.java new file mode 100644 index 0000000..1a79a5d --- /dev/null +++ b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/enums/CertType.java @@ -0,0 +1,41 @@ +package com.ruoyi.dpc.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 证件类型枚举 + * + * @author ruoyi + */ +@Getter +@AllArgsConstructor +public enum CertType { + + /** 身份证 */ + ID_CARD("身份证", "身份证"), + + /** 护照 */ + PASSPORT("护照", "护照"), + + /** 港澳通行证 */ + HK_MACAU_PASS("港澳通行证", "港澳通行证"), + + /** 台湾通行证 */ + TAIWAN_PASS("台湾通行证", "台湾通行证"); + + private final String code; + private final String desc; + + /** + * 根据编码获取描述 + */ + public static String getDescByCode(String code) { + for (CertType type : values()) { + if (type.getCode().equals(code)) { + return type.getDesc(); + } + } + return null; + } +} diff --git a/ruoyi-dpc/src/main/java/com/ruoyi/dpc/enums/CorpNature.java b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/enums/CorpNature.java new file mode 100644 index 0000000..cda0dd2 --- /dev/null +++ b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/enums/CorpNature.java @@ -0,0 +1,53 @@ +package com.ruoyi.dpc.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 企业性质枚举 + * + * @author ruoyi + */ +@Getter +@AllArgsConstructor +public enum CorpNature { + + /** 国有企业 */ + STATE_OWNED("国有企业", "国有企业"), + + /** 民营企业 */ + PRIVATE("民营企业", "民营企业"), + + /** 外资企业 */ + FOREIGN("外资企业", "外资企业"), + + /** 合资企业 */ + JOINT_VENTURE("合资企业", "合资企业"), + + /** 港澳台企业 */ + HONG_KONG_MACAO_TAIWAN("港澳台企业", "港澳台企业"), + + /** 集体企业 */ + COLLECTIVE("集体企业", "集体企业"), + + /** 个体工商户 */ + INDIVIDUAL("个体工商户", "个体工商户"), + + /** 其他 */ + OTHER("其他", "其他"); + + private final String code; + private final String desc; + + /** + * 根据编码获取描述 + */ + public static String getDescByCode(String code) { + for (CorpNature nature : values()) { + if (nature.getCode().equals(code)) { + return nature.getDesc(); + } + } + return null; + } +} diff --git a/ruoyi-dpc/src/main/java/com/ruoyi/dpc/enums/CorpType.java b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/enums/CorpType.java new file mode 100644 index 0000000..6777f9a --- /dev/null +++ b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/enums/CorpType.java @@ -0,0 +1,56 @@ +package com.ruoyi.dpc.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 主体类型枚举 + * + * @author ruoyi + */ +@Getter +@AllArgsConstructor +public enum CorpType { + + /** 有限责任公司 */ + LIMITED_LIABILITY("有限责任公司", "有限责任公司"), + + /** 股份有限公司 */ + JOINT_STOCK("股份有限公司", "股份有限公司"), + + /** 个体工商户 */ + INDIVIDUAL("个体工商户", "个体工商户"), + + /** 合伙企业 */ + PARTNERSHIP("合伙企业", "合伙企业"), + + /** 个人独资企业 */ + SOLE_PROPRIETORSHIP("个人独资企业", "个人独资企业"), + + /** 国有企业 */ + STATE_OWNED("国有企业", "国有企业"), + + /** 集体企业 */ + COLLECTIVE("集体企业", "集体企业"), + + /** 外商投资企业 */ + FOREIGN_INVESTED("外商投资企业", "外商投资企业"), + + /** 港澳台投资企业 */ + HONG_KONG_MACAO_TAIWAN("港澳台投资企业", "港澳台投资企业"); + + private final String code; + private final String desc; + + /** + * 根据编码获取描述 + */ + public static String getDescByCode(String code) { + for (CorpType type : values()) { + if (type.getCode().equals(code)) { + return type.getDesc(); + } + } + return null; + } +} diff --git a/ruoyi-dpc/src/main/java/com/ruoyi/dpc/enums/IndivSubType.java b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/enums/IndivSubType.java new file mode 100644 index 0000000..50d179c --- /dev/null +++ b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/enums/IndivSubType.java @@ -0,0 +1,50 @@ +package com.ruoyi.dpc.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 人员子类型枚举 + * + * @author ruoyi + */ +@Getter +@AllArgsConstructor +public enum IndivSubType { + + /** 本人 */ + SELF("本人", "本人"), + + /** 配偶 */ + SPOUSE("配偶", "配偶"), + + /** 父亲 */ + FATHER("父亲", "父亲"), + + /** 母亲 */ + MOTHER("母亲", "母亲"), + + /** 兄弟 */ + BROTHER("兄弟", "兄弟"), + + /** 姐妹 */ + SISTER("姐妹", "姐妹"), + + /** 子女 */ + CHILD("子女", "子女"); + + private final String code; + private final String desc; + + /** + * 根据编码获取描述 + */ + public static String getDescByCode(String code) { + for (IndivSubType type : values()) { + if (type.getCode().equals(code)) { + return type.getDesc(); + } + } + return null; + } +} diff --git a/ruoyi-dpc/src/main/java/com/ruoyi/dpc/enums/IndivType.java b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/enums/IndivType.java new file mode 100644 index 0000000..ea65017 --- /dev/null +++ b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/enums/IndivType.java @@ -0,0 +1,44 @@ +package com.ruoyi.dpc.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 人员类型枚举 + * + * @author ruoyi + */ +@Getter +@AllArgsConstructor +public enum IndivType { + + /** 房产中介 */ + REAL_ESTATE_AGENT("房产中介", "房产中介"), + + /** 贷款中介 */ + LOAN_AGENT("贷款中介", "贷款中介"), + + /** 职业背债人 */ + PROFESSIONAL_DEBTOR("职业背债人", "职业背债人"), + + /** 担保中介 */ + GUARANTEE_AGENT("担保中介", "担保中介"), + + /** 评估中介 */ + EVALUATION_AGENT("评估中介", "评估中介"); + + private final String code; + private final String desc; + + /** + * 根据编码获取描述 + */ + public static String getDescByCode(String code) { + for (IndivType type : values()) { + if (type.getCode().equals(code)) { + return type.getDesc(); + } + } + return null; + } +} diff --git a/ruoyi-dpc/src/main/java/com/ruoyi/dpc/enums/RelationType.java b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/enums/RelationType.java new file mode 100644 index 0000000..2ce79fd --- /dev/null +++ b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/enums/RelationType.java @@ -0,0 +1,53 @@ +package com.ruoyi.dpc.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 关联关系枚举 + * + * @author ruoyi + */ +@Getter +@AllArgsConstructor +public enum RelationType { + + /** 配偶 */ + SPOUSE("配偶", "配偶"), + + /** 父子 */ + FATHER_SON("父子", "父子"), + + /** 母女 */ + MOTHER_DAUGHTER("母女", "母女"), + + /** 兄弟 */ + BROTHER("兄弟", "兄弟"), + + /** 姐妹 */ + SISTER("姐妹", "姐妹"), + + /** 亲属 */ + RELATIVE("亲属", "亲属"), + + /** 朋友 */ + FRIEND("朋友", "朋友"), + + /** 同事 */ + COLLEAGUE("同事", "同事"); + + private final String code; + private final String desc; + + /** + * 根据编码获取描述 + */ + public static String getDescByCode(String code) { + for (RelationType type : values()) { + if (type.getCode().equals(code)) { + return type.getDesc(); + } + } + return null; + } +} diff --git a/ruoyi-dpc/src/main/java/com/ruoyi/dpc/mapper/DpcIntermediaryBlacklistMapper.java b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/mapper/DpcIntermediaryBlacklistMapper.java index f162f71..c286b62 100644 --- a/ruoyi-dpc/src/main/java/com/ruoyi/dpc/mapper/DpcIntermediaryBlacklistMapper.java +++ b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/mapper/DpcIntermediaryBlacklistMapper.java @@ -2,6 +2,9 @@ package com.ruoyi.dpc.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.dpc.domain.DpcIntermediaryBlacklist; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * 中介人员黑名单 数据层 @@ -10,4 +13,20 @@ import com.ruoyi.dpc.domain.DpcIntermediaryBlacklist; * @date 2026-01-27 */ public interface DpcIntermediaryBlacklistMapper extends BaseMapper { + + /** + * 批量插入中介黑名单数据 + * + * @param list 中介黑名单列表 + * @return 插入行数 + */ + int batchInsert(@Param("list") List list); + + /** + * 批量更新中介黑名单数据 + * + * @param list 中介黑名单列表 + * @return 更新行数 + */ + int batchUpdate(@Param("list") List list); } diff --git a/ruoyi-dpc/src/main/java/com/ruoyi/dpc/service/IDpcIntermediaryBlacklistService.java b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/service/IDpcIntermediaryBlacklistService.java index 8b7639a..8db14c5 100644 --- a/ruoyi-dpc/src/main/java/com/ruoyi/dpc/service/IDpcIntermediaryBlacklistService.java +++ b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/service/IDpcIntermediaryBlacklistService.java @@ -2,9 +2,7 @@ package com.ruoyi.dpc.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.dpc.domain.DpcIntermediaryBlacklist; -import com.ruoyi.dpc.domain.dto.DpcIntermediaryBlacklistAddDTO; -import com.ruoyi.dpc.domain.dto.DpcIntermediaryBlacklistEditDTO; -import com.ruoyi.dpc.domain.dto.DpcIntermediaryBlacklistQueryDTO; +import com.ruoyi.dpc.domain.dto.*; import com.ruoyi.dpc.domain.excel.DpcIntermediaryBlacklistExcel; import com.ruoyi.dpc.domain.excel.DpcIntermediaryEntityExcel; import com.ruoyi.dpc.domain.excel.DpcIntermediaryPersonExcel; @@ -54,21 +52,57 @@ public interface IDpcIntermediaryBlacklistService { DpcIntermediaryBlacklistVO selectIntermediaryById(Long intermediaryId); /** - * 新增中介黑名单 + * 新增中介黑名单(通用接口,不推荐使用) * * @param addDTO 新增DTO * @return 结果 + * @deprecated 请使用 insertPersonIntermediary 或 insertEntityIntermediary 代替 */ + @Deprecated int insertIntermediary(DpcIntermediaryBlacklistAddDTO addDTO); /** - * 修改中介黑名单 + * 新增个人中介黑名单 + * + * @param addDTO 个人中介新增DTO + * @return 结果 + */ + int insertPersonIntermediary(DpcIntermediaryPersonAddDTO addDTO); + + /** + * 新增机构中介黑名单 + * + * @param addDTO 机构中介新增DTO + * @return 结果 + */ + int insertEntityIntermediary(DpcIntermediaryEntityAddDTO addDTO); + + /** + * 修改中介黑名单(通用接口,不推荐使用) * * @param editDTO 编辑DTO * @return 结果 + * @deprecated 请使用 updatePersonIntermediary 或 updateEntityIntermediary 代替 */ + @Deprecated int updateIntermediary(DpcIntermediaryBlacklistEditDTO editDTO); + /** + * 修改个人中介黑名单 + * + * @param editDTO 个人中介编辑DTO + * @return 结果 + */ + int updatePersonIntermediary(DpcIntermediaryPersonEditDTO editDTO); + + /** + * 修改机构中介黑名单 + * + * @param editDTO 机构中介编辑DTO + * @return 结果 + */ + int updateEntityIntermediary(DpcIntermediaryEntityEditDTO editDTO); + /** * 批量删除中介黑名单 * diff --git a/ruoyi-dpc/src/main/java/com/ruoyi/dpc/service/impl/DpcIntermediaryBlacklistServiceImpl.java b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/service/impl/DpcIntermediaryBlacklistServiceImpl.java index bee4d9f..98960de 100644 --- a/ruoyi-dpc/src/main/java/com/ruoyi/dpc/service/impl/DpcIntermediaryBlacklistServiceImpl.java +++ b/ruoyi-dpc/src/main/java/com/ruoyi/dpc/service/impl/DpcIntermediaryBlacklistServiceImpl.java @@ -4,9 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.dpc.domain.DpcIntermediaryBlacklist; -import com.ruoyi.dpc.domain.dto.DpcIntermediaryBlacklistAddDTO; -import com.ruoyi.dpc.domain.dto.DpcIntermediaryBlacklistEditDTO; -import com.ruoyi.dpc.domain.dto.DpcIntermediaryBlacklistQueryDTO; +import com.ruoyi.dpc.domain.dto.*; import com.ruoyi.dpc.domain.excel.DpcIntermediaryBlacklistExcel; import com.ruoyi.dpc.domain.excel.DpcIntermediaryEntityExcel; import com.ruoyi.dpc.domain.excel.DpcIntermediaryPersonExcel; @@ -24,7 +22,7 @@ import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; /** @@ -108,9 +106,50 @@ public class DpcIntermediaryBlacklistServiceImpl implements IDpcIntermediaryBlac * @return 结果 */ @Override + @Deprecated public int insertIntermediary(DpcIntermediaryBlacklistAddDTO addDTO) { DpcIntermediaryBlacklist intermediary = new DpcIntermediaryBlacklist(); BeanUtils.copyProperties(addDTO, intermediary); + // 手动新增时,数据来源设置为 MANUAL + intermediary.setDataSource("MANUAL"); + // 默认状态设置为正常 + intermediary.setStatus("0"); + return intermediaryMapper.insert(intermediary); + } + + /** + * 新增个人中介黑名单 + * + * @param addDTO 个人中介新增DTO + * @return 结果 + */ + @Override + public int insertPersonIntermediary(DpcIntermediaryPersonAddDTO addDTO) { + DpcIntermediaryBlacklist intermediary = new DpcIntermediaryBlacklist(); + BeanUtils.copyProperties(addDTO, intermediary); + // 设置中介类型为个人 + intermediary.setIntermediaryType("1"); + // 手动新增时,数据来源设置为 MANUAL + intermediary.setDataSource("MANUAL"); + return intermediaryMapper.insert(intermediary); + } + + /** + * 新增机构中介黑名单 + * + * @param addDTO 机构中介新增DTO + * @return 结果 + */ + @Override + public int insertEntityIntermediary(DpcIntermediaryEntityAddDTO addDTO) { + DpcIntermediaryBlacklist intermediary = new DpcIntermediaryBlacklist(); + BeanUtils.copyProperties(addDTO, intermediary); + // 设置中介类型为机构 + intermediary.setIntermediaryType("2"); + // 证件号使用统一社会信用代码 + intermediary.setCertificateNo(addDTO.getCorpCreditCode()); + // 手动新增时,数据来源设置为 MANUAL + intermediary.setDataSource("MANUAL"); return intermediaryMapper.insert(intermediary); } @@ -121,12 +160,85 @@ public class DpcIntermediaryBlacklistServiceImpl implements IDpcIntermediaryBlac * @return 结果 */ @Override + @Deprecated public int updateIntermediary(DpcIntermediaryBlacklistEditDTO editDTO) { DpcIntermediaryBlacklist intermediary = new DpcIntermediaryBlacklist(); BeanUtils.copyProperties(editDTO, intermediary); return intermediaryMapper.updateById(intermediary); } + /** + * 修改个人中介黑名单 + * + * @param editDTO 个人中介编辑DTO + * @return 结果 + */ + @Override + public int updatePersonIntermediary(DpcIntermediaryPersonEditDTO editDTO) { + DpcIntermediaryBlacklist intermediary = new DpcIntermediaryBlacklist(); + BeanUtils.copyProperties(editDTO, intermediary); + // 设置中介类型为个人 + intermediary.setIntermediaryType("1"); + // 清空机构专属字段 + clearEntityFields(intermediary); + return intermediaryMapper.updateById(intermediary); + } + + /** + * 修改机构中介黑名单 + * + * @param editDTO 机构中介编辑DTO + * @return 结果 + */ + @Override + public int updateEntityIntermediary(DpcIntermediaryEntityEditDTO editDTO) { + DpcIntermediaryBlacklist intermediary = new DpcIntermediaryBlacklist(); + BeanUtils.copyProperties(editDTO, intermediary); + // 设置中介类型为机构 + intermediary.setIntermediaryType("2"); + // 清空个人专属字段 + clearPersonFields(intermediary); + return intermediaryMapper.updateById(intermediary); + } + + /** + * 清空个人专属字段 + */ + private void clearPersonFields(DpcIntermediaryBlacklist intermediary) { + intermediary.setIndivType(null); + intermediary.setIndivSubType(null); + intermediary.setIndivGender(null); + intermediary.setIndivCertType(null); + intermediary.setIndivPhone(null); + intermediary.setIndivWechat(null); + intermediary.setIndivAddress(null); + intermediary.setIndivCompany(null); + intermediary.setIndivPosition(null); + intermediary.setIndivRelatedId(null); + intermediary.setIndivRelation(null); + } + + /** + * 清空机构专属字段 + */ + private void clearEntityFields(DpcIntermediaryBlacklist intermediary) { + intermediary.setCorpCreditCode(null); + intermediary.setCorpType(null); + intermediary.setCorpNature(null); + intermediary.setCorpIndustryCategory(null); + intermediary.setCorpIndustry(null); + intermediary.setCorpEstablishDate(null); + intermediary.setCorpAddress(null); + intermediary.setCorpLegalRep(null); + intermediary.setCorpLegalCertType(null); + intermediary.setCorpLegalCertNo(null); + intermediary.setCorpShareholder1(null); + intermediary.setCorpShareholder2(null); + intermediary.setCorpShareholder3(null); + intermediary.setCorpShareholder4(null); + intermediary.setCorpShareholder5(null); + } + /** * 批量删除中介黑名单 * @@ -211,7 +323,7 @@ public class DpcIntermediaryBlacklistServiceImpl implements IDpcIntermediaryBlac } /** - * 导入个人中介数据 + * 导入个人中介数据(批量插入优化版) * * @param excelList Excel实体列表 * @param isUpdateSupport 是否更新支持 @@ -223,11 +335,40 @@ public class DpcIntermediaryBlacklistServiceImpl implements IDpcIntermediaryBlac return "至少需要一条数据"; } - int successNum = 0; - int failureNum = 0; - StringBuilder successMsg = new StringBuilder(); - StringBuilder failureMsg = new StringBuilder(); + // 批量处理:先验证所有数据 + List toInsertList = new ArrayList<>(); + List toUpdateList = new ArrayList<>(); + List errorMessages = new ArrayList<>(); + // 批量查询已存在的记录(用于唯一性校验或更新支持) + Set existingCertNos = new HashSet<>(); + Map certNoToIdMap = new HashMap<>(); + for (DpcIntermediaryPersonExcel excel : excelList) { + if (StringUtils.isNotEmpty(excel.getCertificateNo())) { + existingCertNos.add(excel.getCertificateNo()); + } + } + if (!existingCertNos.isEmpty()) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(DpcIntermediaryBlacklist::getIntermediaryType, "1") + .in(DpcIntermediaryBlacklist::getCertificateNo, existingCertNos) + .select(DpcIntermediaryBlacklist::getIntermediaryId, DpcIntermediaryBlacklist::getCertificateNo); + List existingList = intermediaryMapper.selectList(wrapper); + for (DpcIntermediaryBlacklist existing : existingList) { + certNoToIdMap.put(existing.getCertificateNo(), existing.getIntermediaryId()); + } + } + + // 如果不是更新模式,先进行唯一性校验 + if (!isUpdateSupport) { + for (DpcIntermediaryPersonExcel excel : excelList) { + if (StringUtils.isNotEmpty(excel.getCertificateNo()) && certNoToIdMap.containsKey(excel.getCertificateNo())) { + throw new RuntimeException("证件号 " + excel.getCertificateNo() + " 已存在,请勿重复导入"); + } + } + } + + // 处理每条数据 for (int i = 0; i < excelList.size(); i++) { DpcIntermediaryPersonExcel excel = excelList.get(i); try { @@ -238,16 +379,16 @@ public class DpcIntermediaryBlacklistServiceImpl implements IDpcIntermediaryBlac DpcIntermediaryBlacklist intermediary = new DpcIntermediaryBlacklist(); intermediary.setName(excel.getName()); intermediary.setCertificateNo(excel.getCertificateNo()); - intermediary.setIntermediaryType("1"); // 个人类型 - intermediary.setStatus("0"); // 默认正常 - intermediary.setDataSource("IMPORT"); // 批量导入 + intermediary.setIntermediaryType("1"); + intermediary.setStatus("0"); + intermediary.setDataSource("IMPORT"); intermediary.setRemark(excel.getRemark()); // 个人专属字段 intermediary.setIndivType(excel.getIndivType()); intermediary.setIndivSubType(excel.getIndivSubType()); intermediary.setIndivGender(excel.getIndivGender()); - intermediary.setIndivCertType(excel.getIndivCertType()); + intermediary.setIndivCertType(StringUtils.isNotEmpty(excel.getIndivCertType()) ? excel.getIndivCertType() : "身份证"); intermediary.setIndivPhone(excel.getIndivPhone()); intermediary.setIndivWechat(excel.getIndivWechat()); intermediary.setIndivAddress(excel.getIndivAddress()); @@ -256,47 +397,51 @@ public class DpcIntermediaryBlacklistServiceImpl implements IDpcIntermediaryBlac intermediary.setIndivRelatedId(excel.getIndivRelatedId()); intermediary.setIndivRelation(excel.getIndivRelation()); - // 设置默认证件类型 - if (StringUtils.isEmpty(intermediary.getIndivCertType())) { - intermediary.setIndivCertType("身份证"); + // 检查是否需要更新 + if (isUpdateSupport && StringUtils.isNotEmpty(excel.getCertificateNo()) && certNoToIdMap.containsKey(excel.getCertificateNo())) { + intermediary.setIntermediaryId(certNoToIdMap.get(excel.getCertificateNo())); + toUpdateList.add(intermediary); + } else { + toInsertList.add(intermediary); } - - // 检查是否已存在(通过证件号判断) - if (isUpdateSupport && StringUtils.isNotEmpty(excel.getCertificateNo())) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(DpcIntermediaryBlacklist::getCertificateNo, excel.getCertificateNo()) - .eq(DpcIntermediaryBlacklist::getIntermediaryType, "1"); - DpcIntermediaryBlacklist existing = intermediaryMapper.selectOne(wrapper); - if (existing != null) { - intermediary.setIntermediaryId(existing.getIntermediaryId()); - intermediaryMapper.updateById(intermediary); - successNum++; - successMsg.append("
").append(successNum).append("、").append(excel.getName()).append(" 更新成功"); - continue; - } - } - - intermediaryMapper.insert(intermediary); - successNum++; - successMsg.append("
").append(successNum).append("、").append(excel.getName()).append(" 导入成功"); } catch (Exception e) { - failureNum++; - failureMsg.append("
").append(failureNum).append("、第").append(i + 1).append("行导入失败:"); - failureMsg.append(e.getMessage()); + errorMessages.add("第" + (i + 1) + "行导入失败:" + e.getMessage()); } } + // 批量执行数据库操作 + int successNum = 0; + int failureNum = errorMessages.size(); + + // 批量插入 + if (!toInsertList.isEmpty()) { + intermediaryMapper.batchInsert(toInsertList); + successNum += toInsertList.size(); + } + + // 批量更新 + if (!toUpdateList.isEmpty()) { + intermediaryMapper.batchUpdate(toUpdateList); + successNum += toUpdateList.size(); + } + + // 构建失败消息 + StringBuilder failureMsg = new StringBuilder(); + for (String error : errorMessages) { + failureMsg.append("
").append(error); + } + + // 返回结果 if (failureNum > 0) { failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); throw new RuntimeException(failureMsg.toString()); } else { - successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条"); - return successMsg.toString(); + return "恭喜您,数据已全部导入成功!共 " + successNum + " 条"; } } /** - * 导入机构中介数据 + * 导入机构中介数据(批量插入优化版) * * @param excelList Excel实体列表 * @param isUpdateSupport 是否更新支持 @@ -308,11 +453,42 @@ public class DpcIntermediaryBlacklistServiceImpl implements IDpcIntermediaryBlac return "至少需要一条数据"; } - int successNum = 0; - int failureNum = 0; - StringBuilder successMsg = new StringBuilder(); - StringBuilder failureMsg = new StringBuilder(); + // 批量处理:先验证所有数据 + List toInsertList = new ArrayList<>(); + List toUpdateList = new ArrayList<>(); + List errorMessages = new ArrayList<>(); + // 批量查询已存在的记录(用于唯一性校验或更新支持) + Set existingCreditCodes = new HashSet<>(); + Map creditCodeToIdMap = new HashMap<>(); + for (DpcIntermediaryEntityExcel excel : excelList) { + if (StringUtils.isNotEmpty(excel.getCorpCreditCode())) { + existingCreditCodes.add(excel.getCorpCreditCode()); + } + } + if (!existingCreditCodes.isEmpty()) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(DpcIntermediaryBlacklist::getIntermediaryType, "2") + .in(DpcIntermediaryBlacklist::getCorpCreditCode, existingCreditCodes) + .select(DpcIntermediaryBlacklist::getIntermediaryId, DpcIntermediaryBlacklist::getCorpCreditCode); + List existingList = intermediaryMapper.selectList(wrapper); + for (DpcIntermediaryBlacklist existing : existingList) { + creditCodeToIdMap.put(existing.getCorpCreditCode(), existing.getIntermediaryId()); + } + } + + // 如果不是更新模式,先进行唯一性校验 + if (!isUpdateSupport) { + for (DpcIntermediaryEntityExcel excel : excelList) { + if (StringUtils.isNotEmpty(excel.getCorpCreditCode()) && creditCodeToIdMap.containsKey(excel.getCorpCreditCode())) { + throw new RuntimeException("统一社会信用代码 " + excel.getCorpCreditCode() + " 已存在,请勿重复导入"); + } + } + } + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + + // 处理每条数据 for (int i = 0; i < excelList.size(); i++) { DpcIntermediaryEntityExcel excel = excelList.get(i); try { @@ -322,9 +498,11 @@ public class DpcIntermediaryBlacklistServiceImpl implements IDpcIntermediaryBlac // 转换为实体 DpcIntermediaryBlacklist intermediary = new DpcIntermediaryBlacklist(); intermediary.setName(excel.getName()); - intermediary.setIntermediaryType("2"); // 机构类型 - intermediary.setStatus("0"); // 默认正常 - intermediary.setDataSource("IMPORT"); // 批量导入 + // 对于机构中介,使用统一社会信用代码作为证件号 + intermediary.setCertificateNo(excel.getCorpCreditCode()); + intermediary.setIntermediaryType("2"); + intermediary.setStatus("0"); + intermediary.setDataSource("IMPORT"); intermediary.setRemark(excel.getRemark()); // 机构专属字段 @@ -337,7 +515,6 @@ public class DpcIntermediaryBlacklistServiceImpl implements IDpcIntermediaryBlac // 解析成立日期 if (StringUtils.isNotEmpty(excel.getCorpEstablishDate())) { try { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); intermediary.setCorpEstablishDate(sdf.parse(excel.getCorpEstablishDate())); } catch (Exception e) { // 忽略日期解析错误 @@ -354,37 +531,46 @@ public class DpcIntermediaryBlacklistServiceImpl implements IDpcIntermediaryBlac intermediary.setCorpShareholder4(excel.getCorpShareholder4()); intermediary.setCorpShareholder5(excel.getCorpShareholder5()); - // 检查是否已存在(通过统一社会信用代码判断) - if (isUpdateSupport && StringUtils.isNotEmpty(excel.getCorpCreditCode())) { - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(DpcIntermediaryBlacklist::getCorpCreditCode, excel.getCorpCreditCode()) - .eq(DpcIntermediaryBlacklist::getIntermediaryType, "2"); - DpcIntermediaryBlacklist existing = intermediaryMapper.selectOne(wrapper); - if (existing != null) { - intermediary.setIntermediaryId(existing.getIntermediaryId()); - intermediaryMapper.updateById(intermediary); - successNum++; - successMsg.append("
").append(successNum).append("、").append(excel.getName()).append(" 更新成功"); - continue; - } + // 检查是否需要更新 + if (isUpdateSupport && StringUtils.isNotEmpty(excel.getCorpCreditCode()) && creditCodeToIdMap.containsKey(excel.getCorpCreditCode())) { + intermediary.setIntermediaryId(creditCodeToIdMap.get(excel.getCorpCreditCode())); + toUpdateList.add(intermediary); + } else { + toInsertList.add(intermediary); } - - intermediaryMapper.insert(intermediary); - successNum++; - successMsg.append("
").append(successNum).append("、").append(excel.getName()).append(" 导入成功"); } catch (Exception e) { - failureNum++; - failureMsg.append("
").append(failureNum).append("、第").append(i + 1).append("行导入失败:"); - failureMsg.append(e.getMessage()); + errorMessages.add("第" + (i + 1) + "行导入失败:" + e.getMessage()); } } + // 批量执行数据库操作 + int successNum = 0; + int failureNum = errorMessages.size(); + + // 批量插入 + if (!toInsertList.isEmpty()) { + intermediaryMapper.batchInsert(toInsertList); + successNum += toInsertList.size(); + } + + // 批量更新 + if (!toUpdateList.isEmpty()) { + intermediaryMapper.batchUpdate(toUpdateList); + successNum += toUpdateList.size(); + } + + // 构建失败消息 + StringBuilder failureMsg = new StringBuilder(); + for (String error : errorMessages) { + failureMsg.append("
").append(error); + } + + // 返回结果 if (failureNum > 0) { failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); throw new RuntimeException(failureMsg.toString()); } else { - successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条"); - return successMsg.toString(); + return "恭喜您,数据已全部导入成功!共 " + successNum + " 条"; } } @@ -407,6 +593,10 @@ public class DpcIntermediaryBlacklistServiceImpl implements IDpcIntermediaryBlac if (StringUtils.isEmpty(excel.getName())) { throw new RuntimeException("机构名称不能为空"); } + // 验证统一社会信用代码不能为空(因为会用作 certificate_no 字段) + if (StringUtils.isEmpty(excel.getCorpCreditCode())) { + throw new RuntimeException("统一社会信用代码不能为空"); + } } /** @@ -418,8 +608,33 @@ public class DpcIntermediaryBlacklistServiceImpl implements IDpcIntermediaryBlac } DpcIntermediaryPersonDetailVO vo = new DpcIntermediaryPersonDetailVO(); - BeanUtils.copyProperties(intermediary, vo); + // 复制基础字段 + vo.setIntermediaryId(intermediary.getIntermediaryId()); + vo.setName(intermediary.getName()); + vo.setCertificateNo(intermediary.getCertificateNo()); + vo.setIntermediaryType(intermediary.getIntermediaryType()); + vo.setStatus(intermediary.getStatus()); + vo.setRemark(intermediary.getRemark()); + vo.setDataSource(intermediary.getDataSource()); + vo.setCreateBy(intermediary.getCreateBy()); + vo.setCreateTime(intermediary.getCreateTime()); + vo.setUpdateBy(intermediary.getUpdateBy()); + vo.setUpdateTime(intermediary.getUpdateTime()); + // 复制个人专属字段 + vo.setIndivType(intermediary.getIndivType()); + vo.setIndivSubType(intermediary.getIndivSubType()); + vo.setIndivGender(intermediary.getIndivGender()); + vo.setIndivCertType(intermediary.getIndivCertType()); + vo.setIndivPhone(intermediary.getIndivPhone()); + vo.setIndivWechat(intermediary.getIndivWechat()); + vo.setIndivAddress(intermediary.getIndivAddress()); + vo.setIndivCompany(intermediary.getIndivCompany()); + vo.setIndivPosition(intermediary.getIndivPosition()); + vo.setIndivRelatedId(intermediary.getIndivRelatedId()); + vo.setIndivRelation(intermediary.getIndivRelation()); + + // 设置枚举类型的名称 vo.setIntermediaryTypeName(IntermediaryType.PERSON.getDesc()); vo.setStatusName(IntermediaryStatus.getDescByCode(intermediary.getStatus())); vo.setDataSourceName(DataSource.getDescByCode(intermediary.getDataSource())); @@ -437,8 +652,37 @@ public class DpcIntermediaryBlacklistServiceImpl implements IDpcIntermediaryBlac } DpcIntermediaryEntityDetailVO vo = new DpcIntermediaryEntityDetailVO(); - BeanUtils.copyProperties(intermediary, vo); + // 复制基础字段 + vo.setIntermediaryId(intermediary.getIntermediaryId()); + vo.setName(intermediary.getName()); + vo.setCertificateNo(intermediary.getCertificateNo()); + vo.setIntermediaryType(intermediary.getIntermediaryType()); + vo.setStatus(intermediary.getStatus()); + vo.setRemark(intermediary.getRemark()); + vo.setDataSource(intermediary.getDataSource()); + vo.setCreateBy(intermediary.getCreateBy()); + vo.setCreateTime(intermediary.getCreateTime()); + vo.setUpdateBy(intermediary.getUpdateBy()); + vo.setUpdateTime(intermediary.getUpdateTime()); + // 复制机构专属字段 + vo.setCorpCreditCode(intermediary.getCorpCreditCode()); + vo.setCorpType(intermediary.getCorpType()); + vo.setCorpNature(intermediary.getCorpNature()); + vo.setCorpIndustryCategory(intermediary.getCorpIndustryCategory()); + vo.setCorpIndustry(intermediary.getCorpIndustry()); + vo.setCorpEstablishDate(intermediary.getCorpEstablishDate()); + vo.setCorpAddress(intermediary.getCorpAddress()); + vo.setCorpLegalRep(intermediary.getCorpLegalRep()); + vo.setCorpLegalCertType(intermediary.getCorpLegalCertType()); + vo.setCorpLegalCertNo(intermediary.getCorpLegalCertNo()); + vo.setCorpShareholder1(intermediary.getCorpShareholder1()); + vo.setCorpShareholder2(intermediary.getCorpShareholder2()); + vo.setCorpShareholder3(intermediary.getCorpShareholder3()); + vo.setCorpShareholder4(intermediary.getCorpShareholder4()); + vo.setCorpShareholder5(intermediary.getCorpShareholder5()); + + // 设置枚举类型的名称 vo.setIntermediaryTypeName(IntermediaryType.ENTITY.getDesc()); vo.setStatusName(IntermediaryStatus.getDescByCode(intermediary.getStatus())); vo.setDataSourceName(DataSource.getDescByCode(intermediary.getDataSource())); @@ -470,19 +714,12 @@ public class DpcIntermediaryBlacklistServiceImpl implements IDpcIntermediaryBlac if (StringUtils.isEmpty(addDTO.getIntermediaryType())) { throw new RuntimeException("中介类型不能为空"); } - if (StringUtils.isEmpty(addDTO.getStatus())) { - throw new RuntimeException("状态不能为空"); - } // 验证中介类型 if (!"1".equals(addDTO.getIntermediaryType()) && !"2".equals(addDTO.getIntermediaryType())) { throw new RuntimeException("中介类型只能填写'个人'或'机构'"); } - // 验证状态 - if (!"0".equals(addDTO.getStatus()) && !"1".equals(addDTO.getStatus())) { - throw new RuntimeException("状态只能填写'正常'或'停用'"); - } } /** diff --git a/ruoyi-dpc/src/main/resources/mapper/dpc/DpcIntermediaryBlacklistMapper.xml b/ruoyi-dpc/src/main/resources/mapper/dpc/DpcIntermediaryBlacklistMapper.xml new file mode 100644 index 0000000..36b5635 --- /dev/null +++ b/ruoyi-dpc/src/main/resources/mapper/dpc/DpcIntermediaryBlacklistMapper.xml @@ -0,0 +1,134 @@ + + + + + + + INSERT INTO dpc_intermediary_blacklist ( + name, + certificate_no, + intermediary_type, + status, + remark, + indiv_type, + indiv_sub_type, + indiv_gender, + indiv_cert_type, + indiv_phone, + indiv_wechat, + indiv_address, + indiv_company, + indiv_position, + indiv_related_id, + indiv_relation, + corp_credit_code, + corp_type, + corp_nature, + corp_industry_category, + corp_industry, + corp_establish_date, + corp_address, + corp_legal_rep, + corp_legal_cert_type, + corp_legal_cert_no, + corp_shareholder_1, + corp_shareholder_2, + corp_shareholder_3, + corp_shareholder_4, + corp_shareholder_5, + data_source, + create_by, + create_time, + update_by, + update_time + ) VALUES + + ( + #{item.name}, + #{item.certificateNo}, + #{item.intermediaryType}, + #{item.status}, + #{item.remark}, + #{item.indivType}, + #{item.indivSubType}, + #{item.indivGender}, + #{item.indivCertType}, + #{item.indivPhone}, + #{item.indivWechat}, + #{item.indivAddress}, + #{item.indivCompany}, + #{item.indivPosition}, + #{item.indivRelatedId}, + #{item.indivRelation}, + #{item.corpCreditCode}, + #{item.corpType}, + #{item.corpNature}, + #{item.corpIndustryCategory}, + #{item.corpIndustry}, + #{item.corpEstablishDate}, + #{item.corpAddress}, + #{item.corpLegalRep}, + #{item.corpLegalCertType}, + #{item.corpLegalCertNo}, + #{item.corpShareholder1}, + #{item.corpShareholder2}, + #{item.corpShareholder3}, + #{item.corpShareholder4}, + #{item.corpShareholder5}, + #{item.dataSource}, + #{item.createBy}, + #{item.createTime}, + #{item.updateBy}, + #{item.updateTime} + ) + + + + + + + UPDATE dpc_intermediary_blacklist + + name = #{item.name}, + certificate_no = #{item.certificateNo}, + intermediary_type = #{item.intermediaryType}, + status = #{item.status}, + remark = #{item.remark}, + indiv_type = #{item.indivType}, + indiv_sub_type = #{item.indivSubType}, + indiv_gender = #{item.indivGender}, + indiv_cert_type = #{item.indivCertType}, + indiv_phone = #{item.indivPhone}, + indiv_wechat = #{item.indivWechat}, + indiv_address = #{item.indivAddress}, + indiv_company = #{item.indivCompany}, + indiv_position = #{item.indivPosition}, + indiv_related_id = #{item.indivRelatedId}, + indiv_relation = #{item.indivRelation}, + corp_credit_code = #{item.corpCreditCode}, + corp_type = #{item.corpType}, + corp_nature = #{item.corpNature}, + corp_industry_category = #{item.corpIndustryCategory}, + corp_industry = #{item.corpIndustry}, + corp_establish_date = #{item.corpEstablishDate}, + corp_address = #{item.corpAddress}, + corp_legal_rep = #{item.corpLegalRep}, + corp_legal_cert_type = #{item.corpLegalCertType}, + corp_legal_cert_no = #{item.corpLegalCertNo}, + corp_shareholder_1 = #{item.corpShareholder1}, + corp_shareholder_2 = #{item.corpShareholder2}, + corp_shareholder_3 = #{item.corpShareholder3}, + corp_shareholder_4 = #{item.corpShareholder4}, + corp_shareholder_5 = #{item.corpShareholder5}, + data_source = #{item.dataSource}, + certificate_no = #{item.certificateNo}, + update_by = #{item.updateBy}, + update_time = #{item.updateTime} + + WHERE intermediary_id = #{item.intermediaryId} + + + + diff --git a/ruoyi-ui/src/api/dpcEnum.js b/ruoyi-ui/src/api/dpcEnum.js new file mode 100644 index 0000000..fb7ee56 --- /dev/null +++ b/ruoyi-ui/src/api/dpcEnum.js @@ -0,0 +1,101 @@ +import request from '@/utils/request' + +/** + * 查询人员类型选项 + */ +export function getIndivTypeOptions() { + return request({ + url: '/dpc/enum/indivType', + method: 'get' + }) +} + +/** + * 查询人员子类型选项 + */ +export function getIndivSubTypeOptions() { + return request({ + url: '/dpc/enum/indivSubType', + method: 'get' + }) +} + +/** + * 查询性别选项 + */ +export function getGenderOptions() { + return request({ + url: '/dpc/enum/gender', + method: 'get' + }) +} + +/** + * 查询证件类型选项 + */ +export function getCertTypeOptions() { + return request({ + url: '/dpc/enum/certType', + method: 'get' + }) +} + +/** + * 查询关联关系选项 + */ +export function getRelationTypeOptions() { + return request({ + url: '/dpc/enum/relationType', + method: 'get' + }) +} + +/** + * 查询主体类型选项 + */ +export function getCorpTypeOptions() { + return request({ + url: '/dpc/enum/corpType', + method: 'get' + }) +} + +/** + * 查询企业性质选项 + */ +export function getCorpNatureOptions() { + return request({ + url: '/dpc/enum/corpNature', + method: 'get' + }) +} + +/** + * 查询中介类型选项 + */ +export function getIntermediaryTypeOptions() { + return request({ + url: '/dpc/enum/intermediaryType', + method: 'get' + }) +} + +/** + * 查询中介状态选项 + */ +export function getIntermediaryStatusOptions() { + return request({ + url: '/dpc/enum/intermediaryStatus', + method: 'get' + }) +} + +/** + * 查询数据来源选项 + */ +export function getDataSourceOptions() { + return request({ + url: '/dpc/enum/dataSource', + method: 'get' + }) +} diff --git a/ruoyi-ui/src/api/dpcIntermediary.js b/ruoyi-ui/src/api/dpcIntermediary.js index 30b3d89..8aa1eb2 100644 --- a/ruoyi-ui/src/api/dpcIntermediary.js +++ b/ruoyi-ui/src/api/dpcIntermediary.js @@ -26,6 +26,24 @@ export function addIntermediary(data) { }) } +// 新增个人中介黑名单 +export function addPersonIntermediary(data) { + return request({ + url: '/dpc/intermediary/person', + method: 'post', + data: data + }) +} + +// 新增机构中介黑名单 +export function addEntityIntermediary(data) { + return request({ + url: '/dpc/intermediary/entity', + method: 'post', + data: data + }) +} + // 修改中介黑名单 export function updateIntermediary(data) { return request({ @@ -35,6 +53,24 @@ export function updateIntermediary(data) { }) } +// 修改个人中介黑名单 +export function updatePersonIntermediary(data) { + return request({ + url: '/dpc/intermediary/person', + method: 'put', + data: data + }) +} + +// 修改机构中介黑名单 +export function updateEntityIntermediary(data) { + return request({ + url: '/dpc/intermediary/entity', + method: 'put', + data: data + }) +} + // 删除中介黑名单 export function delIntermediary(intermediaryIds) { return request({ @@ -43,16 +79,7 @@ export function delIntermediary(intermediaryIds) { }) } -// 导出中介黑名单 -export function exportIntermediary(query) { - return request({ - url: '/dpc/intermediary/export', - method: 'post', - params: query - }) -} - -// 下载导入模板 +// 下载导入模板(已废弃,保留以兼容旧代码) export function importTemplate() { return request({ url: '/dpc/intermediary/importTemplate', @@ -68,3 +95,37 @@ export function importData(data, updateSupport) { data: data }) } + +// 下载个人中介导入模板 +export function importPersonTemplate() { + return request({ + url: '/dpc/intermediary/importPersonTemplate', + method: 'post' + }) +} + +// 下载机构中介导入模板 +export function importEntityTemplate() { + return request({ + url: '/dpc/intermediary/importEntityTemplate', + method: 'post' + }) +} + +// 导入个人中介黑名单 +export function importPersonData(data, updateSupport) { + return request({ + url: '/dpc/intermediary/importPersonData?updateSupport=' + updateSupport, + method: 'post', + data: data + }) +} + +// 导入机构中介黑名单 +export function importEntityData(data, updateSupport) { + return request({ + url: '/dpc/intermediary/importEntityData?updateSupport=' + updateSupport, + method: 'post', + data: data + }) +} diff --git a/ruoyi-ui/src/views/dpcIntermediary/components/DataTable.vue b/ruoyi-ui/src/views/dpcIntermediary/components/DataTable.vue new file mode 100644 index 0000000..2f2d140 --- /dev/null +++ b/ruoyi-ui/src/views/dpcIntermediary/components/DataTable.vue @@ -0,0 +1,82 @@ + + + diff --git a/ruoyi-ui/src/views/dpcIntermediary/components/DetailDialog.vue b/ruoyi-ui/src/views/dpcIntermediary/components/DetailDialog.vue new file mode 100644 index 0000000..7726d70 --- /dev/null +++ b/ruoyi-ui/src/views/dpcIntermediary/components/DetailDialog.vue @@ -0,0 +1,79 @@ + + + diff --git a/ruoyi-ui/src/views/dpcIntermediary/components/EditDialog.vue b/ruoyi-ui/src/views/dpcIntermediary/components/EditDialog.vue new file mode 100644 index 0000000..34f7683 --- /dev/null +++ b/ruoyi-ui/src/views/dpcIntermediary/components/EditDialog.vue @@ -0,0 +1,639 @@ + + + + + diff --git a/ruoyi-ui/src/views/dpcIntermediary/components/ImportDialog.vue b/ruoyi-ui/src/views/dpcIntermediary/components/ImportDialog.vue new file mode 100644 index 0000000..6052d1d --- /dev/null +++ b/ruoyi-ui/src/views/dpcIntermediary/components/ImportDialog.vue @@ -0,0 +1,303 @@ + + + + + diff --git a/ruoyi-ui/src/views/dpcIntermediary/components/SearchForm.vue b/ruoyi-ui/src/views/dpcIntermediary/components/SearchForm.vue new file mode 100644 index 0000000..8a5c2f1 --- /dev/null +++ b/ruoyi-ui/src/views/dpcIntermediary/components/SearchForm.vue @@ -0,0 +1,65 @@ + + + diff --git a/ruoyi-ui/src/views/dpcIntermediary/index.vue b/ruoyi-ui/src/views/dpcIntermediary/index.vue index d4c722f..f713014 100644 --- a/ruoyi-ui/src/views/dpcIntermediary/index.vue +++ b/ruoyi-ui/src/views/dpcIntermediary/index.vue @@ -1,44 +1,13 @@