From 39c46937ea1c5b3e0dcbe6c060e5a34fd2e1a68e Mon Sep 17 00:00:00 2001
From: 18278715334 <18278715334@163.com>
Date: Fri, 19 Dec 2025 17:05:09 +0800
Subject: [PATCH] addui
---
internal/app/app.go | 4 +
.../finance_application_service_impl.go | 214 +-
.../ui_component_application_service.go | 686 +
.../product/ui_component_errors.go | 21 +
.../product/ui_component_file_service.go | 341 +
internal/container/container.go | 93 +
.../processors/ivyz/ivyz81nc_processor.go | 6 +-
.../finance/entities/recharge_record.go | 12 +
.../services/recharge_record_service.go | 36 +-
.../entities/component_report_cache.go | 34 -
.../entities/component_report_download.go | 68 +-
internal/domains/product/entities/product.go | 3 +
.../product/entities/product_ui_component.go | 36 +
.../domains/product/entities/ui_component.go | 39 +
.../component_report_repository_interface.go | 20 +-
.../product_ui_component_repository.go | 16 +
.../repositories/ui_component_repository.go | 17 +
.../gorm_component_report_repository.go | 130 +
.../gorm_product_ui_component_repository.go | 80 +
.../product/gorm_ui_component_repository.go | 129 +
.../storage/local_file_storage_service.go | 115 +
.../local_file_storage_service_impl.go | 110 +
.../http/handlers/file_download_handler.go | 92 +
.../http/handlers/ui_component_handler.go | 551 +
.../http/routes/product_routes.go | 37 +-
.../http/routes/ui_component_routes.go | 48 +
internal/shared/component_report/README.md | 204 +
.../example_json_generator.go | 286 +
internal/shared/component_report/handler.go | 1343 ++
.../shared/component_report/zip_generator.go | 265 +
resources/Pure Component/index.html | 110 +
resources/Pure Component/package.json | 35 +
resources/Pure Component/pnpm-lock.yaml | 3101 +++++
resources/Pure Component/postcss.config.js | 7 +
resources/Pure Component/public/example.json | 10278 ++++++++++++++
resources/Pure Component/src/App.vue | 8 +
resources/Pure Component/src/assets/base.css | 25 +
.../Pure Component/src/assets/colors.css | 54 +
.../src/assets/images/empty.svg | 75 +
.../images/public_security_record_icon.png | Bin 0 -> 11143 bytes
.../src/assets/images/report/ajgl.png | Bin 0 -> 11679 bytes
.../src/assets/images/report/ajlxfb.png | Bin 0 -> 3186 bytes
.../report/backgroundcheck_inquire_bg.png | Bin 0 -> 85548 bytes
.../report/backgroundcheck_report_bg.png | Bin 0 -> 194725 bytes
.../src/assets/images/report/bysj.png | Bin 0 -> 816 bytes
.../src/assets/images/report/dkxwfx.png | Bin 0 -> 4547 bytes
.../assets/images/report/dqfx_inquire_bg.jpg | Bin 0 -> 38402 bytes
.../assets/images/report/dqfx_report_bg.jpg | Bin 0 -> 38017 bytes
.../src/assets/images/report/dwtzls.png | Bin 0 -> 5778 bytes
.../src/assets/images/report/fqzgz.png | Bin 0 -> 5389 bytes
.../src/assets/images/report/fqzpf.png | Bin 0 -> 4889 bytes
.../src/assets/images/report/fsbq.png | Bin 0 -> 5663 bytes
.../src/assets/images/report/fx.png | Bin 0 -> 286 bytes
.../src/assets/images/report/fxbs.png | Bin 0 -> 5965 bytes
.../src/assets/images/report/fxgl.png | Bin 0 -> 5451 bytes
.../src/assets/images/report/fxmd.png | Bin 0 -> 5398 bytes
.../src/assets/images/report/fxzbxq.png | Bin 0 -> 4600 bytes
.../src/assets/images/report/fxzl.png | Bin 0 -> 5195 bytes
.../src/assets/images/report/fybgt.png | Bin 0 -> 5843 bytes
.../src/assets/images/report/gazdryhy.png | Bin 0 -> 6250 bytes
.../src/assets/images/report/gazdryhycp.png | Bin 0 -> 6406 bytes
.../src/assets/images/report/gfx.png | Bin 0 -> 504 bytes
.../src/assets/images/report/gl.png | Bin 0 -> 2827 bytes
.../src/assets/images/report/glfxjd.png | Bin 0 -> 4952 bytes
.../src/assets/images/report/glfxjd2.png | Bin 0 -> 6166 bytes
.../src/assets/images/report/glsfz.png | Bin 0 -> 619 bytes
.../src/assets/images/report/glsjh.png | Bin 0 -> 493 bytes
.../src/assets/images/report/glzdryhy2.png | Bin 0 -> 4528 bytes
.../assets/images/report/grdsj_inquire_bg.jpg | Bin 0 -> 21604 bytes
.../assets/images/report/grdsj_report_bg.jpg | Bin 0 -> 32466 bytes
.../src/assets/images/report/gsdfx.png | Bin 0 -> 4463 bytes
.../src/assets/images/report/hktj.png | Bin 0 -> 4951 bytes
.../src/assets/images/report/hkylfx.png | Bin 0 -> 5111 bytes
.../images/report/homeservice_inquire_bg.jpg | Bin 0 -> 28808 bytes
.../images/report/homeservice_report_bg.jpg | Bin 0 -> 41580 bytes
.../src/assets/images/report/j24gyfkqk.png | Bin 0 -> 5582 bytes
.../src/assets/images/report/jdpg.png | Bin 0 -> 5889 bytes
.../src/assets/images/report/jdpggl.png | Bin 0 -> 4139 bytes
.../src/assets/images/report/jgfx.png | Bin 0 -> 5541 bytes
.../src/assets/images/report/jgztxx.png | Bin 0 -> 3749 bytes
.../src/assets/images/report/jyyc.png | Bin 0 -> 4143 bytes
.../src/assets/images/report/khlxjdbx.png | Bin 0 -> 6525 bytes
.../src/assets/images/report/lsjdxw.png | Bin 0 -> 4335 bytes
.../src/assets/images/report/lyqk.png | Bin 0 -> 5465 bytes
.../src/assets/images/report/lyxxxq.png | Bin 0 -> 5872 bytes
.../images/report/marriage_inquire_bg.jpg | Bin 0 -> 20857 bytes
.../images/report/marriage_report_bg.jpg | Bin 0 -> 30414 bytes
.../src/assets/images/report/ms.png | Bin 0 -> 4884 bytes
.../src/assets/images/report/mzfxbz.png | Bin 0 -> 6615 bytes
.../src/assets/images/report/qsgg.png | Bin 0 -> 6748 bytes
.../src/assets/images/report/qspc.png | Bin 0 -> 7172 bytes
.../src/assets/images/report/rkpm.png | Bin 0 -> 1000 bytes
.../src/assets/images/report/rzls.png | Bin 0 -> 4151 bytes
.../src/assets/images/report/sagg.png | Bin 0 -> 3765 bytes
.../src/assets/images/report/sdszhycp.png | Bin 0 -> 4769 bytes
.../src/assets/images/report/sdszryhy.png | Bin 0 -> 3846 bytes
.../src/assets/images/report/sfxxhy.png | Bin 0 -> 7080 bytes
.../src/assets/images/report/sfz.png | Bin 0 -> 4046 bytes
.../src/assets/images/report/shjy.png | Bin 0 -> 4637 bytes
.../src/assets/images/report/sjh.png | Bin 0 -> 1317 bytes
.../src/assets/images/report/sjqsfx.png | Bin 0 -> 4771 bytes
.../images/report/slbg_inquire_icon.png | Bin 0 -> 366 bytes
.../src/assets/images/report/srbq.png | Bin 0 -> 1237 bytes
.../src/assets/images/report/srpg.png | Bin 0 -> 3178 bytes
.../src/assets/images/report/ssfxfx.png | Bin 0 -> 4278 bytes
.../src/assets/images/report/ssfxztgl.png | Bin 0 -> 5186 bytes
.../src/assets/images/report/sswf.png | Bin 0 -> 4867 bytes
.../src/assets/images/report/swfx.png | Bin 0 -> 5549 bytes
.../src/assets/images/report/sxaj.png | Bin 0 -> 9415 bytes
.../src/assets/images/report/sxxq.png | Bin 0 -> 5227 bytes
.../src/assets/images/report/title.png | Bin 0 -> 2609 bytes
.../assets/images/report/title_inquire_bg.png | Bin 0 -> 3589 bytes
.../images/report/title_inquire_bg_green.png | Bin 0 -> 3653 bytes
.../images/report/title_inquire_bg_red.png | Bin 0 -> 3658 bytes
.../src/assets/images/report/wmz.png | Bin 0 -> 656 bytes
.../src/assets/images/report/wxts_icon.png | Bin 0 -> 5568 bytes
.../src/assets/images/report/xgaj.png | Bin 0 -> 5563 bytes
.../src/assets/images/report/xl.png | Bin 0 -> 983 bytes
.../src/assets/images/report/xs.png | Bin 0 -> 7271 bytes
.../assets/images/report/xwqy_inquire_bg.jpg | Bin 0 -> 43556 bytes
.../assets/images/report/xwqy_report_bg.jpg | Bin 0 -> 57825 bytes
.../src/assets/images/report/xxlx.png | Bin 0 -> 926 bytes
.../src/assets/images/report/xxxs.png | Bin 0 -> 744 bytes
.../src/assets/images/report/xypf.png | Bin 0 -> 3735 bytes
.../src/assets/images/report/xypf2.png | Bin 0 -> 3850 bytes
.../src/assets/images/report/xz.png | Bin 0 -> 2952 bytes
.../src/assets/images/report/xzcf.png | Bin 0 -> 3802 bytes
.../src/assets/images/report/ycsjdjdbx.png | Bin 0 -> 7046 bytes
.../src/assets/images/report/yqfx.png | Bin 0 -> 4659 bytes
.../src/assets/images/report/yqfxgl.png | Bin 0 -> 3855 bytes
.../src/assets/images/report/yqsjfb.png | Bin 0 -> 6143 bytes
.../src/assets/images/report/yqxxxq.png | Bin 0 -> 3808 bytes
.../src/assets/images/report/yshc.png | Bin 0 -> 5930 bytes
.../src/assets/images/report/ywlxjdbx.png | Bin 0 -> 4560 bytes
.../src/assets/images/report/yyshy.png | Bin 0 -> 7855 bytes
.../src/assets/images/report/yzgz.png | Bin 0 -> 5171 bytes
.../src/assets/images/report/zfx.png | Bin 0 -> 499 bytes
.../src/assets/images/report/zk.png | Bin 0 -> 671 bytes
.../src/assets/images/report/zlfxpg.png | Bin 0 -> 6043 bytes
.../src/assets/images/report/zlfxpggl.png | Bin 0 -> 4015 bytes
.../src/assets/images/report/zlxw.png | Bin 0 -> 4492 bytes
.../src/assets/images/report/zq.png | Bin 0 -> 664 bytes
.../src/assets/images/report/zwsc.png | Bin 0 -> 11479 bytes
.../src/assets/images/report/zxaj.png | Bin 0 -> 4028 bytes
.../src/assets/images/report/zyjy.png | Bin 0 -> 2502 bytes
.../src/assets/images/report/zymc.png | Bin 0 -> 626 bytes
resources/Pure Component/src/assets/main.css | 15 +
.../Pure Component/src/assets/nprogress.css | 10 +
.../Pure Component/src/assets/vant-theme.css | 30 +
.../Pure Component/src/auto-imports.d.ts | 298 +
.../src/components/BaseReport.vue | 774 ++
.../src/components/GaugeChart.vue | 254 +
.../Pure Component/src/components/LEmpty.vue | 41 +
.../Pure Component/src/components/LRemark.vue | 92 +
.../Pure Component/src/components/LTable.vue | 80 +
.../Pure Component/src/components/LTitle.vue | 27 +
.../Pure Component/src/components/Remark.vue | 95 +
.../src/components/ShareReportButton.vue | 91 +
.../src/components/StyledTabs.vue | 44 +
.../src/components/TitleBanner.vue | 23 +
.../src/components/VerificationCard.vue | 180 +
.../src/composables/useRiskNotifier.js | 18 +
.../src/data/ivyz3p9m-dictionary.json | 6417 +++++++++
.../src/data/multiLoanHourlyDictionary.json | 11132 ++++++++++++++++
resources/Pure Component/src/main.js | 20 +
.../src/ui/CBehaviorRiskScan.vue | 747 ++
.../src/ui/CDWBG8B4D/CDWBG8B4D-PDF.vue | 1305 ++
.../components/ElementVerification.vue | 202 +
.../src/ui/CDWBG8B4D/components/Identity.vue | 367 +
.../components/LeasingRiskSection.vue | 492 +
.../components/LoanEvaluationSection.vue | 526 +
.../components/MultCourtInfoSection.vue | 521 +
.../components/OverdueRiskSection.vue | 494 +
.../CDWBG8B4D/components/ReportOverview.vue | 320 +
.../components/RiskSupervisionSection.vue | 176 +
.../ui/CDWBG8B4D/components/RiskWarning.vue | 409 +
.../components/RiskWarningSection.vue | 747 ++
.../CDWBG8B4D/components/RiskWarningTab.vue | 1147 ++
.../Pure Component/src/ui/CDWBG8B4D/index.vue | 112 +
.../ui/CDWBG8B4D/utils/intervalFormatter.js | 264 +
.../src/ui/CDWBG8B4D/utils/simpleSplitter.js | 157 +
.../ui/CFLXG0V4B/components/CaseDetail.vue | 171 +
.../components/StatisticsOverview.vue | 284 +
.../Pure Component/src/ui/CFLXG0V4B/index.vue | 451 +
.../src/ui/CFLXG0V4B/utils/lawsuitUtils.js | 302 +
resources/Pure Component/src/ui/CFLXG3D56.vue | 1007 ++
resources/Pure Component/src/ui/CFLXGDEA9.vue | 666 +
resources/Pure Component/src/ui/CIVYZ5733.vue | 120 +
resources/Pure Component/src/ui/CIVYZ81NC.vue | 106 +
resources/Pure Component/src/ui/CIVYZ9A2B.vue | 818 ++
resources/Pure Component/src/ui/CJRZQ0A03.vue | 1307 ++
resources/Pure Component/src/ui/CJRZQ4AA8.vue | 369 +
.../Pure Component/src/ui/CJRZQ5E9F/README.md | 246 +
.../ui/CJRZQ5E9F/components/CreditScores.vue | 579 +
.../components/InstitutionAnalysis.vue | 372 +
.../components/LoanBehaviorAnalysis.vue | 715 +
.../ui/CJRZQ5E9F/components/RiskAdvice.vue | 414 +
.../CJRZQ5E9F/components/RiskIndicators.vue | 638 +
.../ui/CJRZQ5E9F/components/RiskOverview.vue | 375 +
.../components/TimeTrendAnalysis.vue | 1466 ++
.../Pure Component/src/ui/CJRZQ5E9F/index.vue | 122 +
.../src/ui/CJRZQ5E9F/utils/simpleSplitter.js | 317 +
resources/Pure Component/src/ui/CJRZQ8203.vue | 908 ++
resources/Pure Component/src/ui/CQCXG7A2B.vue | 65 +
resources/Pure Component/src/ui/CQCXG9P1C.vue | 130 +
.../Pure Component/src/ui/CQYGL3F8E/README.md | 238 +
.../src/ui/CQYGL3F8E/components/Abnormal.vue | 273 +
.../CQYGL3F8E/components/FinancingHistory.vue | 265 +
.../ui/CQYGL3F8E/components/InvestHistory.vue | 337 +
.../ui/CQYGL3F8E/components/Investment.vue | 335 +
.../src/ui/CQYGL3F8E/components/Lawsuit.vue | 1715 +++
.../ui/CQYGL3F8E/components/Punishment.vue | 289 +
.../CQYGL3F8E/components/SeniorExecutive.vue | 307 +
.../CQYGL3F8E/components/TaxRisk/OwnTax.vue | 265 +
.../components/TaxRisk/TaxContravention.vue | 208 +
.../ui/CQYGL3F8E/components/TaxRisk/index.vue | 239 +
.../Pure Component/src/ui/CQYGL3F8E/index.vue | 167 +
.../src/ui/CQYGL3F8E/utils/simpleSplitter.js | 302 +
.../Pure Component/src/ui/DWBG6A2C/README.md | 178 +
.../components/AntiFraudInfoSection.vue | 527 +
.../ApplicationStatisticsSection.vue | 398 +
.../DWBG6A2C/components/BaseInfoSection.vue | 147 +
.../components/CourtRiskInfoSection.vue | 591 +
.../components/CreditDetailSection.vue | 300 +
.../components/LendingStatisticsSection.vue | 567 +
.../components/OverdueRecordSection.vue | 617 +
.../PerformanceStatisticsSection.vue | 522 +
.../components/RentalBehaviorSection.vue | 824 ++
.../DWBG6A2C/components/RiskListSection.vue | 407 +
.../DWBG6A2C/components/RiskPointSection.vue | 436 +
.../components/RiskSupervisionSection.vue | 384 +
.../components/SecurityInfoSection.vue | 427 +
.../components/StandLiveInfoSection.vue | 383 +
.../Pure Component/src/ui/DWBG6A2C/index.vue | 120 +
.../ui/DWBG6A2C/utils/intervalFormatter.js | 304 +
.../src/ui/DWBG6A2C/utils/simpleSplitter.js | 311 +
.../DWBG7F3A/components/CircleRiskSection.vue | 100 +
.../DWBG7F3A/components/FraudRiskSection.vue | 73 +
.../components/MultipleApplicationSection.vue | 519 +
.../components/MultipleDebtScoreSection.vue | 97 +
.../components/MultipleOverdueSection.vue | 396 +
.../Pure Component/src/ui/DWBG7F3A/index.vue | 136 +
.../src/ui/DWBG7F3A/utils/riskDataParser.js | 271 +
.../src/ui/FLXG7E8F/components/CaseDetail.vue | 404 +
.../components/StatisticsOverview.vue | 285 +
.../Pure Component/src/ui/FLXG7E8F/index.vue | 457 +
.../src/ui/FLXG7E8F/utils/lawsuitUtils.js | 303 +
resources/Pure Component/src/ui/IVYZ3P9M.vue | 696 +
resources/Pure Component/src/ui/IVYZ8I9J.vue | 219 +
.../Pure Component/src/ui/JRZQ09J8/README.md | 165 +
.../ui/JRZQ09J8/components/IncomeAnalysis.vue | 300 +
.../JRZQ09J8/components/IncomeLevelGuide.vue | 445 +
.../ui/JRZQ09J8/components/IncomeOverview.vue | 223 +
.../Pure Component/src/ui/JRZQ09J8/index.vue | 524 +
.../src/ui/JRZQ09J8/utils/incomeUtils.js | 414 +
.../JRZQ3C9R/components/BasicInfoSection.vue | 200 +
.../components/InsufficientRatioSection.vue | 107 +
.../components/LoanAndOverdueSection.vue | 322 +
.../components/QueryOverviewSection.vue | 252 +
.../JRZQ3C9R/components/QueryTrendSection.vue | 136 +
.../components/RepayFailTrendSection.vue | 104 +
.../components/RepayOrgAndLevelSection.vue | 232 +
.../components/RepaySuccessTrendSection.vue | 104 +
.../JRZQ3C9R/components/RepayTrendSection.vue | 124 +
.../ui/JRZQ3C9R/components/ScoreSection.vue | 71 +
.../Pure Component/src/ui/JRZQ3C9R/index.vue | 105 +
.../src/ui/JRZQ3C9R/utils/dataParser.js | 160 +
.../Pure Component/src/ui/JRZQ4B6C/README.md | 129 +
.../components/InstitutionStatusSection.vue | 164 +
.../components/OverdueInfoSection.vue | 125 +
.../components/PerformanceInfoSection.vue | 158 +
.../ui/JRZQ4B6C/components/ProbeOverview.vue | 119 +
.../src/ui/JRZQ4B6C/components/Remark.vue | 83 +
.../Pure Component/src/ui/JRZQ4B6C/index.vue | 136 +
.../src/ui/JRZQ4B6C/utils/probeUtils.js | 288 +
.../components/ApplicationCountSection.vue | 245 +
.../components/ApplicationTotalSection.vue | 113 +
.../components/BankInstitutionSection.vue | 181 +
.../ui/JRZQ6F2A/components/BankOrgSection.vue | 181 +
.../components/InstitutionTotalSection.vue | 114 +
.../components/NBankInstitutionSection.vue | 181 +
.../JRZQ6F2A/components/NBankOrgSection.vue | 181 +
.../ProductTypeDistributionSection.vue | 179 +
.../RecentIntensiveApplicationSection.vue | 102 +
.../JRZQ6F2A/components/SummaryApplyStats.vue | 131 +
.../Pure Component/src/ui/JRZQ6F2A/index.vue | 142 +
.../src/ui/JRZQ6F2A/utils/dataParser.js | 365 +
.../components/ApplyReportSection.vue | 100 +
.../components/BehaviorReportSection.vue | 338 +
.../components/CurrentReportSection.vue | 114 +
.../Pure Component/src/ui/JRZQ7E8F/index.vue | 140 +
.../src/ui/JRZQ7E8F/utils/formatUtils.js | 138 +
.../components/ApplyReportSection.vue | 459 +
.../components/BehaviorReportSection.vue | 1004 ++
.../components/BigDataReportSection.vue | 456 +
.../components/CurrentReportSection.vue | 456 +
.../Pure Component/src/ui/JRZQ7F1A/index.vue | 140 +
.../src/ui/JRZQ7F1A/utils/formatUtils.js | 138 +
.../src/ui/JRZQ7F1A/utils/simpleSplitter.js | 206 +
resources/Pure Component/src/ui/JRZQ8A2D.vue | 822 ++
.../Pure Component/src/ui/JRZQ8B3C/README.md | 149 +
.../Pure Component/src/ui/JRZQ8B3C/index.vue | 377 +
.../Pure Component/src/ui/YYSY7D3E/index.vue | 162 +
.../Pure Component/src/ui/YYSY8B1C/index.vue | 403 +
resources/Pure Component/src/views/Report.vue | 104 +
resources/Pure Component/tailwind.config.js | 95 +
resources/Pure Component/vite.config.js | 66 +
307 files changed, 87686 insertions(+), 129 deletions(-)
create mode 100644 internal/application/product/ui_component_application_service.go
create mode 100644 internal/application/product/ui_component_errors.go
create mode 100644 internal/application/product/ui_component_file_service.go
delete mode 100644 internal/domains/product/entities/component_report_cache.go
create mode 100644 internal/domains/product/entities/product_ui_component.go
create mode 100644 internal/domains/product/entities/ui_component.go
create mode 100644 internal/domains/product/repositories/product_ui_component_repository.go
create mode 100644 internal/domains/product/repositories/ui_component_repository.go
create mode 100644 internal/infrastructure/database/repositories/product/gorm_component_report_repository.go
create mode 100644 internal/infrastructure/database/repositories/product/gorm_product_ui_component_repository.go
create mode 100644 internal/infrastructure/database/repositories/product/gorm_ui_component_repository.go
create mode 100644 internal/infrastructure/external/storage/local_file_storage_service.go
create mode 100644 internal/infrastructure/external/storage/local_file_storage_service_impl.go
create mode 100644 internal/infrastructure/http/handlers/file_download_handler.go
create mode 100644 internal/infrastructure/http/handlers/ui_component_handler.go
create mode 100644 internal/infrastructure/http/routes/ui_component_routes.go
create mode 100644 internal/shared/component_report/README.md
create mode 100644 internal/shared/component_report/example_json_generator.go
create mode 100644 internal/shared/component_report/handler.go
create mode 100644 internal/shared/component_report/zip_generator.go
create mode 100644 resources/Pure Component/index.html
create mode 100644 resources/Pure Component/package.json
create mode 100644 resources/Pure Component/pnpm-lock.yaml
create mode 100644 resources/Pure Component/postcss.config.js
create mode 100644 resources/Pure Component/public/example.json
create mode 100644 resources/Pure Component/src/App.vue
create mode 100644 resources/Pure Component/src/assets/base.css
create mode 100644 resources/Pure Component/src/assets/colors.css
create mode 100644 resources/Pure Component/src/assets/images/empty.svg
create mode 100644 resources/Pure Component/src/assets/images/public_security_record_icon.png
create mode 100644 resources/Pure Component/src/assets/images/report/ajgl.png
create mode 100644 resources/Pure Component/src/assets/images/report/ajlxfb.png
create mode 100644 resources/Pure Component/src/assets/images/report/backgroundcheck_inquire_bg.png
create mode 100644 resources/Pure Component/src/assets/images/report/backgroundcheck_report_bg.png
create mode 100644 resources/Pure Component/src/assets/images/report/bysj.png
create mode 100644 resources/Pure Component/src/assets/images/report/dkxwfx.png
create mode 100644 resources/Pure Component/src/assets/images/report/dqfx_inquire_bg.jpg
create mode 100644 resources/Pure Component/src/assets/images/report/dqfx_report_bg.jpg
create mode 100644 resources/Pure Component/src/assets/images/report/dwtzls.png
create mode 100644 resources/Pure Component/src/assets/images/report/fqzgz.png
create mode 100644 resources/Pure Component/src/assets/images/report/fqzpf.png
create mode 100644 resources/Pure Component/src/assets/images/report/fsbq.png
create mode 100644 resources/Pure Component/src/assets/images/report/fx.png
create mode 100644 resources/Pure Component/src/assets/images/report/fxbs.png
create mode 100644 resources/Pure Component/src/assets/images/report/fxgl.png
create mode 100644 resources/Pure Component/src/assets/images/report/fxmd.png
create mode 100644 resources/Pure Component/src/assets/images/report/fxzbxq.png
create mode 100644 resources/Pure Component/src/assets/images/report/fxzl.png
create mode 100644 resources/Pure Component/src/assets/images/report/fybgt.png
create mode 100644 resources/Pure Component/src/assets/images/report/gazdryhy.png
create mode 100644 resources/Pure Component/src/assets/images/report/gazdryhycp.png
create mode 100644 resources/Pure Component/src/assets/images/report/gfx.png
create mode 100644 resources/Pure Component/src/assets/images/report/gl.png
create mode 100644 resources/Pure Component/src/assets/images/report/glfxjd.png
create mode 100644 resources/Pure Component/src/assets/images/report/glfxjd2.png
create mode 100644 resources/Pure Component/src/assets/images/report/glsfz.png
create mode 100644 resources/Pure Component/src/assets/images/report/glsjh.png
create mode 100644 resources/Pure Component/src/assets/images/report/glzdryhy2.png
create mode 100644 resources/Pure Component/src/assets/images/report/grdsj_inquire_bg.jpg
create mode 100644 resources/Pure Component/src/assets/images/report/grdsj_report_bg.jpg
create mode 100644 resources/Pure Component/src/assets/images/report/gsdfx.png
create mode 100644 resources/Pure Component/src/assets/images/report/hktj.png
create mode 100644 resources/Pure Component/src/assets/images/report/hkylfx.png
create mode 100644 resources/Pure Component/src/assets/images/report/homeservice_inquire_bg.jpg
create mode 100644 resources/Pure Component/src/assets/images/report/homeservice_report_bg.jpg
create mode 100644 resources/Pure Component/src/assets/images/report/j24gyfkqk.png
create mode 100644 resources/Pure Component/src/assets/images/report/jdpg.png
create mode 100644 resources/Pure Component/src/assets/images/report/jdpggl.png
create mode 100644 resources/Pure Component/src/assets/images/report/jgfx.png
create mode 100644 resources/Pure Component/src/assets/images/report/jgztxx.png
create mode 100644 resources/Pure Component/src/assets/images/report/jyyc.png
create mode 100644 resources/Pure Component/src/assets/images/report/khlxjdbx.png
create mode 100644 resources/Pure Component/src/assets/images/report/lsjdxw.png
create mode 100644 resources/Pure Component/src/assets/images/report/lyqk.png
create mode 100644 resources/Pure Component/src/assets/images/report/lyxxxq.png
create mode 100644 resources/Pure Component/src/assets/images/report/marriage_inquire_bg.jpg
create mode 100644 resources/Pure Component/src/assets/images/report/marriage_report_bg.jpg
create mode 100644 resources/Pure Component/src/assets/images/report/ms.png
create mode 100644 resources/Pure Component/src/assets/images/report/mzfxbz.png
create mode 100644 resources/Pure Component/src/assets/images/report/qsgg.png
create mode 100644 resources/Pure Component/src/assets/images/report/qspc.png
create mode 100644 resources/Pure Component/src/assets/images/report/rkpm.png
create mode 100644 resources/Pure Component/src/assets/images/report/rzls.png
create mode 100644 resources/Pure Component/src/assets/images/report/sagg.png
create mode 100644 resources/Pure Component/src/assets/images/report/sdszhycp.png
create mode 100644 resources/Pure Component/src/assets/images/report/sdszryhy.png
create mode 100644 resources/Pure Component/src/assets/images/report/sfxxhy.png
create mode 100644 resources/Pure Component/src/assets/images/report/sfz.png
create mode 100644 resources/Pure Component/src/assets/images/report/shjy.png
create mode 100644 resources/Pure Component/src/assets/images/report/sjh.png
create mode 100644 resources/Pure Component/src/assets/images/report/sjqsfx.png
create mode 100644 resources/Pure Component/src/assets/images/report/slbg_inquire_icon.png
create mode 100644 resources/Pure Component/src/assets/images/report/srbq.png
create mode 100644 resources/Pure Component/src/assets/images/report/srpg.png
create mode 100644 resources/Pure Component/src/assets/images/report/ssfxfx.png
create mode 100644 resources/Pure Component/src/assets/images/report/ssfxztgl.png
create mode 100644 resources/Pure Component/src/assets/images/report/sswf.png
create mode 100644 resources/Pure Component/src/assets/images/report/swfx.png
create mode 100644 resources/Pure Component/src/assets/images/report/sxaj.png
create mode 100644 resources/Pure Component/src/assets/images/report/sxxq.png
create mode 100644 resources/Pure Component/src/assets/images/report/title.png
create mode 100644 resources/Pure Component/src/assets/images/report/title_inquire_bg.png
create mode 100644 resources/Pure Component/src/assets/images/report/title_inquire_bg_green.png
create mode 100644 resources/Pure Component/src/assets/images/report/title_inquire_bg_red.png
create mode 100644 resources/Pure Component/src/assets/images/report/wmz.png
create mode 100644 resources/Pure Component/src/assets/images/report/wxts_icon.png
create mode 100644 resources/Pure Component/src/assets/images/report/xgaj.png
create mode 100644 resources/Pure Component/src/assets/images/report/xl.png
create mode 100644 resources/Pure Component/src/assets/images/report/xs.png
create mode 100644 resources/Pure Component/src/assets/images/report/xwqy_inquire_bg.jpg
create mode 100644 resources/Pure Component/src/assets/images/report/xwqy_report_bg.jpg
create mode 100644 resources/Pure Component/src/assets/images/report/xxlx.png
create mode 100644 resources/Pure Component/src/assets/images/report/xxxs.png
create mode 100644 resources/Pure Component/src/assets/images/report/xypf.png
create mode 100644 resources/Pure Component/src/assets/images/report/xypf2.png
create mode 100644 resources/Pure Component/src/assets/images/report/xz.png
create mode 100644 resources/Pure Component/src/assets/images/report/xzcf.png
create mode 100644 resources/Pure Component/src/assets/images/report/ycsjdjdbx.png
create mode 100644 resources/Pure Component/src/assets/images/report/yqfx.png
create mode 100644 resources/Pure Component/src/assets/images/report/yqfxgl.png
create mode 100644 resources/Pure Component/src/assets/images/report/yqsjfb.png
create mode 100644 resources/Pure Component/src/assets/images/report/yqxxxq.png
create mode 100644 resources/Pure Component/src/assets/images/report/yshc.png
create mode 100644 resources/Pure Component/src/assets/images/report/ywlxjdbx.png
create mode 100644 resources/Pure Component/src/assets/images/report/yyshy.png
create mode 100644 resources/Pure Component/src/assets/images/report/yzgz.png
create mode 100644 resources/Pure Component/src/assets/images/report/zfx.png
create mode 100644 resources/Pure Component/src/assets/images/report/zk.png
create mode 100644 resources/Pure Component/src/assets/images/report/zlfxpg.png
create mode 100644 resources/Pure Component/src/assets/images/report/zlfxpggl.png
create mode 100644 resources/Pure Component/src/assets/images/report/zlxw.png
create mode 100644 resources/Pure Component/src/assets/images/report/zq.png
create mode 100644 resources/Pure Component/src/assets/images/report/zwsc.png
create mode 100644 resources/Pure Component/src/assets/images/report/zxaj.png
create mode 100644 resources/Pure Component/src/assets/images/report/zyjy.png
create mode 100644 resources/Pure Component/src/assets/images/report/zymc.png
create mode 100644 resources/Pure Component/src/assets/main.css
create mode 100644 resources/Pure Component/src/assets/nprogress.css
create mode 100644 resources/Pure Component/src/assets/vant-theme.css
create mode 100644 resources/Pure Component/src/auto-imports.d.ts
create mode 100644 resources/Pure Component/src/components/BaseReport.vue
create mode 100644 resources/Pure Component/src/components/GaugeChart.vue
create mode 100644 resources/Pure Component/src/components/LEmpty.vue
create mode 100644 resources/Pure Component/src/components/LRemark.vue
create mode 100644 resources/Pure Component/src/components/LTable.vue
create mode 100644 resources/Pure Component/src/components/LTitle.vue
create mode 100644 resources/Pure Component/src/components/Remark.vue
create mode 100644 resources/Pure Component/src/components/ShareReportButton.vue
create mode 100644 resources/Pure Component/src/components/StyledTabs.vue
create mode 100644 resources/Pure Component/src/components/TitleBanner.vue
create mode 100644 resources/Pure Component/src/components/VerificationCard.vue
create mode 100644 resources/Pure Component/src/composables/useRiskNotifier.js
create mode 100644 resources/Pure Component/src/data/ivyz3p9m-dictionary.json
create mode 100644 resources/Pure Component/src/data/multiLoanHourlyDictionary.json
create mode 100644 resources/Pure Component/src/main.js
create mode 100644 resources/Pure Component/src/ui/CBehaviorRiskScan.vue
create mode 100644 resources/Pure Component/src/ui/CDWBG8B4D/CDWBG8B4D-PDF.vue
create mode 100644 resources/Pure Component/src/ui/CDWBG8B4D/components/ElementVerification.vue
create mode 100644 resources/Pure Component/src/ui/CDWBG8B4D/components/Identity.vue
create mode 100644 resources/Pure Component/src/ui/CDWBG8B4D/components/LeasingRiskSection.vue
create mode 100644 resources/Pure Component/src/ui/CDWBG8B4D/components/LoanEvaluationSection.vue
create mode 100644 resources/Pure Component/src/ui/CDWBG8B4D/components/MultCourtInfoSection.vue
create mode 100644 resources/Pure Component/src/ui/CDWBG8B4D/components/OverdueRiskSection.vue
create mode 100644 resources/Pure Component/src/ui/CDWBG8B4D/components/ReportOverview.vue
create mode 100644 resources/Pure Component/src/ui/CDWBG8B4D/components/RiskSupervisionSection.vue
create mode 100644 resources/Pure Component/src/ui/CDWBG8B4D/components/RiskWarning.vue
create mode 100644 resources/Pure Component/src/ui/CDWBG8B4D/components/RiskWarningSection.vue
create mode 100644 resources/Pure Component/src/ui/CDWBG8B4D/components/RiskWarningTab.vue
create mode 100644 resources/Pure Component/src/ui/CDWBG8B4D/index.vue
create mode 100644 resources/Pure Component/src/ui/CDWBG8B4D/utils/intervalFormatter.js
create mode 100644 resources/Pure Component/src/ui/CDWBG8B4D/utils/simpleSplitter.js
create mode 100644 resources/Pure Component/src/ui/CFLXG0V4B/components/CaseDetail.vue
create mode 100644 resources/Pure Component/src/ui/CFLXG0V4B/components/StatisticsOverview.vue
create mode 100644 resources/Pure Component/src/ui/CFLXG0V4B/index.vue
create mode 100644 resources/Pure Component/src/ui/CFLXG0V4B/utils/lawsuitUtils.js
create mode 100644 resources/Pure Component/src/ui/CFLXG3D56.vue
create mode 100644 resources/Pure Component/src/ui/CFLXGDEA9.vue
create mode 100644 resources/Pure Component/src/ui/CIVYZ5733.vue
create mode 100644 resources/Pure Component/src/ui/CIVYZ81NC.vue
create mode 100644 resources/Pure Component/src/ui/CIVYZ9A2B.vue
create mode 100644 resources/Pure Component/src/ui/CJRZQ0A03.vue
create mode 100644 resources/Pure Component/src/ui/CJRZQ4AA8.vue
create mode 100644 resources/Pure Component/src/ui/CJRZQ5E9F/README.md
create mode 100644 resources/Pure Component/src/ui/CJRZQ5E9F/components/CreditScores.vue
create mode 100644 resources/Pure Component/src/ui/CJRZQ5E9F/components/InstitutionAnalysis.vue
create mode 100644 resources/Pure Component/src/ui/CJRZQ5E9F/components/LoanBehaviorAnalysis.vue
create mode 100644 resources/Pure Component/src/ui/CJRZQ5E9F/components/RiskAdvice.vue
create mode 100644 resources/Pure Component/src/ui/CJRZQ5E9F/components/RiskIndicators.vue
create mode 100644 resources/Pure Component/src/ui/CJRZQ5E9F/components/RiskOverview.vue
create mode 100644 resources/Pure Component/src/ui/CJRZQ5E9F/components/TimeTrendAnalysis.vue
create mode 100644 resources/Pure Component/src/ui/CJRZQ5E9F/index.vue
create mode 100644 resources/Pure Component/src/ui/CJRZQ5E9F/utils/simpleSplitter.js
create mode 100644 resources/Pure Component/src/ui/CJRZQ8203.vue
create mode 100644 resources/Pure Component/src/ui/CQCXG7A2B.vue
create mode 100644 resources/Pure Component/src/ui/CQCXG9P1C.vue
create mode 100644 resources/Pure Component/src/ui/CQYGL3F8E/README.md
create mode 100644 resources/Pure Component/src/ui/CQYGL3F8E/components/Abnormal.vue
create mode 100644 resources/Pure Component/src/ui/CQYGL3F8E/components/FinancingHistory.vue
create mode 100644 resources/Pure Component/src/ui/CQYGL3F8E/components/InvestHistory.vue
create mode 100644 resources/Pure Component/src/ui/CQYGL3F8E/components/Investment.vue
create mode 100644 resources/Pure Component/src/ui/CQYGL3F8E/components/Lawsuit.vue
create mode 100644 resources/Pure Component/src/ui/CQYGL3F8E/components/Punishment.vue
create mode 100644 resources/Pure Component/src/ui/CQYGL3F8E/components/SeniorExecutive.vue
create mode 100644 resources/Pure Component/src/ui/CQYGL3F8E/components/TaxRisk/OwnTax.vue
create mode 100644 resources/Pure Component/src/ui/CQYGL3F8E/components/TaxRisk/TaxContravention.vue
create mode 100644 resources/Pure Component/src/ui/CQYGL3F8E/components/TaxRisk/index.vue
create mode 100644 resources/Pure Component/src/ui/CQYGL3F8E/index.vue
create mode 100644 resources/Pure Component/src/ui/CQYGL3F8E/utils/simpleSplitter.js
create mode 100644 resources/Pure Component/src/ui/DWBG6A2C/README.md
create mode 100644 resources/Pure Component/src/ui/DWBG6A2C/components/AntiFraudInfoSection.vue
create mode 100644 resources/Pure Component/src/ui/DWBG6A2C/components/ApplicationStatisticsSection.vue
create mode 100644 resources/Pure Component/src/ui/DWBG6A2C/components/BaseInfoSection.vue
create mode 100644 resources/Pure Component/src/ui/DWBG6A2C/components/CourtRiskInfoSection.vue
create mode 100644 resources/Pure Component/src/ui/DWBG6A2C/components/CreditDetailSection.vue
create mode 100644 resources/Pure Component/src/ui/DWBG6A2C/components/LendingStatisticsSection.vue
create mode 100644 resources/Pure Component/src/ui/DWBG6A2C/components/OverdueRecordSection.vue
create mode 100644 resources/Pure Component/src/ui/DWBG6A2C/components/PerformanceStatisticsSection.vue
create mode 100644 resources/Pure Component/src/ui/DWBG6A2C/components/RentalBehaviorSection.vue
create mode 100644 resources/Pure Component/src/ui/DWBG6A2C/components/RiskListSection.vue
create mode 100644 resources/Pure Component/src/ui/DWBG6A2C/components/RiskPointSection.vue
create mode 100644 resources/Pure Component/src/ui/DWBG6A2C/components/RiskSupervisionSection.vue
create mode 100644 resources/Pure Component/src/ui/DWBG6A2C/components/SecurityInfoSection.vue
create mode 100644 resources/Pure Component/src/ui/DWBG6A2C/components/StandLiveInfoSection.vue
create mode 100644 resources/Pure Component/src/ui/DWBG6A2C/index.vue
create mode 100644 resources/Pure Component/src/ui/DWBG6A2C/utils/intervalFormatter.js
create mode 100644 resources/Pure Component/src/ui/DWBG6A2C/utils/simpleSplitter.js
create mode 100644 resources/Pure Component/src/ui/DWBG7F3A/components/CircleRiskSection.vue
create mode 100644 resources/Pure Component/src/ui/DWBG7F3A/components/FraudRiskSection.vue
create mode 100644 resources/Pure Component/src/ui/DWBG7F3A/components/MultipleApplicationSection.vue
create mode 100644 resources/Pure Component/src/ui/DWBG7F3A/components/MultipleDebtScoreSection.vue
create mode 100644 resources/Pure Component/src/ui/DWBG7F3A/components/MultipleOverdueSection.vue
create mode 100644 resources/Pure Component/src/ui/DWBG7F3A/index.vue
create mode 100644 resources/Pure Component/src/ui/DWBG7F3A/utils/riskDataParser.js
create mode 100644 resources/Pure Component/src/ui/FLXG7E8F/components/CaseDetail.vue
create mode 100644 resources/Pure Component/src/ui/FLXG7E8F/components/StatisticsOverview.vue
create mode 100644 resources/Pure Component/src/ui/FLXG7E8F/index.vue
create mode 100644 resources/Pure Component/src/ui/FLXG7E8F/utils/lawsuitUtils.js
create mode 100644 resources/Pure Component/src/ui/IVYZ3P9M.vue
create mode 100644 resources/Pure Component/src/ui/IVYZ8I9J.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ09J8/README.md
create mode 100644 resources/Pure Component/src/ui/JRZQ09J8/components/IncomeAnalysis.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ09J8/components/IncomeLevelGuide.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ09J8/components/IncomeOverview.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ09J8/index.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ09J8/utils/incomeUtils.js
create mode 100644 resources/Pure Component/src/ui/JRZQ3C9R/components/BasicInfoSection.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ3C9R/components/InsufficientRatioSection.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ3C9R/components/LoanAndOverdueSection.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ3C9R/components/QueryOverviewSection.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ3C9R/components/QueryTrendSection.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ3C9R/components/RepayFailTrendSection.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ3C9R/components/RepayOrgAndLevelSection.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ3C9R/components/RepaySuccessTrendSection.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ3C9R/components/RepayTrendSection.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ3C9R/components/ScoreSection.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ3C9R/index.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ3C9R/utils/dataParser.js
create mode 100644 resources/Pure Component/src/ui/JRZQ4B6C/README.md
create mode 100644 resources/Pure Component/src/ui/JRZQ4B6C/components/InstitutionStatusSection.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ4B6C/components/OverdueInfoSection.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ4B6C/components/PerformanceInfoSection.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ4B6C/components/ProbeOverview.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ4B6C/components/Remark.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ4B6C/index.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ4B6C/utils/probeUtils.js
create mode 100644 resources/Pure Component/src/ui/JRZQ6F2A/components/ApplicationCountSection.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ6F2A/components/ApplicationTotalSection.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ6F2A/components/BankInstitutionSection.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ6F2A/components/BankOrgSection.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ6F2A/components/InstitutionTotalSection.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ6F2A/components/NBankInstitutionSection.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ6F2A/components/NBankOrgSection.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ6F2A/components/ProductTypeDistributionSection.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ6F2A/components/RecentIntensiveApplicationSection.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ6F2A/components/SummaryApplyStats.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ6F2A/index.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ6F2A/utils/dataParser.js
create mode 100644 resources/Pure Component/src/ui/JRZQ7E8F/components/ApplyReportSection.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ7E8F/components/BehaviorReportSection.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ7E8F/components/CurrentReportSection.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ7E8F/index.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ7E8F/utils/formatUtils.js
create mode 100644 resources/Pure Component/src/ui/JRZQ7F1A/components/ApplyReportSection.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ7F1A/components/BehaviorReportSection.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ7F1A/components/BigDataReportSection.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ7F1A/components/CurrentReportSection.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ7F1A/index.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ7F1A/utils/formatUtils.js
create mode 100644 resources/Pure Component/src/ui/JRZQ7F1A/utils/simpleSplitter.js
create mode 100644 resources/Pure Component/src/ui/JRZQ8A2D.vue
create mode 100644 resources/Pure Component/src/ui/JRZQ8B3C/README.md
create mode 100644 resources/Pure Component/src/ui/JRZQ8B3C/index.vue
create mode 100644 resources/Pure Component/src/ui/YYSY7D3E/index.vue
create mode 100644 resources/Pure Component/src/ui/YYSY8B1C/index.vue
create mode 100644 resources/Pure Component/src/views/Report.vue
create mode 100644 resources/Pure Component/tailwind.config.js
create mode 100644 resources/Pure Component/vite.config.js
diff --git a/internal/app/app.go b/internal/app/app.go
index 65b7022..1768e47 100644
--- a/internal/app/app.go
+++ b/internal/app/app.go
@@ -239,6 +239,9 @@ func (a *Application) autoMigrate(db *gorm.DB) error {
&productEntities.Subscription{},
&productEntities.ProductDocumentation{},
&productEntities.ProductApiConfig{},
+ &productEntities.ComponentReportDownload{},
+ &productEntities.UIComponent{},
+ &productEntities.ProductUIComponent{},
// 文章域
&articleEntities.Article{},
@@ -281,6 +284,7 @@ func createLogger(cfg *config.Config) (*zap.Logger, error) {
if cfg.Logger.Format == "" {
config.Encoding = "json"
}
+
if cfg.Logger.Output == "" {
config.OutputPaths = []string{"stdout"}
}
diff --git a/internal/application/finance/finance_application_service_impl.go b/internal/application/finance/finance_application_service_impl.go
index ad6f50a..1745d05 100644
--- a/internal/application/finance/finance_application_service_impl.go
+++ b/internal/application/finance/finance_application_service_impl.go
@@ -3,11 +3,8 @@ package finance
import (
"context"
"fmt"
- "github.com/shopspring/decimal"
- "github.com/smartwalle/alipay/v3"
- "github.com/wechatpay-apiv3/wechatpay-go/services/payments"
- "go.uber.org/zap"
"net/http"
+ "strings"
"time"
"tyapi-server/internal/application/finance/dto/commands"
"tyapi-server/internal/application/finance/dto/queries"
@@ -16,11 +13,17 @@ import (
finance_entities "tyapi-server/internal/domains/finance/entities"
finance_repositories "tyapi-server/internal/domains/finance/repositories"
finance_services "tyapi-server/internal/domains/finance/services"
+ product_repositories "tyapi-server/internal/domains/product/repositories"
user_repositories "tyapi-server/internal/domains/user/repositories"
"tyapi-server/internal/shared/database"
"tyapi-server/internal/shared/export"
"tyapi-server/internal/shared/interfaces"
"tyapi-server/internal/shared/payment"
+
+ "github.com/shopspring/decimal"
+ "github.com/smartwalle/alipay/v3"
+ "github.com/wechatpay-apiv3/wechatpay-go/services/payments"
+ "go.uber.org/zap"
)
// FinanceApplicationServiceImpl 财务应用服务实现
@@ -33,6 +36,7 @@ type FinanceApplicationServiceImpl struct {
alipayOrderRepo finance_repositories.AlipayOrderRepository
wechatOrderRepo finance_repositories.WechatOrderRepository
rechargeRecordRepo finance_repositories.RechargeRecordRepository
+ componentReportRepo product_repositories.ComponentReportRepository
userRepo user_repositories.UserRepository
txManager *database.TransactionManager
exportManager *export.ExportManager
@@ -50,6 +54,7 @@ func NewFinanceApplicationService(
alipayOrderRepo finance_repositories.AlipayOrderRepository,
wechatOrderRepo finance_repositories.WechatOrderRepository,
rechargeRecordRepo finance_repositories.RechargeRecordRepository,
+ componentReportRepo product_repositories.ComponentReportRepository,
userRepo user_repositories.UserRepository,
txManager *database.TransactionManager,
logger *zap.Logger,
@@ -65,6 +70,7 @@ func NewFinanceApplicationService(
alipayOrderRepo: alipayOrderRepo,
wechatOrderRepo: wechatOrderRepo,
rechargeRecordRepo: rechargeRecordRepo,
+ componentReportRepo: componentReportRepo,
userRepo: userRepo,
txManager: txManager,
exportManager: exportManager,
@@ -815,6 +821,8 @@ func (s *FinanceApplicationServiceImpl) batchGetCompanyNamesForRechargeRecords(c
// HandleAlipayCallback 处理支付宝回调
func (s *FinanceApplicationServiceImpl) HandleAlipayCallback(ctx context.Context, r *http.Request) error {
+ s.logger.Info("========== 开始处理支付宝支付回调 ==========")
+
// 解析并验证支付宝回调通知
notification, err := s.aliPayClient.HandleAliPaymentNotification(r)
if err != nil {
@@ -834,14 +842,25 @@ func (s *FinanceApplicationServiceImpl) HandleAlipayCallback(ctx context.Context
// 检查交易状态
if !s.aliPayClient.IsAlipayPaymentSuccess(notification) {
- s.logger.Warn("支付宝交易未成功",
+ s.logger.Warn("支付宝交易未成功,跳过处理",
zap.String("out_trade_no", notification.OutTradeNo),
zap.String("trade_status", string(notification.TradeStatus)),
)
return nil // 不返回错误,因为这是正常的业务状态
}
- // 使用公共方法处理支付成功逻辑
+ s.logger.Info("支付宝支付成功,开始处理业务逻辑",
+ zap.String("out_trade_no", notification.OutTradeNo),
+ zap.String("trade_no", notification.TradeNo),
+ )
+
+ // 先检查是否是组件报告下载的支付订单
+ s.logger.Info("步骤1: 检查是否是组件报告下载订单",
+ zap.String("out_trade_no", notification.OutTradeNo),
+ )
+
+ // 使用公共方法处理支付成功逻辑(包括更新充值记录状态)
+ // 无论是组件报告下载订单还是普通充值订单,都需要更新充值记录状态
err = s.processAlipayPaymentSuccess(ctx, notification.OutTradeNo, notification.TradeNo, notification.TotalAmount, notification.BuyerId, notification.SellerId)
if err != nil {
s.logger.Error("处理支付宝支付成功失败",
@@ -851,6 +870,7 @@ func (s *FinanceApplicationServiceImpl) HandleAlipayCallback(ctx context.Context
return err
}
+ s.logger.Info("========== 支付宝支付回调处理完成 ==========")
return nil
}
@@ -868,6 +888,7 @@ func (s *FinanceApplicationServiceImpl) processAlipayPaymentSuccess(ctx context.
// 直接调用充值记录服务处理支付成功逻辑
// 该服务内部会处理所有必要的检查、事务和更新操作
+ // 如果是组件报告下载订单,服务会自动跳过钱包余额增加
err = s.rechargeRecordService.HandleAlipayPaymentSuccess(ctx, outTradeNo, amount, tradeNo)
if err != nil {
s.logger.Error("处理支付宝支付成功失败",
@@ -877,6 +898,9 @@ func (s *FinanceApplicationServiceImpl) processAlipayPaymentSuccess(ctx context.
return err
}
+ // 检查并更新组件报告下载记录状态(如果存在)
+ s.updateComponentReportDownloadStatus(ctx, outTradeNo)
+
s.logger.Info("支付宝支付成功处理完成",
zap.String("out_trade_no", outTradeNo),
zap.String("trade_no", tradeNo),
@@ -1398,6 +1422,8 @@ func (s *FinanceApplicationServiceImpl) updateWechatOrderStatus(ctx context.Cont
// HandleWechatPayCallback 处理微信支付回调
func (s *FinanceApplicationServiceImpl) HandleWechatPayCallback(ctx context.Context, r *http.Request) error {
+ s.logger.Info("========== 开始处理微信支付回调 ==========")
+
if s.wechatPayService == nil {
s.logger.Error("微信支付服务未初始化")
return fmt.Errorf("微信支付服务未初始化")
@@ -1439,14 +1465,42 @@ func (s *FinanceApplicationServiceImpl) HandleWechatPayCallback(ctx context.Cont
// 检查交易状态
if tradeState != payment.TradeStateSuccess {
- s.logger.Warn("微信支付交易未成功",
+ s.logger.Warn("微信支付交易未成功,跳过处理",
zap.String("out_trade_no", outTradeNo),
zap.String("trade_state", tradeState),
)
return nil // 不返回错误,因为这是正常的业务状态
}
- // 处理支付成功逻辑
+ s.logger.Info("微信支付成功,开始处理业务逻辑",
+ zap.String("out_trade_no", outTradeNo),
+ zap.String("transaction_id", transactionID),
+ )
+
+ // 先检查是否是组件报告下载的支付订单
+ s.logger.Info("步骤1: 检查是否是组件报告下载订单",
+ zap.String("out_trade_no", outTradeNo),
+ )
+
+ // 检查组件报告下载记录
+ download, err := s.componentReportRepo.GetDownloadByPaymentOrderID(ctx, outTradeNo)
+ if err == nil && download != nil {
+ s.logger.Info("步骤2: 发现组件报告下载订单,直接更新下载记录状态",
+ zap.String("out_trade_no", outTradeNo),
+ zap.String("download_id", download.ID),
+ zap.String("product_id", download.ProductID),
+ zap.String("current_status", download.PaymentStatus),
+ )
+ s.updateComponentReportDownloadStatus(ctx, outTradeNo)
+ s.logger.Info("========== 组件报告下载订单处理完成 ==========")
+ return nil
+ }
+
+ s.logger.Info("步骤3: 不是组件报告下载订单,按充值流程处理",
+ zap.String("out_trade_no", outTradeNo),
+ )
+
+ // 处理支付成功逻辑(充值流程)
err = s.processWechatPaymentSuccess(ctx, outTradeNo, transactionID, totalAmount)
if err != nil {
s.logger.Error("处理微信支付成功失败",
@@ -1458,6 +1512,7 @@ func (s *FinanceApplicationServiceImpl) HandleWechatPayCallback(ctx context.Cont
return err
}
+ s.logger.Info("========== 微信支付回调处理完成 ==========")
return nil
}
@@ -1491,6 +1546,15 @@ func (s *FinanceApplicationServiceImpl) processWechatPaymentSuccess(ctx context.
return fmt.Errorf("查找充值记录失败: %w", err)
}
+ s.logger.Info("步骤4: 检查充值记录备注,判断是否为组件报告下载订单",
+ zap.String("out_trade_no", outTradeNo),
+ zap.String("recharge_id", rechargeRecord.ID),
+ zap.String("notes", rechargeRecord.Notes),
+ )
+
+ // 检查是否是组件报告下载订单(通过备注判断)
+ isComponentReportOrder := strings.Contains(rechargeRecord.Notes, "购买") && strings.Contains(rechargeRecord.Notes, "报告示例")
+
// 检查订单和充值记录状态,如果都已成功则跳过(只记录一次日志)
if wechatOrder.Status == finance_entities.WechatOrderStatusSuccess && rechargeRecord.Status == finance_entities.RechargeStatusSuccess {
s.logger.Info("微信支付订单已处理成功,跳过重复处理",
@@ -1498,7 +1562,12 @@ func (s *FinanceApplicationServiceImpl) processWechatPaymentSuccess(ctx context.
zap.String("transaction_id", transactionID),
zap.String("order_id", wechatOrder.ID),
zap.String("recharge_id", rechargeRecord.ID),
+ zap.Bool("is_component_report", isComponentReportOrder),
)
+ // 如果是组件报告下载订单,确保更新下载记录状态
+ if isComponentReportOrder {
+ s.updateComponentReportDownloadStatus(ctx, outTradeNo)
+ }
return nil
}
@@ -1538,9 +1607,8 @@ func (s *FinanceApplicationServiceImpl) processWechatPaymentSuccess(ctx context.
return err
}
- // 更新充值记录状态为成功
- rechargeRecord.MarkSuccess()
- err = s.rechargeRecordRepo.Update(txCtx, *rechargeRecord)
+ // 更新充值记录状态为成功(使用UpdateStatus方法直接更新状态字段)
+ err = s.rechargeRecordRepo.UpdateStatus(txCtx, rechargeRecord.ID, finance_entities.RechargeStatusSuccess)
if err != nil {
s.logger.Error("更新充值记录状态失败",
zap.String("out_trade_no", outTradeNo),
@@ -1570,17 +1638,33 @@ func (s *FinanceApplicationServiceImpl) processWechatPaymentSuccess(ctx context.
)
}
- // 充值到钱包(包含赠送金额)
- totalRechargeAmount := amount.Add(bonusAmount)
- err = s.walletService.Recharge(txCtx, rechargeRecord.UserID, totalRechargeAmount)
- if err != nil {
- s.logger.Error("充值到钱包失败",
+ // 检查是否是组件报告下载订单(通过备注判断)
+ isComponentReportOrder := strings.Contains(rechargeRecord.Notes, "购买") && strings.Contains(rechargeRecord.Notes, "报告示例")
+
+ if isComponentReportOrder {
+ s.logger.Info("步骤5: 检测到组件报告下载订单,不增加钱包余额",
zap.String("out_trade_no", outTradeNo),
- zap.String("user_id", rechargeRecord.UserID),
- zap.String("total_amount", totalRechargeAmount.String()),
- zap.Error(err),
+ zap.String("recharge_id", rechargeRecord.ID),
+ zap.String("notes", rechargeRecord.Notes),
)
- return err
+ // 组件报告下载订单不增加钱包余额,只更新订单和充值记录状态
+ } else {
+ s.logger.Info("步骤5: 普通充值订单,增加钱包余额",
+ zap.String("out_trade_no", outTradeNo),
+ zap.String("recharge_id", rechargeRecord.ID),
+ )
+ // 充值到钱包(包含赠送金额)
+ totalRechargeAmount := amount.Add(bonusAmount)
+ err = s.walletService.Recharge(txCtx, rechargeRecord.UserID, totalRechargeAmount)
+ if err != nil {
+ s.logger.Error("充值到钱包失败",
+ zap.String("out_trade_no", outTradeNo),
+ zap.String("user_id", rechargeRecord.UserID),
+ zap.String("total_amount", totalRechargeAmount.String()),
+ zap.Error(err),
+ )
+ return err
+ }
}
return nil
@@ -1596,17 +1680,107 @@ func (s *FinanceApplicationServiceImpl) processWechatPaymentSuccess(ctx context.
return err
}
+ // 如果是组件报告下载订单,更新下载记录状态
+ if isComponentReportOrder {
+ s.logger.Info("步骤6: 更新组件报告下载记录状态",
+ zap.String("out_trade_no", outTradeNo),
+ )
+ s.updateComponentReportDownloadStatus(ctx, outTradeNo)
+ }
+
s.logger.Info("微信支付成功处理完成",
zap.String("out_trade_no", outTradeNo),
zap.String("transaction_id", transactionID),
zap.String("amount", amount.String()),
zap.String("bonus_amount", bonusAmount.String()),
zap.String("user_id", rechargeRecord.UserID),
+ zap.Bool("is_component_report", isComponentReportOrder),
)
return nil
}
+// updateComponentReportDownloadStatus 更新组件报告下载记录状态
+func (s *FinanceApplicationServiceImpl) updateComponentReportDownloadStatus(ctx context.Context, outTradeNo string) {
+ s.logger.Info("========== 开始更新组件报告下载记录状态 ==========",
+ zap.String("out_trade_no", outTradeNo),
+ )
+
+ if s.componentReportRepo == nil {
+ s.logger.Warn("组件报告下载Repository未初始化,跳过更新")
+ return
+ }
+
+ // 根据支付订单号查找组件报告下载记录
+ download, err := s.componentReportRepo.GetDownloadByPaymentOrderID(ctx, outTradeNo)
+ if err != nil {
+ s.logger.Info("未找到组件报告下载记录,可能不是组件报告下载订单",
+ zap.String("out_trade_no", outTradeNo),
+ zap.Error(err),
+ )
+ return
+ }
+
+ if download == nil {
+ s.logger.Info("组件报告下载记录为空,跳过更新",
+ zap.String("out_trade_no", outTradeNo),
+ )
+ return
+ }
+
+ s.logger.Info("步骤1: 找到组件报告下载记录",
+ zap.String("out_trade_no", outTradeNo),
+ zap.String("download_id", download.ID),
+ zap.String("product_id", download.ProductID),
+ zap.String("current_status", download.PaymentStatus),
+ )
+
+ // 如果已经是成功状态,跳过
+ if download.PaymentStatus == "success" {
+ s.logger.Info("组件报告下载记录已是成功状态,跳过更新",
+ zap.String("out_trade_no", outTradeNo),
+ zap.String("download_id", download.ID),
+ )
+ return
+ }
+
+ s.logger.Info("步骤2: 更新支付状态为成功",
+ zap.String("out_trade_no", outTradeNo),
+ zap.String("download_id", download.ID),
+ )
+
+ // 更新支付状态为成功
+ download.PaymentStatus = "success"
+
+ // 设置过期时间(30天后)
+ expiresAt := time.Now().Add(30 * 24 * time.Hour)
+ download.ExpiresAt = &expiresAt
+
+ s.logger.Info("步骤3: 保存更新后的下载记录",
+ zap.String("out_trade_no", outTradeNo),
+ zap.String("download_id", download.ID),
+ zap.String("expires_at", expiresAt.Format("2006-01-02 15:04:05")),
+ )
+
+ // 更新记录
+ err = s.componentReportRepo.UpdateDownload(ctx, download)
+ if err != nil {
+ s.logger.Error("更新组件报告下载记录状态失败",
+ zap.String("out_trade_no", outTradeNo),
+ zap.String("download_id", download.ID),
+ zap.Error(err),
+ )
+ return
+ }
+
+ s.logger.Info("========== 组件报告下载记录状态更新成功 ==========",
+ zap.String("out_trade_no", outTradeNo),
+ zap.String("download_id", download.ID),
+ zap.String("product_id", download.ProductID),
+ zap.String("payment_status", download.PaymentStatus),
+ )
+}
+
// HandleWechatRefundCallback 处理微信退款回调
func (s *FinanceApplicationServiceImpl) HandleWechatRefundCallback(ctx context.Context, r *http.Request) error {
if s.wechatPayService == nil {
diff --git a/internal/application/product/ui_component_application_service.go b/internal/application/product/ui_component_application_service.go
new file mode 100644
index 0000000..30bfd03
--- /dev/null
+++ b/internal/application/product/ui_component_application_service.go
@@ -0,0 +1,686 @@
+package product
+
+import (
+ "context"
+ "fmt"
+ "io"
+ "mime/multipart"
+ "path/filepath"
+ "strings"
+
+ "tyapi-server/internal/domains/product/entities"
+ "tyapi-server/internal/domains/product/repositories"
+
+ "github.com/shopspring/decimal"
+)
+
+// UIComponentApplicationService UI组件应用服务接口
+type UIComponentApplicationService interface {
+ // 基本CRUD操作
+ CreateUIComponent(ctx context.Context, req CreateUIComponentRequest) (entities.UIComponent, error)
+ CreateUIComponentWithFile(ctx context.Context, req CreateUIComponentRequest, file *multipart.FileHeader) (entities.UIComponent, error)
+ CreateUIComponentWithFiles(ctx context.Context, req CreateUIComponentRequest, files []*multipart.FileHeader) (entities.UIComponent, error)
+ CreateUIComponentWithFilesAndPaths(ctx context.Context, req CreateUIComponentRequest, files []*multipart.FileHeader, paths []string) (entities.UIComponent, error)
+ GetUIComponentByID(ctx context.Context, id string) (*entities.UIComponent, error)
+ GetUIComponentByCode(ctx context.Context, code string) (*entities.UIComponent, error)
+ UpdateUIComponent(ctx context.Context, req UpdateUIComponentRequest) error
+ DeleteUIComponent(ctx context.Context, id string) error
+ ListUIComponents(ctx context.Context, req ListUIComponentsRequest) (ListUIComponentsResponse, error)
+
+ // 文件操作
+ UploadUIComponentFile(ctx context.Context, id string, file *multipart.FileHeader) (string, error)
+ UploadAndExtractUIComponentFile(ctx context.Context, id string, file *multipart.FileHeader) error
+ DownloadUIComponentFile(ctx context.Context, id string) (string, error)
+ GetUIComponentFolderContent(ctx context.Context, id string) ([]FileInfo, error)
+ DeleteUIComponentFolder(ctx context.Context, id string) error
+
+ // 产品关联操作
+ AssociateUIComponentToProduct(ctx context.Context, req AssociateUIComponentRequest) error
+ GetProductUIComponents(ctx context.Context, productID string) ([]entities.ProductUIComponent, error)
+ RemoveUIComponentFromProduct(ctx context.Context, productID, componentID string) error
+}
+
+// CreateUIComponentRequest 创建UI组件请求
+type CreateUIComponentRequest struct {
+ ComponentCode string `json:"component_code" binding:"required"`
+ ComponentName string `json:"component_name" binding:"required"`
+ Description string `json:"description"`
+ Version string `json:"version"`
+ IsActive bool `json:"is_active"`
+ SortOrder int `json:"sort_order"`
+}
+
+// UpdateUIComponentRequest 更新UI组件请求
+type UpdateUIComponentRequest struct {
+ ID string `json:"id" binding:"required"`
+ ComponentCode string `json:"component_code"`
+ ComponentName string `json:"component_name"`
+ Description string `json:"description"`
+ Version string `json:"version"`
+ IsActive *bool `json:"is_active"`
+ SortOrder *int `json:"sort_order"`
+}
+
+// ListUIComponentsRequest 获取UI组件列表请求
+type ListUIComponentsRequest struct {
+ Page int `form:"page,default=1"`
+ PageSize int `form:"page_size,default=10"`
+ Keyword string `form:"keyword"`
+ IsActive *bool `form:"is_active"`
+ SortBy string `form:"sort_by,default=sort_order"`
+ SortOrder string `form:"sort_order,default=asc"`
+}
+
+// ListUIComponentsResponse 获取UI组件列表响应
+type ListUIComponentsResponse struct {
+ Components []entities.UIComponent `json:"components"`
+ Total int64 `json:"total"`
+ Page int `json:"page"`
+ PageSize int `json:"page_size"`
+}
+
+// AssociateUIComponentRequest 关联UI组件到产品请求
+type AssociateUIComponentRequest struct {
+ ProductID string `json:"product_id" binding:"required"`
+ UIComponentID string `json:"ui_component_id" binding:"required"`
+ Price float64 `json:"price" binding:"required,min=0"`
+ IsEnabled bool `json:"is_enabled"`
+}
+
+// UIComponentApplicationServiceImpl UI组件应用服务实现
+type UIComponentApplicationServiceImpl struct {
+ uiComponentRepo repositories.UIComponentRepository
+ productUIComponentRepo repositories.ProductUIComponentRepository
+ fileStorageService FileStorageService
+ fileService UIComponentFileService
+}
+
+// FileStorageService 文件存储服务接口
+type FileStorageService interface {
+ StoreFile(ctx context.Context, file io.Reader, filename string) (string, error)
+ GetFileURL(ctx context.Context, filePath string) (string, error)
+ DeleteFile(ctx context.Context, filePath string) error
+}
+
+// NewUIComponentApplicationService 创建UI组件应用服务
+func NewUIComponentApplicationService(
+ uiComponentRepo repositories.UIComponentRepository,
+ productUIComponentRepo repositories.ProductUIComponentRepository,
+ fileStorageService FileStorageService,
+ fileService UIComponentFileService,
+) UIComponentApplicationService {
+ return &UIComponentApplicationServiceImpl{
+ uiComponentRepo: uiComponentRepo,
+ productUIComponentRepo: productUIComponentRepo,
+ fileStorageService: fileStorageService,
+ fileService: fileService,
+ }
+}
+
+// CreateUIComponent 创建UI组件
+func (s *UIComponentApplicationServiceImpl) CreateUIComponent(ctx context.Context, req CreateUIComponentRequest) (entities.UIComponent, error) {
+ // 检查编码是否已存在
+ existing, _ := s.uiComponentRepo.GetByCode(ctx, req.ComponentCode)
+ if existing != nil {
+ return entities.UIComponent{}, ErrComponentCodeAlreadyExists
+ }
+
+ component := entities.UIComponent{
+ ComponentCode: req.ComponentCode,
+ ComponentName: req.ComponentName,
+ Description: req.Description,
+ Version: req.Version,
+ IsActive: req.IsActive,
+ SortOrder: req.SortOrder,
+ }
+
+ return s.uiComponentRepo.Create(ctx, component)
+}
+
+// CreateUIComponentWithFile 创建UI组件并上传文件
+func (s *UIComponentApplicationServiceImpl) CreateUIComponentWithFile(ctx context.Context, req CreateUIComponentRequest, file *multipart.FileHeader) (entities.UIComponent, error) {
+ // 检查编码是否已存在
+ existing, _ := s.uiComponentRepo.GetByCode(ctx, req.ComponentCode)
+ if existing != nil {
+ return entities.UIComponent{}, ErrComponentCodeAlreadyExists
+ }
+
+ // 创建组件
+ component := entities.UIComponent{
+ ComponentCode: req.ComponentCode,
+ ComponentName: req.ComponentName,
+ Description: req.Description,
+ Version: req.Version,
+ IsActive: req.IsActive,
+ SortOrder: req.SortOrder,
+ }
+
+ createdComponent, err := s.uiComponentRepo.Create(ctx, component)
+ if err != nil {
+ return entities.UIComponent{}, err
+ }
+
+ // 如果有文件,则上传并处理文件
+ if file != nil {
+ // 打开上传的文件
+ src, err := file.Open()
+ if err != nil {
+ // 删除已创建的组件记录
+ _ = s.uiComponentRepo.Delete(ctx, createdComponent.ID)
+ return entities.UIComponent{}, fmt.Errorf("打开上传文件失败: %w", err)
+ }
+ defer src.Close()
+
+ // 上传并解压文件
+ if err := s.fileService.UploadAndExtract(ctx, createdComponent.ID, createdComponent.ComponentCode, src, file.Filename); err != nil {
+ // 删除已创建的组件记录
+ _ = s.uiComponentRepo.Delete(ctx, createdComponent.ID)
+ return entities.UIComponent{}, err
+ }
+
+ // 获取文件类型
+ fileType := strings.ToLower(filepath.Ext(file.Filename))
+
+ // 更新组件信息
+ folderPath := "resources/Pure Component/src/ui"
+ createdComponent.FolderPath = &folderPath
+ createdComponent.FileType = &fileType
+
+ // 仅对ZIP文件设置已解压标记
+ if fileType == ".zip" {
+ createdComponent.IsExtracted = true
+ }
+
+ // 更新组件信息
+ err = s.uiComponentRepo.Update(ctx, createdComponent)
+ if err != nil {
+ // 尝试删除已创建的组件记录
+ _ = s.uiComponentRepo.Delete(ctx, createdComponent.ID)
+ return entities.UIComponent{}, err
+ }
+
+ return createdComponent, nil
+ }
+
+ return createdComponent, nil
+}
+
+// CreateUIComponentWithFiles 创建UI组件并上传多个文件
+func (s *UIComponentApplicationServiceImpl) CreateUIComponentWithFiles(ctx context.Context, req CreateUIComponentRequest, files []*multipart.FileHeader) (entities.UIComponent, error) {
+ // 检查编码是否已存在
+ existing, _ := s.uiComponentRepo.GetByCode(ctx, req.ComponentCode)
+ if existing != nil {
+ return entities.UIComponent{}, ErrComponentCodeAlreadyExists
+ }
+
+ // 创建组件
+ component := entities.UIComponent{
+ ComponentCode: req.ComponentCode,
+ ComponentName: req.ComponentName,
+ Description: req.Description,
+ Version: req.Version,
+ IsActive: req.IsActive,
+ SortOrder: req.SortOrder,
+ }
+
+ createdComponent, err := s.uiComponentRepo.Create(ctx, component)
+ if err != nil {
+ return entities.UIComponent{}, err
+ }
+
+ // 如果有文件,则上传并处理文件
+ if len(files) > 0 {
+ // 处理每个文件
+ var extractedFiles []string
+ for _, fileHeader := range files {
+ // 打开上传的文件
+ src, err := fileHeader.Open()
+ if err != nil {
+ // 删除已创建的组件记录
+ _ = s.uiComponentRepo.Delete(ctx, createdComponent.ID)
+ return entities.UIComponent{}, fmt.Errorf("打开上传文件失败: %w", err)
+ }
+
+ // 上传并解压文件
+ if err := s.fileService.UploadAndExtract(ctx, createdComponent.ID, createdComponent.ComponentCode, src, fileHeader.Filename); err != nil {
+ src.Close()
+ // 删除已创建的组件记录
+ _ = s.uiComponentRepo.Delete(ctx, createdComponent.ID)
+ return entities.UIComponent{}, err
+ }
+ src.Close()
+
+ // 记录已处理的文件,用于日志
+ extractedFiles = append(extractedFiles, fileHeader.Filename)
+ }
+
+ // 更新组件信息
+ folderPath := "resources/Pure Component/src/ui"
+ createdComponent.FolderPath = &folderPath
+
+ // 检查是否有ZIP文件
+ hasZipFile := false
+ for _, fileHeader := range files {
+ if strings.HasSuffix(strings.ToLower(fileHeader.Filename), ".zip") {
+ hasZipFile = true
+ break
+ }
+ }
+
+ // 如果有ZIP文件,则标记为已解压
+ if hasZipFile {
+ createdComponent.IsExtracted = true
+ }
+
+ // 更新组件信息
+ err = s.uiComponentRepo.Update(ctx, createdComponent)
+ if err != nil {
+ // 尝试删除已创建的组件记录
+ _ = s.uiComponentRepo.Delete(ctx, createdComponent.ID)
+ return entities.UIComponent{}, err
+ }
+ }
+
+ return createdComponent, nil
+}
+
+// CreateUIComponentWithFilesAndPaths 创建UI组件并上传带路径的文件
+func (s *UIComponentApplicationServiceImpl) CreateUIComponentWithFilesAndPaths(ctx context.Context, req CreateUIComponentRequest, files []*multipart.FileHeader, paths []string) (entities.UIComponent, error) {
+ // 检查编码是否已存在
+ existing, _ := s.uiComponentRepo.GetByCode(ctx, req.ComponentCode)
+ if existing != nil {
+ return entities.UIComponent{}, ErrComponentCodeAlreadyExists
+ }
+
+ // 创建组件
+ component := entities.UIComponent{
+ ComponentCode: req.ComponentCode,
+ ComponentName: req.ComponentName,
+ Description: req.Description,
+ Version: req.Version,
+ IsActive: req.IsActive,
+ SortOrder: req.SortOrder,
+ }
+
+ createdComponent, err := s.uiComponentRepo.Create(ctx, component)
+ if err != nil {
+ return entities.UIComponent{}, err
+ }
+
+ // 如果有文件,则上传并处理文件
+ if len(files) > 0 {
+ // 打开所有文件
+ var readers []io.Reader
+ var filenames []string
+ var filePaths []string
+
+ for i, fileHeader := range files {
+ // 打开上传的文件
+ src, err := fileHeader.Open()
+ if err != nil {
+ // 关闭已打开的文件
+ for _, r := range readers {
+ if closer, ok := r.(io.Closer); ok {
+ closer.Close()
+ }
+ }
+ // 删除已创建的组件记录
+ _ = s.uiComponentRepo.Delete(ctx, createdComponent.ID)
+ return entities.UIComponent{}, fmt.Errorf("打开上传文件失败: %w", err)
+ }
+
+ readers = append(readers, src)
+ filenames = append(filenames, fileHeader.Filename)
+
+ // 确定文件路径
+ var path string
+ if i < len(paths) && paths[i] != "" {
+ path = paths[i]
+ } else {
+ path = fileHeader.Filename
+ }
+ filePaths = append(filePaths, path)
+ }
+
+ // 使用新的批量上传方法
+ if err := s.fileService.UploadMultipleFiles(ctx, createdComponent.ID, createdComponent.ComponentCode, readers, filenames, filePaths); err != nil {
+ // 关闭已打开的文件
+ for _, r := range readers {
+ if closer, ok := r.(io.Closer); ok {
+ closer.Close()
+ }
+ }
+ // 删除已创建的组件记录
+ _ = s.uiComponentRepo.Delete(ctx, createdComponent.ID)
+ return entities.UIComponent{}, err
+ }
+
+ // 关闭所有文件
+ for _, r := range readers {
+ if closer, ok := r.(io.Closer); ok {
+ closer.Close()
+ }
+ }
+
+ // 更新组件信息
+ folderPath := "resources/Pure Component/src/ui"
+ createdComponent.FolderPath = &folderPath
+
+ // 检查是否有ZIP文件
+ hasZipFile := false
+ for _, fileHeader := range files {
+ if strings.HasSuffix(strings.ToLower(fileHeader.Filename), ".zip") {
+ hasZipFile = true
+ break
+ }
+ }
+
+ // 如果有ZIP文件,则标记为已解压
+ if hasZipFile {
+ createdComponent.IsExtracted = true
+ }
+
+ // 更新组件信息
+ err = s.uiComponentRepo.Update(ctx, createdComponent)
+ if err != nil {
+ // 尝试删除已创建的组件记录
+ _ = s.uiComponentRepo.Delete(ctx, createdComponent.ID)
+ return entities.UIComponent{}, err
+ }
+ }
+
+ return createdComponent, nil
+}
+
+// GetUIComponentByID 根据ID获取UI组件
+func (s *UIComponentApplicationServiceImpl) GetUIComponentByID(ctx context.Context, id string) (*entities.UIComponent, error) {
+ return s.uiComponentRepo.GetByID(ctx, id)
+}
+
+// GetUIComponentByCode 根据编码获取UI组件
+func (s *UIComponentApplicationServiceImpl) GetUIComponentByCode(ctx context.Context, code string) (*entities.UIComponent, error) {
+ return s.uiComponentRepo.GetByCode(ctx, code)
+}
+
+// UpdateUIComponent 更新UI组件
+func (s *UIComponentApplicationServiceImpl) UpdateUIComponent(ctx context.Context, req UpdateUIComponentRequest) error {
+ component, err := s.uiComponentRepo.GetByID(ctx, req.ID)
+ if err != nil {
+ return err
+ }
+ if component == nil {
+ return ErrComponentNotFound
+ }
+
+ // 如果更新编码,检查是否与其他组件冲突
+ if req.ComponentCode != "" && req.ComponentCode != component.ComponentCode {
+ existing, _ := s.uiComponentRepo.GetByCode(ctx, req.ComponentCode)
+ if existing != nil && existing.ID != req.ID {
+ return ErrComponentCodeAlreadyExists
+ }
+ component.ComponentCode = req.ComponentCode
+ }
+
+ if req.ComponentName != "" {
+ component.ComponentName = req.ComponentName
+ }
+ if req.Description != "" {
+ component.Description = req.Description
+ }
+ if req.Version != "" {
+ component.Version = req.Version
+ }
+ if req.IsActive != nil {
+ component.IsActive = *req.IsActive
+ }
+ if req.SortOrder != nil {
+ component.SortOrder = *req.SortOrder
+ }
+
+ return s.uiComponentRepo.Update(ctx, *component)
+}
+
+// DeleteUIComponent 删除UI组件
+func (s *UIComponentApplicationServiceImpl) DeleteUIComponent(ctx context.Context, id string) error {
+ component, err := s.uiComponentRepo.GetByID(ctx, id)
+ if err != nil {
+ return err
+ }
+ if component == nil {
+ return ErrComponentNotFound
+ }
+
+ // 删除关联的文件
+ if component.FilePath != nil {
+ _ = s.fileStorageService.DeleteFile(ctx, *component.FilePath)
+ }
+
+ return s.uiComponentRepo.Delete(ctx, id)
+}
+
+// ListUIComponents 获取UI组件列表
+func (s *UIComponentApplicationServiceImpl) ListUIComponents(ctx context.Context, req ListUIComponentsRequest) (ListUIComponentsResponse, error) {
+ filters := make(map[string]interface{})
+
+ if req.Keyword != "" {
+ filters["keyword"] = req.Keyword
+ }
+ if req.IsActive != nil {
+ filters["is_active"] = *req.IsActive
+ }
+ filters["page"] = req.Page
+ filters["page_size"] = req.PageSize
+ filters["sort_by"] = req.SortBy
+ filters["sort_order"] = req.SortOrder
+
+ components, total, err := s.uiComponentRepo.List(ctx, filters)
+ if err != nil {
+ return ListUIComponentsResponse{}, err
+ }
+
+ return ListUIComponentsResponse{
+ Components: components,
+ Total: total,
+ Page: req.Page,
+ PageSize: req.PageSize,
+ }, nil
+}
+
+// UploadUIComponentFile 上传UI组件文件
+func (s *UIComponentApplicationServiceImpl) UploadUIComponentFile(ctx context.Context, id string, file *multipart.FileHeader) (string, error) {
+ component, err := s.uiComponentRepo.GetByID(ctx, id)
+ if err != nil {
+ return "", err
+ }
+ if component == nil {
+ return "", ErrComponentNotFound
+ }
+
+ // 检查文件大小(100MB)
+ if file.Size > 100*1024*1024 {
+ return "", ErrInvalidFileType // 复用此错误表示文件太大
+ }
+
+ // 打开上传的文件
+ src, err := file.Open()
+ if err != nil {
+ return "", err
+ }
+ defer src.Close()
+
+ // 生成文件路径
+ filePath := filepath.Join("ui-components", id+"_"+file.Filename)
+
+ // 存储文件
+ storedPath, err := s.fileStorageService.StoreFile(ctx, src, filePath)
+ if err != nil {
+ return "", err
+ }
+
+ // 删除旧文件
+ if component.FilePath != nil {
+ _ = s.fileStorageService.DeleteFile(ctx, *component.FilePath)
+ }
+
+ // 获取文件类型
+ fileType := strings.ToLower(filepath.Ext(file.Filename))
+
+ // 更新组件信息
+ component.FilePath = &storedPath
+ component.FileSize = &file.Size
+ component.FileType = &fileType
+ if err := s.uiComponentRepo.Update(ctx, *component); err != nil {
+ // 如果更新失败,尝试删除已上传的文件
+ _ = s.fileStorageService.DeleteFile(ctx, storedPath)
+ return "", err
+ }
+
+ return storedPath, nil
+}
+
+// DownloadUIComponentFile 下载UI组件文件
+func (s *UIComponentApplicationServiceImpl) DownloadUIComponentFile(ctx context.Context, id string) (string, error) {
+ component, err := s.uiComponentRepo.GetByID(ctx, id)
+ if err != nil {
+ return "", err
+ }
+ if component == nil {
+ return "", ErrComponentNotFound
+ }
+
+ if component.FilePath == nil {
+ return "", ErrComponentFileNotFound
+ }
+
+ return s.fileStorageService.GetFileURL(ctx, *component.FilePath)
+}
+
+// AssociateUIComponentToProduct 关联UI组件到产品
+func (s *UIComponentApplicationServiceImpl) AssociateUIComponentToProduct(ctx context.Context, req AssociateUIComponentRequest) error {
+ // 检查组件是否存在
+ component, err := s.uiComponentRepo.GetByID(ctx, req.UIComponentID)
+ if err != nil {
+ return err
+ }
+ if component == nil {
+ return ErrComponentNotFound
+ }
+
+ // 创建关联
+ relation := entities.ProductUIComponent{
+ ProductID: req.ProductID,
+ UIComponentID: req.UIComponentID,
+ Price: decimal.NewFromFloat(req.Price),
+ IsEnabled: req.IsEnabled,
+ }
+
+ _, err = s.productUIComponentRepo.Create(ctx, relation)
+ return err
+}
+
+// GetProductUIComponents 获取产品的UI组件列表
+func (s *UIComponentApplicationServiceImpl) GetProductUIComponents(ctx context.Context, productID string) ([]entities.ProductUIComponent, error) {
+ return s.productUIComponentRepo.GetByProductID(ctx, productID)
+}
+
+// RemoveUIComponentFromProduct 从产品中移除UI组件
+func (s *UIComponentApplicationServiceImpl) RemoveUIComponentFromProduct(ctx context.Context, productID, componentID string) error {
+ // 查找关联记录
+ relations, err := s.productUIComponentRepo.GetByProductID(ctx, productID)
+ if err != nil {
+ return err
+ }
+
+ // 找到要删除的关联记录
+ var relationID string
+ for _, relation := range relations {
+ if relation.UIComponentID == componentID {
+ relationID = relation.ID
+ break
+ }
+ }
+
+ if relationID == "" {
+ return ErrProductComponentRelationNotFound
+ }
+
+ return s.productUIComponentRepo.Delete(ctx, relationID)
+}
+
+// UploadAndExtractUIComponentFile 上传并解压UI组件文件
+func (s *UIComponentApplicationServiceImpl) UploadAndExtractUIComponentFile(ctx context.Context, id string, file *multipart.FileHeader) error {
+ // 获取组件信息
+ component, err := s.uiComponentRepo.GetByID(ctx, id)
+ if err != nil {
+ return err
+ }
+ if component == nil {
+ return ErrComponentNotFound
+ }
+
+ // 打开上传的文件
+ src, err := file.Open()
+ if err != nil {
+ return fmt.Errorf("打开上传文件失败: %w", err)
+ }
+ defer src.Close()
+
+ // 上传并解压文件
+ if err := s.fileService.UploadAndExtract(ctx, id, component.ComponentCode, src, file.Filename); err != nil {
+ return err
+ }
+
+ // 获取文件类型
+ fileType := strings.ToLower(filepath.Ext(file.Filename))
+
+ // 更新组件信息
+ folderPath := "resources/Pure Component/src/ui"
+ component.FolderPath = &folderPath
+ component.FileType = &fileType
+
+ // 仅对ZIP文件设置已解压标记
+ if fileType == ".zip" {
+ component.IsExtracted = true
+ }
+
+ return s.uiComponentRepo.Update(ctx, *component)
+}
+
+// GetUIComponentFolderContent 获取UI组件文件夹内容
+func (s *UIComponentApplicationServiceImpl) GetUIComponentFolderContent(ctx context.Context, id string) ([]FileInfo, error) {
+ // 获取组件信息
+ component, err := s.uiComponentRepo.GetByID(ctx, id)
+ if err != nil {
+ return nil, err
+ }
+ if component == nil {
+ return nil, ErrComponentNotFound
+ }
+
+ // 如果没有文件夹路径,返回空
+ if component.FolderPath == nil {
+ return []FileInfo{}, nil
+ }
+
+ // 获取文件夹内容
+ return s.fileService.GetFolderContent(*component.FolderPath)
+}
+
+// DeleteUIComponentFolder 删除UI组件文件夹
+func (s *UIComponentApplicationServiceImpl) DeleteUIComponentFolder(ctx context.Context, id string) error {
+ // 获取组件信息
+ component, err := s.uiComponentRepo.GetByID(ctx, id)
+ if err != nil {
+ return err
+ }
+ if component == nil {
+ return ErrComponentNotFound
+ }
+
+ // 注意:我们不再删除整个UI目录,因为所有组件共享同一个目录
+ // 这里只更新组件信息,标记为未上传状态
+ // 更新组件信息
+ component.FolderPath = nil
+ component.IsExtracted = false
+ return s.uiComponentRepo.Update(ctx, *component)
+}
diff --git a/internal/application/product/ui_component_errors.go b/internal/application/product/ui_component_errors.go
new file mode 100644
index 0000000..ed12715
--- /dev/null
+++ b/internal/application/product/ui_component_errors.go
@@ -0,0 +1,21 @@
+package product
+
+import "errors"
+
+// UI组件相关错误定义
+var (
+ // ErrComponentNotFound UI组件不存在
+ ErrComponentNotFound = errors.New("UI组件不存在")
+
+ // ErrComponentCodeAlreadyExists UI组件编码已存在
+ ErrComponentCodeAlreadyExists = errors.New("UI组件编码已存在")
+
+ // ErrComponentFileNotFound UI组件文件不存在
+ ErrComponentFileNotFound = errors.New("UI组件文件不存在")
+
+ // ErrInvalidFileType 无效的文件类型
+ ErrInvalidFileType = errors.New("无效的文件类型,仅支持ZIP文件")
+
+ // ErrProductComponentRelationNotFound 产品UI组件关联不存在
+ ErrProductComponentRelationNotFound = errors.New("产品UI组件关联不存在")
+)
diff --git a/internal/application/product/ui_component_file_service.go b/internal/application/product/ui_component_file_service.go
new file mode 100644
index 0000000..4060877
--- /dev/null
+++ b/internal/application/product/ui_component_file_service.go
@@ -0,0 +1,341 @@
+package product
+
+import (
+ "archive/zip"
+ "context"
+ "fmt"
+ "io"
+ "os"
+ "path/filepath"
+ "strings"
+ "time"
+
+ "go.uber.org/zap"
+)
+
+// UIComponentFileService UI组件文件服务接口
+type UIComponentFileService interface {
+ // 上传并解压UI组件文件
+ UploadAndExtract(ctx context.Context, componentID, componentCode string, file io.Reader, filename string) error
+
+ // 批量上传UI组件文件(支持文件夹结构)
+ UploadMultipleFiles(ctx context.Context, componentID, componentCode string, files []io.Reader, filenames []string, paths []string) error
+
+ // 根据组件编码创建文件夹
+ CreateFolderByCode(componentCode string) (string, error)
+
+ // 删除组件文件夹
+ DeleteFolder(folderPath string) error
+
+ // 检查文件夹是否存在
+ FolderExists(folderPath string) bool
+
+ // 获取文件夹内容
+ GetFolderContent(folderPath string) ([]FileInfo, error)
+}
+
+// FileInfo 文件信息
+type FileInfo struct {
+ Name string `json:"name"`
+ Path string `json:"path"`
+ Size int64 `json:"size"`
+ Type string `json:"type"` // "file" or "folder"
+ Modified time.Time `json:"modified"`
+}
+
+// UIComponentFileServiceImpl UI组件文件服务实现
+type UIComponentFileServiceImpl struct {
+ basePath string
+ logger *zap.Logger
+}
+
+// NewUIComponentFileService 创建UI组件文件服务
+func NewUIComponentFileService(basePath string, logger *zap.Logger) UIComponentFileService {
+ // 确保基础路径存在
+ if err := os.MkdirAll(basePath, 0755); err != nil {
+ logger.Error("创建基础存储目录失败", zap.Error(err), zap.String("path", basePath))
+ }
+
+ return &UIComponentFileServiceImpl{
+ basePath: basePath,
+ logger: logger,
+ }
+}
+
+// UploadAndExtract 上传并解压UI组件文件
+func (s *UIComponentFileServiceImpl) UploadAndExtract(ctx context.Context, componentID, componentCode string, file io.Reader, filename string) error {
+ // 直接使用基础路径作为文件夹路径,不再创建组件编码子文件夹
+ folderPath := s.basePath
+
+ // 确保基础目录存在
+ if err := os.MkdirAll(folderPath, 0755); err != nil {
+ return fmt.Errorf("创建基础目录失败: %w", err)
+ }
+
+ // 保存上传的文件
+ filePath := filepath.Join(folderPath, filename)
+ savedFile, err := os.Create(filePath)
+ if err != nil {
+ return fmt.Errorf("创建文件失败: %w", err)
+ }
+ defer savedFile.Close()
+
+ // 复制文件内容
+ if _, err := io.Copy(savedFile, file); err != nil {
+ // 删除部分写入的文件
+ _ = os.Remove(filePath)
+ return fmt.Errorf("保存文件失败: %w", err)
+ }
+
+ // 仅对ZIP文件执行解压逻辑
+ if strings.HasSuffix(strings.ToLower(filename), ".zip") {
+ // 解压文件到基础目录
+ if err := s.extractZipFile(filePath, folderPath); err != nil {
+ // 删除ZIP文件
+ _ = os.Remove(filePath)
+ return fmt.Errorf("解压文件失败: %w", err)
+ }
+
+ // 删除ZIP文件
+ _ = os.Remove(filePath)
+
+ s.logger.Info("UI组件文件上传并解压成功",
+ zap.String("componentID", componentID),
+ zap.String("componentCode", componentCode),
+ zap.String("folderPath", folderPath))
+ } else {
+ s.logger.Info("UI组件文件上传成功(未解压)",
+ zap.String("componentID", componentID),
+ zap.String("componentCode", componentCode),
+ zap.String("filePath", filePath))
+ }
+
+ return nil
+}
+
+// UploadMultipleFiles 批量上传UI组件文件(支持文件夹结构)
+func (s *UIComponentFileServiceImpl) UploadMultipleFiles(ctx context.Context, componentID, componentCode string, files []io.Reader, filenames []string, paths []string) error {
+ // 直接使用基础路径作为文件夹路径,不再创建组件编码子文件夹
+ folderPath := s.basePath
+
+ // 确保基础目录存在
+ if err := os.MkdirAll(folderPath, 0755); err != nil {
+ return fmt.Errorf("创建基础目录失败: %w", err)
+ }
+
+ // 处理每个文件
+ for i, file := range files {
+ filename := filenames[i]
+ path := paths[i]
+
+ // 如果有路径信息,创建对应的子文件夹
+ if path != "" && path != filename {
+ // 获取文件所在目录
+ dir := filepath.Dir(path)
+ if dir != "." {
+ // 创建子文件夹
+ subDirPath := filepath.Join(folderPath, dir)
+ if err := os.MkdirAll(subDirPath, 0755); err != nil {
+ return fmt.Errorf("创建子文件夹失败: %w", err)
+ }
+ }
+ }
+
+ // 确定文件保存路径
+ var filePath string
+ if path != "" && path != filename {
+ // 有路径信息,使用完整路径
+ filePath = filepath.Join(folderPath, path)
+ } else {
+ // 没有路径信息,直接保存在根目录
+ filePath = filepath.Join(folderPath, filename)
+ }
+
+ // 保存上传的文件
+ savedFile, err := os.Create(filePath)
+ if err != nil {
+ return fmt.Errorf("创建文件失败: %w", err)
+ }
+ defer savedFile.Close()
+
+ // 复制文件内容
+ if _, err := io.Copy(savedFile, file); err != nil {
+ // 删除部分写入的文件
+ _ = os.Remove(filePath)
+ return fmt.Errorf("保存文件失败: %w", err)
+ }
+
+ // 对ZIP文件执行解压逻辑
+ if strings.HasSuffix(strings.ToLower(filename), ".zip") {
+ // 确定解压目录
+ var extractDir string
+ if path != "" && path != filename {
+ // 有路径信息,解压到对应目录
+ dir := filepath.Dir(path)
+ if dir != "." {
+ extractDir = filepath.Join(folderPath, dir)
+ } else {
+ extractDir = folderPath
+ }
+ } else {
+ // 没有路径信息,解压到根目录
+ extractDir = folderPath
+ }
+
+ // 解压文件
+ if err := s.extractZipFile(filePath, extractDir); err != nil {
+ // 删除ZIP文件
+ _ = os.Remove(filePath)
+ return fmt.Errorf("解压文件失败: %w", err)
+ }
+
+ // 删除ZIP文件
+ _ = os.Remove(filePath)
+
+ s.logger.Info("UI组件文件上传并解压成功",
+ zap.String("componentID", componentID),
+ zap.String("componentCode", componentCode),
+ zap.String("filePath", filePath),
+ zap.String("extractDir", extractDir))
+ } else {
+ s.logger.Info("UI组件文件上传成功(未解压)",
+ zap.String("componentID", componentID),
+ zap.String("componentCode", componentCode),
+ zap.String("filePath", filePath))
+ }
+ }
+
+ return nil
+}
+
+// CreateFolderByCode 根据组件编码创建文件夹
+func (s *UIComponentFileServiceImpl) CreateFolderByCode(componentCode string) (string, error) {
+ folderPath := filepath.Join(s.basePath, componentCode)
+
+ // 创建文件夹(如果不存在)
+ if err := os.MkdirAll(folderPath, 0755); err != nil {
+ return "", fmt.Errorf("创建文件夹失败: %w", err)
+ }
+
+ return folderPath, nil
+}
+
+// DeleteFolder 删除组件文件夹
+func (s *UIComponentFileServiceImpl) DeleteFolder(folderPath string) error {
+ if !s.FolderExists(folderPath) {
+ return nil // 文件夹不存在,不视为错误
+ }
+
+ if err := os.RemoveAll(folderPath); err != nil {
+ return fmt.Errorf("删除文件夹失败: %w", err)
+ }
+
+ s.logger.Info("删除组件文件夹成功", zap.String("folderPath", folderPath))
+ return nil
+}
+
+// FolderExists 检查文件夹是否存在
+func (s *UIComponentFileServiceImpl) FolderExists(folderPath string) bool {
+ info, err := os.Stat(folderPath)
+ if err != nil {
+ return false
+ }
+ return info.IsDir()
+}
+
+// GetFolderContent 获取文件夹内容
+func (s *UIComponentFileServiceImpl) GetFolderContent(folderPath string) ([]FileInfo, error) {
+ var files []FileInfo
+
+ err := filepath.Walk(folderPath, func(path string, info os.FileInfo, err error) error {
+ if err != nil {
+ return err
+ }
+
+ // 跳过根目录
+ if path == folderPath {
+ return nil
+ }
+
+ // 获取相对路径
+ relPath, err := filepath.Rel(folderPath, path)
+ if err != nil {
+ return err
+ }
+
+ fileType := "file"
+ if info.IsDir() {
+ fileType = "folder"
+ }
+
+ files = append(files, FileInfo{
+ Name: info.Name(),
+ Path: relPath,
+ Size: info.Size(),
+ Type: fileType,
+ Modified: info.ModTime(),
+ })
+
+ return nil
+ })
+
+ if err != nil {
+ return nil, fmt.Errorf("扫描文件夹失败: %w", err)
+ }
+
+ return files, nil
+}
+
+// extractZipFile 解压ZIP文件
+func (s *UIComponentFileServiceImpl) extractZipFile(zipPath, destPath string) error {
+ reader, err := zip.OpenReader(zipPath)
+ if err != nil {
+ return fmt.Errorf("打开ZIP文件失败: %w", err)
+ }
+ defer reader.Close()
+
+ for _, file := range reader.File {
+ path := filepath.Join(destPath, file.Name)
+
+ // 防止路径遍历攻击
+ if !strings.HasPrefix(filepath.Clean(path), filepath.Clean(destPath)+string(os.PathSeparator)) {
+ return fmt.Errorf("无效的文件路径: %s", file.Name)
+ }
+
+ if file.FileInfo().IsDir() {
+ // 创建目录
+ if err := os.MkdirAll(path, file.Mode()); err != nil {
+ return fmt.Errorf("创建目录失败: %w", err)
+ }
+ continue
+ }
+
+ // 创建文件
+ fileReader, err := file.Open()
+ if err != nil {
+ return fmt.Errorf("打开ZIP内文件失败: %w", err)
+ }
+
+ // 确保父目录存在
+ if err := os.MkdirAll(filepath.Dir(path), 0755); err != nil {
+ fileReader.Close()
+ return fmt.Errorf("创建父目录失败: %w", err)
+ }
+
+ destFile, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, file.Mode())
+ if err != nil {
+ fileReader.Close()
+ return fmt.Errorf("创建目标文件失败: %w", err)
+ }
+
+ _, err = io.Copy(destFile, fileReader)
+ fileReader.Close()
+ destFile.Close()
+
+ if err != nil {
+ return fmt.Errorf("写入文件失败: %w", err)
+ }
+ }
+
+ return nil
+}
diff --git a/internal/container/container.go b/internal/container/container.go
index 9ea0c62..5e3cb62 100644
--- a/internal/container/container.go
+++ b/internal/container/container.go
@@ -55,6 +55,7 @@ import (
asynq "tyapi-server/internal/infrastructure/task/implementations/asynq"
task_interfaces "tyapi-server/internal/infrastructure/task/interfaces"
task_repositories "tyapi-server/internal/infrastructure/task/repositories"
+ component_report "tyapi-server/internal/shared/component_report"
shared_database "tyapi-server/internal/shared/database"
"tyapi-server/internal/shared/esign"
shared_events "tyapi-server/internal/shared/events"
@@ -565,6 +566,21 @@ func NewContainer() *Container {
product_repo.NewGormProductDocumentationRepository,
fx.As(new(domain_product_repo.ProductDocumentationRepository)),
),
+ // 组件报告下载记录仓储
+ fx.Annotate(
+ product_repo.NewGormComponentReportRepository,
+ fx.As(new(domain_product_repo.ComponentReportRepository)),
+ ),
+ // UI组件仓储 - 同时注册具体类型和接口类型
+ fx.Annotate(
+ product_repo.NewGormUIComponentRepository,
+ fx.As(new(domain_product_repo.UIComponentRepository)),
+ ),
+ // 产品UI组件关联仓储 - 同时注册具体类型和接口类型
+ fx.Annotate(
+ product_repo.NewGormProductUIComponentRepository,
+ fx.As(new(domain_product_repo.ProductUIComponentRepository)),
+ ),
),
// 仓储层 - 文章域
@@ -882,6 +898,7 @@ func NewContainer() *Container {
logger *zap.Logger,
config *config.Config,
exportManager *export.ExportManager,
+ componentReportRepo domain_product_repo.ComponentReportRepository,
) finance.FinanceApplicationService {
return finance.NewFinanceApplicationService(
aliPayClient,
@@ -892,6 +909,7 @@ func NewContainer() *Container {
alipayOrderRepo,
wechatOrderRepo,
rechargeRecordRepo,
+ componentReportRepo,
userRepo,
txManager,
logger,
@@ -1028,6 +1046,27 @@ func NewContainer() *Container {
},
fx.As(new(statistics.StatisticsApplicationService)),
),
+ // UI组件应用服务 - 绑定到接口
+ fx.Annotate(
+ func(
+ uiComponentRepo domain_product_repo.UIComponentRepository,
+ productUIComponentRepo domain_product_repo.ProductUIComponentRepository,
+ fileStorageService *storage.LocalFileStorageService,
+ logger *zap.Logger,
+ ) product.UIComponentApplicationService {
+ // 创建UI组件文件服务
+ basePath := "resources/Pure Component/src/ui"
+ fileService := product.NewUIComponentFileService(basePath, logger)
+
+ return product.NewUIComponentApplicationService(
+ uiComponentRepo,
+ productUIComponentRepo,
+ fileStorageService,
+ fileService,
+ )
+ },
+ fx.As(new(product.UIComponentApplicationService)),
+ ),
),
// PDF查找服务
@@ -1086,6 +1125,24 @@ func NewContainer() *Container {
return cacheManager, nil
},
),
+ // 本地文件存储服务
+ fx.Provide(
+ func(logger *zap.Logger) *storage.LocalFileStorageService {
+ // 使用默认配置:基础存储目录在项目根目录下的storage目录
+ basePath := "storage"
+
+ // 可以通过环境变量覆盖
+ if envBasePath := os.Getenv("FILE_STORAGE_BASE_PATH"); envBasePath != "" {
+ basePath = envBasePath
+ }
+
+ logger.Info("本地文件存储服务已初始化",
+ zap.String("base_path", basePath),
+ )
+
+ return storage.NewLocalFileStorageService(basePath, logger)
+ },
+ ),
// HTTP处理器
fx.Provide(
// 用户HTTP处理器
@@ -1120,6 +1177,30 @@ func NewContainer() *Container {
) *handlers.AnnouncementHandler {
return handlers.NewAnnouncementHandler(appService, responseBuilder, validator, logger)
},
+ // 组件报告处理器
+ func(
+ productRepo domain_product_repo.ProductRepository,
+ docRepo domain_product_repo.ProductDocumentationRepository,
+ apiConfigRepo domain_product_repo.ProductApiConfigRepository,
+ componentReportRepo domain_product_repo.ComponentReportRepository,
+ rechargeRecordRepo domain_finance_repo.RechargeRecordRepository,
+ alipayOrderRepo domain_finance_repo.AlipayOrderRepository,
+ wechatOrderRepo domain_finance_repo.WechatOrderRepository,
+ aliPayService *payment.AliPayService,
+ wechatPayService *payment.WechatPayService,
+ logger *zap.Logger,
+ ) *component_report.ComponentReportHandler {
+ return component_report.NewComponentReportHandler(productRepo, docRepo, apiConfigRepo, componentReportRepo, rechargeRecordRepo, alipayOrderRepo, wechatOrderRepo, aliPayService, wechatPayService, logger)
+ },
+ // UI组件HTTP处理器
+ func(
+ uiComponentAppService product.UIComponentApplicationService,
+ responseBuilder interfaces.ResponseBuilder,
+ validator interfaces.RequestValidator,
+ logger *zap.Logger,
+ ) *handlers.UIComponentHandler {
+ return handlers.NewUIComponentHandler(uiComponentAppService, responseBuilder, validator, logger)
+ },
),
// 路由注册
@@ -1134,6 +1215,8 @@ func NewContainer() *Container {
routes.NewProductRoutes,
// 产品管理员路由
routes.NewProductAdminRoutes,
+ // UI组件路由
+ routes.NewUIComponentRoutes,
// 文章路由
routes.NewArticleRoutes,
// 公告路由
@@ -1248,10 +1331,13 @@ func RegisterRoutes(
financeRoutes *routes.FinanceRoutes,
productRoutes *routes.ProductRoutes,
productAdminRoutes *routes.ProductAdminRoutes,
+ uiComponentRoutes *routes.UIComponentRoutes,
articleRoutes *routes.ArticleRoutes,
announcementRoutes *routes.AnnouncementRoutes,
apiRoutes *routes.ApiRoutes,
statisticsRoutes *routes.StatisticsRoutes,
+ jwtAuth *middleware.JWTAuthMiddleware,
+ adminAuth *middleware.AdminAuthMiddleware,
cfg *config.Config,
logger *zap.Logger,
) {
@@ -1266,6 +1352,13 @@ func RegisterRoutes(
financeRoutes.Register(router)
productRoutes.Register(router)
productAdminRoutes.Register(router)
+
+ // UI组件路由需要特殊处理,因为它需要管理员中间件
+ engine := router.GetEngine()
+ adminGroup := engine.Group("/api/v1/admin")
+ adminGroup.Use(adminAuth.Handle())
+ uiComponentRoutes.RegisterRoutes(adminGroup, adminAuth)
+
articleRoutes.Register(router)
announcementRoutes.Register(router)
statisticsRoutes.Register(router)
diff --git a/internal/domains/api/services/processors/ivyz/ivyz81nc_processor.go b/internal/domains/api/services/processors/ivyz/ivyz81nc_processor.go
index 1079e6a..aa23fa9 100644
--- a/internal/domains/api/services/processors/ivyz/ivyz81nc_processor.go
+++ b/internal/domains/api/services/processors/ivyz/ivyz81nc_processor.go
@@ -33,8 +33,8 @@ func ProcessIVYZ81NCRequest(ctx context.Context, params []byte, deps *processors
reqData := map[string]interface{}{
"data": map[string]interface{}{
- "name": encryptedName,
- "idcard": encryptedIDCard,
+ "name": encryptedName,
+ "idcard": encryptedIDCard,
},
}
@@ -62,4 +62,4 @@ func ProcessIVYZ81NCRequest(ctx context.Context, params []byte, deps *processors
}
return respBytes, nil
-}
\ No newline at end of file
+}
diff --git a/internal/domains/finance/entities/recharge_record.go b/internal/domains/finance/entities/recharge_record.go
index 5563c29..34ec50f 100644
--- a/internal/domains/finance/entities/recharge_record.go
+++ b/internal/domains/finance/entities/recharge_record.go
@@ -165,23 +165,35 @@ func (r *RechargeRecord) SetTransferOrderID(orderID string) {
// NewAlipayRechargeRecord 工厂方法 - 创建支付宝充值记录
func NewAlipayRechargeRecord(userID string, amount decimal.Decimal, alipayOrderID string) *RechargeRecord {
+ return NewAlipayRechargeRecordWithNotes(userID, amount, alipayOrderID, "")
+}
+
+// NewAlipayRechargeRecordWithNotes 工厂方法 - 创建支付宝充值记录(带备注)
+func NewAlipayRechargeRecordWithNotes(userID string, amount decimal.Decimal, alipayOrderID, notes string) *RechargeRecord {
return &RechargeRecord{
UserID: userID,
Amount: amount,
RechargeType: RechargeTypeAlipay,
Status: RechargeStatusPending,
AlipayOrderID: &alipayOrderID,
+ Notes: notes,
}
}
// NewWechatRechargeRecord 工厂方法 - 创建微信充值记录
func NewWechatRechargeRecord(userID string, amount decimal.Decimal, wechatOrderID string) *RechargeRecord {
+ return NewWechatRechargeRecordWithNotes(userID, amount, wechatOrderID, "")
+}
+
+// NewWechatRechargeRecordWithNotes 工厂方法 - 创建微信充值记录(带备注)
+func NewWechatRechargeRecordWithNotes(userID string, amount decimal.Decimal, wechatOrderID, notes string) *RechargeRecord {
return &RechargeRecord{
UserID: userID,
Amount: amount,
RechargeType: RechargeTypeWechat,
Status: RechargeStatusPending,
WechatOrderID: &wechatOrderID,
+ Notes: notes,
}
}
diff --git a/internal/domains/finance/services/recharge_record_service.go b/internal/domains/finance/services/recharge_record_service.go
index dac434e..e69a8c1 100644
--- a/internal/domains/finance/services/recharge_record_service.go
+++ b/internal/domains/finance/services/recharge_record_service.go
@@ -3,6 +3,7 @@ package services
import (
"context"
"fmt"
+ "strings"
"github.com/shopspring/decimal"
"go.uber.org/zap"
@@ -295,8 +296,21 @@ func (s *RechargeRecordServiceImpl) HandleAlipayPaymentSuccess(ctx context.Conte
return nil
}
- // 计算充值赠送金额
- bonusAmount := calculateAlipayRechargeBonus(amount, &s.cfg.Wallet)
+ // 检查是否是组件报告下载订单(通过备注判断)
+ isComponentReportOrder := strings.Contains(rechargeRecord.Notes, "购买") && strings.Contains(rechargeRecord.Notes, "报告示例")
+
+ s.logger.Info("处理支付宝支付成功回调",
+ zap.String("out_trade_no", outTradeNo),
+ zap.String("recharge_id", rechargeRecord.ID),
+ zap.String("notes", rechargeRecord.Notes),
+ zap.Bool("is_component_report", isComponentReportOrder),
+ )
+
+ // 计算充值赠送金额(组件报告下载订单不需要赠送)
+ bonusAmount := decimal.Zero
+ if !isComponentReportOrder {
+ bonusAmount = calculateAlipayRechargeBonus(amount, &s.cfg.Wallet)
+ }
totalAmount := amount.Add(bonusAmount)
// 在事务中执行所有更新操作
@@ -309,14 +323,22 @@ func (s *RechargeRecordServiceImpl) HandleAlipayPaymentSuccess(ctx context.Conte
return err
}
- // 更新充值记录状态为成功
- rechargeRecord.MarkSuccess()
- err = s.rechargeRecordRepo.Update(txCtx, rechargeRecord)
+ // 更新充值记录状态为成功(使用UpdateStatus方法直接更新状态字段)
+ err = s.rechargeRecordRepo.UpdateStatus(txCtx, rechargeRecord.ID, entities.RechargeStatusSuccess)
if err != nil {
s.logger.Error("更新充值记录状态失败", zap.Error(err))
return err
}
+ // 如果是组件报告下载订单,不增加钱包余额,不创建赠送记录
+ if isComponentReportOrder {
+ s.logger.Info("组件报告下载订单,跳过钱包余额增加和赠送",
+ zap.String("out_trade_no", outTradeNo),
+ zap.String("recharge_id", rechargeRecord.ID),
+ )
+ return nil
+ }
+
// 如果有赠送金额,创建赠送充值记录
if bonusAmount.GreaterThan(decimal.Zero) {
giftRechargeRecord := entities.NewGiftRechargeRecord(rechargeRecord.UserID, bonusAmount, "充值活动赠送")
@@ -355,6 +377,10 @@ func (s *RechargeRecordServiceImpl) HandleAlipayPaymentSuccess(ctx context.Conte
zap.String("recharge_id", rechargeRecord.ID),
zap.String("order_id", alipayOrder.ID))
+ // 检查是否有组件报告下载记录需要更新
+ // 注意:这里需要在调用方(finance应用服务)中处理,因为这里没有组件报告下载的repository
+ // 但为了保持服务层的独立性,我们通过事件或回调来处理
+
return nil
}
diff --git a/internal/domains/product/entities/component_report_cache.go b/internal/domains/product/entities/component_report_cache.go
deleted file mode 100644
index ad999b3..0000000
--- a/internal/domains/product/entities/component_report_cache.go
+++ /dev/null
@@ -1,34 +0,0 @@
-package entities
-
-import (
- "time"
-
- "github.com/google/uuid"
- "gorm.io/gorm"
-)
-
-// ComponentReportCache 报告文件匹配缓存
-type ComponentReportCache struct {
- ID string `gorm:"primaryKey;type:varchar(36)" json:"id" comment:"缓存ID"`
- ProductCode string `gorm:"type:varchar(50);not null;uniqueIndex" json:"product_code" comment:"产品编号"`
- MatchedPath string `gorm:"type:varchar(500);not null" json:"matched_path" comment:"匹配到的文件夹/文件路径"`
- FileType string `gorm:"type:varchar(20);not null" json:"file_type" comment:"文件类型:folder, file"`
- CacheKey string `gorm:"type:varchar(64);not null;uniqueIndex" json:"cache_key" comment:"缓存键"`
-
- CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at" comment:"创建时间"`
- UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updated_at" comment:"更新时间"`
-}
-
-// TableName 指定数据库表名
-func (ComponentReportCache) TableName() string {
- return "component_report_cache"
-}
-
-// BeforeCreate GORM钩子:创建前自动生成UUID
-func (c *ComponentReportCache) BeforeCreate(tx *gorm.DB) error {
- if c.ID == "" {
- c.ID = uuid.New().String()
- }
- return nil
-}
-
diff --git a/internal/domains/product/entities/component_report_download.go b/internal/domains/product/entities/component_report_download.go
index 3894c9c..3d9106f 100644
--- a/internal/domains/product/entities/component_report_download.go
+++ b/internal/domains/product/entities/component_report_download.go
@@ -10,30 +10,30 @@ import (
// ComponentReportDownload 组件报告下载记录
type ComponentReportDownload struct {
- ID string `gorm:"primaryKey;type:varchar(36)" json:"id" comment:"下载记录ID"`
- UserID string `gorm:"type:varchar(36);not null;index" json:"user_id" comment:"用户ID"`
- ProductID string `gorm:"type:varchar(36);not null;index" json:"product_id" comment:"产品ID"`
- ProductCode string `gorm:"type:varchar(50);not null;index" json:"product_code" comment:"产品编号"`
- SubProductIDs string `gorm:"type:text" json:"sub_product_ids" comment:"子产品ID列表(JSON数组)"`
- SubProductCodes string `gorm:"type:text" json:"sub_product_codes" comment:"子产品编号列表(JSON数组)"`
- DownloadPrice decimal.Decimal `gorm:"type:decimal(10,2);not null" json:"download_price" comment:"实际支付价格"`
- OriginalPrice decimal.Decimal `gorm:"type:decimal(10,2);not null" json:"original_price" comment:"原始总价"`
- DiscountAmount decimal.Decimal `gorm:"type:decimal(10,2);default:0" json:"discount_amount" comment:"减免金额"`
- PaymentOrderID *string `gorm:"type:varchar(64)" json:"payment_order_id,omitempty" comment:"支付订单号"`
- PaymentType *string `gorm:"type:varchar(20)" json:"payment_type,omitempty" comment:"支付类型:alipay, wechat"`
- PaymentStatus string `gorm:"type:varchar(20);default:'pending';index" json:"payment_status" comment:"支付状态:pending, success, failed"`
- FilePath *string `gorm:"type:varchar(500)" json:"file_path,omitempty" comment:"生成的ZIP文件路径"`
- FileHash *string `gorm:"type:varchar(64)" json:"file_hash,omitempty" comment:"文件哈希值"`
- DownloadCount int `gorm:"default:0" json:"download_count" comment:"下载次数"`
- LastDownloadAt *time.Time `json:"last_download_at,omitempty" comment:"最后下载时间"`
- ExpiresAt *time.Time `gorm:"index" json:"expires_at,omitempty" comment:"下载有效期"`
+ ID string `gorm:"primaryKey;type:varchar(36)" comment:"下载记录ID"`
+ UserID string `gorm:"type:varchar(36);not null;index" comment:"用户ID"`
+ ProductID string `gorm:"type:varchar(36);not null;index" comment:"产品ID"`
+ ProductCode string `gorm:"type:varchar(50);not null;index" comment:"产品编号"`
+ SubProductIDs string `gorm:"type:text" comment:"子产品ID列表(JSON数组,组合包使用)"`
+ SubProductCodes string `gorm:"type:text" comment:"子产品编号列表(JSON数组)"`
+ DownloadPrice decimal.Decimal `gorm:"type:decimal(10,2);not null" comment:"实际支付价格"`
+ OriginalPrice decimal.Decimal `gorm:"type:decimal(10,2);not null" comment:"原始总价"`
+ DiscountAmount decimal.Decimal `gorm:"type:decimal(10,2);default:0" comment:"减免金额"`
+ PaymentOrderID *string `gorm:"type:varchar(64);index" comment:"支付订单号(关联充值记录)"`
+ PaymentType *string `gorm:"type:varchar(20)" comment:"支付类型:alipay, wechat"`
+ PaymentStatus string `gorm:"type:varchar(20);default:'pending';index" comment:"支付状态:pending, success, failed"`
+ FilePath *string `gorm:"type:varchar(500)" comment:"生成的ZIP文件路径(用于二次下载)"`
+ FileHash *string `gorm:"type:varchar(64)" comment:"文件哈希值(用于缓存验证)"`
+ DownloadCount int `gorm:"default:0" comment:"下载次数"`
+ LastDownloadAt *time.Time `comment:"最后下载时间"`
+ ExpiresAt *time.Time `gorm:"index" comment:"下载有效期(支付成功后30天)"`
- CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at" comment:"创建时间"`
- UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updated_at" comment:"更新时间"`
- DeletedAt gorm.DeletedAt `gorm:"index" json:"-" comment:"软删除时间"`
+ CreatedAt time.Time `gorm:"autoCreateTime" comment:"创建时间"`
+ UpdatedAt time.Time `gorm:"autoUpdateTime" comment:"更新时间"`
+ DeletedAt gorm.DeletedAt `gorm:"index" comment:"软删除时间"`
}
-// TableName 指定数据库表名
+// TableName 指定表名
func (ComponentReportDownload) TableName() string {
return "component_report_downloads"
}
@@ -46,8 +46,8 @@ func (c *ComponentReportDownload) BeforeCreate(tx *gorm.DB) error {
return nil
}
-// IsPaymentSuccess 检查是否支付成功
-func (c *ComponentReportDownload) IsPaymentSuccess() bool {
+// IsPaid 检查是否已支付
+func (c *ComponentReportDownload) IsPaid() bool {
return c.PaymentStatus == "success"
}
@@ -61,25 +61,5 @@ func (c *ComponentReportDownload) IsExpired() bool {
// CanDownload 检查是否可以下载
func (c *ComponentReportDownload) CanDownload() bool {
- return c.IsPaymentSuccess() && !c.IsExpired()
+ return c.IsPaid() && !c.IsExpired()
}
-
-// MarkPaymentSuccess 标记支付成功
-func (c *ComponentReportDownload) MarkPaymentSuccess(orderID string, paymentType string) {
- c.PaymentOrderID = &orderID
- paymentTypeStr := paymentType
- c.PaymentType = &paymentTypeStr
- c.PaymentStatus = "success"
-
- // 设置30天有效期
- expiresAt := time.Now().Add(30 * 24 * time.Hour)
- c.ExpiresAt = &expiresAt
-}
-
-// IncrementDownloadCount 增加下载次数
-func (c *ComponentReportDownload) IncrementDownloadCount() {
- c.DownloadCount++
- now := time.Now()
- c.LastDownloadAt = &now
-}
-
diff --git a/internal/domains/product/entities/product.go b/internal/domains/product/entities/product.go
index 4ec1ab5..1692b8c 100644
--- a/internal/domains/product/entities/product.go
+++ b/internal/domains/product/entities/product.go
@@ -25,6 +25,9 @@ type Product struct {
IsPackage bool `gorm:"default:false" comment:"是否组合包"`
// 组合包相关关联
PackageItems []*ProductPackageItem `gorm:"foreignKey:PackageID" comment:"组合包项目列表"`
+ // UI组件相关字段
+ SellUIComponent bool `gorm:"default:false" comment:"是否出售UI组件"`
+ UIComponentPrice decimal.Decimal `gorm:"type:decimal(10,2);default:0" comment:"UI组件销售价格(组合包使用)"`
// SEO信息
SEOTitle string `gorm:"type:varchar(200)" comment:"SEO标题"`
SEODescription string `gorm:"type:text" comment:"SEO描述"`
diff --git a/internal/domains/product/entities/product_ui_component.go b/internal/domains/product/entities/product_ui_component.go
new file mode 100644
index 0000000..d3c7de0
--- /dev/null
+++ b/internal/domains/product/entities/product_ui_component.go
@@ -0,0 +1,36 @@
+package entities
+
+import (
+ "time"
+
+ "github.com/google/uuid"
+ "github.com/shopspring/decimal"
+ "gorm.io/gorm"
+)
+
+// ProductUIComponent 产品UI组件关联实体
+type ProductUIComponent struct {
+ ID string `gorm:"primaryKey;type:varchar(36)" comment:"关联ID"`
+ ProductID string `gorm:"type:varchar(36);not null;index" comment:"产品ID"`
+ UIComponentID string `gorm:"type:varchar(36);not null;index" comment:"UI组件ID"`
+ Price decimal.Decimal `gorm:"type:decimal(10,2);not null;default:0" comment:"销售价格"`
+ IsEnabled bool `gorm:"default:true" comment:"是否启用销售"`
+ CreatedAt time.Time `gorm:"autoCreateTime" comment:"创建时间"`
+ UpdatedAt time.Time `gorm:"autoUpdateTime" comment:"更新时间"`
+ DeletedAt gorm.DeletedAt `gorm:"index" comment:"软删除时间"`
+
+ // 关联关系
+ Product *Product `gorm:"foreignKey:ProductID" comment:"产品"`
+ UIComponent *UIComponent `gorm:"foreignKey:UIComponentID" comment:"UI组件"`
+}
+
+func (ProductUIComponent) TableName() string {
+ return "product_ui_components"
+}
+
+func (p *ProductUIComponent) BeforeCreate(tx *gorm.DB) error {
+ if p.ID == "" {
+ p.ID = uuid.New().String()
+ }
+ return nil
+}
diff --git a/internal/domains/product/entities/ui_component.go b/internal/domains/product/entities/ui_component.go
new file mode 100644
index 0000000..2789954
--- /dev/null
+++ b/internal/domains/product/entities/ui_component.go
@@ -0,0 +1,39 @@
+package entities
+
+import (
+ "time"
+
+ "github.com/google/uuid"
+ "gorm.io/gorm"
+)
+
+// UIComponent UI组件实体
+type UIComponent struct {
+ ID string `gorm:"primaryKey;type:varchar(36)" json:"id" comment:"组件ID"`
+ ComponentCode string `gorm:"type:varchar(50);not null;uniqueIndex" json:"component_code" comment:"组件编码"`
+ ComponentName string `gorm:"type:varchar(100);not null" json:"component_name" comment:"组件名称"`
+ Description string `gorm:"type:text" json:"description" comment:"组件描述"`
+ FilePath *string `gorm:"type:varchar(500)" json:"file_path" comment:"组件文件路径"`
+ FileHash *string `gorm:"type:varchar(64)" json:"file_hash" comment:"文件哈希值"`
+ FileSize *int64 `gorm:"type:bigint" json:"file_size" comment:"文件大小"`
+ FileType *string `gorm:"type:varchar(50)" json:"file_type" comment:"文件类型"`
+ FolderPath *string `gorm:"type:varchar(500)" json:"folder_path" comment:"组件文件夹路径"`
+ IsExtracted bool `gorm:"default:false" json:"is_extracted" comment:"是否已解压"`
+ Version string `gorm:"type:varchar(20)" json:"version" comment:"组件版本"`
+ IsActive bool `gorm:"default:true" json:"is_active" comment:"是否启用"`
+ SortOrder int `gorm:"default:0" json:"sort_order" comment:"排序"`
+ CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at" comment:"创建时间"`
+ UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updated_at" comment:"更新时间"`
+ DeletedAt gorm.DeletedAt `gorm:"index" json:"deleted_at" comment:"软删除时间"`
+}
+
+func (UIComponent) TableName() string {
+ return "ui_components"
+}
+
+func (u *UIComponent) BeforeCreate(tx *gorm.DB) error {
+ if u.ID == "" {
+ u.ID = uuid.New().String()
+ }
+ return nil
+}
diff --git a/internal/domains/product/repositories/component_report_repository_interface.go b/internal/domains/product/repositories/component_report_repository_interface.go
index a877b2e..4e85703 100644
--- a/internal/domains/product/repositories/component_report_repository_interface.go
+++ b/internal/domains/product/repositories/component_report_repository_interface.go
@@ -2,23 +2,31 @@ package repositories
import (
"context"
+
"tyapi-server/internal/domains/product/entities"
)
// ComponentReportRepository 组件报告仓储接口
type ComponentReportRepository interface {
- // 下载记录相关
+ // 创建下载记录
CreateDownload(ctx context.Context, download *entities.ComponentReportDownload) (*entities.ComponentReportDownload, error)
+
+ // 更新下载记录
UpdateDownload(ctx context.Context, download *entities.ComponentReportDownload) error
+
+ // 根据ID获取下载记录
GetDownloadByID(ctx context.Context, id string) (*entities.ComponentReportDownload, error)
+
+ // 获取用户的下载记录列表
GetUserDownloads(ctx context.Context, userID string, productID *string) ([]*entities.ComponentReportDownload, error)
+
+ // 检查用户是否已下载过指定产品编号的组件
HasUserDownloaded(ctx context.Context, userID string, productCode string) (bool, error)
+
+ // 获取用户已下载的产品编号列表
GetUserDownloadedProductCodes(ctx context.Context, userID string) ([]string, error)
+
+ // 根据支付订单号获取下载记录
GetDownloadByPaymentOrderID(ctx context.Context, orderID string) (*entities.ComponentReportDownload, error)
-
- // 缓存相关
- GetCacheByProductCode(ctx context.Context, productCode string) (*entities.ComponentReportCache, error)
- CreateCache(ctx context.Context, cache *entities.ComponentReportCache) error
- UpdateCache(ctx context.Context, cache *entities.ComponentReportCache) error
}
diff --git a/internal/domains/product/repositories/product_ui_component_repository.go b/internal/domains/product/repositories/product_ui_component_repository.go
new file mode 100644
index 0000000..ddd1728
--- /dev/null
+++ b/internal/domains/product/repositories/product_ui_component_repository.go
@@ -0,0 +1,16 @@
+package repositories
+
+import (
+ "context"
+ "tyapi-server/internal/domains/product/entities"
+)
+
+// ProductUIComponentRepository 产品UI组件关联仓储接口
+type ProductUIComponentRepository interface {
+ Create(ctx context.Context, relation entities.ProductUIComponent) (entities.ProductUIComponent, error)
+ GetByProductID(ctx context.Context, productID string) ([]entities.ProductUIComponent, error)
+ GetByUIComponentID(ctx context.Context, componentID string) ([]entities.ProductUIComponent, error)
+ Delete(ctx context.Context, id string) error
+ DeleteByProductID(ctx context.Context, productID string) error
+ BatchCreate(ctx context.Context, relations []entities.ProductUIComponent) error
+}
diff --git a/internal/domains/product/repositories/ui_component_repository.go b/internal/domains/product/repositories/ui_component_repository.go
new file mode 100644
index 0000000..d26c360
--- /dev/null
+++ b/internal/domains/product/repositories/ui_component_repository.go
@@ -0,0 +1,17 @@
+package repositories
+
+import (
+ "context"
+ "tyapi-server/internal/domains/product/entities"
+)
+
+// UIComponentRepository UI组件仓储接口
+type UIComponentRepository interface {
+ Create(ctx context.Context, component entities.UIComponent) (entities.UIComponent, error)
+ GetByID(ctx context.Context, id string) (*entities.UIComponent, error)
+ GetByCode(ctx context.Context, code string) (*entities.UIComponent, error)
+ List(ctx context.Context, filters map[string]interface{}) ([]entities.UIComponent, int64, error)
+ Update(ctx context.Context, component entities.UIComponent) error
+ Delete(ctx context.Context, id string) error
+ GetByCodes(ctx context.Context, codes []string) ([]entities.UIComponent, error)
+}
diff --git a/internal/infrastructure/database/repositories/product/gorm_component_report_repository.go b/internal/infrastructure/database/repositories/product/gorm_component_report_repository.go
new file mode 100644
index 0000000..13f3fb1
--- /dev/null
+++ b/internal/infrastructure/database/repositories/product/gorm_component_report_repository.go
@@ -0,0 +1,130 @@
+package repositories
+
+import (
+ "context"
+ "encoding/json"
+ "errors"
+
+ "tyapi-server/internal/domains/product/entities"
+ "tyapi-server/internal/domains/product/repositories"
+ "tyapi-server/internal/shared/database"
+
+ "go.uber.org/zap"
+ "gorm.io/gorm"
+)
+
+const (
+ ComponentReportDownloadsTable = "component_report_downloads"
+)
+
+type GormComponentReportRepository struct {
+ *database.CachedBaseRepositoryImpl
+}
+
+var _ repositories.ComponentReportRepository = (*GormComponentReportRepository)(nil)
+
+func NewGormComponentReportRepository(db *gorm.DB, logger *zap.Logger) repositories.ComponentReportRepository {
+ return &GormComponentReportRepository{
+ CachedBaseRepositoryImpl: database.NewCachedBaseRepositoryImpl(db, logger, ComponentReportDownloadsTable),
+ }
+}
+
+func (r *GormComponentReportRepository) CreateDownload(ctx context.Context, download *entities.ComponentReportDownload) (*entities.ComponentReportDownload, error) {
+ err := r.CreateEntity(ctx, download)
+ if err != nil {
+ return nil, err
+ }
+ return download, nil
+}
+
+func (r *GormComponentReportRepository) UpdateDownload(ctx context.Context, download *entities.ComponentReportDownload) error {
+ return r.UpdateEntity(ctx, download)
+}
+
+func (r *GormComponentReportRepository) GetDownloadByID(ctx context.Context, id string) (*entities.ComponentReportDownload, error) {
+ var download entities.ComponentReportDownload
+ err := r.SmartGetByID(ctx, id, &download)
+ if err != nil {
+ if errors.Is(err, gorm.ErrRecordNotFound) {
+ return nil, gorm.ErrRecordNotFound
+ }
+ return nil, err
+ }
+ return &download, nil
+}
+
+func (r *GormComponentReportRepository) GetUserDownloads(ctx context.Context, userID string, productID *string) ([]*entities.ComponentReportDownload, error) {
+ var downloads []entities.ComponentReportDownload
+ query := r.GetDB(ctx).Where("user_id = ? AND payment_status = ?", userID, "success")
+
+ if productID != nil && *productID != "" {
+ query = query.Where("product_id = ?", *productID)
+ }
+
+ err := query.Order("created_at DESC").Find(&downloads).Error
+ if err != nil {
+ return nil, err
+ }
+
+ result := make([]*entities.ComponentReportDownload, len(downloads))
+ for i := range downloads {
+ result[i] = &downloads[i]
+ }
+ return result, nil
+}
+
+func (r *GormComponentReportRepository) HasUserDownloaded(ctx context.Context, userID string, productCode string) (bool, error) {
+ var count int64
+ err := r.GetDB(ctx).Model(&entities.ComponentReportDownload{}).
+ Where("user_id = ? AND product_code = ? AND payment_status = ?", userID, productCode, "success").
+ Count(&count).Error
+ if err != nil {
+ return false, err
+ }
+ return count > 0, nil
+}
+
+func (r *GormComponentReportRepository) GetUserDownloadedProductCodes(ctx context.Context, userID string) ([]string, error) {
+ var downloads []entities.ComponentReportDownload
+ err := r.GetDB(ctx).
+ Select("DISTINCT sub_product_codes").
+ Where("user_id = ? AND payment_status = ?", userID, "success").
+ Find(&downloads).Error
+ if err != nil {
+ return nil, err
+ }
+
+ codesMap := make(map[string]bool)
+ for _, download := range downloads {
+ if download.SubProductCodes != "" {
+ var codes []string
+ if err := json.Unmarshal([]byte(download.SubProductCodes), &codes); err == nil {
+ for _, code := range codes {
+ codesMap[code] = true
+ }
+ }
+ }
+ // 也添加主产品编号
+ if download.ProductCode != "" {
+ codesMap[download.ProductCode] = true
+ }
+ }
+
+ codes := make([]string, 0, len(codesMap))
+ for code := range codesMap {
+ codes = append(codes, code)
+ }
+ return codes, nil
+}
+
+func (r *GormComponentReportRepository) GetDownloadByPaymentOrderID(ctx context.Context, orderID string) (*entities.ComponentReportDownload, error) {
+ var download entities.ComponentReportDownload
+ err := r.GetDB(ctx).Where("payment_order_id = ?", orderID).First(&download).Error
+ if err != nil {
+ if errors.Is(err, gorm.ErrRecordNotFound) {
+ return nil, gorm.ErrRecordNotFound
+ }
+ return nil, err
+ }
+ return &download, nil
+}
diff --git a/internal/infrastructure/database/repositories/product/gorm_product_ui_component_repository.go b/internal/infrastructure/database/repositories/product/gorm_product_ui_component_repository.go
new file mode 100644
index 0000000..c1b9648
--- /dev/null
+++ b/internal/infrastructure/database/repositories/product/gorm_product_ui_component_repository.go
@@ -0,0 +1,80 @@
+package repositories
+
+import (
+ "context"
+ "fmt"
+ "tyapi-server/internal/domains/product/entities"
+ "tyapi-server/internal/domains/product/repositories"
+
+ "gorm.io/gorm"
+)
+
+// GormProductUIComponentRepository 产品UI组件关联仓储实现
+type GormProductUIComponentRepository struct {
+ db *gorm.DB
+}
+
+// NewGormProductUIComponentRepository 创建产品UI组件关联仓储实例
+func NewGormProductUIComponentRepository(db *gorm.DB) repositories.ProductUIComponentRepository {
+ return &GormProductUIComponentRepository{db: db}
+}
+
+// Create 创建产品UI组件关联
+func (r *GormProductUIComponentRepository) Create(ctx context.Context, relation entities.ProductUIComponent) (entities.ProductUIComponent, error) {
+ if err := r.db.WithContext(ctx).Create(&relation).Error; err != nil {
+ return entities.ProductUIComponent{}, fmt.Errorf("创建产品UI组件关联失败: %w", err)
+ }
+ return relation, nil
+}
+
+// GetByProductID 根据产品ID获取UI组件关联列表
+func (r *GormProductUIComponentRepository) GetByProductID(ctx context.Context, productID string) ([]entities.ProductUIComponent, error) {
+ var relations []entities.ProductUIComponent
+ if err := r.db.WithContext(ctx).
+ Preload("UIComponent").
+ Where("product_id = ?", productID).
+ Find(&relations).Error; err != nil {
+ return nil, fmt.Errorf("获取产品UI组件关联列表失败: %w", err)
+ }
+ return relations, nil
+}
+
+// GetByUIComponentID 根据UI组件ID获取产品关联列表
+func (r *GormProductUIComponentRepository) GetByUIComponentID(ctx context.Context, componentID string) ([]entities.ProductUIComponent, error) {
+ var relations []entities.ProductUIComponent
+ if err := r.db.WithContext(ctx).
+ Preload("Product").
+ Where("ui_component_id = ?", componentID).
+ Find(&relations).Error; err != nil {
+ return nil, fmt.Errorf("获取UI组件产品关联列表失败: %w", err)
+ }
+ return relations, nil
+}
+
+// Delete 删除产品UI组件关联
+func (r *GormProductUIComponentRepository) Delete(ctx context.Context, id string) error {
+ if err := r.db.WithContext(ctx).Delete(&entities.ProductUIComponent{}, id).Error; err != nil {
+ return fmt.Errorf("删除产品UI组件关联失败: %w", err)
+ }
+ return nil
+}
+
+// DeleteByProductID 根据产品ID删除所有关联
+func (r *GormProductUIComponentRepository) DeleteByProductID(ctx context.Context, productID string) error {
+ if err := r.db.WithContext(ctx).Where("product_id = ?", productID).Delete(&entities.ProductUIComponent{}).Error; err != nil {
+ return fmt.Errorf("根据产品ID删除UI组件关联失败: %w", err)
+ }
+ return nil
+}
+
+// BatchCreate 批量创建产品UI组件关联
+func (r *GormProductUIComponentRepository) BatchCreate(ctx context.Context, relations []entities.ProductUIComponent) error {
+ if len(relations) == 0 {
+ return nil
+ }
+
+ if err := r.db.WithContext(ctx).CreateInBatches(relations, 100).Error; err != nil {
+ return fmt.Errorf("批量创建产品UI组件关联失败: %w", err)
+ }
+ return nil
+}
diff --git a/internal/infrastructure/database/repositories/product/gorm_ui_component_repository.go b/internal/infrastructure/database/repositories/product/gorm_ui_component_repository.go
new file mode 100644
index 0000000..c383477
--- /dev/null
+++ b/internal/infrastructure/database/repositories/product/gorm_ui_component_repository.go
@@ -0,0 +1,129 @@
+package repositories
+
+import (
+ "context"
+ "fmt"
+ "tyapi-server/internal/domains/product/entities"
+ "tyapi-server/internal/domains/product/repositories"
+
+ "gorm.io/gorm"
+)
+
+// GormUIComponentRepository UI组件仓储实现
+type GormUIComponentRepository struct {
+ db *gorm.DB
+}
+
+// NewGormUIComponentRepository 创建UI组件仓储实例
+func NewGormUIComponentRepository(db *gorm.DB) repositories.UIComponentRepository {
+ return &GormUIComponentRepository{db: db}
+}
+
+// Create 创建UI组件
+func (r *GormUIComponentRepository) Create(ctx context.Context, component entities.UIComponent) (entities.UIComponent, error) {
+ if err := r.db.WithContext(ctx).Create(&component).Error; err != nil {
+ return entities.UIComponent{}, fmt.Errorf("创建UI组件失败: %w", err)
+ }
+ return component, nil
+}
+
+// GetByID 根据ID获取UI组件
+func (r *GormUIComponentRepository) GetByID(ctx context.Context, id string) (*entities.UIComponent, error) {
+ var component entities.UIComponent
+ if err := r.db.WithContext(ctx).Where("id = ?", id).First(&component).Error; err != nil {
+ if err == gorm.ErrRecordNotFound {
+ return nil, nil
+ }
+ return nil, fmt.Errorf("获取UI组件失败: %w", err)
+ }
+ return &component, nil
+}
+
+// GetByCode 根据编码获取UI组件
+func (r *GormUIComponentRepository) GetByCode(ctx context.Context, code string) (*entities.UIComponent, error) {
+ var component entities.UIComponent
+ if err := r.db.WithContext(ctx).Where("component_code = ?", code).First(&component).Error; err != nil {
+ if err == gorm.ErrRecordNotFound {
+ return nil, nil
+ }
+ return nil, fmt.Errorf("获取UI组件失败: %w", err)
+ }
+ return &component, nil
+}
+
+// List 获取UI组件列表
+func (r *GormUIComponentRepository) List(ctx context.Context, filters map[string]interface{}) ([]entities.UIComponent, int64, error) {
+ var components []entities.UIComponent
+ var total int64
+
+ query := r.db.WithContext(ctx).Model(&entities.UIComponent{})
+
+ // 应用过滤条件
+ if isActive, ok := filters["is_active"]; ok {
+ query = query.Where("is_active = ?", isActive)
+ }
+
+ if keyword, ok := filters["keyword"]; ok && keyword != "" {
+ query = query.Where("component_name LIKE ? OR component_code LIKE ? OR description LIKE ?",
+ "%"+keyword.(string)+"%", "%"+keyword.(string)+"%", "%"+keyword.(string)+"%")
+ }
+
+ // 获取总数
+ if err := query.Count(&total).Error; err != nil {
+ return nil, 0, fmt.Errorf("获取UI组件总数失败: %w", err)
+ }
+
+ // 分页
+ if page, ok := filters["page"]; ok {
+ if pageSize, ok := filters["page_size"]; ok {
+ offset := (page.(int) - 1) * pageSize.(int)
+ query = query.Offset(offset).Limit(pageSize.(int))
+ }
+ }
+
+ // 排序
+ if sortBy, ok := filters["sort_by"]; ok {
+ if sortOrder, ok := filters["sort_order"]; ok {
+ query = query.Order(fmt.Sprintf("%s %s", sortBy, sortOrder))
+ }
+ } else {
+ query = query.Order("sort_order ASC, created_at DESC")
+ }
+
+ // 获取数据
+ if err := query.Find(&components).Error; err != nil {
+ return nil, 0, fmt.Errorf("获取UI组件列表失败: %w", err)
+ }
+
+ return components, total, nil
+}
+
+// Update 更新UI组件
+func (r *GormUIComponentRepository) Update(ctx context.Context, component entities.UIComponent) error {
+ if err := r.db.WithContext(ctx).Save(&component).Error; err != nil {
+ return fmt.Errorf("更新UI组件失败: %w", err)
+ }
+ return nil
+}
+
+// Delete 删除UI组件
+func (r *GormUIComponentRepository) Delete(ctx context.Context, id string) error {
+ if err := r.db.WithContext(ctx).Delete(&entities.UIComponent{}, id).Error; err != nil {
+ return fmt.Errorf("删除UI组件失败: %w", err)
+ }
+ return nil
+}
+
+// GetByCodes 根据编码列表获取UI组件
+func (r *GormUIComponentRepository) GetByCodes(ctx context.Context, codes []string) ([]entities.UIComponent, error) {
+ var components []entities.UIComponent
+ if len(codes) == 0 {
+ return components, nil
+ }
+
+ if err := r.db.WithContext(ctx).Where("component_code IN ?", codes).Find(&components).Error; err != nil {
+ return nil, fmt.Errorf("根据编码列表获取UI组件失败: %w", err)
+ }
+
+ return components, nil
+}
diff --git a/internal/infrastructure/external/storage/local_file_storage_service.go b/internal/infrastructure/external/storage/local_file_storage_service.go
new file mode 100644
index 0000000..c05c29a
--- /dev/null
+++ b/internal/infrastructure/external/storage/local_file_storage_service.go
@@ -0,0 +1,115 @@
+package storage
+
+import (
+ "context"
+ "fmt"
+ "io"
+ "mime/multipart"
+ "os"
+ "path/filepath"
+
+ "go.uber.org/zap"
+)
+
+// LocalFileStorageService 本地文件存储服务
+type LocalFileStorageService struct {
+ basePath string
+ logger *zap.Logger
+}
+
+// LocalFileStorageConfig 本地文件存储配置
+type LocalFileStorageConfig struct {
+ BasePath string `yaml:"base_path"`
+}
+
+// NewLocalFileStorageService 创建本地文件存储服务
+func NewLocalFileStorageService(basePath string, logger *zap.Logger) *LocalFileStorageService {
+ // 确保基础路径存在
+ if err := os.MkdirAll(basePath, 0755); err != nil {
+ logger.Error("创建基础存储目录失败", zap.Error(err), zap.String("path", basePath))
+ }
+
+ return &LocalFileStorageService{
+ basePath: basePath,
+ logger: logger,
+ }
+}
+
+// StoreFile 存储文件
+func (s *LocalFileStorageService) StoreFile(ctx context.Context, file io.Reader, filename string) (string, error) {
+ // 构建完整文件路径
+ fullPath := filepath.Join(s.basePath, filename)
+
+ // 确保目录存在
+ dir := filepath.Dir(fullPath)
+ if err := os.MkdirAll(dir, 0755); err != nil {
+ s.logger.Error("创建目录失败", zap.Error(err), zap.String("dir", dir))
+ return "", fmt.Errorf("创建目录失败: %w", err)
+ }
+
+ // 创建文件
+ dst, err := os.Create(fullPath)
+ if err != nil {
+ s.logger.Error("创建文件失败", zap.Error(err), zap.String("path", fullPath))
+ return "", fmt.Errorf("创建文件失败: %w", err)
+ }
+ defer dst.Close()
+
+ // 复制文件内容
+ if _, err := io.Copy(dst, file); err != nil {
+ s.logger.Error("写入文件失败", zap.Error(err), zap.String("path", fullPath))
+ // 删除部分写入的文件
+ _ = os.Remove(fullPath)
+ return "", fmt.Errorf("写入文件失败: %w", err)
+ }
+
+ s.logger.Info("文件存储成功", zap.String("path", fullPath))
+ return fullPath, nil
+}
+
+// StoreMultipartFile 存储multipart文件
+func (s *LocalFileStorageService) StoreMultipartFile(ctx context.Context, file *multipart.FileHeader, filename string) (string, error) {
+ src, err := file.Open()
+ if err != nil {
+ return "", fmt.Errorf("打开上传文件失败: %w", err)
+ }
+ defer src.Close()
+
+ return s.StoreFile(ctx, src, filename)
+}
+
+// GetFileURL 获取文件URL
+func (s *LocalFileStorageService) GetFileURL(ctx context.Context, filePath string) (string, error) {
+ // 检查文件是否存在
+ if _, err := os.Stat(filePath); os.IsNotExist(err) {
+ return "", fmt.Errorf("文件不存在: %s", filePath)
+ }
+
+ // 返回文件路径(在实际应用中,这里应该返回可访问的URL)
+ return filePath, nil
+}
+
+// DeleteFile 删除文件
+func (s *LocalFileStorageService) DeleteFile(ctx context.Context, filePath string) error {
+ if err := os.Remove(filePath); err != nil {
+ if os.IsNotExist(err) {
+ // 文件不存在,不视为错误
+ return nil
+ }
+ s.logger.Error("删除文件失败", zap.Error(err), zap.String("path", filePath))
+ return fmt.Errorf("删除文件失败: %w", err)
+ }
+
+ s.logger.Info("文件删除成功", zap.String("path", filePath))
+ return nil
+}
+
+// GetFileReader 获取文件读取器
+func (s *LocalFileStorageService) GetFileReader(ctx context.Context, filePath string) (io.ReadCloser, error) {
+ file, err := os.Open(filePath)
+ if err != nil {
+ return nil, fmt.Errorf("打开文件失败: %w", err)
+ }
+
+ return file, nil
+}
diff --git a/internal/infrastructure/external/storage/local_file_storage_service_impl.go b/internal/infrastructure/external/storage/local_file_storage_service_impl.go
new file mode 100644
index 0000000..d77744c
--- /dev/null
+++ b/internal/infrastructure/external/storage/local_file_storage_service_impl.go
@@ -0,0 +1,110 @@
+package storage
+
+import (
+ "context"
+ "fmt"
+ "io"
+ "mime/multipart"
+ "os"
+ "path/filepath"
+
+ "go.uber.org/zap"
+)
+
+// LocalFileStorageServiceImpl 本地文件存储服务实现
+type LocalFileStorageServiceImpl struct {
+ basePath string
+ logger *zap.Logger
+}
+
+// NewLocalFileStorageServiceImpl 创建本地文件存储服务实现
+func NewLocalFileStorageServiceImpl(basePath string, logger *zap.Logger) *LocalFileStorageServiceImpl {
+ // 确保基础路径存在
+ if err := os.MkdirAll(basePath, 0755); err != nil {
+ logger.Error("创建基础存储目录失败", zap.Error(err), zap.String("path", basePath))
+ }
+
+ return &LocalFileStorageServiceImpl{
+ basePath: basePath,
+ logger: logger,
+ }
+}
+
+// StoreFile 存储文件
+func (s *LocalFileStorageServiceImpl) StoreFile(ctx context.Context, file io.Reader, filename string) (string, error) {
+ // 构建完整文件路径
+ fullPath := filepath.Join(s.basePath, filename)
+
+ // 确保目录存在
+ dir := filepath.Dir(fullPath)
+ if err := os.MkdirAll(dir, 0755); err != nil {
+ s.logger.Error("创建目录失败", zap.Error(err), zap.String("dir", dir))
+ return "", fmt.Errorf("创建目录失败: %w", err)
+ }
+
+ // 创建文件
+ dst, err := os.Create(fullPath)
+ if err != nil {
+ s.logger.Error("创建文件失败", zap.Error(err), zap.String("path", fullPath))
+ return "", fmt.Errorf("创建文件失败: %w", err)
+ }
+ defer dst.Close()
+
+ // 复制文件内容
+ if _, err := io.Copy(dst, file); err != nil {
+ s.logger.Error("写入文件失败", zap.Error(err), zap.String("path", fullPath))
+ // 删除部分写入的文件
+ _ = os.Remove(fullPath)
+ return "", fmt.Errorf("写入文件失败: %w", err)
+ }
+
+ s.logger.Info("文件存储成功", zap.String("path", fullPath))
+ return fullPath, nil
+}
+
+// StoreMultipartFile 存储multipart文件
+func (s *LocalFileStorageServiceImpl) StoreMultipartFile(ctx context.Context, file *multipart.FileHeader, filename string) (string, error) {
+ src, err := file.Open()
+ if err != nil {
+ return "", fmt.Errorf("打开上传文件失败: %w", err)
+ }
+ defer src.Close()
+
+ return s.StoreFile(ctx, src, filename)
+}
+
+// GetFileURL 获取文件URL
+func (s *LocalFileStorageServiceImpl) GetFileURL(ctx context.Context, filePath string) (string, error) {
+ // 检查文件是否存在
+ if _, err := os.Stat(filePath); os.IsNotExist(err) {
+ return "", fmt.Errorf("文件不存在: %s", filePath)
+ }
+
+ // 返回文件路径(在实际应用中,这里应该返回可访问的URL)
+ return filePath, nil
+}
+
+// DeleteFile 删除文件
+func (s *LocalFileStorageServiceImpl) DeleteFile(ctx context.Context, filePath string) error {
+ if err := os.Remove(filePath); err != nil {
+ if os.IsNotExist(err) {
+ // 文件不存在,不视为错误
+ return nil
+ }
+ s.logger.Error("删除文件失败", zap.Error(err), zap.String("path", filePath))
+ return fmt.Errorf("删除文件失败: %w", err)
+ }
+
+ s.logger.Info("文件删除成功", zap.String("path", filePath))
+ return nil
+}
+
+// GetFileReader 获取文件读取器
+func (s *LocalFileStorageServiceImpl) GetFileReader(ctx context.Context, filePath string) (io.ReadCloser, error) {
+ file, err := os.Open(filePath)
+ if err != nil {
+ return nil, fmt.Errorf("打开文件失败: %w", err)
+ }
+
+ return file, nil
+}
diff --git a/internal/infrastructure/http/handlers/file_download_handler.go b/internal/infrastructure/http/handlers/file_download_handler.go
new file mode 100644
index 0000000..9fe7220
--- /dev/null
+++ b/internal/infrastructure/http/handlers/file_download_handler.go
@@ -0,0 +1,92 @@
+package handlers
+
+import (
+ "strings"
+
+ "github.com/gin-gonic/gin"
+ "go.uber.org/zap"
+
+ "tyapi-server/internal/application/product"
+ "tyapi-server/internal/shared/interfaces"
+)
+
+// FileDownloadHandler 文件下载处理器
+type FileDownloadHandler struct {
+ uiComponentAppService product.UIComponentApplicationService
+ responseBuilder interfaces.ResponseBuilder
+ logger *zap.Logger
+}
+
+// NewFileDownloadHandler 创建文件下载处理器
+func NewFileDownloadHandler(
+ uiComponentAppService product.UIComponentApplicationService,
+ responseBuilder interfaces.ResponseBuilder,
+ logger *zap.Logger,
+) *FileDownloadHandler {
+ return &FileDownloadHandler{
+ uiComponentAppService: uiComponentAppService,
+ responseBuilder: responseBuilder,
+ logger: logger,
+ }
+}
+
+// DownloadUIComponentFile 下载UI组件文件
+// @Summary 下载UI组件文件
+// @Description 下载UI组件文件
+// @Tags 文件下载
+// @Accept json
+// @Produce application/octet-stream
+// @Param id path string true "UI组件ID"
+// @Success 200 {file} file "文件内容"
+// @Failure 400 {object} interfaces.Response "请求参数错误"
+// @Failure 404 {object} interfaces.Response "UI组件不存在或文件不存在"
+// @Failure 500 {object} interfaces.Response "服务器内部错误"
+// @Router /api/v1/ui-components/{id}/download [get]
+func (h *FileDownloadHandler) DownloadUIComponentFile(c *gin.Context) {
+ id := c.Param("id")
+ if id == "" {
+ h.responseBuilder.BadRequest(c, "UI组件ID不能为空")
+ return
+ }
+
+ // 获取UI组件信息
+ component, err := h.uiComponentAppService.GetUIComponentByID(c.Request.Context(), id)
+ if err != nil {
+ h.logger.Error("获取UI组件失败", zap.Error(err), zap.String("id", id))
+ h.responseBuilder.InternalError(c, "获取UI组件失败")
+ return
+ }
+
+ if component == nil {
+ h.responseBuilder.NotFound(c, "UI组件不存在")
+ return
+ }
+
+ if component.FilePath == nil {
+ h.responseBuilder.NotFound(c, "UI组件文件不存在")
+ return
+ }
+
+ // 获取文件路径
+ filePath, err := h.uiComponentAppService.DownloadUIComponentFile(c.Request.Context(), id)
+ if err != nil {
+ h.logger.Error("获取UI组件文件路径失败", zap.Error(err), zap.String("id", id))
+ h.responseBuilder.InternalError(c, "获取UI组件文件路径失败")
+ return
+ }
+
+ // 设置下载文件名
+ fileName := component.ComponentName
+ if !strings.HasSuffix(strings.ToLower(fileName), ".zip") {
+ fileName += ".zip"
+ }
+
+ // 设置响应头
+ c.Header("Content-Description", "File Transfer")
+ c.Header("Content-Transfer-Encoding", "binary")
+ c.Header("Content-Disposition", "attachment; filename="+fileName)
+ c.Header("Content-Type", "application/octet-stream")
+
+ // 发送文件
+ c.File(filePath)
+}
diff --git a/internal/infrastructure/http/handlers/ui_component_handler.go b/internal/infrastructure/http/handlers/ui_component_handler.go
new file mode 100644
index 0000000..c43a71b
--- /dev/null
+++ b/internal/infrastructure/http/handlers/ui_component_handler.go
@@ -0,0 +1,551 @@
+package handlers
+
+import (
+ "fmt"
+ "strconv"
+
+ "github.com/gin-gonic/gin"
+ "go.uber.org/zap"
+
+ "tyapi-server/internal/application/product"
+ "tyapi-server/internal/shared/interfaces"
+)
+
+// UIComponentHandler UI组件HTTP处理器
+type UIComponentHandler struct {
+ uiComponentAppService product.UIComponentApplicationService
+ responseBuilder interfaces.ResponseBuilder
+ validator interfaces.RequestValidator
+ logger *zap.Logger
+}
+
+// NewUIComponentHandler 创建UI组件HTTP处理器
+func NewUIComponentHandler(
+ uiComponentAppService product.UIComponentApplicationService,
+ responseBuilder interfaces.ResponseBuilder,
+ validator interfaces.RequestValidator,
+ logger *zap.Logger,
+) *UIComponentHandler {
+ return &UIComponentHandler{
+ uiComponentAppService: uiComponentAppService,
+ responseBuilder: responseBuilder,
+ validator: validator,
+ logger: logger,
+ }
+}
+
+// CreateUIComponent 创建UI组件
+// @Summary 创建UI组件
+// @Description 管理员创建新的UI组件
+// @Tags UI组件管理
+// @Accept json
+// @Produce json
+// @Param request body product.CreateUIComponentRequest true "创建UI组件请求"
+// @Success 200 {object} interfaces.Response{data=entities.UIComponent} "创建成功"
+// @Failure 400 {object} interfaces.Response "请求参数错误"
+// @Failure 500 {object} interfaces.Response "服务器内部错误"
+// @Router /api/v1/admin/ui-components [post]
+func (h *UIComponentHandler) CreateUIComponent(c *gin.Context) {
+ var req product.CreateUIComponentRequest
+
+ // 一次性读取请求体并绑定到结构体
+ if err := c.ShouldBindJSON(&req); err != nil {
+ h.logger.Error("验证创建UI组件请求失败", zap.Error(err))
+ h.responseBuilder.BadRequest(c, fmt.Sprintf("请求参数错误: %v", err))
+ return
+ }
+
+ // 使用结构体数据记录日志
+ h.logger.Info("创建UI组件请求数据",
+ zap.String("component_code", req.ComponentCode),
+ zap.String("component_name", req.ComponentName),
+ zap.String("description", req.Description),
+ zap.String("version", req.Version),
+ zap.Bool("is_active", req.IsActive),
+ zap.Int("sort_order", req.SortOrder))
+
+ component, err := h.uiComponentAppService.CreateUIComponent(c.Request.Context(), req)
+ if err != nil {
+ h.logger.Error("创建UI组件失败", zap.Error(err), zap.String("component_code", req.ComponentCode))
+ if err == product.ErrComponentCodeAlreadyExists {
+ h.responseBuilder.BadRequest(c, "UI组件编码已存在")
+ return
+ }
+ h.responseBuilder.InternalError(c, fmt.Sprintf("创建UI组件失败: %v", err))
+ return
+ }
+
+ h.responseBuilder.Success(c, component)
+}
+
+// CreateUIComponentWithFile 创建UI组件并上传文件
+// @Summary 创建UI组件并上传文件
+// @Description 管理员创建新的UI组件并同时上传文件
+// @Tags UI组件管理
+// @Accept multipart/form-data
+// @Produce json
+// @Param component_code formData string true "组件编码"
+// @Param component_name formData string true "组件名称"
+// @Param description formData string false "组件描述"
+// @Param version formData string false "组件版本"
+// @Param is_active formData bool false "是否启用"
+// @Param sort_order formData int false "排序"
+// @Param file formData file true "组件文件"
+// @Success 200 {object} interfaces.Response{data=entities.UIComponent} "创建成功"
+// @Failure 400 {object} interfaces.Response "请求参数错误"
+// @Failure 500 {object} interfaces.Response "服务器内部错误"
+// @Router /api/v1/admin/ui-components/create-with-file [post]
+func (h *UIComponentHandler) CreateUIComponentWithFile(c *gin.Context) {
+ // 创建请求结构体
+ var req product.CreateUIComponentRequest
+
+ // 从表单数据中获取组件信息
+ req.ComponentCode = c.PostForm("component_code")
+ req.ComponentName = c.PostForm("component_name")
+ req.Description = c.PostForm("description")
+ req.Version = c.PostForm("version")
+ req.IsActive = c.PostForm("is_active") == "true"
+
+ if sortOrderStr := c.PostForm("sort_order"); sortOrderStr != "" {
+ if sortOrder, err := strconv.Atoi(sortOrderStr); err == nil {
+ req.SortOrder = sortOrder
+ }
+ }
+
+ // 验证必需字段
+ if req.ComponentCode == "" {
+ h.responseBuilder.BadRequest(c, "组件编码不能为空")
+ return
+ }
+ if req.ComponentName == "" {
+ h.responseBuilder.BadRequest(c, "组件名称不能为空")
+ return
+ }
+
+ // 获取上传的文件
+ form, err := c.MultipartForm()
+ if err != nil {
+ h.logger.Error("获取表单数据失败", zap.Error(err))
+ h.responseBuilder.BadRequest(c, "获取表单数据失败")
+ return
+ }
+
+ files := form.File["files"]
+ if len(files) == 0 {
+ h.responseBuilder.BadRequest(c, "请上传组件文件")
+ return
+ }
+
+ // 检查文件大小(100MB)
+ for _, fileHeader := range files {
+ if fileHeader.Size > 100*1024*1024 {
+ h.responseBuilder.BadRequest(c, fmt.Sprintf("文件 %s 大小不能超过100MB", fileHeader.Filename))
+ return
+ }
+ }
+
+ // 获取路径信息
+ paths := c.PostFormArray("paths")
+
+ // 记录请求日志
+ h.logger.Info("创建UI组件并上传文件请求",
+ zap.String("component_code", req.ComponentCode),
+ zap.String("component_name", req.ComponentName),
+ zap.String("description", req.Description),
+ zap.String("version", req.Version),
+ zap.Bool("is_active", req.IsActive),
+ zap.Int("sort_order", req.SortOrder),
+ zap.Int("files_count", len(files)),
+ zap.Strings("paths", paths))
+
+ // 调用应用服务创建组件并上传文件
+ component, err := h.uiComponentAppService.CreateUIComponentWithFilesAndPaths(c.Request.Context(), req, files, paths)
+ if err != nil {
+ h.logger.Error("创建UI组件并上传文件失败", zap.Error(err), zap.String("component_code", req.ComponentCode))
+ if err == product.ErrComponentCodeAlreadyExists {
+ h.responseBuilder.BadRequest(c, "UI组件编码已存在")
+ return
+ }
+ h.responseBuilder.InternalError(c, fmt.Sprintf("创建UI组件并上传文件失败: %v", err))
+ return
+ }
+
+ h.responseBuilder.Success(c, component)
+}
+
+// GetUIComponent 获取UI组件详情
+// @Summary 获取UI组件详情
+// @Description 根据ID获取UI组件详情
+// @Tags UI组件管理
+// @Accept json
+// @Produce json
+// @Param id path string true "UI组件ID"
+// @Success 200 {object} interfaces.Response{data=entities.UIComponent} "获取成功"
+// @Failure 400 {object} interfaces.Response "请求参数错误"
+// @Failure 404 {object} interfaces.Response "UI组件不存在"
+// @Failure 500 {object} interfaces.Response "服务器内部错误"
+// @Router /api/v1/admin/ui-components/{id} [get]
+func (h *UIComponentHandler) GetUIComponent(c *gin.Context) {
+ id := c.Param("id")
+ if id == "" {
+ h.responseBuilder.BadRequest(c, "UI组件ID不能为空")
+ return
+ }
+
+ component, err := h.uiComponentAppService.GetUIComponentByID(c.Request.Context(), id)
+ if err != nil {
+ h.logger.Error("获取UI组件失败", zap.Error(err), zap.String("id", id))
+ h.responseBuilder.InternalError(c, "获取UI组件失败")
+ return
+ }
+
+ if component == nil {
+ h.responseBuilder.NotFound(c, "UI组件不存在")
+ return
+ }
+
+ h.responseBuilder.Success(c, component)
+}
+
+// UpdateUIComponent 更新UI组件
+// @Summary 更新UI组件
+// @Description 更新UI组件信息
+// @Tags UI组件管理
+// @Accept json
+// @Produce json
+// @Param id path string true "UI组件ID"
+// @Param request body product.UpdateUIComponentRequest true "更新UI组件请求"
+// @Success 200 {object} interfaces.Response "更新成功"
+// @Failure 400 {object} interfaces.Response "请求参数错误"
+// @Failure 404 {object} interfaces.Response "UI组件不存在"
+// @Failure 500 {object} interfaces.Response "服务器内部错误"
+// @Router /api/v1/admin/ui-components/{id} [put]
+func (h *UIComponentHandler) UpdateUIComponent(c *gin.Context) {
+ id := c.Param("id")
+ if id == "" {
+ h.responseBuilder.BadRequest(c, "UI组件ID不能为空")
+ return
+ }
+
+ var req product.UpdateUIComponentRequest
+
+ // 设置ID
+ req.ID = id
+
+ // 验证请求
+ if err := h.validator.Validate(c, &req); err != nil {
+ h.logger.Error("验证更新UI组件请求失败", zap.Error(err))
+ return
+ }
+
+ err := h.uiComponentAppService.UpdateUIComponent(c.Request.Context(), req)
+ if err != nil {
+ h.logger.Error("更新UI组件失败", zap.Error(err), zap.String("id", id))
+ if err == product.ErrComponentNotFound {
+ h.responseBuilder.NotFound(c, "UI组件不存在")
+ return
+ }
+ if err == product.ErrComponentCodeAlreadyExists {
+ h.responseBuilder.BadRequest(c, "UI组件编码已存在")
+ return
+ }
+ h.responseBuilder.InternalError(c, "更新UI组件失败")
+ return
+ }
+
+ h.responseBuilder.Success(c, nil)
+}
+
+// DeleteUIComponent 删除UI组件
+// @Summary 删除UI组件
+// @Description 删除UI组件
+// @Tags UI组件管理
+// @Accept json
+// @Produce json
+// @Param id path string true "UI组件ID"
+// @Success 200 {object} interfaces.Response "删除成功"
+// @Failure 400 {object} interfaces.Response "请求参数错误"
+// @Failure 404 {object} interfaces.Response "UI组件不存在"
+// @Failure 500 {object} interfaces.Response "服务器内部错误"
+// @Router /api/v1/admin/ui-components/{id} [delete]
+func (h *UIComponentHandler) DeleteUIComponent(c *gin.Context) {
+ id := c.Param("id")
+ if id == "" {
+ h.responseBuilder.BadRequest(c, "UI组件ID不能为空")
+ return
+ }
+
+ err := h.uiComponentAppService.DeleteUIComponent(c.Request.Context(), id)
+ if err != nil {
+ h.logger.Error("删除UI组件失败", zap.Error(err), zap.String("id", id))
+ if err == product.ErrComponentNotFound {
+ h.responseBuilder.NotFound(c, "UI组件不存在")
+ return
+ }
+ h.responseBuilder.InternalError(c, "删除UI组件失败")
+ return
+ }
+
+ h.responseBuilder.Success(c, nil)
+}
+
+// ListUIComponents 获取UI组件列表
+// @Summary 获取UI组件列表
+// @Description 获取UI组件列表,支持分页和筛选
+// @Tags UI组件管理
+// @Accept json
+// @Produce json
+// @Param page query int false "页码" default(1)
+// @Param page_size query int false "每页数量" default(10)
+// @Param keyword query string false "关键词搜索"
+// @Param is_active query bool false "是否启用"
+// @Param sort_by query string false "排序字段" default(sort_order)
+// @Param sort_order query string false "排序方向" default(asc)
+// @Success 200 {object} interfaces.Response{data=product.ListUIComponentsResponse} "获取成功"
+// @Failure 500 {object} interfaces.Response "服务器内部错误"
+// @Router /api/v1/admin/ui-components [get]
+func (h *UIComponentHandler) ListUIComponents(c *gin.Context) {
+ // 解析查询参数
+ req := product.ListUIComponentsRequest{}
+
+ if pageStr := c.Query("page"); pageStr != "" {
+ if page, err := strconv.Atoi(pageStr); err == nil {
+ req.Page = page
+ }
+ }
+
+ if pageSizeStr := c.Query("page_size"); pageSizeStr != "" {
+ if pageSize, err := strconv.Atoi(pageSizeStr); err == nil {
+ req.PageSize = pageSize
+ }
+ }
+
+ req.Keyword = c.Query("keyword")
+
+ if isActiveStr := c.Query("is_active"); isActiveStr != "" {
+ if isActive, err := strconv.ParseBool(isActiveStr); err == nil {
+ req.IsActive = &isActive
+ }
+ }
+
+ req.SortBy = c.DefaultQuery("sort_by", "sort_order")
+ req.SortOrder = c.DefaultQuery("sort_order", "asc")
+
+ response, err := h.uiComponentAppService.ListUIComponents(c.Request.Context(), req)
+ if err != nil {
+ h.logger.Error("获取UI组件列表失败", zap.Error(err))
+ h.responseBuilder.InternalError(c, "获取UI组件列表失败")
+ return
+ }
+
+ h.responseBuilder.Success(c, response)
+}
+
+// UploadUIComponentFile 上传UI组件文件
+// @Summary 上传UI组件文件
+// @Description 上传UI组件文件
+// @Tags UI组件管理
+// @Accept multipart/form-data
+// @Produce json
+// @Param id path string true "UI组件ID"
+// @Param file formData file true "UI组件文件(ZIP格式)"
+// @Success 200 {object} interfaces.Response{data=string} "上传成功,返回文件路径"
+// @Failure 400 {object} interfaces.Response "请求参数错误"
+// @Failure 404 {object} interfaces.Response "UI组件不存在"
+// @Failure 500 {object} interfaces.Response "服务器内部错误"
+// @Router /api/v1/admin/ui-components/{id}/upload [post]
+func (h *UIComponentHandler) UploadUIComponentFile(c *gin.Context) {
+ id := c.Param("id")
+ if id == "" {
+ h.responseBuilder.BadRequest(c, "UI组件ID不能为空")
+ return
+ }
+
+ // 获取上传的文件
+ file, err := c.FormFile("file")
+ if err != nil {
+ h.logger.Error("获取上传文件失败", zap.Error(err))
+ h.responseBuilder.BadRequest(c, "获取上传文件失败")
+ return
+ }
+
+ // 检查文件大小(100MB)
+ if file.Size > 100*1024*1024 {
+ h.responseBuilder.BadRequest(c, "文件大小不能超过100MB")
+ return
+ }
+
+ filePath, err := h.uiComponentAppService.UploadUIComponentFile(c.Request.Context(), id, file)
+ if err != nil {
+ h.logger.Error("上传UI组件文件失败", zap.Error(err), zap.String("id", id))
+ if err == product.ErrComponentNotFound {
+ h.responseBuilder.NotFound(c, "UI组件不存在")
+ return
+ }
+ if err == product.ErrInvalidFileType {
+ h.responseBuilder.BadRequest(c, "文件类型错误")
+ return
+ }
+ h.responseBuilder.InternalError(c, "上传UI组件文件失败")
+ return
+ }
+
+ h.responseBuilder.Success(c, filePath)
+}
+
+// UploadAndExtractUIComponentFile 上传并解压UI组件文件
+// @Summary 上传并解压UI组件文件
+// @Description 上传文件并自动解压到组件文件夹(仅ZIP文件支持解压)
+// @Tags UI组件管理
+// @Accept multipart/form-data
+// @Produce json
+// @Param id path string true "UI组件ID"
+// @Param file formData file true "UI组件文件(任意格式,ZIP格式支持自动解压)"
+// @Success 200 {object} interfaces.Response "上传成功"
+// @Failure 400 {object} interfaces.Response "请求参数错误"
+// @Failure 404 {object} interfaces.Response "UI组件不存在"
+// @Failure 500 {object} interfaces.Response "服务器内部错误"
+// @Router /api/v1/admin/ui-components/{id}/upload-extract [post]
+func (h *UIComponentHandler) UploadAndExtractUIComponentFile(c *gin.Context) {
+ id := c.Param("id")
+ if id == "" {
+ h.responseBuilder.BadRequest(c, "UI组件ID不能为空")
+ return
+ }
+
+ // 获取上传的文件
+ file, err := c.FormFile("file")
+ if err != nil {
+ h.logger.Error("获取上传文件失败", zap.Error(err))
+ h.responseBuilder.BadRequest(c, "获取上传文件失败")
+ return
+ }
+
+ // 检查文件大小(100MB)
+ if file.Size > 100*1024*1024 {
+ h.responseBuilder.BadRequest(c, "文件大小不能超过100MB")
+ return
+ }
+
+ err = h.uiComponentAppService.UploadAndExtractUIComponentFile(c.Request.Context(), id, file)
+ if err != nil {
+ h.logger.Error("上传并解压UI组件文件失败", zap.Error(err), zap.String("id", id))
+ if err == product.ErrComponentNotFound {
+ h.responseBuilder.NotFound(c, "UI组件不存在")
+ return
+ }
+ if err == product.ErrInvalidFileType {
+ h.responseBuilder.BadRequest(c, "文件类型错误")
+ return
+ }
+ h.responseBuilder.InternalError(c, "上传并解压UI组件文件失败")
+ return
+ }
+
+ h.responseBuilder.Success(c, nil)
+}
+
+// GetUIComponentFolderContent 获取UI组件文件夹内容
+// @Summary 获取UI组件文件夹内容
+// @Description 获取UI组件文件夹内容
+// @Tags UI组件管理
+// @Accept json
+// @Produce json
+// @Param id path string true "UI组件ID"
+// @Success 200 {object} interfaces.Response{data=[]FileInfo} "获取成功"
+// @Failure 400 {object} interfaces.Response "请求参数错误"
+// @Failure 404 {object} interfaces.Response "UI组件不存在"
+// @Failure 500 {object} interfaces.Response "服务器内部错误"
+// @Router /api/v1/admin/ui-components/{id}/folder-content [get]
+func (h *UIComponentHandler) GetUIComponentFolderContent(c *gin.Context) {
+ id := c.Param("id")
+ if id == "" {
+ h.responseBuilder.BadRequest(c, "UI组件ID不能为空")
+ return
+ }
+
+ files, err := h.uiComponentAppService.GetUIComponentFolderContent(c.Request.Context(), id)
+ if err != nil {
+ h.logger.Error("获取UI组件文件夹内容失败", zap.Error(err), zap.String("id", id))
+ if err == product.ErrComponentNotFound {
+ h.responseBuilder.NotFound(c, "UI组件不存在")
+ return
+ }
+ h.responseBuilder.InternalError(c, "获取UI组件文件夹内容失败")
+ return
+ }
+
+ h.responseBuilder.Success(c, files)
+}
+
+// DeleteUIComponentFolder 删除UI组件文件夹
+// @Summary 删除UI组件文件夹
+// @Description 删除UI组件文件夹
+// @Tags UI组件管理
+// @Accept json
+// @Produce json
+// @Param id path string true "UI组件ID"
+// @Success 200 {object} interfaces.Response "删除成功"
+// @Failure 400 {object} interfaces.Response "请求参数错误"
+// @Failure 404 {object} interfaces.Response "UI组件不存在"
+// @Failure 500 {object} interfaces.Response "服务器内部错误"
+// @Router /api/v1/admin/ui-components/{id}/folder [delete]
+func (h *UIComponentHandler) DeleteUIComponentFolder(c *gin.Context) {
+ id := c.Param("id")
+ if id == "" {
+ h.responseBuilder.BadRequest(c, "UI组件ID不能为空")
+ return
+ }
+
+ err := h.uiComponentAppService.DeleteUIComponentFolder(c.Request.Context(), id)
+ if err != nil {
+ h.logger.Error("删除UI组件文件夹失败", zap.Error(err), zap.String("id", id))
+ if err == product.ErrComponentNotFound {
+ h.responseBuilder.NotFound(c, "UI组件不存在")
+ return
+ }
+ h.responseBuilder.InternalError(c, "删除UI组件文件夹失败")
+ return
+ }
+
+ h.responseBuilder.Success(c, nil)
+}
+
+// DownloadUIComponentFile 下载UI组件文件
+// @Summary 下载UI组件文件
+// @Description 下载UI组件文件
+// @Tags UI组件管理
+// @Accept json
+// @Produce application/octet-stream
+// @Param id path string true "UI组件ID"
+// @Success 200 {file} file "文件内容"
+// @Failure 400 {object} interfaces.Response "请求参数错误"
+// @Failure 404 {object} interfaces.Response "UI组件不存在或文件不存在"
+// @Failure 500 {object} interfaces.Response "服务器内部错误"
+// @Router /api/v1/admin/ui-components/{id}/download [get]
+func (h *UIComponentHandler) DownloadUIComponentFile(c *gin.Context) {
+ id := c.Param("id")
+ if id == "" {
+ h.responseBuilder.BadRequest(c, "UI组件ID不能为空")
+ return
+ }
+
+ filePath, err := h.uiComponentAppService.DownloadUIComponentFile(c.Request.Context(), id)
+ if err != nil {
+ h.logger.Error("下载UI组件文件失败", zap.Error(err), zap.String("id", id))
+ if err == product.ErrComponentNotFound {
+ h.responseBuilder.NotFound(c, "UI组件不存在")
+ return
+ }
+ if err == product.ErrComponentFileNotFound {
+ h.responseBuilder.NotFound(c, "UI组件文件不存在")
+ return
+ }
+ h.responseBuilder.InternalError(c, "下载UI组件文件失败")
+ return
+ }
+
+ // 这里应该实现文件下载逻辑,返回文件内容
+ // 由于我们使用的是本地文件存储,可以直接返回文件
+ c.File(filePath)
+}
diff --git a/internal/infrastructure/http/routes/product_routes.go b/internal/infrastructure/http/routes/product_routes.go
index 6392ed1..24be8d2 100644
--- a/internal/infrastructure/http/routes/product_routes.go
+++ b/internal/infrastructure/http/routes/product_routes.go
@@ -2,6 +2,7 @@ package routes
import (
"tyapi-server/internal/infrastructure/http/handlers"
+ component_report "tyapi-server/internal/shared/component_report"
sharedhttp "tyapi-server/internal/shared/http"
"tyapi-server/internal/shared/middleware"
@@ -11,7 +12,7 @@ import (
// ProductRoutes 产品路由
type ProductRoutes struct {
productHandler *handlers.ProductHandler
- componentReportHandler *handlers.ComponentReportHandler
+ componentReportHandler *component_report.ComponentReportHandler
auth *middleware.JWTAuthMiddleware
optionalAuth *middleware.OptionalAuthMiddleware
logger *zap.Logger
@@ -20,7 +21,7 @@ type ProductRoutes struct {
// NewProductRoutes 创建产品路由
func NewProductRoutes(
productHandler *handlers.ProductHandler,
- componentReportHandler *handlers.ComponentReportHandler,
+ componentReportHandler *component_report.ComponentReportHandler,
auth *middleware.JWTAuthMiddleware,
optionalAuth *middleware.OptionalAuthMiddleware,
logger *zap.Logger,
@@ -58,19 +59,24 @@ func (r *ProductRoutes) Register(router *sharedhttp.GinRouter) {
// 订阅产品(需要认证)
products.POST("/:id/subscribe", r.auth.Handle(), r.productHandler.SubscribeProduct)
+ }
- // 组件报告相关路由(需要认证)
- componentReport := products.Group("/:id/component-report", r.auth.Handle())
- {
- // 获取报告下载信息
- componentReport.GET("/info", r.componentReportHandler.GetReportDownloadInfo)
-
- // 创建支付订单(暂时注释,后续实现)
- // componentReport.POST("/create-order", r.componentReportHandler.CreateReportPaymentOrder)
-
- // 下载报告文件
- componentReport.GET("/download/:downloadId", r.componentReportHandler.DownloadReport)
- }
+ // 组件报告 - 需要认证
+ componentReport := engine.Group("/api/v1/component-report", r.auth.Handle())
+ {
+ // 生成并下载 example.json 文件
+ componentReport.POST("/download-example-json", r.componentReportHandler.DownloadExampleJSON)
+ // 生成并下载示例报告ZIP文件
+ componentReport.POST("/generate-and-download", r.componentReportHandler.GenerateAndDownloadZip)
+ }
+
+ // 产品组件报告相关接口 - 需要认证
+ componentReportGroup := products.Group("/:id/component-report", r.auth.Handle())
+ {
+ componentReportGroup.GET("/check", r.componentReportHandler.CheckDownloadAvailability)
+ componentReportGroup.GET("/info", r.componentReportHandler.GetDownloadInfo)
+ componentReportGroup.POST("/create-order", r.componentReportHandler.CreatePaymentOrder)
+ componentReportGroup.GET("/check-payment/:orderId", r.componentReportHandler.CheckPaymentStatus)
}
// 分类 - 公开接口
@@ -103,9 +109,6 @@ func (r *ProductRoutes) Register(router *sharedhttp.GinRouter) {
// 取消订阅
subscriptions.POST("/:id/cancel", r.productHandler.CancelMySubscription)
}
-
- // 我的组件报告下载历史
- my.GET("/component-reports", r.componentReportHandler.GetUserDownloadHistory)
}
r.logger.Info("产品路由注册完成")
diff --git a/internal/infrastructure/http/routes/ui_component_routes.go b/internal/infrastructure/http/routes/ui_component_routes.go
new file mode 100644
index 0000000..d00241c
--- /dev/null
+++ b/internal/infrastructure/http/routes/ui_component_routes.go
@@ -0,0 +1,48 @@
+package routes
+
+import (
+ "github.com/gin-gonic/gin"
+ "go.uber.org/zap"
+
+ "tyapi-server/internal/infrastructure/http/handlers"
+ "tyapi-server/internal/shared/interfaces"
+)
+
+// UIComponentRoutes UI组件路由
+type UIComponentRoutes struct {
+ uiComponentHandler *handlers.UIComponentHandler
+ logger *zap.Logger
+}
+
+// NewUIComponentRoutes 创建UI组件路由
+func NewUIComponentRoutes(
+ uiComponentHandler *handlers.UIComponentHandler,
+ logger *zap.Logger,
+) *UIComponentRoutes {
+ return &UIComponentRoutes{
+ uiComponentHandler: uiComponentHandler,
+ logger: logger,
+ }
+}
+
+// RegisterRoutes 注册UI组件路由
+func (r *UIComponentRoutes) RegisterRoutes(router *gin.RouterGroup, authMiddleware interfaces.Middleware) {
+ uiComponentGroup := router.Group("/ui-components")
+ uiComponentGroup.Use(authMiddleware.Handle())
+ {
+ // UI组件管理
+ uiComponentGroup.POST("", r.uiComponentHandler.CreateUIComponent) // 创建UI组件
+ uiComponentGroup.POST("/create-with-file", r.uiComponentHandler.CreateUIComponentWithFile) // 创建UI组件并上传文件
+ uiComponentGroup.GET("", r.uiComponentHandler.ListUIComponents) // 获取UI组件列表
+ uiComponentGroup.GET("/:id", r.uiComponentHandler.GetUIComponent) // 获取UI组件详情
+ uiComponentGroup.PUT("/:id", r.uiComponentHandler.UpdateUIComponent) // 更新UI组件
+ uiComponentGroup.DELETE("/:id", r.uiComponentHandler.DeleteUIComponent) // 删除UI组件
+
+ // 文件操作
+ uiComponentGroup.POST("/:id/upload", r.uiComponentHandler.UploadUIComponentFile) // 上传UI组件文件
+ uiComponentGroup.POST("/:id/upload-extract", r.uiComponentHandler.UploadAndExtractUIComponentFile) // 上传并解压UI组件文件
+ uiComponentGroup.GET("/:id/folder-content", r.uiComponentHandler.GetUIComponentFolderContent) // 获取UI组件文件夹内容
+ uiComponentGroup.DELETE("/:id/folder", r.uiComponentHandler.DeleteUIComponentFolder) // 删除UI组件文件夹
+ uiComponentGroup.GET("/:id/download", r.uiComponentHandler.DownloadUIComponentFile) // 下载UI组件文件
+ }
+}
diff --git a/internal/shared/component_report/README.md b/internal/shared/component_report/README.md
new file mode 100644
index 0000000..5d13566
--- /dev/null
+++ b/internal/shared/component_report/README.md
@@ -0,0 +1,204 @@
+# 组件报告生成服务
+
+这个服务用于生成产品示例报告的 `example.json` 文件,并打包成 ZIP 文件供下载。
+
+## 功能概述
+
+1. **生成 example.json 文件**:根据组合包子产品的响应示例数据生成符合格式要求的 JSON 文件
+2. **打包 ZIP 文件**:将生成的 `example.json` 文件打包成 ZIP 格式
+3. **HTTP 接口**:提供 HTTP 接口用于生成和下载文件
+
+## 文件结构
+
+```
+component_report/
+├── example_json_generator.go # 示例JSON生成器
+├── zip_generator.go # ZIP文件生成器
+├── handler.go # HTTP处理器
+└── README.md # 说明文档
+```
+
+## 使用方法
+
+### 1. 直接使用生成器
+
+```go
+// 创建生成器
+exampleJSONGenerator := component_report.NewExampleJSONGenerator(
+ productRepo,
+ docRepo,
+ apiConfigRepo,
+ logger,
+)
+
+// 生成 example.json
+jsonData, err := exampleJSONGenerator.GenerateExampleJSON(
+ ctx,
+ productID, // 产品ID(可以是组合包或单品)
+ subProductCodes, // 子产品编号列表(可选,如果为空则处理所有子产品)
+)
+```
+
+### 2. 生成 ZIP 文件
+
+```go
+// 创建ZIP生成器
+zipGenerator := component_report.NewZipGenerator(logger)
+
+// 生成ZIP文件
+zipPath, err := zipGenerator.GenerateZipFile(
+ ctx,
+ productID,
+ subProductCodes,
+ exampleJSONGenerator,
+ outputPath, // 输出路径(可选,如果为空则使用默认路径)
+)
+```
+
+### 3. 使用 HTTP 接口
+
+#### 生成 example.json
+
+```http
+POST /api/v1/component-report/generate-example-json
+Content-Type: application/json
+
+{
+ "product_id": "产品ID",
+ "sub_product_codes": ["子产品编号1", "子产品编号2"] // 可选
+}
+```
+
+响应:
+
+```json
+{
+ "product_id": "产品ID",
+ "json_content": "生成的JSON内容",
+ "json_size": 1234
+}
+```
+
+#### 生成 ZIP 文件
+
+```http
+POST /api/v1/component-report/generate-zip
+Content-Type: application/json
+
+{
+ "product_id": "产品ID",
+ "sub_product_codes": ["子产品编号1", "子产品编号2"], // 可选
+ "output_path": "自定义输出路径" // 可选
+}
+```
+
+响应:
+
+```json
+{
+ "code": 200,
+ "message": "ZIP文件生成成功",
+ "zip_path": "storage/component-reports/xxx_example.json.zip",
+ "file_size": 12345,
+ "file_name": "xxx_example.json.zip"
+}
+```
+
+#### 生成并下载 ZIP 文件
+
+```http
+POST /api/v1/component-report/generate-and-download
+Content-Type: application/json
+
+{
+ "product_id": "产品ID",
+ "sub_product_codes": ["子产品编号1", "子产品编号2"] // 可选
+}
+```
+
+响应:直接返回 ZIP 文件流
+
+#### 下载已生成的 ZIP 文件
+
+```http
+GET /api/v1/component-report/download-zip/:product_id
+```
+
+响应:直接返回 ZIP 文件流
+
+## example.json 格式
+
+生成的 `example.json` 文件格式如下:
+
+```json
+[
+ {
+ "feature": {
+ "featureName": "产品名称",
+ "sort": 1
+ },
+ "data": {
+ "apiID": "产品编号",
+ "data": {
+ "code": 0,
+ "message": "success",
+ "data": { ... }
+ }
+ }
+ },
+ {
+ "feature": {
+ "featureName": "另一个产品名称",
+ "sort": 2
+ },
+ "data": {
+ "apiID": "另一个产品编号",
+ "data": { ... }
+ }
+ }
+]
+```
+
+## 响应示例数据提取优先级
+
+1. **产品文档的 `response_example` 字段**(JSON格式)
+2. **产品文档的 `response_example` 字段**(Markdown代码块中的JSON)
+3. **产品API配置的 `response_example` 字段**
+4. **默认空对象** `{}`(如果都没有)
+
+## ZIP 文件结构
+
+生成的 ZIP 文件结构:
+
+```
+component-report.zip
+└── public/
+ └── example.json
+```
+
+## 注意事项
+
+1. 确保 `storage/component-reports` 目录存在且有写权限
+2. 如果产品是组合包,会遍历所有子产品(或指定的子产品)生成响应示例
+3. 如果某个子产品没有响应示例数据,会使用空对象 `{}` 作为默认值
+4. ZIP 文件会保存在 `storage/component-reports` 目录下,文件名为 `{productID}_example.json.zip`
+
+## 集成到路由
+
+如果需要使用 HTTP 接口,需要在路由中注册:
+
+```go
+// 创建处理器
+componentReportHandler := component_report.NewComponentReportHandler(
+ productRepo,
+ docRepo,
+ apiConfigRepo,
+ logger,
+)
+
+// 注册路由
+router.POST("/api/v1/component-report/generate-example-json", componentReportHandler.GenerateExampleJSON)
+router.POST("/api/v1/component-report/generate-zip", componentReportHandler.GenerateZip)
+router.POST("/api/v1/component-report/generate-and-download", componentReportHandler.GenerateAndDownloadZip)
+router.GET("/api/v1/component-report/download-zip/:product_id", componentReportHandler.DownloadZip)
+```
diff --git a/internal/shared/component_report/example_json_generator.go b/internal/shared/component_report/example_json_generator.go
new file mode 100644
index 0000000..42102c7
--- /dev/null
+++ b/internal/shared/component_report/example_json_generator.go
@@ -0,0 +1,286 @@
+package component_report
+
+import (
+ "context"
+ "encoding/json"
+ "fmt"
+ "os"
+ "path/filepath"
+ "regexp"
+ "strings"
+
+ "go.uber.org/zap"
+
+ "tyapi-server/internal/domains/product/entities"
+ "tyapi-server/internal/domains/product/repositories"
+)
+
+// ExampleJSONGenerator 示例JSON生成器
+type ExampleJSONGenerator struct {
+ productRepo repositories.ProductRepository
+ docRepo repositories.ProductDocumentationRepository
+ apiConfigRepo repositories.ProductApiConfigRepository
+ logger *zap.Logger
+}
+
+// NewExampleJSONGenerator 创建示例JSON生成器
+func NewExampleJSONGenerator(
+ productRepo repositories.ProductRepository,
+ docRepo repositories.ProductDocumentationRepository,
+ apiConfigRepo repositories.ProductApiConfigRepository,
+ logger *zap.Logger,
+) *ExampleJSONGenerator {
+ return &ExampleJSONGenerator{
+ productRepo: productRepo,
+ docRepo: docRepo,
+ apiConfigRepo: apiConfigRepo,
+ logger: logger,
+ }
+}
+
+// ExampleJSONItem example.json 中的单个项
+type ExampleJSONItem struct {
+ Feature struct {
+ FeatureName string `json:"featureName"`
+ Sort int `json:"sort"`
+ } `json:"feature"`
+ Data struct {
+ APIID string `json:"apiID"`
+ Data interface{} `json:"data"`
+ } `json:"data"`
+}
+
+// GenerateExampleJSON 生成 example.json 文件内容
+// productID: 产品ID(可以是组合包或单品)
+// subProductCodes: 子产品编号列表(如果为空,则处理所有子产品)
+func (g *ExampleJSONGenerator) GenerateExampleJSON(ctx context.Context, productID string, subProductCodes []string) ([]byte, error) {
+ // 1. 获取产品信息
+ product, err := g.productRepo.GetByID(ctx, productID)
+ if err != nil {
+ return nil, fmt.Errorf("获取产品信息失败: %w", err)
+ }
+
+ // 2. 构建 example.json 数组
+ var examples []ExampleJSONItem
+
+ if product.IsPackage {
+ // 组合包:遍历子产品
+ packageItems, err := g.productRepo.GetPackageItems(ctx, productID)
+ if err != nil {
+ return nil, fmt.Errorf("获取组合包子产品失败: %w", err)
+ }
+
+ for sort, item := range packageItems {
+ // 如果指定了子产品编号列表,只处理列表中的产品
+ if len(subProductCodes) > 0 {
+ found := false
+ for _, code := range subProductCodes {
+ if item.Product != nil && item.Product.Code == code {
+ found = true
+ break
+ }
+ }
+ if !found {
+ continue
+ }
+ }
+
+ // 获取子产品信息
+ var subProduct entities.Product
+ if item.Product != nil {
+ subProduct = *item.Product
+ } else {
+ subProduct, err = g.productRepo.GetByID(ctx, item.ProductID)
+ if err != nil {
+ g.logger.Warn("获取子产品信息失败",
+ zap.String("product_id", item.ProductID),
+ zap.Error(err),
+ )
+ continue
+ }
+ }
+
+ // 获取响应示例数据
+ responseData := g.extractResponseExample(ctx, &subProduct)
+
+ // 获取产品名称和编号
+ productName := subProduct.Name
+ productCode := subProduct.Code
+
+ // 构建示例项
+ example := ExampleJSONItem{
+ Feature: struct {
+ FeatureName string `json:"featureName"`
+ Sort int `json:"sort"`
+ }{
+ FeatureName: productName,
+ Sort: sort + 1,
+ },
+ Data: struct {
+ APIID string `json:"apiID"`
+ Data interface{} `json:"data"`
+ }{
+ APIID: productCode,
+ Data: responseData,
+ },
+ }
+
+ examples = append(examples, example)
+ }
+ } else {
+ // 单品
+ responseData := g.extractResponseExample(ctx, &product)
+
+ example := ExampleJSONItem{
+ Feature: struct {
+ FeatureName string `json:"featureName"`
+ Sort int `json:"sort"`
+ }{
+ FeatureName: product.Name,
+ Sort: 1,
+ },
+ Data: struct {
+ APIID string `json:"apiID"`
+ Data interface{} `json:"data"`
+ }{
+ APIID: product.Code,
+ Data: responseData,
+ },
+ }
+
+ examples = append(examples, example)
+ }
+
+ // 3. 序列化为JSON
+ jsonData, err := json.MarshalIndent(examples, "", " ")
+ if err != nil {
+ return nil, fmt.Errorf("序列化example.json失败: %w", err)
+ }
+
+ return jsonData, nil
+}
+
+// MatchProductCodeToPath 根据产品编码匹配 UI 组件路径,返回路径和类型(folder/file)
+func (g *ExampleJSONGenerator) MatchProductCodeToPath(ctx context.Context, productCode string) (string, string, error) {
+ basePath := filepath.Join("resources", "Pure Component", "src", "ui")
+
+ entries, err := os.ReadDir(basePath)
+ if err != nil {
+ return "", "", fmt.Errorf("读取组件目录失败: %w", err)
+ }
+
+ for _, entry := range entries {
+ name := entry.Name()
+
+ // 精确匹配
+ if name == productCode {
+ path := filepath.Join(basePath, name)
+ fileType := "folder"
+ if !entry.IsDir() {
+ fileType = "file"
+ }
+ return path, fileType, nil
+ }
+
+ // 模糊匹配:文件夹名称包含产品编号,或产品编号包含文件夹名称的核心部分
+ if strings.Contains(name, productCode) || strings.Contains(productCode, extractCoreCode(name)) {
+ path := filepath.Join(basePath, name)
+ fileType := "folder"
+ if !entry.IsDir() {
+ fileType = "file"
+ }
+ return path, fileType, nil
+ }
+ }
+
+ return "", "", fmt.Errorf("未找到匹配的组件文件: %s", productCode)
+}
+
+// extractCoreCode 提取文件名中的核心编码部分
+func extractCoreCode(name string) string {
+ for i, r := range name {
+ if (r >= 'A' && r <= 'Z') || (r >= '0' && r <= '9') {
+ return name[i:]
+ }
+ }
+ return name
+}
+
+// extractResponseExample 提取产品响应示例数据(优先级:文档 > API配置 > 默认值)
+func (g *ExampleJSONGenerator) extractResponseExample(ctx context.Context, product *entities.Product) interface{} {
+ var responseData interface{}
+
+ // 1. 优先从产品文档中获取
+ doc, err := g.docRepo.FindByProductID(ctx, product.ID)
+ if err == nil && doc != nil && doc.ResponseExample != "" {
+ // 尝试直接解析为JSON
+ err := json.Unmarshal([]byte(doc.ResponseExample), &responseData)
+ if err == nil {
+ g.logger.Debug("从产品文档中提取响应示例成功",
+ zap.String("product_id", product.ID),
+ zap.String("product_code", product.Code),
+ )
+ return responseData
+ }
+
+ // 如果解析失败,尝试从Markdown代码块中提取JSON
+ extractedData := extractJSONFromMarkdown(doc.ResponseExample)
+ if extractedData != nil {
+ g.logger.Debug("从Markdown代码块中提取响应示例成功",
+ zap.String("product_id", product.ID),
+ zap.String("product_code", product.Code),
+ )
+ return extractedData
+ }
+ }
+
+ // 2. 如果文档中没有,尝试从产品API配置中获取
+ apiConfig, err := g.apiConfigRepo.FindByProductID(ctx, product.ID)
+ if err == nil && apiConfig != nil && apiConfig.ResponseExample != "" {
+ // API配置的响应示例通常是 JSON 字符串
+ err := json.Unmarshal([]byte(apiConfig.ResponseExample), &responseData)
+ if err == nil {
+ g.logger.Debug("从产品API配置中提取响应示例成功",
+ zap.String("product_id", product.ID),
+ zap.String("product_code", product.Code),
+ )
+ return responseData
+ }
+ }
+
+ // 3. 如果都没有,返回默认空对象
+ g.logger.Warn("未找到响应示例数据,使用默认空对象",
+ zap.String("product_id", product.ID),
+ zap.String("product_code", product.Code),
+ )
+ return map[string]interface{}{}
+}
+
+// extractJSONFromMarkdown 从Markdown代码块中提取JSON
+func extractJSONFromMarkdown(markdown string) interface{} {
+ // 查找 ```json 代码块
+ re := regexp.MustCompile("(?s)```json\\s*(.*?)\\s*```")
+ matches := re.FindStringSubmatch(markdown)
+
+ if len(matches) > 1 {
+ var jsonData interface{}
+ err := json.Unmarshal([]byte(matches[1]), &jsonData)
+ if err == nil {
+ return jsonData
+ }
+ }
+
+ // 也尝试查找 ``` 代码块(可能是其他格式)
+ re2 := regexp.MustCompile("(?s)```\\s*(.*?)\\s*```")
+ matches2 := re2.FindStringSubmatch(markdown)
+ if len(matches2) > 1 {
+ var jsonData interface{}
+ err := json.Unmarshal([]byte(matches2[1]), &jsonData)
+ if err == nil {
+ return jsonData
+ }
+ }
+
+ // 如果提取失败,返回 nil(由调用者决定默认值)
+ return nil
+}
diff --git a/internal/shared/component_report/handler.go b/internal/shared/component_report/handler.go
new file mode 100644
index 0000000..897c77a
--- /dev/null
+++ b/internal/shared/component_report/handler.go
@@ -0,0 +1,1343 @@
+package component_report
+
+import (
+ "context"
+ "encoding/json"
+ "fmt"
+ "net/http"
+ "os"
+ "path/filepath"
+ "strings"
+ "time"
+
+ "github.com/gin-gonic/gin"
+ "github.com/shopspring/decimal"
+ "go.uber.org/zap"
+
+ finance_entities "tyapi-server/internal/domains/finance/entities"
+ "tyapi-server/internal/domains/product/entities"
+ "tyapi-server/internal/domains/product/repositories"
+ "tyapi-server/internal/shared/payment"
+)
+
+// ComponentReportHandler 组件报告处理器
+type ComponentReportHandler struct {
+ exampleJSONGenerator *ExampleJSONGenerator
+ zipGenerator *ZipGenerator
+ productRepo repositories.ProductRepository
+ componentReportRepo repositories.ComponentReportRepository
+ rechargeRecordRepo interface {
+ Create(ctx context.Context, record finance_entities.RechargeRecord) (finance_entities.RechargeRecord, error)
+ }
+ alipayOrderRepo interface {
+ Create(ctx context.Context, order finance_entities.AlipayOrder) (finance_entities.AlipayOrder, error)
+ GetByOutTradeNo(ctx context.Context, outTradeNo string) (*finance_entities.AlipayOrder, error)
+ Update(ctx context.Context, order finance_entities.AlipayOrder) error
+ }
+ wechatOrderRepo interface {
+ Create(ctx context.Context, order finance_entities.WechatOrder) (finance_entities.WechatOrder, error)
+ GetByOutTradeNo(ctx context.Context, outTradeNo string) (*finance_entities.WechatOrder, error)
+ Update(ctx context.Context, order finance_entities.WechatOrder) error
+ }
+ aliPayService *payment.AliPayService
+ wechatPayService *payment.WechatPayService
+ logger *zap.Logger
+}
+
+// NewComponentReportHandler 创建组件报告处理器
+func NewComponentReportHandler(
+ productRepo repositories.ProductRepository,
+ docRepo repositories.ProductDocumentationRepository,
+ apiConfigRepo repositories.ProductApiConfigRepository,
+ componentReportRepo repositories.ComponentReportRepository,
+ rechargeRecordRepo interface {
+ Create(ctx context.Context, record finance_entities.RechargeRecord) (finance_entities.RechargeRecord, error)
+ },
+ alipayOrderRepo interface {
+ Create(ctx context.Context, order finance_entities.AlipayOrder) (finance_entities.AlipayOrder, error)
+ GetByOutTradeNo(ctx context.Context, outTradeNo string) (*finance_entities.AlipayOrder, error)
+ Update(ctx context.Context, order finance_entities.AlipayOrder) error
+ },
+ wechatOrderRepo interface {
+ Create(ctx context.Context, order finance_entities.WechatOrder) (finance_entities.WechatOrder, error)
+ GetByOutTradeNo(ctx context.Context, outTradeNo string) (*finance_entities.WechatOrder, error)
+ Update(ctx context.Context, order finance_entities.WechatOrder) error
+ },
+ aliPayService *payment.AliPayService,
+ wechatPayService *payment.WechatPayService,
+ logger *zap.Logger,
+) *ComponentReportHandler {
+ exampleJSONGenerator := NewExampleJSONGenerator(productRepo, docRepo, apiConfigRepo, logger)
+ zipGenerator := NewZipGenerator(logger)
+
+ return &ComponentReportHandler{
+ exampleJSONGenerator: exampleJSONGenerator,
+ zipGenerator: zipGenerator,
+ productRepo: productRepo,
+ componentReportRepo: componentReportRepo,
+ rechargeRecordRepo: rechargeRecordRepo,
+ alipayOrderRepo: alipayOrderRepo,
+ wechatOrderRepo: wechatOrderRepo,
+ aliPayService: aliPayService,
+ wechatPayService: wechatPayService,
+ logger: logger,
+ }
+}
+
+// GenerateExampleJSONRequest 生成示例JSON请求
+type GenerateExampleJSONRequest struct {
+ ProductID string `json:"product_id" binding:"required"` // 产品ID
+ SubProductCodes []string `json:"sub_product_codes,omitempty"` // 子产品编号列表(可选)
+}
+
+// GenerateExampleJSONResponse 生成示例JSON响应
+type GenerateExampleJSONResponse struct {
+ ProductID string `json:"product_id"`
+ JSONContent string `json:"json_content"`
+ JSONSize int `json:"json_size"`
+}
+
+// GenerateExampleJSON 生成 example.json 文件内容(HTTP接口)
+// POST /api/v1/component-report/generate-example-json
+func (h *ComponentReportHandler) GenerateExampleJSON(c *gin.Context) {
+ var req GenerateExampleJSONRequest
+ if err := c.ShouldBindJSON(&req); err != nil {
+ c.JSON(http.StatusBadRequest, gin.H{
+ "code": 400,
+ "message": "请求参数错误",
+ "error": err.Error(),
+ })
+ return
+ }
+
+ // 生成 example.json
+ jsonData, err := h.exampleJSONGenerator.GenerateExampleJSON(c.Request.Context(), req.ProductID, req.SubProductCodes)
+ if err != nil {
+ h.logger.Error("生成example.json失败", zap.Error(err), zap.String("product_id", req.ProductID))
+ c.JSON(http.StatusInternalServerError, gin.H{
+ "code": 500,
+ "message": "生成example.json失败",
+ "error": err.Error(),
+ })
+ return
+ }
+
+ c.JSON(http.StatusOK, GenerateExampleJSONResponse{
+ ProductID: req.ProductID,
+ JSONContent: string(jsonData),
+ JSONSize: len(jsonData),
+ })
+}
+
+// GenerateZipRequest 生成ZIP文件请求
+type GenerateZipRequest struct {
+ ProductID string `json:"product_id" binding:"required"` // 产品ID
+ SubProductCodes []string `json:"sub_product_codes,omitempty"` // 子产品编号列表(可选)
+ OutputPath string `json:"output_path,omitempty"` // 输出路径(可选)
+}
+
+// GenerateZip 生成ZIP文件(HTTP接口)
+// POST /api/v1/component-report/generate-zip
+func (h *ComponentReportHandler) GenerateZip(c *gin.Context) {
+ var req GenerateZipRequest
+ if err := c.ShouldBindJSON(&req); err != nil {
+ c.JSON(http.StatusBadRequest, gin.H{
+ "code": 400,
+ "message": "请求参数错误",
+ "error": err.Error(),
+ })
+ return
+ }
+
+ // 生成ZIP文件
+ zipPath, err := h.zipGenerator.GenerateZipFile(
+ c.Request.Context(),
+ req.ProductID,
+ req.SubProductCodes,
+ h.exampleJSONGenerator,
+ req.OutputPath,
+ )
+ if err != nil {
+ h.logger.Error("生成ZIP文件失败", zap.Error(err), zap.String("product_id", req.ProductID))
+ c.JSON(http.StatusInternalServerError, gin.H{
+ "code": 500,
+ "message": "生成ZIP文件失败",
+ "error": err.Error(),
+ })
+ return
+ }
+
+ // 检查文件是否存在
+ fileInfo, err := os.Stat(zipPath)
+ if err != nil {
+ h.logger.Error("ZIP文件不存在", zap.Error(err), zap.String("zip_path", zipPath))
+ c.JSON(http.StatusInternalServerError, gin.H{
+ "code": 500,
+ "message": "ZIP文件不存在",
+ "error": err.Error(),
+ })
+ return
+ }
+
+ c.JSON(http.StatusOK, gin.H{
+ "code": 200,
+ "message": "ZIP文件生成成功",
+ "zip_path": zipPath,
+ "file_size": fileInfo.Size(),
+ "file_name": filepath.Base(zipPath),
+ })
+}
+
+// DownloadZip 下载ZIP文件(HTTP接口)
+// GET /api/v1/component-report/download-zip/:product_id
+func (h *ComponentReportHandler) DownloadZip(c *gin.Context) {
+ productID := c.Param("product_id")
+ if productID == "" {
+ c.JSON(http.StatusBadRequest, gin.H{
+ "code": 400,
+ "message": "产品ID不能为空",
+ })
+ return
+ }
+
+ // 构建ZIP文件路径
+ zipPath := filepath.Join("storage/component-reports", fmt.Sprintf("%s_example.json.zip", productID))
+
+ // 检查文件是否存在
+ if _, err := os.Stat(zipPath); os.IsNotExist(err) {
+ c.JSON(http.StatusNotFound, gin.H{
+ "code": 404,
+ "message": "ZIP文件不存在,请先生成ZIP文件",
+ })
+ return
+ }
+
+ // 设置响应头
+ c.Header("Content-Type", "application/zip")
+ c.Header("Content-Disposition", fmt.Sprintf("attachment; filename=%s", filepath.Base(zipPath)))
+
+ // 发送文件
+ c.File(zipPath)
+}
+
+// DownloadExampleJSON 生成并下载 example.json 文件(HTTP接口)
+// POST /api/v1/component-report/download-example-json
+func (h *ComponentReportHandler) DownloadExampleJSON(c *gin.Context) {
+ var req GenerateExampleJSONRequest
+ if err := c.ShouldBindJSON(&req); err != nil {
+ c.JSON(http.StatusBadRequest, gin.H{
+ "code": 400,
+ "message": "请求参数错误",
+ "error": err.Error(),
+ })
+ return
+ }
+
+ // 生成 example.json
+ jsonData, err := h.exampleJSONGenerator.GenerateExampleJSON(c.Request.Context(), req.ProductID, req.SubProductCodes)
+ if err != nil {
+ h.logger.Error("生成example.json失败", zap.Error(err), zap.String("product_id", req.ProductID))
+ c.JSON(http.StatusInternalServerError, gin.H{
+ "code": 500,
+ "message": "生成example.json失败",
+ "error": err.Error(),
+ })
+ return
+ }
+
+ // 设置响应头,直接下载JSON文件
+ c.Header("Content-Type", "application/json; charset=utf-8")
+ c.Header("Content-Disposition", "attachment; filename=example.json")
+
+ // 发送JSON数据
+ c.Data(http.StatusOK, "application/json; charset=utf-8", jsonData)
+}
+
+// GenerateAndDownloadZip 生成并下载ZIP文件(HTTP接口)
+// POST /api/v1/component-report/generate-and-download
+func (h *ComponentReportHandler) GenerateAndDownloadZip(c *gin.Context) {
+ userID := c.GetString("user_id")
+ if userID == "" {
+ c.JSON(http.StatusUnauthorized, gin.H{
+ "code": 401,
+ "message": "用户未登录",
+ })
+ return
+ }
+
+ var req GenerateZipRequest
+ if err := c.ShouldBindJSON(&req); err != nil {
+ c.JSON(http.StatusBadRequest, gin.H{
+ "code": 400,
+ "message": "请求参数错误",
+ "error": err.Error(),
+ })
+ return
+ }
+
+ // 验证用户是否已支付
+ // 检查用户是否有已支付的下载记录
+ downloads, err := h.componentReportRepo.GetUserDownloads(c.Request.Context(), userID, &req.ProductID)
+ if err != nil {
+ h.logger.Error("查询用户下载记录失败", zap.Error(err), zap.String("user_id", userID), zap.String("product_id", req.ProductID))
+ c.JSON(http.StatusInternalServerError, gin.H{
+ "code": 500,
+ "message": "查询下载记录失败",
+ })
+ return
+ }
+
+ // 检查是否有已支付的下载记录
+ hasPaid := false
+ for _, download := range downloads {
+ if download.PaymentStatus == "success" && !download.IsExpired() {
+ hasPaid = true
+ break
+ }
+ }
+
+ if !hasPaid {
+ h.logger.Warn("用户未支付,拒绝下载",
+ zap.String("user_id", userID),
+ zap.String("product_id", req.ProductID),
+ )
+ c.JSON(http.StatusForbidden, gin.H{
+ "code": 403,
+ "message": "请先支付后再下载",
+ })
+ return
+ }
+
+ // 生成ZIP文件
+ zipPath, err := h.zipGenerator.GenerateZipFile(
+ c.Request.Context(),
+ req.ProductID,
+ req.SubProductCodes,
+ h.exampleJSONGenerator,
+ "", // 使用默认路径
+ )
+ if err != nil {
+ h.logger.Error("生成ZIP文件失败", zap.Error(err), zap.String("product_id", req.ProductID))
+ c.JSON(http.StatusInternalServerError, gin.H{
+ "code": 500,
+ "message": "生成ZIP文件失败",
+ "error": err.Error(),
+ })
+ return
+ }
+
+ // 检查文件是否存在
+ if _, err := os.Stat(zipPath); os.IsNotExist(err) {
+ c.JSON(http.StatusInternalServerError, gin.H{
+ "code": 500,
+ "message": "ZIP文件生成失败",
+ })
+ return
+ }
+
+ // 设置响应头
+ c.Header("Content-Type", "application/zip")
+ c.Header("Content-Disposition", fmt.Sprintf("attachment; filename=%s", filepath.Base(zipPath)))
+
+ // 发送文件
+ c.File(zipPath)
+}
+
+// CheckDownloadAvailabilityResponse 检查下载可用性响应
+type CheckDownloadAvailabilityResponse struct {
+ CanDownload bool `json:"can_download"` // 是否可以下载
+ IsPackage bool `json:"is_package"` // 是否为组合包
+ AllSubProductsExist bool `json:"all_sub_products_exist"` // 所有子产品是否在ui目录存在
+ MissingSubProducts []string `json:"missing_sub_products"` // 缺失的子产品编号列表
+ Message string `json:"message"` // 提示信息
+}
+
+// CheckDownloadAvailability 检查下载可用性
+// GET /api/v1/products/:id/component-report/check
+func (h *ComponentReportHandler) CheckDownloadAvailability(c *gin.Context) {
+ productID := c.Param("id")
+ if productID == "" {
+ c.JSON(http.StatusBadRequest, gin.H{
+ "code": 400,
+ "message": "产品ID不能为空",
+ })
+ return
+ }
+
+ // 获取产品信息
+ product, err := h.productRepo.GetByID(c.Request.Context(), productID)
+ if err != nil {
+ h.logger.Error("获取产品信息失败", zap.Error(err), zap.String("product_id", productID))
+ c.JSON(http.StatusNotFound, gin.H{
+ "code": 404,
+ "message": "产品不存在",
+ })
+ return
+ }
+
+ // 检查是否为组合包
+ if !product.IsPackage {
+ c.JSON(http.StatusOK, CheckDownloadAvailabilityResponse{
+ CanDownload: false,
+ IsPackage: false,
+ Message: "只有组合包产品才能下载示例报告",
+ })
+ return
+ }
+
+ // 获取组合包子产品
+ packageItems, err := h.productRepo.GetPackageItems(c.Request.Context(), productID)
+ if err != nil {
+ h.logger.Error("获取组合包子产品失败", zap.Error(err), zap.String("product_id", productID))
+ c.JSON(http.StatusInternalServerError, gin.H{
+ "code": 500,
+ "message": "获取组合包子产品失败",
+ })
+ return
+ }
+
+ if len(packageItems) == 0 {
+ c.JSON(http.StatusOK, CheckDownloadAvailabilityResponse{
+ CanDownload: false,
+ IsPackage: true,
+ Message: "组合包没有子产品",
+ })
+ return
+ }
+
+ // 检查所有子产品是否在ui目录存在
+ var missingSubProducts []string
+ allExist := true
+
+ for _, item := range packageItems {
+ var productCode string
+ if item.Product != nil {
+ productCode = item.Product.Code
+ } else {
+ // 如果Product未加载,需要获取子产品信息
+ subProduct, err := h.productRepo.GetByID(c.Request.Context(), item.ProductID)
+ if err != nil {
+ h.logger.Warn("获取子产品信息失败", zap.Error(err), zap.String("product_id", item.ProductID))
+ missingSubProducts = append(missingSubProducts, item.ProductID)
+ allExist = false
+ continue
+ }
+ productCode = subProduct.Code
+ }
+
+ if productCode == "" {
+ missingSubProducts = append(missingSubProducts, item.ProductID)
+ allExist = false
+ continue
+ }
+
+ // 检查是否在ui目录存在
+ _, _, err := h.exampleJSONGenerator.MatchProductCodeToPath(c.Request.Context(), productCode)
+ if err != nil {
+ missingSubProducts = append(missingSubProducts, productCode)
+ allExist = false
+ }
+ }
+
+ canDownload := allExist && len(missingSubProducts) == 0
+ message := "可以下载"
+ if !canDownload {
+ message = fmt.Sprintf("以下子产品的UI组件不存在: %v", missingSubProducts)
+ }
+
+ c.JSON(http.StatusOK, CheckDownloadAvailabilityResponse{
+ CanDownload: canDownload,
+ IsPackage: true,
+ AllSubProductsExist: allExist,
+ MissingSubProducts: missingSubProducts,
+ Message: message,
+ })
+}
+
+// GetDownloadInfoResponse 获取下载信息响应
+type GetDownloadInfoResponse struct {
+ ProductID string `json:"product_id"`
+ ProductCode string `json:"product_code"`
+ ProductName string `json:"product_name"`
+ IsPackage bool `json:"is_package"`
+ SubProducts []SubProductPriceInfo `json:"sub_products"`
+ OriginalTotalPrice string `json:"original_total_price"`
+ DiscountAmount string `json:"discount_amount"`
+ FinalPrice string `json:"final_price"`
+ DownloadedProductCodes []string `json:"downloaded_product_codes"`
+ CanDownload bool `json:"can_download"`
+}
+
+// SubProductPriceInfo 子产品价格信息
+type SubProductPriceInfo struct {
+ ProductID string `json:"product_id"`
+ ProductCode string `json:"product_code"`
+ ProductName string `json:"product_name"`
+ Price string `json:"price"`
+ IsDownloaded bool `json:"is_downloaded"`
+}
+
+// GetDownloadInfo 获取下载信息和价格计算
+// GET /api/v1/products/:id/component-report/info
+func (h *ComponentReportHandler) GetDownloadInfo(c *gin.Context) {
+ userID := c.GetString("user_id")
+ if userID == "" {
+ c.JSON(http.StatusUnauthorized, gin.H{
+ "code": 401,
+ "message": "用户未登录",
+ })
+ return
+ }
+
+ productID := c.Param("id")
+ if productID == "" {
+ c.JSON(http.StatusBadRequest, gin.H{
+ "code": 400,
+ "message": "产品ID不能为空",
+ })
+ return
+ }
+
+ // 获取产品信息
+ product, err := h.productRepo.GetByID(c.Request.Context(), productID)
+ if err != nil {
+ h.logger.Error("获取产品信息失败", zap.Error(err), zap.String("product_id", productID))
+ c.JSON(http.StatusNotFound, gin.H{
+ "code": 404,
+ "message": "产品不存在",
+ })
+ return
+ }
+
+ // 检查是否为组合包
+ if !product.IsPackage {
+ c.JSON(http.StatusBadRequest, gin.H{
+ "code": 400,
+ "message": "只有组合包产品才能下载示例报告",
+ })
+ return
+ }
+
+ // 获取组合包子产品
+ packageItems, err := h.productRepo.GetPackageItems(c.Request.Context(), productID)
+ if err != nil {
+ h.logger.Error("获取组合包子产品失败", zap.Error(err), zap.String("product_id", productID))
+ c.JSON(http.StatusInternalServerError, gin.H{
+ "code": 500,
+ "message": "获取组合包子产品失败",
+ })
+ return
+ }
+
+ // 获取用户已下载的产品编号列表
+ downloadedCodes, err := h.componentReportRepo.GetUserDownloadedProductCodes(c.Request.Context(), userID)
+ if err != nil {
+ h.logger.Warn("获取用户已下载产品编号失败", zap.Error(err), zap.String("user_id", userID))
+ downloadedCodes = []string{}
+ }
+
+ // 创建已下载编号的map用于快速查找
+ downloadedMap := make(map[string]bool)
+ for _, code := range downloadedCodes {
+ downloadedMap[code] = true
+ }
+
+ // 计算价格
+ originalTotal := decimal.Zero
+ discountAmount := decimal.Zero
+ var subProducts []SubProductPriceInfo
+
+ for _, item := range packageItems {
+ var subProduct entities.Product
+ var productCode string
+ var productName string
+ var price decimal.Decimal
+
+ if item.Product != nil {
+ subProduct = *item.Product
+ productCode = subProduct.Code
+ productName = subProduct.Name
+ price = subProduct.Price
+ } else {
+ // 如果Product未加载,需要获取子产品信息
+ subProduct, err = h.productRepo.GetByID(c.Request.Context(), item.ProductID)
+ if err != nil {
+ h.logger.Warn("获取子产品信息失败", zap.Error(err), zap.String("product_id", item.ProductID))
+ continue
+ }
+ productCode = subProduct.Code
+ productName = subProduct.Name
+ price = subProduct.Price
+ }
+
+ if productCode == "" {
+ continue
+ }
+
+ // 检查是否已下载
+ isDownloaded := downloadedMap[productCode]
+ originalTotal = originalTotal.Add(price)
+ if isDownloaded {
+ discountAmount = discountAmount.Add(price)
+ }
+
+ subProducts = append(subProducts, SubProductPriceInfo{
+ ProductID: subProduct.ID,
+ ProductCode: productCode,
+ ProductName: productName,
+ Price: price.String(),
+ IsDownloaded: isDownloaded,
+ })
+ }
+
+ finalPrice := originalTotal.Sub(discountAmount)
+
+ // ========== 测试阶段:强制设置支付金额为0.01 ==========
+ // TODO: 测试完成后请删除或注释掉以下3行代码,恢复原始价格计算
+ if finalPrice.GreaterThan(decimal.Zero) {
+ finalPrice = decimal.NewFromFloat(0.01)
+ }
+ // ====================================================
+
+ // 检查用户是否有已支付的下载记录(针对当前产品)
+ // can_download 应该基于实际支付状态,而不是价格
+ hasPaidDownload := false
+ downloads, err := h.componentReportRepo.GetUserDownloads(c.Request.Context(), userID, &productID)
+ if err == nil {
+ for _, download := range downloads {
+ if download.PaymentStatus == "success" && !download.IsExpired() {
+ hasPaidDownload = true
+ break
+ }
+ }
+ }
+
+ // 如果可以下载:价格为0(免费)或者用户已支付
+ canDownload := finalPrice.IsZero() || hasPaidDownload
+
+ c.JSON(http.StatusOK, GetDownloadInfoResponse{
+ ProductID: productID,
+ ProductCode: product.Code,
+ ProductName: product.Name,
+ IsPackage: true,
+ SubProducts: subProducts,
+ OriginalTotalPrice: originalTotal.String(),
+ DiscountAmount: discountAmount.String(),
+ FinalPrice: finalPrice.String(),
+ DownloadedProductCodes: downloadedCodes,
+ CanDownload: canDownload,
+ })
+}
+
+// CreatePaymentOrderRequest 创建支付订单请求
+type CreatePaymentOrderRequest struct {
+ PaymentType string `json:"payment_type" binding:"required"` // wechat 或 alipay
+ Platform string `json:"platform,omitempty"` // 支付平台:app, h5, pc(可选,默认根据User-Agent判断)
+}
+
+// CreatePaymentOrderResponse 创建支付订单响应
+type CreatePaymentOrderResponse struct {
+ OrderID string `json:"order_id"` // 订单ID
+ CodeURL string `json:"code_url"` // 支付二维码URL(微信)
+ PayURL string `json:"pay_url"` // 支付链接(支付宝)
+ PaymentType string `json:"payment_type"` // 支付类型
+ Amount string `json:"amount"` // 支付金额
+}
+
+// CreatePaymentOrder 创建支付订单
+// POST /api/v1/products/:id/component-report/create-order
+func (h *ComponentReportHandler) CreatePaymentOrder(c *gin.Context) {
+ userID := c.GetString("user_id")
+ if userID == "" {
+ c.JSON(http.StatusUnauthorized, gin.H{
+ "code": 401,
+ "message": "用户未登录",
+ })
+ return
+ }
+
+ productID := c.Param("id")
+ if productID == "" {
+ c.JSON(http.StatusBadRequest, gin.H{
+ "code": 400,
+ "message": "产品ID不能为空",
+ })
+ return
+ }
+
+ var req CreatePaymentOrderRequest
+ if err := c.ShouldBindJSON(&req); err != nil {
+ c.JSON(http.StatusBadRequest, gin.H{
+ "code": 400,
+ "message": "请求参数错误",
+ "error": err.Error(),
+ })
+ return
+ }
+
+ if req.PaymentType != "wechat" && req.PaymentType != "alipay" {
+ c.JSON(http.StatusBadRequest, gin.H{
+ "code": 400,
+ "message": "支付类型必须是 wechat 或 alipay",
+ })
+ return
+ }
+
+ // 确定支付平台类型(app/h5/pc)
+ platform := req.Platform
+ if platform == "" {
+ // 根据 User-Agent 判断平台类型
+ userAgent := c.GetHeader("User-Agent")
+ platform = h.detectPlatform(userAgent)
+ }
+
+ // 验证平台类型
+ if req.PaymentType == "alipay" {
+ if platform != "app" && platform != "h5" && platform != "pc" {
+ platform = "h5" // 默认使用 H5 支付
+ }
+ } else if req.PaymentType == "wechat" {
+ // 微信支付目前只支持 native(扫码支付)
+ platform = "native"
+ }
+
+ // 获取下载信息以计算价格
+ product, err := h.productRepo.GetByID(c.Request.Context(), productID)
+ if err != nil {
+ h.logger.Error("获取产品信息失败", zap.Error(err), zap.String("product_id", productID))
+ c.JSON(http.StatusNotFound, gin.H{
+ "code": 404,
+ "message": "产品不存在",
+ })
+ return
+ }
+
+ if !product.IsPackage {
+ c.JSON(http.StatusBadRequest, gin.H{
+ "code": 400,
+ "message": "只有组合包产品才能下载示例报告",
+ })
+ return
+ }
+
+ // 获取组合包子产品
+ packageItems, err := h.productRepo.GetPackageItems(c.Request.Context(), productID)
+ if err != nil {
+ h.logger.Error("获取组合包子产品失败", zap.Error(err), zap.String("product_id", productID))
+ c.JSON(http.StatusInternalServerError, gin.H{
+ "code": 500,
+ "message": "获取组合包子产品失败",
+ })
+ return
+ }
+
+ // 获取用户已下载的产品编号列表
+ downloadedCodes, err := h.componentReportRepo.GetUserDownloadedProductCodes(c.Request.Context(), userID)
+ if err != nil {
+ h.logger.Warn("获取用户已下载产品编号失败", zap.Error(err), zap.String("user_id", userID))
+ downloadedCodes = []string{}
+ }
+
+ // 创建已下载编号的map用于快速查找
+ downloadedMap := make(map[string]bool)
+ for _, code := range downloadedCodes {
+ downloadedMap[code] = true
+ }
+
+ // 计算价格
+ originalTotal := decimal.Zero
+ discountAmount := decimal.Zero
+ var subProductCodes []string
+ var subProductIDs []string
+
+ for _, item := range packageItems {
+ var subProduct entities.Product
+ var productCode string
+
+ if item.Product != nil {
+ subProduct = *item.Product
+ productCode = subProduct.Code
+ } else {
+ subProduct, err = h.productRepo.GetByID(c.Request.Context(), item.ProductID)
+ if err != nil {
+ continue
+ }
+ productCode = subProduct.Code
+ }
+
+ if productCode == "" {
+ continue
+ }
+
+ subProductCodes = append(subProductCodes, productCode)
+ subProductIDs = append(subProductIDs, subProduct.ID)
+
+ // 检查是否已下载
+ if !downloadedMap[productCode] {
+ originalTotal = originalTotal.Add(subProduct.Price)
+ } else {
+ discountAmount = discountAmount.Add(subProduct.Price)
+ }
+ }
+
+ finalPrice := originalTotal.Sub(discountAmount)
+
+ // ========== 测试阶段:强制设置支付金额为0.01 ==========
+ // TODO: 测试完成后请删除或注释掉以下2行代码,恢复原始价格计算
+ if finalPrice.GreaterThan(decimal.Zero) {
+ finalPrice = decimal.NewFromFloat(0.01)
+ }
+ // ====================================================
+
+ if finalPrice.LessThanOrEqual(decimal.Zero) {
+ c.JSON(http.StatusBadRequest, gin.H{
+ "code": 400,
+ "message": "无需支付,所有子产品已下载",
+ })
+ return
+ }
+
+ // 验证数据完整性
+ if len(subProductCodes) == 0 {
+ h.logger.Warn("子产品列表为空", zap.String("product_id", productID))
+ c.JSON(http.StatusBadRequest, gin.H{
+ "code": 400,
+ "message": "子产品列表为空,无法创建下载记录",
+ })
+ return
+ }
+
+ // 验证必要字段
+ if product.Code == "" {
+ h.logger.Error("产品编号为空", zap.String("product_id", productID))
+ c.JSON(http.StatusInternalServerError, gin.H{
+ "code": 500,
+ "message": "产品编号为空,无法创建下载记录",
+ })
+ return
+ }
+
+ // 序列化子产品编号列表
+ subProductCodesJSON, err := json.Marshal(subProductCodes)
+ if err != nil {
+ h.logger.Error("序列化子产品编号列表失败", zap.Error(err))
+ c.JSON(http.StatusInternalServerError, gin.H{
+ "code": 500,
+ "message": "序列化子产品编号列表失败",
+ "error": err.Error(),
+ })
+ return
+ }
+
+ subProductIDsJSON, err := json.Marshal(subProductIDs)
+ if err != nil {
+ h.logger.Error("序列化子产品ID列表失败", zap.Error(err))
+ c.JSON(http.StatusInternalServerError, gin.H{
+ "code": 500,
+ "message": "序列化子产品ID列表失败",
+ "error": err.Error(),
+ })
+ return
+ }
+
+ // 创建下载记录
+ download := &entities.ComponentReportDownload{
+ UserID: userID,
+ ProductID: productID,
+ ProductCode: product.Code,
+ SubProductIDs: string(subProductIDsJSON),
+ SubProductCodes: string(subProductCodesJSON),
+ DownloadPrice: finalPrice,
+ OriginalPrice: originalTotal,
+ DiscountAmount: discountAmount,
+ PaymentStatus: "pending",
+ PaymentType: &req.PaymentType,
+ }
+
+ // 记录创建前的详细信息用于调试
+ h.logger.Info("准备创建下载记录",
+ zap.String("user_id", userID),
+ zap.String("product_id", productID),
+ zap.String("product_code", product.Code),
+ zap.String("download_price", finalPrice.String()),
+ zap.String("original_price", originalTotal.String()),
+ zap.String("discount_amount", discountAmount.String()),
+ zap.Int("sub_product_count", len(subProductCodes)),
+ )
+
+ createdDownload, err := h.componentReportRepo.CreateDownload(c.Request.Context(), download)
+ if err != nil {
+ // 记录详细的错误信息
+ h.logger.Error("创建下载记录失败",
+ zap.Error(err),
+ zap.String("user_id", userID),
+ zap.String("product_id", productID),
+ zap.String("product_code", product.Code),
+ zap.String("download_price", finalPrice.String()),
+ zap.Any("sub_product_codes", subProductCodes),
+ zap.Any("sub_product_ids", subProductIDs),
+ )
+
+ // 返回更详细的错误信息(开发环境可以显示,生产环境可以隐藏)
+ errorMsg := "创建下载记录失败"
+ if err.Error() != "" {
+ errorMsg = fmt.Sprintf("创建下载记录失败: %s", err.Error())
+ }
+
+ c.JSON(http.StatusInternalServerError, gin.H{
+ "code": 500,
+ "message": errorMsg,
+ "error": err.Error(), // 包含具体错误信息便于调试
+ })
+ return
+ }
+
+ // 生成商户订单号
+ var outTradeNo string
+ if req.PaymentType == "alipay" {
+ outTradeNo = h.aliPayService.GenerateOutTradeNo()
+ } else {
+ outTradeNo = h.wechatPayService.GenerateOutTradeNo()
+ }
+
+ // 构建订单主题和备注
+ subject := fmt.Sprintf("组件报告下载-%s", product.Name)
+ if len(subProductCodes) > 0 {
+ subject = fmt.Sprintf("组件报告下载-%s(%d个子产品)", product.Name, len(subProductCodes))
+ }
+ notes := fmt.Sprintf("购买%s报告示例", product.Name)
+
+ h.logger.Info("========== 开始创建组件报告下载支付订单 ==========",
+ zap.String("download_id", createdDownload.ID),
+ zap.String("out_trade_no", outTradeNo),
+ zap.String("payment_type", req.PaymentType),
+ zap.String("amount", finalPrice.String()),
+ zap.String("product_name", product.Name),
+ )
+
+ // 创建充值记录和支付订单记录
+ var rechargeRecord finance_entities.RechargeRecord
+ if req.PaymentType == "alipay" {
+ h.logger.Info("步骤1: 创建支付宝充值记录",
+ zap.String("out_trade_no", outTradeNo),
+ zap.String("user_id", userID),
+ zap.String("amount", finalPrice.String()),
+ zap.String("notes", notes),
+ )
+ // 使用带备注的工厂方法创建充值记录
+ rechargeRecordPtr := finance_entities.NewAlipayRechargeRecordWithNotes(userID, finalPrice, outTradeNo, notes)
+ rechargeRecord, err = h.rechargeRecordRepo.Create(c.Request.Context(), *rechargeRecordPtr)
+ if err != nil {
+ h.logger.Error("创建支付宝充值记录失败", zap.Error(err))
+ c.JSON(http.StatusInternalServerError, gin.H{
+ "code": 500,
+ "message": "创建支付宝充值记录失败",
+ "error": err.Error(),
+ })
+ return
+ }
+
+ h.logger.Info("步骤2: 创建支付宝订单记录",
+ zap.String("recharge_id", rechargeRecord.ID),
+ zap.String("out_trade_no", outTradeNo),
+ zap.String("subject", subject),
+ )
+ alipayOrder := finance_entities.NewAlipayOrder(rechargeRecord.ID, outTradeNo, subject, finalPrice, platform)
+ _, err = h.alipayOrderRepo.Create(c.Request.Context(), *alipayOrder)
+ if err != nil {
+ h.logger.Error("创建支付宝订单记录失败", zap.Error(err))
+ c.JSON(http.StatusInternalServerError, gin.H{
+ "code": 500,
+ "message": "创建支付宝订单记录失败",
+ "error": err.Error(),
+ })
+ return
+ }
+ } else {
+ h.logger.Info("步骤1: 创建微信充值记录",
+ zap.String("out_trade_no", outTradeNo),
+ zap.String("user_id", userID),
+ zap.String("amount", finalPrice.String()),
+ zap.String("notes", notes),
+ )
+ // 使用带备注的工厂方法创建充值记录
+ rechargeRecordPtr := finance_entities.NewWechatRechargeRecordWithNotes(userID, finalPrice, outTradeNo, notes)
+ rechargeRecord, err = h.rechargeRecordRepo.Create(c.Request.Context(), *rechargeRecordPtr)
+ if err != nil {
+ h.logger.Error("创建微信充值记录失败", zap.Error(err))
+ c.JSON(http.StatusInternalServerError, gin.H{
+ "code": 500,
+ "message": "创建微信充值记录失败",
+ "error": err.Error(),
+ })
+ return
+ }
+
+ h.logger.Info("步骤2: 创建微信订单记录",
+ zap.String("recharge_id", rechargeRecord.ID),
+ zap.String("out_trade_no", outTradeNo),
+ zap.String("subject", subject),
+ )
+ wechatOrder := finance_entities.NewWechatOrder(rechargeRecord.ID, outTradeNo, subject, finalPrice, platform)
+ _, err = h.wechatOrderRepo.Create(c.Request.Context(), *wechatOrder)
+ if err != nil {
+ h.logger.Error("创建微信订单记录失败", zap.Error(err))
+ c.JSON(http.StatusInternalServerError, gin.H{
+ "code": 500,
+ "message": "创建微信订单记录失败",
+ "error": err.Error(),
+ })
+ return
+ }
+ }
+
+ // 更新下载记录的支付订单号
+ createdDownload.PaymentOrderID = &outTradeNo
+ err = h.componentReportRepo.UpdateDownload(c.Request.Context(), createdDownload)
+ if err != nil {
+ h.logger.Error("更新下载记录支付订单号失败", zap.Error(err))
+ // 不阻断流程,继续执行
+ }
+
+ h.logger.Info("步骤3: 调用支付接口创建订单",
+ zap.String("out_trade_no", outTradeNo),
+ zap.String("platform", platform),
+ )
+
+ // 调用支付服务创建订单
+ var payURL string
+ var codeURL string
+
+ if req.PaymentType == "alipay" {
+ // 调用支付宝支付服务
+ payURL, err = h.aliPayService.CreateAlipayOrder(c.Request.Context(), platform, finalPrice, subject, outTradeNo)
+ if err != nil {
+ h.logger.Error("创建支付宝订单失败",
+ zap.Error(err),
+ zap.String("out_trade_no", outTradeNo),
+ zap.String("platform", platform),
+ zap.String("amount", finalPrice.String()),
+ )
+ c.JSON(http.StatusInternalServerError, gin.H{
+ "code": 500,
+ "message": "创建支付宝订单失败",
+ "error": err.Error(),
+ })
+ return
+ }
+ h.logger.Info("步骤4: 支付宝订单创建成功",
+ zap.String("out_trade_no", outTradeNo),
+ zap.String("pay_url", payURL),
+ )
+ } else {
+ // 调用微信支付服务(目前只支持 native 扫码支付)
+ amountFloat, _ := finalPrice.Float64()
+ result, err := h.wechatPayService.CreateWechatNativeOrder(c.Request.Context(), amountFloat, subject, outTradeNo)
+ if err != nil {
+ h.logger.Error("创建微信支付订单失败",
+ zap.Error(err),
+ zap.String("out_trade_no", outTradeNo),
+ zap.String("amount", finalPrice.String()),
+ )
+ c.JSON(http.StatusInternalServerError, gin.H{
+ "code": 500,
+ "message": "创建微信支付订单失败",
+ "error": err.Error(),
+ })
+ return
+ }
+ // 微信返回的是二维码URL
+ if resultMap, ok := result.(map[string]string); ok {
+ if url, exists := resultMap["code_url"]; exists {
+ codeURL = url
+ }
+ } else if resultMap, ok := result.(map[string]interface{}); ok {
+ // 兼容处理
+ if url, exists := resultMap["code_url"]; exists {
+ codeURL = fmt.Sprintf("%v", url)
+ }
+ }
+ h.logger.Info("步骤4: 微信订单创建成功",
+ zap.String("out_trade_no", outTradeNo),
+ zap.String("code_url", codeURL),
+ )
+ }
+
+ response := CreatePaymentOrderResponse{
+ OrderID: createdDownload.ID,
+ PaymentType: req.PaymentType,
+ Amount: finalPrice.String(),
+ }
+
+ if req.PaymentType == "wechat" {
+ response.CodeURL = codeURL
+ } else {
+ response.PayURL = payURL
+ }
+
+ h.logger.Info("========== 组件报告下载支付订单创建完成 ==========",
+ zap.String("order_id", createdDownload.ID),
+ zap.String("out_trade_no", outTradeNo),
+ zap.String("recharge_id", rechargeRecord.ID),
+ zap.String("payment_type", req.PaymentType),
+ zap.String("platform", platform),
+ zap.String("amount", finalPrice.String()),
+ zap.String("notes", notes),
+ )
+
+ c.JSON(http.StatusOK, response)
+}
+
+// CheckPaymentStatusResponse 检查支付状态响应
+type CheckPaymentStatusResponse struct {
+ OrderID string `json:"order_id"` // 订单ID
+ PaymentStatus string `json:"payment_status"` // 支付状态:pending, success, failed
+ CanDownload bool `json:"can_download"` // 是否可以下载
+}
+
+// CheckPaymentStatus 检查支付状态
+// GET /api/v1/products/:id/component-report/check-payment/:orderId
+func (h *ComponentReportHandler) CheckPaymentStatus(c *gin.Context) {
+ userID := c.GetString("user_id")
+ if userID == "" {
+ c.JSON(http.StatusUnauthorized, gin.H{
+ "code": 401,
+ "message": "用户未登录",
+ })
+ return
+ }
+
+ orderID := c.Param("orderId")
+ if orderID == "" {
+ c.JSON(http.StatusBadRequest, gin.H{
+ "code": 400,
+ "message": "订单ID不能为空",
+ })
+ return
+ }
+
+ // 根据订单ID查询下载记录
+ download, err := h.componentReportRepo.GetDownloadByID(c.Request.Context(), orderID)
+ if err != nil {
+ h.logger.Error("查询下载记录失败", zap.Error(err), zap.String("order_id", orderID))
+ c.JSON(http.StatusNotFound, gin.H{
+ "code": 404,
+ "message": "订单不存在",
+ })
+ return
+ }
+
+ // 验证订单是否属于当前用户
+ if download.UserID != userID {
+ c.JSON(http.StatusForbidden, gin.H{
+ "code": 403,
+ "message": "无权访问此订单",
+ })
+ return
+ }
+
+ // 如果订单状态是 pending,主动查询支付订单状态
+ if download.PaymentStatus == "pending" && download.PaymentOrderID != nil {
+ outTradeNo := *download.PaymentOrderID
+ h.logger.Info("订单状态为pending,主动查询支付订单状态",
+ zap.String("order_id", orderID),
+ zap.String("out_trade_no", outTradeNo),
+ zap.String("payment_type", func() string {
+ if download.PaymentType != nil {
+ return *download.PaymentType
+ }
+ return "unknown"
+ }()),
+ )
+
+ // 根据支付类型查询订单状态
+ if download.PaymentType != nil && *download.PaymentType == "wechat" {
+ // 查询微信订单状态
+ wechatOrder, err := h.wechatOrderRepo.GetByOutTradeNo(c.Request.Context(), outTradeNo)
+ if err == nil && wechatOrder != nil {
+ // 如果订单状态为pending,主动查询微信订单状态
+ if wechatOrder.Status == finance_entities.WechatOrderStatusPending {
+ h.logger.Info("微信订单状态为pending,主动查询微信支付状态",
+ zap.String("out_trade_no", outTradeNo),
+ )
+
+ // 调用微信查询接口
+ transaction, err := h.wechatPayService.QueryOrderStatus(c.Request.Context(), outTradeNo)
+ if err == nil && transaction != nil {
+ tradeState := ""
+ transactionID := ""
+ if transaction.TradeState != nil {
+ tradeState = *transaction.TradeState
+ }
+ if transaction.TransactionId != nil {
+ transactionID = *transaction.TransactionId
+ }
+
+ h.logger.Info("微信查询订单状态返回",
+ zap.String("out_trade_no", outTradeNo),
+ zap.String("trade_state", tradeState),
+ zap.String("transaction_id", transactionID),
+ )
+
+ // 如果支付成功,更新订单状态(这里需要调用 FinanceApplicationService 的方法)
+ // 由于没有直接访问 FinanceApplicationService,我们只更新下载记录状态
+ if tradeState == "SUCCESS" {
+ h.logger.Info("检测到微信支付成功,更新下载记录状态",
+ zap.String("out_trade_no", outTradeNo),
+ zap.String("download_id", download.ID),
+ )
+
+ // 更新微信订单状态
+ payAmount := decimal.Zero
+ if transaction.Amount != nil && transaction.Amount.Total != nil {
+ payAmount = decimal.NewFromInt(*transaction.Amount.Total).Div(decimal.NewFromInt(100))
+ }
+ wechatOrder.MarkSuccess(transactionID, "", "", payAmount, payAmount)
+ err = h.wechatOrderRepo.Update(c.Request.Context(), *wechatOrder)
+ if err != nil {
+ h.logger.Error("更新微信订单状态失败", zap.Error(err))
+ }
+
+ // 更新下载记录状态
+ download.PaymentStatus = "success"
+ // 设置过期时间(30天后)
+ expiresAt := time.Now().Add(30 * 24 * time.Hour)
+ download.ExpiresAt = &expiresAt
+ err = h.componentReportRepo.UpdateDownload(c.Request.Context(), download)
+ if err != nil {
+ h.logger.Error("更新下载记录状态失败", zap.Error(err))
+ } else {
+ h.logger.Info("下载记录状态更新成功",
+ zap.String("download_id", download.ID),
+ zap.String("payment_status", download.PaymentStatus),
+ )
+ }
+ }
+ }
+ } else if wechatOrder.Status == finance_entities.WechatOrderStatusSuccess {
+ // 订单已成功,但下载记录状态未更新,更新下载记录
+ if download.PaymentStatus != "success" {
+ h.logger.Info("微信订单已成功,但下载记录状态未更新,更新下载记录",
+ zap.String("out_trade_no", outTradeNo),
+ zap.String("download_id", download.ID),
+ )
+ download.PaymentStatus = "success"
+ expiresAt := time.Now().Add(30 * 24 * time.Hour)
+ download.ExpiresAt = &expiresAt
+ err = h.componentReportRepo.UpdateDownload(c.Request.Context(), download)
+ if err != nil {
+ h.logger.Error("更新下载记录状态失败", zap.Error(err))
+ }
+ }
+ }
+ }
+ } else if download.PaymentType != nil && *download.PaymentType == "alipay" {
+ // 查询支付宝订单状态
+ alipayOrder, err := h.alipayOrderRepo.GetByOutTradeNo(c.Request.Context(), outTradeNo)
+ if err == nil && alipayOrder != nil {
+ // 如果订单状态为pending,主动查询支付宝订单状态
+ if alipayOrder.Status == finance_entities.AlipayOrderStatusPending {
+ h.logger.Info("支付宝订单状态为pending,主动查询支付宝支付状态",
+ zap.String("out_trade_no", outTradeNo),
+ )
+
+ // 调用支付宝查询接口
+ alipayResp, err := h.aliPayService.QueryOrderStatus(c.Request.Context(), outTradeNo)
+ if err == nil && alipayResp != nil {
+ alipayStatus := alipayResp.TradeStatus
+ h.logger.Info("支付宝查询订单状态返回",
+ zap.String("out_trade_no", outTradeNo),
+ zap.String("trade_status", string(alipayStatus)),
+ zap.String("trade_no", alipayResp.TradeNo),
+ )
+
+ // 如果支付成功,更新订单状态
+ if alipayStatus == "TRADE_SUCCESS" || alipayStatus == "TRADE_FINISHED" {
+ h.logger.Info("检测到支付宝支付成功,更新下载记录状态",
+ zap.String("out_trade_no", outTradeNo),
+ zap.String("download_id", download.ID),
+ )
+
+ // 更新支付宝订单状态
+ amount, _ := decimal.NewFromString(alipayResp.TotalAmount)
+ alipayOrder.MarkSuccess(alipayResp.TradeNo, "", "", amount, amount)
+ err = h.alipayOrderRepo.Update(c.Request.Context(), *alipayOrder)
+ if err != nil {
+ h.logger.Error("更新支付宝订单状态失败", zap.Error(err))
+ }
+
+ // 更新下载记录状态
+ download.PaymentStatus = "success"
+ expiresAt := time.Now().Add(30 * 24 * time.Hour)
+ download.ExpiresAt = &expiresAt
+ err = h.componentReportRepo.UpdateDownload(c.Request.Context(), download)
+ if err != nil {
+ h.logger.Error("更新下载记录状态失败", zap.Error(err))
+ } else {
+ h.logger.Info("下载记录状态更新成功",
+ zap.String("download_id", download.ID),
+ zap.String("payment_status", download.PaymentStatus),
+ )
+ }
+ }
+ }
+ } else if alipayOrder.Status == finance_entities.AlipayOrderStatusSuccess {
+ // 订单已成功,但下载记录状态未更新,更新下载记录
+ if download.PaymentStatus != "success" {
+ h.logger.Info("支付宝订单已成功,但下载记录状态未更新,更新下载记录",
+ zap.String("out_trade_no", outTradeNo),
+ zap.String("download_id", download.ID),
+ )
+ download.PaymentStatus = "success"
+ expiresAt := time.Now().Add(30 * 24 * time.Hour)
+ download.ExpiresAt = &expiresAt
+ err = h.componentReportRepo.UpdateDownload(c.Request.Context(), download)
+ if err != nil {
+ h.logger.Error("更新下载记录状态失败", zap.Error(err))
+ }
+ }
+ }
+ }
+ }
+
+ // 重新获取更新后的下载记录
+ updatedDownload, err := h.componentReportRepo.GetDownloadByID(c.Request.Context(), orderID)
+ if err == nil && updatedDownload != nil {
+ download = updatedDownload
+ }
+ }
+
+ // 返回支付状态
+ canDownload := download.PaymentStatus == "success" && !download.IsExpired()
+
+ c.JSON(http.StatusOK, CheckPaymentStatusResponse{
+ OrderID: download.ID,
+ PaymentStatus: download.PaymentStatus,
+ CanDownload: canDownload,
+ })
+}
+
+// detectPlatform 根据 User-Agent 检测支付平台类型
+func (h *ComponentReportHandler) detectPlatform(userAgent string) string {
+ if userAgent == "" {
+ return "h5" // 默认 H5
+ }
+
+ ua := strings.ToLower(userAgent)
+
+ // 检测移动设备
+ if strings.Contains(ua, "mobile") || strings.Contains(ua, "android") ||
+ strings.Contains(ua, "iphone") || strings.Contains(ua, "ipad") {
+ // 检测是否是支付宝或微信内置浏览器
+ if strings.Contains(ua, "alipay") {
+ return "app" // 支付宝 APP
+ }
+ if strings.Contains(ua, "micromessenger") {
+ return "h5" // 微信 H5
+ }
+ return "h5" // 移动端默认 H5
+ }
+
+ // PC 端
+ return "pc"
+}
diff --git a/internal/shared/component_report/zip_generator.go b/internal/shared/component_report/zip_generator.go
new file mode 100644
index 0000000..8659b96
--- /dev/null
+++ b/internal/shared/component_report/zip_generator.go
@@ -0,0 +1,265 @@
+package component_report
+
+import (
+ "archive/zip"
+ "context"
+ "fmt"
+ "io"
+ "os"
+ "path/filepath"
+ "strings"
+
+ "go.uber.org/zap"
+)
+
+// ZipGenerator ZIP文件生成器
+type ZipGenerator struct {
+ logger *zap.Logger
+}
+
+// NewZipGenerator 创建ZIP文件生成器
+func NewZipGenerator(logger *zap.Logger) *ZipGenerator {
+ return &ZipGenerator{
+ logger: logger,
+ }
+}
+
+// GenerateZipFile 生成ZIP文件,包含 example.json 和匹配的组件文件
+// productID: 产品ID
+// subProductCodes: 子产品编号列表(如果为空,则处理所有子产品)
+// exampleJSONGenerator: 示例JSON生成器
+// outputPath: 输出ZIP文件路径(如果为空,则使用默认路径)
+func (g *ZipGenerator) GenerateZipFile(
+ ctx context.Context,
+ productID string,
+ subProductCodes []string,
+ exampleJSONGenerator *ExampleJSONGenerator,
+ outputPath string,
+) (string, error) {
+ // 1. 生成 example.json 内容
+ exampleJSON, err := exampleJSONGenerator.GenerateExampleJSON(ctx, productID, subProductCodes)
+ if err != nil {
+ return "", fmt.Errorf("生成example.json失败: %w", err)
+ }
+
+ // 2. 确定输出路径
+ if outputPath == "" {
+ // 使用默认路径:storage/component-reports/{productID}.zip
+ outputDir := "storage/component-reports"
+ if err := os.MkdirAll(outputDir, 0755); err != nil {
+ return "", fmt.Errorf("创建输出目录失败: %w", err)
+ }
+ outputPath = filepath.Join(outputDir, fmt.Sprintf("%s_example.json.zip", productID))
+ }
+
+ // 3. 创建ZIP文件
+ zipFile, err := os.Create(outputPath)
+ if err != nil {
+ return "", fmt.Errorf("创建ZIP文件失败: %w", err)
+ }
+ defer zipFile.Close()
+
+ zipWriter := zip.NewWriter(zipFile)
+ defer zipWriter.Close()
+
+ // 4. 添加 example.json 到 public 目录
+ exampleWriter, err := zipWriter.Create("public/example.json")
+ if err != nil {
+ return "", fmt.Errorf("创建example.json文件失败: %w", err)
+ }
+
+ _, err = exampleWriter.Write(exampleJSON)
+ if err != nil {
+ return "", fmt.Errorf("写入example.json失败: %w", err)
+ }
+
+ // 5. 添加整个 src 目录,但过滤 ui 目录下的文件
+ srcBasePath := filepath.Join("resources", "Pure Component", "src")
+ uiBasePath := filepath.Join(srcBasePath, "ui")
+
+ // 收集所有匹配的组件名称(文件夹名或文件名)
+ matchedNames := make(map[string]bool)
+ for _, productCode := range subProductCodes {
+ path, _, err := exampleJSONGenerator.MatchProductCodeToPath(ctx, productCode)
+ if err == nil && path != "" {
+ // 获取组件名称(文件夹名或文件名)
+ componentName := filepath.Base(path)
+ matchedNames[componentName] = true
+ }
+ }
+
+ // 遍历整个 src 目录
+ err = filepath.Walk(srcBasePath, func(path string, info os.FileInfo, err error) error {
+ if err != nil {
+ return err
+ }
+
+ // 计算相对于 src 的路径
+ relPath, err := filepath.Rel(srcBasePath, path)
+ if err != nil {
+ return err
+ }
+
+ // 转换为ZIP路径格式
+ zipPath := filepath.ToSlash(filepath.Join("src", relPath))
+
+ // 检查是否在 ui 目录下
+ uiRelPath, err := filepath.Rel(uiBasePath, path)
+ isInUIDir := err == nil && !strings.HasPrefix(uiRelPath, "..")
+
+ if isInUIDir {
+ // 如果是 ui 目录本身,直接添加
+ if uiRelPath == "." || uiRelPath == "" {
+ if info.IsDir() {
+ _, err = zipWriter.Create(zipPath + "/")
+ return err
+ }
+ return nil
+ }
+
+ // 获取文件/文件夹名称
+ fileName := info.Name()
+
+ // 检查是否应该保留:
+ // 1. CBehaviorRiskScan.vue 文件(无论在哪里)
+ // 2. 匹配到的组件文件夹/文件
+ shouldInclude := false
+
+ // 检查是否是 CBehaviorRiskScan.vue
+ if fileName == "CBehaviorRiskScan.vue" {
+ shouldInclude = true
+ } else {
+ // 检查是否是匹配的组件(检查组件名称)
+ if matchedNames[fileName] {
+ shouldInclude = true
+ } else {
+ // 检查是否在匹配的组件文件夹内
+ // 获取相对于 ui 的路径的第一部分(组件文件夹名)
+ parts := strings.Split(filepath.ToSlash(uiRelPath), "/")
+ if len(parts) > 0 && parts[0] != "" && parts[0] != "." {
+ if matchedNames[parts[0]] {
+ shouldInclude = true
+ }
+ }
+ }
+ }
+
+ if !shouldInclude {
+ // 跳过不匹配的文件/文件夹
+ if info.IsDir() {
+ return filepath.SkipDir
+ }
+ return nil
+ }
+ }
+
+ // 如果是目录,创建目录项
+ if info.IsDir() {
+ _, err = zipWriter.Create(zipPath + "/")
+ return err
+ }
+
+ // 添加文件
+ return g.AddFileToZip(zipWriter, path, zipPath)
+ })
+
+ if err != nil {
+ g.logger.Warn("添加src目录失败", zap.Error(err))
+ }
+
+ g.logger.Info("成功生成ZIP文件",
+ zap.String("product_id", productID),
+ zap.String("output_path", outputPath),
+ zap.Int("example_json_size", len(exampleJSON)),
+ zap.Int("sub_product_count", len(subProductCodes)),
+ )
+
+ return outputPath, nil
+}
+
+// AddFileToZip 添加文件到ZIP
+func (g *ZipGenerator) AddFileToZip(zipWriter *zip.Writer, filePath string, zipPath string) error {
+ file, err := os.Open(filePath)
+ if err != nil {
+ return fmt.Errorf("打开文件失败: %w", err)
+ }
+ defer file.Close()
+
+ writer, err := zipWriter.Create(zipPath)
+ if err != nil {
+ return fmt.Errorf("创建ZIP文件项失败: %w", err)
+ }
+
+ _, err = io.Copy(writer, file)
+ if err != nil {
+ return fmt.Errorf("复制文件内容失败: %w", err)
+ }
+
+ return nil
+}
+
+// AddFolderToZip 递归添加文件夹到ZIP
+func (g *ZipGenerator) AddFolderToZip(zipWriter *zip.Writer, folderPath string, basePath string) error {
+ return filepath.Walk(folderPath, func(path string, info os.FileInfo, err error) error {
+ if err != nil {
+ return err
+ }
+
+ if info.IsDir() {
+ return nil
+ }
+
+ // 计算相对路径
+ relPath, err := filepath.Rel(basePath, path)
+ if err != nil {
+ return err
+ }
+
+ // 转换为ZIP路径格式(使用正斜杠)
+ zipPath := filepath.ToSlash(relPath)
+
+ return g.AddFileToZip(zipWriter, path, zipPath)
+ })
+}
+
+// AddFileToZipWithTarget 将单个文件添加到ZIP的指定目标路径
+func (g *ZipGenerator) AddFileToZipWithTarget(zipWriter *zip.Writer, filePath string, targetPath string) error {
+ file, err := os.Open(filePath)
+ if err != nil {
+ return fmt.Errorf("打开文件失败: %w", err)
+ }
+ defer file.Close()
+
+ writer, err := zipWriter.Create(filepath.ToSlash(targetPath))
+ if err != nil {
+ return fmt.Errorf("创建ZIP文件项失败: %w", err)
+ }
+
+ _, err = io.Copy(writer, file)
+ if err != nil {
+ return fmt.Errorf("复制文件内容失败: %w", err)
+ }
+
+ return nil
+}
+
+// AddFolderToZipWithPrefix 递归添加文件夹到ZIP,并在ZIP内添加路径前缀
+func (g *ZipGenerator) AddFolderToZipWithPrefix(zipWriter *zip.Writer, folderPath string, basePath string, prefix string) error {
+ return filepath.Walk(folderPath, func(path string, info os.FileInfo, err error) error {
+ if err != nil {
+ return err
+ }
+
+ if info.IsDir() {
+ return nil
+ }
+
+ relPath, err := filepath.Rel(basePath, path)
+ if err != nil {
+ return err
+ }
+
+ zipPath := filepath.ToSlash(filepath.Join(prefix, relPath))
+ return g.AddFileToZip(zipWriter, path, zipPath)
+ })
+}
diff --git a/resources/Pure Component/index.html b/resources/Pure Component/index.html
new file mode 100644
index 0000000..cb56af5
--- /dev/null
+++ b/resources/Pure Component/index.html
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+ 报告查看器
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/resources/Pure Component/package.json b/resources/Pure Component/package.json
new file mode 100644
index 0000000..f8e442d
--- /dev/null
+++ b/resources/Pure Component/package.json
@@ -0,0 +1,35 @@
+{
+ "name": "report-viewer",
+ "version": "1.0.0",
+ "private": true,
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "vite build",
+ "preview": "vite preview"
+ },
+ "dependencies": {
+ "@vueuse/core": "^11.3.0",
+ "axios": "^1.7.7",
+ "echarts": "^5.5.1",
+ "lodash": "^4.17.21",
+ "vant": "^4.9.9",
+ "vue": "^3.5.12",
+ "vue-echarts": "^7.0.3",
+ "vue-router": "^4.4.5"
+ },
+ "devDependencies": {
+ "@vant/auto-import-resolver": "^1.3.0",
+ "@vitejs/plugin-vue": "^5.1.4",
+ "@vitejs/plugin-vue-jsx": "^4.0.1",
+ "autoprefixer": "^10.4.20",
+ "postcss": "^8.4.49",
+ "sass-embedded": "^1.81.0",
+ "tailwindcss": "^3.4.15",
+ "terser": "^5.43.1",
+ "unplugin-auto-import": "^0.18.5",
+ "unplugin-vue-components": "^0.27.5",
+ "vite": "^5.4.10"
+ },
+ "packageManager": "pnpm@10.10.0+sha512.d615db246fe70f25dcfea6d8d73dee782ce23e2245e3c4f6f888249fb568149318637dca73c2c5c8ef2a4ca0d5657fb9567188bfab47f566d1ee6ce987815c39"
+}
\ No newline at end of file
diff --git a/resources/Pure Component/pnpm-lock.yaml b/resources/Pure Component/pnpm-lock.yaml
new file mode 100644
index 0000000..f7648c4
--- /dev/null
+++ b/resources/Pure Component/pnpm-lock.yaml
@@ -0,0 +1,3101 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ '@vueuse/core':
+ specifier: ^11.3.0
+ version: 11.3.0(vue@3.5.24)
+ axios:
+ specifier: ^1.7.7
+ version: 1.13.2
+ echarts:
+ specifier: ^5.5.1
+ version: 5.6.0
+ lodash:
+ specifier: ^4.17.21
+ version: 4.17.21
+ vant:
+ specifier: ^4.9.9
+ version: 4.9.21(vue@3.5.24)
+ vue:
+ specifier: ^3.5.12
+ version: 3.5.24
+ vue-echarts:
+ specifier: ^7.0.3
+ version: 7.0.3(@vue/runtime-core@3.5.24)(echarts@5.6.0)(vue@3.5.24)
+ vue-router:
+ specifier: ^4.4.5
+ version: 4.6.3(vue@3.5.24)
+ devDependencies:
+ '@vant/auto-import-resolver':
+ specifier: ^1.3.0
+ version: 1.3.0
+ '@vitejs/plugin-vue':
+ specifier: ^5.1.4
+ version: 5.2.4(vite@5.4.21(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.44.1))(vue@3.5.24)
+ '@vitejs/plugin-vue-jsx':
+ specifier: ^4.0.1
+ version: 4.2.0(vite@5.4.21(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.44.1))(vue@3.5.24)
+ autoprefixer:
+ specifier: ^10.4.20
+ version: 10.4.22(postcss@8.5.6)
+ postcss:
+ specifier: ^8.4.49
+ version: 8.5.6
+ sass-embedded:
+ specifier: ^1.81.0
+ version: 1.93.3
+ tailwindcss:
+ specifier: ^3.4.15
+ version: 3.4.18
+ terser:
+ specifier: ^5.43.1
+ version: 5.44.1
+ unplugin-auto-import:
+ specifier: ^0.18.5
+ version: 0.18.6(@vueuse/core@11.3.0(vue@3.5.24))(rollup@4.53.2)
+ unplugin-vue-components:
+ specifier: ^0.27.5
+ version: 0.27.5(@babel/parser@7.28.5)(rollup@4.53.2)(vue@3.5.24)
+ vite:
+ specifier: ^5.4.10
+ version: 5.4.21(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.44.1)
+
+packages:
+
+ '@alloc/quick-lru@5.2.0':
+ resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
+ engines: {node: '>=10'}
+
+ '@antfu/utils@0.7.10':
+ resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==}
+
+ '@babel/code-frame@7.27.1':
+ resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/compat-data@7.28.5':
+ resolution: {integrity: sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/core@7.28.5':
+ resolution: {integrity: sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/generator@7.28.5':
+ resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-annotate-as-pure@7.27.3':
+ resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-compilation-targets@7.27.2':
+ resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-create-class-features-plugin@7.28.5':
+ resolution: {integrity: sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-globals@7.28.0':
+ resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-member-expression-to-functions@7.28.5':
+ resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-imports@7.27.1':
+ resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-transforms@7.28.3':
+ resolution: {integrity: sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-optimise-call-expression@7.27.1':
+ resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-plugin-utils@7.27.1':
+ resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-replace-supers@7.27.1':
+ resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-skip-transparent-expression-wrappers@7.27.1':
+ resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-string-parser@7.27.1':
+ resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-identifier@7.28.5':
+ resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-option@7.27.1':
+ resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helpers@7.28.4':
+ resolution: {integrity: sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/parser@7.28.5':
+ resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ '@babel/plugin-syntax-jsx@7.27.1':
+ resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-typescript@7.27.1':
+ resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-typescript@7.28.5':
+ resolution: {integrity: sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/template@7.27.2':
+ resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/traverse@7.28.5':
+ resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/types@7.28.5':
+ resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==}
+ engines: {node: '>=6.9.0'}
+
+ '@bufbuild/protobuf@2.10.1':
+ resolution: {integrity: sha512-ckS3+vyJb5qGpEYv/s1OebUHDi/xSNtfgw1wqKZo7MR9F2z+qXr0q5XagafAG/9O0QPVIUfST0smluYSTpYFkg==}
+
+ '@esbuild/aix-ppc64@0.21.5':
+ resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/android-arm64@0.21.5':
+ resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm@0.21.5':
+ resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-x64@0.21.5':
+ resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/darwin-arm64@0.21.5':
+ resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.21.5':
+ resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/freebsd-arm64@0.21.5':
+ resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.21.5':
+ resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.21.5':
+ resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.21.5':
+ resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.21.5':
+ resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.21.5':
+ resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.21.5':
+ resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.21.5':
+ resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.21.5':
+ resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.21.5':
+ resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.21.5':
+ resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-x64@0.21.5':
+ resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-x64@0.21.5':
+ resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/sunos-x64@0.21.5':
+ resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/win32-arm64@0.21.5':
+ resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.21.5':
+ resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.21.5':
+ resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+
+ '@isaacs/cliui@8.0.2':
+ resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
+ engines: {node: '>=12'}
+
+ '@jridgewell/gen-mapping@0.3.13':
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+
+ '@jridgewell/remapping@2.3.5':
+ resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/source-map@0.3.11':
+ resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==}
+
+ '@jridgewell/sourcemap-codec@1.5.5':
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+
+ '@nodelib/fs.scandir@2.1.5':
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.stat@2.0.5':
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.walk@1.2.8':
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+ engines: {node: '>= 8'}
+
+ '@parcel/watcher-android-arm64@2.5.1':
+ resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ '@parcel/watcher-darwin-arm64@2.5.1':
+ resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@parcel/watcher-darwin-x64@2.5.1':
+ resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@parcel/watcher-freebsd-x64@2.5.1':
+ resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@parcel/watcher-linux-arm-glibc@2.5.1':
+ resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm]
+ os: [linux]
+ libc: [glibc]
+
+ '@parcel/watcher-linux-arm-musl@2.5.1':
+ resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm]
+ os: [linux]
+ libc: [musl]
+
+ '@parcel/watcher-linux-arm64-glibc@2.5.1':
+ resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@parcel/watcher-linux-arm64-musl@2.5.1':
+ resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@parcel/watcher-linux-x64-glibc@2.5.1':
+ resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@parcel/watcher-linux-x64-musl@2.5.1':
+ resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@parcel/watcher-win32-arm64@2.5.1':
+ resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@parcel/watcher-win32-ia32@2.5.1':
+ resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@parcel/watcher-win32-x64@2.5.1':
+ resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ '@parcel/watcher@2.5.1':
+ resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==}
+ engines: {node: '>= 10.0.0'}
+
+ '@pkgjs/parseargs@0.11.0':
+ resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
+ engines: {node: '>=14'}
+
+ '@rolldown/pluginutils@1.0.0-beta.51':
+ resolution: {integrity: sha512-51/8cNXMrqWqX3o8DZidhwz1uYq0BhHDDSfVygAND1Skx5s1TDw3APSSxCMcFFedwgqGcx34gRouwY+m404BBQ==}
+
+ '@rollup/pluginutils@5.3.0':
+ resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/rollup-android-arm-eabi@4.53.2':
+ resolution: {integrity: sha512-yDPzwsgiFO26RJA4nZo8I+xqzh7sJTZIWQOxn+/XOdPE31lAvLIYCKqjV+lNH/vxE2L2iH3plKxDCRK6i+CwhA==}
+ cpu: [arm]
+ os: [android]
+
+ '@rollup/rollup-android-arm64@4.53.2':
+ resolution: {integrity: sha512-k8FontTxIE7b0/OGKeSN5B6j25EuppBcWM33Z19JoVT7UTXFSo3D9CdU39wGTeb29NO3XxpMNauh09B+Ibw+9g==}
+ cpu: [arm64]
+ os: [android]
+
+ '@rollup/rollup-darwin-arm64@4.53.2':
+ resolution: {integrity: sha512-A6s4gJpomNBtJ2yioj8bflM2oogDwzUiMl2yNJ2v9E7++sHrSrsQ29fOfn5DM/iCzpWcebNYEdXpaK4tr2RhfQ==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rollup/rollup-darwin-x64@4.53.2':
+ resolution: {integrity: sha512-e6XqVmXlHrBlG56obu9gDRPW3O3hLxpwHpLsBJvuI8qqnsrtSZ9ERoWUXtPOkY8c78WghyPHZdmPhHLWNdAGEw==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rollup/rollup-freebsd-arm64@4.53.2':
+ resolution: {integrity: sha512-v0E9lJW8VsrwPux5Qe5CwmH/CF/2mQs6xU1MF3nmUxmZUCHazCjLgYvToOk+YuuUqLQBio1qkkREhxhc656ViA==}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@rollup/rollup-freebsd-x64@4.53.2':
+ resolution: {integrity: sha512-ClAmAPx3ZCHtp6ysl4XEhWU69GUB1D+s7G9YjHGhIGCSrsg00nEGRRZHmINYxkdoJehde8VIsDC5t9C0gb6yqA==}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.53.2':
+ resolution: {integrity: sha512-EPlb95nUsz6Dd9Qy13fI5kUPXNSljaG9FiJ4YUGU1O/Q77i5DYFW5KR8g1OzTcdZUqQQ1KdDqsTohdFVwCwjqg==}
+ cpu: [arm]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-arm-musleabihf@4.53.2':
+ resolution: {integrity: sha512-BOmnVW+khAUX+YZvNfa0tGTEMVVEerOxN0pDk2E6N6DsEIa2Ctj48FOMfNDdrwinocKaC7YXUZ1pHlKpnkja/Q==}
+ cpu: [arm]
+ os: [linux]
+ libc: [musl]
+
+ '@rollup/rollup-linux-arm64-gnu@4.53.2':
+ resolution: {integrity: sha512-Xt2byDZ+6OVNuREgBXr4+CZDJtrVso5woFtpKdGPhpTPHcNG7D8YXeQzpNbFRxzTVqJf7kvPMCub/pcGUWgBjA==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-arm64-musl@4.53.2':
+ resolution: {integrity: sha512-+LdZSldy/I9N8+klim/Y1HsKbJ3BbInHav5qE9Iy77dtHC/pibw1SR/fXlWyAk0ThnpRKoODwnAuSjqxFRDHUQ==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@rollup/rollup-linux-loong64-gnu@4.53.2':
+ resolution: {integrity: sha512-8ms8sjmyc1jWJS6WdNSA23rEfdjWB30LH8Wqj0Cqvv7qSHnvw6kgMMXRdop6hkmGPlyYBdRPkjJnj3KCUHV/uQ==}
+ cpu: [loong64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-ppc64-gnu@4.53.2':
+ resolution: {integrity: sha512-3HRQLUQbpBDMmzoxPJYd3W6vrVHOo2cVW8RUo87Xz0JPJcBLBr5kZ1pGcQAhdZgX9VV7NbGNipah1omKKe23/g==}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-riscv64-gnu@4.53.2':
+ resolution: {integrity: sha512-fMjKi+ojnmIvhk34gZP94vjogXNNUKMEYs+EDaB/5TG/wUkoeua7p7VCHnE6T2Tx+iaghAqQX8teQzcvrYpaQA==}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-riscv64-musl@4.53.2':
+ resolution: {integrity: sha512-XuGFGU+VwUUV5kLvoAdi0Wz5Xbh2SrjIxCtZj6Wq8MDp4bflb/+ThZsVxokM7n0pcbkEr2h5/pzqzDYI7cCgLQ==}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [musl]
+
+ '@rollup/rollup-linux-s390x-gnu@4.53.2':
+ resolution: {integrity: sha512-w6yjZF0P+NGzWR3AXWX9zc0DNEGdtvykB03uhonSHMRa+oWA6novflo2WaJr6JZakG2ucsyb+rvhrKac6NIy+w==}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-x64-gnu@4.53.2':
+ resolution: {integrity: sha512-yo8d6tdfdeBArzC7T/PnHd7OypfI9cbuZzPnzLJIyKYFhAQ8SvlkKtKBMbXDxe1h03Rcr7u++nFS7tqXz87Gtw==}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-x64-musl@4.53.2':
+ resolution: {integrity: sha512-ah59c1YkCxKExPP8O9PwOvs+XRLKwh/mV+3YdKqQ5AMQ0r4M4ZDuOrpWkUaqO7fzAHdINzV9tEVu8vNw48z0lA==}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@rollup/rollup-openharmony-arm64@4.53.2':
+ resolution: {integrity: sha512-4VEd19Wmhr+Zy7hbUsFZ6YXEiP48hE//KPLCSVNY5RMGX2/7HZ+QkN55a3atM1C/BZCGIgqN+xrVgtdak2S9+A==}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rollup/rollup-win32-arm64-msvc@4.53.2':
+ resolution: {integrity: sha512-IlbHFYc/pQCgew/d5fslcy1KEaYVCJ44G8pajugd8VoOEI8ODhtb/j8XMhLpwHCMB3yk2J07ctup10gpw2nyMA==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rollup/rollup-win32-ia32-msvc@4.53.2':
+ resolution: {integrity: sha512-lNlPEGgdUfSzdCWU176ku/dQRnA7W+Gp8d+cWv73jYrb8uT7HTVVxq62DUYxjbaByuf1Yk0RIIAbDzp+CnOTFg==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-gnu@4.53.2':
+ resolution: {integrity: sha512-S6YojNVrHybQis2lYov1sd+uj7K0Q05NxHcGktuMMdIQ2VixGwAfbJ23NnlvvVV1bdpR2m5MsNBViHJKcA4ADw==}
+ cpu: [x64]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-msvc@4.53.2':
+ resolution: {integrity: sha512-k+/Rkcyx//P6fetPoLMb8pBeqJBNGx81uuf7iljX9++yNBVRDQgD04L+SVXmXmh5ZP4/WOp4mWF0kmi06PW2tA==}
+ cpu: [x64]
+ os: [win32]
+
+ '@types/estree@1.0.8':
+ resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+
+ '@types/web-bluetooth@0.0.20':
+ resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==}
+
+ '@vant/auto-import-resolver@1.3.0':
+ resolution: {integrity: sha512-lJyWtCyFizR4bHZvMiNMF3w+WTFTUWAvka1eqTnPK9ticUcKTCOx6qEmHcm8JPb3g1t3GaD2W3MnHkBp/nHamw==}
+
+ '@vant/popperjs@1.3.0':
+ resolution: {integrity: sha512-hB+czUG+aHtjhaEmCJDuXOep0YTZjdlRR+4MSmIFnkCQIxJaXLQdSsR90XWvAI2yvKUI7TCGqR8pQg2RtvkMHw==}
+
+ '@vant/use@1.6.0':
+ resolution: {integrity: sha512-PHHxeAASgiOpSmMjceweIrv2AxDZIkWXyaczksMoWvKV2YAYEhoizRuk/xFnKF+emUIi46TsQ+rvlm/t2BBCfA==}
+ peerDependencies:
+ vue: ^3.0.0
+
+ '@vitejs/plugin-vue-jsx@4.2.0':
+ resolution: {integrity: sha512-DSTrmrdLp+0LDNF77fqrKfx7X0ErRbOcUAgJL/HbSesqQwoUvUQ4uYQqaex+rovqgGcoPqVk+AwUh3v9CuiYIw==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ peerDependencies:
+ vite: ^5.0.0 || ^6.0.0
+ vue: ^3.0.0
+
+ '@vitejs/plugin-vue@5.2.4':
+ resolution: {integrity: sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ peerDependencies:
+ vite: ^5.0.0 || ^6.0.0
+ vue: ^3.2.25
+
+ '@vue/babel-helper-vue-transform-on@1.5.0':
+ resolution: {integrity: sha512-0dAYkerNhhHutHZ34JtTl2czVQHUNWv6xEbkdF5W+Yrv5pCWsqjeORdOgbtW2I9gWlt+wBmVn+ttqN9ZxR5tzA==}
+
+ '@vue/babel-plugin-jsx@1.5.0':
+ resolution: {integrity: sha512-mneBhw1oOqCd2247O0Yw/mRwC9jIGACAJUlawkmMBiNmL4dGA2eMzuNZVNqOUfYTa6vqmND4CtOPzmEEEqLKFw==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ peerDependenciesMeta:
+ '@babel/core':
+ optional: true
+
+ '@vue/babel-plugin-resolve-type@1.5.0':
+ resolution: {integrity: sha512-Wm/60o+53JwJODm4Knz47dxJnLDJ9FnKnGZJbUUf8nQRAtt6P+undLUAVU3Ha33LxOJe6IPoifRQ6F/0RrU31w==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@vue/compiler-core@3.5.24':
+ resolution: {integrity: sha512-eDl5H57AOpNakGNAkFDH+y7kTqrQpJkZFXhWZQGyx/5Wh7B1uQYvcWkvZi11BDhscPgj8N7XV3oRwiPnx1Vrig==}
+
+ '@vue/compiler-dom@3.5.24':
+ resolution: {integrity: sha512-1QHGAvs53gXkWdd3ZMGYuvQFXHW4ksKWPG8HP8/2BscrbZ0brw183q2oNWjMrSWImYLHxHrx1ItBQr50I/q2zw==}
+
+ '@vue/compiler-sfc@3.5.24':
+ resolution: {integrity: sha512-8EG5YPRgmTB+YxYBM3VXy8zHD9SWHUJLIGPhDovo3Z8VOgvP+O7UP5vl0J4BBPWYD9vxtBabzW1EuEZ+Cqs14g==}
+
+ '@vue/compiler-ssr@3.5.24':
+ resolution: {integrity: sha512-trOvMWNBMQ/odMRHW7Ae1CdfYx+7MuiQu62Jtu36gMLXcaoqKvAyh+P73sYG9ll+6jLB6QPovqoKGGZROzkFFg==}
+
+ '@vue/devtools-api@6.6.4':
+ resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==}
+
+ '@vue/reactivity@3.5.24':
+ resolution: {integrity: sha512-BM8kBhtlkkbnyl4q+HiF5R5BL0ycDPfihowulm02q3WYp2vxgPcJuZO866qa/0u3idbMntKEtVNuAUp5bw4teg==}
+
+ '@vue/runtime-core@3.5.24':
+ resolution: {integrity: sha512-RYP/byyKDgNIqfX/gNb2PB55dJmM97jc9wyF3jK7QUInYKypK2exmZMNwnjueWwGceEkP6NChd3D2ZVEp9undQ==}
+
+ '@vue/runtime-dom@3.5.24':
+ resolution: {integrity: sha512-Z8ANhr/i0XIluonHVjbUkjvn+CyrxbXRIxR7wn7+X7xlcb7dJsfITZbkVOeJZdP8VZwfrWRsWdShH6pngMxRjw==}
+
+ '@vue/server-renderer@3.5.24':
+ resolution: {integrity: sha512-Yh2j2Y4G/0/4z/xJ1Bad4mxaAk++C2v4kaa8oSYTMJBJ00/ndPuxCnWeot0/7/qafQFLh5pr6xeV6SdMcE/G1w==}
+ peerDependencies:
+ vue: 3.5.24
+
+ '@vue/shared@3.5.24':
+ resolution: {integrity: sha512-9cwHL2EsJBdi8NY22pngYYWzkTDhld6fAD6jlaeloNGciNSJL6bLpbxVgXl96X00Jtc6YWQv96YA/0sxex/k1A==}
+
+ '@vueuse/core@11.3.0':
+ resolution: {integrity: sha512-7OC4Rl1f9G8IT6rUfi9JrKiXy4bfmHhZ5x2Ceojy0jnd3mHNEvV4JaRygH362ror6/NZ+Nl+n13LPzGiPN8cKA==}
+
+ '@vueuse/metadata@11.3.0':
+ resolution: {integrity: sha512-pwDnDspTqtTo2HwfLw4Rp6yywuuBdYnPYDq+mO38ZYKGebCUQC/nVj/PXSiK9HX5otxLz8Fn7ECPbjiRz2CC3g==}
+
+ '@vueuse/shared@11.3.0':
+ resolution: {integrity: sha512-P8gSSWQeucH5821ek2mn/ciCk+MS/zoRKqdQIM3bHq6p7GXDAJLmnRRKmF5F65sAVJIfzQlwR3aDzwCn10s8hA==}
+
+ acorn@8.15.0:
+ resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-regex@6.2.2:
+ resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==}
+ engines: {node: '>=12'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ ansi-styles@6.2.3:
+ resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
+ engines: {node: '>=12'}
+
+ any-promise@1.3.0:
+ resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ arg@5.0.2:
+ resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
+
+ asynckit@0.4.0:
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+
+ autoprefixer@10.4.22:
+ resolution: {integrity: sha512-ARe0v/t9gO28Bznv6GgqARmVqcWOV3mfgUPn9becPHMiD3o9BwlRgaeccZnwTpZ7Zwqrm+c1sUSsMxIzQzc8Xg==}
+ engines: {node: ^10 || ^12 || >=14}
+ hasBin: true
+ peerDependencies:
+ postcss: ^8.1.0
+
+ axios@1.13.2:
+ resolution: {integrity: sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ baseline-browser-mapping@2.8.29:
+ resolution: {integrity: sha512-sXdt2elaVnhpDNRDz+1BDx1JQoJRuNk7oVlAlbGiFkLikHCAQiccexF/9e91zVi6RCgqspl04aP+6Cnl9zRLrA==}
+ hasBin: true
+
+ binary-extensions@2.3.0:
+ resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
+ engines: {node: '>=8'}
+
+ brace-expansion@2.0.2:
+ resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browserslist@4.28.0:
+ resolution: {integrity: sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+
+ buffer-builder@0.2.0:
+ resolution: {integrity: sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ call-bind-apply-helpers@1.0.2:
+ resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
+ engines: {node: '>= 0.4'}
+
+ camelcase-css@2.0.1:
+ resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
+ engines: {node: '>= 6'}
+
+ caniuse-lite@1.0.30001756:
+ resolution: {integrity: sha512-4HnCNKbMLkLdhJz3TToeVWHSnfJvPaq6vu/eRP0Ahub/07n484XHhBF5AJoSGHdVrS8tKFauUQz8Bp9P7LVx7A==}
+
+ chokidar@3.6.0:
+ resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
+ engines: {node: '>= 8.10.0'}
+
+ chokidar@4.0.3:
+ resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
+ engines: {node: '>= 14.16.0'}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ colorjs.io@0.5.2:
+ resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==}
+
+ combined-stream@1.0.8:
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+ engines: {node: '>= 0.8'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ commander@4.1.1:
+ resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
+ engines: {node: '>= 6'}
+
+ confbox@0.1.8:
+ resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
+
+ confbox@0.2.2:
+ resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==}
+
+ convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+
+ cross-spawn@7.0.6:
+ resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
+ engines: {node: '>= 8'}
+
+ cssesc@3.0.0:
+ resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ csstype@3.2.3:
+ resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
+
+ debug@4.4.3:
+ resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ delayed-stream@1.0.0:
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
+ engines: {node: '>=0.4.0'}
+
+ detect-libc@1.0.3:
+ resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==}
+ engines: {node: '>=0.10'}
+ hasBin: true
+
+ didyoumean@1.2.2:
+ resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
+
+ dlv@1.1.3:
+ resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
+
+ dunder-proto@1.0.1:
+ resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
+ engines: {node: '>= 0.4'}
+
+ eastasianwidth@0.2.0:
+ resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+
+ echarts@5.6.0:
+ resolution: {integrity: sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==}
+
+ electron-to-chromium@1.5.256:
+ resolution: {integrity: sha512-uqYq1IQhpXXLX+HgiXdyOZml7spy4xfy42yPxcCCRjswp0fYM2X+JwCON07lqnpLEGVCj739B7Yr+FngmHBMEQ==}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ emoji-regex@9.2.2:
+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+
+ entities@4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
+
+ es-define-property@1.0.1:
+ resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
+ engines: {node: '>= 0.4'}
+
+ es-errors@1.3.0:
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+ engines: {node: '>= 0.4'}
+
+ es-object-atoms@1.1.1:
+ resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
+ engines: {node: '>= 0.4'}
+
+ es-set-tostringtag@2.1.0:
+ resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
+ engines: {node: '>= 0.4'}
+
+ esbuild@0.21.5:
+ resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
+ engines: {node: '>=12'}
+ hasBin: true
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-string-regexp@5.0.0:
+ resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
+ engines: {node: '>=12'}
+
+ estree-walker@2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+
+ estree-walker@3.0.3:
+ resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
+
+ exsolve@1.0.8:
+ resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==}
+
+ fast-glob@3.3.3:
+ resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
+ engines: {node: '>=8.6.0'}
+
+ fastq@1.19.1:
+ resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ follow-redirects@1.15.11:
+ resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ debug: '*'
+ peerDependenciesMeta:
+ debug:
+ optional: true
+
+ foreground-child@3.3.1:
+ resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
+ engines: {node: '>=14'}
+
+ form-data@4.0.5:
+ resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==}
+ engines: {node: '>= 6'}
+
+ fraction.js@5.3.4:
+ resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ gensync@1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
+
+ get-intrinsic@1.3.0:
+ resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
+ engines: {node: '>= 0.4'}
+
+ get-proto@1.0.1:
+ resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
+ engines: {node: '>= 0.4'}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob-parent@6.0.2:
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+ engines: {node: '>=10.13.0'}
+
+ glob@10.5.0:
+ resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==}
+ hasBin: true
+
+ gopd@1.2.0:
+ resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
+ engines: {node: '>= 0.4'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ has-symbols@1.1.0:
+ resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
+ engines: {node: '>= 0.4'}
+
+ has-tostringtag@1.0.2:
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+ engines: {node: '>= 0.4'}
+
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+
+ immutable@5.1.4:
+ resolution: {integrity: sha512-p6u1bG3YSnINT5RQmx/yRZBpenIl30kVxkTLDyHLIMk0gict704Q9n+thfDI7lTRm9vXdDYutVzXhzcThxTnXA==}
+
+ is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+
+ is-core-module@2.16.1:
+ resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
+ engines: {node: '>= 0.4'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ jackspeak@3.4.3:
+ resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
+
+ jiti@1.21.7:
+ resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
+ hasBin: true
+
+ js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+ js-tokens@9.0.1:
+ resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==}
+
+ jsesc@3.1.0:
+ resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ lilconfig@3.1.3:
+ resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
+ engines: {node: '>=14'}
+
+ lines-and-columns@1.2.4:
+ resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+
+ local-pkg@0.5.1:
+ resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==}
+ engines: {node: '>=14'}
+
+ local-pkg@1.1.2:
+ resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==}
+ engines: {node: '>=14'}
+
+ lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+
+ lru-cache@10.4.3:
+ resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
+
+ lru-cache@5.1.1:
+ resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+
+ magic-string@0.30.21:
+ resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+
+ math-intrinsics@1.1.0:
+ resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
+ engines: {node: '>= 0.4'}
+
+ merge2@1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
+
+ micromatch@4.0.8:
+ resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
+ engines: {node: '>=8.6'}
+
+ mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+
+ mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
+
+ minimatch@9.0.5:
+ resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minipass@7.1.2:
+ resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ mlly@1.8.0:
+ resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ mz@2.7.0:
+ resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
+
+ nanoid@3.3.11:
+ resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ node-addon-api@7.1.1:
+ resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
+
+ node-releases@2.0.27:
+ resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ normalize-range@0.1.2:
+ resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
+ engines: {node: '>=0.10.0'}
+
+ object-assign@4.1.1:
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+ engines: {node: '>=0.10.0'}
+
+ object-hash@3.0.0:
+ resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
+ engines: {node: '>= 6'}
+
+ package-json-from-dist@1.0.1:
+ resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
+
+ path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+
+ path-parse@1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+
+ path-scurry@1.11.1:
+ resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
+ engines: {node: '>=16 || 14 >=14.18'}
+
+ pathe@2.0.3:
+ resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ picomatch@4.0.3:
+ resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
+ engines: {node: '>=12'}
+
+ pify@2.3.0:
+ resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
+ engines: {node: '>=0.10.0'}
+
+ pirates@4.0.7:
+ resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==}
+ engines: {node: '>= 6'}
+
+ pkg-types@1.3.1:
+ resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
+
+ pkg-types@2.3.0:
+ resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==}
+
+ postcss-import@15.1.0:
+ resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ postcss: ^8.0.0
+
+ postcss-js@4.1.0:
+ resolution: {integrity: sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==}
+ engines: {node: ^12 || ^14 || >= 16}
+ peerDependencies:
+ postcss: ^8.4.21
+
+ postcss-load-config@6.0.1:
+ resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==}
+ engines: {node: '>= 18'}
+ peerDependencies:
+ jiti: '>=1.21.0'
+ postcss: '>=8.0.9'
+ tsx: ^4.8.1
+ yaml: ^2.4.2
+ peerDependenciesMeta:
+ jiti:
+ optional: true
+ postcss:
+ optional: true
+ tsx:
+ optional: true
+ yaml:
+ optional: true
+
+ postcss-nested@6.2.0:
+ resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==}
+ engines: {node: '>=12.0'}
+ peerDependencies:
+ postcss: ^8.2.14
+
+ postcss-selector-parser@6.1.2:
+ resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
+ engines: {node: '>=4'}
+
+ postcss-value-parser@4.2.0:
+ resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
+
+ postcss@8.5.6:
+ resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ proxy-from-env@1.1.0:
+ resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
+
+ quansync@0.2.11:
+ resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==}
+
+ queue-microtask@1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+
+ read-cache@1.0.0:
+ resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
+
+ readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+
+ readdirp@4.1.2:
+ resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
+ engines: {node: '>= 14.18.0'}
+
+ resolve@1.22.11:
+ resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==}
+ engines: {node: '>= 0.4'}
+ hasBin: true
+
+ reusify@1.1.0:
+ resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
+ rollup@4.53.2:
+ resolution: {integrity: sha512-MHngMYwGJVi6Fmnk6ISmnk7JAHRNF0UkuucA0CUW3N3a4KnONPEZz+vUanQP/ZC/iY1Qkf3bwPWzyY84wEks1g==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+
+ run-parallel@1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+
+ rxjs@7.8.2:
+ resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
+
+ sass-embedded-all-unknown@1.93.3:
+ resolution: {integrity: sha512-3okGgnE41eg+CPLtAPletu6nQ4N0ij7AeW+Sl5Km4j29XcmqZQeFwYjHe1AlKTEgLi/UAONk1O8i8/lupeKMbw==}
+ cpu: ['!arm', '!arm64', '!riscv64', '!x64']
+
+ sass-embedded-android-arm64@1.93.3:
+ resolution: {integrity: sha512-uqUl3Kt1IqdGVAcAdbmC+NwuUJy8tM+2ZnB7/zrt6WxWVShVCRdFnWR9LT8HJr7eJN7AU8kSXxaVX/gedanPsg==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ sass-embedded-android-arm@1.93.3:
+ resolution: {integrity: sha512-8xOw9bywfOD6Wv24BgCmgjkk6tMrsOTTHcb28KDxeJtFtoxiUyMbxo0vChpPAfp2Hyg2tFFKS60s0s4JYk+Raw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm]
+ os: [android]
+
+ sass-embedded-android-riscv64@1.93.3:
+ resolution: {integrity: sha512-2jNJDmo+3qLocjWqYbXiBDnfgwrUeZgZFHJIwAefU7Fn66Ot7rsXl+XPwlokaCbTpj7eMFIqsRAZ/uDueXNCJg==}
+ engines: {node: '>=14.0.0'}
+ cpu: [riscv64]
+ os: [android]
+
+ sass-embedded-android-x64@1.93.3:
+ resolution: {integrity: sha512-y0RoAU6ZenQFcjM9PjQd3cRqRTjqwSbtWLL/p68y2oFyh0QGN0+LQ826fc0ZvU/AbqCsAizkqjzOn6cRZJxTTQ==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [android]
+
+ sass-embedded-darwin-arm64@1.93.3:
+ resolution: {integrity: sha512-7zb/hpdMOdKteK17BOyyypemglVURd1Hdz6QGsggy60aUFfptTLQftLRg8r/xh1RbQAUKWFbYTNaM47J9yPxYg==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ sass-embedded-darwin-x64@1.93.3:
+ resolution: {integrity: sha512-Ek1Vp8ZDQEe327Lz0b7h3hjvWH3u9XjJiQzveq74RPpJQ2q6d9LfWpjiRRohM4qK6o4XOHw1X10OMWPXJtdtWg==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ sass-embedded-linux-arm64@1.93.3:
+ resolution: {integrity: sha512-RBrHWgfd8Dd8w4fbmdRVXRrhh8oBAPyeWDTKAWw8ZEmuXfVl4ytjDuyxaVilh6rR1xTRTNpbaA/YWApBlLrrNw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: glibc
+
+ sass-embedded-linux-arm@1.93.3:
+ resolution: {integrity: sha512-yeiv2y+dp8B4wNpd3+JsHYD0mvpXSfov7IGyQ1tMIR40qv+ROkRqYiqQvAOXf76Qwh4Y9OaYZtLpnsPjfeq6mA==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm]
+ os: [linux]
+ libc: glibc
+
+ sass-embedded-linux-musl-arm64@1.93.3:
+ resolution: {integrity: sha512-PS829l+eUng+9W4PFclXGb4uA2+965NHV3/Sa5U7qTywjeeUUYTZg70dJHSqvhrBEfCc2XJABeW3adLJbyQYkw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: musl
+
+ sass-embedded-linux-musl-arm@1.93.3:
+ resolution: {integrity: sha512-fU0fwAwbp7sBE3h5DVU5UPzvaLg7a4yONfFWkkcCp6ZrOiPuGRHXXYriWQ0TUnWy4wE+svsVuWhwWgvlb/tkKg==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm]
+ os: [linux]
+ libc: musl
+
+ sass-embedded-linux-musl-riscv64@1.93.3:
+ resolution: {integrity: sha512-cK1oBY+FWQquaIGEeQ5H74KTO8cWsSWwXb/WaildOO9U6wmUypTgUYKQ0o5o/29nZbWWlM1PHuwVYTSnT23Jjg==}
+ engines: {node: '>=14.0.0'}
+ cpu: [riscv64]
+ os: [linux]
+ libc: musl
+
+ sass-embedded-linux-musl-x64@1.93.3:
+ resolution: {integrity: sha512-A7wkrsHu2/I4Zpa0NMuPGkWDVV7QGGytxGyUq3opSXgAexHo/vBPlGoDXoRlSdex0cV+aTMRPjoGIfdmNlHwyg==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: musl
+
+ sass-embedded-linux-riscv64@1.93.3:
+ resolution: {integrity: sha512-vWkW1+HTF5qcaHa6hO80gx/QfB6GGjJUP0xLbnAoY4pwEnw5ulGv6RM8qYr8IDhWfVt/KH+lhJ2ZFxnJareisQ==}
+ engines: {node: '>=14.0.0'}
+ cpu: [riscv64]
+ os: [linux]
+ libc: glibc
+
+ sass-embedded-linux-x64@1.93.3:
+ resolution: {integrity: sha512-k6uFxs+e5jSuk1Y0niCwuq42F9ZC5UEP7P+RIOurIm8w/5QFa0+YqeW+BPWEW5M1FqVOsNZH3qGn4ahqvAEjPA==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: glibc
+
+ sass-embedded-unknown-all@1.93.3:
+ resolution: {integrity: sha512-o5wj2rLpXH0C+GJKt/VpWp6AnMsCCbfFmnMAttcrsa+U3yrs/guhZ3x55KAqqUsE8F47e3frbsDL+1OuQM5DAA==}
+ os: ['!android', '!darwin', '!linux', '!win32']
+
+ sass-embedded-win32-arm64@1.93.3:
+ resolution: {integrity: sha512-0dOfT9moy9YmBolodwYYXtLwNr4jL4HQC9rBfv6mVrD7ud8ue2kDbn+GVzj1hEJxvEexVSmDCf7MHUTLcGs9xQ==}
+ engines: {node: '>=14.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ sass-embedded-win32-x64@1.93.3:
+ resolution: {integrity: sha512-wHFVfxiS9hU/sNk7KReD+lJWRp3R0SLQEX4zfOnRP2zlvI2X4IQR5aZr9GNcuMP6TmNpX0nQPZTegS8+h9RrEg==}
+ engines: {node: '>=14.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ sass-embedded@1.93.3:
+ resolution: {integrity: sha512-+VUy01yfDqNmIVMd/LLKl2TTtY0ovZN0rTonh+FhKr65mFwIYgU9WzgIZKS7U9/SPCQvWTsTGx9jyt+qRm/XFw==}
+ engines: {node: '>=16.0.0'}
+ hasBin: true
+
+ sass@1.93.3:
+ resolution: {integrity: sha512-elOcIZRTM76dvxNAjqYrucTSI0teAF/L2Lv0s6f6b7FOwcwIuA357bIE871580AjHJuSvLIRUosgV+lIWx6Rgg==}
+ engines: {node: '>=14.0.0'}
+ hasBin: true
+
+ scule@1.3.0:
+ resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==}
+
+ semver@6.3.1:
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ hasBin: true
+
+ shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+
+ shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+
+ signal-exit@4.1.0:
+ resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
+ engines: {node: '>=14'}
+
+ source-map-js@1.2.1:
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+ engines: {node: '>=0.10.0'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ string-width@5.1.2:
+ resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
+ engines: {node: '>=12'}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-ansi@7.1.2:
+ resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==}
+ engines: {node: '>=12'}
+
+ strip-literal@2.1.1:
+ resolution: {integrity: sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==}
+
+ sucrase@3.35.0:
+ resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==}
+ engines: {node: '>=16 || 14 >=14.17'}
+ hasBin: true
+
+ supports-color@8.1.1:
+ resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+ engines: {node: '>=10'}
+
+ supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+
+ sync-child-process@1.0.2:
+ resolution: {integrity: sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==}
+ engines: {node: '>=16.0.0'}
+
+ sync-message-port@1.1.3:
+ resolution: {integrity: sha512-GTt8rSKje5FilG+wEdfCkOcLL7LWqpMlr2c3LRuKt/YXxcJ52aGSbGBAdI4L3aaqfrBt6y711El53ItyH1NWzg==}
+ engines: {node: '>=16.0.0'}
+
+ tailwindcss@3.4.18:
+ resolution: {integrity: sha512-6A2rnmW5xZMdw11LYjhcI5846rt9pbLSabY5XPxo+XWdxwZaFEn47Go4NzFiHu9sNNmr/kXivP1vStfvMaK1GQ==}
+ engines: {node: '>=14.0.0'}
+ hasBin: true
+
+ terser@5.44.1:
+ resolution: {integrity: sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ thenify-all@1.6.0:
+ resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
+ engines: {node: '>=0.8'}
+
+ thenify@3.3.1:
+ resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ ts-interface-checker@0.1.13:
+ resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
+
+ tslib@2.3.0:
+ resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==}
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ ufo@1.6.1:
+ resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==}
+
+ unimport@3.14.6:
+ resolution: {integrity: sha512-CYvbDaTT04Rh8bmD8jz3WPmHYZRG/NnvYVzwD6V1YAlvvKROlAeNDUBhkBGzNav2RKaeuXvlWYaa1V4Lfi/O0g==}
+
+ unplugin-auto-import@0.18.6:
+ resolution: {integrity: sha512-LMFzX5DtkTj/3wZuyG5bgKBoJ7WSgzqSGJ8ppDRdlvPh45mx6t6w3OcbExQi53n3xF5MYkNGPNR/HYOL95KL2A==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@nuxt/kit': ^3.2.2
+ '@vueuse/core': '*'
+ peerDependenciesMeta:
+ '@nuxt/kit':
+ optional: true
+ '@vueuse/core':
+ optional: true
+
+ unplugin-vue-components@0.27.5:
+ resolution: {integrity: sha512-m9j4goBeNwXyNN8oZHHxvIIYiG8FQ9UfmKWeNllpDvhU7btKNNELGPt+o3mckQKuPwrE7e0PvCsx+IWuDSD9Vg==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/parser': ^7.15.8
+ '@nuxt/kit': ^3.2.2
+ vue: 2 || 3
+ peerDependenciesMeta:
+ '@babel/parser':
+ optional: true
+ '@nuxt/kit':
+ optional: true
+
+ unplugin@1.16.1:
+ resolution: {integrity: sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==}
+ engines: {node: '>=14.0.0'}
+
+ update-browserslist-db@1.1.4:
+ resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+
+ util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+
+ vant@4.9.21:
+ resolution: {integrity: sha512-hXUoZMrLLjykimFRLDlGNd+K2iYSRh9YwLMKnsVdVZ+9inUKxpqnjhOqlZwocbnYkvJlS+febf9u9aJpDol4Pw==}
+ peerDependencies:
+ vue: ^3.0.0
+
+ varint@6.0.0:
+ resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==}
+
+ vite@5.4.21:
+ resolution: {integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^18.0.0 || >=20.0.0
+ less: '*'
+ lightningcss: ^1.21.0
+ sass: '*'
+ sass-embedded: '*'
+ stylus: '*'
+ sugarss: '*'
+ terser: ^5.4.0
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+
+ vue-demi@0.13.11:
+ resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==}
+ engines: {node: '>=12'}
+ hasBin: true
+ peerDependencies:
+ '@vue/composition-api': ^1.0.0-rc.1
+ vue: ^3.0.0-0 || ^2.6.0
+ peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
+
+ vue-demi@0.14.10:
+ resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==}
+ engines: {node: '>=12'}
+ hasBin: true
+ peerDependencies:
+ '@vue/composition-api': ^1.0.0-rc.1
+ vue: ^3.0.0-0 || ^2.6.0
+ peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
+
+ vue-echarts@7.0.3:
+ resolution: {integrity: sha512-/jSxNwOsw5+dYAUcwSfkLwKPuzTQ0Cepz1LxCOpj2QcHrrmUa/Ql0eQqMmc1rTPQVrh2JQ29n2dhq75ZcHvRDw==}
+ peerDependencies:
+ '@vue/runtime-core': ^3.0.0
+ echarts: ^5.5.1
+ vue: ^2.7.0 || ^3.1.1
+ peerDependenciesMeta:
+ '@vue/runtime-core':
+ optional: true
+
+ vue-router@4.6.3:
+ resolution: {integrity: sha512-ARBedLm9YlbvQomnmq91Os7ck6efydTSpRP3nuOKCvgJOHNrhRoJDSKtee8kcL1Vf7nz6U+PMBL+hTvR3bTVQg==}
+ peerDependencies:
+ vue: ^3.5.0
+
+ vue@3.5.24:
+ resolution: {integrity: sha512-uTHDOpVQTMjcGgrqFPSb8iO2m1DUvo+WbGqoXQz8Y1CeBYQ0FXf2z1gLRaBtHjlRz7zZUBHxjVB5VTLzYkvftg==}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ webpack-virtual-modules@0.6.2:
+ resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrap-ansi@8.1.0:
+ resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
+ engines: {node: '>=12'}
+
+ yallist@3.1.1:
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+
+ zrender@5.6.1:
+ resolution: {integrity: sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==}
+
+snapshots:
+
+ '@alloc/quick-lru@5.2.0': {}
+
+ '@antfu/utils@0.7.10': {}
+
+ '@babel/code-frame@7.27.1':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.28.5
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+
+ '@babel/compat-data@7.28.5': {}
+
+ '@babel/core@7.28.5':
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@babel/generator': 7.28.5
+ '@babel/helper-compilation-targets': 7.27.2
+ '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.5)
+ '@babel/helpers': 7.28.4
+ '@babel/parser': 7.28.5
+ '@babel/template': 7.27.2
+ '@babel/traverse': 7.28.5
+ '@babel/types': 7.28.5
+ '@jridgewell/remapping': 2.3.5
+ convert-source-map: 2.0.0
+ debug: 4.4.3
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/generator@7.28.5':
+ dependencies:
+ '@babel/parser': 7.28.5
+ '@babel/types': 7.28.5
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+ jsesc: 3.1.0
+
+ '@babel/helper-annotate-as-pure@7.27.3':
+ dependencies:
+ '@babel/types': 7.28.5
+
+ '@babel/helper-compilation-targets@7.27.2':
+ dependencies:
+ '@babel/compat-data': 7.28.5
+ '@babel/helper-validator-option': 7.27.1
+ browserslist: 4.28.0
+ lru-cache: 5.1.1
+ semver: 6.3.1
+
+ '@babel/helper-create-class-features-plugin@7.28.5(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-annotate-as-pure': 7.27.3
+ '@babel/helper-member-expression-to-functions': 7.28.5
+ '@babel/helper-optimise-call-expression': 7.27.1
+ '@babel/helper-replace-supers': 7.27.1(@babel/core@7.28.5)
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ '@babel/traverse': 7.28.5
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-globals@7.28.0': {}
+
+ '@babel/helper-member-expression-to-functions@7.28.5':
+ dependencies:
+ '@babel/traverse': 7.28.5
+ '@babel/types': 7.28.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-imports@7.27.1':
+ dependencies:
+ '@babel/traverse': 7.28.5
+ '@babel/types': 7.28.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-transforms@7.28.3(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-module-imports': 7.27.1
+ '@babel/helper-validator-identifier': 7.28.5
+ '@babel/traverse': 7.28.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-optimise-call-expression@7.27.1':
+ dependencies:
+ '@babel/types': 7.28.5
+
+ '@babel/helper-plugin-utils@7.27.1': {}
+
+ '@babel/helper-replace-supers@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-member-expression-to-functions': 7.28.5
+ '@babel/helper-optimise-call-expression': 7.27.1
+ '@babel/traverse': 7.28.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-skip-transparent-expression-wrappers@7.27.1':
+ dependencies:
+ '@babel/traverse': 7.28.5
+ '@babel/types': 7.28.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-string-parser@7.27.1': {}
+
+ '@babel/helper-validator-identifier@7.28.5': {}
+
+ '@babel/helper-validator-option@7.27.1': {}
+
+ '@babel/helpers@7.28.4':
+ dependencies:
+ '@babel/template': 7.27.2
+ '@babel/types': 7.28.5
+
+ '@babel/parser@7.28.5':
+ dependencies:
+ '@babel/types': 7.28.5
+
+ '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-transform-typescript@7.28.5(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-annotate-as-pure': 7.27.3
+ '@babel/helper-create-class-features-plugin': 7.28.5(@babel/core@7.28.5)
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.5)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/template@7.27.2':
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@babel/parser': 7.28.5
+ '@babel/types': 7.28.5
+
+ '@babel/traverse@7.28.5':
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@babel/generator': 7.28.5
+ '@babel/helper-globals': 7.28.0
+ '@babel/parser': 7.28.5
+ '@babel/template': 7.27.2
+ '@babel/types': 7.28.5
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/types@7.28.5':
+ dependencies:
+ '@babel/helper-string-parser': 7.27.1
+ '@babel/helper-validator-identifier': 7.28.5
+
+ '@bufbuild/protobuf@2.10.1': {}
+
+ '@esbuild/aix-ppc64@0.21.5':
+ optional: true
+
+ '@esbuild/android-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/android-arm@0.21.5':
+ optional: true
+
+ '@esbuild/android-x64@0.21.5':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/darwin-x64@0.21.5':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-arm@0.21.5':
+ optional: true
+
+ '@esbuild/linux-ia32@0.21.5':
+ optional: true
+
+ '@esbuild/linux-loong64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.21.5':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-s390x@0.21.5':
+ optional: true
+
+ '@esbuild/linux-x64@0.21.5':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.21.5':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.21.5':
+ optional: true
+
+ '@esbuild/sunos-x64@0.21.5':
+ optional: true
+
+ '@esbuild/win32-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/win32-ia32@0.21.5':
+ optional: true
+
+ '@esbuild/win32-x64@0.21.5':
+ optional: true
+
+ '@isaacs/cliui@8.0.2':
+ dependencies:
+ string-width: 5.1.2
+ string-width-cjs: string-width@4.2.3
+ strip-ansi: 7.1.2
+ strip-ansi-cjs: strip-ansi@6.0.1
+ wrap-ansi: 8.1.0
+ wrap-ansi-cjs: wrap-ansi@7.0.0
+
+ '@jridgewell/gen-mapping@0.3.13':
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/remapping@2.3.5':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/source-map@0.3.11':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/sourcemap-codec@1.5.5': {}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ '@nodelib/fs.scandir@2.1.5':
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+
+ '@nodelib/fs.stat@2.0.5': {}
+
+ '@nodelib/fs.walk@1.2.8':
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.19.1
+
+ '@parcel/watcher-android-arm64@2.5.1':
+ optional: true
+
+ '@parcel/watcher-darwin-arm64@2.5.1':
+ optional: true
+
+ '@parcel/watcher-darwin-x64@2.5.1':
+ optional: true
+
+ '@parcel/watcher-freebsd-x64@2.5.1':
+ optional: true
+
+ '@parcel/watcher-linux-arm-glibc@2.5.1':
+ optional: true
+
+ '@parcel/watcher-linux-arm-musl@2.5.1':
+ optional: true
+
+ '@parcel/watcher-linux-arm64-glibc@2.5.1':
+ optional: true
+
+ '@parcel/watcher-linux-arm64-musl@2.5.1':
+ optional: true
+
+ '@parcel/watcher-linux-x64-glibc@2.5.1':
+ optional: true
+
+ '@parcel/watcher-linux-x64-musl@2.5.1':
+ optional: true
+
+ '@parcel/watcher-win32-arm64@2.5.1':
+ optional: true
+
+ '@parcel/watcher-win32-ia32@2.5.1':
+ optional: true
+
+ '@parcel/watcher-win32-x64@2.5.1':
+ optional: true
+
+ '@parcel/watcher@2.5.1':
+ dependencies:
+ detect-libc: 1.0.3
+ is-glob: 4.0.3
+ micromatch: 4.0.8
+ node-addon-api: 7.1.1
+ optionalDependencies:
+ '@parcel/watcher-android-arm64': 2.5.1
+ '@parcel/watcher-darwin-arm64': 2.5.1
+ '@parcel/watcher-darwin-x64': 2.5.1
+ '@parcel/watcher-freebsd-x64': 2.5.1
+ '@parcel/watcher-linux-arm-glibc': 2.5.1
+ '@parcel/watcher-linux-arm-musl': 2.5.1
+ '@parcel/watcher-linux-arm64-glibc': 2.5.1
+ '@parcel/watcher-linux-arm64-musl': 2.5.1
+ '@parcel/watcher-linux-x64-glibc': 2.5.1
+ '@parcel/watcher-linux-x64-musl': 2.5.1
+ '@parcel/watcher-win32-arm64': 2.5.1
+ '@parcel/watcher-win32-ia32': 2.5.1
+ '@parcel/watcher-win32-x64': 2.5.1
+ optional: true
+
+ '@pkgjs/parseargs@0.11.0':
+ optional: true
+
+ '@rolldown/pluginutils@1.0.0-beta.51': {}
+
+ '@rollup/pluginutils@5.3.0(rollup@4.53.2)':
+ dependencies:
+ '@types/estree': 1.0.8
+ estree-walker: 2.0.2
+ picomatch: 4.0.3
+ optionalDependencies:
+ rollup: 4.53.2
+
+ '@rollup/rollup-android-arm-eabi@4.53.2':
+ optional: true
+
+ '@rollup/rollup-android-arm64@4.53.2':
+ optional: true
+
+ '@rollup/rollup-darwin-arm64@4.53.2':
+ optional: true
+
+ '@rollup/rollup-darwin-x64@4.53.2':
+ optional: true
+
+ '@rollup/rollup-freebsd-arm64@4.53.2':
+ optional: true
+
+ '@rollup/rollup-freebsd-x64@4.53.2':
+ optional: true
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.53.2':
+ optional: true
+
+ '@rollup/rollup-linux-arm-musleabihf@4.53.2':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-gnu@4.53.2':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-musl@4.53.2':
+ optional: true
+
+ '@rollup/rollup-linux-loong64-gnu@4.53.2':
+ optional: true
+
+ '@rollup/rollup-linux-ppc64-gnu@4.53.2':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-gnu@4.53.2':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-musl@4.53.2':
+ optional: true
+
+ '@rollup/rollup-linux-s390x-gnu@4.53.2':
+ optional: true
+
+ '@rollup/rollup-linux-x64-gnu@4.53.2':
+ optional: true
+
+ '@rollup/rollup-linux-x64-musl@4.53.2':
+ optional: true
+
+ '@rollup/rollup-openharmony-arm64@4.53.2':
+ optional: true
+
+ '@rollup/rollup-win32-arm64-msvc@4.53.2':
+ optional: true
+
+ '@rollup/rollup-win32-ia32-msvc@4.53.2':
+ optional: true
+
+ '@rollup/rollup-win32-x64-gnu@4.53.2':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.53.2':
+ optional: true
+
+ '@types/estree@1.0.8': {}
+
+ '@types/web-bluetooth@0.0.20': {}
+
+ '@vant/auto-import-resolver@1.3.0': {}
+
+ '@vant/popperjs@1.3.0': {}
+
+ '@vant/use@1.6.0(vue@3.5.24)':
+ dependencies:
+ vue: 3.5.24
+
+ '@vitejs/plugin-vue-jsx@4.2.0(vite@5.4.21(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.44.1))(vue@3.5.24)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/plugin-transform-typescript': 7.28.5(@babel/core@7.28.5)
+ '@rolldown/pluginutils': 1.0.0-beta.51
+ '@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.28.5)
+ vite: 5.4.21(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.44.1)
+ vue: 3.5.24
+ transitivePeerDependencies:
+ - supports-color
+
+ '@vitejs/plugin-vue@5.2.4(vite@5.4.21(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.44.1))(vue@3.5.24)':
+ dependencies:
+ vite: 5.4.21(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.44.1)
+ vue: 3.5.24
+
+ '@vue/babel-helper-vue-transform-on@1.5.0': {}
+
+ '@vue/babel-plugin-jsx@1.5.0(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/helper-module-imports': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5)
+ '@babel/template': 7.27.2
+ '@babel/traverse': 7.28.5
+ '@babel/types': 7.28.5
+ '@vue/babel-helper-vue-transform-on': 1.5.0
+ '@vue/babel-plugin-resolve-type': 1.5.0(@babel/core@7.28.5)
+ '@vue/shared': 3.5.24
+ optionalDependencies:
+ '@babel/core': 7.28.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@vue/babel-plugin-resolve-type@1.5.0(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@babel/core': 7.28.5
+ '@babel/helper-module-imports': 7.27.1
+ '@babel/helper-plugin-utils': 7.27.1
+ '@babel/parser': 7.28.5
+ '@vue/compiler-sfc': 3.5.24
+ transitivePeerDependencies:
+ - supports-color
+
+ '@vue/compiler-core@3.5.24':
+ dependencies:
+ '@babel/parser': 7.28.5
+ '@vue/shared': 3.5.24
+ entities: 4.5.0
+ estree-walker: 2.0.2
+ source-map-js: 1.2.1
+
+ '@vue/compiler-dom@3.5.24':
+ dependencies:
+ '@vue/compiler-core': 3.5.24
+ '@vue/shared': 3.5.24
+
+ '@vue/compiler-sfc@3.5.24':
+ dependencies:
+ '@babel/parser': 7.28.5
+ '@vue/compiler-core': 3.5.24
+ '@vue/compiler-dom': 3.5.24
+ '@vue/compiler-ssr': 3.5.24
+ '@vue/shared': 3.5.24
+ estree-walker: 2.0.2
+ magic-string: 0.30.21
+ postcss: 8.5.6
+ source-map-js: 1.2.1
+
+ '@vue/compiler-ssr@3.5.24':
+ dependencies:
+ '@vue/compiler-dom': 3.5.24
+ '@vue/shared': 3.5.24
+
+ '@vue/devtools-api@6.6.4': {}
+
+ '@vue/reactivity@3.5.24':
+ dependencies:
+ '@vue/shared': 3.5.24
+
+ '@vue/runtime-core@3.5.24':
+ dependencies:
+ '@vue/reactivity': 3.5.24
+ '@vue/shared': 3.5.24
+
+ '@vue/runtime-dom@3.5.24':
+ dependencies:
+ '@vue/reactivity': 3.5.24
+ '@vue/runtime-core': 3.5.24
+ '@vue/shared': 3.5.24
+ csstype: 3.2.3
+
+ '@vue/server-renderer@3.5.24(vue@3.5.24)':
+ dependencies:
+ '@vue/compiler-ssr': 3.5.24
+ '@vue/shared': 3.5.24
+ vue: 3.5.24
+
+ '@vue/shared@3.5.24': {}
+
+ '@vueuse/core@11.3.0(vue@3.5.24)':
+ dependencies:
+ '@types/web-bluetooth': 0.0.20
+ '@vueuse/metadata': 11.3.0
+ '@vueuse/shared': 11.3.0(vue@3.5.24)
+ vue-demi: 0.14.10(vue@3.5.24)
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ - vue
+
+ '@vueuse/metadata@11.3.0': {}
+
+ '@vueuse/shared@11.3.0(vue@3.5.24)':
+ dependencies:
+ vue-demi: 0.14.10(vue@3.5.24)
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ - vue
+
+ acorn@8.15.0: {}
+
+ ansi-regex@5.0.1: {}
+
+ ansi-regex@6.2.2: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ ansi-styles@6.2.3: {}
+
+ any-promise@1.3.0: {}
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+
+ arg@5.0.2: {}
+
+ asynckit@0.4.0: {}
+
+ autoprefixer@10.4.22(postcss@8.5.6):
+ dependencies:
+ browserslist: 4.28.0
+ caniuse-lite: 1.0.30001756
+ fraction.js: 5.3.4
+ normalize-range: 0.1.2
+ picocolors: 1.1.1
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ axios@1.13.2:
+ dependencies:
+ follow-redirects: 1.15.11
+ form-data: 4.0.5
+ proxy-from-env: 1.1.0
+ transitivePeerDependencies:
+ - debug
+
+ balanced-match@1.0.2: {}
+
+ baseline-browser-mapping@2.8.29: {}
+
+ binary-extensions@2.3.0: {}
+
+ brace-expansion@2.0.2:
+ dependencies:
+ balanced-match: 1.0.2
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browserslist@4.28.0:
+ dependencies:
+ baseline-browser-mapping: 2.8.29
+ caniuse-lite: 1.0.30001756
+ electron-to-chromium: 1.5.256
+ node-releases: 2.0.27
+ update-browserslist-db: 1.1.4(browserslist@4.28.0)
+
+ buffer-builder@0.2.0: {}
+
+ buffer-from@1.1.2: {}
+
+ call-bind-apply-helpers@1.0.2:
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+
+ camelcase-css@2.0.1: {}
+
+ caniuse-lite@1.0.30001756: {}
+
+ chokidar@3.6.0:
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.3
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ chokidar@4.0.3:
+ dependencies:
+ readdirp: 4.1.2
+ optional: true
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ colorjs.io@0.5.2: {}
+
+ combined-stream@1.0.8:
+ dependencies:
+ delayed-stream: 1.0.0
+
+ commander@2.20.3: {}
+
+ commander@4.1.1: {}
+
+ confbox@0.1.8: {}
+
+ confbox@0.2.2: {}
+
+ convert-source-map@2.0.0: {}
+
+ cross-spawn@7.0.6:
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+
+ cssesc@3.0.0: {}
+
+ csstype@3.2.3: {}
+
+ debug@4.4.3:
+ dependencies:
+ ms: 2.1.3
+
+ delayed-stream@1.0.0: {}
+
+ detect-libc@1.0.3:
+ optional: true
+
+ didyoumean@1.2.2: {}
+
+ dlv@1.1.3: {}
+
+ dunder-proto@1.0.1:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-errors: 1.3.0
+ gopd: 1.2.0
+
+ eastasianwidth@0.2.0: {}
+
+ echarts@5.6.0:
+ dependencies:
+ tslib: 2.3.0
+ zrender: 5.6.1
+
+ electron-to-chromium@1.5.256: {}
+
+ emoji-regex@8.0.0: {}
+
+ emoji-regex@9.2.2: {}
+
+ entities@4.5.0: {}
+
+ es-define-property@1.0.1: {}
+
+ es-errors@1.3.0: {}
+
+ es-object-atoms@1.1.1:
+ dependencies:
+ es-errors: 1.3.0
+
+ es-set-tostringtag@2.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ has-tostringtag: 1.0.2
+ hasown: 2.0.2
+
+ esbuild@0.21.5:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.21.5
+ '@esbuild/android-arm': 0.21.5
+ '@esbuild/android-arm64': 0.21.5
+ '@esbuild/android-x64': 0.21.5
+ '@esbuild/darwin-arm64': 0.21.5
+ '@esbuild/darwin-x64': 0.21.5
+ '@esbuild/freebsd-arm64': 0.21.5
+ '@esbuild/freebsd-x64': 0.21.5
+ '@esbuild/linux-arm': 0.21.5
+ '@esbuild/linux-arm64': 0.21.5
+ '@esbuild/linux-ia32': 0.21.5
+ '@esbuild/linux-loong64': 0.21.5
+ '@esbuild/linux-mips64el': 0.21.5
+ '@esbuild/linux-ppc64': 0.21.5
+ '@esbuild/linux-riscv64': 0.21.5
+ '@esbuild/linux-s390x': 0.21.5
+ '@esbuild/linux-x64': 0.21.5
+ '@esbuild/netbsd-x64': 0.21.5
+ '@esbuild/openbsd-x64': 0.21.5
+ '@esbuild/sunos-x64': 0.21.5
+ '@esbuild/win32-arm64': 0.21.5
+ '@esbuild/win32-ia32': 0.21.5
+ '@esbuild/win32-x64': 0.21.5
+
+ escalade@3.2.0: {}
+
+ escape-string-regexp@5.0.0: {}
+
+ estree-walker@2.0.2: {}
+
+ estree-walker@3.0.3:
+ dependencies:
+ '@types/estree': 1.0.8
+
+ exsolve@1.0.8: {}
+
+ fast-glob@3.3.3:
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.8
+
+ fastq@1.19.1:
+ dependencies:
+ reusify: 1.1.0
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ follow-redirects@1.15.11: {}
+
+ foreground-child@3.3.1:
+ dependencies:
+ cross-spawn: 7.0.6
+ signal-exit: 4.1.0
+
+ form-data@4.0.5:
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ es-set-tostringtag: 2.1.0
+ hasown: 2.0.2
+ mime-types: 2.1.35
+
+ fraction.js@5.3.4: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ function-bind@1.1.2: {}
+
+ gensync@1.0.0-beta.2: {}
+
+ get-intrinsic@1.3.0:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.1
+ function-bind: 1.1.2
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ has-symbols: 1.1.0
+ hasown: 2.0.2
+ math-intrinsics: 1.1.0
+
+ get-proto@1.0.1:
+ dependencies:
+ dunder-proto: 1.0.1
+ es-object-atoms: 1.1.1
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob-parent@6.0.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@10.5.0:
+ dependencies:
+ foreground-child: 3.3.1
+ jackspeak: 3.4.3
+ minimatch: 9.0.5
+ minipass: 7.1.2
+ package-json-from-dist: 1.0.1
+ path-scurry: 1.11.1
+
+ gopd@1.2.0: {}
+
+ has-flag@4.0.0: {}
+
+ has-symbols@1.1.0: {}
+
+ has-tostringtag@1.0.2:
+ dependencies:
+ has-symbols: 1.1.0
+
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ immutable@5.1.4: {}
+
+ is-binary-path@2.1.0:
+ dependencies:
+ binary-extensions: 2.3.0
+
+ is-core-module@2.16.1:
+ dependencies:
+ hasown: 2.0.2
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-number@7.0.0: {}
+
+ isexe@2.0.0: {}
+
+ jackspeak@3.4.3:
+ dependencies:
+ '@isaacs/cliui': 8.0.2
+ optionalDependencies:
+ '@pkgjs/parseargs': 0.11.0
+
+ jiti@1.21.7: {}
+
+ js-tokens@4.0.0: {}
+
+ js-tokens@9.0.1: {}
+
+ jsesc@3.1.0: {}
+
+ json5@2.2.3: {}
+
+ lilconfig@3.1.3: {}
+
+ lines-and-columns@1.2.4: {}
+
+ local-pkg@0.5.1:
+ dependencies:
+ mlly: 1.8.0
+ pkg-types: 1.3.1
+
+ local-pkg@1.1.2:
+ dependencies:
+ mlly: 1.8.0
+ pkg-types: 2.3.0
+ quansync: 0.2.11
+
+ lodash@4.17.21: {}
+
+ lru-cache@10.4.3: {}
+
+ lru-cache@5.1.1:
+ dependencies:
+ yallist: 3.1.1
+
+ magic-string@0.30.21:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ math-intrinsics@1.1.0: {}
+
+ merge2@1.4.1: {}
+
+ micromatch@4.0.8:
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.1
+
+ mime-db@1.52.0: {}
+
+ mime-types@2.1.35:
+ dependencies:
+ mime-db: 1.52.0
+
+ minimatch@9.0.5:
+ dependencies:
+ brace-expansion: 2.0.2
+
+ minipass@7.1.2: {}
+
+ mlly@1.8.0:
+ dependencies:
+ acorn: 8.15.0
+ pathe: 2.0.3
+ pkg-types: 1.3.1
+ ufo: 1.6.1
+
+ ms@2.1.3: {}
+
+ mz@2.7.0:
+ dependencies:
+ any-promise: 1.3.0
+ object-assign: 4.1.1
+ thenify-all: 1.6.0
+
+ nanoid@3.3.11: {}
+
+ node-addon-api@7.1.1:
+ optional: true
+
+ node-releases@2.0.27: {}
+
+ normalize-path@3.0.0: {}
+
+ normalize-range@0.1.2: {}
+
+ object-assign@4.1.1: {}
+
+ object-hash@3.0.0: {}
+
+ package-json-from-dist@1.0.1: {}
+
+ path-key@3.1.1: {}
+
+ path-parse@1.0.7: {}
+
+ path-scurry@1.11.1:
+ dependencies:
+ lru-cache: 10.4.3
+ minipass: 7.1.2
+
+ pathe@2.0.3: {}
+
+ picocolors@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ picomatch@4.0.3: {}
+
+ pify@2.3.0: {}
+
+ pirates@4.0.7: {}
+
+ pkg-types@1.3.1:
+ dependencies:
+ confbox: 0.1.8
+ mlly: 1.8.0
+ pathe: 2.0.3
+
+ pkg-types@2.3.0:
+ dependencies:
+ confbox: 0.2.2
+ exsolve: 1.0.8
+ pathe: 2.0.3
+
+ postcss-import@15.1.0(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+ read-cache: 1.0.0
+ resolve: 1.22.11
+
+ postcss-js@4.1.0(postcss@8.5.6):
+ dependencies:
+ camelcase-css: 2.0.1
+ postcss: 8.5.6
+
+ postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.6):
+ dependencies:
+ lilconfig: 3.1.3
+ optionalDependencies:
+ jiti: 1.21.7
+ postcss: 8.5.6
+
+ postcss-nested@6.2.0(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-selector-parser: 6.1.2
+
+ postcss-selector-parser@6.1.2:
+ dependencies:
+ cssesc: 3.0.0
+ util-deprecate: 1.0.2
+
+ postcss-value-parser@4.2.0: {}
+
+ postcss@8.5.6:
+ dependencies:
+ nanoid: 3.3.11
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
+ proxy-from-env@1.1.0: {}
+
+ quansync@0.2.11: {}
+
+ queue-microtask@1.2.3: {}
+
+ read-cache@1.0.0:
+ dependencies:
+ pify: 2.3.0
+
+ readdirp@3.6.0:
+ dependencies:
+ picomatch: 2.3.1
+
+ readdirp@4.1.2:
+ optional: true
+
+ resolve@1.22.11:
+ dependencies:
+ is-core-module: 2.16.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
+ reusify@1.1.0: {}
+
+ rollup@4.53.2:
+ dependencies:
+ '@types/estree': 1.0.8
+ optionalDependencies:
+ '@rollup/rollup-android-arm-eabi': 4.53.2
+ '@rollup/rollup-android-arm64': 4.53.2
+ '@rollup/rollup-darwin-arm64': 4.53.2
+ '@rollup/rollup-darwin-x64': 4.53.2
+ '@rollup/rollup-freebsd-arm64': 4.53.2
+ '@rollup/rollup-freebsd-x64': 4.53.2
+ '@rollup/rollup-linux-arm-gnueabihf': 4.53.2
+ '@rollup/rollup-linux-arm-musleabihf': 4.53.2
+ '@rollup/rollup-linux-arm64-gnu': 4.53.2
+ '@rollup/rollup-linux-arm64-musl': 4.53.2
+ '@rollup/rollup-linux-loong64-gnu': 4.53.2
+ '@rollup/rollup-linux-ppc64-gnu': 4.53.2
+ '@rollup/rollup-linux-riscv64-gnu': 4.53.2
+ '@rollup/rollup-linux-riscv64-musl': 4.53.2
+ '@rollup/rollup-linux-s390x-gnu': 4.53.2
+ '@rollup/rollup-linux-x64-gnu': 4.53.2
+ '@rollup/rollup-linux-x64-musl': 4.53.2
+ '@rollup/rollup-openharmony-arm64': 4.53.2
+ '@rollup/rollup-win32-arm64-msvc': 4.53.2
+ '@rollup/rollup-win32-ia32-msvc': 4.53.2
+ '@rollup/rollup-win32-x64-gnu': 4.53.2
+ '@rollup/rollup-win32-x64-msvc': 4.53.2
+ fsevents: 2.3.3
+
+ run-parallel@1.2.0:
+ dependencies:
+ queue-microtask: 1.2.3
+
+ rxjs@7.8.2:
+ dependencies:
+ tslib: 2.8.1
+
+ sass-embedded-all-unknown@1.93.3:
+ dependencies:
+ sass: 1.93.3
+ optional: true
+
+ sass-embedded-android-arm64@1.93.3:
+ optional: true
+
+ sass-embedded-android-arm@1.93.3:
+ optional: true
+
+ sass-embedded-android-riscv64@1.93.3:
+ optional: true
+
+ sass-embedded-android-x64@1.93.3:
+ optional: true
+
+ sass-embedded-darwin-arm64@1.93.3:
+ optional: true
+
+ sass-embedded-darwin-x64@1.93.3:
+ optional: true
+
+ sass-embedded-linux-arm64@1.93.3:
+ optional: true
+
+ sass-embedded-linux-arm@1.93.3:
+ optional: true
+
+ sass-embedded-linux-musl-arm64@1.93.3:
+ optional: true
+
+ sass-embedded-linux-musl-arm@1.93.3:
+ optional: true
+
+ sass-embedded-linux-musl-riscv64@1.93.3:
+ optional: true
+
+ sass-embedded-linux-musl-x64@1.93.3:
+ optional: true
+
+ sass-embedded-linux-riscv64@1.93.3:
+ optional: true
+
+ sass-embedded-linux-x64@1.93.3:
+ optional: true
+
+ sass-embedded-unknown-all@1.93.3:
+ dependencies:
+ sass: 1.93.3
+ optional: true
+
+ sass-embedded-win32-arm64@1.93.3:
+ optional: true
+
+ sass-embedded-win32-x64@1.93.3:
+ optional: true
+
+ sass-embedded@1.93.3:
+ dependencies:
+ '@bufbuild/protobuf': 2.10.1
+ buffer-builder: 0.2.0
+ colorjs.io: 0.5.2
+ immutable: 5.1.4
+ rxjs: 7.8.2
+ supports-color: 8.1.1
+ sync-child-process: 1.0.2
+ varint: 6.0.0
+ optionalDependencies:
+ sass-embedded-all-unknown: 1.93.3
+ sass-embedded-android-arm: 1.93.3
+ sass-embedded-android-arm64: 1.93.3
+ sass-embedded-android-riscv64: 1.93.3
+ sass-embedded-android-x64: 1.93.3
+ sass-embedded-darwin-arm64: 1.93.3
+ sass-embedded-darwin-x64: 1.93.3
+ sass-embedded-linux-arm: 1.93.3
+ sass-embedded-linux-arm64: 1.93.3
+ sass-embedded-linux-musl-arm: 1.93.3
+ sass-embedded-linux-musl-arm64: 1.93.3
+ sass-embedded-linux-musl-riscv64: 1.93.3
+ sass-embedded-linux-musl-x64: 1.93.3
+ sass-embedded-linux-riscv64: 1.93.3
+ sass-embedded-linux-x64: 1.93.3
+ sass-embedded-unknown-all: 1.93.3
+ sass-embedded-win32-arm64: 1.93.3
+ sass-embedded-win32-x64: 1.93.3
+
+ sass@1.93.3:
+ dependencies:
+ chokidar: 4.0.3
+ immutable: 5.1.4
+ source-map-js: 1.2.1
+ optionalDependencies:
+ '@parcel/watcher': 2.5.1
+ optional: true
+
+ scule@1.3.0: {}
+
+ semver@6.3.1: {}
+
+ shebang-command@2.0.0:
+ dependencies:
+ shebang-regex: 3.0.0
+
+ shebang-regex@3.0.0: {}
+
+ signal-exit@4.1.0: {}
+
+ source-map-js@1.2.1: {}
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ string-width@5.1.2:
+ dependencies:
+ eastasianwidth: 0.2.0
+ emoji-regex: 9.2.2
+ strip-ansi: 7.1.2
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-ansi@7.1.2:
+ dependencies:
+ ansi-regex: 6.2.2
+
+ strip-literal@2.1.1:
+ dependencies:
+ js-tokens: 9.0.1
+
+ sucrase@3.35.0:
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ commander: 4.1.1
+ glob: 10.5.0
+ lines-and-columns: 1.2.4
+ mz: 2.7.0
+ pirates: 4.0.7
+ ts-interface-checker: 0.1.13
+
+ supports-color@8.1.1:
+ dependencies:
+ has-flag: 4.0.0
+
+ supports-preserve-symlinks-flag@1.0.0: {}
+
+ sync-child-process@1.0.2:
+ dependencies:
+ sync-message-port: 1.1.3
+
+ sync-message-port@1.1.3: {}
+
+ tailwindcss@3.4.18:
+ dependencies:
+ '@alloc/quick-lru': 5.2.0
+ arg: 5.0.2
+ chokidar: 3.6.0
+ didyoumean: 1.2.2
+ dlv: 1.1.3
+ fast-glob: 3.3.3
+ glob-parent: 6.0.2
+ is-glob: 4.0.3
+ jiti: 1.21.7
+ lilconfig: 3.1.3
+ micromatch: 4.0.8
+ normalize-path: 3.0.0
+ object-hash: 3.0.0
+ picocolors: 1.1.1
+ postcss: 8.5.6
+ postcss-import: 15.1.0(postcss@8.5.6)
+ postcss-js: 4.1.0(postcss@8.5.6)
+ postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)
+ postcss-nested: 6.2.0(postcss@8.5.6)
+ postcss-selector-parser: 6.1.2
+ resolve: 1.22.11
+ sucrase: 3.35.0
+ transitivePeerDependencies:
+ - tsx
+ - yaml
+
+ terser@5.44.1:
+ dependencies:
+ '@jridgewell/source-map': 0.3.11
+ acorn: 8.15.0
+ commander: 2.20.3
+ source-map-support: 0.5.21
+
+ thenify-all@1.6.0:
+ dependencies:
+ thenify: 3.3.1
+
+ thenify@3.3.1:
+ dependencies:
+ any-promise: 1.3.0
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ ts-interface-checker@0.1.13: {}
+
+ tslib@2.3.0: {}
+
+ tslib@2.8.1: {}
+
+ ufo@1.6.1: {}
+
+ unimport@3.14.6(rollup@4.53.2):
+ dependencies:
+ '@rollup/pluginutils': 5.3.0(rollup@4.53.2)
+ acorn: 8.15.0
+ escape-string-regexp: 5.0.0
+ estree-walker: 3.0.3
+ fast-glob: 3.3.3
+ local-pkg: 1.1.2
+ magic-string: 0.30.21
+ mlly: 1.8.0
+ pathe: 2.0.3
+ picomatch: 4.0.3
+ pkg-types: 1.3.1
+ scule: 1.3.0
+ strip-literal: 2.1.1
+ unplugin: 1.16.1
+ transitivePeerDependencies:
+ - rollup
+
+ unplugin-auto-import@0.18.6(@vueuse/core@11.3.0(vue@3.5.24))(rollup@4.53.2):
+ dependencies:
+ '@antfu/utils': 0.7.10
+ '@rollup/pluginutils': 5.3.0(rollup@4.53.2)
+ fast-glob: 3.3.3
+ local-pkg: 0.5.1
+ magic-string: 0.30.21
+ minimatch: 9.0.5
+ unimport: 3.14.6(rollup@4.53.2)
+ unplugin: 1.16.1
+ optionalDependencies:
+ '@vueuse/core': 11.3.0(vue@3.5.24)
+ transitivePeerDependencies:
+ - rollup
+
+ unplugin-vue-components@0.27.5(@babel/parser@7.28.5)(rollup@4.53.2)(vue@3.5.24):
+ dependencies:
+ '@antfu/utils': 0.7.10
+ '@rollup/pluginutils': 5.3.0(rollup@4.53.2)
+ chokidar: 3.6.0
+ debug: 4.4.3
+ fast-glob: 3.3.3
+ local-pkg: 0.5.1
+ magic-string: 0.30.21
+ minimatch: 9.0.5
+ mlly: 1.8.0
+ unplugin: 1.16.1
+ vue: 3.5.24
+ optionalDependencies:
+ '@babel/parser': 7.28.5
+ transitivePeerDependencies:
+ - rollup
+ - supports-color
+
+ unplugin@1.16.1:
+ dependencies:
+ acorn: 8.15.0
+ webpack-virtual-modules: 0.6.2
+
+ update-browserslist-db@1.1.4(browserslist@4.28.0):
+ dependencies:
+ browserslist: 4.28.0
+ escalade: 3.2.0
+ picocolors: 1.1.1
+
+ util-deprecate@1.0.2: {}
+
+ vant@4.9.21(vue@3.5.24):
+ dependencies:
+ '@vant/popperjs': 1.3.0
+ '@vant/use': 1.6.0(vue@3.5.24)
+ '@vue/shared': 3.5.24
+ vue: 3.5.24
+
+ varint@6.0.0: {}
+
+ vite@5.4.21(sass-embedded@1.93.3)(sass@1.93.3)(terser@5.44.1):
+ dependencies:
+ esbuild: 0.21.5
+ postcss: 8.5.6
+ rollup: 4.53.2
+ optionalDependencies:
+ fsevents: 2.3.3
+ sass: 1.93.3
+ sass-embedded: 1.93.3
+ terser: 5.44.1
+
+ vue-demi@0.13.11(vue@3.5.24):
+ dependencies:
+ vue: 3.5.24
+
+ vue-demi@0.14.10(vue@3.5.24):
+ dependencies:
+ vue: 3.5.24
+
+ vue-echarts@7.0.3(@vue/runtime-core@3.5.24)(echarts@5.6.0)(vue@3.5.24):
+ dependencies:
+ echarts: 5.6.0
+ vue: 3.5.24
+ vue-demi: 0.13.11(vue@3.5.24)
+ optionalDependencies:
+ '@vue/runtime-core': 3.5.24
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+
+ vue-router@4.6.3(vue@3.5.24):
+ dependencies:
+ '@vue/devtools-api': 6.6.4
+ vue: 3.5.24
+
+ vue@3.5.24:
+ dependencies:
+ '@vue/compiler-dom': 3.5.24
+ '@vue/compiler-sfc': 3.5.24
+ '@vue/runtime-dom': 3.5.24
+ '@vue/server-renderer': 3.5.24(vue@3.5.24)
+ '@vue/shared': 3.5.24
+
+ webpack-virtual-modules@0.6.2: {}
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrap-ansi@8.1.0:
+ dependencies:
+ ansi-styles: 6.2.3
+ string-width: 5.1.2
+ strip-ansi: 7.1.2
+
+ yallist@3.1.1: {}
+
+ zrender@5.6.1:
+ dependencies:
+ tslib: 2.3.0
diff --git a/resources/Pure Component/postcss.config.js b/resources/Pure Component/postcss.config.js
new file mode 100644
index 0000000..685dd1f
--- /dev/null
+++ b/resources/Pure Component/postcss.config.js
@@ -0,0 +1,7 @@
+export default {
+ plugins: {
+ tailwindcss: {},
+ autoprefixer: {},
+ },
+};
+
diff --git a/resources/Pure Component/public/example.json b/resources/Pure Component/public/example.json
new file mode 100644
index 0000000..90c6662
--- /dev/null
+++ b/resources/Pure Component/public/example.json
@@ -0,0 +1,10278 @@
+[
+ {
+ "feature": {
+ "featureName": "支付行为指数",
+ "sort": 1
+ },
+ "data": {
+ "apiID": "JRZQ3C9R",
+ "data": {
+ "code": "200",
+ "data": {
+ "ppcm_m24_nbank_fin_qyorg": 1,
+ "ppcm_m24_overorg": -1,
+ "ppcm_m6_nbank_other_fail_repamt": -1,
+ "ppcm_m1_cred_succ_repnum": -1,
+ "ppcm_m24_succ_reporg": -1,
+ "ppcm_m1_nbank_fin_qyorg": -1,
+ "ppcm_m1_nbank_other_fail_repamt": -1,
+ "ppcm_m6_qynum": 3,
+ "ppcm_m12_nbank_other_succ_repnum": -1,
+ "ppcm_d7_loanamt_max": -1,
+ "ppcm_d7_succ_repamt_max": -1,
+ "ppcm_m3_nbank_other_qyorg": 2,
+ "ppcm_m24_nbank_fin_loannum": -1,
+ "ppcm_m3_succ_repnum_avg": -1,
+ "ppcm_m1_nbank_other_qyorg": 2,
+ "ppcm_m6_reporg": -1,
+ "ppcm_m3_nbank_fin_succ_repnum": -1,
+ "ppcm_m24_bank_fail_reporg": -1,
+ "ppcm_m24_bank_loanorg": -1,
+ "ppcm_m12_nbank_other_fail_reporg": -1,
+ "ppcm_m6_succ_repnum_avg": -1,
+ "ppcm_m1_repday": -1,
+ "ppcm_m12_bank_loanorg": -1,
+ "ppcm_m6_m24_nbank_fin_fail_repnum_ratio": -1,
+ "ppcm_m3_m24_nbank_other_qynum_ratio": 0.17,
+ "ppcm_m12_bank_fail_repamt": -1,
+ "ppcm_m6_overnum": -1,
+ "ppcm_m24_loanamt": -1,
+ "ppcm_m6_nbank_fin_fail_repamt": -1,
+ "ppcm_m3_succ_reporg": -1,
+ "ppcm_m6_cred_fail_repnum": -1,
+ "ppcm_d7_bank_qyorg": -1,
+ "ppcm_m1_succ_reporg": -1,
+ "ppcm_m1_nbank_fin_succ_repamt": -1,
+ "ppcm_d7_nbank_other_qyorg": 2,
+ "ppcm_m6_cred_succ_repnum": -1,
+ "ppcm_m24_qyorg": 6,
+ "ppcm_m6_succ_reporg": -1,
+ "ppcm_m6_m24_fail_repnum_ratio": -1,
+ "ppcm_m12_succ_reporg": -1,
+ "ppcm_m3_fail_neh_repnum_ratio": -1,
+ "ppcm_m1_nbank_other_neh_repnum_ratio": -1,
+ "ppcm_m12_fail_repamt": -1,
+ "ppcm_m1_qynum": 2,
+ "ppcm_m1_cred_fail_reporg": -1,
+ "ppcm_m24_cred_fail_repamt": -1,
+ "ppcm_m24_cred_succ_repamt": -1,
+ "ppcm_m12_nbank_other_loannum": -1,
+ "ppcm_m3_qynum_avg": 1,
+ "ppcm_m3_nbank_fin_fail_reporg": -1,
+ "ppcm_m24_bank_succ_repnum": -1,
+ "ppcm_d7_bank_fail_repnum": -1,
+ "ppcm_m1_reporg_new": -1,
+ "ppcm_m6_qyday": 3,
+ "ppcm_d7_reporg": -1,
+ "ppcm_m12_fail_reporg_new": -1,
+ "ppcm_m6_nbank_fin_neh_repnum_ratio": -1,
+ "ppcm_d7_nbank_other_loanamt": -1,
+ "ppcm_m1_nbank_other_qynum": 2,
+ "ppcm_d7_m12_nbank_other_qynum_ratio": 0.67,
+ "ppcm_m3_nbank_fin_succ_reporg": -1,
+ "ppcm_m6_p4_overamt": -1,
+ "ppcm_m6_fail_repamt_max": -1,
+ "ppcm_m6_nbank_other_loanamt": -1,
+ "ppcm_m1_nbank_other_succ_reporg": -1,
+ "ppcm_m12_bank_succ_reporg": -1,
+ "ppcm_m3_fail_repamt_max": -1,
+ "ppcm_m12_nbank_fin_neh_repnum_ratio": -1,
+ "ppcm_m1_overamt": -1,
+ "ppcm_m12_reporg_new": -1,
+ "ppcm_m6_nbank_other_succ_reporg": -1,
+ "ppcm_m3_m24_bank_qynum_ratio": -1,
+ "ppcm_d7_loannum": -1,
+ "ppcm_m1_fail_repamt": -1,
+ "ppcm_m3_fail_repamt": -1,
+ "ppcm_m12_nbank_fin_qynum": 1,
+ "ppcm_m3_cred_reporg_new": -1,
+ "ppcm_m6_cred_reporg_new": -1,
+ "ppcm_m12_nbank_fin_fail_repamt": -1,
+ "ppcm_m1_p3_overamt": -1,
+ "ppcm_m3_qyorg": 3,
+ "ppcm_m12_cred_succ_repamt": -1,
+ "ppcm_m1_m12_bank_loannum_ratio": -1,
+ "ppcm_m3_loanorg_new": -1,
+ "ppcm_m1_nbank_fin_qynum": -1,
+ "ppcm_m12_nbank_fin_loanorg": -1,
+ "ppcm_m1_qyorg_new": 2,
+ "ppcm_m12_fail_repamt_max": -1,
+ "ppcm_m24_nbank_fin_qynum": 1,
+ "ppcm_m3_p3_overamt": -1,
+ "ppcm_m6_bank_succ_repamt": -1,
+ "ppcm_d7_nbank_other_neh_repnum_ratio": -1,
+ "ppcm_m3_overnum": -1,
+ "ppcm_m1_loanorg_new": -1,
+ "ppcm_m24_succ_repnum": -1,
+ "ppcm_m1_fail_reporg_new": -1,
+ "ppcm_m12_loanday": -1,
+ "ppcm_m12_cred_reporg_new": -1,
+ "ppcm_m3_nbank_other_loanamt": -1,
+ "ppcm_m6_bank_qynum": -1,
+ "ppcm_d7_bank_qynum": -1,
+ "ppcm_m6_bank_neh_repnum_ratio": -1,
+ "ppcm_d7_cred_reporg": -1,
+ "ppcm_m6_cred_succ_reporg": -1,
+ "ppcm_m24_qynum": 13,
+ "ppcm_m6_fail_neh_repnum_ratio": -1,
+ "ppcm_m12_loannum": -1,
+ "ppcm_m1_allnum": 2,
+ "ppcm_m24_nbank_fin_neh_repnum_ratio": -1,
+ "ppcm_m6_repday": -1,
+ "ppcm_m6_nbank_fin_succ_reporg": -1,
+ "ppcm_d7_cred_succ_reporg": -1,
+ "ppcm_m3_bank_succ_repamt": -1,
+ "ppcm_m12_nbank_other_fail_repnum": -1,
+ "ppcm_m1_qyorg": 2,
+ "ppcm_m24_repday": -1,
+ "ppcm_d7_nbank_other_fail_repnum": -1,
+ "ppcm_m6_qyorg_new": 3,
+ "ppcm_m3_nbank_other_fail_repnum": -1,
+ "ppcm_m24_fail_reporg": -1,
+ "ppcm_m12_bank_neh_repnum_ratio": -1,
+ "ppcm_m1_cred_fail_repnum": -1,
+ "ppcm_d7_cred_fail_repnum": -1,
+ "ppcm_m24_cred_succ_reporg": -1,
+ "ppcm_m1_m24_nbank_other_succ_repnum_ratio": -1,
+ "ppcm_m3_m12_nbank_other_loannum_ratio": -1,
+ "ppcm_m6_m24_succ_repnum_ratio": -1,
+ "ppcm_m3_loanday": -1,
+ "ppcm_d7_nbank_fin_fail_repnum": -1,
+ "ppcm_m1_cred_reporg_new": -1,
+ "ppcm_m24_bank_fail_repamt": -1,
+ "ppcm_m12_p3_overamt": -1,
+ "ppcm_m12_succ_repnum": -1,
+ "ppcm_d7_succ_repnum": -1,
+ "ppcm_m24_succ_repamt": -1,
+ "ppcm_d7_bank_fail_reporg": -1,
+ "ppcm_latest_qytoday": 1,
+ "ppcm_m1_nbank_other_loanamt": -1,
+ "ppcm_recent_cardnum": -1,
+ "ppcm_m12_bank_loanamt": -1,
+ "ppcm_m12_bank_fail_reporg": -1,
+ "ppcm_m1_bank_succ_repamt": -1,
+ "ppcm_m24_p4_overamt": -1,
+ "ppcm_m3_succ_repnum": -1,
+ "ppcm_m3_m24_nbank_fin_qynum_ratio": 1,
+ "ppcm_d7_qyorg": 2,
+ "ppcm_m3_qy_rep_ratio": -1,
+ "ppcm_m12_cred_fail_repnum": -1,
+ "ppcm_m6_succ_repnum": -1,
+ "ppcm_m1_nbank_other_succ_repnum": -1,
+ "ppcm_m1_bank_neh_repnum_ratio": -1,
+ "ppcm_m12_nbank_other_fail_repamt": -1,
+ "ppcm_m1_p1_overamt": -1,
+ "ppcm_m3_overorg": -1,
+ "ppcm_m3_cred_fail_reporg_new": -1,
+ "ppcm_m6_m24_bank_fail_repnum_ratio": -1,
+ "ppcm_m12_qy_rep_ratio": -1,
+ "ppcm_m24_nbank_fin_succ_repamt": -1,
+ "ppcm_m1_bank_loanorg": -1,
+ "ppcm_m3_cred_fail_reporg": -1,
+ "ppcm_m24_nbank_other_succ_repamt": -1,
+ "ppcm_m6_qynum_avg": 0.5,
+ "ppcm_m24_nbank_fin_fail_reporg": -1,
+ "ppcm_m6_nbank_fin_loannum": -1,
+ "ppcm_m3_nbank_fin_loanamt": -1,
+ "ppcm_m24_bank_loannum": -1,
+ "ppcm_m1_fail_reporg": -1,
+ "ppcm_m6_nbank_fin_succ_repnum": -1,
+ "ppcm_m3_m24_nbank_fin_succ_repnum_ratio": -1,
+ "ppcm_m24_nbank_other_fail_reporg": -1,
+ "ppcm_m1_m6_qynum_ratio": 0.67,
+ "ppcm_m1_succ_repamt": -1,
+ "ppcm_m24_fail_repnum": -1,
+ "ppcm_m3_nbank_other_fail_reporg": -1,
+ "ppcm_m12_loanorg_new": -1,
+ "ppcm_m1_m24_nbank_fin_fail_repnum_ratio": -1,
+ "ppcm_m24_overnum": -1,
+ "ppcm_d7_nbank_other_succ_repamt": -1,
+ "ppcm_m12_reporg": -1,
+ "ppcm_m1_reporg": -1,
+ "ppcm_d7_overamt": -1,
+ "ppcm_m1_succ_reporg_new": -1,
+ "ppcm_m1_cred_succ_reporg": -1,
+ "ppcm_m3_nbank_other_succ_repamt": -1,
+ "ppcm_d7_nbank_fin_succ_repamt": -1,
+ "ppcm_m3_loannum": -1,
+ "ppcm_m1_bank_fail_reporg": -1,
+ "ppcm_d7_m12_nbank_fin_qynum_ratio": 0,
+ "ppcm_m6_nbank_other_loanorg": -1,
+ "ppcm_m24_cred_fail_reporg": -1,
+ "ppcm_m6_loanamt": -1,
+ "ppcm_m1_nbank_fin_fail_repamt": -1,
+ "ppcm_d7_bank_loannum": -1,
+ "ppcm_m12_nbank_other_loanorg": -1,
+ "ppcm_m6_nbank_other_succ_repamt": -1,
+ "ppcm_m3_p4_overamt": -1,
+ "ppcm_d7_qynum": 2,
+ "ppcm_m24_nbank_other_fail_repnum": -1,
+ "ppcm_m3_bank_fail_repamt": -1,
+ "ppcm_d7_m12_qynum_ratio": 0.5,
+ "ppcm_d7_nbank_other_fail_reporg": -1,
+ "ppcm_m6_bank_loanamt": -1,
+ "ppcm_m3_nbank_fin_fail_repnum": -1,
+ "ppcm_m1_bank_loannum": -1,
+ "ppcm_d7_fail_repnum": -1,
+ "ppcm_m3_m24_bank_fail_repnum_ratio": -1,
+ "ppcm_m3_cred_fail_repnum": -1,
+ "ppcm_m12_nbank_fin_loanamt": -1,
+ "ppcm_m12_bank_qynum": -1,
+ "ppcm_m3_cred_succ_repamt": -1,
+ "ppcm_m6_cred_fail_reporg": -1,
+ "ppcm_m12_nbank_other_qynum": 3,
+ "ppcm_m6_m24_bank_succ_repnum_ratio": -1,
+ "ppcm_m3_nbank_other_neh_repnum_ratio": -1,
+ "ppcm_d7_nbank_other_loanorg": -1,
+ "ppcm_m24_nbank_fin_fail_repnum": -1,
+ "ppcm_m3_fail_repnum_avg": -1,
+ "ppcm_m1_m6_nbank_other_qynum_ratio": 1,
+ "ppcm_m12_repday": -1,
+ "ppcm_d7_succ_reporg": -1,
+ "ppcm_m3_cred_succ_reporg_new": -1,
+ "ppcm_m6_fail_repnum_avg": -1,
+ "ppcm_m1_m12_nbank_fin_loannum_ratio": -1,
+ "ppcm_m3_cred_reporg": -1,
+ "ppcm_m6_loanorg_new": -1,
+ "ppcm_m6_cred_fail_reporg_new": -1,
+ "ppcm_m24_reporg": -1,
+ "ppcm_m3_nbank_other_qynum": 2,
+ "ppcm_m3_m24_nbank_fin_fail_repnum_ratio": -1,
+ "ppcm_d7_cred_fail_reporg": -1,
+ "ppcm_d7_nbank_fin_loanamt": -1,
+ "ppcm_m6_fail_repamt": -1,
+ "ppcm_d7_loanorg": -1,
+ "ppcm_m1_loanamt": -1,
+ "ppcm_m12_p4_overamt": -1,
+ "ppcm_d7_cred_succ_repamt": -1,
+ "ppcm_m24_nbank_other_loanamt": -1,
+ "ppcm_m3_loanorg": -1,
+ "ppcm_m3_m12_nbank_fin_loannum_ratio": -1,
+ "ppcm_m1_bank_fail_repnum": -1,
+ "ppcm_m6_bank_fail_repamt": -1,
+ "ppcm_m12_cred_succ_reporg": -1,
+ "ppcm_m6_p3_overamt": -1,
+ "ppcm_m12_qyday": 4,
+ "ppcm_m12_bank_succ_repamt": -1,
+ "ppcm_m6_nbank_fin_loanorg": -1,
+ "ppcm_d7_nbank_other_qynum": 2,
+ "ppcm_m12_qynum": 4,
+ "ppcm_m24_p3_overamt": -1,
+ "ppcm_m12_allnum": 4,
+ "ppcm_m6_nbank_other_fail_reporg": -1,
+ "ppcm_m3_qyorg_new": 3,
+ "ppcm_m24_nbank_other_qyorg": 5,
+ "ppcm_d7_allnum": 2,
+ "ppcm_m1_m24_nbank_fin_succ_repnum_ratio": -1,
+ "ppcm_m12_qyorg_new": 4,
+ "ppcm_d7_nbank_other_succ_reporg": -1,
+ "ppcm_m6_cred_succ_repamt": -1,
+ "ppcm_m24_loanday": -1,
+ "ppcm_m1_succ_repamt_max": -1,
+ "ppcm_m24_succ_repamt_max": -1,
+ "ppcm_d7_nbank_fin_qyorg": -1,
+ "ppcm_m1_nbank_fin_succ_repnum": -1,
+ "ppcm_d7_bank_fail_repamt": -1,
+ "ppcm_m3_overamt": -1,
+ "ppcm_m24_nbank_other_loannum": -1,
+ "ppcm_m6_p2_overamt": -1,
+ "ppcm_m24_cred_fail_repnum": -1,
+ "ppcm_m3_bank_qynum": -1,
+ "ppcm_m24_bank_qyorg": -1,
+ "ppcm_m1_bank_qyorg": -1,
+ "ppcm_d7_nbank_fin_succ_reporg": -1,
+ "ppcm_m3_m12_qynum_ratio": 0.75,
+ "ppcm_m3_nbank_other_loanorg": -1,
+ "ppcm_d7_bank_loanorg": -1,
+ "ppcm_m3_nbank_fin_loanorg": -1,
+ "ppcm_m3_repday": -1,
+ "ppcm_m6_allnum": 3,
+ "ppcm_m6_bank_succ_reporg": -1,
+ "ppcm_m12_loanamt": -1,
+ "ppcm_m1_bank_succ_reporg": -1,
+ "ppcm_m12_succ_repamt_max": -1,
+ "ppcm_m12_nbank_fin_succ_repnum": -1,
+ "ppcm_m3_bank_succ_repnum": -1,
+ "ppcm_d7_m12_bank_qynum_ratio": -1,
+ "ppcm_m1_loanamt_max": -1,
+ "ppcm_m3_loanamt_max": -1,
+ "ppcm_m3_bank_fail_repnum": -1,
+ "ppcm_m6_nbank_other_fail_repnum": -1,
+ "ppcm_m3_m24_succ_repnum_ratio": -1,
+ "ppcm_m12_cred_fail_reporg": -1,
+ "ppcm_m1_cred_succ_repamt": -1,
+ "ppcm_m3_p1_overamt": -1,
+ "ppcm_m24_nbank_other_fail_repamt": -1,
+ "ppcm_m12_p2_overamt": -1,
+ "ppcm_m1_nbank_fin_fail_reporg": -1,
+ "ppcm_m24_nbank_other_qynum": 12,
+ "ppcm_m6_bank_loannum": -1,
+ "ppcm_m24_nbank_other_neh_repnum_ratio": -1,
+ "ppcm_m3_cred_fail_repamt": -1,
+ "ppcm_m12_nbank_other_succ_repamt": -1,
+ "ppcm_m1_overnum": -1,
+ "ppcm_m3_m24_qynum_ratio": 0.23,
+ "ppcm_m1_nbank_other_fail_repnum": -1,
+ "ppcm_m12_loanamt_max": -1,
+ "ppcm_d7_fail_neh_repnum_ratio": -1,
+ "ppcm_m24_nbank_fin_fail_repamt": -1,
+ "ppcm_m3_nbank_fin_succ_repamt": -1,
+ "ppcm_m3_fail_reporg_new": -1,
+ "ppcm_m6_fail_reporg_new": -1,
+ "ppcm_d7_nbank_fin_fail_reporg": -1,
+ "ppcm_m3_nbank_other_succ_reporg": -1,
+ "ppcm_m12_nbank_fin_fail_repnum": -1,
+ "ppcm_m1_p2_overamt": -1,
+ "ppcm_m1_cred_succ_reporg_new": -1,
+ "ppcm_m3_m12_bank_loannum_ratio": -1,
+ "ppcm_m12_overnum": -1,
+ "ppcm_m12_cred_succ_repnum": -1,
+ "ppcm_m6_loanamt_max": -1,
+ "ppcm_m12_bank_fail_repnum": -1,
+ "ppcm_m1_nbank_fin_loannum": -1,
+ "ppcm_m6_nbank_fin_fail_repnum": -1,
+ "ppcm_m12_cred_reporg": -1,
+ "ppcm_m3_nbank_other_loannum": -1,
+ "ppcm_m12_fail_neh_repnum_ratio": -1,
+ "ppcm_d7_overorg": -1,
+ "ppcm_m6_m24_nbank_other_succ_repnum_ratio": -1,
+ "ppcm_m12_qyorg": 4,
+ "ppcm_m6_cred_fail_repamt": -1,
+ "ppcm_m6_bank_succ_repnum": -1,
+ "ppcm_m3_cred_succ_reporg": -1,
+ "ppcm_m3_m12_loannum_ratio": -1,
+ "ppcm_history_cardnum": -1,
+ "ppcm_d7_nbank_fin_loanorg": -1,
+ "ppcm_latest_loantoday": -1,
+ "ppcm_m6_nbank_other_neh_repnum_ratio": -1,
+ "ppcm_m24_cred_succ_repnum": -1,
+ "ppcm_m24_allnum": 13,
+ "ppcm_m12_nbank_other_loanamt": -1,
+ "ppcm_m1_m6_nbank_fin_qynum_ratio": 0,
+ "ppcm_m24_nbank_other_loanorg": -1,
+ "ppcm_latest_fail_reptoday": -1,
+ "ppcm_d7_nbank_other_fail_repamt": -1,
+ "ppcm_m24_p2_overamt": -1,
+ "ppcm_m6_bank_loanorg": -1,
+ "ppcm_m1_m24_bank_fail_repnum_ratio": -1,
+ "ppcm_d7_nbank_fin_neh_repnum_ratio": -1,
+ "ppcm_m6_cred_succ_reporg_new": -1,
+ "ppcm_m24_bank_succ_repamt": -1,
+ "ppcm_m1_m24_bank_succ_repnum_ratio": -1,
+ "ppcm_m6_qy_rep_ratio": -1,
+ "ppcm_m3_bank_qyorg": -1,
+ "ppcm_m24_fail_neh_repnum_ratio": -1,
+ "ppcm_m6_cred_reporg": -1,
+ "ppcm_m1_nbank_fin_fail_repnum": -1,
+ "ppcm_m3_m24_fail_repnum_ratio": -1,
+ "ppcm_d7_nbank_fin_succ_repnum": -1,
+ "ppcm_m3_nbank_other_fail_repamt": -1,
+ "ppcm_m12_bank_qyorg": -1,
+ "ppcm_m12_nbank_other_qyorg": 3,
+ "ppcm_m24_bank_neh_repnum_ratio": -1,
+ "ppcm_d7_nbank_other_loannum": -1,
+ "ppcm_m24_cred_reporg": -1,
+ "ppcm_m24_bank_qynum": -1,
+ "ppcm_m6_nbank_other_loannum": -1,
+ "ppcm_m3_bank_loanamt": -1,
+ "ppcm_m3_m24_bank_succ_repnum_ratio": -1,
+ "ppcm_m12_overorg": -1,
+ "ppcm_d7_succ_repamt": -1,
+ "ppcm_d7_fail_repamt_max": -1,
+ "ppcm_m24_nbank_fin_succ_reporg": -1,
+ "ppcm_m3_m12_nbank_other_qynum_ratio": 0.67,
+ "ppcm_m24_nbank_other_succ_reporg": -1,
+ "ppcm_m1_nbank_fin_loanorg": -1,
+ "ppcm_d7_loanamt": -1,
+ "ppcm_m12_nbank_fin_succ_reporg": -1,
+ "ppcm_m1_fail_repnum": -1,
+ "ppcm_m1_m6_bank_qynum_ratio": -1,
+ "ppcm_m24_nbank_fin_loanamt": -1,
+ "ppcm_d7_nbank_fin_qynum": -1,
+ "ppcm_m3_bank_fail_reporg": -1,
+ "ppcm_m3_fail_repnum": -1,
+ "ppcm_m1_m24_nbank_other_fail_repnum_ratio": -1,
+ "ppcm_d7_fail_reporg": -1,
+ "ppcm_d7_bank_succ_repamt": -1,
+ "ppcm_m6_overamt": -1,
+ "ppcm_m24_loannum": -1,
+ "ppcm_m6_bank_fail_reporg": -1,
+ "ppcm_m6_nbank_fin_loanamt": -1,
+ "ppcm_m1_nbank_other_fail_reporg": -1,
+ "ppcm_m24_bank_loanamt": -1,
+ "ppcm_m3_qynum": 3,
+ "ppcm_m3_loannum_avg": -1,
+ "ppcm_m3_p2_overamt": -1,
+ "ppcm_m3_bank_neh_repnum_ratio": -1,
+ "ppcm_m6_loannum_avg": -1,
+ "ppcm_m6_bank_fail_repnum": -1,
+ "ppcm_m24_qyday": 13,
+ "ppcm_m12_loanorg": -1,
+ "ppcm_m1_succ_repnum": -1,
+ "ppcm_m3_bank_loannum": -1,
+ "ppcm_latest_succ_reptoday": -1,
+ "ppcm_d7_overnum": -1,
+ "ppcm_m6_nbank_fin_fail_reporg": -1,
+ "ppcm_m24_overamt": -1,
+ "ppcm_m12_bank_succ_repnum": -1,
+ "ppcm_m3_nbank_fin_neh_repnum_ratio": -1,
+ "ppcm_m3_loanamt": -1,
+ "ppcm_m24_fail_repamt_max": -1,
+ "ppcm_m6_loannum": -1,
+ "ppcm_d7_bank_succ_repnum": -1,
+ "ppcm_m1_loanorg": -1,
+ "ppcm_m6_m24_nbank_fin_succ_repnum_ratio": -1,
+ "ppcm_m24_loanorg": -1,
+ "ppcm_d7_cred_fail_repamt": -1,
+ "ppcm_m1_cred_fail_repamt": -1,
+ "ppcm_m6_loanday": -1,
+ "ppcm_m1_fail_repamt_max": -1,
+ "ppcm_m12_succ_repamt": -1,
+ "ppcm_d7_nbank_fin_fail_repamt": -1,
+ "ppcm_m3_fail_reporg": -1,
+ "ppcm_m24_bank_fail_repnum": -1,
+ "ppcm_m6_p1_overamt": -1,
+ "ppcm_m1_nbank_other_loannum": -1,
+ "ppcm_m6_fail_reporg": -1,
+ "ppcm_m3_reporg_new": -1,
+ "ppcm_m3_m24_nbank_other_succ_repnum_ratio": -1,
+ "ppcm_m3_nbank_fin_fail_repamt": -1,
+ "ppcm_m12_cred_fail_repamt": -1,
+ "ppcm_m6_nbank_fin_qynum": 1,
+ "ppcm_m1_bank_succ_repnum": -1,
+ "ppcm_m3_nbank_fin_qynum": 1,
+ "ppcm_m12_bank_loannum": -1,
+ "ppcm_m3_allnum": 3,
+ "ppcm_m3_cred_succ_repnum": -1,
+ "ppcm_d7_bank_neh_repnum_ratio": -1,
+ "ppcm_m3_succ_repamt": -1,
+ "ppcm_m12_cred_succ_reporg_new": -1,
+ "ppcm_m6_succ_repamt": -1,
+ "ppcm_m6_nbank_other_qynum": 2,
+ "ppcm_m24_p1_overamt": -1,
+ "ppcm_m24_nbank_fin_succ_repnum": -1,
+ "ppcm_m12_fail_reporg": -1,
+ "ppcm_m24_nbank_other_succ_repnum": -1,
+ "ppcm_m12_nbank_other_succ_reporg": -1,
+ "ppcm_m3_m24_nbank_other_fail_repnum_ratio": -1,
+ "ppcm_m6_bank_qyorg": -1,
+ "ppcm_m1_loannum": -1,
+ "ppcm_m3_nbank_fin_loannum": -1,
+ "ppcm_d7_cred_succ_repnum": -1,
+ "ppcm_m6_nbank_fin_succ_repamt": -1,
+ "ppcm_m1_fail_neh_repnum_ratio": -1,
+ "ppcm_m1_cred_reporg": -1,
+ "ppcm_m24_nbank_fin_loanorg": -1,
+ "ppcm_m1_bank_fail_repamt": -1,
+ "ppcm_m12_p1_overamt": -1,
+ "ppcm_m24_loanamt_max": -1,
+ "ppcm_behav_score": 595,
+ "ppcm_m24_fail_repamt": -1,
+ "ppcm_d7_bank_succ_reporg": -1,
+ "ppcm_m1_m24_fail_repnum_ratio": -1,
+ "ppcm_history_cellnum": -1,
+ "ppcm_m6_loanorg": -1,
+ "ppcm_m12_nbank_other_neh_repnum_ratio": -1,
+ "ppcm_m12_fail_repnum": -1,
+ "ppcm_latest_cred_succ_reptoday": -1,
+ "ppcm_m1_m12_loannum_ratio": -1,
+ "ppcm_d7_nbank_other_succ_repnum": -1,
+ "ppcm_m3_m12_bank_qynum_ratio": -1,
+ "ppcm_m1_nbank_fin_succ_reporg": -1,
+ "ppcm_m3_succ_repamt_max": -1,
+ "ppcm_m1_qyday": 2,
+ "ppcm_m6_succ_repamt_max": -1,
+ "ppcm_m1_m24_succ_repnum_ratio": -1,
+ "ppcm_m1_qy_rep_ratio": -1,
+ "ppcm_latest_cred_fail_reptoday": -1,
+ "ppcm_m1_nbank_fin_loanamt": -1,
+ "ppcm_m12_overamt": -1,
+ "ppcm_m1_m12_nbank_other_loannum_ratio": -1,
+ "ppcm_m1_overorg": -1,
+ "ppcm_m3_bank_loanorg": -1,
+ "ppcm_m6_qyorg": 3,
+ "ppcm_m6_nbank_other_succ_repnum": -1,
+ "ppcm_m6_overorg": -1,
+ "ppcm_m12_nbank_fin_qyorg": 1,
+ "ppcm_m6_m24_nbank_other_fail_repnum_ratio": -1,
+ "ppcm_m1_bank_qynum": -1,
+ "ppcm_d7_bank_loanamt": -1,
+ "ppcm_m1_nbank_fin_neh_repnum_ratio": -1,
+ "ppcm_latest_rep_status": -1,
+ "ppcm_m3_nbank_other_succ_repnum": -1,
+ "ppcm_m12_nbank_fin_fail_reporg": -1,
+ "ppcm_m12_nbank_fin_loannum": -1,
+ "ppcm_recent_cellnum": -1,
+ "ppcm_m1_bank_loanamt": -1,
+ "ppcm_m3_bank_succ_reporg": -1,
+ "ppcm_m6_reporg_new": -1,
+ "ppcm_m6_nbank_other_qyorg": 2,
+ "ppcm_d7_fail_repamt": -1,
+ "ppcm_m24_bank_succ_reporg": -1,
+ "ppcm_m3_nbank_fin_qyorg": 1,
+ "ppcm_m3_reporg": -1,
+ "ppcm_m3_qyday": 3,
+ "ppcm_m1_p4_overamt": -1,
+ "ppcm_m3_m12_nbank_fin_qynum_ratio": 1,
+ "ppcm_m3_succ_reporg_new": -1,
+ "ppcm_m6_succ_reporg_new": -1,
+ "ppcm_m12_cred_fail_reporg_new": -1,
+ "ppcm_m1_loanday": -1,
+ "ppcm_d7_nbank_fin_loannum": -1,
+ "ppcm_m1_nbank_other_succ_repamt": -1,
+ "ppcm_m12_nbank_fin_succ_repamt": -1,
+ "ppcm_m1_nbank_other_loanorg": -1,
+ "ppcm_m1_cred_fail_reporg_new": -1,
+ "ppcm_m12_succ_reporg_new": -1,
+ "ppcm_m6_fail_repnum": -1,
+ "ppcm_m6_nbank_fin_qyorg": 1
+ },
+ "message": "success",
+ "success": true
+ }
+ }
+ },
+ {
+ "feature": {
+ "featureName": "借贷意向验证",
+ "sort": 1
+ },
+ "data": {
+ "apiID": "JRZQ6F2A",
+ "data": {
+ "risk_screen_v2": {
+ "fulinHitFlag": 1,
+ "models": [
+ {
+ "score": "1.0",
+ "sceneCode": "GXCRF***012001"
+ }
+ ],
+ "variables": [
+ {
+ "variableName": "bairong_applyloan_extend",
+ "variableValue": {
+ "als_d15_id_coon_allnum": "1",
+ "als_m12_id_max_monnum": "3",
+ "als_m6_id_coon_allnum": "2",
+ "als_d15_cell_nbank_week_allnum": "0",
+ "als_m1_cell_nbank_allnum": "1",
+ "als_d15_id_nbank_allnum": "3",
+ "als_d7_id_nbank_oth_orgnum": "1",
+ "als_m12_id_min_monnum": "0",
+ "als_d7_id_nbank_night_allnum": "0",
+ "als_m3_id_max_monnum": "3",
+ "als_m3_cell_nbank_oth_orgnum": "1",
+ "als_d7_cell_nbank_selfnum": "1",
+ "als_d15_cell_nbank_selfnum": "1",
+ "als_m3_id_nbank_orgnum": "2",
+ "als_d15_id_caon_orgnum": "1",
+ "als_m6_id_nbank_orgnum": "2",
+ "als_m1_id_nbank_week_orgnum": "0",
+ "als_m6_cell_nbank_else_allnum": "1",
+ "als_d15_id_nbank_else_orgnum": "2",
+ "als_d7_cell_nbank_allnum": "1",
+ "als_m3_cell_min_monnum": "0",
+ "als_m6_id_avg_monnum": "2.00",
+ "als_d7_id_nbank_else_orgnum": "1",
+ "als_m6_cell_nbank_orgnum": "1",
+ "als_m1_cell_nbank_oth_allnum": "1",
+ "als_m12_id_nbank_else_allnum": "4",
+ "als_m1_cell_nbank_oth_orgnum": "1",
+ "als_fst_id_nbank_inteday": "155",
+ "als_m12_cell_caon_allnum": "1",
+ "als_m1_cell_nbank_else_allnum": "1",
+ "als_m6_cell_nbank_max_monnum": "1",
+ "als_m1_id_nbank_allnum": "3",
+ "als_d15_id_nbank_oth_orgnum": "2",
+ "als_m6_cell_nbank_night_allnum": "0",
+ "als_m12_id_nbank_night_allnum": "0",
+ "als_m3_cell_caon_orgnum": "1",
+ "als_m12_id_nbank_avg_monnum": "2.00",
+ "als_d15_cell_nbank_orgnum": "1",
+ "als_d15_cell_caon_allnum": "1",
+ "als_d7_id_caon_orgnum": "1",
+ "als_m3_cell_nbank_orgnum": "1",
+ "als_m3_cell_nbank_oth_allnum": "1",
+ "als_m6_id_nbank_oth_allnum": "4",
+ "als_m6_cell_nbank_avg_monnum": "1.00",
+ "als_d15_id_coon_orgnum": "1",
+ "als_m12_id_nbank_max_monnum": "3",
+ "als_m3_id_min_inteday": "3",
+ "als_m3_cell_caon_allnum": "1",
+ "als_m1_cell_nbank_night_orgnum": "0",
+ "als_d15_id_caon_allnum": "2",
+ "als_d7_cell_nbank_oth_orgnum": "1",
+ "als_d15_cell_nbank_night_orgnum": "0",
+ "als_m6_cell_nbank_night_orgnum": "0",
+ "als_m12_id_nbank_night_orgnum": "0",
+ "als_m3_id_nbank_avg_monnum": "3.00",
+ "als_lst_cell_nbank_csinteday": "1",
+ "als_m3_id_min_monnum": "0",
+ "als_m6_cell_max_monnum": "1",
+ "als_d15_cell_nbank_night_allnum": "0",
+ "als_m12_cell_min_monnum": "0",
+ "als_m3_id_nbank_max_monnum": "3",
+ "als_m3_cell_max_monnum": "1",
+ "als_d7_id_nbank_allnum": "1",
+ "als_m1_id_coon_orgnum": "1",
+ "als_d7_id_nbank_night_orgnum": "0",
+ "als_m6_id_nbank_oth_orgnum": "2",
+ "als_m12_id_nbank_orgnum": "2",
+ "als_m3_cell_nbank_allnum": "1",
+ "als_m1_cell_nbank_night_allnum": "0",
+ "als_m3_id_nbank_night_allnum": "0",
+ "als_d7_cell_nbank_orgnum": "1",
+ "als_d15_id_nbank_else_allnum": "3",
+ "als_m6_cell_nbank_selfnum": "1",
+ "als_m1_id_coon_allnum": "1",
+ "als_m6_cell_nbank_oth_allnum": "1",
+ "als_d7_id_nbank_orgnum": "1",
+ "als_m6_cell_caon_orgnum": "1",
+ "als_m3_id_caon_allnum": "2",
+ "als_m12_cell_nbank_night_orgnum": "0",
+ "als_d7_cell_nbank_week_orgnum": "0",
+ "als_m12_id_min_inteday": "3",
+ "als_m3_id_nbank_oth_allnum": "3",
+ "als_d15_id_nbank_orgnum": "2",
+ "als_d15_cell_nbank_else_orgnum": "1",
+ "swift_number": "3011113_202507******800_5564050AA",
+ "als_m6_cell_nbank_tot_mons": "1",
+ "als_m12_id_tot_mons": "2",
+ "als_m12_id_avg_monnum": "2.00",
+ "als_m12_cell_nbank_else_allnum": "1",
+ "als_d7_id_nbank_oth_allnum": "1",
+ "als_m6_id_coon_orgnum": "1",
+ "als_m1_id_nbank_orgnum": "2",
+ "als_m1_cell_nbank_orgnum": "1",
+ "als_d15_cell_nbank_allnum": "1",
+ "als_m6_id_max_monnum": "3",
+ "als_m12_id_max_inteday": "144",
+ "als_m1_id_nbank_oth_allnum": "3",
+ "als_d15_cell_nbank_else_allnum": "1",
+ "als_m3_cell_nbank_selfnum": "1",
+ "als_Flag_applyloanstr": "1",
+ "als_m6_id_nbank_else_orgnum": "2",
+ "als_m1_cell_nbank_selfnum": "1",
+ "als_m3_id_nbank_oth_orgnum": "2",
+ "als_m6_id_nbank_night_allnum": "0",
+ "als_d7_id_nbank_else_allnum": "1",
+ "als_m3_id_nbank_max_inteday": "7",
+ "als_m1_cell_caon_orgnum": "1",
+ "als_m6_id_nbank_avg_monnum": "2.00",
+ "als_d15_id_nbank_selfnum": "2",
+ "als_m12_cell_nbank_max_monnum": "1",
+ "als_m6_cell_min_monnum": "0",
+ "als_m12_id_nbank_selfnum": "2",
+ "als_m6_cell_nbank_oth_orgnum": "1",
+ "als_m12_id_nbank_max_inteday": "144",
+ "als_m6_id_caon_allnum": "2",
+ "als_m6_id_nbank_night_orgnum": "0",
+ "als_lst_id_nbank_consnum": "1",
+ "als_m3_cell_nbank_max_monnum": "1",
+ "als_m1_id_nbank_oth_orgnum": "2",
+ "als_m12_id_nbank_oth_allnum": "4",
+ "als_m6_cell_tot_mons": "1",
+ "als_m6_id_caon_orgnum": "1",
+ "als_m6_id_nbank_else_allnum": "4",
+ "als_m3_id_max_inteday": "7",
+ "als_d7_id_nbank_selfnum": "1",
+ "als_m3_id_nbank_else_orgnum": "2",
+ "als_m1_cell_caon_allnum": "1",
+ "als_m12_id_caon_orgnum": "1",
+ "als_m1_id_nbank_night_orgnum": "0",
+ "als_m6_cell_nbank_week_orgnum": "0",
+ "als_m12_id_nbank_oth_orgnum": "2",
+ "als_m12_id_coon_allnum": "2",
+ "als_m12_cell_avg_monnum": "1.00",
+ "als_d15_cell_nbank_oth_allnum": "1",
+ "als_d7_id_nbank_week_orgnum": "0",
+ "als_d7_cell_nbank_week_allnum": "0",
+ "als_m1_id_nbank_else_allnum": "3",
+ "als_m12_id_nbank_week_orgnum": "0",
+ "als_m3_cell_nbank_tot_mons": "1",
+ "als_m6_id_nbank_min_inteday": "3",
+ "als_m3_id_coon_allnum": "1",
+ "als_m12_cell_nbank_week_allnum": "0",
+ "als_m3_id_caon_orgnum": "1",
+ "als_m1_id_caon_allnum": "2",
+ "als_m1_cell_nbank_week_allnum": "0",
+ "als_m12_cell_nbank_else_orgnum": "1",
+ "als_m12_id_nbank_week_allnum": "0",
+ "als_d7_cell_nbank_oth_allnum": "1",
+ "als_d7_cell_nbank_else_orgnum": "1",
+ "als_m12_id_nbank_allnum": "4",
+ "als_m3_cell_avg_monnum": "1.00",
+ "als_lst_cell_nbank_inteday": "1",
+ "als_m6_id_nbank_tot_mons": "2",
+ "als_m3_id_coon_orgnum": "1",
+ "als_m12_cell_nbank_oth_orgnum": "1",
+ "als_m6_cell_caon_allnum": "1",
+ "als_m6_id_max_inteday": "144",
+ "als_m12_id_nbank_tot_mons": "2",
+ "als_m12_cell_nbank_min_monnum": "0",
+ "als_m6_id_tot_mons": "2",
+ "als_m3_cell_tot_mons": "1",
+ "als_m12_id_nbank_min_inteday": "3",
+ "als_m3_id_nbank_night_orgnum": "0",
+ "als_m1_id_nbank_else_orgnum": "2",
+ "als_m6_cell_nbank_week_allnum": "0",
+ "als_m12_cell_nbank_selfnum": "1",
+ "als_m12_id_caon_allnum": "2",
+ "als_m3_id_nbank_min_inteday": "3",
+ "als_m12_cell_tot_mons": "1",
+ "als_m3_id_nbank_else_allnum": "3",
+ "als_m3_cell_nbank_else_orgnum": "1",
+ "als_m12_cell_nbank_oth_allnum": "1",
+ "als_m6_id_nbank_min_monnum": "0",
+ "als_d7_cell_caon_orgnum": "1",
+ "als_m6_cell_avg_monnum": "1.00",
+ "als_m12_cell_nbank_night_allnum": "0",
+ "als_m3_cell_nbank_else_allnum": "1",
+ "als_m6_id_nbank_week_allnum": "0",
+ "als_m3_id_nbank_tot_mons": "1",
+ "als_m3_cell_nbank_night_orgnum": "0",
+ "als_d7_cell_caon_allnum": "1",
+ "als_m1_id_nbank_selfnum": "2",
+ "als_m1_id_caon_orgnum": "1",
+ "als_m6_id_nbank_week_orgnum": "0",
+ "als_m3_cell_nbank_min_monnum": "0",
+ "als_m12_cell_nbank_allnum": "1",
+ "als_m12_cell_max_monnum": "1",
+ "als_d15_id_nbank_week_orgnum": "0",
+ "als_d7_id_caon_allnum": "1",
+ "als_m1_id_nbank_night_allnum": "0",
+ "als_d7_id_nbank_week_allnum": "0",
+ "als_m6_id_min_inteday": "3",
+ "als_m6_id_nbank_max_inteday": "144",
+ "als_m12_cell_caon_orgnum": "1",
+ "als_m12_id_nbank_else_orgnum": "2",
+ "als_d15_cell_nbank_week_orgnum": "0",
+ "als_m1_cell_nbank_else_orgnum": "1",
+ "als_m3_id_nbank_selfnum": "2",
+ "als_m1_cell_nbank_week_orgnum": "0",
+ "als_m6_id_nbank_max_monnum": "3",
+ "als_m6_cell_nbank_allnum": "1",
+ "als_d15_cell_nbank_oth_orgnum": "1",
+ "als_m1_id_nbank_week_allnum": "0",
+ "als_m12_cell_nbank_tot_mons": "1",
+ "als_m3_id_tot_mons": "1",
+ "als_d15_cell_caon_orgnum": "1",
+ "als_d15_id_nbank_oth_allnum": "3",
+ "als_d7_cell_nbank_else_allnum": "1",
+ "als_m12_cell_nbank_week_orgnum": "0",
+ "als_m12_id_coon_orgnum": "1",
+ "als_lst_id_nbank_inteday": "1",
+ "als_m6_id_min_monnum": "0",
+ "als_m6_id_nbank_selfnum": "2",
+ "code": "00",
+ "als_m3_id_nbank_week_orgnum": "0",
+ "als_m6_cell_nbank_else_orgnum": "1",
+ "als_d15_id_nbank_week_allnum": "0",
+ "als_m3_id_nbank_min_monnum": "0",
+ "als_m3_id_avg_monnum": "3.00",
+ "als_d15_id_nbank_night_orgnum": "0",
+ "als_m3_cell_nbank_night_allnum": "0",
+ "als_fst_cell_nbank_inteday": "1",
+ "als_m12_cell_nbank_orgnum": "1",
+ "als_d15_id_nbank_night_allnum": "0",
+ "als_m3_id_nbank_week_allnum": "0",
+ "als_d7_cell_nbank_night_allnum": "0",
+ "als_m12_id_nbank_min_monnum": "0",
+ "als_lst_id_nbank_csinteday": "1",
+ "als_lst_cell_nbank_consnum": "1",
+ "als_m3_cell_nbank_week_orgnum": "0",
+ "als_m12_cell_nbank_avg_monnum": "1.00",
+ "als_m3_id_nbank_allnum": "3",
+ "als_m6_id_nbank_allnum": "4",
+ "als_m3_cell_nbank_avg_monnum": "1.00",
+ "als_m6_cell_nbank_min_monnum": "0",
+ "als_m3_cell_nbank_week_allnum": "0",
+ "als_d7_cell_nbank_night_orgnum": "0"
+ }
+ }
+ ],
+ "code": "OK",
+ "decision": "accept",
+ "propertyValidations": [],
+ "strategies": [],
+ "scenes": [
+ {
+ "decision": "accept",
+ "sceneCode": "GXCR****12001"
+ }
+ ],
+ "validateInfo": {
+ "productCodes": []
+ },
+ "id": "4d3cbafb-f795-4d***1477e259",
+ "message": "业务处理成功!",
+ "knowledge": {
+ "traceId": "583d66df****a858-23652756c1df",
+ "code": "EC_AFS_V2",
+ "identification": {},
+ "event": {
+ "certNo": "6cf4976571***eda8259be3371",
+ "code": "EC_AFS_V2",
+ "mobile": "9ed719a709****b0011cc8679"
+ }
+ }
+ }
+ }
+ }
+ },
+ {
+ "feature": {
+ "featureName": "个人消费能力等级",
+ "sort": 1
+ },
+ "data": {
+ "apiID": "JRZQ8B3C",
+ "data": {
+ "personincome_index_2.0": "200"
+ }
+ }
+ },
+ {
+ "feature": {
+ "featureName": "手机在网时长",
+ "sort": 1
+ },
+ "data": {
+ "apiID": "YYSY8B1C",
+ "data": {
+ "inTime": "24",
+ "operators": "移动"
+ }
+ }
+ },
+ {
+ "feature": {
+ "featureName": "携号转网查询",
+ "sort": 1
+ },
+ "data": {
+ "apiID": "YYSY7D3E",
+ "data": {
+ "batchNo": "YYTZ674990835598622720",
+ "queryResult": [
+ {
+ "mobile": "139123412345",
+ "result": "1",
+ "after": "1",
+ "before": "2"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "feature": {
+ "featureName": "全景雷达",
+ "sort": 1
+ },
+ "data": {
+ "apiID": "JRZQ7F1A",
+ "data": {
+ "current_report_detail": {
+ "C22180006": "0",
+ "C22180007": "5",
+ "C22180008": "9",
+ "C22180009": "12600",
+ "C22180002": "0",
+ "C22180003": "0",
+ "C22180004": "0",
+ "C22180005": "0",
+ "C22180010": "6120",
+ "C22180011": "10600",
+ "C22180012": "80",
+ "C22180001": "0"
+ },
+ "behavior_report_detail": {
+ "B22170019": "6",
+ "B22170050": "(7,15]",
+ "B22170053": "720",
+ "B22170010": "[30000,50000)",
+ "B22170054": "2023-04",
+ "B22170051": "82",
+ "B22170052": "24",
+ "B22170013": "7",
+ "B22170014": "2",
+ "B22170011": "[50000,+)",
+ "B22170012": "11",
+ "B22170017": "2",
+ "B22170018": "3",
+ "B22170015": "0",
+ "B22170016": "1",
+ "B22170020": "7",
+ "B22170021": "6",
+ "B22170024": "0",
+ "B22170025": "4",
+ "B22170022": "7",
+ "B22170023": "0",
+ "B22170028": "4",
+ "B22170029": "5",
+ "B22170026": "8",
+ "B22170027": "9",
+ "B22170031": "[3000,5000)",
+ "B22170032": "[5000,10000)",
+ "B22170030": "5",
+ "B22170035": "4",
+ "B22170036": "14",
+ "B22170033": "[5000,10000)",
+ "B22170034": "70%",
+ "B22170039": "102",
+ "B22170037": "21",
+ "B22170038": "35",
+ "B22170008": "[2000,3000)",
+ "B22170009": "[10000,20000)",
+ "B22170042": "[500,1000)",
+ "B22170043": "[10000,20000)",
+ "B22170040": "(0,500)",
+ "B22170041": "[500,1000)",
+ "B22170002": "1",
+ "B22170046": "6",
+ "B22170003": "3",
+ "B22170047": "8",
+ "B22170044": "[30000,50000)",
+ "B22170001": "547",
+ "B22170045": "4",
+ "B22170006": "32",
+ "B22170007": "(0,500)",
+ "B22170004": "7",
+ "B22170048": "35",
+ "B22170005": "20",
+ "B22170049": "168"
+ },
+ "apply_report_detail": {
+ "A22160009": "33",
+ "A22160008": "15",
+ "A22160007": "2023-05",
+ "A22160006": "90",
+ "A22160005": "13",
+ "A22160004": "11",
+ "A22160003": "38",
+ "A22160002": "76",
+ "A22160001": "503",
+ "A22160010": "48"
+ }
+ }
+ }
+ },
+ {
+ "feature": {
+ "featureName": "个人涉诉",
+ "sort": 1
+ },
+ "data": {
+ "apiID": "FLXG7E8F",
+ "data": {
+ "judicial_data": {
+ "consumptionRestrictionList": [
+ {
+ "caseNumber": "(2023)京0113执*****号",
+ "id": "0b733c6c503f740663422e44bc434a66",
+ "issueDate": "2023-11-20",
+ "executiveCourt": "京海市顺义区⼈⺠法院"
+ },
+ {
+ "caseNumber": "(2021)京0113执****号",
+ "id": "3fa335ec744dfb1d720f996e9d2b6e12",
+ "issueDate": "2021-08-10",
+ "executiveCourt": "京海市顺义区⼈⺠法院"
+ },
+ {
+ "caseNumber": "(2022)京0113执****号",
+ "id": "84fa0cf34f947eb0afd2f54ebe589e35",
+ "issueDate": "2022-07-24",
+ "executiveCourt": "京海市顺义区⼈⺠法院"
+ },
+ {
+ "caseNumber": "(2021)京0113执****号",
+ "id": "2e53a8808313ba87f15bf30ae76cd2d6",
+ "issueDate": "2021-11-19",
+ "executiveCourt": "京海市顺义区⼈⺠法院"
+ }
+ ],
+ "breachCaseList": [
+ {
+ "estimatedJudgementAmount": 109455,
+ "sex": "男性",
+ "fileDate": "2021-02-23",
+ "province": "北京",
+ "enforcementBasisNumber": "(2020)京0113⺠初9****",
+ "fulfillStatus": "全部未履⾏",
+ "enforcementBasisOrganization": "京海市顺义区⼈⺠法院",
+ "caseNumber": "(2021)京0113执****号",
+ "obligation": "被告靳帅偿还原告王丹霞借元,于本判决⽣效之⽇起七⽇内执⾏。",
+ "id": "f343e0d314e840d93684fa9a90f144cc",
+ "issueDate": "2021-02-23",
+ "executiveCourt": "京海市顺义区⼈⺠法院",
+ "concreteDetails": "有履⾏能⼒⽽拒不履⾏⽣效法律⽂书确定义务"
+ },
+ {
+ "estimatedJudgementAmount": 18110,
+ "sex": "男性",
+ "fileDate": "2022-07-12",
+ "province": "北京",
+ "enforcementBasisNumber": "(2022)京0113刑初****",
+ "fulfillStatus": "全部未履⾏",
+ "enforcementBasisOrganization": "京海市顺义区⼈⺠法院",
+ "caseNumber": "(2022)京0113执5190号",
+ "obligation": "⼀、被告⼈靳帅犯盗窃罪,判处有期徒刑⼀年三个⽉,并处罚⾦⼈⺠币五千元(刑期从判决执⾏之⽇起计算,判决执⾏以前先⾏羁押的,羁押⼀⽇折抵刑期⼀⽇,即⾃2022年3⽉6⽇起⾄2023年6⽉5⽇⽌。罚⾦于判决⽣效之⽇起五⽇内缴纳)。\\n⼆、责令被告⼈靳帅退赔被害⼈孙学⺠的经济损失⼈⺠币⼗元,退赔被害⼈张树起的经济损失⼈⺠币五百元,退赔被害⼈冯⽂⻰的经济损失⼈⺠币⼀万⼆千六百元。",
+ "id": "6cc2453f4e8cccf3ecd441ae08dd2183",
+ "issueDate": "2022-07-12",
+ "executiveCourt": "京海市顺义区⼈⺠法院",
+ "concreteDetails": "有履⾏能⼒⽽拒不履⾏⽣效法律⽂书确定义务"
+ }
+ ],
+ "lawsuitStat": {
+ "cases_tree": {
+ "civil": [
+ {
+ "stage_type": 1,
+ "case_type": 300,
+ "c_ah": "2013年⻄⺠初字第*****号",
+ "n_ajbs": "257ebb5c348de00883c872d636cf3128"
+ },
+ {
+ "stage_type": 1,
+ "case_type": 300,
+ "c_ah": "2013年⻄⺠初字第0***号",
+ "n_ajbs": "b6d8144d729f7811f4ea7838ef69baa7"
+ },
+ {
+ "next": {
+ "stage_type": 5,
+ "case_type": 1000,
+ "c_ah": "(2021)京0113执****号",
+ "n_ajbs": "54e45b851f5baedc7d249ab755e39fbe"
+ },
+ "stage_type": 1,
+ "case_type": 300,
+ "c_ah": "(2020)京0113⺠初****号",
+ "n_ajbs": "5a0867d91ce580d1239e1f2063912584"
+ }
+ ],
+ "criminal": [
+ {
+ "stage_type": 1,
+ "case_type": 200,
+ "c_ah": "2009年顺刑初字第*****号",
+ "n_ajbs": "e084cc09e364a6c2c02f82bd49a3bcfd"
+ },
+ {
+ "next": {
+ "stage_type": 5,
+ "case_type": 1000,
+ "c_ah": "(2021)京0113执****号",
+ "n_ajbs": "3e8392c51bbc1b7fb8e050284c89d220"
+ },
+ "stage_type": 1,
+ "case_type": 200,
+ "c_ah": "(2021)京0113刑初****号",
+ "n_ajbs": "08c9087760d19e4e46ea0a5e1ff8907f"
+ },
+ {
+ "next": {
+ "stage_type": 5,
+ "case_type": 1000,
+ "c_ah": "(2022)京0113执****号",
+ "n_ajbs": "c345a052409a2c0ebaecd6cee45b8050"
+ },
+ "stage_type": 1,
+ "case_type": 200,
+ "c_ah": "(2022)京0113刑初****号",
+ "n_ajbs": "1da42d08e89cf1907b0ab30239437060"
+ },
+ {
+ "next": {
+ "stage_type": 5,
+ "case_type": 1000,
+ "c_ah": "(2023)京0113执1****号",
+ "n_ajbs": "8dda746bb87c72f76d49a2cacee0efa0"
+ },
+ "stage_type": 1,
+ "case_type": 200,
+ "c_ah": "(2023)京0113刑****号",
+ "n_ajbs": "91b1aa92abba978b9bb583de92445045"
+ }
+ ]
+ },
+ "count": {
+ "money_jie_total": 11,
+ "count_total": 11,
+ "larq_stat": "2009(1),2013(2),2020(1),2021(3),2022(2),2023(2)",
+ "money_wei_percent": 0,
+ "area_stat": "京海市(11)",
+ "money_jie_beigao": 11,
+ "count_jie_total": 11,
+ "money_jie_other": 0,
+ "count_wei_total": 0,
+ "count_jie_beigao": 11,
+ "money_yuangao": 0,
+ "money_beigao": 11,
+ "ay_stat": "侵犯财产罪(4),刑事(3),合同、准合同纠纷(3),未知(1)",
+ "count_wei_other": 0,
+ "count_wei_beigao": 0,
+ "count_wei_yuangao": 0,
+ "money_other": 0,
+ "count_yuangao": 0,
+ "money_wei_yuangao": 0,
+ "money_jie_yuangao": 0,
+ "money_wei_beigao": 0,
+ "count_jie_yuangao": 0,
+ "count_other": 0,
+ "count_jie_other": 0,
+ "count_beigao": 11,
+ "money_wei_total": 0,
+ "money_wei_other": 0,
+ "money_total": 11,
+ "jafs_stat": "判决(5),终结本次执⾏程序(4),准予撤诉(2)"
+ },
+ "preservation": {},
+ "crc": 3714068012,
+ "administrative": {},
+ "civil": {
+ "cases": [
+ {
+ "n_laay_tree": "合同、准合同纠纷,合同纠纷,银⾏卡纠纷,信⽤卡纠纷",
+ "n_jaay": "合同、准合同纠纷",
+ "n_ssdw": "被告",
+ "n_jaay_tree": "合同、准合同纠纷,合同纠纷,银⾏卡纠纷,信⽤卡纠纷",
+ "n_pj_victory": "未知",
+ "n_ssdw_ys": "被告",
+ "n_jafs": "准予撤诉",
+ "n_jbfy_cj": "基层法院",
+ "n_qsbdje": "3304.16",
+ "c_id": "ea3566e092ef9bf659659b2c07855d3e",
+ "n_slcx": "⼀审",
+ "n_ajjzjd": "已结案",
+ "n_jbfy": "京海市⻄城区⼈⺠法院",
+ "d_jarq": "2013-06-18",
+ "n_jabdje_level": 1,
+ "c_slfsxx": "-1,,,;1,2013-06-19 09:00:00,1,1",
+ "c_ah": "2013年⻄⺠初字第******号",
+ "n_qsbdje_level": 1,
+ "c_ssdy": "京海市",
+ "n_jabdje": "3304.16",
+ "n_ajbs": "b6d8144d729f7811f4ea7838ef69baa7",
+ "n_crc": 451683830,
+ "n_ajlx": "⺠事⼀审",
+ "c_dsrxx": [
+ {
+ "n_ssdw": "原告",
+ "c_mc": "中国建设银⾏股份有限公司京海市分⾏",
+ "n_dsrlx": "企业组织"
+ },
+ {
+ "n_ssdw": "被告",
+ "c_mc": "靳帅",
+ "n_dsrlx": "⾃然⼈"
+ }
+ ],
+ "n_laay": "合同、准合同纠纷",
+ "d_larq": "2013-03-08"
+ },
+ {
+ "n_laay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,⺠间借贷纠纷",
+ "n_jaay": "合同、准合同纠纷",
+ "n_ssdw": "被告",
+ "n_jaay_tree": "合同、准合同纠纷,合同纠纷,借款合同纠纷,⺠间借贷纠纷",
+ "n_pj_victory": "未知",
+ "n_ssdw_ys": "被告",
+ "n_jafs": "判决",
+ "n_jbfy_cj": "基层法院",
+ "n_qsbdje": 110000,
+ "c_id": "df1fd042f1545a51c6460d0cb4005140",
+ "n_slcx": "⼀审",
+ "n_ajjzjd": "已结案",
+ "n_jbfy": "京海市顺义区⼈⺠法院",
+ "d_jarq": "2020-12-04",
+ "n_jabdje_level": 11,
+ "c_slfsxx": "1,2020-11-25 11:10:17,诉调第⼗⼀法庭,1",
+ "c_ah": "(2020)京0113⺠初*****号",
+ "n_qsbdje_level": 11,
+ "c_ssdy": "京海市",
+ "n_laay_tag": "合同纠纷",
+ "n_jabdje": 109455,
+ "n_jaay_tag": "合同纠纷",
+ "n_ajbs": "5a0867d91ce580d1239e1f2063912584",
+ "n_crc": 4035395111,
+ "n_ajlx": "⺠事⼀审",
+ "c_dsrxx": [
+ {
+ "n_ssdw": "原告",
+ "c_mc": "王丹霞",
+ "n_dsrlx": "⾃然⼈"
+ },
+ {
+ "n_ssdw": "被告",
+ "c_mc": "靳帅",
+ "n_dsrlx": "⾃然⼈"
+ }
+ ],
+ "n_laay": "合同、准合同纠纷",
+ "d_larq": "2020-07-29"
+ }
+ ],
+ "count": {
+ "money_jie_total": 11,
+ "count_total": 3,
+ "larq_stat": "2013(2),2020(1)",
+ "money_wei_percent": 0,
+ "area_stat": "京海市(3)",
+ "money_jie_beigao": 11,
+ "count_jie_total": 3,
+ "money_jie_other": 0,
+ "count_wei_total": 0,
+ "count_jie_beigao": 3,
+ "money_yuangao": 0,
+ "money_beigao": 11,
+ "ay_stat": "合同、准合同纠纷(3)",
+ "count_wei_other": 0,
+ "count_wei_beigao": 0,
+ "count_wei_yuangao": 0,
+ "money_other": 0,
+ "count_yuangao": 0,
+ "money_wei_yuangao": 0,
+ "money_jie_yuangao": 0,
+ "money_wei_beigao": 0,
+ "count_jie_yuangao": 0,
+ "count_other": 0,
+ "count_jie_other": 0,
+ "count_beigao": 3,
+ "money_wei_total": 0,
+ "money_wei_other": 0,
+ "money_total": 11,
+ "jafs_stat": "准予撤诉(2),判决(1)"
+ }
+ },
+ "implement": {
+ "cases": [
+ {
+ "d_jarq": "2021-08-19",
+ "n_jaay": "⺠事",
+ "n_ssdw": "被执⾏⼈",
+ "n_sjdwje": 0,
+ "c_gkws_glah": "(2020)京0113⺠初***号",
+ "c_ah": "(2021)京0113执2***",
+ "c_ssdy": "京海市",
+ "n_jafs": "终结本次执⾏程序",
+ "n_ajbs": "54e45b851f5baedc7d249ab755e39fbe",
+ "n_jbfy_cj": "基层法院",
+ "c_id": "4904d5bf89ca75a79bf7401727080c03",
+ "n_sqzxbdje": 111260,
+ "n_crc": 2505253178,
+ "n_ajlx": "⾸次执⾏",
+ "n_ajjzjd": "已结案",
+ "c_dsrxx": [
+ {
+ "n_ssdw": "申请执⾏⼈",
+ "c_mc": "王丹霞",
+ "n_dsrlx": "⾃然⼈"
+ },
+ {
+ "n_ssdw": "被执⾏⼈",
+ "c_mc": "靳帅",
+ "n_dsrlx": "⾃然⼈"
+ }
+ ],
+ "n_laay": "⺠事",
+ "n_jbfy": "京海市顺义区⼈⺠法院",
+ "d_larq": "2021-02-23"
+ },
+ {
+ "d_jarq": "2021-11-25",
+ "n_jaay": "刑事",
+ "n_ssdw": "被执⾏⼈",
+ "n_sjdwje": 0,
+ "c_ah": "(2021)京0113执***号",
+ "c_ssdy": "京海市",
+ "n_jabdje": 3876,
+ "n_jafs": "终结本次执⾏程序",
+ "n_ajbs": "3e8392c51bbc1b7fb8e050284c89d220",
+ "n_jbfy_cj": "基层法院",
+ "c_id": "435d6483338571526e6ebb0308dc6d04",
+ "n_sqzxbdje": 3876,
+ "n_crc": 1948524411,
+ "n_ajlx": "⾸次执⾏",
+ "n_ajjzjd": "已结案",
+ "c_dsrxx": [
+ {
+ "n_ssdw": "申请执⾏⼈",
+ "c_mc": "京海市顺义区⼈⺠法院",
+ "n_dsrlx": "企业组织"
+ },
+ {
+ "n_ssdw": "被执⾏⼈",
+ "c_mc": "靳帅",
+ "n_dsrlx": "⾃然⼈"
+ }
+ ],
+ "n_laay": "刑事",
+ "n_jbfy": "京海市顺义区⼈⺠法院",
+ "d_larq": "2021-10-26"
+ },
+ {
+ "d_jarq": "2022-08-04",
+ "n_jaay": "刑事",
+ "n_ssdw": "被执⾏⼈",
+ "n_sjdwje": 0,
+ "c_ah": "(2022)京0113执****号",
+ "c_ssdy": "京海市",
+ "n_jabdje": 18110,
+ "n_jafs": "终结本次执⾏程序",
+ "n_ajbs": "c345a052409a2c0ebaecd6cee45b8050",
+ "n_jbfy_cj": "基层法院",
+ "c_id": "4683b25207c45768ed9bcead28b51036",
+ "n_sqzxbdje": 18110,
+ "n_crc": 3747572709,
+ "n_ajlx": "⾸次执⾏",
+ "n_ajjzjd": "已结案",
+ "c_dsrxx": [
+ {
+ "n_ssdw": "申请执⾏⼈",
+ "c_mc": "京海市顺义区⼈⺠法院",
+ "n_dsrlx": "企业组织"
+ },
+ {
+ "n_ssdw": "被执⾏⼈",
+ "c_mc": "靳帅",
+ "n_dsrlx": "⾃然⼈"
+ }
+ ],
+ "n_laay": "刑事",
+ "n_jbfy": "京海市顺义区⼈⺠法院",
+ "d_larq": "2022-07-12"
+ },
+ {
+ "d_jarq": "2024-01-02",
+ "n_jaay": "刑事",
+ "n_ssdw": "被执⾏⼈",
+ "n_sjdwje": 0,
+ "c_gkws_glah": "(2023)京0113刑****号",
+ "c_ah": "(2023)京0113执*****号",
+ "c_ssdy": "京海市",
+ "n_jabdje": 4670,
+ "n_jafs": "终结本次执⾏程序",
+ "n_ajbs": "8dda746bb87c72f76d49a2cacee0efa0",
+ "n_jbfy_cj": "基层法院",
+ "c_id": "30285f31d30a24a2a41cc59fcb0928bc",
+ "n_sqzxbdje": 4670,
+ "n_crc": 2098789290,
+ "n_ajlx": "⾸次执⾏",
+ "n_ajjzjd": "已结案",
+ "c_dsrxx": [
+ {
+ "n_ssdw": "申请执⾏⼈",
+ "c_mc": "京海市顺义区⼈⺠法院",
+ "n_dsrlx": "企业组织"
+ },
+ {
+ "n_ssdw": "被执⾏⼈",
+ "c_mc": "靳帅",
+ "n_dsrlx": "⾃然⼈"
+ }
+ ],
+ "n_laay": "刑事",
+ "n_jbfy": "京海市顺义区⼈⺠法院",
+ "d_larq": "2023-11-20"
+ }
+ ],
+ "count": {
+ "money_jie_total": 3,
+ "count_total": 4,
+ "larq_stat": "2021(2),2022(1),2023(1)",
+ "money_wei_percent": 0,
+ "area_stat": "京海市(4)",
+ "money_jie_beigao": 3,
+ "count_jie_total": 4,
+ "money_jie_other": 0,
+ "count_wei_total": 0,
+ "count_jie_beigao": 4,
+ "money_yuangao": 0,
+ "money_beigao": 3,
+ "ay_stat": "刑事(3),未知(1)",
+ "count_wei_other": 0,
+ "count_wei_beigao": 0,
+ "count_wei_yuangao": 0,
+ "money_other": 0,
+ "count_yuangao": 0,
+ "money_wei_yuangao": 0,
+ "money_jie_yuangao": 0,
+ "money_wei_beigao": 0,
+ "count_jie_yuangao": 0,
+ "count_other": 0,
+ "count_jie_other": 0,
+ "count_beigao": 4,
+ "money_wei_total": 0,
+ "money_wei_other": 0,
+ "money_total": 3,
+ "jafs_stat": "终结本次执⾏程序(4)"
+ }
+ },
+ "criminal": {
+ "cases": [
+ {
+ "n_laay_tree": "侵犯财产罪,盗窃罪",
+ "n_jaay": "侵犯财产罪",
+ "n_ssdw": "被告⼈",
+ "n_pcjg": "给予刑事处罚",
+ "n_jaay_tree": "侵犯财产罪,盗窃罪",
+ "n_ccxzxje_level": 0,
+ "n_ssdw_ys": "被告⼈",
+ "n_jafs": "判决",
+ "n_jbfy_cj": "基层法院",
+ "c_id": "44bc6ccd90fada8e585e27f86700696c",
+ "n_slcx": "⼀审",
+ "n_ajjzjd": "已结案",
+ "n_jbfy": "京海市顺义区⼈⺠法院",
+ "d_jarq": "2021-09-23",
+ "c_slfsxx": "1,2021-09-23 09:48:23,第三⼗七法庭,1",
+ "n_dzzm": "侵犯财产罪",
+ "n_fzje_level": 0,
+ "n_bqqpcje_level": 0,
+ "n_pcpcje_level": 0,
+ "c_ah": "(2021)京0113刑初*****号",
+ "c_ssdy": "京海市",
+ "n_ajbs": "08c9087760d19e4e46ea0a5e1ff8907f",
+ "n_dzzm_tree": "侵犯财产罪,盗窃罪",
+ "n_crc": 3782814141,
+ "n_ajlx": "刑事⼀审",
+ "c_dsrxx": [
+ {
+ "n_ssdw": "被告⼈",
+ "c_mc": "靳帅",
+ "n_dsrlx": "⾃然⼈"
+ }
+ ],
+ "n_laay": "侵犯财产罪",
+ "d_larq": "2021-09-16"
+ },
+ {
+ "n_laay_tree": "侵犯财产罪,盗窃罪",
+ "n_jaay": "侵犯财产罪",
+ "n_ssdw": "被告⼈",
+ "n_pcjg": "给予刑事处罚",
+ "n_jaay_tree": "侵犯财产罪,盗窃罪",
+ "n_ccxzxje_level": 0,
+ "n_ssdw_ys": "被告⼈",
+ "n_jafs": "判决",
+ "n_jbfy_cj": "基层法院",
+ "c_id": "8851b2565cd27bc09a00a8ecd82b3224",
+ "n_slcx": "⼀审",
+ "n_ajjzjd": "已结案",
+ "n_jbfy": "京海市顺义区⼈⺠法院",
+ "d_jarq": "2022-06-17",
+ "c_slfsxx": "1,2022-06-08 09:38:41,第四⼗法庭,1",
+ "n_dzzm": "侵犯财产罪",
+ "n_fzje_level": 0,
+ "n_bqqpcje_level": 0,
+ "n_pcpcje_level": 0,
+ "c_ah": "(2022)京0113刑初****号",
+ "c_ssdy": "京海市",
+ "n_ajbs": "1da42d08e89cf1907b0ab30239437060",
+ "n_dzzm_tree": "侵犯财产罪,盗窃罪",
+ "n_crc": 168162812,
+ "n_ajlx": "刑事⼀审",
+ "c_dsrxx": [
+ {
+ "n_ssdw": "被告⼈",
+ "c_mc": "靳帅",
+ "n_dsrlx": "⾃然⼈"
+ }
+ ],
+ "n_laay": "侵犯财产罪",
+ "d_larq": "2022-06-02"
+ },
+ {
+ "n_laay_tree": "侵犯财产罪,盗窃罪",
+ "n_jaay": "侵犯财产罪",
+ "n_ssdw": "被告⼈",
+ "n_pcjg": "给予刑事处罚",
+ "n_jaay_tree": "侵犯财产罪,盗窃罪",
+ "n_ccxzxje_level": 0,
+ "n_ssdw_ys": "被告⼈",
+ "n_jafs": "判决",
+ "n_jbfy_cj": "基层法院",
+ "c_id": "82c3a2095c4ee2102fe156fc6cd5c77c",
+ "n_slcx": "⼀审",
+ "n_ajjzjd": "已结案",
+ "n_jbfy": "京海市顺义区⼈⺠法院",
+ "d_jarq": "2023-10-27",
+ "c_slfsxx": "1,2023-10-27 09:19:41,第三⼗七法庭,1",
+ "n_dzzm": "侵犯财产罪",
+ "n_fzje_level": 0,
+ "n_bqqpcje_level": 0,
+ "n_pcpcje_level": 0,
+ "c_ah": "(2023)京0113刑****号",
+ "c_ssdy": "京海市",
+ "n_ajbs": "91b1aa92abba978b9bb583de92445045",
+ "n_dzzm_tree": "侵犯财产罪,盗窃罪",
+ "n_crc": 659651411,
+ "n_ajlx": "刑事⼀审",
+ "c_dsrxx": [
+ {
+ "n_ssdw": "被告⼈",
+ "c_mc": "靳帅",
+ "n_dsrlx": "⾃然⼈"
+ }
+ ],
+ "n_laay": "侵犯财产罪",
+ "d_larq": "2023-10-11"
+ }
+ ],
+ "count": {
+ "money_jie_total": 0,
+ "count_total": 4,
+ "larq_stat": "2009(1),2021(1),2022(1),2023(1)",
+ "area_stat": "京海市(4)",
+ "money_jie_beigao": 0,
+ "count_jie_total": 4,
+ "money_jie_other": 0,
+ "count_wei_total": 0,
+ "count_jie_beigao": 4,
+ "money_yuangao": 0,
+ "money_beigao": 0,
+ "ay_stat": "侵犯财产罪(4)",
+ "count_wei_other": 0,
+ "count_wei_beigao": 0,
+ "count_wei_yuangao": 0,
+ "money_other": 0,
+ "count_yuangao": 0,
+ "money_wei_yuangao": 0,
+ "money_jie_yuangao": 0,
+ "money_wei_beigao": 0,
+ "count_jie_yuangao": 0,
+ "count_other": 0,
+ "count_jie_other": 0,
+ "count_beigao": 4,
+ "money_wei_total": 0,
+ "money_wei_other": 0,
+ "money_total": 0,
+ "jafs_stat": "判决(4)"
+ }
+ },
+ "bankrupt": {}
+ }
+ }
+ }
+ }
+ },
+ {
+ "feature": {
+ "featureName": "特殊名单",
+ "sort": 1
+ },
+ "data": {
+ "apiID": "JRZQ8A2D",
+ "data": {
+ "Rule_final_weight": "70",
+ "Rule_name_odr0000334": "两年前命中法院被执行人",
+ "Rule_weight_odr0000334": "70",
+ "id": {
+ "court_executed_time": "4",
+ "court_executed_allnum": "1",
+ "court_executed": "0"
+ },
+ "cell": {},
+ "Rule_final_decision": "Accept"
+ }
+ }
+ },
+ {
+ "feature": {
+ "featureName": "多头借贷行业风险版",
+ "sort": 1
+ },
+ "data": {
+ "apiID": "DWBG7F3A",
+ "data": {
+ "riskInfo_report_v3.1": [
+ {
+ "riskCode": 23006,
+ "riskCodeValue": 16
+ },
+ {
+ "riskCode": 21007,
+ "riskCodeValue": 40
+ },
+ {
+ "riskCode": "41005",
+ "riskCodeValue": "34"
+ },
+ {
+ "riskCode": "41004",
+ "riskCodeValue": "34"
+ },
+ {
+ "riskCode": "41003",
+ "riskCodeValue": "44"
+ },
+ {
+ "riskCode": "41002",
+ "riskCodeValue": "29"
+ },
+ {
+ "riskCode": "41001",
+ "riskCodeValue": "43"
+ },
+ {
+ "riskCode": "40189",
+ "riskCodeValue": "1580"
+ },
+ {
+ "riskCode": "40190",
+ "riskCodeValue": "69"
+ },
+ {
+ "riskCode": "40191",
+ "riskCodeValue": "1458"
+ },
+ {
+ "riskCode": "40192",
+ "riskCodeValue": "1435"
+ },
+ {
+ "riskCode": "40193",
+ "riskCodeValue": "1580"
+ },
+ {
+ "riskCode": "40194",
+ "riskCodeValue": "69"
+ },
+ {
+ "riskCode": "40175",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40176",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40177",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40178",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40179",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40180",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40181",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40182",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40183",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40184",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40185",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40186",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40187",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40188",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40161",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40162",
+ "riskCodeValue": "-1"
+ },
+ {
+ "riskCode": "40163",
+ "riskCodeValue": "-1"
+ },
+ {
+ "riskCode": "40164",
+ "riskCodeValue": "-1"
+ },
+ {
+ "riskCode": "40165",
+ "riskCodeValue": "-2"
+ },
+ {
+ "riskCode": "40166",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40167",
+ "riskCodeValue": "-1"
+ },
+ {
+ "riskCode": "40168",
+ "riskCodeValue": "-1"
+ },
+ {
+ "riskCode": "40169",
+ "riskCodeValue": "-1"
+ },
+ {
+ "riskCode": "40170",
+ "riskCodeValue": "-2"
+ },
+ {
+ "riskCode": "40171",
+ "riskCodeValue": "-1"
+ },
+ {
+ "riskCode": "40172",
+ "riskCodeValue": "-1"
+ },
+ {
+ "riskCode": "40173",
+ "riskCodeValue": "-1"
+ },
+ {
+ "riskCode": "40174",
+ "riskCodeValue": "-2"
+ },
+ {
+ "riskCode": "40145",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40146",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40147",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40148",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40149",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40150",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40151",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40152",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40153",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40154",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40155",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40156",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40157",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40158",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40159",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40160",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40129",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40130",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40131",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40132",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40133",
+ "riskCodeValue": "1"
+ },
+ {
+ "riskCode": "40134",
+ "riskCodeValue": "1"
+ },
+ {
+ "riskCode": "40135",
+ "riskCodeValue": "1"
+ },
+ {
+ "riskCode": "40136",
+ "riskCodeValue": "1"
+ },
+ {
+ "riskCode": "40137",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40138",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40139",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40140",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40141",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40142",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40143",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40144",
+ "riskCodeValue": "1"
+ },
+ {
+ "riskCode": "40113",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40114",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40115",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40116",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40117",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40118",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40119",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40120",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40121",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40122",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40123",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40124",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40125",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40126",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40127",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40128",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40097",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40098",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40099",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40100",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40101",
+ "riskCodeValue": "1"
+ },
+ {
+ "riskCode": "40102",
+ "riskCodeValue": "1"
+ },
+ {
+ "riskCode": "40103",
+ "riskCodeValue": "1"
+ },
+ {
+ "riskCode": "40104",
+ "riskCodeValue": "1"
+ },
+ {
+ "riskCode": "40105",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40106",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40107",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40108",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40109",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40110",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40111",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40112",
+ "riskCodeValue": "1"
+ },
+ {
+ "riskCode": "40049",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40050",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40051",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40052",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40053",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40054",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40055",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40056",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40057",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40058",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40059",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40060",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40061",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40062",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40063",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40064",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40065",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40066",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40067",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40068",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40069",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40070",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40071",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40072",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40073",
+ "riskCodeValue": "1"
+ },
+ {
+ "riskCode": "40074",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40075",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40076",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40077",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40078",
+ "riskCodeValue": "1"
+ },
+ {
+ "riskCode": "40079",
+ "riskCodeValue": "1"
+ },
+ {
+ "riskCode": "40080",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40081",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40082",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40083",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40084",
+ "riskCodeValue": "1"
+ },
+ {
+ "riskCode": "40085",
+ "riskCodeValue": "1"
+ },
+ {
+ "riskCode": "40086",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40087",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40088",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40089",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40090",
+ "riskCodeValue": "1"
+ },
+ {
+ "riskCode": "40091",
+ "riskCodeValue": "2"
+ },
+ {
+ "riskCode": "40092",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40093",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40094",
+ "riskCodeValue": "1"
+ },
+ {
+ "riskCode": "40095",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40096",
+ "riskCodeValue": "1"
+ },
+ {
+ "riskCode": "40001",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40002",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40003",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40004",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40005",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40006",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40007",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40008",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40009",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40010",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40011",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40012",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40013",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40014",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40015",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40016",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40017",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40018",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40019",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40020",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40021",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40022",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40023",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40024",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40025",
+ "riskCodeValue": "1"
+ },
+ {
+ "riskCode": "40026",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40027",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40028",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40029",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40030",
+ "riskCodeValue": "1"
+ },
+ {
+ "riskCode": "40031",
+ "riskCodeValue": "1"
+ },
+ {
+ "riskCode": "40032",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40033",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40034",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40035",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40036",
+ "riskCodeValue": "1"
+ },
+ {
+ "riskCode": "40037",
+ "riskCodeValue": "1"
+ },
+ {
+ "riskCode": "40038",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40039",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40040",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40041",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40042",
+ "riskCodeValue": "1"
+ },
+ {
+ "riskCode": "40043",
+ "riskCodeValue": "2"
+ },
+ {
+ "riskCode": "40044",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40045",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40046",
+ "riskCodeValue": "1"
+ },
+ {
+ "riskCode": "40047",
+ "riskCodeValue": "0"
+ },
+ {
+ "riskCode": "40048",
+ "riskCodeValue": "1"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "feature": {
+ "featureName": "司法涉诉",
+ "sort": 1
+ },
+ "data": {
+ "apiID": "FLXG0V4B",
+ "data": {
+ "entout": {
+ "data": {
+ "administrative": {},
+ "bankrupt": {},
+ "cases_tree": {
+ "criminal": [
+ {
+ "c_ah": "(2016)桂****刑初**号",
+ "case_type": 200,
+ "n_ajbs": "***",
+ "stage_type": 1
+ },
+ {
+ "c_ah": "(2016)桂**刑终***号",
+ "case_type": 200,
+ "n_ajbs": "***",
+ "stage_type": 2
+ },
+ {
+ "c_ah": "(2019)桂****刑初**号",
+ "case_type": 200,
+ "n_ajbs": "***",
+ "stage_type": 1
+ },
+ {
+ "c_ah": "(2019)桂**刑终***号",
+ "case_type": 200,
+ "n_ajbs": "***",
+ "stage_type": 2
+ }
+ ]
+ },
+ "civil": {},
+ "count": {
+ "area_stat": "广西壮族自治区(4)",
+ "ay_stat": "妨害社会管理秩序罪(4)",
+ "count_beigao": 2,
+ "count_jie_beigao": 2,
+ "count_jie_other": 0,
+ "count_jie_total": 4,
+ "count_jie_yuangao": 2,
+ "count_other": 0,
+ "count_total": 4,
+ "count_wei_beigao": 0,
+ "count_wei_other": 0,
+ "count_wei_total": 0,
+ "count_wei_yuangao": 0,
+ "count_yuangao": 2,
+ "jafs_stat": "判决(2),维持(1),改判(1)",
+ "larq_stat": "2016(2),2019(2)",
+ "money_beigao": 0,
+ "money_jie_beigao": 0,
+ "money_jie_other": 0,
+ "money_jie_total": 11,
+ "money_jie_yuangao": 11,
+ "money_other": 0,
+ "money_total": 11,
+ "money_wei_beigao": 0,
+ "money_wei_other": 0,
+ "money_wei_percent": 0,
+ "money_wei_total": 0,
+ "money_wei_yuangao": 0,
+ "money_yuangao": 11
+ },
+ "crc": 1635002023,
+ "criminal": {
+ "cases": [
+ {
+ "c_ah": "(2016)桂****刑初**号",
+ "c_dsrxx": [
+ {
+ "c_mc": "何某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "被告人"
+ },
+ {
+ "c_mc": "覃某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "被告人"
+ },
+ {
+ "c_mc": "刘某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "被告人"
+ },
+ {
+ "c_mc": "陈某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "被告人"
+ },
+ {
+ "c_mc": "覃某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "被告人"
+ },
+ {
+ "c_mc": "陈某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "被告人"
+ }
+ ],
+ "c_gkws_dsr": "公诉机关广西******人民检察院。被告人何某,男,1979年7月13日出生于广西壮族自治区******县,汉族,小学文化,农民,住广西壮族自治区******县。因涉嫌犯开设赌场罪于2015年9月13日被刑事拘留,同年10月20日被逮捕。被告人陈某,男,1987年7月17日出生于广西壮族自治区******县,汉族,小学文化,农民,住广西壮族自治区******县。因涉嫌犯开设赌场罪于2015年9月16日被刑事拘留,同年10月20日被逮捕。被告人覃某,女,1979年4月15日出生于广西壮族自治区******县,汉族,初中文化,农民,住广西壮族自治区******县。因涉嫌犯开设赌场罪于2015年11月4日被羁押,次日被刑事拘留,同月26日被逮捕。被告人覃某有,男,1972年9月21日出生于广西壮族自治区******县,汉族,小学文化,农民,住广西壮族自治区******县。因涉嫌犯开设赌场罪于2015年9月17日被刑事拘留,同年10月20日被逮捕。被告人刘某飞,男,1991年4月3日出生于广西壮族自治区******县,汉族,初中文化,农民,住广西壮族自治区******县。因涉嫌犯开设赌场罪于2015年10月28日被刑事拘留,同年11月12日被逮捕。被告人陈某观,男,1990年12月2日出生于广西壮族自治区******县,汉族,初中文化,农民,住广西壮族自治区******县。因涉嫌犯开设赌场罪于2015年10月28日被刑事拘留,同年11月12日被逮捕。",
+ "c_gkws_id": "29130d17-a43e-448e-84dc-64e9cd203a99",
+ "c_gkws_pjjg": "一、被告人何某犯开设赌场罪,判处有期徒刑一年六个月,并处罚金人民币二万元。(刑期从判决执行之日起计算,判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2015年9月13日起至2017年3月12日止。罚金在本判决生效后一个月内一次缴纳,期满不缴纳的,强制缴纳。)二、被告人陈某犯开设赌场罪,判处有期徒刑一年二个月,并处罚金人民币二万元。(刑期从判决执行之日起计算,判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2015年9月16日起至2016年11月15日止。罚金在本判决生效后一个月内一次缴纳,期满不缴纳的,强制缴纳。)三、被告人覃某犯开设赌场罪,判处有期徒刑一年二个月,并处罚金人民币二万元。(刑期从判决执行之日起计算,判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2015年11月4日起至2017年1月3日止。罚金在本判决生效后一个月内一次缴纳,期满不缴纳的,强制缴纳。)四、被告人覃某有犯开设赌场罪,判处有期徒刑八个月,并处罚金人民币二万元。(刑期从判决执行之日起计算,判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2015年9月17日起至2016年5月16日止。罚金已缴纳。)五、被告人刘某飞犯开设赌场罪,判处有期徒刑六个月,并处罚金人民币一万五千元。(刑期从判决执行之日起计算,判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2015年10月28日起至2016年4月27日止。罚金已缴纳。)六、被告人陈某犯开设赌场罪,判处有期徒刑六个月,并处罚金人民币一万五千元。(刑期从判决执行之日起计算,判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2015年10月28日起至2016年4月27日止。罚金已缴纳。)如不服本判决,可在收到判决书之次日起十日内,通过本院或直接向广西壮族自治区*******法院提出上诉。书面上诉的应提交上诉状正本一份,副本十三份。",
+ "c_id": "8917c0a3f0eab1ca1f294565be7f2dc5",
+ "c_slfsxx": "1,2016-01-25 09:00:00,第一审判庭,1",
+ "c_ssdy": "广西壮族自治区",
+ "d_jarq": "2016-04-01",
+ "d_larq": "2016-01-04",
+ "n_ajbs": "b9a3062adcb707f23c7fe627642fe23c",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "刑事一审",
+ "n_bqqpcje_level": 0,
+ "n_ccxzxje_level": 0,
+ "n_crc": 178414947,
+ "n_fzje_level": 0,
+ "n_jaay": "妨害社会管理秩序罪",
+ "n_jaay_tree": "妨害社会管理秩序罪,扰乱公共秩序罪,开设赌场罪",
+ "n_jafs": "判决",
+ "n_jbfy": "******县人民法院",
+ "n_jbfy_cj": "基层法院",
+ "n_laay": "妨害社会管理秩序罪",
+ "n_laay_tree": "妨害社会管理秩序罪,扰乱公共秩序罪,开设赌场罪",
+ "n_pcpcje_level": 0,
+ "n_slcx": "一审",
+ "n_ssdw": "被告人",
+ "n_ssdw_ys": "被告人"
+ },
+ {
+ "c_ah": "(2016)桂09刑终283号",
+ "c_dsrxx": [
+ {
+ "c_mc": "何某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "其他"
+ },
+ {
+ "c_mc": "胡某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "其他"
+ },
+ {
+ "c_mc": "张某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "其他"
+ },
+ {
+ "c_mc": "李某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "上诉人"
+ },
+ {
+ "c_mc": "刘某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "上诉人"
+ },
+ {
+ "c_mc": "陈某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "上诉人"
+ }
+ ],
+ "c_gkws_dsr": "原公诉机关广西壮族自治区******县人民检察院。上诉人(原审被告人)李某,农民。因涉嫌犯开设赌场罪于2015年9月13日被刑事拘留,同年10月20日被逮捕。现羁押于******县看守所。上诉人(原审被告人)陈某(曾用名陈东东),农民。因涉嫌犯开设赌场罪于2015年9月16日被刑事拘留,同年10月20日被逮捕。现羁押于******县看守所。上诉人(原审被告人)刘某,农民。因涉嫌犯开设赌场罪于2015年11月4日被羁押,次日被刑事拘留,同月26日被逮捕。现羁押于******县看守所。原审被告人胡某,农民。因涉嫌犯开设赌场罪于2015年9月17日被刑事拘留,同年10月20日被逮捕。现羁押于******县看守所。原审被告人何某,农民。因涉嫌犯开设赌场罪于2015年10月28日被刑事拘留,同年11月12日被逮捕。现羁押于******县看守所。原审被告人张某,农民。因涉嫌犯开设赌场罪于2015年10月28日被刑事拘留,同年11月12日被逮捕。现羁押于******县看守所。",
+ "c_gkws_glah": "(2016)桂0923刑初90号",
+ "c_gkws_id": "bc9c1a6b-a2c2-4065-af1b-a58267623a4a",
+ "c_gkws_pjjg": "一、维持广西壮族自治区******县人民法院(2016)桂0923刑初90号刑事判决的第四、第五、第六项,即:被告人胡某犯开设赌场罪,判处有期徒刑八个月,并处罚金人民币二万元。被告人何某犯开设赌场罪,判处有期徒刑六个月,并处罚金人民币一万五千元。被告人张某犯开设赌场罪,判处有期徒刑六个月,并处罚金人民币一万五千元。二、撤销广西壮族自治区******县人民法院(2016)桂0923刑初90号刑事判决的第一、第二、第三项,即:被告人李某犯开设赌场罪,判处有期徒刑一年六个月,并处罚金人民币二万元。被告人陈某犯开设赌场罪,判处有期徒刑一年二个月,并处罚金人民币二万元。被告人刘某犯开设赌场罪,判处有期徒刑一年二个月,并处罚金人民币二万元。三、上诉人(原审被告人)李某犯开设赌场罪,判处有期徒刑一年,并处罚金人民币二万元。(刑期从判决执行之日起计算。判决执行前先行羁押的,羁押一日折抵刑期一日,即自2015年9月13日起至2016年9月12日止。罚金已缴纳。)四、上诉人(原审被告人)陈某犯开设赌场罪,判处有期徒刑十个月,并处罚金人民币二万元。(刑期从判决执行之日起计算。判决执行前先行羁押的,羁押一日折抵刑期一日,即自2015年9月16日起至2016年7月15日止;已缴纳罚金一万元,罚金余款自判决生效之次日起一个月内缴纳,逾期不缴纳的,强制缴纳。)五、上诉人(原审被告人)刘某犯开设赌场罪,判处有期徒刑十个月,并处罚金人民币二万元。(刑期从判决执行之日起计算。判决执行前先行羁押的,羁押一日折抵刑期一日,即自2015年11月4日起至2016年9月3日止;已缴纳罚金一万元,罚金余款自判决生效之次日起一个月内缴纳,逾期不缴纳的,强制缴纳。)本判决为终审判决。",
+ "c_id": "84362df70b3678297431c3f97130e930",
+ "c_ssdy": "广西壮族自治区",
+ "d_jarq": "2016-07-14",
+ "d_larq": "2016-05-16",
+ "n_ajbs": "a64f674f1325f5e36ad429fca45ec99e",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "刑事二审",
+ "n_bqqpcje_level": 0,
+ "n_ccxzxje_gj": 170000,
+ "n_ccxzxje_gj_level": 11,
+ "n_ccxzxje_level": 0,
+ "n_crc": 3645650953,
+ "n_dzzm": "妨害社会管理秩序罪",
+ "n_dzzm_tree": "妨害社会管理秩序罪,扰乱公共秩序罪,开设赌场罪",
+ "n_fzje_level": 0,
+ "n_jaay": "妨害社会管理秩序罪",
+ "n_jaay_tree": "妨害社会管理秩序罪,扰乱公共秩序罪,开设赌场罪",
+ "n_jafs": "改判",
+ "n_jbfy": "广西壮族自治区*******法院",
+ "n_jbfy_cj": "中级人民法院",
+ "n_laay": "妨害社会管理秩序罪",
+ "n_laay_tree": "妨害社会管理秩序罪,扰乱公共秩序罪,开设赌场罪",
+ "n_pcjg": "给予刑事处罚",
+ "n_pcpcje_level": 0,
+ "n_slcx": "二审",
+ "n_ssdw": "上诉人"
+ },
+ {
+ "c_ah": "(2019)桂0923刑初81号",
+ "c_dsrxx": [
+ {
+ "c_mc": "李某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "被告人"
+ },
+ {
+ "c_mc": "张某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "被告人"
+ }
+ ],
+ "c_gkws_dsr": "公诉机关广西壮族自治区******县人民检察院。被告人李某。被告人张某。",
+ "c_gkws_id": "1ee2c6cd-15b5-44a7-8f68-aae10033e5bc",
+ "c_gkws_pjjg": "一、被告人李某犯开设赌场罪,判处有期徒刑二年,并处罚金人民币二万元。(刑期从判决执行之日起计算,判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2018年10月16日起至2020年10月15日止。罚金在本判决生效后一个月内一次缴纳,期满不缴纳的,强制缴纳。)%1、被告人张某犯开设赌场罪,判处有期徒刑一年六个月,并处罚金人民币一万五千元。(刑期从判决执行之日起计算,判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2018年10月30日起至2020年4月29日止。罚金在本判决生效后一个月内一次缴纳,期满不缴纳的,强制缴纳。)三、扣押在案的赌具扑克牌、龙虎珠、骨牌及人民币八百三十五元依法予以没收,其中人民币八百三十五元上缴国库。如不服本判决,可在收到判决书之次日起十日内,通过本院或直接向广西壮族自治区*******法院提出上诉。书面上诉的应当提交上诉状正本一份,副本九份。",
+ "c_id": "5f4d0aa69d456e5a4c1b025aec5d310d",
+ "c_slfsxx": "1,2019-03-01 09:20:00,KA6第一审判庭,1",
+ "c_ssdy": "广西壮族自治区",
+ "d_jarq": "2019-03-07",
+ "d_larq": "2019-02-20",
+ "n_ajbs": "e90f9b13a9b0f102611e6b5a2ccf6a96",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "刑事一审",
+ "n_bqqpcje_level": 0,
+ "n_ccxzxje_level": 0,
+ "n_crc": 3676144743,
+ "n_dzzm": "妨害社会管理秩序罪",
+ "n_dzzm_tree": "妨害社会管理秩序罪,扰乱公共秩序罪,开设赌场罪",
+ "n_fzje_level": 0,
+ "n_jaay": "妨害社会管理秩序罪",
+ "n_jaay_tree": "妨害社会管理秩序罪,扰乱公共秩序罪,开设赌场罪",
+ "n_jafs": "判决",
+ "n_jbfy": "******县人民法院",
+ "n_jbfy_cj": "基层法院",
+ "n_laay": "妨害社会管理秩序罪",
+ "n_laay_tree": "妨害社会管理秩序罪,扰乱公共秩序罪,开设赌场罪",
+ "n_pcjg": "给予刑事处罚",
+ "n_pcpcje_level": 0,
+ "n_slcx": "一审",
+ "n_ssdw": "被告人",
+ "n_ssdw_ys": "被告人"
+ }
+ ],
+ "count": {
+ "area_stat": "广西壮族自治区(4)",
+ "ay_stat": "妨害社会管理秩序罪(4)",
+ "count_beigao": 2,
+ "count_jie_beigao": 2,
+ "count_jie_other": 0,
+ "count_jie_total": 4,
+ "count_jie_yuangao": 2,
+ "count_other": 0,
+ "count_total": 4,
+ "count_wei_beigao": 0,
+ "count_wei_other": 0,
+ "count_wei_total": 0,
+ "count_wei_yuangao": 0,
+ "count_yuangao": 2,
+ "jafs_stat": "判决(2),维持(1),改判(1)",
+ "larq_stat": "2016(2),2019(2)",
+ "money_beigao": 0,
+ "money_jie_beigao": 0,
+ "money_jie_other": 0,
+ "money_jie_total": 11,
+ "money_jie_yuangao": 11,
+ "money_other": 0,
+ "money_total": 11,
+ "money_wei_beigao": 0,
+ "money_wei_other": 0,
+ "money_wei_percent": 0,
+ "money_wei_total": 0,
+ "money_wei_yuangao": 0,
+ "money_yuangao": 11
+ }
+ },
+ "implement": {},
+ "preservation": {}
+ },
+ "msg": "查询成功"
+ },
+ "sxbzxr": {
+ "data": [
+ {
+ "ah": "(2016)*******8160号",
+ "fbrq": "2016-11-09",
+ "id": "aa98cae8cbf0e1a87cab4c713c59faa1",
+ "larq": "2016-08-08",
+ "lxqk": "全部未履行",
+ "pjje_gj": 0,
+ "sf": "北京",
+ "xb": "男",
+ "xwqx": "其他有履行能力而拒不履行生效法律文书确定义务",
+ "yw": "判决如下: 一、被告张某于本判决生效后十日内偿还原告兵器装备集团财务有限责任公司贷款本金二万一千零三十一元四角七分及逾期利息(截止至二O一四年十二月二十三日,逾期利息为四千八百五十四元三角五分,自二O一四年十二月二十四日起至贷款全部清偿之日止的逾期利息按《汽车消费贷款合同》及其附件约定计算); 二、原告兵器装备集团财务有限责任公司对被告张某所有的重庆长安汽车股份有限公司生产的长安牌小型轿车一辆(车架号LS5A*******02800、发动机号CC4*****967)折价或拍卖、变卖后所得的价款享有优先受偿权; 三、驳回原告兵器装备集团财务有限责任公司其他诉讼请求。 如果被告张某未按本判决指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百五十三条之规定,加倍支付迟延履行期间的债务利息。 案件受理费三百七十四元(原告兵器装备集团财务有限责任公司已预交),由原告兵器装备集团财务有限责任公司负担一百一十八元,已交纳;由被告张某负担二百五十六元,于本判决书生效后七日内交纳。 如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,按照不服一审判决部分的上诉请求数额交纳上诉案件受理费,上诉于北京市第一中级人民法院。如在上诉期满后七日内未交纳上诉费的,按自动撤回上诉处理。",
+ "zxfy": "北京市*****人民法院",
+ "zxyjdw": "北京市****人民法院",
+ "zxyjwh": "2015年*****12658号"
+ },
+ {
+ "ah": "(2016)**0211执****号",
+ "fbrq": "2016-09-14",
+ "id": "***",
+ "larq": "2016-09-05",
+ "lxqk": "全部未履行",
+ "pjje_gj": 0,
+ "sf": "**省",
+ "xb": "*",
+ "xwqx": "其他有履行能力而拒不履行生效法律文书确定义务",
+ "yw": "被执行人支付欠款***元...",
+ "zxfy": "**市**区人民法院",
+ "zxyjdw": "**市**区人民法院",
+ "zxyjwh": "(2016)**0211民初****号"
+ }
+ ],
+ "msg": "查询成功"
+ },
+ "xgbzxr": {
+ "data": [
+ {
+ "ah": "(20*****77号",
+ "fbrq": "2018-08-31",
+ "id": "d439c2c8e6330de7c00bbae668cb9b2b",
+ "zxfy": "*****人民法院"
+ },
+ {
+ "ah": "(2016)*****574号",
+ "fbrq": "2018-08-31",
+ "id": "763f693a894c680d4da65fae0e488fac",
+ "zxfy": "*******法院"
+ }
+ ],
+ "msg": "查询成功"
+ }
+ },
+ "success": true,
+ "timestamp": "2024-12-13 20:29:20"
+ }
+ },
+ {
+ "feature": {
+ "featureName": "互联网行为推测",
+ "sort": 1
+ },
+ "data": {
+ "apiID": "IVYZ8I9J",
+ "data": {
+ "sjbq_zlbz": "0",
+ "sjbq_ychy": "0",
+ "sjbq_xjzl": "1",
+ "sjbq_ymd": "0",
+ "sjbq_sfcy": "0",
+ "sjbq_ycxw": "1",
+ "sjbq_sxxw": "0",
+ "sjbq_zfyc": "1",
+ "sjbq_qtyc": "1",
+ "sjbq_swhjyc": "0"
+ }
+ }
+ },
+ {
+ "feature": {
+ "featureName": "名下车辆",
+ "sort": 2
+ },
+ "data": {
+ "apiID": "QCXG9P1C",
+ "data": {
+ "list": [
+ {
+ "plateColor": 0,
+ "plateNum": "粤A9***1",
+ "vehicleType": 1
+ },
+ {
+ "plateColor": 1,
+ "plateNum": "粤A9***2",
+ "vehicleType": 1
+ }
+ ],
+ "vehicleCount": 2
+ },
+ "success": true,
+ "timestamp": "2025-01-20 21:19:58"
+ }
+ },
+ {
+ "feature": {
+ "featureName": "谛听多维报告",
+ "sort": 3
+ },
+ "data": {
+ "apiID": "DWBG8B4D",
+ "data": {
+ "baseInfo": {
+ "age": 34,
+ "channel": "中国移动",
+ "idCard": "3203**199102***152",
+ "location": "江苏省徐州市沛县",
+ "name": "封*伟",
+ "phone": "158****2970",
+ "phoneArea": "江苏-徐州",
+ "sex": "男",
+ "status": 4
+ },
+ "checkSuggest": "建议拒绝",
+ "creditScore": 300,
+ "elementVerificationDetail": {
+ "antiFraudInfo": {},
+ "belongRiskFlag": 0,
+ "belongRisks": {
+ "num": "1",
+ "personCity": "徐州市",
+ "personProvence": "江苏省",
+ "phoneCardType": "移动",
+ "phoneCity": "徐州",
+ "phoneProvence": "江苏"
+ },
+ "highRiskFlag": 2,
+ "keyPersonCheckList": {
+ "fangAiFlag": 0,
+ "fontFlag": 0,
+ "jingJiFontFlag": 0,
+ "num": "1",
+ "sheJiaoTongFlag": 0,
+ "zhongDianFlag": 0
+ },
+ "onlineRiskFlag": 0,
+ "onlineRiskList": {
+ "lineType": "移动",
+ "num": "1",
+ "onLineTimes": "3,6(个月)"
+ },
+ "personCheckDetails": {
+ "ele": "身份证号、姓名",
+ "num": "1",
+ "result": "一致"
+ },
+ "phoneCheckDetails": {
+ "ele": "身份证号、手机号、姓名",
+ "num": "1",
+ "phoneCompany": "中国移动",
+ "result": "不一致"
+ },
+ "phoneVailRiskFlag": 1,
+ "phoneVailRisks": {
+ "num": "1",
+ "phoneCompany": "移动",
+ "phoneStatus": "沉默号",
+ "phoneTimes": "3(单位:月)"
+ },
+ "sfzeysFlag": 2,
+ "sjsysFlag": 1
+ },
+ "fraudRule": "高风险",
+ "fraudScore": 100,
+ "leasingRiskAssessment": {
+ "riskFlag": 2,
+ "threeCInstitutionApplicationCountLast12Months": "3/2",
+ "threeCInstitutionApplicationCountLast12MonthsNight": "0/0",
+ "threeCInstitutionApplicationCountLast12MonthsWeekend": "0/0",
+ "threeCInstitutionApplicationCountLast14Days": "0/0",
+ "threeCInstitutionApplicationCountLast14DaysNight": "0/0",
+ "threeCInstitutionApplicationCountLast14DaysWeekend": "0/0",
+ "threeCInstitutionApplicationCountLast3Days": "0/0",
+ "threeCInstitutionApplicationCountLast3DaysNight": "0/0",
+ "threeCInstitutionApplicationCountLast3DaysWeekend": "0/0",
+ "threeCInstitutionApplicationCountLast3Months": "2/1",
+ "threeCInstitutionApplicationCountLast3MonthsNight": "0/0",
+ "threeCInstitutionApplicationCountLast3MonthsWeekend": "0/0",
+ "threeCInstitutionApplicationCountLast6Months": "2/1",
+ "threeCInstitutionApplicationCountLast6MonthsNight": "0/0",
+ "threeCInstitutionApplicationCountLast6MonthsWeekend": "0/0",
+ "threeCInstitutionApplicationCountLast7Days": "0/0",
+ "threeCInstitutionApplicationCountLast7DaysNight": "0/0",
+ "threeCInstitutionApplicationCountLast7DaysWeekend": "0/0",
+ "threeCInstitutionApplicationCountLastMonth": "0/0",
+ "threeCInstitutionApplicationCountLastMonthNight": "0/0",
+ "threeCInstitutionApplicationCountLastMonthWeekend": "0/0",
+ "threeCPlatformApplicationCountLast12Months": "3/2",
+ "threeCPlatformApplicationCountLast12MonthsNight": "0/0",
+ "threeCPlatformApplicationCountLast12MonthsWeekend": "0/0",
+ "threeCPlatformApplicationCountLast14Days": "0/0",
+ "threeCPlatformApplicationCountLast14DaysNight": "0/0",
+ "threeCPlatformApplicationCountLast14DaysWeekend": "0/0",
+ "threeCPlatformApplicationCountLast3Days": "0/0",
+ "threeCPlatformApplicationCountLast3DaysNight": "0/0",
+ "threeCPlatformApplicationCountLast3DaysWeekend": "0/0",
+ "threeCPlatformApplicationCountLast3Months": "2/1",
+ "threeCPlatformApplicationCountLast3MonthsNight": "0/0",
+ "threeCPlatformApplicationCountLast3MonthsWeekend": "0/0",
+ "threeCPlatformApplicationCountLast6Months": "2/1",
+ "threeCPlatformApplicationCountLast6MonthsNight": "0/0",
+ "threeCPlatformApplicationCountLast6MonthsWeekend": "0/0",
+ "threeCPlatformApplicationCountLast7Days": "0/0",
+ "threeCPlatformApplicationCountLast7DaysNight": "0/0",
+ "threeCPlatformApplicationCountLast7DaysWeekend": "0/0",
+ "threeCPlatformApplicationCountLastMonth": "0/0",
+ "threeCPlatformApplicationCountLastMonthNight": "0/0",
+ "threeCPlatformApplicationCountLastMonthWeekend": "0/0"
+ },
+ "loanEvaluationVerificationDetail": {
+ "businessLoanPerformances": [
+ {
+ "last12Month": "0/0",
+ "last12MonthCount": "0/0",
+ "last15Day": "0/0",
+ "last15DayCount": "0/0",
+ "last1Month": "0/0",
+ "last1MonthCount": "0/0",
+ "last3Month": "0/0",
+ "last3MonthCount": "0/0",
+ "last6Month": "0/0",
+ "last6MonthCount": "0/0",
+ "last7Day": "0/0",
+ "last7DayCount": "0/0",
+ "type": "信用卡(类信用卡)"
+ },
+ {
+ "last12Month": "0/0",
+ "last12MonthCount": "0/0",
+ "last15Day": "0/0",
+ "last15DayCount": "0/0",
+ "last1Month": "0/0",
+ "last1MonthCount": "0/0",
+ "last3Month": "0/0",
+ "last3MonthCount": "0/0",
+ "last6Month": "0/0",
+ "last6MonthCount": "0/0",
+ "last7Day": "0/0",
+ "last7DayCount": "0/0",
+ "type": "线上小额现金贷"
+ },
+ {
+ "last12Month": "0/0",
+ "last12MonthCount": "0/0",
+ "last15Day": "0/0",
+ "last15DayCount": "0/0",
+ "last1Month": "0/0",
+ "last1MonthCount": "0/0",
+ "last3Month": "0/0",
+ "last3MonthCount": "0/0",
+ "last6Month": "0/0",
+ "last6MonthCount": "0/0",
+ "last7Day": "0/0",
+ "last7DayCount": "0/0",
+ "type": "汽车金融"
+ },
+ {
+ "last12Month": "0/0",
+ "last12MonthCount": "0/0",
+ "last15Day": "0/0",
+ "last15DayCount": "0/0",
+ "last1Month": "0/0",
+ "last1MonthCount": "0/0",
+ "last3Month": "0/0",
+ "last3MonthCount": "0/0",
+ "last6Month": "0/0",
+ "last6MonthCount": "0/0",
+ "last7Day": "0/0",
+ "last7DayCount": "0/0",
+ "type": "线上消费分期"
+ },
+ {
+ "last12Month": "0/0",
+ "last12MonthCount": "0/0",
+ "last15Day": "0/0",
+ "last15DayCount": "0/0",
+ "last1Month": "0/0",
+ "last1MonthCount": "0/0",
+ "last3Month": "0/0",
+ "last3MonthCount": "0/0",
+ "last6Month": "0/0",
+ "last6MonthCount": "0/0",
+ "last7Day": "0/0",
+ "last7DayCount": "0/0",
+ "type": "线下消费分期"
+ },
+ {
+ "last12Month": "0/0",
+ "last12MonthCount": "0/0",
+ "last15Day": "0/0",
+ "last15DayCount": "0/0",
+ "last1Month": "0/0",
+ "last1MonthCount": "0/0",
+ "last3Month": "0/0",
+ "last3MonthCount": "0/0",
+ "last6Month": "0/0",
+ "last6MonthCount": "0/0",
+ "last7Day": "0/0",
+ "last7DayCount": "0/0",
+ "type": "其他"
+ }
+ ],
+ "customerLoanPerformances": [
+ {
+ "last12Month": "2/0",
+ "last12MonthCount": "2/0",
+ "last15Day": "0/0",
+ "last15DayCount": "0/0",
+ "last1Month": "0/0",
+ "last1MonthCount": "0/0",
+ "last3Month": "0/0",
+ "last3MonthCount": "0/0",
+ "last6Month": "2/0",
+ "last6MonthCount": "2/0",
+ "last7Day": "0/0",
+ "last7DayCount": "0/0",
+ "type": "银行汇总"
+ },
+ {
+ "last12Month": "0/0",
+ "last12MonthCount": "0/0",
+ "last15Day": "0/0",
+ "last15DayCount": "0/0",
+ "last1Month": "0/0",
+ "last1MonthCount": "0/0",
+ "last3Month": "0/0",
+ "last3MonthCount": "0/0",
+ "last6Month": "0/0",
+ "last6MonthCount": "0/0",
+ "last7Day": "0/0",
+ "last7DayCount": "0/0",
+ "type": "传统银行"
+ },
+ {
+ "last12Month": "2/0",
+ "last12MonthCount": "2/0",
+ "last15Day": "0/0",
+ "last15DayCount": "0/0",
+ "last1Month": "0/0",
+ "last1MonthCount": "0/0",
+ "last3Month": "0/0",
+ "last3MonthCount": "0/0",
+ "last6Month": "2/0",
+ "last6MonthCount": "2/0",
+ "last7Day": "0/0",
+ "last7DayCount": "0/0",
+ "type": "网络零售银行"
+ },
+ {
+ "last12Month": "2/2",
+ "last12MonthCount": "2/2",
+ "last15Day": "0/0",
+ "last15DayCount": "0/0",
+ "last1Month": "0/0",
+ "last1MonthCount": "0/0",
+ "last3Month": "0/0",
+ "last3MonthCount": "0/0",
+ "last6Month": "2/2",
+ "last6MonthCount": "2/2",
+ "last7Day": "0/0",
+ "last7DayCount": "0/0",
+ "type": "非银汇总"
+ },
+ {
+ "last12Month": "0/0",
+ "last12MonthCount": "0/0",
+ "last15Day": "0/0",
+ "last15DayCount": "0/0",
+ "last1Month": "0/0",
+ "last1MonthCount": "0/0",
+ "last3Month": "0/0",
+ "last3MonthCount": "0/0",
+ "last6Month": "0/0",
+ "last6MonthCount": "0/0",
+ "last7Day": "0/0",
+ "last7DayCount": "0/0",
+ "type": "持牌网络小贷"
+ },
+ {
+ "last12Month": "2/2",
+ "last12MonthCount": "2/2",
+ "last15Day": "0/0",
+ "last15DayCount": "0/0",
+ "last1Month": "0/0",
+ "last1MonthCount": "0/0",
+ "last3Month": "0/0",
+ "last3MonthCount": "0/0",
+ "last6Month": "2/2",
+ "last6MonthCount": "2/2",
+ "last7Day": "0/0",
+ "last7DayCount": "0/0",
+ "type": "持牌消费金融"
+ },
+ {
+ "last12Month": "0/0",
+ "last12MonthCount": "0/0",
+ "last15Day": "0/0",
+ "last15DayCount": "0/0",
+ "last1Month": "0/0",
+ "last1MonthCount": "0/0",
+ "last3Month": "0/0",
+ "last3MonthCount": "0/0",
+ "last6Month": "0/0",
+ "last6MonthCount": "0/0",
+ "last7Day": "0/0",
+ "last7DayCount": "0/0",
+ "type": "持牌融资租赁机构"
+ },
+ {
+ "last12Month": "0/0",
+ "last12MonthCount": "0/0",
+ "last15Day": "0/0",
+ "last15DayCount": "0/0",
+ "last1Month": "0/0",
+ "last1MonthCount": "0/0",
+ "last3Month": "0/0",
+ "last3MonthCount": "0/0",
+ "last6Month": "0/0",
+ "last6MonthCount": "0/0",
+ "last7Day": "0/0",
+ "last7DayCount": "0/0",
+ "type": "持牌汽车金融"
+ }
+ ],
+ "organLoanPerformances": [
+ {
+ "applyCount": "银行",
+ "last12Month": "2/0",
+ "last15Day": "0/0",
+ "last1Month": "0/0",
+ "last3Month": "0/0",
+ "last6Month": "2/0",
+ "last7Day": "0/0"
+ },
+ {
+ "applyCount": "非银",
+ "last12Month": "2/2",
+ "last15Day": "0/0",
+ "last1Month": "0/0",
+ "last3Month": "0/0",
+ "last6Month": "2/2",
+ "last7Day": "0/0"
+ }
+ ],
+ "riskFlag": 1,
+ "timeLoanPerformances": [
+ {
+ "last12Month": "0/0",
+ "last12MonthCount": "0/0",
+ "last15Day": "0/0",
+ "last15DayCount": "0/0",
+ "last1Month": "0/0",
+ "last1MonthCount": "0/0",
+ "last3Month": "0/0",
+ "last3MonthCount": "0/0",
+ "last6Month": "0/0",
+ "last6MonthCount": "0/0",
+ "last7Day": "0/0",
+ "last7DayCount": "0/0",
+ "type": "夜间-银行"
+ },
+ {
+ "last12Month": "1/1",
+ "last12MonthCount": "1/1",
+ "last15Day": "0/0",
+ "last15DayCount": "0/0",
+ "last1Month": "0/0",
+ "last1MonthCount": "0/0",
+ "last3Month": "0/0",
+ "last3MonthCount": "0/0",
+ "last6Month": "1/1",
+ "last6MonthCount": "1/1",
+ "last7Day": "0/0",
+ "last7DayCount": "0/0",
+ "type": "夜间-非银"
+ },
+ {
+ "last12Month": "0/0",
+ "last12MonthCount": "0/0",
+ "last15Day": "0/0",
+ "last15DayCount": "0/0",
+ "last1Month": "0/0",
+ "last1MonthCount": "0/0",
+ "last3Month": "0/0",
+ "last3MonthCount": "0/0",
+ "last6Month": "0/0",
+ "last6MonthCount": "0/0",
+ "last7Day": "0/0",
+ "last7DayCount": "0/0",
+ "type": "周末-银行"
+ },
+ {
+ "last12Month": "0/0",
+ "last12MonthCount": "0/0",
+ "last15Day": "0/0",
+ "last15DayCount": "0/0",
+ "last1Month": "0/0",
+ "last1MonthCount": "0/0",
+ "last3Month": "0/0",
+ "last3MonthCount": "0/0",
+ "last6Month": "0/0",
+ "last6MonthCount": "0/0",
+ "last7Day": "0/0",
+ "last7DayCount": "0/0",
+ "type": "周末-非银"
+ }
+ ]
+ },
+ "multCourtInfo": {
+ "disinCases": [],
+ "disinCasesFlag": 0,
+ "executionCases": [
+ {
+ "caseNumber": "(2023)赣1102执保608号",
+ "caseReason": "未知",
+ "caseStatus": "已结案",
+ "caseType": "财产保全执行",
+ "court": "上饶市信州区人民法院",
+ "disposalMethod": "部分保全",
+ "disposalTime": "2023-05-17",
+ "executionAmount": "",
+ "filingTime": "2023-05-12",
+ "judgmentResult": "",
+ "litigantType": "被申请人",
+ "repaidAmount": ""
+ }
+ ],
+ "executionCasesFlag": 1,
+ "legalCases": [],
+ "legalCasesFlag": 1,
+ "limitCases": [],
+ "limitCasesFlag": 0
+ },
+ "overdueRiskProduct": {
+ "currentOverdueAmount": "1",
+ "currentOverdueInstitutionCount": "(0,1000)",
+ "daysSinceLastSuccessfulRepayment": "160+",
+ "dkzhktjFlag": 2,
+ "hasUnsettledOverdue": "逾期",
+ "lyjlhyFlag": 1,
+ "overdueLast14Days": "逾期",
+ "overdueLast1Day": "未逾期",
+ "overdueLast30Days": "逾期",
+ "overdueLast7Days": "未逾期",
+ "repaymentFailureAmountLast14Days": "(0,1000)",
+ "repaymentFailureAmountLast3Months": "(0,10000)",
+ "repaymentFailureAmountLast6Months": "[2000,30000)",
+ "repaymentFailureAmountLast7Days": "0",
+ "repaymentFailureAmountLastMonth": "(0,6000)",
+ "repaymentFailureCountLast14Days": "[5,15)",
+ "repaymentFailureCountLast3Months": "[56,+)",
+ "repaymentFailureCountLast6Months": "[70,+)",
+ "repaymentFailureCountLast7Days": "0",
+ "repaymentFailureCountLastMonth": "[5,34)",
+ "repaymentSuccessAmountLast14Days": "-",
+ "repaymentSuccessAmountLast3Months": "-",
+ "repaymentSuccessAmountLast6Months": "-",
+ "repaymentSuccessAmountLast7Days": "-",
+ "repaymentSuccessAmountLastMonth": "-",
+ "repaymentSuccessCountLast14Days": "-",
+ "repaymentSuccessCountLast3Months": "-",
+ "repaymentSuccessCountLast6Months": "-",
+ "repaymentSuccessCountLast7Days": "-",
+ "repaymentSuccessCountLastMonth": "-",
+ "settledInstitutionCount": "[17,+)",
+ "specialListVerification": [],
+ "totalLoanInstitutions": "[14,+)",
+ "totalLoanRepaymentAmount": "[68000,+)",
+ "tsmdyzFlag": 0
+ },
+ "reportUrl": "http://www.zhichajinkong.cn/manager/index.html#/v-report?tranId=******",
+ "riskSupervision": {
+ "details": "无",
+ "leastApplicationTime": "2025-06-02",
+ "rentalRiskListIdCardRelationsPhones": 0,
+ "rentalRiskListPhoneRelationsIdCards": 0
+ },
+ "riskWarning": {
+ "frequentApplicationRecent": 0,
+ "frequentBankApplications": 0,
+ "frequentNonBankApplications": 0,
+ "frequentRentalApplications": 0,
+ "gazdyrhyRiskCounts": 1,
+ "gazdyrhyRiskHighCounts": 1,
+ "gazdyrhyRiskMiddleCounts": 0,
+ "hasCriminalRecord": 0,
+ "highDebtPressure": 0,
+ "highFraudGangLevel": 1,
+ "hitAdministrativeCase": 0,
+ "hitBankruptcyAndLiquidation": 0,
+ "hitCivilCase": 0,
+ "hitCompensationCase": 0,
+ "hitCriminalRisk": 1,
+ "hitCurrentOverdue": 0,
+ "hitDirectlyUnderCase": 0,
+ "hitExecutionCase": 0,
+ "hitHighRiskBankLastTwoYears": 0,
+ "hitHighRiskNonBankLastTwoYears": 0,
+ "hitPreservationReview": 0,
+ "idCardPhoneProvinceMismatch": 0,
+ "idCardRiskCounts": 0,
+ "idCardRiskHighCounts": 0,
+ "idCardRiskMiddleCounts": 0,
+ "idCardTwoElementMismatch": 0,
+ "isAntiFraudInfo": 0,
+ "isDisrupSocial": 1,
+ "isEconomyFront": 0,
+ "isKeyPerson": 0,
+ "isTrafficRelated": 0,
+ "jdpgRiskCounts": 1,
+ "jdpgRiskHighCounts": 0,
+ "jdpgRiskMiddleCounts": 1,
+ "level": "C2,C5",
+ "moreFrequentBankApplications": 0,
+ "moreFrequentNonBankApplications": 0,
+ "noPhoneDuration": 1,
+ "phoneThreeElementMismatch": 0,
+ "sfhyfxRiskCounts": 1,
+ "sfhyfxRiskHighCounts": 1,
+ "sfhyfxRiskMiddleCounts": 0,
+ "shortPhoneDuration": 0,
+ "shortPhoneDurationSlight": 0,
+ "shortPhoneRiskCounts": 1,
+ "shortPhoneRiskHighCounts": 1,
+ "shortPhoneRiskMiddleCounts": 0,
+ "totalRiskCounts": 4,
+ "veryFrequentRentalApplications": 0,
+ "yqfxRiskCounts": 0,
+ "yqfxRiskHighCounts": 0,
+ "yqfxRiskMiddleCounts": 0,
+ "zlfxpgRiskCounts": 0,
+ "zlfxpgRiskHighCounts": 0,
+ "zlfxpgRiskMiddleCounts": 0
+ },
+ "standLiveInfo": {
+ "finalAuthResult": "0",
+ "inTime": "3",
+ "verification": "1"
+ },
+ "success": true,
+ "timestamp": "2025-01-20 21:19:58",
+ "verifyRule": "高风险"
+ }
+ }
+ },
+ {
+ "feature": {
+ "featureName": "收入评估",
+ "sort": 4
+ },
+ "data": {
+ "apiID": "JRZQ09J8",
+ "data": {
+ "level": "G"
+ },
+ "success": true,
+ "timestamp": "2025-01-20 21:19:58"
+ }
+ },
+ {
+ "feature": {
+ "featureName": "借贷表现",
+ "sort": 5
+ },
+ "data": {
+ "apiID": "JRZQ4B6C",
+ "data": {
+ "acc_exc": "0",
+ "acc_sleep": "39",
+ "count_performance": "1",
+ "currently_overdue": "1",
+ "currently_performance": "29",
+ "latest_overdue_time": "2018-10",
+ "latest_performance_time": "2018-10",
+ "max_overdue_amt": "1000-2000",
+ "max_overdue_days": "1-15",
+ "max_performance_amt": "1000-2000",
+ "result_code": "1"
+ },
+ "success": true,
+ "timestamp": "2025-01-20 21:19:58"
+ }
+ },
+ {
+ "feature": {
+ "featureName": "人企关系加强版",
+ "sort": 6
+ },
+ "data": {
+ "apiID": "QYGL3F8E",
+ "data": {
+ "items": [
+ {
+ "abnormal_info": {
+ "items": [
+ {
+ "putDate": "2022-12-01",
+ "putDepartment": "北京市朝阳区市场监督管理局",
+ "putReason": "未依照《企业信息公示暂行条例》第八条规定的期限公示年度报告的",
+ "removeDate": "2023-08-15",
+ "removeDepartment": "北京市朝阳区市场监督管理局",
+ "removeReason": "已补报年度报告"
+ },
+ {
+ "putDate": "2022-05-20",
+ "putDepartment": "北京市朝阳区市场监督管理局",
+ "putReason": "通过登记的住所或者经营场所无法联系的",
+ "removeDate": "",
+ "removeDepartment": "",
+ "removeReason": ""
+ },
+ {
+ "putDate": "2022-03-15",
+ "putDepartment": "北京市朝阳区市场监督管理局",
+ "putReason": "未按规定期限公示即时信息的",
+ "removeDate": "2022-11-30",
+ "removeDepartment": "北京市朝阳区市场监督管理局",
+ "removeReason": "已完成信息公示"
+ }
+ ],
+ "total": 3
+ },
+ "adminPenalty": [],
+ "basicInfo": {
+ "apprdate": "2020-05-15",
+ "base": "bj",
+ "candate": "",
+ "city": "北京市",
+ "companyOrgType": "有限责任公司(自然人投资或控股)",
+ "creditCode": "91110108MA01******",
+ "district": "海淀区",
+ "estiblishTime": "2018-03-12",
+ "industry": "科技推广和应用服务业",
+ "industry_code": "M",
+ "legalPersonName": "张某",
+ "name": "北京****科技有限公司",
+ "nic_code": "M7510",
+ "nic_name": "科技推广和应用服务业-科技推广和应用服务业-技术推广服务-技术推广服务",
+ "opscope": "技术开发、技术推广、技术转让、技术咨询、技术服务;软件开发;计算机系统服务;数据处理;基础软件服务;应用软件服务;计算机维修;销售计算机、软件及辅助设备、电子产品、机械设备、通讯设备;货物进出口;技术进出口;代理进出口。",
+ "province": "北京市",
+ "reccap": 0,
+ "reccapcur": "人民币",
+ "regCapital": "500.000000万人民币",
+ "regCapitalCurrency": "人民币",
+ "regNumber": "11010801******",
+ "regStatus": "存续",
+ "regorg": "北京市海淀区市场监督管理局",
+ "revdate": "2020-05-15",
+ "staffList": {
+ "result": [
+ {
+ "name": "张某",
+ "type": "2",
+ "typeJoin": [
+ "执行董事"
+ ]
+ }
+ ]
+ },
+ "type": "1"
+ },
+ "dishonestExecutedPerson": [],
+ "executedPerson": [],
+ "financing_history": {
+ "items": [
+ {
+ "companyName": "北京创新科技有限公司",
+ "date": null,
+ "investorName": "红杉资本中国,IDG资本",
+ "money": "5000万人民币",
+ "newsTitle": "北京创新科技完成5000万元B轮融资",
+ "newsUrl": "https://example.com/news1",
+ "pubTime": 1672531200000,
+ "round": "B轮",
+ "share": "15%",
+ "value": "3.3亿人民币"
+ },
+ {
+ "companyName": "北京创新科技有限公司",
+ "date": null,
+ "investorName": "经纬中国,真格基金",
+ "money": "2000万人民币",
+ "newsTitle": "北京创新科技获得2000万元A轮融资",
+ "newsUrl": "https://example.com/news2",
+ "pubTime": 1640995200000,
+ "round": "A轮",
+ "share": "20%",
+ "value": "1亿人民币"
+ },
+ {
+ "companyName": "北京创新科技有限公司",
+ "date": null,
+ "investorName": "创新工场",
+ "money": "500万人民币",
+ "newsTitle": "",
+ "newsUrl": "",
+ "pubTime": 1609459200000,
+ "round": "Pre-A轮",
+ "share": "10%",
+ "value": "5000万人民币"
+ },
+ {
+ "companyName": "北京创新科技有限公司",
+ "date": null,
+ "investorName": "梅花创投",
+ "money": "200万人民币",
+ "newsTitle": "",
+ "newsUrl": "",
+ "pubTime": 1577836800000,
+ "round": "天使轮",
+ "share": "8%",
+ "value": "2500万人民币"
+ }
+ ],
+ "total": 4
+ },
+ "fsource": "1",
+ "invest_history": {
+ "items": [
+ {
+ "alias": "智慧数据",
+ "amount": null,
+ "base": "bj",
+ "business_scope": "技术开发;技术推广;技术转让;技术咨询;技术服务;计算机系统服务;基础软件服务;应用软件服务;软件开发;软件咨询;模型设计;包装装潢设计;教育咨询(中介服务除外);经济贸易咨询;文化咨询;体育咨询;公共关系服务;会议服务;工艺美术设计;电脑动画设计;项目投资;投资管理;资产管理;企业策划、设计;设计、制作、代理、发布广告;市场调查;企业管理咨询;组织文化艺术交流活动(不含营业性演出);文艺创作;承办展览展示活动;会议服务;影视策划;翻译服务。",
+ "category": "软件和信息技术服务业",
+ "creditCode": "91110105MA01A2B3C4",
+ "estiblishTime": 1640995200000,
+ "id": 35678901,
+ "legalPersonId": 2156789012,
+ "legalPersonName": "李明",
+ "logo": "https://img5.tianyancha.com/logo/lll/example1.png@!f_200x200",
+ "name": "北京智慧数据科技有限公司",
+ "orgType": "有限责任公司(自然人投资或控股)",
+ "pencertileScore": 7856,
+ "percent": "60%",
+ "personType": 1,
+ "regCapital": "2000万人民币",
+ "regStatus": "存续",
+ "withdrawalTime": null
+ },
+ {
+ "alias": "AI研究院",
+ "amount": null,
+ "base": "bj",
+ "business_scope": "人工智能应用软件开发;人工智能理论与算法软件开发;人工智能基础软件开发;人工智能基础资源与技术平台;软件开发;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广;信息系统集成服务;信息技术咨询服务;数据处理和存储支持服务;互联网数据服务;云计算装备技术服务;网络技术服务;计算机系统服务;数字文化创意软件开发。",
+ "category": "科学研究和技术服务业",
+ "creditCode": "91110108MA01B3C4D5",
+ "estiblishTime": 1672531200000,
+ "id": 36789012,
+ "legalPersonId": 2167890123,
+ "legalPersonName": "王芳",
+ "logo": "https://img5.tianyancha.com/logo/lll/example2.png@!f_200x200",
+ "name": "北京人工智能研究院有限公司",
+ "orgType": "有限责任公司(自然人投资或控股)",
+ "pencertileScore": 6234,
+ "percent": "45%",
+ "personType": 1,
+ "regCapital": "1500万人民币",
+ "regStatus": "存续",
+ "withdrawalTime": null
+ }
+ ],
+ "total": 5
+ },
+ "lawsuitInfo": {
+ "entout": {
+ "data": {
+ "administrative": {
+ "cases": [
+ {
+ "c_ah": "(2023)京01行初****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "北京****科技有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "原告"
+ },
+ {
+ "c_mc": "北京市****区市场监督管理局",
+ "n_dsrlx": "机关团体",
+ "n_ssdw": "被告"
+ }
+ ],
+ "c_gkws_dsr": "原告北京****科技有限公司,住所地北京市海淀区****路x号。法定代表人张某,执行董事兼总经理。委托代理人吴某,北京****律师事务所律师。被告北京市****区市场监督管理局,住所地北京市****区政府大楼。负责人陈某,局长。委托代理人刘某,该局工作人员。",
+ "c_gkws_pjjg": "驳回原告北京****科技有限公司的诉讼请求。案件受理费50元,由原告北京****科技有限公司负担。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于北京市高级人民法院。",
+ "c_id": "g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3",
+ "c_ssdy": "北京市",
+ "d_jarq": "2023-11-15",
+ "d_larq": "2023-09-10",
+ "n_ajbs": "f7g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "行政一审",
+ "n_crc": 5678901234,
+ "n_jaay": "行政管理",
+ "n_jaay_tree": "行政管理,工商行政管理,市场监督管理",
+ "n_jafs": "判决",
+ "n_jbfy": "北京市****人民法院",
+ "n_jbfy_cj": "中级人民法院",
+ "n_laay": "行政管理",
+ "n_pj_victory": "败诉",
+ "n_slcx": "一审",
+ "n_ssdw": "原告"
+ }
+ ],
+ "count": {
+ "area_stat": "北京市(1)",
+ "ay_stat": "行政管理(1)",
+ "count_beigao": 0,
+ "count_jie_beigao": 0,
+ "count_jie_total": 1,
+ "count_total": 1,
+ "jafs_stat": "判决(1)",
+ "larq_stat": "2023(1)"
+ }
+ },
+ "bankrupt": {
+ "cases": [
+ {
+ "c_ah": "(2023)京01破申****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "北京****投资有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "申请人"
+ },
+ {
+ "c_mc": "北京****科技有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被申请人"
+ }
+ ],
+ "c_gkws_dsr": "申请人北京****投资有限公司,住所地北京市朝阳区****路x号。法定代表人黄某,董事长。委托代理人赵某,北京****律师事务所律师。被申请人北京****科技有限公司,住所地北京市海淀区****路x号。法定代表人张某,执行董事兼总经理。",
+ "c_gkws_pjjg": "驳回申请人北京****投资有限公司对被申请人北京****科技有限公司的破产清算申请。申请费5000元,由申请人北京****投资有限公司负担。",
+ "c_id": "h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4",
+ "c_ssdy": "北京市",
+ "d_jarq": "2023-12-05",
+ "d_larq": "2023-10-25",
+ "n_ajbs": "g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "破产清算",
+ "n_crc": 6789012345,
+ "n_jaay": "破产案件",
+ "n_jaay_tree": "破产案件,破产清算",
+ "n_jafs": "裁定",
+ "n_jbfy": "北京市****人民法院",
+ "n_jbfy_cj": "中级人民法院",
+ "n_laay": "破产案件",
+ "n_pj_victory": "胜诉",
+ "n_slcx": "破产",
+ "n_ssdw": "被申请人"
+ }
+ ],
+ "count": {
+ "area_stat": "北京市(1)",
+ "ay_stat": "破产案件(1)",
+ "count_beigao": 1,
+ "count_jie_beigao": 1,
+ "count_jie_total": 1,
+ "count_total": 1,
+ "jafs_stat": "裁定(1)",
+ "larq_stat": "2023(1)"
+ }
+ },
+ "cases_tree": {
+ "administrative": [
+ {
+ "c_ah": "(2023)京01行初****号",
+ "case_type": 400,
+ "n_ajbs": "f7g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2",
+ "stage_type": 1
+ }
+ ],
+ "bankrupt": [
+ {
+ "c_ah": "(2023)京01破申****号",
+ "case_type": 600,
+ "n_ajbs": "g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3",
+ "stage_type": 1
+ }
+ ],
+ "civil": [
+ {
+ "c_ah": "(2023)京01民初****号",
+ "case_type": 300,
+ "n_ajbs": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
+ "stage_type": 1
+ }
+ ],
+ "criminal": [],
+ "implement": [
+ {
+ "c_ah": "(2023)京01执****号",
+ "case_type": 500,
+ "n_ajbs": "h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4",
+ "stage_type": 1
+ }
+ ],
+ "preservation": [
+ {
+ "c_ah": "(2023)京01财保****号",
+ "case_type": 700,
+ "n_ajbs": "i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5",
+ "stage_type": 1
+ }
+ ]
+ },
+ "civil": {
+ "cases": [
+ {
+ "c_ah": "(2023)京01民初****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "北京****科技有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被告"
+ },
+ {
+ "c_mc": "刘某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "原告"
+ }
+ ],
+ "c_gkws_dsr": "原告刘某,男,1985年3月15日生,汉族,住北京市朝阳区****小区x号楼x单元x号。委托代理人李某,北京****律师事务所律师。被告北京****科技有限公司,住所地北京市海淀区****路x号。法定代表人张某,执行董事兼总经理。委托代理人王某,北京****律师事务所律师。",
+ "c_gkws_pjjg": "一、被告北京****科技有限公司于本判决生效之日起十日内向原告刘某支付服务费300000元及违约金50000元;二、驳回原告刘某的其他诉讼请求。如果未按本判决指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百六十条规定,加倍支付迟延履行期间的债务利息。案件受理费8800元,由原告刘某负担3300元,被告北京****科技有限公司负担5500元。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于北京市高级人民法院。",
+ "c_id": "b1c2d3e4f5g6h7i8j9k0l1m2n3o4p5q6",
+ "c_ssdy": "北京市",
+ "d_jarq": "2023-12-15",
+ "d_larq": "2023-10-20",
+ "n_ajbs": "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "民事一审",
+ "n_crc": 1234567890,
+ "n_jaay": "合同、准合同纠纷",
+ "n_jaay_tree": "合同、准合同纠纷,合同纠纷,服务合同纠纷",
+ "n_jafs": "判决",
+ "n_jbfy": "北京市****人民法院",
+ "n_jbfy_cj": "中级人民法院",
+ "n_laay": "合同、准合同纠纷",
+ "n_pj_victory": "部分胜诉",
+ "n_qsbdje": 500000,
+ "n_qsbdje_level": 19,
+ "n_slcx": "一审",
+ "n_ssdw": "被告"
+ }
+ ],
+ "count": {
+ "area_stat": "北京市(1)",
+ "ay_stat": "合同、准合同纠纷(1)",
+ "count_beigao": 1,
+ "count_jie_beigao": 1,
+ "count_jie_total": 1,
+ "count_total": 1,
+ "jafs_stat": "判决(1)",
+ "larq_stat": "2023(1)",
+ "money_beigao": 1,
+ "money_jie_beigao": 1,
+ "money_jie_total": 1,
+ "money_total": 1
+ }
+ },
+ "count": {
+ "area_stat": "北京市(5)",
+ "ay_stat": "合同、准合同纠纷(1),行政管理(1),破产案件(1),执行案件(1),财产保全(1)",
+ "count_beigao": 3,
+ "count_jie_beigao": 3,
+ "count_jie_total": 5,
+ "count_total": 5,
+ "jafs_stat": "判决(2),裁定(2),执行(1)",
+ "larq_stat": "2023(5)",
+ "money_beigao": 1,
+ "money_jie_beigao": 1,
+ "money_jie_total": 1,
+ "money_total": 1
+ },
+ "crc": 1234567890,
+ "criminal": {
+ "cases": [],
+ "count": {
+ "area_stat": "北京市(0)",
+ "count_total": 0
+ }
+ },
+ "implement": {
+ "cases": [
+ {
+ "c_ah": "(2023)京01执****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "孙某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "申请执行人"
+ },
+ {
+ "c_mc": "北京****科技有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被执行人"
+ }
+ ],
+ "c_gkws_dsr": "申请执行人孙某,男,1978年7月20日生,汉族,住北京市西城区****小区x号楼x号。委托代理人赵某,北京****律师事务所律师。被执行人北京****科技有限公司,住所地北京市海淀区****路x号。法定代表人张某,执行董事兼总经理。",
+ "c_gkws_pjjg": "一、被执行人北京****科技有限公司应向申请执行人孙某支付劳动报酬80000元;二、被执行人北京****科技有限公司应向申请执行人孙某支付迟延履行期间的债务利息;三、申请执行人孙某的其他申请执行请求不予支持。",
+ "c_id": "i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5",
+ "c_ssdy": "北京市",
+ "d_jarq": "2024-01-10",
+ "d_larq": "2023-11-20",
+ "n_ajbs": "h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "执行案件",
+ "n_crc": 7890123456,
+ "n_jaay": "执行案件",
+ "n_jaay_tree": "执行案件,执行实施类",
+ "n_jafs": "执行",
+ "n_jbfy": "北京市****人民法院",
+ "n_jbfy_cj": "中级人民法院",
+ "n_laay": "执行案件",
+ "n_slcx": "执行",
+ "n_ssdw": "被执行人"
+ }
+ ],
+ "count": {
+ "area_stat": "北京市(1)",
+ "count_total": 1
+ }
+ },
+ "preservation": {
+ "cases": [
+ {
+ "c_ah": "(2023)京01财保****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "周某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "申请人"
+ },
+ {
+ "c_mc": "北京****科技有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被申请人"
+ }
+ ],
+ "c_gkws_dsr": "申请人周某,男,1980年5月10日生,汉族,住北京市朝阳区****小区x号楼x号。委托代理人吴某,北京****律师事务所律师。被申请人北京****科技有限公司,住所地北京市海淀区****路x号。法定代表人张某,执行董事兼总经理。",
+ "c_gkws_pjjg": "查封被申请人北京****科技有限公司名下位于北京市海淀区****路x号x栋x号的房产一处(房产证号:京****),查封期限为三年。",
+ "c_id": "j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5y6",
+ "c_ssdy": "北京市",
+ "d_jarq": "2023-11-30",
+ "d_larq": "2023-11-10",
+ "n_ajbs": "i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "财产保全",
+ "n_crc": 8901234567,
+ "n_jaay": "财产保全",
+ "n_jaay_tree": "财产保全,诉前财产保全",
+ "n_jafs": "裁定",
+ "n_jbfy": "北京市****人民法院",
+ "n_jbfy_cj": "中级人民法院",
+ "n_laay": "财产保全",
+ "n_slcx": "保全",
+ "n_ssdw": "被申请人"
+ }
+ ],
+ "count": {
+ "area_stat": "北京市(1)",
+ "count_total": 1
+ }
+ }
+ }
+ },
+ "sxbzxr": {
+ "data": {
+ "sxbzxr": [
+ {
+ "ah": "(2022)京0105执****号",
+ "fbrq": "2022-09-20",
+ "larq": "2022-09-15",
+ "lxqk": "全部未履行",
+ "pjje_gj": 350000,
+ "qyfr": "张某",
+ "sf": "北京市",
+ "xwqx": "有履行能力而拒不履行生效法律文书确定义务",
+ "yw": "向申请人支付服务费350000元及违约金",
+ "zxfy": "北京市朝阳区人民法院",
+ "zxyjdw": "北京市朝阳区人民法院",
+ "zxyjwh": "(2022)京0105民初****号",
+ "zzjgdm": "91110108MA0******"
+ },
+ {
+ "ah": "(2023)京0108执****号",
+ "fbrq": "2023-04-25",
+ "larq": "2023-04-10",
+ "lxqk": "部分未履行",
+ "pjje_gj": 250000,
+ "qyfr": "张某",
+ "sf": "北京市",
+ "xwqx": "被执行人无正当理由拒不履行执行和解协议",
+ "yw": "向申请人支付货款450000元及利息",
+ "zxfy": "北京市海淀区人民法院",
+ "zxyjdw": "北京市海淀区人民法院",
+ "zxyjwh": "(2023)京0108民初****号",
+ "zzjgdm": "91110108MA0******"
+ }
+ ]
+ }
+ },
+ "xgbzxr": {
+ "data": {
+ "xgbzxr": [
+ {
+ "ah": "(2022)京0105执****号",
+ "fbrq": "2022-10-01",
+ "id": "BJ0105XG202200****",
+ "zxfy": "北京市朝阳区人民法院"
+ },
+ {
+ "ah": "(2023)京0108执****号",
+ "fbrq": "2023-05-15",
+ "id": "BJ0108XG202300****",
+ "zxfy": "北京市海淀区人民法院"
+ }
+ ]
+ }
+ }
+ },
+ "orgName": "北京****科技有限公司",
+ "own_tax": {
+ "items": [
+ {
+ "department": "海淀区税务局",
+ "legalpersonName": "张某",
+ "location": "北京市海淀区中关村大街1号",
+ "name": "北京****科技有限公司",
+ "newOwnTaxBalance": "0",
+ "ownTaxAmount": "125.80",
+ "ownTaxBalance": "125.80",
+ "personIdName": "201|居民身份证",
+ "personIdNumber": "******",
+ "publishDate": "2023-03-15",
+ "regType": "有限责任公司",
+ "taxCategory": "企业所得税",
+ "taxIdNumber": "91110108MA01******",
+ "taxpayerType": "一般纳税人",
+ "type": "国税"
+ },
+ {
+ "department": "海淀区税务局",
+ "legalpersonName": "张某",
+ "location": "北京市海淀区中关村大街1号",
+ "name": "北京****科技有限公司",
+ "newOwnTaxBalance": "0",
+ "ownTaxAmount": "89.50",
+ "ownTaxBalance": "89.50",
+ "personIdName": "201|居民身份证",
+ "personIdNumber": "******",
+ "publishDate": "2023-06-20",
+ "regType": "有限责任公司",
+ "taxCategory": "城市维护建设税",
+ "taxIdNumber": "91110108MA01******",
+ "taxpayerType": "一般纳税人",
+ "type": "地税"
+ },
+ {
+ "department": "海淀区税务局",
+ "legalpersonName": "张某",
+ "location": "北京市海淀区中关村大街1号",
+ "name": "北京****科技有限公司",
+ "newOwnTaxBalance": "0",
+ "ownTaxAmount": "45.20",
+ "ownTaxBalance": "45.20",
+ "personIdName": "201|居民身份证",
+ "personIdNumber": "******",
+ "publishDate": "2023-09-10",
+ "regType": "有限责任公司",
+ "taxCategory": "增值税",
+ "taxIdNumber": "91110108MA01******",
+ "taxpayerType": "一般纳税人",
+ "type": "国税"
+ }
+ ],
+ "total": 3
+ },
+ "pName": "张某",
+ "punishment_info": {
+ "items": [
+ {
+ "content": "责令当事人停止发布违法广告,并处罚款人民币5万元",
+ "decisionDate": "2023-05-15",
+ "departmentName": "北京市朝阳区市场监督管理局",
+ "evidence": "当事人在其官网发布含有虚假内容的广告",
+ "legalPersonName": "张明",
+ "pecuniary": "50000",
+ "punishName": "北京创新科技有限公司",
+ "punishNumber": "京朝市监罚字〔2023〕第1205号",
+ "punishStatus": "已执行",
+ "reason": "违反《中华人民共和国广告法》第二十八条规定,发布虚假广告",
+ "remark": "",
+ "source": "市场监督管理局",
+ "type": "广告违法",
+ "typeSecond": "虚假广告"
+ },
+ {
+ "content": "责令限期整改,并处罚款人民币3万元",
+ "decisionDate": "2023-08-20",
+ "departmentName": "北京市网信办",
+ "evidence": "网络安全检查中发现安全漏洞未及时修复",
+ "legalPersonName": "张明",
+ "pecuniary": "30000",
+ "punishName": "北京创新科技有限公司",
+ "punishNumber": "京网信罚〔2023〕第0856号",
+ "punishStatus": "已执行",
+ "reason": "违反《网络安全法》相关规定,未履行网络安全保护义务",
+ "remark": "",
+ "source": "网信办",
+ "type": "网络安全",
+ "typeSecond": "安全漏洞"
+ }
+ ],
+ "total": 2
+ },
+ "relationship": [
+ "sh",
+ "lp",
+ "tm"
+ ],
+ "stockHolderItem": {
+ "investDate": "",
+ "investRate": "100.0%",
+ "orgHolderName": "张某",
+ "orgHolderType": "自然人",
+ "subscriptAmt": 500
+ },
+ "tax_contravention": {
+ "items": [
+ {
+ "case_type": "税收异常非正常户",
+ "department": "国家税务总局北京市海淀区税务局",
+ "id": 2745249,
+ "publish_time": "2023-08-15",
+ "taxpayer_name": "北京****科技有限公司"
+ }
+ ],
+ "total": 1
+ }
+ },
+ {
+ "abnormal_info": {
+ "items": [
+ {
+ "putDate": "2023-07-10",
+ "putDepartment": "上海市浦东新区市场监督管理局",
+ "putReason": "未依照《企业信息公示暂行条例》第八条规定的期限公示年度报告的",
+ "removeDate": "",
+ "removeDepartment": "",
+ "removeReason": ""
+ }
+ ],
+ "total": 1
+ },
+ "adminPenalty": [
+ {
+ "content": "",
+ "decisionDate": "2022-08-20",
+ "departmentName": "上海市****市场监督管理局",
+ "legalPersonName": "王某",
+ "punishNumber": "沪市监罚字(2022)****号",
+ "reason": "未按规定公示年度报告",
+ "type": "警告"
+ }
+ ],
+ "basicInfo": {
+ "apprdate": "2022-08-20",
+ "base": "sh",
+ "candate": "",
+ "city": "上海市",
+ "companyOrgType": "有限责任公司(自然人投资或控股)",
+ "creditCode": "91310115MA1******",
+ "district": "浦东新区",
+ "estiblishTime": "2019-05-18",
+ "industry": "批发和零售业",
+ "industry_code": "F",
+ "legalPersonName": "王某",
+ "name": "上海****贸易有限公司",
+ "nic_code": "F5191",
+ "nic_name": "批发和零售业-批发业-其他批发业-其他批发业",
+ "opscope": "从事货物及技术的进出口业务,五金交电、建筑材料、机械设备、电子产品、日用百货的销售。",
+ "province": "上海市",
+ "reccap": 0,
+ "reccapcur": "人民币",
+ "regCapital": "300.000000万人民币",
+ "regCapitalCurrency": "人民币",
+ "regNumber": "310115******",
+ "regStatus": "存续",
+ "regorg": "上海市浦东新区市场监督管理局",
+ "revdate": "2022-08-20",
+ "staffList": {
+ "result": [
+ {
+ "name": "王某",
+ "type": "2",
+ "typeJoin": [
+ "执行董事"
+ ]
+ }
+ ]
+ },
+ "type": "1"
+ },
+ "dishonestExecutedPerson": [],
+ "executedPerson": [],
+ "financing_history": {
+ "items": [
+ {
+ "companyName": "上海智能制造股份有限公司",
+ "date": null,
+ "investorName": "公开发行",
+ "money": "15.8亿人民币",
+ "newsTitle": "上海智能制造成功登陆科创板",
+ "newsUrl": "https://example.com/ipo1",
+ "pubTime": 1680307200000,
+ "round": "IPO上市",
+ "share": "",
+ "value": ""
+ },
+ {
+ "companyName": "上海智能制造股份有限公司",
+ "date": null,
+ "investorName": "高瓴资本,腾讯投资",
+ "money": "3亿人民币",
+ "newsTitle": "上海智能制造完成3亿元C轮融资",
+ "newsUrl": "https://example.com/news3",
+ "pubTime": 1651363200000,
+ "round": "C轮",
+ "share": "12%",
+ "value": "25亿人民币"
+ },
+ {
+ "companyName": "上海智能制造股份有限公司",
+ "date": null,
+ "investorName": "软银中国,金沙江创投",
+ "money": "1.5亿人民币",
+ "newsTitle": "",
+ "newsUrl": "",
+ "pubTime": 1619827200000,
+ "round": "B轮",
+ "share": "18%",
+ "value": "8.3亿人民币"
+ },
+ {
+ "companyName": "上海智能制造股份有限公司",
+ "date": null,
+ "investorName": "启明创投,GGV纪源资本",
+ "money": "8000万人民币",
+ "newsTitle": "",
+ "newsUrl": "",
+ "pubTime": 1588291200000,
+ "round": "A轮",
+ "share": "25%",
+ "value": "3.2亿人民币"
+ },
+ {
+ "companyName": "上海智能制造股份有限公司",
+ "date": null,
+ "investorName": "真格基金,险峰长青",
+ "money": "1500万人民币",
+ "newsTitle": "",
+ "newsUrl": "",
+ "pubTime": 1556668800000,
+ "round": "天使轮",
+ "share": "15%",
+ "value": "1亿人民币"
+ }
+ ],
+ "total": 5
+ },
+ "fsource": "1",
+ "invest_history": {
+ "items": [
+ {
+ "alias": "智能机器人",
+ "amount": null,
+ "base": "sh",
+ "business_scope": "智能制造装备、工业机器人、数控机床的研发、生产、销售;自动化控制系统集成;软件开发;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广;货物进出口;技术进出口。",
+ "category": "通用设备制造业",
+ "creditCode": "91310115MA01F7G8H9",
+ "estiblishTime": 1609459200000,
+ "id": 40123456,
+ "legalPersonId": 2201234567,
+ "legalPersonName": "陈刚",
+ "logo": "https://img5.tianyancha.com/logo/lll/example6.png@!f_200x200",
+ "name": "上海智能机器人制造有限公司",
+ "orgType": "有限责任公司(自然人投资或控股)",
+ "pencertileScore": 8912,
+ "percent": "35%",
+ "personType": 1,
+ "regCapital": "5000万人民币",
+ "regStatus": "存续",
+ "withdrawalTime": null
+ },
+ {
+ "alias": "工业自动化",
+ "amount": null,
+ "base": "sh",
+ "business_scope": "工业自动化设备的研发、生产、销售;工业软件开发;系统集成;技术服务;设备租赁;机械设备销售;电子产品销售;计算机软硬件及辅助设备销售。",
+ "category": "专用设备制造业",
+ "creditCode": "91310114MA01G8H9I0",
+ "estiblishTime": 1625097600000,
+ "id": 41234567,
+ "legalPersonId": 2212345678,
+ "legalPersonName": "张伟",
+ "logo": "https://img5.tianyancha.com/logo/lll/example7.png@!f_200x200",
+ "name": "上海工业自动化设备有限公司",
+ "orgType": "有限责任公司(自然人投资或控股)",
+ "pencertileScore": 7234,
+ "percent": "50%",
+ "personType": 1,
+ "regCapital": "3000万人民币",
+ "regStatus": "存续",
+ "withdrawalTime": null
+ }
+ ],
+ "total": 8
+ },
+ "lawsuitInfo": {
+ "entout": {
+ "data": {
+ "administrative": {
+ "cases": [
+ {
+ "c_ah": "(2022)沪01行初****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "上海****贸易有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "原告"
+ },
+ {
+ "c_mc": "上海市****市场监督管理局",
+ "n_dsrlx": "机关团体",
+ "n_ssdw": "被告"
+ }
+ ],
+ "c_gkws_dsr": "原告上海****贸易有限公司,住所地上海市浦东新区****路x号。法定代表人王某,执行董事兼总经理。委托代理人田某,上海****律师事务所律师。被告上海市****市场监督管理局,住所地上海市****区政府大楼。负责人杨某,局长。委托代理人郑某,该局工作人员。",
+ "c_gkws_pjjg": "一、撤销被告上海市****市场监督管理局于2022年8月10日作出的沪市监罚字(2022)****号《行政处罚决定书》;二、被告上海市****市场监督管理局于本判决生效之日起六十日内重新作出处理决定。案件受理费100元,由被告上海市****市场监督管理局负担。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于上海市高级人民法院。",
+ "c_id": "k2l3m4n5o6p7q8r9s0t1u2v3w4x5y6z7",
+ "c_ssdy": "上海市",
+ "d_jarq": "2022-12-20",
+ "d_larq": "2022-10-15",
+ "n_ajbs": "j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5y6",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "行政一审",
+ "n_crc": 9012345678,
+ "n_jaay": "行政管理",
+ "n_jaay_tree": "行政管理,工商行政管理,行政处罚",
+ "n_jafs": "判决",
+ "n_jbfy": "上海市****人民法院",
+ "n_jbfy_cj": "中级人民法院",
+ "n_laay": "行政管理",
+ "n_pj_victory": "胜诉",
+ "n_slcx": "一审",
+ "n_ssdw": "原告"
+ }
+ ],
+ "count": {
+ "area_stat": "上海市(1)",
+ "ay_stat": "行政管理(1)",
+ "count_beigao": 0,
+ "count_jie_beigao": 0,
+ "count_jie_total": 1,
+ "count_total": 1,
+ "jafs_stat": "判决(1)",
+ "larq_stat": "2022(1)"
+ }
+ },
+ "bankrupt": {
+ "cases": [],
+ "count": {
+ "area_stat": "上海市(0)",
+ "count_total": 0
+ }
+ },
+ "cases_tree": {
+ "administrative": [
+ {
+ "c_ah": "(2022)沪01行初****号",
+ "case_type": 400,
+ "n_ajbs": "j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5y6",
+ "stage_type": 1
+ }
+ ],
+ "bankrupt": [],
+ "civil": [
+ {
+ "c_ah": "(2023)沪01民初****号",
+ "case_type": 300,
+ "n_ajbs": "b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7",
+ "stage_type": 1
+ },
+ {
+ "c_ah": "(2023)沪01民终****号",
+ "case_type": 300,
+ "n_ajbs": "c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8",
+ "stage_type": 2
+ }
+ ],
+ "criminal": [
+ {
+ "c_ah": "(2023)沪01刑初****号",
+ "case_type": 200,
+ "n_ajbs": "l3m4n5o6p7q8r9s0t1u2v3w4x5y6z7a8",
+ "stage_type": 1
+ }
+ ],
+ "implement": [
+ {
+ "c_ah": "(2024)沪01执****号",
+ "case_type": 500,
+ "n_ajbs": "m4n5o6p7q8r9s0t1u2v3w4x5y6z7a8b9",
+ "stage_type": 1
+ }
+ ],
+ "preservation": [
+ {
+ "c_ah": "(2023)沪01财保****号",
+ "case_type": 700,
+ "n_ajbs": "n5o6p7q8r9s0t1u2v3w4x5y6z7a8b9c0",
+ "stage_type": 1
+ }
+ ]
+ },
+ "civil": {
+ "cases": [
+ {
+ "c_ah": "(2023)沪01民初****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "上海****贸易有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被告"
+ },
+ {
+ "c_mc": "李某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "原告"
+ }
+ ],
+ "c_gkws_dsr": "原告李某,男,1982年6月18日生,汉族,住上海市黄浦区****小区x号楼x号。委托代理人马某,上海****律师事务所律师。被告上海****贸易有限公司,住所地上海市浦东新区****路x号。法定代表人王某,执行董事兼总经理。委托代理人陈某,上海****律师事务所律师。",
+ "c_gkws_pjjg": "一、被告上海****贸易有限公司于本判决生效之日起十日内向原告李某支付货款200000元及违约金30000元;二、驳回原告李某的其他诉讼请求。如果未按本判决指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百六十条规定,加倍支付迟延履行期间的债务利息。案件受理费5500元,由原告李某负担2000元,被告上海****贸易有限公司负担3500元。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于上海市高级人民法院。",
+ "c_id": "c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8",
+ "c_ssdy": "上海市",
+ "d_jarq": "2023-11-20",
+ "d_larq": "2023-09-15",
+ "n_ajbs": "b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "民事一审",
+ "n_crc": 2345678901,
+ "n_jaay": "合同、准合同纠纷",
+ "n_jaay_tree": "合同、准合同纠纷,合同纠纷,买卖合同纠纷",
+ "n_jafs": "判决",
+ "n_jbfy": "上海市****人民法院",
+ "n_jbfy_cj": "中级人民法院",
+ "n_laay": "合同、准合同纠纷",
+ "n_pj_victory": "部分胜诉",
+ "n_qsbdje": 300000,
+ "n_qsbdje_level": 18,
+ "n_slcx": "一审",
+ "n_ssdw": "被告"
+ },
+ {
+ "c_ah": "(2023)沪01民终****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "上海****贸易有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "上诉人"
+ },
+ {
+ "c_mc": "李某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "被上诉人"
+ }
+ ],
+ "c_gkws_dsr": "上诉人(原审被告)上海****贸易有限公司,住所地上海市浦东新区****路x号。法定代表人王某,执行董事兼总经理。委托代理人陈某,上海****律师事务所律师。被上诉人(原审原告)李某,男,1982年6月18日生,汉族,住上海市黄浦区****小区x号楼x号。委托代理人马某,上海****律师事务所律师。",
+ "c_gkws_pjjg": "驳回上诉,维持原判。二审案件受理费5500元,由上诉人上海****贸易有限公司负担。本判决为终审判决。",
+ "c_id": "d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9",
+ "c_ssdy": "上海市",
+ "d_jarq": "2024-01-15",
+ "d_larq": "2023-12-10",
+ "n_ajbs": "c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "民事二审",
+ "n_crc": 3456789012,
+ "n_jaay": "合同、准合同纠纷",
+ "n_jaay_tree": "合同、准合同纠纷,合同纠纷,买卖合同纠纷",
+ "n_jafs": "维持",
+ "n_jbfy": "上海市****人民法院",
+ "n_jbfy_cj": "中级人民法院",
+ "n_laay": "合同、准合同纠纷",
+ "n_pj_victory": "败诉",
+ "n_qsbdje": 300000,
+ "n_qsbdje_level": 18,
+ "n_slcx": "二审",
+ "n_ssdw": "上诉人"
+ }
+ ],
+ "count": {
+ "area_stat": "上海市(2)",
+ "ay_stat": "合同、准合同纠纷(2)",
+ "count_beigao": 1,
+ "count_jie_beigao": 1,
+ "count_jie_total": 2,
+ "count_total": 2,
+ "jafs_stat": "判决(1),维持(1)",
+ "larq_stat": "2023(2)",
+ "money_beigao": 1,
+ "money_jie_beigao": 1,
+ "money_jie_total": 2,
+ "money_total": 2
+ }
+ },
+ "count": {
+ "area_stat": "上海市(6)",
+ "ay_stat": "合同、准合同纠纷(2),行政管理(1),破坏社会主义市场经济秩序罪(1),执行案件(1),财产保全(1)",
+ "count_beigao": 1,
+ "count_jie_beigao": 1,
+ "count_jie_total": 6,
+ "count_total": 6,
+ "jafs_stat": "判决(3),维持(1),裁定(1),执行(1)",
+ "larq_stat": "2022(1),2023(4),2024(1)",
+ "money_beigao": 1,
+ "money_jie_beigao": 1,
+ "money_jie_total": 2,
+ "money_total": 2
+ },
+ "crc": 2345678901,
+ "criminal": {
+ "cases": [
+ {
+ "c_ah": "(2023)沪01刑初****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "上海****贸易有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被告单位"
+ },
+ {
+ "c_mc": "王某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "被告人"
+ }
+ ],
+ "c_gkws_dsr": "公诉机关上海市****区人民检察院。被告单位上海****贸易有限公司,住所地上海市浦东新区****路x号。被告人王某,男,1975年4月8日生,汉族,上海市人,大学文化,系上海****贸易有限公司法定代表人。因涉嫌犯走私普通货物罪,于2023年8月15日被上海市公安局刑事拘留,同年9月20日被逮捕,现羁押于上海市第一看守所。辩护人张某,上海****律师事务所律师。",
+ "c_gkws_pjjg": "一、被告单位上海****贸易有限公司犯走私普通货物罪,处罚金人民币五十万元;二、被告人王某犯走私普通货物罪,判处有期徒刑二年,缓刑三年,并处罚金人民币十万元。(缓刑考验期限,从判决确定之日起计算)。如不服本判决,可在接到判决书的第二日起十日内,通过本院或者直接向上海市高级人民法院提出上诉。被告人如果提出上诉,可以委托辩护人提出上诉状。",
+ "c_id": "o6p7q8r9s0t1u2v3w4x5y6z7a8b9c0d1",
+ "c_ssdy": "上海市",
+ "d_jarq": "2023-12-15",
+ "d_larq": "2023-10-20",
+ "n_ajbs": "l3m4n5o6p7q8r9s0t1u2v3w4x5y6z7a8",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "刑事一审",
+ "n_crc": 1234567890,
+ "n_jaay": "破坏社会主义市场经济秩序罪",
+ "n_jaay_tree": "破坏社会主义市场经济秩序罪,走私、贩卖、运输、制造毒品罪,走私普通货物、物品罪",
+ "n_jafs": "有期徒刑",
+ "n_jbfy": "上海市****人民法院",
+ "n_jbfy_cj": "中级人民法院",
+ "n_laay": "破坏社会主义市场经济秩序罪",
+ "n_pj_victory": "败诉",
+ "n_slcx": "一审",
+ "n_ssdw": "被告单位"
+ }
+ ],
+ "count": {
+ "area_stat": "上海市(1)",
+ "ay_stat": "破坏社会主义市场经济秩序罪(1)",
+ "count_beigao": 0,
+ "count_jie_beigao": 0,
+ "count_jie_total": 1,
+ "count_total": 1,
+ "jafs_stat": "有期徒刑(1)",
+ "larq_stat": "2023(1)",
+ "money_beigao": 0,
+ "money_jie_beigao": 0,
+ "money_jie_total": 0,
+ "money_total": 0
+ }
+ },
+ "implement": {
+ "cases": [
+ {
+ "c_ah": "(2024)沪01执****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "李某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "申请执行人"
+ },
+ {
+ "c_mc": "上海****贸易有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被执行人"
+ }
+ ],
+ "c_gkws_dsr": "申请执行人李某,男,1982年6月18日生,汉族,住上海市黄浦区****小区x号楼x号。委托代理人马某,上海****律师事务所律师。被执行人上海****贸易有限公司,住所地上海市浦东新区****路x号。法定代表人王某,执行董事兼总经理。",
+ "c_gkws_pjjg": "一、被执行人上海****贸易有限公司应向申请执行人李某支付货款230000元及迟延履行期间的利息;二、若被执行人未按时履行上述义务,本院将依法评估、拍卖其名下的财产,所得价款优先清偿上述债务。",
+ "c_id": "p7q8r9s0t1u2v3w4x5y6z7a8b9c0d1e2",
+ "c_ssdy": "上海市",
+ "d_jarq": "2024-02-20",
+ "d_larq": "2024-01-15",
+ "n_ajbs": "m4n5o6p7q8r9s0t1u2v3w4x5y6z7a8b9",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "执行案件",
+ "n_crc": 2345678901,
+ "n_jaay": "执行案件",
+ "n_jaay_tree": "执行案件,执行实施类",
+ "n_jafs": "执行",
+ "n_jbfy": "上海市****人民法院",
+ "n_jbfy_cj": "中级人民法院",
+ "n_laay": "执行案件",
+ "n_slcx": "执行",
+ "n_ssdw": "被执行人"
+ }
+ ],
+ "count": {
+ "area_stat": "上海市(1)",
+ "count_total": 1
+ }
+ },
+ "preservation": {
+ "cases": [
+ {
+ "c_ah": "(2023)沪01财保****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "李某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "申请人"
+ },
+ {
+ "c_mc": "上海****贸易有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被申请人"
+ }
+ ],
+ "c_gkws_dsr": "申请人李某,男,1982年6月18日生,汉族,住上海市黄浦区****小区x号楼x号。委托代理人马某,上海****律师事务所律师。被申请人上海****贸易有限公司,住所地上海市浦东新区****路x号。法定代表人王某,执行董事兼总经理。",
+ "c_gkws_pjjg": "冻结被申请人上海****贸易有限公司名下银行账户(账号:****)中的存款230000元,冻结期限为一年。",
+ "c_id": "q8r9s0t1u2v3w4x5y6z7a8b9c0d1e2f3",
+ "c_ssdy": "上海市",
+ "d_jarq": "2023-09-10",
+ "d_larq": "2023-09-05",
+ "n_ajbs": "n5o6p7q8r9s0t1u2v3w4x5y6z7a8b9c0",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "财产保全",
+ "n_crc": 3456789012,
+ "n_jaay": "财产保全",
+ "n_jaay_tree": "财产保全,诉前财产保全",
+ "n_jafs": "裁定",
+ "n_jbfy": "上海市****人民法院",
+ "n_jbfy_cj": "中级人民法院",
+ "n_laay": "财产保全",
+ "n_slcx": "保全",
+ "n_ssdw": "被申请人"
+ }
+ ],
+ "count": {
+ "area_stat": "上海市(1)",
+ "count_total": 1
+ }
+ }
+ }
+ },
+ "sxbzxr": {
+ "data": {
+ "sxbzxr": [
+ {
+ "ah": "(2021)沪0115执****号",
+ "fbrq": "2021-12-01",
+ "larq": "2021-11-10",
+ "lxqk": "全部未履行",
+ "pjje_gj": 900000,
+ "qyfr": "李某",
+ "sf": "上海市",
+ "xwqx": "有履行能力而拒不履行生效法律文书确定义务",
+ "yw": "向申请人支付货款900000元及违约金",
+ "zxfy": "上海市浦东新区人民法院",
+ "zxyjdw": "上海市浦东新区人民法院",
+ "zxyjwh": "(2021)沪0115民初****号",
+ "zzjgdm": "91310115MA0******"
+ },
+ {
+ "ah": "(2022)沪0104执****号",
+ "fbrq": "2022-06-15",
+ "larq": "2022-05-20",
+ "lxqk": "部分未履行",
+ "pjje_gj": 250000,
+ "qyfr": "李某",
+ "sf": "上海市",
+ "xwqx": "被执行人无正当理由拒不履行执行和解协议",
+ "yw": "向申请人支付货款550000元及利息",
+ "zxfy": "上海市徐汇区人民法院",
+ "zxyjdw": "上海市徐汇区人民法院",
+ "zxyjwh": "(2022)沪0104民初****号",
+ "zzjgdm": "91310115MA0******"
+ },
+ {
+ "ah": "(2023)沪0106执****号",
+ "fbrq": "2023-03-10",
+ "larq": "2023-02-25",
+ "lxqk": "全部未履行",
+ "pjje_gj": 700000,
+ "qyfr": "李某",
+ "sf": "上海市",
+ "xwqx": "有履行能力而拒不履行生效法律文书确定义务",
+ "yw": "向申请人支付服务费700000元及违约金",
+ "zxfy": "上海市静安区人民法院",
+ "zxyjdw": "上海市静安区人民法院",
+ "zxyjwh": "(2023)沪0106民初****号",
+ "zzjgdm": "91310115MA0******"
+ }
+ ]
+ }
+ },
+ "xgbzxr": {
+ "data": {
+ "xgbzxr": [
+ {
+ "ah": "(2021)沪0115执****号",
+ "fbrq": "2021-12-15",
+ "id": "SH0115XG202100****",
+ "zxfy": "上海市浦东新区人民法院"
+ },
+ {
+ "ah": "(2022)沪0104执****号",
+ "fbrq": "2022-07-01",
+ "id": "SH0104XG202200****",
+ "zxfy": "上海市徐汇区人民法院"
+ },
+ {
+ "ah": "(2023)沪0106执****号",
+ "fbrq": "2023-03-25",
+ "id": "SH0106XG202300****",
+ "zxfy": "上海市静安区人民法院"
+ }
+ ]
+ }
+ }
+ },
+ "orgName": "上海****贸易有限公司",
+ "own_tax": {
+ "items": [
+ {
+ "department": "浦东新区税务局",
+ "legalpersonName": "王某",
+ "location": "上海市浦东新区陆家嘴金融贸易区",
+ "name": "上海****贸易有限公司",
+ "newOwnTaxBalance": "0",
+ "ownTaxAmount": "256.30",
+ "ownTaxBalance": "256.30",
+ "personIdName": "201|居民身份证",
+ "personIdNumber": "******",
+ "publishDate": "2023-01-20",
+ "regType": "有限责任公司",
+ "taxCategory": "企业所得税",
+ "taxIdNumber": "91310000MA01******",
+ "taxpayerType": "一般纳税人",
+ "type": "国税"
+ },
+ {
+ "department": "浦东新区税务局",
+ "legalpersonName": "王某",
+ "location": "上海市浦东新区陆家嘴金融贸易区",
+ "name": "上海****贸易有限公司",
+ "newOwnTaxBalance": "0",
+ "ownTaxAmount": "189.70",
+ "ownTaxBalance": "189.70",
+ "personIdName": "201|居民身份证",
+ "personIdNumber": "******",
+ "publishDate": "2023-04-15",
+ "regType": "有限责任公司",
+ "taxCategory": "城市维护建设税",
+ "taxIdNumber": "91310000MA01******",
+ "taxpayerType": "一般纳税人",
+ "type": "地税"
+ },
+ {
+ "department": "浦东新区税务局",
+ "legalpersonName": "王某",
+ "location": "上海市浦东新区陆家嘴金融贸易区",
+ "name": "上海****贸易有限公司",
+ "newOwnTaxBalance": "0",
+ "ownTaxAmount": "78.90",
+ "ownTaxBalance": "78.90",
+ "personIdName": "201|居民身份证",
+ "personIdNumber": "******",
+ "publishDate": "2023-07-10",
+ "regType": "有限责任公司",
+ "taxCategory": "增值税",
+ "taxIdNumber": "91310000MA01******",
+ "taxpayerType": "一般纳税人",
+ "type": "国税"
+ },
+ {
+ "department": "浦东新区税务局",
+ "legalpersonName": "王某",
+ "location": "上海市浦东新区陆家嘴金融贸易区",
+ "name": "上海****贸易有限公司",
+ "newOwnTaxBalance": "0",
+ "ownTaxAmount": "156.40",
+ "ownTaxBalance": "156.40",
+ "personIdName": "201|居民身份证",
+ "personIdNumber": "******",
+ "publishDate": "2023-10-05",
+ "regType": "有限责任公司",
+ "taxCategory": "教育费附加",
+ "taxIdNumber": "91310000MA01******",
+ "taxpayerType": "一般纳税人",
+ "type": "地税"
+ }
+ ],
+ "total": 4
+ },
+ "pName": "王某",
+ "punishment_info": {
+ "items": [
+ {
+ "content": "责令停止违法行为,并处罚款人民币20万元",
+ "decisionDate": "2023-03-10",
+ "departmentName": "上海市生态环境局",
+ "evidence": "环境监测数据显示废水排放超出国家标准",
+ "legalPersonName": "李华",
+ "pecuniary": "200000",
+ "punishName": "上海智能制造股份有限公司",
+ "punishNumber": "沪环罚〔2023〕第0312号",
+ "punishStatus": "已执行",
+ "reason": "违反《中华人民共和国环境保护法》,超标排放污染物",
+ "remark": "",
+ "source": "生态环境局",
+ "type": "环境违法",
+ "typeSecond": "超标排放"
+ },
+ {
+ "content": "责令停产整顿,并处罚款人民币15万元",
+ "decisionDate": "2023-07-25",
+ "departmentName": "上海市应急管理局",
+ "evidence": "安全检查发现生产设备存在安全隐患",
+ "legalPersonName": "李华",
+ "pecuniary": "150000",
+ "punishName": "上海智能制造股份有限公司",
+ "punishNumber": "沪应急罚〔2023〕第0728号",
+ "punishStatus": "已执行",
+ "reason": "违反《安全生产法》相关规定,存在重大安全隐患",
+ "remark": "",
+ "source": "应急管理局",
+ "type": "安全生产",
+ "typeSecond": "安全隐患"
+ },
+ {
+ "content": "追缴税款并加收滞纳金,处罚款人民币8万元",
+ "decisionDate": "2023-11-12",
+ "departmentName": "上海市税务局",
+ "evidence": "税务稽查发现少申报收入",
+ "legalPersonName": "李华",
+ "pecuniary": "80000",
+ "punishName": "上海智能制造股份有限公司",
+ "punishNumber": "沪税稽罚〔2023〕第1115号",
+ "punishStatus": "已执行",
+ "reason": "违反《中华人民共和国税收征收管理法》,偷逃税款",
+ "remark": "",
+ "source": "税务局",
+ "type": "税务违法",
+ "typeSecond": "偷逃税款"
+ }
+ ],
+ "total": 3
+ },
+ "relationship": [
+ "sh",
+ "lp",
+ "tm"
+ ],
+ "stockHolderItem": {
+ "investDate": "",
+ "investRate": "100.0%",
+ "orgHolderName": "王某",
+ "orgHolderType": "自然人",
+ "subscriptAmt": 300
+ },
+ "tax_contravention": {
+ "items": [
+ {
+ "case_type": "税收异常非正常户",
+ "department": "国家税务总局上海市浦东新区税务局",
+ "id": 2745250,
+ "publish_time": "2023-05-20",
+ "taxpayer_name": "上海****贸易有限公司"
+ },
+ {
+ "case_type": "欠税公告",
+ "department": "国家税务总局上海市浦东新区税务局",
+ "id": 2745251,
+ "publish_time": "2023-11-10",
+ "taxpayer_name": "上海****贸易有限公司"
+ }
+ ],
+ "total": 2
+ }
+ },
+ {
+ "abnormal_info": {
+ "items": [
+ {
+ "putDate": "2023-09-05",
+ "putDepartment": "深圳市南山区市场监督管理局",
+ "putReason": "通过登记的住所或者经营场所无法联系的",
+ "removeDate": "2024-01-20",
+ "removeDepartment": "深圳市南山区市场监督管理局",
+ "removeReason": "已变更注册地址"
+ },
+ {
+ "putDate": "2023-11-12",
+ "putDepartment": "深圳市南山区市场监督管理局",
+ "putReason": "未按规定期限公示股权变更信息的",
+ "removeDate": "",
+ "removeDepartment": "",
+ "removeReason": ""
+ }
+ ],
+ "total": 2
+ },
+ "adminPenalty": [
+ {
+ "content": "",
+ "decisionDate": "2022-05-18",
+ "departmentName": "广州市****市场监督管理局",
+ "legalPersonName": "赵某",
+ "punishNumber": "穗市监罚字(2022)****号",
+ "reason": "生产不符合国家安全标准的产品",
+ "type": "罚款"
+ }
+ ],
+ "basicInfo": {
+ "apprdate": "2021-06-10",
+ "base": "gd",
+ "candate": "",
+ "city": "广州市",
+ "companyOrgType": "有限责任公司(自然人投资或控股)",
+ "creditCode": "91440100MA5******",
+ "district": "天河区",
+ "estiblishTime": "2018-09-25",
+ "industry": "制造业",
+ "industry_code": "C",
+ "legalPersonName": "赵某",
+ "name": "广州****制造有限公司",
+ "nic_code": "C3381",
+ "nic_name": "制造业-金属制品业-金属制品业-金属制品业",
+ "opscope": "金属制品、机械设备、五金产品的研发、生产、销售;货物进出口、技术进出口。",
+ "province": "广东省",
+ "reccap": 0,
+ "reccapcur": "人民币",
+ "regCapital": "800.000000万人民币",
+ "regCapitalCurrency": "人民币",
+ "regNumber": "440106******",
+ "regStatus": "存续",
+ "regorg": "广州市天河区市场监督管理局",
+ "revdate": "2021-06-10",
+ "staffList": {
+ "result": [
+ {
+ "name": "赵某",
+ "type": "2",
+ "typeJoin": [
+ "执行董事"
+ ]
+ }
+ ]
+ },
+ "type": "1"
+ },
+ "dishonestExecutedPerson": [],
+ "executedPerson": [],
+ "financing_history": {
+ "items": [
+ {
+ "companyName": "深圳新能源技术有限公司",
+ "date": null,
+ "investorName": "国投创新,中金资本",
+ "money": "8亿人民币",
+ "newsTitle": "深圳新能源完成8亿元D轮融资",
+ "newsUrl": "https://example.com/news4",
+ "pubTime": 1693497600000,
+ "round": "D轮",
+ "share": "10%",
+ "value": "80亿人民币"
+ },
+ {
+ "companyName": "深圳新能源技术有限公司",
+ "date": null,
+ "investorName": "比亚迪,宁德时代",
+ "money": "3.5亿人民币",
+ "newsTitle": "",
+ "newsUrl": "",
+ "pubTime": 1661961600000,
+ "round": "C轮",
+ "share": "15%",
+ "value": "23.3亿人民币"
+ },
+ {
+ "companyName": "深圳新能源技术有限公司",
+ "date": null,
+ "investorName": "深创投,达晨创投",
+ "money": "1.2亿人民币",
+ "newsTitle": "",
+ "newsUrl": "",
+ "pubTime": 1630425600000,
+ "round": "B轮",
+ "share": "20%",
+ "value": "6亿人民币"
+ }
+ ],
+ "total": 3
+ },
+ "fsource": "1",
+ "invest_history": {
+ "items": [
+ {
+ "alias": "新能源汽车",
+ "amount": null,
+ "base": "sz",
+ "business_scope": "新能源汽车整车制造;新能源汽车电附件销售;新能源汽车换电设施销售;充电桩销售;新能源汽车生产测试设备销售;汽车零配件批发;汽车零配件零售;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广。",
+ "category": "汽车制造业",
+ "creditCode": "91440300MA01I0J1K2",
+ "estiblishTime": 1614556800000,
+ "id": 43456789,
+ "legalPersonId": 2234567890,
+ "legalPersonName": "林峰",
+ "logo": "https://img5.tianyancha.com/logo/lll/example9.png@!f_200x200",
+ "name": "深圳新能源汽车制造有限公司",
+ "orgType": "有限责任公司(自然人投资或控股)",
+ "pencertileScore": 9123,
+ "percent": "40%",
+ "personType": 1,
+ "regCapital": "8000万人民币",
+ "regStatus": "存续",
+ "withdrawalTime": null
+ },
+ {
+ "alias": "储能电池",
+ "amount": null,
+ "base": "sz",
+ "business_scope": "电池制造;电池销售;新能源原动设备制造;新能源原动设备销售;储能技术服务;电力电子元器件制造;电力电子元器件销售;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广。",
+ "category": "电气机械和器材制造业",
+ "creditCode": "91440300MA01J1K2L3",
+ "estiblishTime": 1630425600000,
+ "id": 44567890,
+ "legalPersonId": 2245678901,
+ "legalPersonName": "周杰",
+ "logo": "https://img5.tianyancha.com/logo/lll/example10.png@!f_200x200",
+ "name": "深圳储能电池技术有限公司",
+ "orgType": "有限责任公司(自然人投资或控股)",
+ "pencertileScore": 8456,
+ "percent": "30%",
+ "personType": 1,
+ "regCapital": "5000万人民币",
+ "regStatus": "存续",
+ "withdrawalTime": null
+ },
+ {
+ "alias": "清洁能源",
+ "amount": null,
+ "base": "sz",
+ "business_scope": "太阳能发电技术服务;风力发电技术服务;生物质能技术服务;新兴能源技术研发;节能管理服务;合同能源管理;环保咨询服务;碳减排、碳转化、碳捕捉、碳封存技术研发。",
+ "category": "电力、热力、燃气及水生产和供应业",
+ "creditCode": "91440300MA01K2L3M4",
+ "estiblishTime": 1646092800000,
+ "id": 45678901,
+ "legalPersonId": 2256789012,
+ "legalPersonName": "吴涛",
+ "logo": "https://img5.tianyancha.com/logo/lll/example11.png@!f_200x200",
+ "name": "深圳清洁能源服务有限公司",
+ "orgType": "有限责任公司(自然人投资或控股)",
+ "pencertileScore": 7123,
+ "percent": "55%",
+ "personType": 1,
+ "regCapital": "2000万人民币",
+ "regStatus": "存续",
+ "withdrawalTime": null
+ }
+ ],
+ "total": 6
+ },
+ "lawsuitInfo": {
+ "entout": {
+ "data": {
+ "administrative": {
+ "cases": [
+ {
+ "c_ah": "(2022)粤01行初****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "广州****制造有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "原告"
+ },
+ {
+ "c_mc": "广州市****市场监督管理局",
+ "n_dsrlx": "机关团体",
+ "n_ssdw": "被告"
+ }
+ ],
+ "c_gkws_dsr": "原告广州****制造有限公司,住所地广州市天河区****路x号。法定代表人赵某,执行董事兼总经理。委托代理人陆某,广东****律师事务所律师。被告广州市****市场监督管理局,住所地广州市****区政府大楼。负责人张某,局长。委托代理人廖某,该局工作人员。",
+ "c_gkws_pjjg": "驳回原告广州****制造有限公司的诉讼请求。案件受理费50元,由原告广州****制造有限公司负担。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于广东省高级人民法院。",
+ "c_id": "r9s0t1u2v3w4x5y6z7a8b9c0d1e2f3g4",
+ "c_ssdy": "广东省",
+ "d_jarq": "2022-07-15",
+ "d_larq": "2022-06-10",
+ "n_ajbs": "o6p7q8r9s0t1u2v3w4x5y6z7a8b9c0d1",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "行政一审",
+ "n_crc": 4567890123,
+ "n_jaay": "行政管理",
+ "n_jaay_tree": "行政管理,工商行政管理,市场监督管理",
+ "n_jafs": "判决",
+ "n_jbfy": "广州市****人民法院",
+ "n_jbfy_cj": "中级人民法院",
+ "n_laay": "行政管理",
+ "n_pj_victory": "败诉",
+ "n_slcx": "一审",
+ "n_ssdw": "原告"
+ }
+ ],
+ "count": {
+ "area_stat": "广东省(1)",
+ "ay_stat": "行政管理(1)",
+ "count_beigao": 0,
+ "count_jie_beigao": 0,
+ "count_jie_total": 1,
+ "count_total": 1,
+ "jafs_stat": "判决(1)",
+ "larq_stat": "2022(1)"
+ }
+ },
+ "bankrupt": {
+ "cases": [
+ {
+ "c_ah": "(2023)粤01破申****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "广州****贸易有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "申请人"
+ },
+ {
+ "c_mc": "广州****制造有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被申请人"
+ }
+ ],
+ "c_gkws_dsr": "申请人广州****贸易有限公司,住所地广州市海珠区****路x号。法定代表人林某,董事长。委托代理人叶某,广东****律师事务所律师。被申请人广州****制造有限公司,住所地广州市天河区****路x号。法定代表人赵某,执行董事兼总经理。委托代理人何某,广东****律师事务所律师。",
+ "c_gkws_pjjg": "驳回申请人广州****贸易有限公司对被申请人广州****制造有限公司的破产清算申请。申请费5000元,由申请人广州****贸易有限公司负担。",
+ "c_id": "s0t1u2v3w4x5y6z7a8b9c0d1e2f3g4h5",
+ "c_ssdy": "广东省",
+ "d_jarq": "2023-08-15",
+ "d_larq": "2023-06-20",
+ "n_ajbs": "p7q8r9s0t1u2v3w4x5y6z7a8b9c0d1e2",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "破产清算",
+ "n_crc": 5678901234,
+ "n_jaay": "破产案件",
+ "n_jaay_tree": "破产案件,破产清算",
+ "n_jafs": "裁定",
+ "n_jbfy": "广州市****人民法院",
+ "n_jbfy_cj": "中级人民法院",
+ "n_laay": "破产案件",
+ "n_pj_victory": "胜诉",
+ "n_slcx": "破产",
+ "n_ssdw": "被申请人"
+ }
+ ],
+ "count": {
+ "area_stat": "广东省(1)",
+ "ay_stat": "破产案件(1)",
+ "count_beigao": 1,
+ "count_jie_beigao": 1,
+ "count_jie_total": 1,
+ "count_total": 1,
+ "jafs_stat": "裁定(1)",
+ "larq_stat": "2023(1)"
+ }
+ },
+ "cases_tree": {
+ "administrative": [
+ {
+ "c_ah": "(2022)粤01行初****号",
+ "case_type": 400,
+ "n_ajbs": "o6p7q8r9s0t1u2v3w4x5y6z7a8b9c0d1",
+ "stage_type": 1
+ }
+ ],
+ "bankrupt": [
+ {
+ "c_ah": "(2023)粤01破申****号",
+ "case_type": 600,
+ "n_ajbs": "p7q8r9s0t1u2v3w4x5y6z7a8b9c0d1e2",
+ "stage_type": 1
+ }
+ ],
+ "civil": [
+ {
+ "c_ah": "(2023)粤01民初****号",
+ "case_type": 300,
+ "n_ajbs": "d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0",
+ "stage_type": 1
+ }
+ ],
+ "criminal": [
+ {
+ "c_ah": "(2023)粤01刑初****号",
+ "case_type": 200,
+ "n_ajbs": "e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0t1",
+ "stage_type": 1
+ }
+ ],
+ "implement": [
+ {
+ "c_ah": "(2023)粤01执****号",
+ "case_type": 500,
+ "n_ajbs": "q8r9s0t1u2v3w4x5y6z7a8b9c0d1e2f3",
+ "stage_type": 1
+ }
+ ],
+ "preservation": [
+ {
+ "c_ah": "(2023)粤01财保****号",
+ "case_type": 700,
+ "n_ajbs": "r9s0t1u2v3w4x5y6z7a8b9c0d1e2f3g4",
+ "stage_type": 1
+ }
+ ]
+ },
+ "civil": {
+ "cases": [
+ {
+ "c_ah": "(2023)粤01民初****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "广州****制造有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被告"
+ },
+ {
+ "c_mc": "钱某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "原告"
+ }
+ ],
+ "c_gkws_dsr": "原告钱某,男,1983年4月12日生,汉族,住广州市越秀区****小区x号楼x号。委托代理人徐某,广东****律师事务所律师。被告广州****制造有限公司,住所地广州市天河区****路x号。法定代表人赵某,执行董事兼总经理。委托代理人周某,广东****律师事务所律师。",
+ "c_gkws_pjjg": "一、被告广州****制造有限公司于本判决生效之日起十日内向原告钱某支付承揽费250000元及违约金80000元;二、驳回原告钱某的其他诉讼请求。如果未按本判决指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百六十条规定,加倍支付迟延履行期间的债务利息。案件受理费7800元,由原告钱某负担2800元,被告广州****制造有限公司负担5000元。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于广东省高级人民法院。",
+ "c_id": "c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8",
+ "c_ssdy": "广东省",
+ "d_jarq": "2023-11-25",
+ "d_larq": "2023-09-30",
+ "n_ajbs": "d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "民事一审",
+ "n_crc": 2345678901,
+ "n_jaay": "合同、准合同纠纷",
+ "n_jaay_tree": "合同、准合同纠纷,合同纠纷,承揽合同纠纷",
+ "n_jafs": "判决",
+ "n_jbfy": "广州市****人民法院",
+ "n_jbfy_cj": "中级人民法院",
+ "n_laay": "合同、准合同纠纷",
+ "n_pj_victory": "部分胜诉",
+ "n_qsbdje": 300000,
+ "n_qsbdje_level": 18,
+ "n_slcx": "一审",
+ "n_ssdw": "被告"
+ }
+ ],
+ "count": {
+ "area_stat": "广东省(1)",
+ "ay_stat": "合同、准合同纠纷(1)",
+ "count_beigao": 1,
+ "count_jie_beigao": 1,
+ "count_jie_total": 1,
+ "count_total": 1,
+ "jafs_stat": "判决(1)",
+ "larq_stat": "2023(1)",
+ "money_beigao": 1,
+ "money_jie_beigao": 1,
+ "money_jie_total": 1,
+ "money_total": 1
+ }
+ },
+ "count": {
+ "area_stat": "广东省(6)",
+ "ay_stat": "合同、准合同纠纷(1),破坏社会主义市场经济秩序罪(1),行政管理(1),破产案件(1),执行案件(1),财产保全(1)",
+ "count_beigao": 3,
+ "count_jie_beigao": 3,
+ "count_jie_total": 6,
+ "count_total": 6,
+ "jafs_stat": "判决(2),有期徒刑(1),裁定(2),执行(1)",
+ "larq_stat": "2022(1),2023(5)",
+ "money_beigao": 1,
+ "money_jie_beigao": 1,
+ "money_jie_total": 1,
+ "money_total": 1
+ },
+ "crc": 3456789012,
+ "criminal": {
+ "cases": [
+ {
+ "c_ah": "(2023)粤01刑初****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "广州****制造有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被告单位"
+ },
+ {
+ "c_mc": "赵某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "被告人"
+ }
+ ],
+ "c_gkws_dsr": "公诉机关广州市****区人民检察院。被告单位广州****制造有限公司,住所地广州市天河区****路x号。被告人赵某,男,1976年5月15日生,汉族,广东省人,大学文化,系广州****制造有限公司法定代表人。因涉嫌犯合同诈骗罪,于2023年9月10日被广州市公安局刑事拘留,同年10月15日被逮捕,现羁押于广州市第一看守所。辩护人冯某,广东****律师事务所律师。",
+ "c_gkws_pjjg": "一、被告单位广州****制造有限公司犯合同诈骗罪,处罚金人民币六十万元;二、被告人赵某犯合同诈骗罪,判处有期徒刑三年,并处罚金人民币十五万元。如不服本判决,可在接到判决书的第二日起十日内,通过本院或者直接向广东省高级人民法院提出上诉。被告人如果提出上诉,可以委托辩护人提出上诉状。",
+ "c_id": "o6p7q8r9s0t1u2v3w4x5y6z7a8b9c0d1",
+ "c_ssdy": "广东省",
+ "d_jarq": "2023-12-15",
+ "d_larq": "2023-10-20",
+ "n_ajbs": "e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0t1",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "刑事一审",
+ "n_crc": 4567890123,
+ "n_jaay": "破坏社会主义市场经济秩序罪",
+ "n_jaay_tree": "破坏社会主义市场经济秩序罪,扰乱市场秩序罪,合同诈骗罪",
+ "n_jafs": "有期徒刑",
+ "n_jbfy": "广州市****人民法院",
+ "n_jbfy_cj": "中级人民法院",
+ "n_laay": "破坏社会主义市场经济秩序罪",
+ "n_pj_victory": "败诉",
+ "n_slcx": "一审",
+ "n_ssdw": "被告单位"
+ }
+ ],
+ "count": {
+ "area_stat": "广东省(1)",
+ "ay_stat": "破坏社会主义市场经济秩序罪(1)",
+ "count_beigao": 0,
+ "count_jie_beigao": 0,
+ "count_jie_total": 1,
+ "count_total": 1,
+ "jafs_stat": "有期徒刑(1)",
+ "larq_stat": "2023(1)",
+ "money_beigao": 0,
+ "money_jie_beigao": 0,
+ "money_jie_total": 0,
+ "money_total": 0
+ }
+ },
+ "implement": {
+ "cases": [
+ {
+ "c_ah": "(2023)粤01执****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "钱某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "申请执行人"
+ },
+ {
+ "c_mc": "广州****制造有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被执行人"
+ }
+ ],
+ "c_gkws_dsr": "申请执行人钱某,男,1983年4月12日生,汉族,住广州市越秀区****小区x号楼x号。委托代理人徐某,广东****律师事务所律师。被执行人广州****制造有限公司,住所地广州市天河区****路x号。法定代表人赵某,执行董事兼总经理。",
+ "c_gkws_pjjg": "一、被执行人广州****制造有限公司应向申请执行人钱某支付承揽费250000元、违约金80000元及迟延履行期间的利息;二、若被执行人未按时履行上述义务,本院将依法评估、拍卖其名下的财产,所得价款优先清偿上述债务。",
+ "c_id": "t1u2v3w4x5y6z7a8b9c0d1e2f3g4h5i6",
+ "c_ssdy": "广东省",
+ "d_jarq": "2023-12-22",
+ "d_larq": "2023-12-10",
+ "n_ajbs": "q8r9s0t1u2v3w4x5y6z7a8b9c0d1e2f3",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "执行案件",
+ "n_crc": 6789012345,
+ "n_jaay": "执行案件",
+ "n_jaay_tree": "执行案件,执行实施类",
+ "n_jafs": "执行",
+ "n_jbfy": "广州市****人民法院",
+ "n_jbfy_cj": "中级人民法院",
+ "n_laay": "执行案件",
+ "n_slcx": "执行",
+ "n_ssdw": "被执行人"
+ }
+ ],
+ "count": {
+ "area_stat": "广东省(1)",
+ "count_total": 1
+ }
+ },
+ "preservation": {
+ "cases": [
+ {
+ "c_ah": "(2023)粤01财保****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "钱某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "申请人"
+ },
+ {
+ "c_mc": "广州****制造有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被申请人"
+ }
+ ],
+ "c_gkws_dsr": "申请人钱某,男,1983年4月12日生,汉族,住广州市越秀区****小区x号楼x号。委托代理人徐某,广东****律师事务所律师。被申请人广州****制造有限公司,住所地广州市天河区****路x号。法定代表人赵某,执行董事兼总经理。",
+ "c_gkws_pjjg": "冻结被申请人广州****制造有限公司名下银行账户(账号:****)中的存款350000元,冻结期限为一年。",
+ "c_id": "u2v3w4x5y6z7a8b9c0d1e2f3g4h5i6j7",
+ "c_ssdy": "广东省",
+ "d_jarq": "2023-09-20",
+ "d_larq": "2023-09-15",
+ "n_ajbs": "r9s0t1u2v3w4x5y6z7a8b9c0d1e2f3g4",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "财产保全",
+ "n_crc": 7890123456,
+ "n_jaay": "财产保全",
+ "n_jaay_tree": "财产保全,诉前财产保全",
+ "n_jafs": "裁定",
+ "n_jbfy": "广州市****人民法院",
+ "n_jbfy_cj": "中级人民法院",
+ "n_laay": "财产保全",
+ "n_slcx": "保全",
+ "n_ssdw": "被申请人"
+ }
+ ],
+ "count": {
+ "area_stat": "广东省(1)",
+ "count_total": 1
+ }
+ }
+ }
+ },
+ "sxbzxr": {
+ "data": {
+ "sxbzxr": []
+ }
+ },
+ "xgbzxr": {
+ "data": {
+ "xgbzxr": []
+ }
+ }
+ },
+ "orgName": "广州****制造有限公司",
+ "own_tax": {
+ "items": [
+ {
+ "department": "天河区税务局",
+ "legalpersonName": "赵某",
+ "location": "广州市天河区珠江新城",
+ "name": "广州****制造有限公司",
+ "newOwnTaxBalance": "0",
+ "ownTaxAmount": "456.80",
+ "ownTaxBalance": "456.80",
+ "personIdName": "201|居民身份证",
+ "personIdNumber": "******",
+ "publishDate": "2023-02-28",
+ "regType": "有限责任公司",
+ "taxCategory": "企业所得税",
+ "taxIdNumber": "91440100MA01******",
+ "taxpayerType": "一般纳税人",
+ "type": "国税"
+ },
+ {
+ "department": "天河区税务局",
+ "legalpersonName": "赵某",
+ "location": "广州市天河区珠江新城",
+ "name": "广州****制造有限公司",
+ "newOwnTaxBalance": "0",
+ "ownTaxAmount": "234.50",
+ "ownTaxBalance": "234.50",
+ "personIdName": "201|居民身份证",
+ "personIdNumber": "******",
+ "publishDate": "2023-08-15",
+ "regType": "有限责任公司",
+ "taxCategory": "城市维护建设税",
+ "taxIdNumber": "91440100MA01******",
+ "taxpayerType": "一般纳税人",
+ "type": "地税"
+ }
+ ],
+ "total": 2
+ },
+ "pName": "赵某",
+ "punishment_info": {
+ "items": [
+ {
+ "content": "责令召回不合格产品,并处罚款人民币12万元",
+ "decisionDate": "2024-02-18",
+ "departmentName": "深圳市市场监督管理局",
+ "evidence": "产品质量抽检不合格",
+ "legalPersonName": "王强",
+ "pecuniary": "120000",
+ "punishName": "深圳新能源技术有限公司",
+ "punishNumber": "深市监罚〔2024〕第0220号",
+ "punishStatus": "已执行",
+ "reason": "违反《产品质量法》,生产销售不合格产品",
+ "remark": "",
+ "source": "市场监督管理局",
+ "type": "产品质量",
+ "typeSecond": "产品不合格"
+ }
+ ],
+ "total": 1
+ },
+ "relationship": [
+ "sh",
+ "lp"
+ ],
+ "stockHolderItem": {
+ "investDate": "",
+ "investRate": "100.0%",
+ "orgHolderName": "赵某",
+ "orgHolderType": "自然人",
+ "subscriptAmt": 800
+ },
+ "tax_contravention": {
+ "items": [],
+ "total": 0
+ }
+ },
+ {
+ "abnormal_info": {
+ "items": [
+ {
+ "putDate": "2024-06-30",
+ "putDepartment": "广州市天河区市场监督管理局",
+ "putReason": "未依照《企业信息公示暂行条例》第八条规定的期限公示年度报告的",
+ "removeDate": "",
+ "removeDepartment": "",
+ "removeReason": ""
+ },
+ {
+ "putDate": "2023-12-20",
+ "putDepartment": "广州市天河区市场监督管理局",
+ "putReason": "通过登记的住所或者经营场所无法联系的",
+ "removeDate": "2024-05-15",
+ "removeDepartment": "广州市天河区市场监督管理局",
+ "removeReason": "已更新联系方式"
+ },
+ {
+ "putDate": "2024-02-28",
+ "putDepartment": "广州市天河区市场监督管理局",
+ "putReason": "未按规定期限公示即时信息的",
+ "removeDate": "",
+ "removeDepartment": "",
+ "removeReason": ""
+ },
+ {
+ "putDate": "2023-05-18",
+ "putDepartment": "广州市天河区市场监督管理局",
+ "putReason": "未按规定期限公示企业投资信息的",
+ "removeDate": "2023-10-10",
+ "removeDepartment": "广州市天河区市场监督管理局",
+ "removeReason": "已补充公示投资信息"
+ }
+ ],
+ "total": 4
+ },
+ "adminPenalty": [
+ {
+ "content": "",
+ "decisionDate": "2023-03-15",
+ "departmentName": "深圳市****市场监督管理局",
+ "legalPersonName": "陈某",
+ "punishNumber": "深市监罚字(2023)****号",
+ "reason": "产品质量不合格",
+ "type": "罚款"
+ }
+ ],
+ "basicInfo": {
+ "apprdate": "2023-04-10",
+ "base": "gd",
+ "candate": "",
+ "city": "深圳市",
+ "companyOrgType": "有限责任公司(自然人投资或控股)",
+ "creditCode": "91440300MA5******",
+ "district": "南山区",
+ "estiblishTime": "2017-11-08",
+ "industry": "计算机、通信和其他电子设备制造业",
+ "industry_code": "C",
+ "legalPersonName": "陈某",
+ "name": "深圳****电子科技有限公司",
+ "nic_code": "C3969",
+ "nic_name": "计算机、通信和其他电子设备制造业-其他电子设备制造-其他电子设备制造",
+ "opscope": "电子产品、计算机软硬件、通信设备的研发、生产与销售;电子元器件、集成电路的设计、研发、销售;国内贸易;经营进出口业务。",
+ "province": "广东省",
+ "reccap": 0,
+ "reccapcur": "人民币",
+ "regCapital": "1000.000000万人民币",
+ "regCapitalCurrency": "人民币",
+ "regNumber": "440301******",
+ "regStatus": "存续",
+ "regorg": "深圳市市场监督管理局",
+ "revdate": "2023-04-10",
+ "staffList": {
+ "result": [
+ {
+ "name": "陈某",
+ "type": "2",
+ "typeJoin": [
+ "执行董事"
+ ]
+ },
+ {
+ "name": "林某",
+ "type": "3",
+ "typeJoin": [
+ "总经理"
+ ]
+ }
+ ]
+ },
+ "type": "1"
+ },
+ "dishonestExecutedPerson": [
+ {
+ "courtName": "深圳市南山区人民法院",
+ "dishonestExeUnperformPart": "全部未履行",
+ "exeDuty": "向申请人支付货款1200000元及逾期付款损失",
+ "gistId": "(2023)粤0305执恢****号",
+ "gistUnit": "深圳市南山区人民法院",
+ "iname": "深圳****电子科技有限公司",
+ "performedPart": "暂无",
+ "province": "广东",
+ "publicDate": "2023-10-15",
+ "regDate": "2023-10-10",
+ "unperformedPart": "全部未履行"
+ }
+ ],
+ "executedPerson": [
+ {
+ "caseCode": "(2023)粤0305执****号",
+ "courtName": "深圳市南山区人民法院",
+ "execMoney": 1200000,
+ "iname": "深圳****电子科技有限公司",
+ "orgNo": "91440300MA5******",
+ "province": "广东",
+ "publishDate": "2023-09-20"
+ }
+ ],
+ "financing_history": {
+ "items": [
+ {
+ "companyName": "广州生物医药有限公司",
+ "date": null,
+ "investorName": "公开发行",
+ "money": "12亿人民币",
+ "newsTitle": "广州生物医药成功在港上市",
+ "newsUrl": "https://example.com/ipo2",
+ "pubTime": 1698768000000,
+ "round": "IPO上市",
+ "share": "",
+ "value": ""
+ },
+ {
+ "companyName": "广州生物医药有限公司",
+ "date": null,
+ "investorName": "高瓴资本,云锋基金",
+ "money": "5亿人民币",
+ "newsTitle": "",
+ "newsUrl": "",
+ "pubTime": 1667232000000,
+ "round": "C轮",
+ "share": "12%",
+ "value": "41.7亿人民币"
+ },
+ {
+ "companyName": "广州生物医药有限公司",
+ "date": null,
+ "investorName": "君联资本,联想之星",
+ "money": "2.8亿人民币",
+ "newsTitle": "",
+ "newsUrl": "",
+ "pubTime": 1635696000000,
+ "round": "B轮",
+ "share": "18%",
+ "value": "15.6亿人民币"
+ },
+ {
+ "companyName": "广州生物医药有限公司",
+ "date": null,
+ "investorName": "礼来亚洲基金,药明康德",
+ "money": "1.5亿人民币",
+ "newsTitle": "",
+ "newsUrl": "",
+ "pubTime": 1604160000000,
+ "round": "A轮",
+ "share": "25%",
+ "value": "6亿人民币"
+ },
+ {
+ "companyName": "广州生物医药有限公司",
+ "date": null,
+ "investorName": "奥博资本",
+ "money": "6000万人民币",
+ "newsTitle": "",
+ "newsUrl": "",
+ "pubTime": 1572624000000,
+ "round": "Pre-A轮",
+ "share": "20%",
+ "value": "3亿人民币"
+ },
+ {
+ "companyName": "广州生物医药有限公司",
+ "date": null,
+ "investorName": "广州科技创投",
+ "money": "1000万人民币",
+ "newsTitle": "",
+ "newsUrl": "",
+ "pubTime": 1541088000000,
+ "round": "天使轮",
+ "share": "12%",
+ "value": "8333万人民币"
+ }
+ ],
+ "total": 6
+ },
+ "fsource": "1",
+ "invest_history": {
+ "items": [
+ {
+ "alias": "康复医疗",
+ "amount": null,
+ "base": "gz",
+ "business_scope": "医药制造;药品生产;药品批发;药品零售;医疗器械生产;医疗器械经营;第二类医疗器械销售;第三类医疗器械经营;保健食品生产;保健食品销售;食品生产;食品销售;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广。",
+ "category": "医药制造业",
+ "creditCode": "91440101MA01L3M4N5",
+ "estiblishTime": 1622505600000,
+ "id": 46789012,
+ "legalPersonId": 2267890123,
+ "legalPersonName": "黄医生",
+ "logo": "https://img5.tianyancha.com/logo/lll/example12.png@!f_200x200",
+ "name": "广州康复医疗器械有限公司",
+ "orgType": "有限责任公司(自然人投资或控股)",
+ "pencertileScore": 9567,
+ "percent": "60%",
+ "personType": 1,
+ "regCapital": "1亿人民币",
+ "regStatus": "存续",
+ "withdrawalTime": null
+ },
+ {
+ "alias": "生物研发",
+ "amount": null,
+ "base": "gz",
+ "business_scope": "生物技术推广服务;生物技术开发服务;医学研究和试验发展;生物药品制造;化学药品制剂制造;中成药生产;保健食品制造;医疗器械技术推广服务;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广。",
+ "category": "医药制造业",
+ "creditCode": "91440101MA01M4N5O6",
+ "estiblishTime": 1638316800000,
+ "id": 47890123,
+ "legalPersonId": 2278901234,
+ "legalPersonName": "邓研究员",
+ "logo": "https://img5.tianyancha.com/logo/lll/example13.png@!f_200x200",
+ "name": "广州生物技术研发中心有限公司",
+ "orgType": "有限责任公司(自然人投资或控股)",
+ "pencertileScore": 8234,
+ "percent": "45%",
+ "personType": 1,
+ "regCapital": "6000万人民币",
+ "regStatus": "存续",
+ "withdrawalTime": null
+ }
+ ],
+ "total": 4
+ },
+ "lawsuitInfo": {
+ "entout": {
+ "data": {
+ "administrative": {
+ "cases": [
+ {
+ "c_ah": "(2023)粤03行初****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "深圳****电子科技有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "原告"
+ },
+ {
+ "c_mc": "深圳市****市场监督管理局",
+ "n_dsrlx": "机关团体",
+ "n_ssdw": "被告"
+ }
+ ],
+ "c_gkws_dsr": "原告深圳****电子科技有限公司,住所地深圳市南山区****路x号。法定代表人陈某,执行董事。委托代理人谢某,广东****律师事务所律师。被告深圳市****市场监督管理局,住所地深圳市福田区****路x号。负责人王某,局长。委托代理人梁某,该局工作人员。",
+ "c_gkws_pjjg": "一、确认被告深圳市****市场监督管理局于2023年3月15日作出的深市监罚字(2023)****号《行政处罚决定书》违法;二、被告深圳市****市场监督管理局于本判决生效之日起六十日内重新作出处理决定。案件受理费100元,由被告深圳市****市场监督管理局负担。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于广东省高级人民法院。",
+ "c_id": "v3w4x5y6z7a8b9c0d1e2f3g4h5i6j7k8",
+ "c_ssdy": "广东省",
+ "d_jarq": "2023-05-20",
+ "d_larq": "2023-04-15",
+ "n_ajbs": "s0t1u2v3w4x5y6z7a8b9c0d1e2f3g4h5",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "行政一审",
+ "n_crc": 8901234567,
+ "n_jaay": "行政管理",
+ "n_jaay_tree": "行政管理,工商行政管理,产品质量监督管理",
+ "n_jafs": "判决",
+ "n_jbfy": "深圳市南山区人民法院",
+ "n_jbfy_cj": "基层人民法院",
+ "n_laay": "行政管理",
+ "n_pj_victory": "胜诉",
+ "n_slcx": "一审",
+ "n_ssdw": "原告"
+ }
+ ],
+ "count": {
+ "area_stat": "广东省(1)",
+ "ay_stat": "行政管理(1)",
+ "count_beigao": 0,
+ "count_jie_beigao": 0,
+ "count_jie_total": 1,
+ "count_total": 1,
+ "jafs_stat": "判决(1)",
+ "larq_stat": "2023(1)"
+ }
+ },
+ "bankrupt": {
+ "cases": [],
+ "count": {
+ "area_stat": "广东省(0)",
+ "count_total": 0
+ }
+ },
+ "cases_tree": {
+ "administrative": [
+ {
+ "c_ah": "(2023)粤03行初****号",
+ "case_type": 400,
+ "n_ajbs": "s0t1u2v3w4x5y6z7a8b9c0d1e2f3g4h5",
+ "stage_type": 1
+ }
+ ],
+ "bankrupt": [],
+ "civil": [
+ {
+ "c_ah": "(2023)粤0305民初****号",
+ "case_type": 300,
+ "n_ajbs": "t1u2v3w4x5y6z7a8b9c0d1e2f3g4h5i6",
+ "stage_type": 1
+ },
+ {
+ "c_ah": "(2023)粤03民终****号",
+ "case_type": 300,
+ "n_ajbs": "u2v3w4x5y6z7a8b9c0d1e2f3g4h5i6j7",
+ "stage_type": 2
+ }
+ ],
+ "criminal": [
+ {
+ "c_ah": "(2023)粤03刑初****号",
+ "case_type": 200,
+ "n_ajbs": "v3w4x5y6z7a8b9c0d1e2f3g4h5i6j7k8",
+ "stage_type": 1
+ }
+ ],
+ "implement": [
+ {
+ "c_ah": "(2023)粤0305执****号",
+ "case_type": 500,
+ "n_ajbs": "w4x5y6z7a8b9c0d1e2f3g4h5i6j7k8l9",
+ "stage_type": 1
+ },
+ {
+ "c_ah": "(2023)粤0305执恢****号",
+ "case_type": 500,
+ "n_ajbs": "x5y6z7a8b9c0d1e2f3g4h5i6j7k8l9m0",
+ "stage_type": 1
+ }
+ ],
+ "preservation": [
+ {
+ "c_ah": "(2023)粤0305财保****号",
+ "case_type": 700,
+ "n_ajbs": "y6z7a8b9c0d1e2f3g4h5i6j7k8l9m0n1",
+ "stage_type": 1
+ }
+ ]
+ },
+ "civil": {
+ "cases": [
+ {
+ "c_ah": "(2023)粤0305民初****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "深圳****电子科技有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被告"
+ },
+ {
+ "c_mc": "广州****电子科技有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "原告"
+ }
+ ],
+ "c_gkws_dsr": "原告广州****电子科技有限公司,住所地广州市天河区****路x号。法定代表人吴某,执行董事兼总经理。委托代理人曾某,广东****律师事务所律师。被告深圳****电子科技有限公司,住所地深圳市南山区****路x号。法定代表人陈某,执行董事。委托代理人黄某,广东****律师事务所律师。",
+ "c_gkws_pjjg": "一、被告深圳****电子科技有限公司于本判决生效之日起十日内向原告广州****电子科技有限公司支付货款1200000元;二、被告深圳****电子科技有限公司于本判决生效之日起十日内向原告广州****电子科技有限公司支付逾期付款损失(以未付货款1200000元为基数,按照全国银行间同业拆借中心公布的一年期贷款市场报价利率自2023年1月15日起计算至实际付清之日止);三、驳回原告广州****电子科技有限公司的其他诉讼请求。如果未按本判决指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百六十条规定,加倍支付迟延履行期间的债务利息。案件受理费16800元,由原告广州****电子科技有限公司负担3800元,被告深圳****电子科技有限公司负担13000元。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于深圳市中级人民法院。",
+ "c_id": "w4x5y6z7a8b9c0d1e2f3g4h5i6j7k8l9",
+ "c_ssdy": "广东省",
+ "d_jarq": "2023-07-25",
+ "d_larq": "2023-05-20",
+ "n_ajbs": "t1u2v3w4x5y6z7a8b9c0d1e2f3g4h5i6",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "民事一审",
+ "n_crc": 9012345678,
+ "n_jaay": "合同、准合同纠纷",
+ "n_jaay_tree": "合同、准合同纠纷,合同纠纷,买卖合同纠纷",
+ "n_jafs": "判决",
+ "n_jbfy": "深圳市南山区人民法院",
+ "n_jbfy_cj": "基层人民法院",
+ "n_laay": "合同、准合同纠纷",
+ "n_pj_victory": "败诉",
+ "n_qsbdje": 1200000,
+ "n_qsbdje_level": 20,
+ "n_slcx": "一审",
+ "n_ssdw": "被告"
+ },
+ {
+ "c_ah": "(2023)粤03民终****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "深圳****电子科技有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "上诉人"
+ },
+ {
+ "c_mc": "广州****电子科技有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被上诉人"
+ }
+ ],
+ "c_gkws_dsr": "上诉人(原审被告)深圳****电子科技有限公司,住所地深圳市南山区****路x号。法定代表人陈某,执行董事。委托代理人黄某,广东****律师事务所律师。被上诉人(原审原告)广州****电子科技有限公司,住所地广州市天河区****路x号。法定代表人吴某,执行董事兼总经理。委托代理人曾某,广东****律师事务所律师。",
+ "c_gkws_pjjg": "驳回上诉,维持原判。二审案件受理费16800元,由上诉人深圳****电子科技有限公司负担。本判决为终审判决。",
+ "c_id": "x5y6z7a8b9c0d1e2f3g4h5i6j7k8l9m0",
+ "c_ssdy": "广东省",
+ "d_jarq": "2023-09-10",
+ "d_larq": "2023-08-15",
+ "n_ajbs": "u2v3w4x5y6z7a8b9c0d1e2f3g4h5i6j7",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "民事二审",
+ "n_crc": 1234567890,
+ "n_jaay": "合同、准合同纠纷",
+ "n_jaay_tree": "合同、准合同纠纷,合同纠纷,买卖合同纠纷",
+ "n_jafs": "维持",
+ "n_jbfy": "深圳市中级人民法院",
+ "n_jbfy_cj": "中级人民法院",
+ "n_laay": "合同、准合同纠纷",
+ "n_pj_victory": "败诉",
+ "n_qsbdje": 1200000,
+ "n_qsbdje_level": 20,
+ "n_slcx": "二审",
+ "n_ssdw": "上诉人"
+ }
+ ],
+ "count": {
+ "area_stat": "广东省(2)",
+ "ay_stat": "合同、准合同纠纷(2)",
+ "count_beigao": 1,
+ "count_jie_beigao": 1,
+ "count_jie_total": 2,
+ "count_total": 2,
+ "jafs_stat": "判决(1),维持(1)",
+ "larq_stat": "2023(2)",
+ "money_beigao": 1,
+ "money_jie_beigao": 1,
+ "money_jie_total": 2,
+ "money_total": 2
+ }
+ },
+ "count": {
+ "area_stat": "广东省(7)",
+ "ay_stat": "合同、准合同纠纷(2),行政管理(1),生产、销售伪劣产品罪(1),执行案件(2),财产保全(1)",
+ "count_beigao": 2,
+ "count_jie_beigao": 2,
+ "count_jie_total": 7,
+ "count_total": 7,
+ "jafs_stat": "判决(2),维持(1),有期徒刑(1),执行(2),裁定(1)",
+ "larq_stat": "2023(7)",
+ "money_beigao": 1,
+ "money_jie_beigao": 1,
+ "money_jie_total": 2,
+ "money_total": 2
+ },
+ "crc": 9012345678,
+ "criminal": {
+ "cases": [
+ {
+ "c_ah": "(2023)粤03刑初****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "深圳****电子科技有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被告单位"
+ },
+ {
+ "c_mc": "陈某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "被告人"
+ },
+ {
+ "c_mc": "林某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "被告人"
+ }
+ ],
+ "c_gkws_dsr": "公诉机关深圳市****区人民检察院。被告单位深圳****电子科技有限公司,住所地深圳市南山区****路x号。被告人陈某,男,1978年3月25日生,汉族,广东省人,大学文化,系深圳****电子科技有限公司法定代表人。因涉嫌犯生产、销售伪劣产品罪,于2023年6月10日被深圳市公安局刑事拘留,同年7月15日被逮捕,现羁押于深圳市第二看守所。辩护人孙某,广东****律师事务所律师。被告人林某,男,1980年5月18日生,汉族,广东省人,大学文化,系深圳****电子科技有限公司总经理。因涉嫌犯生产、销售伪劣产品罪,于2023年6月10日被深圳市公安局刑事拘留,同年7月15日被逮捕,现羁押于深圳市第二看守所。辩护人钟某,广东****律师事务所律师。",
+ "c_gkws_pjjg": "一、被告单位深圳****电子科技有限公司犯生产、销售伪劣产品罪,处罚金人民币一百万元;二、被告人陈某犯生产、销售伪劣产品罪,判处有期徒刑四年,并处罚金人民币二十万元;三、被告人林某犯生产、销售伪劣产品罪,判处有期徒刑三年,并处罚金人民币十万元。如不服本判决,可在接到判决书的第二日起十日内,通过本院或者直接向广东省高级人民法院提出上诉。被告人如果提出上诉,可以委托辩护人提出上诉状。",
+ "c_id": "y6z7a8b9c0d1e2f3g4h5i6j7k8l9m0n1",
+ "c_ssdy": "广东省",
+ "d_jarq": "2023-10-25",
+ "d_larq": "2023-08-20",
+ "n_ajbs": "v3w4x5y6z7a8b9c0d1e2f3g4h5i6j7k8",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "刑事一审",
+ "n_crc": 2345678901,
+ "n_jaay": "生产、销售伪劣产品罪",
+ "n_jaay_tree": "破坏社会主义市场经济秩序罪,生产、销售伪劣产品罪",
+ "n_jafs": "有期徒刑",
+ "n_jbfy": "深圳市中级人民法院",
+ "n_jbfy_cj": "中级人民法院",
+ "n_laay": "生产、销售伪劣产品罪",
+ "n_pj_victory": "败诉",
+ "n_slcx": "一审",
+ "n_ssdw": "被告单位"
+ }
+ ],
+ "count": {
+ "area_stat": "广东省(1)",
+ "ay_stat": "生产、销售伪劣产品罪(1)",
+ "count_beigao": 0,
+ "count_jie_beigao": 0,
+ "count_jie_total": 1,
+ "count_total": 1,
+ "jafs_stat": "有期徒刑(1)",
+ "larq_stat": "2023(1)",
+ "money_beigao": 0,
+ "money_jie_beigao": 0,
+ "money_jie_total": 0,
+ "money_total": 0
+ }
+ },
+ "implement": {
+ "cases": [
+ {
+ "c_ah": "(2023)粤0305执****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "广州****电子科技有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "申请执行人"
+ },
+ {
+ "c_mc": "深圳****电子科技有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被执行人"
+ }
+ ],
+ "c_gkws_dsr": "申请执行人广州****电子科技有限公司,住所地广州市天河区****路x号。法定代表人吴某,执行董事兼总经理。委托代理人曾某,广东****律师事务所律师。被执行人深圳****电子科技有限公司,住所地深圳市南山区****路x号。法定代表人陈某,执行董事。",
+ "c_gkws_pjjg": "一、被执行人深圳****电子科技有限公司应向申请执行人广州****电子科技有限公司支付货款1200000元及逾期付款损失;二、若被执行人未按时履行上述义务,本院将依法评估、拍卖其名下的财产,所得价款优先清偿上述债务。",
+ "c_id": "z7a8b9c0d1e2f3g4h5i6j7k8l9m0n1o2",
+ "c_ssdy": "广东省",
+ "d_jarq": "2023-10-10",
+ "d_larq": "2023-09-20",
+ "n_ajbs": "w4x5y6z7a8b9c0d1e2f3g4h5i6j7k8l9",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "执行案件",
+ "n_crc": 3456789012,
+ "n_jaay": "执行案件",
+ "n_jaay_tree": "执行案件,执行实施类",
+ "n_jafs": "执行",
+ "n_jbfy": "深圳市南山区人民法院",
+ "n_jbfy_cj": "基层人民法院",
+ "n_laay": "执行案件",
+ "n_slcx": "执行",
+ "n_ssdw": "被执行人"
+ },
+ {
+ "c_ah": "(2023)粤0305执恢****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "广州****电子科技有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "申请执行人"
+ },
+ {
+ "c_mc": "深圳****电子科技有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被执行人"
+ }
+ ],
+ "c_gkws_dsr": "申请执行人广州****电子科技有限公司,住所地广州市天河区****路x号。法定代表人吴某,执行董事兼总经理。委托代理人曾某,广东****律师事务所律师。被执行人深圳****电子科技有限公司,住所地深圳市南山区****路x号。法定代表人陈某,执行董事。",
+ "c_gkws_pjjg": "将被执行人深圳****电子科技有限公司纳入失信被执行人名单,期限为三年,自本决定生效之日起至2026年10月15日止。",
+ "c_id": "a8b9c0d1e2f3g4h5i6j7k8l9m0n1o2p3",
+ "c_ssdy": "广东省",
+ "d_jarq": "2023-10-15",
+ "d_larq": "2023-10-10",
+ "n_ajbs": "x5y6z7a8b9c0d1e2f3g4h5i6j7k8l9m0",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "执行案件",
+ "n_crc": 4567890123,
+ "n_jaay": "执行案件",
+ "n_jaay_tree": "执行案件,执行实施类",
+ "n_jafs": "执行",
+ "n_jbfy": "深圳市南山区人民法院",
+ "n_jbfy_cj": "基层人民法院",
+ "n_laay": "执行案件",
+ "n_slcx": "执行",
+ "n_ssdw": "被执行人"
+ }
+ ],
+ "count": {
+ "area_stat": "广东省(2)",
+ "count_total": 2
+ }
+ },
+ "preservation": {
+ "cases": [
+ {
+ "c_ah": "(2023)粤0305财保****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "广州****电子科技有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "申请人"
+ },
+ {
+ "c_mc": "深圳****电子科技有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被申请人"
+ }
+ ],
+ "c_gkws_dsr": "申请人广州****电子科技有限公司,住所地广州市天河区****路x号。法定代表人吴某,执行董事兼总经理。委托代理人曾某,广东****律师事务所律师。被申请人深圳****电子科技有限公司,住所地深圳市南山区****路x号。法定代表人陈某,执行董事。",
+ "c_gkws_pjjg": "冻结被申请人深圳****电子科技有限公司名下银行账户(账号:****)中的存款1200000元,冻结期限为一年。",
+ "c_id": "b9c0d1e2f3g4h5i6j7k8l9m0n1o2p3q4",
+ "c_ssdy": "广东省",
+ "d_jarq": "2023-05-15",
+ "d_larq": "2023-05-10",
+ "n_ajbs": "y6z7a8b9c0d1e2f3g4h5i6j7k8l9m0n1",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "财产保全",
+ "n_crc": 5678901234,
+ "n_jaay": "财产保全",
+ "n_jaay_tree": "财产保全,诉前财产保全",
+ "n_jafs": "裁定",
+ "n_jbfy": "深圳市南山区人民法院",
+ "n_jbfy_cj": "基层人民法院",
+ "n_laay": "财产保全",
+ "n_slcx": "保全",
+ "n_ssdw": "被申请人"
+ }
+ ],
+ "count": {
+ "area_stat": "广东省(1)",
+ "count_total": 1
+ }
+ }
+ }
+ },
+ "sxbzxr": {
+ "data": {
+ "sxbzxr": [
+ {
+ "caseCode": "(2023)粤0305执恢****号",
+ "disruptTypeName": "被执行人无正当理由拒不履行执行和解协议",
+ "duty": "向申请人支付货款1200000元及逾期付款损失",
+ "gistId": "(2023)粤03民终****号",
+ "gistUnit": "深圳市中级人民法院",
+ "iname": "深圳****电子科技有限公司",
+ "orgNo": "91440300MA5******",
+ "performance": "全部未履行",
+ "publishDate": "2023-10-15",
+ "regDate": "2023-10-10"
+ }
+ ]
+ }
+ },
+ "xgbzxr": {
+ "data": {
+ "xgbzxr": []
+ }
+ }
+ },
+ "orgName": "深圳****电子科技有限公司",
+ "own_tax": {
+ "items": [
+ {
+ "department": "南山区税务局",
+ "legalpersonName": "陈某",
+ "location": "深圳市南山区科技园",
+ "name": "深圳****电子科技有限公司",
+ "newOwnTaxBalance": "0",
+ "ownTaxAmount": "789.60",
+ "ownTaxBalance": "789.60",
+ "personIdName": "201|居民身份证",
+ "personIdNumber": "******",
+ "publishDate": "2023-01-10",
+ "regType": "有限责任公司",
+ "taxCategory": "企业所得税",
+ "taxIdNumber": "91440300MA01******",
+ "taxpayerType": "一般纳税人",
+ "type": "国税"
+ },
+ {
+ "department": "南山区税务局",
+ "legalpersonName": "陈某",
+ "location": "深圳市南山区科技园",
+ "name": "深圳****电子科技有限公司",
+ "newOwnTaxBalance": "0",
+ "ownTaxAmount": "345.20",
+ "ownTaxBalance": "345.20",
+ "personIdName": "201|居民身份证",
+ "personIdNumber": "******",
+ "publishDate": "2023-03-25",
+ "regType": "有限责任公司",
+ "taxCategory": "城市维护建设税",
+ "taxIdNumber": "91440300MA01******",
+ "taxpayerType": "一般纳税人",
+ "type": "地税"
+ },
+ {
+ "department": "南山区税务局",
+ "legalpersonName": "陈某",
+ "location": "深圳市南山区科技园",
+ "name": "深圳****电子科技有限公司",
+ "newOwnTaxBalance": "0",
+ "ownTaxAmount": "567.80",
+ "ownTaxBalance": "567.80",
+ "personIdName": "201|居民身份证",
+ "personIdNumber": "******",
+ "publishDate": "2023-06-18",
+ "regType": "有限责任公司",
+ "taxCategory": "增值税",
+ "taxIdNumber": "91440300MA01******",
+ "taxpayerType": "一般纳税人",
+ "type": "国税"
+ },
+ {
+ "department": "南山区税务局",
+ "legalpersonName": "陈某",
+ "location": "深圳市南山区科技园",
+ "name": "深圳****电子科技有限公司",
+ "newOwnTaxBalance": "0",
+ "ownTaxAmount": "123.40",
+ "ownTaxBalance": "123.40",
+ "personIdName": "201|居民身份证",
+ "personIdNumber": "******",
+ "publishDate": "2023-09-12",
+ "regType": "有限责任公司",
+ "taxCategory": "教育费附加",
+ "taxIdNumber": "91440300MA01******",
+ "taxpayerType": "一般纳税人",
+ "type": "地税"
+ },
+ {
+ "department": "南山区税务局",
+ "legalpersonName": "陈某",
+ "location": "深圳市南山区科技园",
+ "name": "深圳****电子科技有限公司",
+ "newOwnTaxBalance": "0",
+ "ownTaxAmount": "234.90",
+ "ownTaxBalance": "234.90",
+ "personIdName": "201|居民身份证",
+ "personIdNumber": "******",
+ "publishDate": "2023-12-05",
+ "regType": "有限责任公司",
+ "taxCategory": "个人所得税",
+ "taxIdNumber": "91440300MA01******",
+ "taxpayerType": "一般纳税人",
+ "type": "国税"
+ }
+ ],
+ "total": 5
+ },
+ "pName": "陈某",
+ "punishment_info": {
+ "items": [
+ {
+ "content": "没收违法生产的药品和违法所得,并处罚款人民币50万元",
+ "decisionDate": "2023-09-08",
+ "departmentName": "广州市药品监督管理局",
+ "evidence": "药品检验不合格",
+ "legalPersonName": "陈丽",
+ "pecuniary": "500000",
+ "punishName": "广州生物医药有限公司",
+ "punishNumber": "穗药监罚〔2023〕第0910号",
+ "punishStatus": "已执行",
+ "reason": "违反《药品管理法》相关规定,生产劣药",
+ "remark": "",
+ "source": "药品监督管理局",
+ "type": "药品违法",
+ "typeSecond": "生产劣药"
+ },
+ {
+ "content": "没收违法销售的医疗器械和违法所得,并处罚款人民币25万元",
+ "decisionDate": "2023-12-15",
+ "departmentName": "广州市卫生健康委员会",
+ "evidence": "销售记录显示销售未注册医疗器械",
+ "legalPersonName": "陈丽",
+ "pecuniary": "250000",
+ "punishName": "广州生物医药有限公司",
+ "punishNumber": "穗卫健罚〔2023〕第1218号",
+ "punishStatus": "已执行",
+ "reason": "违反《医疗器械监督管理条例》,销售未经注册的医疗器械",
+ "remark": "",
+ "source": "卫生健康委员会",
+ "type": "医疗器械",
+ "typeSecond": "未注册器械"
+ },
+ {
+ "content": "责令停止发布违法广告,并处罚款人民币10万元",
+ "decisionDate": "2024-01-22",
+ "departmentName": "广州市市场监督管理局",
+ "evidence": "广告内容与实际效果不符",
+ "legalPersonName": "陈丽",
+ "pecuniary": "100000",
+ "punishName": "广州生物医药有限公司",
+ "punishNumber": "穗市监罚〔2024〕第0125号",
+ "punishStatus": "已执行",
+ "reason": "违反《广告法》规定,发布医疗广告含有不实内容",
+ "remark": "",
+ "source": "市场监督管理局",
+ "type": "广告违法",
+ "typeSecond": "虚假医疗广告"
+ },
+ {
+ "content": "责令改正违法行为,并处罚款人民币6万元",
+ "decisionDate": "2024-04-10",
+ "departmentName": "广州市环保局",
+ "evidence": "现场检查发现医疗废物处理不当",
+ "legalPersonName": "陈丽",
+ "pecuniary": "60000",
+ "punishName": "广州生物医药有限公司",
+ "punishNumber": "穗环罚〔2024〕第0412号",
+ "punishStatus": "已执行",
+ "reason": "违反《环境保护法》,未按规定处理医疗废物",
+ "remark": "",
+ "source": "环保局",
+ "type": "环境违法",
+ "typeSecond": "废物处理"
+ }
+ ],
+ "total": 4
+ },
+ "relationship": [
+ "sh",
+ "lp",
+ "tm"
+ ],
+ "stockHolderItem": {
+ "investDate": "",
+ "investRate": "100.0%",
+ "orgHolderName": "陈某",
+ "orgHolderType": "自然人",
+ "subscriptAmt": 1000
+ },
+ "tax_contravention": {
+ "items": [
+ {
+ "case_type": "税收异常非正常户",
+ "department": "国家税务总局深圳市南山区税务局",
+ "id": 2745252,
+ "publish_time": "2023-07-30",
+ "taxpayer_name": "深圳****电子科技有限公司"
+ }
+ ],
+ "total": 1
+ }
+ },
+ {
+ "abnormal_info": {
+ "items": [
+ {
+ "putDate": "2023-08-25",
+ "putDepartment": "杭州市西湖区市场监督管理局",
+ "putReason": "未依照《企业信息公示暂行条例》第八条规定的期限公示年度报告的",
+ "removeDate": "2024-03-01",
+ "removeDepartment": "杭州市西湖区市场监督管理局",
+ "removeReason": "已按期补报年度报告"
+ }
+ ],
+ "total": 1
+ },
+ "adminPenalty": [
+ {
+ "content": "",
+ "decisionDate": "2022-06-25",
+ "departmentName": "重庆市****住房和城乡建设委员会",
+ "legalPersonName": "周某",
+ "punishNumber": "渝建罚字(2022)****号",
+ "reason": "未按照建筑工程设计标准施工",
+ "type": "罚款"
+ }
+ ],
+ "basicInfo": {
+ "apprdate": "2022-07-20",
+ "base": "cq",
+ "candate": "",
+ "city": "重庆市",
+ "companyOrgType": "有限责任公司(自然人投资或控股)",
+ "creditCode": "91500000MA6******",
+ "district": "渝中区",
+ "estiblishTime": "2015-08-12",
+ "industry": "建筑业",
+ "industry_code": "E",
+ "legalPersonName": "周某",
+ "name": "重庆****建设工程有限公司",
+ "nic_code": "E4700",
+ "nic_name": "建筑业-建筑装饰、装修和其他建筑业-建筑装饰和装修业",
+ "opscope": "建筑工程施工;建筑装饰工程设计与施工;市政公用工程施工;公路工程施工;水利水电工程施工;钢结构工程施工;土石方工程施工;园林绿化工程施工;建筑劳务分包;建筑材料销售。",
+ "province": "重庆市",
+ "reccap": 0,
+ "reccapcur": "人民币",
+ "regCapital": "2000.000000万人民币",
+ "regCapitalCurrency": "人民币",
+ "regNumber": "500103******",
+ "regStatus": "存续",
+ "regorg": "重庆市市场监督管理局",
+ "revdate": "2022-07-20",
+ "staffList": {
+ "result": [
+ {
+ "name": "周某",
+ "type": "2",
+ "typeJoin": [
+ "执行董事"
+ ]
+ },
+ {
+ "name": "李某",
+ "type": "3",
+ "typeJoin": [
+ "总经理"
+ ]
+ }
+ ]
+ },
+ "type": "1"
+ },
+ "dishonestExecutedPerson": [],
+ "executedPerson": [
+ {
+ "caseCode": "(2023)渝01执****号",
+ "courtName": "重庆市第一中级人民法院",
+ "execMoney": 850000,
+ "iname": "重庆****建设工程有限公司",
+ "orgNo": "91500000MA6******",
+ "province": "重庆",
+ "publishDate": "2023-08-10"
+ }
+ ],
+ "financing_history": {
+ "items": [
+ {
+ "companyName": "杭州互联网服务有限公司",
+ "date": null,
+ "investorName": "阿里巴巴,蚂蚁集团",
+ "money": "2亿人民币",
+ "newsTitle": "杭州互联网服务获得2亿元C轮融资",
+ "newsUrl": "https://example.com/news5",
+ "pubTime": 1685577600000,
+ "round": "C轮",
+ "share": "15%",
+ "value": "13.3亿人民币"
+ },
+ {
+ "companyName": "杭州互联网服务有限公司",
+ "date": null,
+ "investorName": "经纬中国,GGV纪源资本",
+ "money": "8000万人民币",
+ "newsTitle": "",
+ "newsUrl": "",
+ "pubTime": 1654041600000,
+ "round": "B轮",
+ "share": "20%",
+ "value": "4亿人民币"
+ },
+ {
+ "companyName": "杭州互联网服务有限公司",
+ "date": null,
+ "investorName": "DCM中国,晨兴资本",
+ "money": "3000万人民币",
+ "newsTitle": "",
+ "newsUrl": "",
+ "pubTime": 1622505600000,
+ "round": "A轮",
+ "share": "25%",
+ "value": "1.2亿人民币"
+ },
+ {
+ "companyName": "杭州互联网服务有限公司",
+ "date": null,
+ "investorName": "真格基金",
+ "money": "800万人民币",
+ "newsTitle": "",
+ "newsUrl": "",
+ "pubTime": 1590969600000,
+ "round": "天使轮",
+ "share": "18%",
+ "value": "4444万人民币"
+ }
+ ],
+ "total": 4
+ },
+ "fsource": "1",
+ "invest_history": {
+ "items": [
+ {
+ "alias": "云计算",
+ "amount": null,
+ "base": "hz",
+ "business_scope": "互联网信息服务;第二类增值电信业务;软件开发;信息系统集成服务;信息技术咨询服务;数据处理和存储支持服务;人工智能应用软件开发;区块链技术相关软件和服务;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广。",
+ "category": "软件和信息技术服务业",
+ "creditCode": "91330108MA01N5O6P7",
+ "estiblishTime": 1635696000000,
+ "id": 48901234,
+ "legalPersonId": 2289012345,
+ "legalPersonName": "马云飞",
+ "logo": "https://img5.tianyancha.com/logo/lll/example14.png@!f_200x200",
+ "name": "杭州云计算服务有限公司",
+ "orgType": "有限责任公司(自然人投资或控股)",
+ "pencertileScore": 7890,
+ "percent": "50%",
+ "personType": 1,
+ "regCapital": "3000万人民币",
+ "regStatus": "存续",
+ "withdrawalTime": null
+ },
+ {
+ "alias": "游戏娱乐",
+ "amount": null,
+ "base": "hz",
+ "business_scope": "网络游戏服务;互联网信息服务;软件开发;动漫游戏开发;数字内容制作服务;广告设计、代理;广告制作;文艺创作;组织文化艺术交流活动;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广。",
+ "category": "软件和信息技术服务业",
+ "creditCode": "91330108MA01O6P7Q8",
+ "estiblishTime": 1651363200000,
+ "id": 49012345,
+ "legalPersonId": 2290123456,
+ "legalPersonName": "许晓明",
+ "logo": "https://img5.tianyancha.com/logo/lll/example15.png@!f_200x200",
+ "name": "杭州游戏娱乐科技有限公司",
+ "orgType": "有限责任公司(自然人投资或控股)",
+ "pencertileScore": 6789,
+ "percent": "40%",
+ "personType": 1,
+ "regCapital": "2500万人民币",
+ "regStatus": "存续",
+ "withdrawalTime": null
+ }
+ ],
+ "total": 3
+ },
+ "lawsuitInfo": {
+ "entout": {
+ "data": {
+ "administrative": {
+ "cases": [
+ {
+ "c_ah": "(2022)渝01行初****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "重庆****建设工程有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "原告"
+ },
+ {
+ "c_mc": "重庆市****住房和城乡建设委员会",
+ "n_dsrlx": "机关团体",
+ "n_ssdw": "被告"
+ }
+ ],
+ "c_gkws_dsr": "原告重庆****建设工程有限公司,住所地重庆市渝中区****路x号。法定代表人周某,执行董事兼总经理。委托代理人黄某,重庆****律师事务所律师。被告重庆市****住房和城乡建设委员会,住所地重庆市渝北区****路x号。负责人张某,主任。委托代理人谢某,该委工作人员。",
+ "c_gkws_pjjg": "驳回原告重庆****建设工程有限公司的诉讼请求。案件受理费100元,由原告重庆****建设工程有限公司负担。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于重庆市高级人民法院。",
+ "c_id": "c0d1e2f3g4h5i6j7k8l9m0n1o2p3q4r5",
+ "c_ssdy": "重庆市",
+ "d_jarq": "2022-09-15",
+ "d_larq": "2022-07-20",
+ "n_ajbs": "z7a8b9c0d1e2f3g4h5i6j7k8l9m0n1o2",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "行政一审",
+ "n_crc": 6789012345,
+ "n_jaay": "行政管理",
+ "n_jaay_tree": "行政管理,城乡建设管理,建筑市场管理",
+ "n_jafs": "判决",
+ "n_jbfy": "重庆市第一中级人民法院",
+ "n_jbfy_cj": "中级人民法院",
+ "n_laay": "行政管理",
+ "n_pj_victory": "败诉",
+ "n_slcx": "一审",
+ "n_ssdw": "原告"
+ }
+ ],
+ "count": {
+ "area_stat": "重庆市(1)",
+ "ay_stat": "行政管理(1)",
+ "count_beigao": 0,
+ "count_jie_beigao": 0,
+ "count_jie_total": 1,
+ "count_total": 1,
+ "jafs_stat": "判决(1)",
+ "larq_stat": "2022(1)"
+ }
+ },
+ "bankrupt": {
+ "cases": [],
+ "count": {
+ "area_stat": "重庆市(0)",
+ "count_total": 0
+ }
+ },
+ "cases_tree": {
+ "administrative": [
+ {
+ "c_ah": "(2022)渝01行初****号",
+ "case_type": 400,
+ "n_ajbs": "z7a8b9c0d1e2f3g4h5i6j7k8l9m0n1o2",
+ "stage_type": 1
+ }
+ ],
+ "bankrupt": [],
+ "civil": [
+ {
+ "c_ah": "(2023)渝0103民初****号",
+ "case_type": 300,
+ "n_ajbs": "a8b9c0d1e2f3g4h5i6j7k8l9m0n1o2p3",
+ "stage_type": 1
+ },
+ {
+ "c_ah": "(2023)渝01民终****号",
+ "case_type": 300,
+ "n_ajbs": "b9c0d1e2f3g4h5i6j7k8l9m0n1o2p3q4",
+ "stage_type": 2
+ },
+ {
+ "c_ah": "(2022)渝01民初****号",
+ "case_type": 300,
+ "n_ajbs": "c0d1e2f3g4h5i6j7k8l9m0n1o2p3q4r5",
+ "stage_type": 1
+ }
+ ],
+ "criminal": [
+ {
+ "c_ah": "(2023)渝01刑初****号",
+ "case_type": 200,
+ "n_ajbs": "d1e2f3g4h5i6j7k8l9m0n1o2p3q4r5s6",
+ "stage_type": 1
+ }
+ ],
+ "implement": [
+ {
+ "c_ah": "(2023)渝01执****号",
+ "case_type": 500,
+ "n_ajbs": "e2f3g4h5i6j7k8l9m0n1o2p3q4r5s6t7",
+ "stage_type": 1
+ }
+ ],
+ "preservation": [
+ {
+ "c_ah": "(2023)渝0103财保****号",
+ "case_type": 700,
+ "n_ajbs": "f3g4h5i6j7k8l9m0n1o2p3q4r5s6t7u8",
+ "stage_type": 1
+ }
+ ]
+ },
+ "civil": {
+ "cases": [
+ {
+ "c_ah": "(2023)渝0103民初****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "重庆****建设工程有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被告"
+ },
+ {
+ "c_mc": "重庆****房地产开发有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "原告"
+ }
+ ],
+ "c_gkws_dsr": "原告重庆****房地产开发有限公司,住所地重庆市江北区****路x号。法定代表人杨某,董事长。委托代理人江某,重庆****律师事务所律师。被告重庆****建设工程有限公司,住所地重庆市渝中区****路x号。法定代表人周某,执行董事兼总经理。委托代理人孙某,重庆****律师事务所律师。",
+ "c_gkws_pjjg": "一、被告重庆****建设工程有限公司于本判决生效之日起十日内向原告重庆****房地产开发有限公司支付工程质量违约金850000元;二、被告重庆****建设工程有限公司于本判决生效之日起十日内向原告重庆****房地产开发有限公司返还超额支付的工程款150000元;三、驳回原告重庆****房地产开发有限公司的其他诉讼请求。如果未按本判决指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百六十条规定,加倍支付迟延履行期间的债务利息。案件受理费15000元,由原告重庆****房地产开发有限公司负担5000元,被告重庆****建设工程有限公司负担10000元。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于重庆市第一中级人民法院。",
+ "c_id": "d1e2f3g4h5i6j7k8l9m0n1o2p3q4r5s6",
+ "c_ssdy": "重庆市",
+ "d_jarq": "2023-06-15",
+ "d_larq": "2023-04-10",
+ "n_ajbs": "a8b9c0d1e2f3g4h5i6j7k8l9m0n1o2p3",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "民事一审",
+ "n_crc": 7890123456,
+ "n_jaay": "合同、准合同纠纷",
+ "n_jaay_tree": "合同、准合同纠纷,合同纠纷,建设工程合同纠纷",
+ "n_jafs": "判决",
+ "n_jbfy": "重庆市渝中区人民法院",
+ "n_jbfy_cj": "基层人民法院",
+ "n_laay": "合同、准合同纠纷",
+ "n_pj_victory": "败诉",
+ "n_qsbdje": 1000000,
+ "n_qsbdje_level": 20,
+ "n_slcx": "一审",
+ "n_ssdw": "被告"
+ },
+ {
+ "c_ah": "(2023)渝01民终****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "重庆****建设工程有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "上诉人"
+ },
+ {
+ "c_mc": "重庆****房地产开发有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被上诉人"
+ }
+ ],
+ "c_gkws_dsr": "上诉人(原审被告)重庆****建设工程有限公司,住所地重庆市渝中区****路x号。法定代表人周某,执行董事兼总经理。委托代理人孙某,重庆****律师事务所律师。被上诉人(原审原告)重庆****房地产开发有限公司,住所地重庆市江北区****路x号。法定代表人杨某,董事长。委托代理人江某,重庆****律师事务所律师。",
+ "c_gkws_pjjg": "驳回上诉,维持原判。二审案件受理费15000元,由上诉人重庆****建设工程有限公司负担。本判决为终审判决。",
+ "c_id": "e2f3g4h5i6j7k8l9m0n1o2p3q4r5s6t7",
+ "c_ssdy": "重庆市",
+ "d_jarq": "2023-08-05",
+ "d_larq": "2023-07-10",
+ "n_ajbs": "b9c0d1e2f3g4h5i6j7k8l9m0n1o2p3q4",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "民事二审",
+ "n_crc": 8901234567,
+ "n_jaay": "合同、准合同纠纷",
+ "n_jaay_tree": "合同、准合同纠纷,合同纠纷,建设工程合同纠纷",
+ "n_jafs": "维持",
+ "n_jbfy": "重庆市第一中级人民法院",
+ "n_jbfy_cj": "中级人民法院",
+ "n_laay": "合同、准合同纠纷",
+ "n_pj_victory": "败诉",
+ "n_qsbdje": 1000000,
+ "n_qsbdje_level": 20,
+ "n_slcx": "二审",
+ "n_ssdw": "上诉人"
+ },
+ {
+ "c_ah": "(2022)渝01民初****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "重庆****建设工程有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "原告"
+ },
+ {
+ "c_mc": "重庆****投资有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被告"
+ }
+ ],
+ "c_gkws_dsr": "原告重庆****建设工程有限公司,住所地重庆市渝中区****路x号。法定代表人周某,执行董事兼总经理。委托代理人王某,重庆****律师事务所律师。被告重庆****投资有限公司,住所地重庆市渝北区****路x号。法定代表人谢某,董事长。委托代理人钱某,重庆****律师事务所律师。",
+ "c_gkws_pjjg": "一、被告重庆****投资有限公司于本判决生效之日起十日内向原告重庆****建设工程有限公司支付工程款500000元及违约金50000元;二、驳回原告重庆****建设工程有限公司的其他诉讼请求。如果未按本判决指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百六十条规定,加倍支付迟延履行期间的债务利息。案件受理费9500元,由原告重庆****建设工程有限公司负担3500元,被告重庆****投资有限公司负担6000元。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于重庆市高级人民法院。",
+ "c_id": "f3g4h5i6j7k8l9m0n1o2p3q4r5s6t7u8",
+ "c_ssdy": "重庆市",
+ "d_jarq": "2022-12-20",
+ "d_larq": "2022-10-15",
+ "n_ajbs": "c0d1e2f3g4h5i6j7k8l9m0n1o2p3q4r5",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "民事一审",
+ "n_crc": 9012345678,
+ "n_jaay": "合同、准合同纠纷",
+ "n_jaay_tree": "合同、准合同纠纷,合同纠纷,建设工程合同纠纷",
+ "n_jafs": "判决",
+ "n_jbfy": "重庆市第一中级人民法院",
+ "n_jbfy_cj": "中级人民法院",
+ "n_laay": "合同、准合同纠纷",
+ "n_pj_victory": "部分胜诉",
+ "n_qsbdje": 600000,
+ "n_qsbdje_level": 19,
+ "n_slcx": "一审",
+ "n_ssdw": "原告"
+ }
+ ],
+ "count": {
+ "area_stat": "重庆市(3)",
+ "ay_stat": "合同、准合同纠纷(3)",
+ "count_beigao": 1,
+ "count_jie_beigao": 1,
+ "count_jie_total": 3,
+ "count_total": 3,
+ "jafs_stat": "判决(2),维持(1)",
+ "larq_stat": "2022(1),2023(2)",
+ "money_beigao": 1,
+ "money_jie_beigao": 1,
+ "money_jie_total": 3,
+ "money_total": 3
+ }
+ },
+ "count": {
+ "area_stat": "重庆市(7)",
+ "ay_stat": "合同、准合同纠纷(3),行政管理(1),重大责任事故罪(1),执行案件(1),财产保全(1)",
+ "count_beigao": 2,
+ "count_jie_beigao": 2,
+ "count_jie_total": 7,
+ "count_total": 7,
+ "jafs_stat": "判决(4),维持(1),有期徒刑(1),执行(1)",
+ "larq_stat": "2022(2),2023(5)",
+ "money_beigao": 1,
+ "money_jie_beigao": 1,
+ "money_jie_total": 3,
+ "money_total": 3
+ },
+ "crc": 6789012345,
+ "criminal": {
+ "cases": [
+ {
+ "c_ah": "(2023)渝01刑初****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "重庆****建设工程有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被告单位"
+ },
+ {
+ "c_mc": "周某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "被告人"
+ },
+ {
+ "c_mc": "李某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "被告人"
+ }
+ ],
+ "c_gkws_dsr": "公诉机关重庆市****区人民检察院。被告单位重庆****建设工程有限公司,住所地重庆市渝中区****路x号。被告人周某,男,1970年5月8日生,汉族,重庆市人,大学文化,系重庆****建设工程有限公司法定代表人。因涉嫌犯重大责任事故罪,于2023年2月15日被重庆市公安局刑事拘留,同年3月20日被逮捕,现羁押于重庆市第一看守所。辩护人赵某,重庆****律师事务所律师。被告人李某,男,1975年8月12日生,汉族,四川省人,大学文化,系重庆****建设工程有限公司项目经理。因涉嫌犯重大责任事故罪,于2023年2月15日被重庆市公安局刑事拘留,同年3月20日被逮捕,现羁押于重庆市第一看守所。辩护人钟某,重庆****律师事务所律师。",
+ "c_gkws_pjjg": "一、被告单位重庆****建设工程有限公司犯重大责任事故罪,处罚金人民币三百万元;二、被告人周某犯重大责任事故罪,判处有期徒刑四年;三、被告人李某犯重大责任事故罪,判处有期徒刑三年六个月。如不服本判决,可在接到判决书的第二日起十日内,通过本院或者直接向重庆市高级人民法院提出上诉。被告人如果提出上诉,可以委托辩护人提出上诉状。",
+ "c_id": "g4h5i6j7k8l9m0n1o2p3q4r5s6t7u8v9",
+ "c_ssdy": "重庆市",
+ "d_jarq": "2023-07-10",
+ "d_larq": "2023-05-15",
+ "n_ajbs": "d1e2f3g4h5i6j7k8l9m0n1o2p3q4r5s6",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "刑事一审",
+ "n_crc": 1234567890,
+ "n_jaay": "重大责任事故罪",
+ "n_jaay_tree": "危害公共安全罪,重大责任事故罪",
+ "n_jafs": "有期徒刑",
+ "n_jbfy": "重庆市第一中级人民法院",
+ "n_jbfy_cj": "中级人民法院",
+ "n_laay": "重大责任事故罪",
+ "n_pj_victory": "败诉",
+ "n_slcx": "一审",
+ "n_ssdw": "被告单位"
+ }
+ ],
+ "count": {
+ "area_stat": "重庆市(1)",
+ "ay_stat": "重大责任事故罪(1)",
+ "count_beigao": 0,
+ "count_jie_beigao": 0,
+ "count_jie_total": 1,
+ "count_total": 1,
+ "jafs_stat": "有期徒刑(1)",
+ "larq_stat": "2023(1)",
+ "money_beigao": 0,
+ "money_jie_beigao": 0,
+ "money_jie_total": 0,
+ "money_total": 0
+ }
+ },
+ "implement": {
+ "cases": [
+ {
+ "c_ah": "(2023)渝01执****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "重庆****房地产开发有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "申请执行人"
+ },
+ {
+ "c_mc": "重庆****建设工程有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被执行人"
+ }
+ ],
+ "c_gkws_dsr": "申请执行人重庆****房地产开发有限公司,住所地重庆市江北区****路x号。法定代表人杨某,董事长。委托代理人江某,重庆****律师事务所律师。被执行人重庆****建设工程有限公司,住所地重庆市渝中区****路x号。法定代表人周某,执行董事兼总经理。",
+ "c_gkws_pjjg": "一、被执行人重庆****建设工程有限公司应向申请执行人重庆****房地产开发有限公司支付工程质量违约金850000元、超额支付的工程款150000元及迟延履行期间的利息;二、若被执行人未按时履行上述义务,本院将依法评估、拍卖其名下的财产,所得价款优先清偿上述债务。",
+ "c_id": "h5i6j7k8l9m0n1o2p3q4r5s6t7u8v9w0",
+ "c_ssdy": "重庆市",
+ "d_jarq": "2023-08-10",
+ "d_larq": "2023-08-05",
+ "n_ajbs": "e2f3g4h5i6j7k8l9m0n1o2p3q4r5s6t7",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "执行案件",
+ "n_crc": 2345678901,
+ "n_jaay": "执行案件",
+ "n_jaay_tree": "执行案件,执行实施类",
+ "n_jafs": "执行",
+ "n_jbfy": "重庆市第一中级人民法院",
+ "n_jbfy_cj": "中级人民法院",
+ "n_laay": "执行案件",
+ "n_slcx": "执行",
+ "n_ssdw": "被执行人"
+ }
+ ],
+ "count": {
+ "area_stat": "重庆市(1)",
+ "count_total": 1
+ }
+ },
+ "preservation": {
+ "cases": [
+ {
+ "c_ah": "(2023)渝0103财保****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "重庆****房地产开发有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "申请人"
+ },
+ {
+ "c_mc": "重庆****建设工程有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被申请人"
+ }
+ ],
+ "c_gkws_dsr": "申请人重庆****房地产开发有限公司,住所地重庆市江北区****路x号。法定代表人杨某,董事长。委托代理人江某,重庆****律师事务所律师。被申请人重庆****建设工程有限公司,住所地重庆市渝中区****路x号。法定代表人周某,执行董事兼总经理。",
+ "c_gkws_pjjg": "冻结被申请人重庆****建设工程有限公司名下银行账户(账号:****)中的存款1000000元,冻结期限为一年。",
+ "c_id": "i6j7k8l9m0n1o2p3q4r5s6t7u8v9w0x1",
+ "c_ssdy": "重庆市",
+ "d_jarq": "2023-04-05",
+ "d_larq": "2023-03-30",
+ "n_ajbs": "f3g4h5i6j7k8l9m0n1o2p3q4r5s6t7u8",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "财产保全",
+ "n_crc": 3456789012,
+ "n_jaay": "财产保全",
+ "n_jaay_tree": "财产保全,诉前财产保全",
+ "n_jafs": "裁定",
+ "n_jbfy": "重庆市渝中区人民法院",
+ "n_jbfy_cj": "基层人民法院",
+ "n_laay": "财产保全",
+ "n_slcx": "保全",
+ "n_ssdw": "被申请人"
+ }
+ ],
+ "count": {
+ "area_stat": "重庆市(1)",
+ "count_total": 1
+ }
+ }
+ }
+ },
+ "sxbzxr": {
+ "data": {
+ "sxbzxr": []
+ }
+ },
+ "xgbzxr": {
+ "data": {
+ "xgbzxr": []
+ }
+ }
+ },
+ "orgName": "重庆****建设工程有限公司",
+ "own_tax": {
+ "items": [
+ {
+ "department": "渝中区税务局",
+ "legalpersonName": "李某",
+ "location": "重庆市渝中区解放碑",
+ "name": "重庆****建设工程有限公司",
+ "newOwnTaxBalance": "0",
+ "ownTaxAmount": "1234.50",
+ "ownTaxBalance": "1234.50",
+ "personIdName": "201|居民身份证",
+ "personIdNumber": "******",
+ "publishDate": "2023-04-20",
+ "regType": "有限责任公司",
+ "taxCategory": "企业所得税",
+ "taxIdNumber": "91500000MA01******",
+ "taxpayerType": "一般纳税人",
+ "type": "国税"
+ },
+ {
+ "department": "渝中区税务局",
+ "legalpersonName": "李某",
+ "location": "重庆市渝中区解放碑",
+ "name": "重庆****建设工程有限公司",
+ "newOwnTaxBalance": "0",
+ "ownTaxAmount": "678.90",
+ "ownTaxBalance": "678.90",
+ "personIdName": "201|居民身份证",
+ "personIdNumber": "******",
+ "publishDate": "2023-07-15",
+ "regType": "有限责任公司",
+ "taxCategory": "城市维护建设税",
+ "taxIdNumber": "91500000MA01******",
+ "taxpayerType": "一般纳税人",
+ "type": "地税"
+ },
+ {
+ "department": "渝中区税务局",
+ "legalpersonName": "李某",
+ "location": "重庆市渝中区解放碑",
+ "name": "重庆****建设工程有限公司",
+ "newOwnTaxBalance": "0",
+ "ownTaxAmount": "456.30",
+ "ownTaxBalance": "456.30",
+ "personIdName": "201|居民身份证",
+ "personIdNumber": "******",
+ "publishDate": "2023-10-08",
+ "regType": "有限责任公司",
+ "taxCategory": "增值税",
+ "taxIdNumber": "91500000MA01******",
+ "taxpayerType": "一般纳税人",
+ "type": "国税"
+ }
+ ],
+ "total": 3
+ },
+ "pName": "周某",
+ "punishment_info": {
+ "items": [
+ {
+ "content": "责令整改并加强用户信息保护,处罚款人民币8万元",
+ "decisionDate": "2023-06-30",
+ "departmentName": "杭州市网信办",
+ "evidence": "用户投诉个人信息泄露",
+ "legalPersonName": "刘刚",
+ "pecuniary": "80000",
+ "punishName": "杭州互联网服务有限公司",
+ "punishNumber": "杭网信罚〔2023〕第0702号",
+ "punishStatus": "已执行",
+ "reason": "违反《网络安全法》,用户个人信息保护不当",
+ "remark": "",
+ "source": "网信办",
+ "type": "信息安全",
+ "typeSecond": "信息泄露"
+ },
+ {
+ "content": "责令完善商家信息公示,并处罚款人民币4万元",
+ "decisionDate": "2023-10-18",
+ "departmentName": "杭州市市场监督管理局",
+ "evidence": "平台商家资质信息缺失",
+ "legalPersonName": "刘刚",
+ "pecuniary": "40000",
+ "punishName": "杭州互联网服务有限公司",
+ "punishNumber": "杭市监罚〔2023〕第1020号",
+ "punishStatus": "已执行",
+ "reason": "违反《电子商务法》,平台内经营者信息公示不完整",
+ "remark": "",
+ "source": "市场监督管理局",
+ "type": "电商违法",
+ "typeSecond": "信息公示"
+ }
+ ],
+ "total": 2
+ },
+ "relationship": [
+ "sh",
+ "lp"
+ ],
+ "stockHolderItem": {
+ "investDate": "",
+ "investRate": "100.0%",
+ "orgHolderName": "周某",
+ "orgHolderType": "自然人",
+ "subscriptAmt": 2000
+ },
+ "tax_contravention": {
+ "items": [
+ {
+ "case_type": "税收异常非正常户",
+ "department": "国家税务总局重庆市渝中区税务局",
+ "id": 2745253,
+ "publish_time": "2023-06-15",
+ "taxpayer_name": "重庆****建设工程有限公司"
+ },
+ {
+ "case_type": "欠税公告",
+ "department": "国家税务总局重庆市渝中区税务局",
+ "id": 2745254,
+ "publish_time": "2023-09-20",
+ "taxpayer_name": "重庆****建设工程有限公司"
+ },
+ {
+ "case_type": "税收违法案件",
+ "department": "国家税务总局重庆市渝中区税务局",
+ "id": 2745255,
+ "publish_time": "2023-12-10",
+ "taxpayer_name": "重庆****建设工程有限公司"
+ }
+ ],
+ "total": 3
+ }
+ },
+ {
+ "abnormal_info": {
+ "items": [
+ {
+ "putDate": "2023-08-25",
+ "putDepartment": "杭州市西湖区市场监督管理局",
+ "putReason": "未依照《企业信息公示暂行条例》第八条规定的期限公示年度报告的",
+ "removeDate": "2024-03-01",
+ "removeDepartment": "杭州市西湖区市场监督管理局",
+ "removeReason": "已按期补报年度报告"
+ }
+ ],
+ "total": 1
+ },
+ "adminPenalty": [
+ {
+ "content": "",
+ "decisionDate": "2022-09-18",
+ "departmentName": "杭州市****市场监督管理局",
+ "legalPersonName": "吴某",
+ "punishNumber": "杭市监罚字(2022)****号",
+ "reason": "生产的食品中检出超标添加剂",
+ "type": "罚款"
+ }
+ ],
+ "basicInfo": {
+ "apprdate": "2022-10-20",
+ "base": "zj",
+ "candate": "",
+ "city": "杭州市",
+ "companyOrgType": "有限责任公司(自然人投资或控股)",
+ "creditCode": "91330100MA2******",
+ "district": "余杭区",
+ "estiblishTime": "2016-05-20",
+ "industry": "食品制造业",
+ "industry_code": "C",
+ "legalPersonName": "吴某",
+ "name": "杭州****食品有限公司",
+ "nic_code": "C1492",
+ "nic_name": "食品制造业-其他食品制造-保健食品制造",
+ "opscope": "食品生产;食品经营;保健食品生产;保健食品销售;货物进出口;技术进出口;食品互联网销售;食品添加剂生产;食品添加剂销售。",
+ "province": "浙江省",
+ "reccap": 0,
+ "reccapcur": "人民币",
+ "regCapital": "1500.000000万人民币",
+ "regCapitalCurrency": "人民币",
+ "regNumber": "330110******",
+ "regStatus": "存续",
+ "regorg": "杭州市市场监督管理局",
+ "revdate": "2022-10-20",
+ "staffList": {
+ "result": [
+ {
+ "name": "吴某",
+ "type": "2",
+ "typeJoin": [
+ "执行董事"
+ ]
+ },
+ {
+ "name": "章某",
+ "type": "3",
+ "typeJoin": [
+ "总经理"
+ ]
+ }
+ ]
+ },
+ "type": "1"
+ },
+ "dishonestExecutedPerson": [],
+ "executedPerson": [],
+ "financing_history": {
+ "items": [
+ {
+ "companyName": "杭州互联网服务有限公司",
+ "date": null,
+ "investorName": "阿里巴巴,蚂蚁集团",
+ "money": "2亿人民币",
+ "newsTitle": "杭州互联网服务获得2亿元C轮融资",
+ "newsUrl": "https://example.com/news5",
+ "pubTime": 1685577600000,
+ "round": "C轮",
+ "share": "15%",
+ "value": "13.3亿人民币"
+ },
+ {
+ "companyName": "杭州互联网服务有限公司",
+ "date": null,
+ "investorName": "经纬中国,GGV纪源资本",
+ "money": "8000万人民币",
+ "newsTitle": "",
+ "newsUrl": "",
+ "pubTime": 1654041600000,
+ "round": "B轮",
+ "share": "20%",
+ "value": "4亿人民币"
+ },
+ {
+ "companyName": "杭州互联网服务有限公司",
+ "date": null,
+ "investorName": "DCM中国,晨兴资本",
+ "money": "3000万人民币",
+ "newsTitle": "",
+ "newsUrl": "",
+ "pubTime": 1622505600000,
+ "round": "A轮",
+ "share": "25%",
+ "value": "1.2亿人民币"
+ },
+ {
+ "companyName": "杭州互联网服务有限公司",
+ "date": null,
+ "investorName": "真格基金",
+ "money": "800万人民币",
+ "newsTitle": "",
+ "newsUrl": "",
+ "pubTime": 1590969600000,
+ "round": "天使轮",
+ "share": "18%",
+ "value": "4444万人民币"
+ }
+ ],
+ "total": 4
+ },
+ "fsource": "1",
+ "invest_history": {
+ "items": [
+ {
+ "alias": "云计算",
+ "amount": null,
+ "base": "hz",
+ "business_scope": "互联网信息服务;第二类增值电信业务;软件开发;信息系统集成服务;信息技术咨询服务;数据处理和存储支持服务;人工智能应用软件开发;区块链技术相关软件和服务;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广。",
+ "category": "软件和信息技术服务业",
+ "creditCode": "91330108MA01N5O6P7",
+ "estiblishTime": 1635696000000,
+ "id": 48901234,
+ "legalPersonId": 2289012345,
+ "legalPersonName": "马云飞",
+ "logo": "https://img5.tianyancha.com/logo/lll/example14.png@!f_200x200",
+ "name": "杭州云计算服务有限公司",
+ "orgType": "有限责任公司(自然人投资或控股)",
+ "pencertileScore": 7890,
+ "percent": "50%",
+ "personType": 1,
+ "regCapital": "3000万人民币",
+ "regStatus": "存续",
+ "withdrawalTime": null
+ },
+ {
+ "alias": "游戏娱乐",
+ "amount": null,
+ "base": "hz",
+ "business_scope": "网络游戏服务;互联网信息服务;软件开发;动漫游戏开发;数字内容制作服务;广告设计、代理;广告制作;文艺创作;组织文化艺术交流活动;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广。",
+ "category": "软件和信息技术服务业",
+ "creditCode": "91330108MA01O6P7Q8",
+ "estiblishTime": 1651363200000,
+ "id": 49012345,
+ "legalPersonId": 2290123456,
+ "legalPersonName": "许晓明",
+ "logo": "https://img5.tianyancha.com/logo/lll/example15.png@!f_200x200",
+ "name": "杭州游戏娱乐科技有限公司",
+ "orgType": "有限责任公司(自然人投资或控股)",
+ "pencertileScore": 6789,
+ "percent": "40%",
+ "personType": 1,
+ "regCapital": "2500万人民币",
+ "regStatus": "存续",
+ "withdrawalTime": null
+ }
+ ],
+ "total": 3
+ },
+ "lawsuitInfo": {
+ "entout": {
+ "data": {
+ "administrative": {
+ "cases": [
+ {
+ "c_ah": "(2022)浙01行初****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "杭州****食品有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "原告"
+ },
+ {
+ "c_mc": "杭州市****市场监督管理局",
+ "n_dsrlx": "机关团体",
+ "n_ssdw": "被告"
+ }
+ ],
+ "c_gkws_dsr": "原告杭州****食品有限公司,住所地杭州市余杭区****路x号。法定代表人吴某,执行董事兼总经理。委托代理人杨某,浙江****律师事务所律师。被告杭州市****市场监督管理局,住所地杭州市拱墅区****路x号。负责人刘某,局长。委托代理人郭某,该局工作人员。",
+ "c_gkws_pjjg": "驳回原告杭州****食品有限公司的诉讼请求。案件受理费100元,由原告杭州****食品有限公司负担。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于浙江省高级人民法院。",
+ "c_id": "j7k8l9m0n1o2p3q4r5s6t7u8v9w0x1y2",
+ "c_ssdy": "浙江省",
+ "d_jarq": "2022-12-15",
+ "d_larq": "2022-10-20",
+ "n_ajbs": "g4h5i6j7k8l9m0n1o2p3q4r5s6t7u8v9",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "行政一审",
+ "n_crc": 4567890123,
+ "n_jaay": "行政管理",
+ "n_jaay_tree": "行政管理,工商行政管理,食品药品监督管理",
+ "n_jafs": "判决",
+ "n_jbfy": "杭州市中级人民法院",
+ "n_jbfy_cj": "中级人民法院",
+ "n_laay": "行政管理",
+ "n_pj_victory": "败诉",
+ "n_slcx": "一审",
+ "n_ssdw": "原告"
+ }
+ ],
+ "count": {
+ "area_stat": "浙江省(1)",
+ "ay_stat": "行政管理(1)",
+ "count_beigao": 0,
+ "count_jie_beigao": 0,
+ "count_jie_total": 1,
+ "count_total": 1,
+ "jafs_stat": "判决(1)",
+ "larq_stat": "2022(1)"
+ }
+ },
+ "bankrupt": {
+ "cases": [],
+ "count": {
+ "area_stat": "浙江省(0)",
+ "count_total": 0
+ }
+ },
+ "cases_tree": {
+ "administrative": [
+ {
+ "c_ah": "(2022)浙01行初****号",
+ "case_type": 400,
+ "n_ajbs": "g4h5i6j7k8l9m0n1o2p3q4r5s6t7u8v9",
+ "stage_type": 1
+ }
+ ],
+ "bankrupt": [],
+ "civil": [
+ {
+ "c_ah": "(2023)浙0110民初****号",
+ "case_type": 300,
+ "n_ajbs": "h5i6j7k8l9m0n1o2p3q4r5s6t7u8v9w0",
+ "stage_type": 1
+ },
+ {
+ "c_ah": "(2022)浙0110民初****号",
+ "case_type": 300,
+ "n_ajbs": "i6j7k8l9m0n1o2p3q4r5s6t7u8v9w0x1",
+ "stage_type": 1
+ },
+ {
+ "c_ah": "(2023)浙01民终****号",
+ "case_type": 300,
+ "n_ajbs": "j7k8l9m0n1o2p3q4r5s6t7u8v9w0x1y2",
+ "stage_type": 2
+ }
+ ],
+ "criminal": [
+ {
+ "c_ah": "(2023)浙01刑初****号",
+ "case_type": 200,
+ "n_ajbs": "k8l9m0n1o2p3q4r5s6t7u8v9w0x1y2z3",
+ "stage_type": 1
+ }
+ ],
+ "implement": [
+ {
+ "c_ah": "(2023)浙0110执****号",
+ "case_type": 500,
+ "n_ajbs": "l9m0n1o2p3q4r5s6t7u8v9w0x1y2z3a4",
+ "stage_type": 1
+ }
+ ],
+ "preservation": [
+ {
+ "c_ah": "(2023)浙0110财保****号",
+ "case_type": 700,
+ "n_ajbs": "m0n1o2p3q4r5s6t7u8v9w0x1y2z3a4b5",
+ "stage_type": 1
+ }
+ ]
+ },
+ "civil": {
+ "cases": [
+ {
+ "c_ah": "(2023)浙0110民初****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "杭州****食品有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被告"
+ },
+ {
+ "c_mc": "王某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "原告"
+ }
+ ],
+ "c_gkws_dsr": "原告王某,男,1985年7月15日生,汉族,住杭州市西湖区****小区x号楼x号。委托代理人徐某,浙江****律师事务所律师。被告杭州****食品有限公司,住所地杭州市余杭区****路x号。法定代表人吴某,执行董事兼总经理。委托代理人沈某,浙江****律师事务所律师。",
+ "c_gkws_pjjg": "一、被告杭州****食品有限公司于本判决生效之日起十日内向原告王某支付产品质量损害赔偿金200000元;二、被告杭州****食品有限公司于本判决生效之日起十日内向原告王某支付精神损害抚慰金50000元;三、驳回原告王某的其他诉讼请求。如果未按本判决指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百六十条规定,加倍支付迟延履行期间的债务利息。案件受理费8500元,由原告王某负担3500元,被告杭州****食品有限公司负担5000元。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于杭州市中级人民法院。",
+ "c_id": "k8l9m0n1o2p3q4r5s6t7u8v9w0x1y2z3",
+ "c_ssdy": "浙江省",
+ "d_jarq": "2023-04-15",
+ "d_larq": "2023-02-20",
+ "n_ajbs": "h5i6j7k8l9m0n1o2p3q4r5s6t7u8v9w0",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "民事一审",
+ "n_crc": 5678901234,
+ "n_jaay": "产品责任纠纷",
+ "n_jaay_tree": "侵权责任纠纷,产品责任纠纷",
+ "n_jafs": "判决",
+ "n_jbfy": "杭州市余杭区人民法院",
+ "n_jbfy_cj": "基层人民法院",
+ "n_laay": "产品责任纠纷",
+ "n_pj_victory": "败诉",
+ "n_qsbdje": 350000,
+ "n_qsbdje_level": 18,
+ "n_slcx": "一审",
+ "n_ssdw": "被告"
+ },
+ {
+ "c_ah": "(2022)浙0110民初****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "杭州****食品有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "原告"
+ },
+ {
+ "c_mc": "杭州****贸易有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被告"
+ }
+ ],
+ "c_gkws_dsr": "原告杭州****食品有限公司,住所地杭州市余杭区****路x号。法定代表人吴某,执行董事兼总经理。委托代理人沈某,浙江****律师事务所律师。被告杭州****贸易有限公司,住所地杭州市江干区****路x号。法定代表人赵某,董事长。委托代理人陆某,浙江****律师事务所律师。",
+ "c_gkws_pjjg": "一、被告杭州****贸易有限公司于本判决生效之日起十日内向原告杭州****食品有限公司支付货款450000元及违约金67500元;二、驳回原告杭州****食品有限公司的其他诉讼请求。如果未按本判决指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百六十条规定,加倍支付迟延履行期间的债务利息。案件受理费9175元,由原告杭州****食品有限公司负担2175元,被告杭州****贸易有限公司负担7000元。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于杭州市中级人民法院。",
+ "c_id": "l9m0n1o2p3q4r5s6t7u8v9w0x1y2z3a4",
+ "c_ssdy": "浙江省",
+ "d_jarq": "2022-11-25",
+ "d_larq": "2022-09-20",
+ "n_ajbs": "i6j7k8l9m0n1o2p3q4r5s6t7u8v9w0x1",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "民事一审",
+ "n_crc": 6789012345,
+ "n_jaay": "合同、准合同纠纷",
+ "n_jaay_tree": "合同、准合同纠纷,合同纠纷,买卖合同纠纷",
+ "n_jafs": "判决",
+ "n_jbfy": "杭州市余杭区人民法院",
+ "n_jbfy_cj": "基层人民法院",
+ "n_laay": "合同、准合同纠纷",
+ "n_pj_victory": "部分胜诉",
+ "n_qsbdje": 550000,
+ "n_qsbdje_level": 19,
+ "n_slcx": "一审",
+ "n_ssdw": "原告"
+ },
+ {
+ "c_ah": "(2023)浙01民终****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "杭州****食品有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "上诉人"
+ },
+ {
+ "c_mc": "王某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "被上诉人"
+ }
+ ],
+ "c_gkws_dsr": "上诉人(原审被告)杭州****食品有限公司,住所地杭州市余杭区****路x号。法定代表人吴某,执行董事兼总经理。委托代理人沈某,浙江****律师事务所律师。被上诉人(原审原告)王某,男,1985年7月15日生,汉族,住杭州市西湖区****小区x号楼x号。委托代理人徐某,浙江****律师事务所律师。",
+ "c_gkws_pjjg": "驳回上诉,维持原判。二审案件受理费8500元,由上诉人杭州****食品有限公司负担。本判决为终审判决。",
+ "c_id": "m0n1o2p3q4r5s6t7u8v9w0x1y2z3a4b5",
+ "c_ssdy": "浙江省",
+ "d_jarq": "2023-06-10",
+ "d_larq": "2023-05-15",
+ "n_ajbs": "j7k8l9m0n1o2p3q4r5s6t7u8v9w0x1y2",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "民事二审",
+ "n_crc": 7890123456,
+ "n_jaay": "产品责任纠纷",
+ "n_jaay_tree": "侵权责任纠纷,产品责任纠纷",
+ "n_jafs": "维持",
+ "n_jbfy": "杭州市中级人民法院",
+ "n_jbfy_cj": "中级人民法院",
+ "n_laay": "产品责任纠纷",
+ "n_pj_victory": "败诉",
+ "n_qsbdje": 350000,
+ "n_qsbdje_level": 18,
+ "n_slcx": "二审",
+ "n_ssdw": "上诉人"
+ }
+ ],
+ "count": {
+ "area_stat": "浙江省(3)",
+ "ay_stat": "产品责任纠纷(2),合同、准合同纠纷(1)",
+ "count_beigao": 1,
+ "count_jie_beigao": 1,
+ "count_jie_total": 3,
+ "count_total": 3,
+ "jafs_stat": "判决(2),维持(1)",
+ "larq_stat": "2022(1),2023(2)",
+ "money_beigao": 1,
+ "money_jie_beigao": 1,
+ "money_jie_total": 3,
+ "money_total": 3
+ }
+ },
+ "count": {
+ "area_stat": "浙江省(7)",
+ "ay_stat": "产品责任纠纷(2),合同、准合同纠纷(1),行政管理(1),生产、销售有毒、有害食品罪(1),执行案件(1),财产保全(1)",
+ "count_beigao": 2,
+ "count_jie_beigao": 2,
+ "count_jie_total": 7,
+ "count_total": 7,
+ "jafs_stat": "判决(3),维持(1),有期徒刑(1),执行(1),裁定(1)",
+ "larq_stat": "2022(2),2023(5)",
+ "money_beigao": 1,
+ "money_jie_beigao": 1,
+ "money_jie_total": 3,
+ "money_total": 3
+ },
+ "crc": 3456789012,
+ "criminal": {
+ "cases": [
+ {
+ "c_ah": "(2023)浙01刑初****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "杭州****食品有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被告单位"
+ },
+ {
+ "c_mc": "吴某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "被告人"
+ },
+ {
+ "c_mc": "章某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "被告人"
+ }
+ ],
+ "c_gkws_dsr": "公诉机关杭州市****区人民检察院。被告单位杭州****食品有限公司,住所地杭州市余杭区****路x号。被告人吴某,男,1972年9月20日生,汉族,浙江省人,大学文化,系杭州****食品有限公司法定代表人。因涉嫌犯生产、销售有毒、有害食品罪,于2023年3月10日被杭州市公安局刑事拘留,同年4月15日被逮捕,现羁押于杭州市第一看守所。辩护人梁某,浙江****律师事务所律师。被告人章某,男,1975年11月5日生,汉族,浙江省人,大学文化,系杭州****食品有限公司总经理。因涉嫌犯生产、销售有毒、有害食品罪,于2023年3月10日被杭州市公安局刑事拘留,同年4月15日被逮捕,现羁押于杭州市第一看守所。辩护人张某,浙江****律师事务所律师。",
+ "c_gkws_pjjg": "一、被告单位杭州****食品有限公司犯生产、销售有毒、有害食品罪,处罚金人民币二百万元;二、被告人吴某犯生产、销售有毒、有害食品罪,判处有期徒刑五年,并处罚金人民币二十万元;三、被告人章某犯生产、销售有毒、有害食品罪,判处有期徒刑四年,并处罚金人民币十五万元。如不服本判决,可在接到判决书的第二日起十日内,通过本院或者直接向浙江省高级人民法院提出上诉。被告人如果提出上诉,可以委托辩护人提出上诉状。",
+ "c_id": "n1o2p3q4r5s6t7u8v9w0x1y2z3a4b5c6",
+ "c_ssdy": "浙江省",
+ "d_jarq": "2023-07-20",
+ "d_larq": "2023-05-25",
+ "n_ajbs": "k8l9m0n1o2p3q4r5s6t7u8v9w0x1y2z3",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "刑事一审",
+ "n_crc": 8901234567,
+ "n_jaay": "生产、销售有毒、有害食品罪",
+ "n_jaay_tree": "危害公共安全罪,危害公共安全罪,生产、销售有毒、有害食品罪",
+ "n_jafs": "有期徒刑",
+ "n_jbfy": "杭州市中级人民法院",
+ "n_jbfy_cj": "中级人民法院",
+ "n_laay": "生产、销售有毒、有害食品罪",
+ "n_pj_victory": "败诉",
+ "n_slcx": "一审",
+ "n_ssdw": "被告单位"
+ }
+ ],
+ "count": {
+ "area_stat": "浙江省(1)",
+ "ay_stat": "生产、销售有毒、有害食品罪(1)",
+ "count_beigao": 0,
+ "count_jie_beigao": 0,
+ "count_jie_total": 1,
+ "count_total": 1,
+ "jafs_stat": "有期徒刑(1)",
+ "larq_stat": "2023(1)",
+ "money_beigao": 0,
+ "money_jie_beigao": 0,
+ "money_jie_total": 0,
+ "money_total": 0
+ }
+ },
+ "implement": {
+ "cases": [
+ {
+ "c_ah": "(2023)浙0110执****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "王某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "申请执行人"
+ },
+ {
+ "c_mc": "杭州****食品有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被执行人"
+ }
+ ],
+ "c_gkws_dsr": "申请执行人王某,男,1985年7月15日生,汉族,住杭州市西湖区****小区x号楼x号。委托代理人徐某,浙江****律师事务所律师。被执行人杭州****食品有限公司,住所地杭州市余杭区****路x号。法定代表人吴某,执行董事兼总经理。",
+ "c_gkws_pjjg": "一、被执行人杭州****食品有限公司应向申请执行人王某支付产品质量损害赔偿金200000元、精神损害抚慰金50000元及迟延履行期间的利息;二、若被执行人未按时履行上述义务,本院将依法评估、拍卖其名下的财产,所得价款优先清偿上述债务。",
+ "c_id": "o2p3q4r5s6t7u8v9w0x1y2z3a4b5c6d7",
+ "c_ssdy": "浙江省",
+ "d_jarq": "2023-06-25",
+ "d_larq": "2023-06-15",
+ "n_ajbs": "l9m0n1o2p3q4r5s6t7u8v9w0x1y2z3a4",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "执行案件",
+ "n_crc": 9012345678,
+ "n_jaay": "执行案件",
+ "n_jaay_tree": "执行案件,执行实施类",
+ "n_jafs": "执行",
+ "n_jbfy": "杭州市余杭区人民法院",
+ "n_jbfy_cj": "基层人民法院",
+ "n_laay": "执行案件",
+ "n_slcx": "执行",
+ "n_ssdw": "被执行人"
+ }
+ ],
+ "count": {
+ "area_stat": "浙江省(1)",
+ "count_total": 1
+ }
+ },
+ "preservation": {
+ "cases": [
+ {
+ "c_ah": "(2023)浙0110财保****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "王某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "申请人"
+ },
+ {
+ "c_mc": "杭州****食品有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被申请人"
+ }
+ ],
+ "c_gkws_dsr": "申请人王某,男,1985年7月15日生,汉族,住杭州市西湖区****小区x号楼x号。委托代理人徐某,浙江****律师事务所律师。被申请人杭州****食品有限公司,住所地杭州市余杭区****路x号。法定代表人吴某,执行董事兼总经理。",
+ "c_gkws_pjjg": "冻结被申请人杭州****食品有限公司名下银行账户(账号:****)中的存款350000元,冻结期限为一年。",
+ "c_id": "p3q4r5s6t7u8v9w0x1y2z3a4b5c6d7e8",
+ "c_ssdy": "浙江省",
+ "d_jarq": "2023-02-15",
+ "d_larq": "2023-02-10",
+ "n_ajbs": "m0n1o2p3q4r5s6t7u8v9w0x1y2z3a4b5",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "财产保全",
+ "n_crc": 1234567890,
+ "n_jaay": "财产保全",
+ "n_jaay_tree": "财产保全,诉前财产保全",
+ "n_jafs": "裁定",
+ "n_jbfy": "杭州市余杭区人民法院",
+ "n_jbfy_cj": "基层人民法院",
+ "n_laay": "财产保全",
+ "n_slcx": "保全",
+ "n_ssdw": "被申请人"
+ }
+ ],
+ "count": {
+ "area_stat": "浙江省(1)",
+ "count_total": 1
+ }
+ }
+ }
+ },
+ "sxbzxr": {
+ "data": {
+ "sxbzxr": []
+ }
+ },
+ "xgbzxr": {
+ "data": {
+ "xgbzxr": []
+ }
+ }
+ },
+ "orgName": "杭州****食品有限公司",
+ "own_tax": {
+ "items": [
+ {
+ "department": "西湖区税务局",
+ "legalpersonName": "孙某",
+ "location": "杭州市西湖区文三路",
+ "name": "杭州****食品有限公司",
+ "newOwnTaxBalance": "0",
+ "ownTaxAmount": "345.60",
+ "ownTaxBalance": "345.60",
+ "personIdName": "201|居民身份证",
+ "personIdNumber": "******",
+ "publishDate": "2023-03-10",
+ "regType": "有限责任公司",
+ "taxCategory": "企业所得税",
+ "taxIdNumber": "91330100MA01******",
+ "taxpayerType": "一般纳税人",
+ "type": "国税"
+ },
+ {
+ "department": "西湖区税务局",
+ "legalpersonName": "孙某",
+ "location": "杭州市西湖区文三路",
+ "name": "杭州****食品有限公司",
+ "newOwnTaxBalance": "0",
+ "ownTaxAmount": "178.90",
+ "ownTaxBalance": "178.90",
+ "personIdName": "201|居民身份证",
+ "personIdNumber": "******",
+ "publishDate": "2023-06-25",
+ "regType": "有限责任公司",
+ "taxCategory": "城市维护建设税",
+ "taxIdNumber": "91330100MA01******",
+ "taxpayerType": "一般纳税人",
+ "type": "地税"
+ },
+ {
+ "department": "西湖区税务局",
+ "legalpersonName": "孙某",
+ "location": "杭州市西湖区文三路",
+ "name": "杭州****食品有限公司",
+ "newOwnTaxBalance": "0",
+ "ownTaxAmount": "267.40",
+ "ownTaxBalance": "267.40",
+ "personIdName": "201|居民身份证",
+ "personIdNumber": "******",
+ "publishDate": "2023-09-18",
+ "regType": "有限责任公司",
+ "taxCategory": "增值税",
+ "taxIdNumber": "91330100MA01******",
+ "taxpayerType": "一般纳税人",
+ "type": "国税"
+ },
+ {
+ "department": "西湖区税务局",
+ "legalpersonName": "孙某",
+ "location": "杭州市西湖区文三路",
+ "name": "杭州****食品有限公司",
+ "newOwnTaxBalance": "0",
+ "ownTaxAmount": "89.70",
+ "ownTaxBalance": "89.70",
+ "personIdName": "201|居民身份证",
+ "personIdNumber": "******",
+ "publishDate": "2023-12-03",
+ "regType": "有限责任公司",
+ "taxCategory": "教育费附加",
+ "taxIdNumber": "91330100MA01******",
+ "taxpayerType": "一般纳税人",
+ "type": "地税"
+ }
+ ],
+ "total": 4
+ },
+ "pName": "吴某",
+ "punishment_info": {
+ "items": [
+ {
+ "content": "责令整改并加强用户信息保护,处罚款人民币8万元",
+ "decisionDate": "2023-06-30",
+ "departmentName": "杭州市网信办",
+ "evidence": "用户投诉个人信息泄露",
+ "legalPersonName": "刘刚",
+ "pecuniary": "80000",
+ "punishName": "杭州互联网服务有限公司",
+ "punishNumber": "杭网信罚〔2023〕第0702号",
+ "punishStatus": "已执行",
+ "reason": "违反《网络安全法》,用户个人信息保护不当",
+ "remark": "",
+ "source": "网信办",
+ "type": "信息安全",
+ "typeSecond": "信息泄露"
+ },
+ {
+ "content": "责令完善商家信息公示,并处罚款人民币4万元",
+ "decisionDate": "2023-10-18",
+ "departmentName": "杭州市市场监督管理局",
+ "evidence": "平台商家资质信息缺失",
+ "legalPersonName": "刘刚",
+ "pecuniary": "40000",
+ "punishName": "杭州互联网服务有限公司",
+ "punishNumber": "杭市监罚〔2023〕第1020号",
+ "punishStatus": "已执行",
+ "reason": "违反《电子商务法》,平台内经营者信息公示不完整",
+ "remark": "",
+ "source": "市场监督管理局",
+ "type": "电商违法",
+ "typeSecond": "信息公示"
+ }
+ ],
+ "total": 2
+ },
+ "relationship": [
+ "sh",
+ "lp",
+ "tm"
+ ],
+ "stockHolderItem": {
+ "investDate": "",
+ "investRate": "100.0%",
+ "orgHolderName": "吴某",
+ "orgHolderType": "自然人",
+ "subscriptAmt": 1500
+ },
+ "tax_contravention": {
+ "items": [
+ {
+ "case_type": "税收异常非正常户",
+ "department": "国家税务总局杭州市西湖区税务局",
+ "id": 2745256,
+ "publish_time": "2023-05-12",
+ "taxpayer_name": "杭州****食品有限公司"
+ },
+ {
+ "case_type": "欠税公告",
+ "department": "国家税务总局杭州市西湖区税务局",
+ "id": 2745257,
+ "publish_time": "2023-11-28",
+ "taxpayer_name": "杭州****食品有限公司"
+ }
+ ],
+ "total": 2
+ }
+ },
+ {
+ "abnormal_info": {
+ "items": [
+ {
+ "putDate": "2024-04-12",
+ "putDepartment": "成都市高新区市场监督管理局",
+ "putReason": "通过登记的住所或者经营场所无法联系的",
+ "removeDate": "",
+ "removeDepartment": "",
+ "removeReason": ""
+ },
+ {
+ "putDate": "2023-11-08",
+ "putDepartment": "成都市高新区市场监督管理局",
+ "putReason": "未按规定期限公示即时信息的",
+ "removeDate": "2024-02-20",
+ "removeDepartment": "成都市高新区市场监督管理局",
+ "removeReason": "已完成信息更新"
+ },
+ {
+ "putDate": "2024-01-15",
+ "putDepartment": "成都市高新区市场监督管理局",
+ "putReason": "未依照《企业信息公示暂行条例》第八条规定的期限公示年度报告的",
+ "removeDate": "",
+ "removeDepartment": "",
+ "removeReason": ""
+ }
+ ],
+ "total": 3
+ },
+ "adminPenalty": [
+ {
+ "content": "",
+ "decisionDate": "2022-11-10",
+ "departmentName": "成都市****教育局",
+ "legalPersonName": "刘某",
+ "punishNumber": "成教罚字(2022)****号",
+ "reason": "未经批准增设培训项目",
+ "type": "罚款"
+ }
+ ],
+ "basicInfo": {
+ "apprdate": "2022-12-15",
+ "base": "sc",
+ "candate": "",
+ "city": "成都市",
+ "companyOrgType": "有限责任公司(自然人投资或控股)",
+ "creditCode": "91510100MA6******",
+ "district": "武侯区",
+ "estiblishTime": "2017-03-18",
+ "industry": "教育",
+ "industry_code": "P",
+ "legalPersonName": "刘某",
+ "name": "成都****教育科技有限公司",
+ "nic_code": "P8294",
+ "nic_name": "教育-教育-教育辅助服务-教育辅助服务",
+ "opscope": "教育软件开发;教育咨询服务;教育辅助服务;文化艺术培训;语言培训;技能培训;网络技术服务;互联网数据服务;教育教学检测和评价活动。",
+ "province": "四川省",
+ "reccap": 0,
+ "reccapcur": "人民币",
+ "regCapital": "1000.000000万人民币",
+ "regCapitalCurrency": "人民币",
+ "regNumber": "510107******",
+ "regStatus": "存续",
+ "regorg": "成都市市场监督管理局",
+ "revdate": "2022-12-15",
+ "staffList": {
+ "result": [
+ {
+ "name": "刘某",
+ "type": "2",
+ "typeJoin": [
+ "执行董事"
+ ]
+ },
+ {
+ "name": "杨某",
+ "type": "3",
+ "typeJoin": [
+ "总经理"
+ ]
+ }
+ ]
+ },
+ "type": "1"
+ },
+ "dishonestExecutedPerson": [],
+ "executedPerson": [],
+ "financing_history": {
+ "items": [
+ {
+ "companyName": "成都物流运输有限公司",
+ "date": null,
+ "investorName": "顺丰投资,普洛斯",
+ "money": "1.5亿人民币",
+ "newsTitle": "",
+ "newsUrl": "",
+ "pubTime": 1675180800000,
+ "round": "B轮",
+ "share": "22%",
+ "value": "6.8亿人民币"
+ },
+ {
+ "companyName": "成都物流运输有限公司",
+ "date": null,
+ "investorName": "钟鼎资本,华创资本",
+ "money": "5000万人民币",
+ "newsTitle": "",
+ "newsUrl": "",
+ "pubTime": 1643644800000,
+ "round": "A轮",
+ "share": "28%",
+ "value": "1.8亿人民币"
+ }
+ ],
+ "total": 2
+ },
+ "fsource": "1",
+ "invest_history": {
+ "items": [
+ {
+ "alias": "智慧物流",
+ "amount": null,
+ "base": "cd",
+ "business_scope": "智慧物流技术研发;物流信息服务;供应链管理服务;仓储服务;装卸搬运服务;运输代理服务;货物运输代理;国际货物运输代理;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广。",
+ "category": "软件和信息技术服务业",
+ "creditCode": "91510100MA01P7Q8R9",
+ "estiblishTime": 1667232000000,
+ "id": 50123456,
+ "legalPersonId": 2301234567,
+ "legalPersonName": "唐经理",
+ "logo": "https://img5.tianyancha.com/logo/lll/example16.png@!f_200x200",
+ "name": "成都智慧物流科技有限公司",
+ "orgType": "有限责任公司(自然人投资或控股)",
+ "pencertileScore": 7456,
+ "percent": "60%",
+ "personType": 1,
+ "regCapital": "4000万人民币",
+ "regStatus": "存续",
+ "withdrawalTime": null
+ }
+ ],
+ "total": 2
+ },
+ "lawsuitInfo": {
+ "entout": {
+ "data": {
+ "administrative": {
+ "cases": [
+ {
+ "c_ah": "(2022)川01行初****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "成都****教育科技有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "原告"
+ },
+ {
+ "c_mc": "成都市****教育局",
+ "n_dsrlx": "机关团体",
+ "n_ssdw": "被告"
+ }
+ ],
+ "c_gkws_dsr": "原告成都****教育科技有限公司,住所地成都市武侯区****路x号。法定代表人刘某,执行董事兼总经理。委托代理人王某,四川****律师事务所律师。被告成都市****教育局,住所地成都市锦江区****路x号。负责人张某,局长。委托代理人周某,该局工作人员。",
+ "c_gkws_pjjg": "撤销被告成都市****教育局于2022年11月10日作出的成教罚字(2022)****号《行政处罚决定书》。案件受理费50元,由被告成都市****教育局负担。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于四川省高级人民法院。",
+ "c_id": "q4r5s6t7u8v9w0x1y2z3a4b5c6d7e8f9",
+ "c_ssdy": "四川省",
+ "d_jarq": "2023-02-10",
+ "d_larq": "2022-12-15",
+ "n_ajbs": "n1o2p3q4r5s6t7u8v9w0x1y2z3a4b5c6",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "行政一审",
+ "n_crc": 2345678901,
+ "n_jaay": "行政管理",
+ "n_jaay_tree": "行政管理,教育行政管理,教育培训机构管理",
+ "n_jafs": "判决",
+ "n_jbfy": "成都市中级人民法院",
+ "n_jbfy_cj": "中级人民法院",
+ "n_laay": "行政管理",
+ "n_pj_victory": "胜诉",
+ "n_slcx": "一审",
+ "n_ssdw": "原告"
+ }
+ ],
+ "count": {
+ "area_stat": "四川省(1)",
+ "ay_stat": "行政管理(1)",
+ "count_beigao": 0,
+ "count_jie_beigao": 0,
+ "count_jie_total": 1,
+ "count_total": 1,
+ "jafs_stat": "判决(1)",
+ "larq_stat": "2022(1)"
+ }
+ },
+ "bankrupt": {
+ "cases": [],
+ "count": {
+ "area_stat": "四川省(0)",
+ "count_total": 0
+ }
+ },
+ "cases_tree": {
+ "administrative": [
+ {
+ "c_ah": "(2022)川01行初****号",
+ "case_type": 400,
+ "n_ajbs": "n1o2p3q4r5s6t7u8v9w0x1y2z3a4b5c6",
+ "stage_type": 1
+ }
+ ],
+ "bankrupt": [],
+ "civil": [
+ {
+ "c_ah": "(2023)川0107民初****号",
+ "case_type": 300,
+ "n_ajbs": "o2p3q4r5s6t7u8v9w0x1y2z3a4b5c6d7",
+ "stage_type": 1
+ },
+ {
+ "c_ah": "(2022)川0107民初****号",
+ "case_type": 300,
+ "n_ajbs": "p3q4r5s6t7u8v9w0x1y2z3a4b5c6d7e8",
+ "stage_type": 1
+ },
+ {
+ "c_ah": "(2023)川01民终****号",
+ "case_type": 300,
+ "n_ajbs": "q4r5s6t7u8v9w0x1y2z3a4b5c6d7e8f9",
+ "stage_type": 2
+ }
+ ],
+ "criminal": [],
+ "implement": [
+ {
+ "c_ah": "(2022)川0107执****号",
+ "case_type": 500,
+ "n_ajbs": "r5s6t7u8v9w0x1y2z3a4b5c6d7e8f9g0",
+ "stage_type": 1
+ }
+ ],
+ "preservation": []
+ },
+ "civil": {
+ "cases": [
+ {
+ "c_ah": "(2023)川0107民初****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "成都****教育科技有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被告"
+ },
+ {
+ "c_mc": "赵某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "原告"
+ }
+ ],
+ "c_gkws_dsr": "原告赵某,男,1988年4月5日生,汉族,住成都市高新区****小区x号楼x号。委托代理人李某,四川****律师事务所律师。被告成都****教育科技有限公司,住所地成都市武侯区****路x号。法定代表人刘某,执行董事兼总经理。委托代理人陈某,四川****律师事务所律师。",
+ "c_gkws_pjjg": "一、被告成都****教育科技有限公司于本判决生效之日起十日内向原告赵某返还培训费用15000元;二、被告成都****教育科技有限公司于本判决生效之日起十日内向原告赵某支付违约金3000元;三、驳回原告赵某的其他诉讼请求。如果未按本判决指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百六十条规定,加倍支付迟延履行期间的债务利息。案件受理费400元,由原告赵某负担100元,被告成都****教育科技有限公司负担300元。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于成都市中级人民法院。",
+ "c_id": "r5s6t7u8v9w0x1y2z3a4b5c6d7e8f9g0",
+ "c_ssdy": "四川省",
+ "d_jarq": "2023-04-20",
+ "d_larq": "2023-03-15",
+ "n_ajbs": "o2p3q4r5s6t7u8v9w0x1y2z3a4b5c6d7",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "民事一审",
+ "n_crc": 3456789012,
+ "n_jaay": "合同、准合同纠纷",
+ "n_jaay_tree": "合同、准合同纠纷,合同纠纷,教育培训合同纠纷",
+ "n_jafs": "判决",
+ "n_jbfy": "成都市武侯区人民法院",
+ "n_jbfy_cj": "基层人民法院",
+ "n_laay": "合同、准合同纠纷",
+ "n_pj_victory": "败诉",
+ "n_qsbdje": 25000,
+ "n_qsbdje_level": 15,
+ "n_slcx": "一审",
+ "n_ssdw": "被告"
+ },
+ {
+ "c_ah": "(2022)川0107民初****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "成都****教育科技有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "原告"
+ },
+ {
+ "c_mc": "钟某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "被告"
+ }
+ ],
+ "c_gkws_dsr": "原告成都****教育科技有限公司,住所地成都市武侯区****路x号。法定代表人刘某,执行董事兼总经理。委托代理人陈某,四川****律师事务所律师。被告钟某,男,1982年7月12日生,汉族,住成都市青羊区****小区x号楼x号。",
+ "c_gkws_pjjg": "一、被告钟某于本判决生效之日起十日内向原告成都****教育科技有限公司支付教育培训费用25000元;二、驳回原告成都****教育科技有限公司的其他诉讼请求。如果未按本判决指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百六十条规定,加倍支付迟延履行期间的债务利息。案件受理费500元,由原告成都****教育科技有限公司负担200元,被告钟某负担300元。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于成都市中级人民法院。",
+ "c_id": "s6t7u8v9w0x1y2z3a4b5c6d7e8f9g0h1",
+ "c_ssdy": "四川省",
+ "d_jarq": "2022-11-15",
+ "d_larq": "2022-09-20",
+ "n_ajbs": "p3q4r5s6t7u8v9w0x1y2z3a4b5c6d7e8",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "民事一审",
+ "n_crc": 4567890123,
+ "n_jaay": "合同、准合同纠纷",
+ "n_jaay_tree": "合同、准合同纠纷,合同纠纷,教育培训合同纠纷",
+ "n_jafs": "判决",
+ "n_jbfy": "成都市武侯区人民法院",
+ "n_jbfy_cj": "基层人民法院",
+ "n_laay": "合同、准合同纠纷",
+ "n_pj_victory": "部分胜诉",
+ "n_qsbdje": 30000,
+ "n_qsbdje_level": 15,
+ "n_slcx": "一审",
+ "n_ssdw": "原告"
+ },
+ {
+ "c_ah": "(2023)川01民终****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "成都****教育科技有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "上诉人"
+ },
+ {
+ "c_mc": "赵某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "被上诉人"
+ }
+ ],
+ "c_gkws_dsr": "上诉人(原审被告)成都****教育科技有限公司,住所地成都市武侯区****路x号。法定代表人刘某,执行董事兼总经理。委托代理人陈某,四川****律师事务所律师。被上诉人(原审原告)赵某,男,1988年4月5日生,汉族,住成都市高新区****小区x号楼x号。委托代理人李某,四川****律师事务所律师。",
+ "c_gkws_pjjg": "驳回上诉,维持原判。二审案件受理费400元,由上诉人成都****教育科技有限公司负担。本判决为终审判决。",
+ "c_id": "t7u8v9w0x1y2z3a4b5c6d7e8f9g0h1i2",
+ "c_ssdy": "四川省",
+ "d_jarq": "2023-06-15",
+ "d_larq": "2023-05-20",
+ "n_ajbs": "q4r5s6t7u8v9w0x1y2z3a4b5c6d7e8f9",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "民事二审",
+ "n_crc": 5678901234,
+ "n_jaay": "合同、准合同纠纷",
+ "n_jaay_tree": "合同、准合同纠纷,合同纠纷,教育培训合同纠纷",
+ "n_jafs": "维持",
+ "n_jbfy": "成都市中级人民法院",
+ "n_jbfy_cj": "中级人民法院",
+ "n_laay": "合同、准合同纠纷",
+ "n_pj_victory": "败诉",
+ "n_qsbdje": 25000,
+ "n_qsbdje_level": 15,
+ "n_slcx": "二审",
+ "n_ssdw": "上诉人"
+ }
+ ],
+ "count": {
+ "area_stat": "四川省(3)",
+ "ay_stat": "合同、准合同纠纷(3)",
+ "count_beigao": 1,
+ "count_jie_beigao": 1,
+ "count_jie_total": 3,
+ "count_total": 3,
+ "jafs_stat": "判决(2),维持(1)",
+ "larq_stat": "2022(1),2023(2)",
+ "money_beigao": 1,
+ "money_jie_beigao": 1,
+ "money_jie_total": 3,
+ "money_total": 3
+ }
+ },
+ "count": {
+ "area_stat": "四川省(5)",
+ "ay_stat": "合同、准合同纠纷(3),行政管理(1),执行案件(1)",
+ "count_beigao": 1,
+ "count_jie_beigao": 1,
+ "count_jie_total": 5,
+ "count_total": 5,
+ "jafs_stat": "判决(3),维持(1),执行(1)",
+ "larq_stat": "2022(2),2023(3)",
+ "money_beigao": 1,
+ "money_jie_beigao": 1,
+ "money_jie_total": 3,
+ "money_total": 3
+ },
+ "crc": 1234567890,
+ "criminal": {
+ "cases": [],
+ "count": {
+ "area_stat": "四川省(0)",
+ "count_total": 0
+ }
+ },
+ "implement": {
+ "cases": [
+ {
+ "c_ah": "(2022)川0107执****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "成都****教育科技有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "申请执行人"
+ },
+ {
+ "c_mc": "钟某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "被执行人"
+ }
+ ],
+ "c_gkws_dsr": "申请执行人成都****教育科技有限公司,住所地成都市武侯区****路x号。法定代表人刘某,执行董事兼总经理。委托代理人陈某,四川****律师事务所律师。被执行人钟某,男,1982年7月12日生,汉族,住成都市青羊区****小区x号楼x号。",
+ "c_gkws_pjjg": "一、被执行人钟某应向申请执行人成都****教育科技有限公司支付教育培训费用25000元及迟延履行期间的利息;二、若被执行人未按时履行上述义务,本院将依法评估、拍卖其名下的财产,所得价款优先清偿上述债务。",
+ "c_id": "u8v9w0x1y2z3a4b5c6d7e8f9g0h1i2j3",
+ "c_ssdy": "四川省",
+ "d_jarq": "2022-12-10",
+ "d_larq": "2022-11-20",
+ "n_ajbs": "r5s6t7u8v9w0x1y2z3a4b5c6d7e8f9g0",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "执行案件",
+ "n_crc": 6789012345,
+ "n_jaay": "执行案件",
+ "n_jaay_tree": "执行案件,执行实施类",
+ "n_jafs": "执行",
+ "n_jbfy": "成都市武侯区人民法院",
+ "n_jbfy_cj": "基层人民法院",
+ "n_laay": "执行案件",
+ "n_slcx": "执行",
+ "n_ssdw": "申请执行人"
+ }
+ ],
+ "count": {
+ "area_stat": "四川省(1)",
+ "count_total": 1
+ }
+ },
+ "preservation": {
+ "cases": [],
+ "count": {
+ "area_stat": "四川省(0)",
+ "count_total": 0
+ }
+ }
+ }
+ },
+ "sxbzxr": {
+ "data": {
+ "sxbzxr": []
+ }
+ },
+ "xgbzxr": {
+ "data": {
+ "xgbzxr": []
+ }
+ }
+ },
+ "orgName": "成都****教育科技有限公司",
+ "own_tax": {
+ "items": [
+ {
+ "department": "高新区税务局",
+ "legalpersonName": "郑某",
+ "location": "成都市高新区天府大道",
+ "name": "成都****教育科技有限公司",
+ "newOwnTaxBalance": "0",
+ "ownTaxAmount": "567.30",
+ "ownTaxBalance": "567.30",
+ "personIdName": "201|居民身份证",
+ "personIdNumber": "******",
+ "publishDate": "2023-05-15",
+ "regType": "有限责任公司",
+ "taxCategory": "企业所得税",
+ "taxIdNumber": "91510100MA01******",
+ "taxpayerType": "一般纳税人",
+ "type": "国税"
+ },
+ {
+ "department": "高新区税务局",
+ "legalpersonName": "郑某",
+ "location": "成都市高新区天府大道",
+ "name": "成都****教育科技有限公司",
+ "newOwnTaxBalance": "0",
+ "ownTaxAmount": "234.80",
+ "ownTaxBalance": "234.80",
+ "personIdName": "201|居民身份证",
+ "personIdNumber": "******",
+ "publishDate": "2023-08-20",
+ "regType": "有限责任公司",
+ "taxCategory": "城市维护建设税",
+ "taxIdNumber": "91510100MA01******",
+ "taxpayerType": "一般纳税人",
+ "type": "地税"
+ }
+ ],
+ "total": 2
+ },
+ "pName": "刘某",
+ "punishment_info": {
+ "items": [
+ {
+ "content": "责令卸载超载货物,并处罚款人民币2万元",
+ "decisionDate": "2023-04-25",
+ "departmentName": "成都市交通运输局",
+ "evidence": "路政检查发现车辆超载",
+ "legalPersonName": "赵军",
+ "pecuniary": "20000",
+ "punishName": "成都物流运输有限公司",
+ "punishNumber": "蓉交罚〔2023〕第0427号",
+ "punishStatus": "已执行",
+ "reason": "违反《道路运输条例》,超载运输",
+ "remark": "",
+ "source": "交通运输局",
+ "type": "运输违法",
+ "typeSecond": "超载运输"
+ },
+ {
+ "content": "责令维修车辆达到排放标准,并处罚款人民币1.5万元",
+ "decisionDate": "2023-08-12",
+ "departmentName": "成都市环保局",
+ "evidence": "环保检测尾气排放不达标",
+ "legalPersonName": "赵军",
+ "pecuniary": "15000",
+ "punishName": "成都物流运输有限公司",
+ "punishNumber": "蓉环罚〔2023〕第0815号",
+ "punishStatus": "已执行",
+ "reason": "违反《大气污染防治法》,车辆尾气排放超标",
+ "remark": "",
+ "source": "环保局",
+ "type": "环境违法",
+ "typeSecond": "尾气超标"
+ },
+ {
+ "content": "责令停业整顿,并处罚款人民币10万元",
+ "decisionDate": "2024-01-08",
+ "departmentName": "成都市应急管理局",
+ "evidence": "安全检查发现危险品运输违规",
+ "legalPersonName": "赵军",
+ "pecuniary": "100000",
+ "punishName": "成都物流运输有限公司",
+ "punishNumber": "蓉应急罚〔2024〕第0110号",
+ "punishStatus": "已执行",
+ "reason": "违反《安全生产法》,危险品运输安全措施不到位",
+ "remark": "",
+ "source": "应急管理局",
+ "type": "安全生产",
+ "typeSecond": "危险品运输"
+ }
+ ],
+ "total": 3
+ },
+ "relationship": [
+ "sh",
+ "lp",
+ "tm"
+ ],
+ "stockHolderItem": {
+ "investDate": "",
+ "investRate": "100.0%",
+ "orgHolderName": "刘某",
+ "orgHolderType": "自然人",
+ "subscriptAmt": 1000
+ },
+ "tax_contravention": {
+ "items": [],
+ "total": 0
+ }
+ },
+ {
+ "abnormal_info": {
+ "items": [
+ {
+ "putDate": "2023-06-20",
+ "putDepartment": "武汉市洪山区市场监督管理局",
+ "putReason": "未按规定期限公示股权变更信息的",
+ "removeDate": "2023-12-05",
+ "removeDepartment": "武汉市洪山区市场监督管理局",
+ "removeReason": "已公示股权变更信息"
+ },
+ {
+ "putDate": "2024-05-08",
+ "putDepartment": "武汉市洪山区市场监督管理局",
+ "putReason": "通过登记的住所或者经营场所无法联系的",
+ "removeDate": "",
+ "removeDepartment": "",
+ "removeReason": ""
+ }
+ ],
+ "total": 2
+ },
+ "adminPenalty": [
+ {
+ "content": "",
+ "decisionDate": "2022-05-18",
+ "departmentName": "天津市****交通委员会",
+ "legalPersonName": "吴某",
+ "punishNumber": "津交罚字(2022)****号",
+ "reason": "超限运输违规",
+ "type": "罚款"
+ },
+ {
+ "content": "",
+ "decisionDate": "2021-09-05",
+ "departmentName": "天津市****税务局",
+ "legalPersonName": "吴某",
+ "punishNumber": "津税罚字(2021)****号",
+ "reason": "未按期申报纳税",
+ "type": "罚款"
+ }
+ ],
+ "basicInfo": {
+ "apprdate": "2022-08-10",
+ "base": "tj",
+ "candate": "",
+ "city": "天津市",
+ "companyOrgType": "有限责任公司(自然人投资或控股)",
+ "creditCode": "91120100MA7******",
+ "district": "东丽区",
+ "estiblishTime": "2015-06-25",
+ "industry": "交通运输、仓储和邮政业",
+ "industry_code": "G",
+ "legalPersonName": "吴某",
+ "name": "天津****物流有限公司",
+ "nic_code": "G5320",
+ "nic_name": "交通运输、仓储和邮政业-道路运输业-道路货物运输",
+ "opscope": "普通货物运输;仓储服务(危险化学品除外);物流信息咨询;供应链管理;运输代理服务;汽车租赁;货物装卸服务;货运信息咨询服务;国内货运代理;国际货运代理服务。",
+ "province": "天津市",
+ "reccap": 0,
+ "reccapcur": "人民币",
+ "regCapital": "2000.000000万人民币",
+ "regCapitalCurrency": "人民币",
+ "regNumber": "120113******",
+ "regStatus": "存续",
+ "regorg": "天津市市场监督管理局",
+ "revdate": "2022-08-10",
+ "staffList": {
+ "result": [
+ {
+ "name": "吴某",
+ "type": "2",
+ "typeJoin": [
+ "执行董事"
+ ]
+ },
+ {
+ "name": "林某",
+ "type": "3",
+ "typeJoin": [
+ "总经理"
+ ]
+ },
+ {
+ "name": "石某",
+ "type": "4",
+ "typeJoin": [
+ "监事"
+ ]
+ }
+ ]
+ },
+ "type": "1"
+ },
+ "dishonestExecutedPerson": [
+ {
+ "c_ah": "(2023)津0113执****号",
+ "c_fymc": "天津市东丽区人民法院",
+ "c_wfss": "有履行能力而拒不履行生效法律文书确定义务",
+ "c_zxbd": "(2023)津0113执****号",
+ "d_fbsj": "2023-08-15",
+ "d_lrsj": "2023-08-10",
+ "n_fbrw": "1"
+ }
+ ],
+ "executedPerson": [
+ {
+ "c_ah": "(2023)津0113执****号",
+ "c_beizhu": "全部未履行",
+ "c_bzxqk": "全部未履行",
+ "c_zxbd": "(2023)津0113执****号",
+ "d_lrsj": "2023-07-20",
+ "d_zxsj": "",
+ "n_bddqje": 850000
+ }
+ ],
+ "financing_history": {
+ "items": [
+ {
+ "companyName": "武汉教育科技有限公司",
+ "date": null,
+ "investorName": "新东方,好未来",
+ "money": "8000万人民币",
+ "newsTitle": "武汉教育科技获得8000万元B轮融资",
+ "newsUrl": "https://example.com/news6",
+ "pubTime": 1683648000000,
+ "round": "B轮",
+ "share": "18%",
+ "value": "4.4亿人民币"
+ },
+ {
+ "companyName": "武汉教育科技有限公司",
+ "date": null,
+ "investorName": "立思辰,拓维信息",
+ "money": "3000万人民币",
+ "newsTitle": "",
+ "newsUrl": "",
+ "pubTime": 1652112000000,
+ "round": "A轮",
+ "share": "25%",
+ "value": "1.2亿人民币"
+ },
+ {
+ "companyName": "武汉教育科技有限公司",
+ "date": null,
+ "investorName": "华中科技大学基金",
+ "money": "1000万人民币",
+ "newsTitle": "",
+ "newsUrl": "",
+ "pubTime": 1620576000000,
+ "round": "天使轮",
+ "share": "15%",
+ "value": "6667万人民币"
+ }
+ ],
+ "total": 3
+ },
+ "fsource": "1",
+ "invest_history": {
+ "items": [
+ {
+ "alias": "在线教育",
+ "amount": null,
+ "base": "wh",
+ "business_scope": "在线教育软件开发;教育咨询服务;职业技能培训;计算机技术培训;软件开发;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广;文化艺术交流活动组织;会议及展览服务。",
+ "category": "软件和信息技术服务业",
+ "creditCode": "91420100MA01Q8R9S0",
+ "estiblishTime": 1640995200000,
+ "id": 51234567,
+ "legalPersonId": 2312345678,
+ "legalPersonName": "教授王",
+ "logo": "https://img5.tianyancha.com/logo/lll/example17.png@!f_200x200",
+ "name": "武汉在线教育平台有限公司",
+ "orgType": "有限责任公司(自然人投资或控股)",
+ "pencertileScore": 6234,
+ "percent": "35%",
+ "personType": 1,
+ "regCapital": "2000万人民币",
+ "regStatus": "存续",
+ "withdrawalTime": null
+ },
+ {
+ "alias": "智能教育",
+ "amount": null,
+ "base": "wh",
+ "business_scope": "教育软件开发;人工智能在教育领域的应用;虚拟现实软件开发;增强现实软件开发;教学设备制造;教学设备销售;技术服务、技术开发、技术咨询、技术交流、技术转让、技术推广。",
+ "category": "软件和信息技术服务业",
+ "creditCode": "91420100MA01R9S0T1",
+ "estiblishTime": 1656633600000,
+ "id": 52345678,
+ "legalPersonId": 2323456789,
+ "legalPersonName": "刘教授",
+ "logo": "https://img5.tianyancha.com/logo/lll/example18.png@!f_200x200",
+ "name": "武汉智能教育装备有限公司",
+ "orgType": "有限责任公司(自然人投资或控股)",
+ "pencertileScore": 5678,
+ "percent": "45%",
+ "personType": 1,
+ "regCapital": "1500万人民币",
+ "regStatus": "存续",
+ "withdrawalTime": null
+ }
+ ],
+ "total": 3
+ },
+ "lawsuitInfo": {
+ "entout": {
+ "data": {
+ "administrative": {
+ "cases": [
+ {
+ "c_ah": "(2022)津01行初****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "天津****物流有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "原告"
+ },
+ {
+ "c_mc": "天津市****交通委员会",
+ "n_dsrlx": "机关团体",
+ "n_ssdw": "被告"
+ }
+ ],
+ "c_gkws_dsr": "原告天津****物流有限公司,住所地天津市东丽区****大道x号。法定代表人吴某,执行董事兼总经理。委托代理人王某,天津****律师事务所律师。被告天津市****交通委员会,住所地天津市和平区****路x号。负责人陈某,主任。委托代理人马某,该委员会工作人员。",
+ "c_gkws_pjjg": "驳回原告天津****物流有限公司的诉讼请求。案件受理费50元,由原告天津****物流有限公司负担。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于天津市高级人民法院。",
+ "c_id": "v9w0x1y2z3a4b5c6d7e8f9g0h1i2j3k4",
+ "c_ssdy": "天津市",
+ "d_jarq": "2022-07-25",
+ "d_larq": "2022-06-10",
+ "n_ajbs": "s6t7u8v9w0x1y2z3a4b5c6d7e8f9g0h1",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "行政一审",
+ "n_crc": 7890123456,
+ "n_jaay": "行政管理",
+ "n_jaay_tree": "行政管理,道路交通管理,道路运输管理",
+ "n_jafs": "判决",
+ "n_jbfy": "天津市第一中级人民法院",
+ "n_jbfy_cj": "中级人民法院",
+ "n_laay": "行政管理",
+ "n_pj_victory": "败诉",
+ "n_slcx": "一审",
+ "n_ssdw": "原告"
+ }
+ ],
+ "count": {
+ "area_stat": "天津市(1)",
+ "ay_stat": "行政管理(1)",
+ "count_beigao": 0,
+ "count_jie_beigao": 0,
+ "count_jie_total": 1,
+ "count_total": 1,
+ "jafs_stat": "判决(1)",
+ "larq_stat": "2022(1)"
+ }
+ },
+ "bankrupt": {
+ "cases": [],
+ "count": {
+ "area_stat": "天津市(0)",
+ "count_total": 0
+ }
+ },
+ "cases_tree": {
+ "administrative": [
+ {
+ "c_ah": "(2022)津01行初****号",
+ "case_type": 400,
+ "n_ajbs": "s6t7u8v9w0x1y2z3a4b5c6d7e8f9g0h1",
+ "stage_type": 1
+ }
+ ],
+ "bankrupt": [],
+ "civil": [
+ {
+ "c_ah": "(2022)津0113民初****号",
+ "case_type": 300,
+ "n_ajbs": "t7u8v9w0x1y2z3a4b5c6d7e8f9g0h1i2",
+ "stage_type": 1
+ },
+ {
+ "c_ah": "(2023)津0113民初****号",
+ "case_type": 300,
+ "n_ajbs": "u8v9w0x1y2z3a4b5c6d7e8f9g0h1i2j3",
+ "stage_type": 1
+ },
+ {
+ "c_ah": "(2023)津01民终****号",
+ "case_type": 300,
+ "n_ajbs": "v9w0x1y2z3a4b5c6d7e8f9g0h1i2j3k4",
+ "stage_type": 2
+ }
+ ],
+ "criminal": [
+ {
+ "c_ah": "(2023)津0113刑初****号",
+ "case_type": 200,
+ "n_ajbs": "w0x1y2z3a4b5c6d7e8f9g0h1i2j3k4l5",
+ "stage_type": 1
+ }
+ ],
+ "implement": [
+ {
+ "c_ah": "(2023)津0113执****号",
+ "case_type": 500,
+ "n_ajbs": "x1y2z3a4b5c6d7e8f9g0h1i2j3k4l5m6",
+ "stage_type": 1
+ }
+ ],
+ "preservation": []
+ },
+ "civil": {
+ "cases": [
+ {
+ "c_ah": "(2022)津0113民初****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "天津****物流有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被告"
+ },
+ {
+ "c_mc": "北京****贸易有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "原告"
+ }
+ ],
+ "c_gkws_dsr": "原告北京****贸易有限公司,住所地北京市朝阳区****路x号。法定代表人张某,总经理。委托代理人赵某,北京****律师事务所律师。被告天津****物流有限公司,住所地天津市东丽区****大道x号。法定代表人吴某,执行董事兼总经理。委托代理人郑某,天津****律师事务所律师。",
+ "c_gkws_pjjg": "一、被告天津****物流有限公司于本判决生效之日起十日内向原告北京****贸易有限公司支付货物损失赔偿金200000元及运费80000元;二、驳回原告北京****贸易有限公司的其他诉讼请求。如果未按本判决指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百六十条规定,加倍支付迟延履行期间的债务利息。案件受理费12800元,由原告北京****贸易有限公司负担3800元,被告天津****物流有限公司负担9000元。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于天津市第一中级人民法院。",
+ "c_id": "w0x1y2z3a4b5c6d7e8f9g0h1i2j3k4l5",
+ "c_ssdy": "天津市",
+ "d_jarq": "2022-11-15",
+ "d_larq": "2022-09-05",
+ "n_ajbs": "t7u8v9w0x1y2z3a4b5c6d7e8f9g0h1i2",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "民事一审",
+ "n_crc": 8901234567,
+ "n_jaay": "合同、无因管理、不当得利",
+ "n_jaay_tree": "合同、无因管理、不当得利,合同纠纷,运输合同纠纷",
+ "n_jafs": "判决",
+ "n_jbfy": "天津市东丽区人民法院",
+ "n_jbfy_cj": "基层人民法院",
+ "n_laay": "合同、无因管理、不当得利",
+ "n_pj_victory": "败诉",
+ "n_qsbdje": 350000,
+ "n_qsbdje_level": 16,
+ "n_slcx": "一审",
+ "n_ssdw": "被告"
+ },
+ {
+ "c_ah": "(2023)津0113民初****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "天津****物流有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "原告"
+ },
+ {
+ "c_mc": "河北****制造有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被告"
+ }
+ ],
+ "c_gkws_dsr": "原告天津****物流有限公司,住所地天津市东丽区****大道x号。法定代表人吴某,执行董事兼总经理。委托代理人郑某,天津****律师事务所律师。被告河北****制造有限公司,住所地河北省石家庄市****区x号。法定代表人李某,董事长。委托代理人孙某,河北****律师事务所律师。",
+ "c_gkws_pjjg": "一、被告河北****制造有限公司于本判决生效之日起十日内向原告天津****物流有限公司支付运输服务费850000元;二、驳回原告天津****物流有限公司的其他诉讼请求。如果未按本判决指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百六十条规定,加倍支付迟延履行期间的债务利息。案件受理费14900元,由原告天津****物流有限公司负担3900元,被告河北****制造有限公司负担11000元。如不服本判决,可在判决书送达之日起十五日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于天津市第一中级人民法院。",
+ "c_id": "x1y2z3a4b5c6d7e8f9g0h1i2j3k4l5m6",
+ "c_ssdy": "天津市",
+ "d_jarq": "2023-05-25",
+ "d_larq": "2023-03-15",
+ "n_ajbs": "u8v9w0x1y2z3a4b5c6d7e8f9g0h1i2j3",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "民事一审",
+ "n_crc": 9012345678,
+ "n_jaay": "合同、无因管理、不当得利",
+ "n_jaay_tree": "合同、无因管理、不当得利,合同纠纷,运输合同纠纷",
+ "n_jafs": "判决",
+ "n_jbfy": "天津市东丽区人民法院",
+ "n_jbfy_cj": "基层人民法院",
+ "n_laay": "合同、无因管理、不当得利",
+ "n_pj_victory": "部分胜诉",
+ "n_qsbdje": 950000,
+ "n_qsbdje_level": 16,
+ "n_slcx": "一审",
+ "n_ssdw": "原告"
+ },
+ {
+ "c_ah": "(2023)津01民终****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "天津****物流有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被上诉人"
+ },
+ {
+ "c_mc": "河北****制造有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "上诉人"
+ }
+ ],
+ "c_gkws_dsr": "上诉人(原审被告)河北****制造有限公司,住所地河北省石家庄市****区x号。法定代表人李某,董事长。委托代理人孙某,河北****律师事务所律师。被上诉人(原审原告)天津****物流有限公司,住所地天津市东丽区****大道x号。法定代表人吴某,执行董事兼总经理。委托代理人郑某,天津****律师事务所律师。",
+ "c_gkws_pjjg": "驳回上诉,维持原判。二审案件受理费14900元,由上诉人河北****制造有限公司负担。本判决为终审判决。",
+ "c_id": "y2z3a4b5c6d7e8f9g0h1i2j3k4l5m6n7",
+ "c_ssdy": "天津市",
+ "d_jarq": "2023-07-10",
+ "d_larq": "2023-06-15",
+ "n_ajbs": "v9w0x1y2z3a4b5c6d7e8f9g0h1i2j3k4",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "民事二审",
+ "n_crc": 123456789,
+ "n_jaay": "合同、无因管理、不当得利",
+ "n_jaay_tree": "合同、无因管理、不当得利,合同纠纷,运输合同纠纷",
+ "n_jafs": "维持",
+ "n_jbfy": "天津市第一中级人民法院",
+ "n_jbfy_cj": "中级人民法院",
+ "n_laay": "合同、无因管理、不当得利",
+ "n_pj_victory": "胜诉",
+ "n_qsbdje": 950000,
+ "n_qsbdje_level": 16,
+ "n_slcx": "二审",
+ "n_ssdw": "被上诉人"
+ }
+ ],
+ "count": {
+ "area_stat": "天津市(3)",
+ "ay_stat": "合同、无因管理、不当得利(3)",
+ "count_beigao": 1,
+ "count_jie_beigao": 1,
+ "count_jie_total": 3,
+ "count_total": 3,
+ "jafs_stat": "判决(2),维持(1)",
+ "larq_stat": "2022(1),2023(2)",
+ "money_beigao": 1,
+ "money_jie_beigao": 1,
+ "money_jie_total": 3,
+ "money_total": 3
+ }
+ },
+ "count": {
+ "area_stat": "天津市(6)",
+ "ay_stat": "刑事犯罪(1),合同、无因管理、不当得利(3),执行案件(1),行政管理(1)",
+ "count_beigao": 2,
+ "count_jie_beigao": 2,
+ "count_jie_total": 6,
+ "count_total": 6,
+ "jafs_stat": "判决(4),维持(1),执行(1)",
+ "larq_stat": "2022(2),2023(4)",
+ "money_beigao": 1,
+ "money_jie_beigao": 1,
+ "money_jie_total": 3,
+ "money_total": 3
+ },
+ "crc": 234567890,
+ "criminal": {
+ "cases": [
+ {
+ "c_ah": "(2023)津0113刑初****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "天津****物流有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "单位犯罪"
+ },
+ {
+ "c_mc": "吴某",
+ "n_dsrlx": "自然人",
+ "n_ssdw": "被告人"
+ }
+ ],
+ "c_gkws_dsr": "公诉机关天津市东丽区人民检察院。被告人吴某,男,1975年8月15日生,汉族,住天津市河西区****小区x号楼x号,系天津****物流有限公司法定代表人。被告单位天津****物流有限公司,住所地天津市东丽区****大道x号。法定代表人吴某,执行董事兼总经理。辩护人黄某,天津****律师事务所律师。",
+ "c_gkws_pjjg": "一、被告单位天津****物流有限公司犯危险驾驶罪,判处罚金人民币二十万元;二、被告人吴某犯危险驾驶罪,判处拘役三个月,缓刑六个月,并处罚金人民币五千元。如不服本判决,可在判决书送达之日起十日内向本院递交上诉状,并按对方当事人的人数提出副本,上诉于天津市第一中级人民法院。",
+ "c_id": "z3a4b5c6d7e8f9g0h1i2j3k4l5m6n7o8",
+ "c_ssdy": "天津市",
+ "d_jarq": "2023-04-20",
+ "d_larq": "2023-03-10",
+ "n_ajbs": "w0x1y2z3a4b5c6d7e8f9g0h1i2j3k4l5",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "刑事一审",
+ "n_crc": 345678901,
+ "n_jaay": "刑事犯罪",
+ "n_jaay_tree": "刑事犯罪,危害公共安全罪,危险驾驶罪",
+ "n_jafs": "判决",
+ "n_jbfy": "天津市东丽区人民法院",
+ "n_jbfy_cj": "基层人民法院",
+ "n_laay": "刑事犯罪",
+ "n_slcx": "一审",
+ "n_ssdw": "单位犯罪"
+ }
+ ],
+ "count": {
+ "area_stat": "天津市(1)",
+ "ay_stat": "刑事犯罪(1)",
+ "count_total": 1
+ }
+ },
+ "implement": {
+ "cases": [
+ {
+ "c_ah": "(2023)津0113执****号",
+ "c_dsrxx": [
+ {
+ "c_mc": "天津****物流有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "被执行人"
+ },
+ {
+ "c_mc": "河北****制造有限公司",
+ "n_dsrlx": "企业组织",
+ "n_ssdw": "申请执行人"
+ }
+ ],
+ "c_gkws_dsr": "申请执行人河北****制造有限公司,住所地河北省石家庄市****区x号。法定代表人李某,董事长。委托代理人孙某,河北****律师事务所律师。被执行人天津****物流有限公司,住所地天津市东丽区****大道x号。法定代表人吴某,执行董事兼总经理。",
+ "c_gkws_pjjg": "一、被执行人天津****物流有限公司应向申请执行人河北****制造有限公司支付运输服务费850000元及迟延履行期间的利息;二、若被执行人未按时履行上述义务,本院将依法评估、拍卖其名下的财产,所得价款优先清偿上述债务。",
+ "c_id": "a4b5c6d7e8f9g0h1i2j3k4l5m6n7o8p9",
+ "c_ssdy": "天津市",
+ "d_jarq": "2023-07-20",
+ "d_larq": "2023-07-15",
+ "n_ajbs": "x1y2z3a4b5c6d7e8f9g0h1i2j3k4l5m6",
+ "n_ajjzjd": "已结案",
+ "n_ajlx": "执行案件",
+ "n_crc": 456789012,
+ "n_jaay": "执行案件",
+ "n_jaay_tree": "执行案件,执行实施类",
+ "n_jafs": "执行",
+ "n_jbfy": "天津市东丽区人民法院",
+ "n_jbfy_cj": "基层人民法院",
+ "n_laay": "执行案件",
+ "n_slcx": "执行",
+ "n_ssdw": "被执行人"
+ }
+ ],
+ "count": {
+ "area_stat": "天津市(1)",
+ "count_total": 1
+ }
+ },
+ "preservation": {
+ "cases": [],
+ "count": {
+ "area_stat": "天津市(0)",
+ "count_total": 0
+ }
+ }
+ }
+ },
+ "sxbzxr": {
+ "data": {
+ "sxbzxr": [
+ {
+ "c_ah": "(2023)津0113执****号",
+ "c_fymc": "天津市东丽区人民法院",
+ "c_wfss": "有履行能力而拒不履行生效法律文书确定义务",
+ "c_zxbd": "(2023)津0113执****号",
+ "d_fbsj": "2023-08-15",
+ "d_lrsj": "2023-08-10",
+ "n_fbrw": "1"
+ }
+ ]
+ }
+ },
+ "xgbzxr": {
+ "data": {
+ "xgbzxr": [
+ {
+ "c_ah": "(2023)津0113执****号",
+ "c_beizhu": "全部未履行",
+ "c_bzxqk": "全部未履行",
+ "c_zxbd": "(2023)津0113执****号",
+ "d_lrsj": "2023-07-20",
+ "d_zxsj": "",
+ "n_bddqje": 850000
+ }
+ ]
+ }
+ }
+ },
+ "orgName": "天津****物流有限公司",
+ "own_tax": {
+ "items": [
+ {
+ "department": "和平区税务局",
+ "legalpersonName": "王某",
+ "location": "天津市和平区南京路",
+ "name": "天津****物流有限公司",
+ "newOwnTaxBalance": "0",
+ "ownTaxAmount": "890.20",
+ "ownTaxBalance": "890.20",
+ "personIdName": "201|居民身份证",
+ "personIdNumber": "******",
+ "publishDate": "2023-01-25",
+ "regType": "有限责任公司",
+ "taxCategory": "企业所得税",
+ "taxIdNumber": "91120100MA01******",
+ "taxpayerType": "一般纳税人",
+ "type": "国税"
+ },
+ {
+ "department": "和平区税务局",
+ "legalpersonName": "王某",
+ "location": "天津市和平区南京路",
+ "name": "天津****物流有限公司",
+ "newOwnTaxBalance": "0",
+ "ownTaxAmount": "445.60",
+ "ownTaxBalance": "445.60",
+ "personIdName": "201|居民身份证",
+ "personIdNumber": "******",
+ "publishDate": "2023-04-18",
+ "regType": "有限责任公司",
+ "taxCategory": "城市维护建设税",
+ "taxIdNumber": "91120100MA01******",
+ "taxpayerType": "一般纳税人",
+ "type": "地税"
+ },
+ {
+ "department": "和平区税务局",
+ "legalpersonName": "王某",
+ "location": "天津市和平区南京路",
+ "name": "天津****物流有限公司",
+ "newOwnTaxBalance": "0",
+ "ownTaxAmount": "678.90",
+ "ownTaxBalance": "678.90",
+ "personIdName": "201|居民身份证",
+ "personIdNumber": "******",
+ "publishDate": "2023-07-12",
+ "regType": "有限责任公司",
+ "taxCategory": "增值税",
+ "taxIdNumber": "91120100MA01******",
+ "taxpayerType": "一般纳税人",
+ "type": "国税"
+ },
+ {
+ "department": "和平区税务局",
+ "legalpersonName": "王某",
+ "location": "天津市和平区南京路",
+ "name": "天津****物流有限公司",
+ "newOwnTaxBalance": "0",
+ "ownTaxAmount": "123.40",
+ "ownTaxBalance": "123.40",
+ "personIdName": "201|居民身份证",
+ "personIdNumber": "******",
+ "publishDate": "2023-10-05",
+ "regType": "有限责任公司",
+ "taxCategory": "教育费附加",
+ "taxIdNumber": "91120100MA01******",
+ "taxpayerType": "一般纳税人",
+ "type": "地税"
+ },
+ {
+ "department": "和平区税务局",
+ "legalpersonName": "王某",
+ "location": "天津市和平区南京路",
+ "name": "天津****物流有限公司",
+ "newOwnTaxBalance": "0",
+ "ownTaxAmount": "234.70",
+ "ownTaxBalance": "234.70",
+ "personIdName": "201|居民身份证",
+ "personIdNumber": "******",
+ "publishDate": "2023-12-20",
+ "regType": "有限责任公司",
+ "taxCategory": "个人所得税",
+ "taxIdNumber": "91120100MA01******",
+ "taxpayerType": "一般纳税人",
+ "type": "国税"
+ },
+ {
+ "department": "和平区税务局",
+ "legalpersonName": "王某",
+ "location": "天津市和平区南京路",
+ "name": "天津****物流有限公司",
+ "newOwnTaxBalance": "0",
+ "ownTaxAmount": "156.80",
+ "ownTaxBalance": "156.80",
+ "personIdName": "201|居民身份证",
+ "personIdNumber": "******",
+ "publishDate": "2024-01-15",
+ "regType": "有限责任公司",
+ "taxCategory": "地方教育附加",
+ "taxIdNumber": "91120100MA01******",
+ "taxpayerType": "一般纳税人",
+ "type": "地税"
+ }
+ ],
+ "total": 6
+ },
+ "pName": "吴某",
+ "punishment_info": {
+ "items": [
+ {
+ "content": "责令停止超范围培训,并处罚款人民币5万元",
+ "decisionDate": "2023-09-20",
+ "departmentName": "武汉市教育局",
+ "evidence": "现场检查发现超出许可范围培训",
+ "legalPersonName": "孙磊",
+ "pecuniary": "50000",
+ "punishName": "武汉教育科技有限公司",
+ "punishNumber": "汉教罚〔2023〕第0922号",
+ "punishStatus": "已执行",
+ "reason": "违反《民办教育促进法》,超范围开展教育培训业务",
+ "remark": "",
+ "source": "教育局",
+ "type": "教育违法",
+ "typeSecond": "超范围培训"
+ },
+ {
+ "content": "责令规范收费标准公示,并处罚款人民币2万元",
+ "decisionDate": "2024-03-15",
+ "departmentName": "武汉市市场监督管理局",
+ "evidence": "价格检查发现收费标准不透明",
+ "legalPersonName": "孙磊",
+ "pecuniary": "20000",
+ "punishName": "武汉教育科技有限公司",
+ "punishNumber": "汉市监罚〔2024〕第0318号",
+ "punishStatus": "已执行",
+ "reason": "违反《价格法》,教育培训收费未明码标价",
+ "remark": "",
+ "source": "市场监督管理局",
+ "type": "价格违法",
+ "typeSecond": "价格违法"
+ }
+ ],
+ "total": 2
+ },
+ "relationship": [
+ "sh",
+ "lp",
+ "tm"
+ ],
+ "stockHolderItem": {
+ "investDate": "",
+ "investRate": "100.0%",
+ "orgHolderName": "吴某",
+ "orgHolderType": "自然人",
+ "subscriptAmt": 2000
+ },
+ "tax_contravention": {
+ "items": [
+ {
+ "case_type": "税收异常非正常户",
+ "department": "国家税务总局天津市和平区税务局",
+ "id": 2745258,
+ "publish_time": "2023-03-08",
+ "taxpayer_name": "天津****物流有限公司"
+ },
+ {
+ "case_type": "欠税公告",
+ "department": "国家税务总局天津市和平区税务局",
+ "id": 2745259,
+ "publish_time": "2023-06-22",
+ "taxpayer_name": "天津****物流有限公司"
+ },
+ {
+ "case_type": "税收违法案件",
+ "department": "国家税务总局天津市和平区税务局",
+ "id": 2745260,
+ "publish_time": "2023-09-15",
+ "taxpayer_name": "天津****物流有限公司"
+ },
+ {
+ "case_type": "税收异常非正常户",
+ "department": "国家税务总局天津市和平区税务局",
+ "id": 2745261,
+ "publish_time": "2023-12-28",
+ "taxpayer_name": "天津****物流有限公司"
+ }
+ ],
+ "total": 4
+ }
+ }
+ ],
+ "total": 8
+ },
+ "success": true,
+ "timestamp": "2024-03-19 17:00:59"
+ }
+ },
+ {
+ "feature": {
+ "featureName": "司南报告服务",
+ "sort": 7
+ },
+ "data": {
+ "apiID": "DWBG6A2C",
+ "data": {
+ "antiFraudInfo": {
+ "gamblerPlayer": "A",
+ "moneyLaundering": "A"
+ },
+ "applicationStatistics": {
+ "applicationCountLast12Months": 17,
+ "applicationCountLast3Months": 0,
+ "applicationCountLast6Months": 3,
+ "applicationCountLastMonth": 0,
+ "consumptionInstallmentApplicationCount": 5,
+ "daysSinceLastApplication": "[60,120)",
+ "lastApplicationDate": "2025-06",
+ "onlineLoanApplicationCount": 3,
+ "otherApplicationCount": 4,
+ "totalApplicationCount": 12
+ },
+ "baseInfo": {
+ "age": 39,
+ "channel": "中国联通",
+ "idCard": "3201**198503***123",
+ "location": "江苏省南京市玄武区",
+ "name": "张*明",
+ "phone": "138****5678",
+ "phoneArea": "江苏省-南京",
+ "sex": "男",
+ "status": 1
+ },
+ "creditDetail": {
+ "avgConsumptionInstallmentCredit": "1800",
+ "avgOnlineLoanCredit": "0",
+ "maxConsumptionInstallmentCredit": "1800",
+ "maxOnlineLoanCredit": "0"
+ },
+ "judiciaRiskInfos": [
+ {
+ "caseNumber": "(2022)苏0102刑初156号",
+ "caseReason": "危害公共安全罪",
+ "caseStatus": "已结案",
+ "caseType": "刑事一审",
+ "court": "南京市玄武区人民法院",
+ "disposalMethod": "判决",
+ "disposalTime": "2022-03-15",
+ "executionAmount": "",
+ "filingTime": "2022-02-20",
+ "judgmentResult": "一、被告人张*明犯危险驾驶罪,判处拘役三个月,并处罚金人民币五千元。(刑期从判决执行之日起计算,判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2022年3月15日起至2022年6月14日止。罚金在本判决生效后一个月内一次缴纳,期满不缴纳的,强制缴纳。)二、扣押在案的作案工具机动车一辆(车牌号苏A12345)依法予以没收,上缴国库。三、被告人张*明在缓刑考验期内,应当遵守法律、行政法规,服从监督;按照考察机关的规定报告自己的活动情况;遵守考察机关关于会客的规定;离开所居住的市、县或者迁居,应当报经考察机关批准。如不服本判决,可在收到判决书之次日起十日内,通过本院或直接向江苏省南京市中级人民法院提出上诉。书面上诉的应提交上诉状正本一份,副本三份。",
+ "litigantType": "被告人",
+ "oldCaseNumber": "",
+ "repaidAmount": "",
+ "type": "涉案公告"
+ },
+ {
+ "caseNumber": "(2021)苏01执1234号",
+ "caseReason": "合同纠纷",
+ "caseStatus": "执行中",
+ "caseType": "民事执行",
+ "court": "南京市中级人民法院",
+ "disposalMethod": "执行",
+ "disposalTime": "2021-09-05",
+ "executionAmount": "30000",
+ "filingTime": "2021-08-10",
+ "judgmentResult": "被执行人张*明应履行给付义务人民币三万元及利息(自2021年8月10日起至实际给付之日止,按年利率4.35%计算)。如被执行人未按本裁定指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百五十三条的规定,加倍支付迟延履行期间的债务利息。被执行人张*明应于本裁定送达之日起十五日内履行上述义务,逾期不履行的,本院将依法强制执行。执行过程中,本院已查封被执行人张*明名下位于南京市玄武区中山路123号房产一套,如被执行人仍不履行义务,本院将依法拍卖该房产。",
+ "litigantType": "被执行人",
+ "oldCaseNumber": "(2020)苏01民终5678号",
+ "repaidAmount": "15000",
+ "type": "执行公告"
+ },
+ {
+ "caseNumber": "(2020)苏0106民初3456号",
+ "caseReason": "民间借贷纠纷",
+ "caseStatus": "已结案",
+ "caseType": "民事一审",
+ "court": "南京市鼓楼区人民法院",
+ "disposalMethod": "判决",
+ "disposalTime": "2020-07-20",
+ "executionAmount": "",
+ "filingTime": "2020-05-15",
+ "judgmentResult": "一、被告张*明于本判决生效之日起十日内向原告李*华支付借款本金人民币五万元及利息(自2020年1月1日起至实际给付之日止,按年利率6%计算)。二、被告张*明于本判决生效之日起十日内向原告李*华支付逾期利息(自2020年7月1日起至实际给付之日止,按年利率12%计算)。三、驳回原告的其他诉讼请求。案件受理费人民币一千二百五十元,由被告张*明负担。如不服本判决,可在收到判决书之次日起十五日内,向本院递交上诉状,并按对方当事人的人数提出副本,上诉于江苏省南京市中级人民法院。",
+ "litigantType": "被告",
+ "oldCaseNumber": "",
+ "repaidAmount": "",
+ "type": "涉案公告"
+ },
+ {
+ "caseNumber": "(2020)苏01民终5678号",
+ "caseReason": "民间借贷纠纷",
+ "caseStatus": "已结案",
+ "caseType": "民事二审",
+ "court": "江苏省南京市中级人民法院",
+ "disposalMethod": "改判",
+ "disposalTime": "2020-10-15",
+ "executionAmount": "",
+ "filingTime": "2020-08-05",
+ "judgmentResult": "一、维持江苏省南京市鼓楼区人民法院(2020)苏0106民初3456号民事判决的第一项,即:被告张*明于本判决生效之日起十日内向原告李*华支付借款本金人民币五万元及利息(自2020年1月1日起至实际给付之日止,按年利率6%计算)。二、撤销江苏省南京市鼓楼区人民法院(2020)苏0106民初3456号民事判决的第二项,即:被告张*明于本判决生效之日起十日内向原告李*华支付逾期利息(自2020年7月1日起至实际给付之日止,按年利率12%计算)。三、上诉人(原审被告)张*明于本判决生效之日起十日内向被上诉人(原审原告)李*华支付逾期利息(自2020年7月1日起至实际给付之日止,按年利率8%计算)。四、驳回上诉人张*明的其他上诉请求。二审案件受理费人民币八百元,由上诉人张*明负担。本判决为终审判决。",
+ "litigantType": "上诉人",
+ "oldCaseNumber": "(2020)苏0106民初3456号",
+ "repaidAmount": "",
+ "type": "涉案公告"
+ },
+ {
+ "caseNumber": "(2019)苏0105执9876号",
+ "caseReason": "买卖合同纠纷",
+ "caseStatus": "执行中",
+ "caseType": "民事执行",
+ "court": "南京市建邺区人民法院",
+ "disposalMethod": "执行",
+ "disposalTime": "2019-12-10",
+ "executionAmount": "80000",
+ "filingTime": "2019-11-20",
+ "judgmentResult": "被执行人张*明应履行给付义务人民币八万元及利息(自2019年12月1日起至实际给付之日止,按年利率4.75%计算)。如被执行人未按本裁定指定的期间履行给付金钱义务,应当依照《中华人民共和国民事诉讼法》第二百五十三条的规定,加倍支付迟延履行期间的债务利息。本院已冻结被执行人张*明在工商银行账户(账号:6222021234567890123)存款人民币五万元,冻结期限为一年。被执行人张*明应于本裁定送达之日起三十日内履行上述义务,逾期不履行的,本院将依法扣划上述存款。",
+ "litigantType": "被执行人",
+ "oldCaseNumber": "(2019)苏0105民初5432号",
+ "repaidAmount": "30000",
+ "type": "执行公告"
+ },
+ {
+ "caseNumber": "(2019)苏0105民初5432号",
+ "caseReason": "买卖合同纠纷",
+ "caseStatus": "已结案",
+ "caseType": "民事一审",
+ "court": "南京市建邺区人民法院",
+ "disposalMethod": "判决",
+ "disposalTime": "2019-06-25",
+ "executionAmount": "",
+ "filingTime": "2019-05-10",
+ "judgmentResult": "一、被告张*明于本判决生效之日起十五日内向原告王*强支付货款人民币八万元及利息(自2019年6月1日起至实际给付之日止,按年利率4.75%计算)。二、被告张*明于本判决生效之日起十五日内向原告王*强支付违约金人民币五千元。三、驳回原告的其他诉讼请求。案件受理费人民币二千元,由被告张*明负担。如不服本判决,可在收到判决书之次日起十五日内,向本院递交上诉状,并按对方当事人的人数提出副本,上诉于江苏省南京市中级人民法院。",
+ "litigantType": "被告",
+ "oldCaseNumber": "",
+ "repaidAmount": "",
+ "type": "涉案公告"
+ },
+ {
+ "caseNumber": "(2018)苏0114刑初234号",
+ "caseReason": "侵犯财产罪",
+ "caseStatus": "已结案",
+ "caseType": "刑事一审",
+ "court": "南京市雨花台区人民法院",
+ "disposalMethod": "判决",
+ "disposalTime": "2018-09-10",
+ "executionAmount": "",
+ "filingTime": "2018-08-15",
+ "judgmentResult": "一、被告人张*明犯诈骗罪,判处有期徒刑二年六个月,并处罚金人民币三万元。(刑期从判决执行之日起计算,判决执行以前先行羁押的,羁押一日折抵刑期一日,即自2018年9月10日起至2021年3月9日止。罚金在本判决生效后一个月内一次缴纳,期满不缴纳的,强制缴纳。)二、责令被告人张*明退赔被害人刘*军人民币六万元。三、扣押在案的作案工具手机一部、银行卡三张依法予以没收,上缴国库。四、被告人张*明在缓刑考验期内,应当遵守法律、行政法规,服从监督;按照考察机关的规定报告自己的活动情况;遵守考察机关关于会客的规定;离开所居住的市、县或者迁居,应当报经考察机关批准。如不服本判决,可在收到判决书之次日起十日内,通过本院或直接向江苏省南京市中级人民法院提出上诉。书面上诉的应提交上诉状正本一份,副本五份。",
+ "litigantType": "被告人",
+ "oldCaseNumber": "",
+ "repaidAmount": "",
+ "type": "涉案公告"
+ },
+ {
+ "caseNumber": "(2018)苏01刑终456号",
+ "caseReason": "侵犯财产罪",
+ "caseStatus": "已结案",
+ "caseType": "刑事二审",
+ "court": "江苏省南京市中级人民法院",
+ "disposalMethod": "改判",
+ "disposalTime": "2018-11-20",
+ "executionAmount": "",
+ "filingTime": "2018-09-25",
+ "judgmentResult": "一、维持江苏省南京市雨花台区人民法院(2018)苏0114刑初234号刑事判决的第一、第二、第三项,即:被告人张*明犯诈骗罪,判处有期徒刑二年六个月,并处罚金人民币三万元;责令被告人张*明退赔被害人刘*军人民币六万元;扣押在案的作案工具手机一部、银行卡三张依法予以没收,上缴国库。二、撤销江苏省南京市雨花台区人民法院(2018)苏0114刑初234号刑事判决的第四项,即:被告人张*明在缓刑考验期内的相关规定。三、上诉人(原审被告人)张*明犯诈骗罪,判处有期徒刑二年,并处罚金人民币二万元。(刑期从判决执行之日起计算,判决执行前先行羁押的,羁押一日折抵刑期一日,即自2018年9月10日起至2020年9月9日止。罚金已缴纳。)本判决为终审判决。",
+ "litigantType": "上诉人",
+ "oldCaseNumber": "(2018)苏0114刑初234号",
+ "repaidAmount": "",
+ "type": "涉案公告"
+ }
+ ],
+ "lendingStatistics": {
+ "daysSinceLastLending": "[120,360)",
+ "installmentLendingInstitutionCount": 1,
+ "lastLendingDate": "2025-03",
+ "lendingAmountLast12Months": "[1000,2000)",
+ "lendingAmountLast24Months": "[1000,2000)",
+ "lendingAmountLast3Months": "0",
+ "lendingAmountLast6Months": "[1000,2000)",
+ "lendingAmountLastMonth": "0",
+ "lendingCountLast12Months": 1,
+ "lendingCountLast24Months": 1,
+ "lendingCountLast3Months": 0,
+ "lendingCountLast6Months": 1,
+ "lendingCountLastMonth": 0,
+ "onlineLendingInstitutionCount": 0,
+ "totalLendingInstitutionCount": 1
+ },
+ "overdueRecord": {
+ "currentOverdueCount": 0,
+ "currentOverdueInstitution": "-",
+ "lastOverdueDate": "-",
+ "m0PlusCountLast12Months": 0,
+ "m0PlusCountLast24Months": 0,
+ "m0PlusCountLast6Months": 0,
+ "m1PlusCountLast12Months": 0,
+ "m1PlusCountLast24Months": 0,
+ "m1PlusCountLast6Months": 0,
+ "totalAmountLast12Months": "0",
+ "totalAmountLast24Months": "0",
+ "totalAmountLast6Months": "0",
+ "totalOverdueAmount": "-"
+ },
+ "performanceStatistics": {
+ "creditLoanDuration": 178,
+ "daysSinceLastPerformance": "(120,150]",
+ "normalRepaymentRatio": "0%",
+ "performanceAmountLast12Months": "[500,1000)",
+ "performanceAmountLast24Months": "[500,1000)",
+ "performanceAmountLast3Months": "0",
+ "performanceAmountLast6Months": "[500,1000)",
+ "performanceAmountLastMonth": "0",
+ "performanceCountLast12Months": 2,
+ "performanceCountLast24Months": 2,
+ "performanceCountLast3Months": 0,
+ "performanceCountLast6Months": 2,
+ "performanceCountLastMonth": 0,
+ "repaymentExceptionCountLast12Months": 3,
+ "repaymentExceptionCountLast24Months": 3,
+ "repaymentExceptionCountLast3Months": 1,
+ "repaymentExceptionCountLast6Months": 3,
+ "repaymentExceptionCountLastMonth": 0,
+ "serialVersionUID": 1,
+ "settledLoanOrderCount": 0
+ },
+ "rentalBehavior": {
+ "rentalApplicationCountLast12Months": "0/1",
+ "rentalApplicationCountLast12MonthsNight": "0/0",
+ "rentalApplicationCountLast12MonthsWeekend": "0/0",
+ "rentalApplicationCountLast14Days": "0/0",
+ "rentalApplicationCountLast14DaysNight": "0/0",
+ "rentalApplicationCountLast14DaysWeekend": "0/0",
+ "rentalApplicationCountLast1Month": "0/0",
+ "rentalApplicationCountLast1MonthNight": "0/0",
+ "rentalApplicationCountLast1MonthWeekend": "0/0",
+ "rentalApplicationCountLast3Days": "0/0",
+ "rentalApplicationCountLast3DaysNight": "0/0",
+ "rentalApplicationCountLast3DaysWeekend": "0/0",
+ "rentalApplicationCountLast3Months": "0/1",
+ "rentalApplicationCountLast3MonthsNight": "0/0",
+ "rentalApplicationCountLast3MonthsWeekend": "0/0",
+ "rentalApplicationCountLast6Months": "0/1",
+ "rentalApplicationCountLast6MonthsNight": "0/0",
+ "rentalApplicationCountLast6MonthsWeekend": "0/0",
+ "rentalApplicationCountLast7Days": "0/0",
+ "rentalApplicationCountLast7DaysNight": "0/0",
+ "rentalApplicationCountLast7DaysWeekend": "0/0",
+ "rentalApplicationInstitutionsLast12Months": "0/1",
+ "rentalApplicationInstitutionsLast12MonthsNight": "0/0",
+ "rentalApplicationInstitutionsLast12MonthsWeekend": "0/0",
+ "rentalApplicationInstitutionsLast14Days": "0/0",
+ "rentalApplicationInstitutionsLast14DaysNight": "0/0",
+ "rentalApplicationInstitutionsLast14DaysWeekend": "0/0",
+ "rentalApplicationInstitutionsLast1Month": "0/0",
+ "rentalApplicationInstitutionsLast1MonthNight": "0/0",
+ "rentalApplicationInstitutionsLast1MonthWeekend": "0/0",
+ "rentalApplicationInstitutionsLast3Days": "0/0",
+ "rentalApplicationInstitutionsLast3DaysNight": "0/0",
+ "rentalApplicationInstitutionsLast3DaysWeekend": "0/0",
+ "rentalApplicationInstitutionsLast3Months": "0/1",
+ "rentalApplicationInstitutionsLast3MonthsNight": "0/0",
+ "rentalApplicationInstitutionsLast3MonthsWeekend": "0/0",
+ "rentalApplicationInstitutionsLast6Months": "0/1",
+ "rentalApplicationInstitutionsLast6MonthsNight": "0/0",
+ "rentalApplicationInstitutionsLast6MonthsWeekend": "0/0",
+ "rentalApplicationInstitutionsLast7Days": "0/0",
+ "rentalApplicationInstitutionsLast7DaysNight": "0/0",
+ "rentalApplicationInstitutionsLast7DaysWeekend": "0/0"
+ },
+ "riskList": {
+ "bankOverdueRecord": 0,
+ "courtViolator": 1,
+ "creditLeaseRisk": 0,
+ "creditOverdueRecord": 0,
+ "groupFraud": 0,
+ "highRiskArea": 1,
+ "identityFake": 0,
+ "industryBlacklist": 0,
+ "phoneNumberStatus": 0,
+ "riskPhoneNumber": 0,
+ "taxDebt": 0,
+ "vehicleLeaseViolation": 0
+ },
+ "riskPoint": {
+ "antiFraudRisk": 1,
+ "deductFail": 3,
+ "disinCasesFlag": 0,
+ "executionCasesFlag": 0,
+ "hitPreservationReview": 0,
+ "judicialCase": 0,
+ "judicialRisk": 1,
+ "legalCasesFlag": 1,
+ "limitCasesFlag": 0,
+ "multiQuery": 0,
+ "newRiskFeature": 1,
+ "riskList": 0,
+ "securityRisk": 1
+ },
+ "riskSupervision": {
+ "details": "无",
+ "leastApplicationTime": "2025-07-05",
+ "rentalRiskListIdCardRelationsPhones": 0,
+ "rentalRiskListPhoneRelationsIdCards": 0
+ },
+ "securityInfo": {
+ "drug": 0,
+ "escape": 0,
+ "front": 1,
+ "icase": 0,
+ "ikey": 0,
+ "itrancase": 0,
+ "takeDrug": 0
+ },
+ "standLiveInfo": {
+ "finalAuthResult": "0",
+ "inTime": "24",
+ "verification": "1"
+ }
+ },
+ "success": true,
+ "timestamp": "2025-01-20 21:19:58"
+ }
+ },
+ {
+ "feature": {
+ "featureName": "借选指数评估",
+ "sort": 1
+ },
+ "data": {
+ "apiID": "JRZQ5E9F",
+ "data": {
+ "xyp_t01aazhzz": "1",
+ "xyp_t01abdzbz": "",
+ "xyp_t01aahzbz": "",
+ "xyp_t01ackzbz": "",
+ "xyp_t01cczgbc": "",
+ "xyp_t01adjzzz": "1",
+ "xyp_t01adzfbz": "",
+ "xyp_model_score_mid": "715",
+ "xyp_t01acizza": "",
+ "xyp_t01adjzzc": "1",
+ "xyp_t01aakzzz": "1",
+ "xyp_t02cchzza_cchzzz": "",
+ "xyp_t01acfzbc": "",
+ "xyp_t01degzbc": "0",
+ "xyp_t02cchzzc_cchzzz": "1.0",
+ "xyp_t01abgzzc": "1",
+ "xyp_t01dejzzc": "2",
+ "xyp_t02cckzbc_cckzbz": "",
+ "xyp_t01cclzba": "",
+ "xyp_t01ackzaz": "1",
+ "xyp_t01cclzbc": "",
+ "xyp_t01aazgzc": "1",
+ "xyp_t01aafzzc": "1",
+ "xyp_t01adgzbc": "",
+ "xyp_t01abjzbc": ""
+ }
+ }
+ },
+ {
+ "feature": {
+ "featureName": "特殊名单验证",
+ "sort": 1
+ },
+ "data": {
+ "apiID": "FLXG3D56",
+ "data": {
+ "data": {
+ "swift_number": "999333_20181029143459_23453A4E0",
+ "code": "00",
+ "flag_specialList_c": "1",
+ "sl_id_court_bad": "0",
+ "sl_id_court_executed": "0",
+ "sl_id_bank_bad": "0",
+ "sl_id_bank_overdue": "0",
+ "sl_id_bank_lost": "0",
+ "sl_id_nbank_bad": "0",
+ "sl_id_nbank_overdue": "0",
+ "sl_id_nbank_lost": "0",
+ "sl_id_nbank_nsloan_bad": "0",
+ "sl_id_nbank_nsloan_overdue": "0",
+ "sl_id_nbank_nsloan_lost": "0",
+ "sl_id_nbank_sloan_bad": "0",
+ "sl_id_nbank_sloan_overdue": "0",
+ "sl_id_nbank_sloan_lost": "0",
+ "sl_id_nbank_cons_bad": "0",
+ "sl_id_nbank_cons_overdue": "0",
+ "sl_id_nbank_cons_lost": "0",
+ "sl_id_nbank_finlea_bad": "0",
+ "sl_id_nbank_finlea_overdue": "0",
+ "sl_id_nbank_finlea_lost": "0",
+ "sl_id_nbank_autofin_bad": "0",
+ "sl_id_nbank_autofin_overdue": 0,
+ "sl_id_nbank_autofin_lost": "0",
+ "sl_id_nbank_other_bad": "0",
+ "sl_id_nbank_other_overdue": "0",
+ "sl_id_nbank_other_lost": "0",
+ "sl_id_court_bad_time": "0",
+ "sl_id_court_executed_time": "1",
+ "sl_id_bank_bad_time": "1",
+ "sl_id_bank_overdue_time": "2",
+ "sl_id_bank_lost_time": "0",
+ "sl_id_nbank_bad_time": "0",
+ "sl_id_nbank_overdue_time": "1",
+ "sl_id_nbank_lost_time": "1",
+ "sl_id_nbank_nsloan_bad_time": "0",
+ "sl_id_nbank_nsloan_overdue_time": "1",
+ "sl_id_nbank_nsloan_lost_time": "1",
+ "sl_id_nbank_sloan_bad_time": "0",
+ "sl_id_nbank_sloan_overdue_time": "1",
+ "sl_id_nbank_sloan_lost_time": "1",
+ "sl_id_nbank_cons_bad_time": "1",
+ "sl_id_nbank_cons_overdue_time": "0",
+ "sl_id_nbank_cons_lost_time": "1",
+ "sl_id_nbank_finlea_bad_time": "1",
+ "sl_id_nbank_finlea_overdue_time": "2",
+ "sl_id_nbank_finlea_lost_time": "0",
+ "sl_id_nbank_autofin_bad_time": "1",
+ "sl_id_nbank_autofin_overdue_time": "0",
+ "sl_id_nbank_autofin_lost_time": "2",
+ "sl_id_nbank_other_bad_time": "0",
+ "sl_id_nbank_other_overdue_time": "0",
+ "sl_id_nbank_other_lost_time": "0",
+ "sl_id_court_bad_allnum": "1",
+ "sl_id_court_executed_allnum": "1",
+ "sl_id_bank_bad_allnum": "1",
+ "sl_id_bank_overdue_allnum": "2",
+ "sl_id_bank_lost_allnum": "5",
+ "sl_id_nbank_bad_allnum": "6",
+ "sl_id_nbank_overdue_allnum": "1",
+ "sl_id_nbank_lost_allnum": "1",
+ "sl_id_nbank_nsloan_bad_allnum": "7",
+ "sl_id_nbank_nsloan_overdue_allnum": "1",
+ "sl_id_nbank_nsloan_lost_allnum": "1",
+ "sl_id_nbank_sloan_bad_allnum": "1",
+ "sl_id_nbank_sloan_overdue_allnum": "1",
+ "sl_id_nbank_sloan_lost_allnum": "1",
+ "sl_id_nbank_cons_bad_allnum": "1",
+ "sl_id_nbank_cons_overdue_allnum": "9",
+ "sl_id_nbank_cons_lost_allnum": "1",
+ "sl_id_nbank_finlea_bad_allnum": "1",
+ "sl_id_nbank_finlea_overdue_allnum": "2",
+ "sl_id_nbank_finlea_lost_allnum": "4",
+ "sl_id_nbank_autofin_bad_allnum": "1",
+ "sl_id_nbank_autofin_overdue_allnum": "8",
+ "sl_id_nbank_autofin_lost_allnum": "2",
+ "sl_id_nbank_other_bad_allnum": "5",
+ "sl_id_nbank_other_overdue_allnum": "7",
+ "sl_id_nbank_other_lost_allnum": "2",
+ "sl_cell_bank_bad": "0",
+ "sl_cell_bank_overdue": "0",
+ "sl_cell_bank_lost": "0",
+ "sl_cell_nbank_bad": "0",
+ "sl_cell_nbank_overdue": "0",
+ "sl_cell_nbank_lost": "0",
+ "sl_cell_nbank_nsloan_bad": "0",
+ "sl_cell_nbank_nsloan_overdue": "0",
+ "sl_cell_nbank_nsloan_lost": "0",
+ "sl_cell_nbank_sloan_bad": "0",
+ "sl_cell_nbank_sloan_overdue": "0",
+ "sl_cell_nbank_sloan_lost": "0",
+ "sl_cell_nbank_cons_bad": "0",
+ "sl_cell_nbank_cons_overdue": "0",
+ "sl_cell_nbank_cons_lost": "0",
+ "sl_cell_nbank_finlea_bad": "0",
+ "sl_cell_nbank_finlea_overdue": "0",
+ "sl_cell_nbank_finlea_lost": "0",
+ "sl_cell_nbank_autofin_bad": "0",
+ "sl_cell_nbank_autofin_overdue": "0",
+ "sl_cell_nbank_autofin_lost": "0",
+ "sl_cell_nbank_other_bad": "0",
+ "sl_cell_nbank_other_overdue": "0",
+ "sl_cell_nbank_other_lost": "0",
+ "sl_cell_bank_bad_time": "1",
+ "sl_cell_bank_overdue_time": "2",
+ "sl_cell_bank_lost_time": "0",
+ "sl_cell_nbank_bad_time": "0",
+ "sl_cell_nbank_overdue_time": "1",
+ "sl_cell_nbank_lost_time": "1",
+ "sl_cell_nbank_nsloan_bad_time": "0",
+ "sl_cell_nbank_nsloan_overdue_time": "1",
+ "sl_cell_nbank_nsloan_lost_time": "1",
+ "sl_cell_nbank_sloan_bad_time": "0",
+ "sl_cell_nbank_sloan_overdue_time": "1",
+ "sl_cell_nbank_sloan_lost_time": "1",
+ "sl_cell_nbank_cons_bad_time": "1",
+ "sl_cell_nbank_cons_overdue_time": "0",
+ "sl_cell_nbank_cons_lost_time": "1",
+ "sl_cell_nbank_finlea_bad_time": "1",
+ "sl_cell_nbank_finlea_overdue_time": "2",
+ "sl_cell_nbank_finlea_lost_time": "0",
+ "sl_cell_nbank_autofin_bad_time": "1",
+ "sl_cell_nbank_autofin_overdue_time": "0",
+ "sl_cell_nbank_autofin_lost_time": "2",
+ "sl_cell_nbank_other_bad_time": "0",
+ "sl_cell_nbank_other_overdue_time": "0",
+ "sl_cell_nbank_other_lost_time": "0",
+ "sl_cell_bank_bad_allnum": "1",
+ "sl_cell_bank_overdue_allnum": "2",
+ "sl_cell_bank_lost_allnum": "3",
+ "sl_cell_nbank_bad_allnum": "5",
+ "sl_cell_nbank_overdue_allnum": "1",
+ "sl_cell_nbank_lost_allnum": "1",
+ "sl_cell_nbank_nsloan_bad_allnum": "3",
+ "sl_cell_nbank_nsloan_overdue_allnum": "1",
+ "sl_cell_nbank_nsloan_lost_allnum": "1",
+ "sl_cell_nbank_sloan_bad_allnum": "7",
+ "sl_cell_nbank_sloan_overdue_allnum": "1",
+ "sl_cell_nbank_sloan_lost_allnum": "1",
+ "sl_cell_nbank_cons_bad_allnum": "1",
+ "sl_cell_nbank_cons_overdue_allnum": "8",
+ "sl_cell_nbank_cons_lost_allnum": "1",
+ "sl_cell_nbank_finlea_bad_allnum": "1",
+ "sl_cell_nbank_finlea_overdue_allnum": "2",
+ "sl_cell_nbank_finlea_lost_allnum": "4",
+ "sl_cell_nbank_autofin_bad_allnum": "1",
+ "sl_cell_nbank_autofin_overdue_allnum": "6",
+ "sl_cell_nbank_autofin_lost_allnum": "2",
+ "sl_cell_nbank_other_bad_allnum": "7",
+ "sl_cell_nbank_other_overdue_allnum": "6",
+ "sl_cell_nbank_other_lost_allnum": "9"
+ }
+ }
+ }
+ },
+ {
+ "feature": {
+ "featureName": "公安不良人员名单(加强版)",
+ "sort": 1
+ },
+ "data": {
+ "apiID": "FLXGDEA9",
+ "data": {
+ "level":"0"
+ }
+ }
+ },
+ {
+ "feature": {
+ "featureName": "学历信息查询A",
+ "sort": 1
+ },
+ "data": {
+ "apiID": "IVYZ9A2B",
+ "data": {
+ "data": {
+ "query_id": "202505213797602437204758911904",
+ "education_background": {
+ "msg": "查询成功有结果",
+ "data": [
+ {
+ "jsrq": "1806",
+ "xxxs": "普通全日制",
+ "xl": "大学专科",
+ "xxlx": "其他",
+ "zymc": "其他",
+ "ksrq": "1509"
+ },
+ {
+ "jsrq": "2206",
+ "xxxs": "普通全日制",
+ "xl": "大学本科",
+ "xxlx": "其他",
+ "zymc": "其他",
+ "ksrq": "1809"
+ }
+ ],
+ "code": "9100"
+ }
+ },
+ "err_msg": "请求成功",
+ "err_code": "200"
+ }
+ }
+ }
+ ,{
+ "feature": {
+ "featureName": "单人婚姻查询(登记时间版)",
+ "sort": 1
+ },
+ "data": {
+ "apiID": "IVYZ81NC",
+ "data": {
+ "code": "0",
+ "data": {
+ "op_date": "2025-04-16",
+ "op_type": "IB",
+ "op_type_desc": "离婚"
+ },
+ "message": "成功",
+ "seqNo": "0URE0UAL251011192554196"
+ }
+ }
+ }
+ ,{
+ "feature": {
+ "featureName": "单人婚姻状态A",
+ "sort": 1
+ },
+ "data": {
+ "apiID": "IVYZ5733",
+ "data":{
+ "code": "0",
+ "data": {
+ "data": "INR:匹配不成功"
+ },
+ "seqNo": "YW0N4EH1250614162840933",
+ "message": "成功"
+ }
+ }
+ }
+ ,{
+ "feature": {
+ "featureName": "借贷意向验证",
+ "sort": 1
+ },
+ "data": {
+ "apiID": "JRZQ0A03",
+ "data": {
+ "code": "00",
+ "data": {
+ "als_m1_cell_nbank_allnum": "1",
+ "als_m12_cell_nbank_nsloan_orgnum": "1",
+ "als_m6_id_bank_tra_allnum": "2",
+ "als_m6_cell_nbank_max_inteday": "45",
+ "als_m12_id_bank_selfnum": "0",
+ "als_m6_id_pdl_allnum": "2",
+ "als_m3_cell_min_monnum": "0",
+ "als_m1_cell_bank_tra_allnum": "1",
+ "als_m3_id_bank_tra_allnum": "2",
+ "als_m6_cell_nbank_orgnum": "6",
+ "als_m12_id_bank_min_monnum": "0",
+ "als_m12_id_bank_allnum": "2",
+ "als_d15_id_rel_orgnum": "1",
+ "als_m12_cell_nbank_sloan_orgnum": "1",
+ "als_m1_id_nbank_allnum": "1",
+ "als_m6_cell_nbank_max_monnum": "4",
+ "als_m12_cell_caon_allnum": "4",
+ "als_m6_cell_nbank_night_allnum": "4",
+ "als_m3_cell_nbank_orgnum": "3",
+ "als_m3_cell_min_inteday": "0",
+ "als_m6_cell_nbank_sloan_allnum": "5",
+ "als_m12_id_nbank_max_monnum": "4",
+ "als_m1_cell_nbank_sloan_allnum": "1",
+ "als_m3_id_min_inteday": "0",
+ "als_d15_cell_bank_orgnum": "1",
+ "als_m12_cell_bank_orgnum": "2",
+ "als_m1_cell_nbank_night_orgnum": "0",
+ "als_m1_id_nbank_cf_orgnum": "1",
+ "als_d15_cell_bank_selfnum": "0",
+ "als_m6_cell_bank_tra_allnum": "2",
+ "als_lst_cell_bank_csinteday": "1",
+ "als_d15_cell_bank_allnum": "1",
+ "als_m6_cell_nbank_night_orgnum": "4",
+ "als_m12_cell_nbank_nsloan_allnum": "1",
+ "als_m12_cell_nbank_max_inteday": "62",
+ "als_m6_cell_max_monnum": "4",
+ "als_m12_cell_min_monnum": "0",
+ "als_m12_cell_bank_allnum": "2",
+ "als_m3_id_nbank_max_monnum": "3",
+ "als_m3_cell_max_monnum": "4",
+ "als_m3_id_bank_min_monnum": "0",
+ "als_m6_cell_bank_tra_orgnum": "2",
+ "als_m1_cell_nbank_night_allnum": "0",
+ "als_m3_cell_nbank_allnum": "6",
+ "als_d15_cell_bank_week_orgnum": "0",
+ "als_m3_id_bank_tra_orgnum": "2",
+ "als_d15_cell_rel_orgnum": "1",
+ "als_m6_cell_nbank_oth_allnum": "7",
+ "als_m6_cell_nbank_selfnum": "0",
+ "als_m12_cell_nbank_sloan_allnum": "9",
+ "als_m12_id_nbank_cons_orgnum": "4",
+ "als_m3_cell_bank_max_monnum": "1",
+ "als_m12_cell_nbank_night_orgnum": "4",
+ "als_m6_id_nbank_nsloan_allnum": "1",
+ "als_m3_id_nbank_oth_allnum": "1",
+ "als_m12_id_bank_orgnum": "2",
+ "swift_number": "3034309_20250806163337_77293E53A19",
+ "als_m12_id_tot_mons": "9",
+ "als_m12_id_avg_monnum": "2.22",
+ "als_m3_id_nbank_sloan_orgnum": "1",
+ "als_m3_cell_nbank_max_inteday": "45",
+ "als_m1_id_nbank_orgnum": "1",
+ "als_m3_id_bank_selfnum": "0",
+ "als_m6_id_bank_tra_orgnum": "2",
+ "als_d15_cell_bank_night_allnum": "0",
+ "als_m1_cell_nbank_orgnum": "1",
+ "als_m6_id_bank_selfnum": "0",
+ "als_m6_id_max_monnum": "4",
+ "als_m12_cell_bank_selfnum": "0",
+ "als_m3_cell_nbank_selfnum": "0",
+ "als_m3_id_nbank_oth_orgnum": "1",
+ "als_m3_id_nbank_max_inteday": "45",
+ "als_m12_cell_nbank_max_monnum": "4",
+ "als_m6_cell_min_monnum": "0",
+ "als_d15_cell_rel_allnum": "1",
+ "als_m6_id_bank_avg_monnum": "1.00",
+ "als_m12_id_nbank_selfnum": "0",
+ "als_d15_cell_bank_week_allnum": "0",
+ "als_m6_cell_nbank_oth_orgnum": "4",
+ "als_m6_id_pdl_orgnum": "2",
+ "als_lst_id_nbank_consnum": "1",
+ "als_m6_id_rel_allnum": "6",
+ "als_m6_id_rel_orgnum": "2",
+ "als_m12_id_nbank_oth_allnum": "7",
+ "als_m12_id_cooff_orgnum": "1",
+ "als_m6_cell_tot_mons": "5",
+ "als_m12_id_bank_tra_allnum": "2",
+ "als_m3_id_max_inteday": "42",
+ "als_m3_cell_nbank_sloan_orgnum": "1",
+ "als_m1_id_nbank_night_orgnum": "0",
+ "als_m12_id_bank_tra_orgnum": "2",
+ "als_m6_cell_nbank_nsloan_allnum": "1",
+ "als_m6_cell_pdl_allnum": "2",
+ "flag_datastrategy": "1",
+ "als_m1_id_bank_orgnum": "1",
+ "als_m3_cell_pdl_allnum": "1",
+ "als_m1_id_bank_selfnum": "0",
+ "als_m12_cell_nbank_cf_allnum": "11",
+ "als_m3_id_rel_orgnum": "2",
+ "als_m6_id_nbank_min_inteday": "0",
+ "als_m3_id_caon_orgnum": "1",
+ "als_m6_id_nbank_nsloan_orgnum": "1",
+ "als_m6_cell_nbank_cons_allnum": "8",
+ "als_m1_cell_nbank_week_allnum": "0",
+ "als_m1_id_nbank_sloan_allnum": "1",
+ "als_d15_id_bank_night_allnum": "0",
+ "als_d15_id_bank_allnum": "1",
+ "als_m1_id_nbank_cf_allnum": "1",
+ "als_lst_cell_nbank_inteday": "20",
+ "als_m1_cell_bank_week_orgnum": "0",
+ "als_m3_cell_bank_week_allnum": "0",
+ "als_lst_id_bank_inteday": "14",
+ "als_m6_id_max_inteday": "42",
+ "als_m12_cell_rel_orgnum": "2",
+ "als_m1_id_bank_allnum": "1",
+ "als_m12_cell_nbank_min_monnum": "0",
+ "als_m6_id_tot_mons": "5",
+ "als_m1_id_bank_week_allnum": "0",
+ "als_m12_cell_bank_max_monnum": "1",
+ "als_m3_cell_tot_mons": "2",
+ "als_m12_id_rel_allnum": "10",
+ "als_m3_id_bank_max_inteday": "58",
+ "als_m3_id_rel_allnum": "4",
+ "als_m12_cell_nbank_selfnum": "0",
+ "als_m3_cell_bank_week_orgnum": "0",
+ "als_m12_cell_tot_mons": "9",
+ "als_m1_cell_bank_week_allnum": "0",
+ "als_m12_id_rel_orgnum": "2",
+ "als_lst_cell_bank_inteday": "14",
+ "als_m6_id_nbank_min_monnum": "0",
+ "als_d15_id_bank_night_orgnum": "0",
+ "als_m12_id_bank_max_inteday": "58",
+ "als_m6_id_bank_min_monnum": "0",
+ "als_m3_id_nbank_tot_mons": "2",
+ "als_m3_id_bank_orgnum": "2",
+ "als_m3_id_bank_week_allnum": "0",
+ "als_m3_cell_nbank_night_orgnum": "0",
+ "als_m6_cell_nbank_sloan_orgnum": "1",
+ "als_m1_id_nbank_sloan_orgnum": "1",
+ "als_m1_cell_bank_allnum": "1",
+ "als_m1_id_rel_allnum": "2",
+ "als_m12_cell_max_monnum": "4",
+ "als_m12_cell_nbank_allnum": "18",
+ "als_m1_cell_bank_night_allnum": "0",
+ "als_m1_id_nbank_night_allnum": "0",
+ "als_m12_cell_rel_allnum": "10",
+ "als_lst_id_bank_csinteday": "1",
+ "als_m1_id_bank_week_orgnum": "0",
+ "als_m3_id_bank_tot_mons": "2",
+ "als_m12_cell_bank_tra_allnum": "2",
+ "als_m3_id_bank_max_monnum": "1",
+ "als_m3_id_nbank_selfnum": "0",
+ "als_m1_cell_nbank_week_orgnum": "0",
+ "als_m3_cell_pdl_orgnum": "1",
+ "als_m6_cell_nbank_allnum": "14",
+ "als_m3_cell_nbank_cf_allnum": "5",
+ "als_m1_id_nbank_week_allnum": "0",
+ "als_m6_cell_pdl_orgnum": "2",
+ "als_m12_cell_bank_tra_orgnum": "2",
+ "als_d15_id_rel_allnum": "1",
+ "als_m6_id_bank_tot_mons": "2",
+ "als_m3_id_tot_mons": "2",
+ "als_m6_cell_nbank_nsloan_orgnum": "1",
+ "als_m12_id_bank_week_allnum": "0",
+ "als_lst_id_nbank_inteday": "20",
+ "als_m6_id_nbank_selfnum": "0",
+ "als_m6_id_min_monnum": "0",
+ "code": "00",
+ "als_d15_id_bank_selfnum": "0",
+ "als_m3_cell_bank_tra_orgnum": "2",
+ "als_fst_id_bank_inteday": "72",
+ "als_m3_id_avg_monnum": "4.00",
+ "als_m1_cell_bank_selfnum": "0",
+ "als_m3_cell_nbank_night_allnum": "0",
+ "als_m12_cell_nbank_orgnum": "6",
+ "als_m3_cell_nbank_sloan_allnum": "3",
+ "als_lst_id_nbank_csinteday": "1",
+ "als_m3_id_bank_week_orgnum": "0",
+ "als_m12_cell_nbank_avg_monnum": "2.00",
+ "als_m3_id_nbank_allnum": "6",
+ "als_m3_cell_bank_tra_allnum": "2",
+ "als_m1_cell_bank_night_orgnum": "0",
+ "als_m6_id_nbank_allnum": "14",
+ "als_m12_cell_nbank_cf_orgnum": "2",
+ "als_m6_cell_nbank_min_monnum": "0",
+ "als_m1_cell_bank_orgnum": "1",
+ "als_m12_id_max_monnum": "4",
+ "als_m12_cell_bank_week_allnum": "0",
+ "als_m12_cell_bank_min_inteday": "58",
+ "als_m12_cell_bank_night_orgnum": "1",
+ "als_m12_id_min_monnum": "0",
+ "als_m12_id_bank_week_orgnum": "0",
+ "als_m1_id_bank_night_allnum": "0",
+ "als_m3_id_max_monnum": "4",
+ "als_m3_cell_nbank_oth_orgnum": "1",
+ "als_m12_cell_min_inteday": "0",
+ "als_m3_id_nbank_orgnum": "3",
+ "als_m3_cell_bank_max_inteday": "58",
+ "als_lst_id_bank_consnum": "1",
+ "als_m1_id_nbank_week_orgnum": "0",
+ "als_m6_id_nbank_orgnum": "6",
+ "als_fst_cell_bank_inteday": "72",
+ "als_m6_id_avg_monnum": "3.20",
+ "als_m3_cell_nbank_cons_orgnum": "2",
+ "als_m3_id_bank_night_allnum": "1",
+ "DataStrategy": {
+ "strategy_version": "1.0",
+ "product_type": "100099",
+ "strategy_id": "DTA_BR0007512",
+ "product_name": "预置_借贷意向验证",
+ "scene": "lend"
+ },
+ "als_m6_cell_bank_week_orgnum": "0",
+ "als_m3_cell_bank_night_orgnum": "1",
+ "als_m3_cell_nbank_cf_orgnum": "2",
+ "als_m6_id_bank_night_orgnum": "1",
+ "als_m3_id_nbank_cons_orgnum": "2",
+ "als_m1_id_bank_tra_orgnum": "1",
+ "als_fst_id_nbank_inteday": "326",
+ "als_m1_cell_nbank_cf_allnum": "1",
+ "als_m12_id_nbank_night_allnum": "5",
+ "als_m3_cell_caon_orgnum": "1",
+ "als_m12_id_nbank_avg_monnum": "2.00",
+ "als_m12_id_nbank_cf_allnum": "11",
+ "als_m12_cell_bank_tot_mons": "2",
+ "als_m12_id_nbank_sloan_allnum": "9",
+ "als_m3_cell_nbank_oth_allnum": "1",
+ "als_m6_id_nbank_oth_allnum": "7",
+ "als_m3_id_nbank_cons_allnum": "3",
+ "als_m12_cell_nbank_cons_orgnum": "4",
+ "als_m3_id_nbank_cf_allnum": "5",
+ "als_m12_cell_bank_avg_monnum": "1.00",
+ "als_m3_cell_bank_night_allnum": "1",
+ "als_m6_cell_nbank_avg_monnum": "2.80",
+ "als_m3_cell_bank_orgnum": "2",
+ "als_m3_cell_caon_allnum": "2",
+ "als_d15_id_bank_orgnum": "1",
+ "als_m6_id_nbank_cf_orgnum": "2",
+ "als_m3_id_bank_allnum": "2",
+ "als_m3_id_nbank_cf_orgnum": "2",
+ "als_m12_id_nbank_night_orgnum": "4",
+ "als_m3_id_nbank_avg_monnum": "3.00",
+ "als_m3_id_min_monnum": "0",
+ "als_lst_cell_nbank_csinteday": "1",
+ "als_m1_id_bank_night_orgnum": "0",
+ "als_m1_id_rel_orgnum": "2",
+ "als_m1_cell_nbank_cf_orgnum": "1",
+ "als_m6_id_nbank_oth_orgnum": "4",
+ "als_m12_id_nbank_orgnum": "6",
+ "als_m3_id_nbank_night_allnum": "0",
+ "als_m3_cell_bank_selfnum": "0",
+ "als_m3_cell_nbank_cons_allnum": "3",
+ "als_m3_id_bank_min_inteday": "58",
+ "als_m6_cell_caon_orgnum": "3",
+ "als_m12_id_bank_avg_monnum": "1.00",
+ "als_m6_id_bank_night_allnum": "1",
+ "als_m6_cell_bank_tot_mons": "2",
+ "als_m3_id_caon_allnum": "2",
+ "als_m12_id_min_inteday": "0",
+ "als_m12_id_nbank_sloan_orgnum": "1",
+ "als_m12_id_pdl_orgnum": "2",
+ "als_m3_id_pdl_orgnum": "1",
+ "als_m1_id_bank_tra_allnum": "1",
+ "als_m6_cell_nbank_cf_orgnum": "2",
+ "als_m12_cell_bank_night_allnum": "1",
+ "als_m6_cell_nbank_tot_mons": "5",
+ "als_d15_id_bank_tra_allnum": "1",
+ "als_m6_cell_cooff_orgnum": "1",
+ "als_m12_cell_bank_week_orgnum": "0",
+ "als_m3_cell_bank_allnum": "2",
+ "als_m6_cell_nbank_cons_orgnum": "4",
+ "als_d15_id_bank_tra_orgnum": "1",
+ "als_m12_id_nbank_cf_orgnum": "2",
+ "als_m12_id_max_inteday": "62",
+ "als_m6_cell_bank_selfnum": "0",
+ "als_m1_cell_nbank_selfnum": "0",
+ "als_m12_id_cooff_allnum": "4",
+ "als_m6_id_nbank_night_allnum": "4",
+ "als_d15_id_bank_week_orgnum": "0",
+ "als_m6_id_nbank_avg_monnum": "2.80",
+ "als_m12_id_bank_tot_mons": "2",
+ "als_m6_cell_nbank_cf_allnum": "7",
+ "als_m6_id_nbank_sloan_orgnum": "1",
+ "als_m1_cell_rel_allnum": "2",
+ "als_m3_cell_bank_tot_mons": "2",
+ "als_m12_id_nbank_max_inteday": "62",
+ "als_m6_cell_max_inteday": "42",
+ "als_m6_id_caon_allnum": "4",
+ "als_m6_id_nbank_night_orgnum": "4",
+ "als_m3_cell_cooff_orgnum": "1",
+ "als_m6_id_bank_max_inteday": "58",
+ "als_m12_id_bank_min_inteday": "58",
+ "als_m3_cell_nbank_max_monnum": "3",
+ "als_m6_id_nbank_sloan_allnum": "5",
+ "als_m1_cell_rel_orgnum": "2",
+ "als_m6_cell_bank_min_inteday": "58",
+ "als_m12_cell_nbank_min_inteday": "0",
+ "als_m3_cell_cooff_allnum": "1",
+ "als_d15_id_bank_week_allnum": "0",
+ "als_m6_id_caon_orgnum": "3",
+ "als_m6_cell_cooff_allnum": "4",
+ "als_m3_id_cooff_allnum": "1",
+ "als_m6_cell_min_inteday": "0",
+ "als_m6_id_cooff_allnum": "4",
+ "als_m12_id_caon_orgnum": "3",
+ "als_m12_id_nbank_nsloan_allnum": "1",
+ "als_m6_cell_nbank_week_orgnum": "4",
+ "als_m3_cell_rel_orgnum": "2",
+ "als_m6_cell_rel_orgnum": "2",
+ "als_m12_id_nbank_oth_orgnum": "4",
+ "als_m12_id_nbank_cons_allnum": "8",
+ "als_m3_id_nbank_sloan_allnum": "3",
+ "als_m12_cell_avg_monnum": "2.22",
+ "als_m3_cell_max_inteday": "42",
+ "als_m12_cell_cooff_allnum": "4",
+ "als_m3_id_bank_avg_monnum": "1.00",
+ "flag_applyloanstr": "1",
+ "als_m6_cell_bank_night_allnum": "1",
+ "als_m6_id_bank_week_orgnum": "0",
+ "als_m12_id_nbank_week_orgnum": "5",
+ "als_m3_cell_nbank_tot_mons": "2",
+ "als_m3_cell_bank_avg_monnum": "1.00",
+ "als_d15_cell_bank_night_orgnum": "0",
+ "als_d15_cell_bank_tra_orgnum": "1",
+ "als_m12_cell_nbank_week_allnum": "8",
+ "als_d15_cell_bank_tra_allnum": "1",
+ "als_m12_id_nbank_week_allnum": "8",
+ "als_m6_cell_bank_min_monnum": "0",
+ "als_m3_cell_nbank_min_inteday": "0",
+ "als_m12_id_nbank_allnum": "18",
+ "als_m3_cell_avg_monnum": "4.00",
+ "als_m6_id_nbank_tot_mons": "5",
+ "als_m12_cell_nbank_oth_orgnum": "4",
+ "als_m3_cell_bank_min_inteday": "58",
+ "als_m12_cell_pdl_allnum": "2",
+ "als_m6_cell_caon_allnum": "4",
+ "als_m12_id_nbank_tot_mons": "9",
+ "als_m12_id_pdl_allnum": "2",
+ "als_m6_id_cooff_orgnum": "1",
+ "als_m3_id_cooff_orgnum": "1",
+ "als_m3_id_nbank_night_orgnum": "0",
+ "als_m12_id_nbank_min_inteday": "0",
+ "als_m6_cell_bank_allnum": "2",
+ "als_m6_cell_nbank_week_allnum": "6",
+ "als_m12_id_caon_allnum": "4",
+ "als_m12_cell_pdl_orgnum": "2",
+ "als_m6_cell_bank_max_monnum": "1",
+ "als_m3_id_nbank_min_inteday": "0",
+ "als_m6_cell_bank_max_inteday": "58",
+ "als_m6_cell_bank_orgnum": "2",
+ "als_m12_cell_cooff_orgnum": "1",
+ "als_m3_id_pdl_allnum": "1",
+ "als_m12_cell_nbank_oth_allnum": "7",
+ "als_m6_cell_avg_monnum": "3.20",
+ "als_m12_cell_nbank_night_allnum": "5",
+ "als_m6_id_bank_min_inteday": "58",
+ "als_m6_id_nbank_week_allnum": "6",
+ "als_m6_cell_bank_night_orgnum": "1",
+ "als_m1_cell_bank_tra_orgnum": "1",
+ "als_m1_id_nbank_selfnum": "0",
+ "als_m3_cell_bank_min_monnum": "0",
+ "als_m6_id_nbank_cf_allnum": "7",
+ "als_m6_id_bank_max_monnum": "1",
+ "als_m6_id_nbank_week_orgnum": "4",
+ "als_m6_id_bank_orgnum": "2",
+ "als_m6_cell_bank_avg_monnum": "1.00",
+ "als_m3_cell_nbank_min_monnum": "0",
+ "als_m6_id_min_inteday": "0",
+ "als_lst_cell_bank_consnum": "1",
+ "als_m6_id_nbank_max_inteday": "45",
+ "als_m12_cell_caon_orgnum": "3",
+ "als_m6_cell_bank_week_allnum": "0",
+ "als_m1_cell_nbank_sloan_orgnum": "1",
+ "als_m3_cell_rel_allnum": "4",
+ "als_m6_id_nbank_max_monnum": "4",
+ "als_m12_id_nbank_nsloan_orgnum": "1",
+ "als_m12_cell_nbank_cons_allnum": "8",
+ "als_m12_cell_nbank_tot_mons": "9",
+ "als_m6_cell_rel_allnum": "6",
+ "als_m12_cell_nbank_week_orgnum": "5",
+ "als_m6_id_bank_allnum": "2",
+ "als_m6_id_bank_week_allnum": "0",
+ "als_m6_id_nbank_cons_orgnum": "4",
+ "als_m3_id_nbank_week_orgnum": "1",
+ "als_m12_id_bank_night_allnum": "1",
+ "als_m3_id_bank_night_orgnum": "1",
+ "als_m3_id_nbank_min_monnum": "0",
+ "als_m12_id_bank_max_monnum": "1",
+ "als_fst_cell_nbank_inteday": "326",
+ "als_m3_id_nbank_week_allnum": "1",
+ "als_m6_id_nbank_cons_allnum": "8",
+ "als_m12_cell_max_inteday": "62",
+ "als_m6_cell_nbank_min_inteday": "0",
+ "als_m12_id_nbank_min_monnum": "0",
+ "als_lst_cell_nbank_consnum": "1",
+ "als_m3_cell_nbank_week_orgnum": "1",
+ "als_m12_cell_bank_max_inteday": "58",
+ "als_m12_cell_bank_min_monnum": "0",
+ "als_m3_cell_nbank_avg_monnum": "3.00",
+ "als_m12_id_bank_night_orgnum": "1",
+ "als_m3_cell_nbank_week_allnum": "1"
+ },
+ "flag_applyloanstr": "1"
+ }
+ }
+ }
+ ,{
+ "feature": {
+ "featureName": "偿债压力指数",
+ "sort": 1
+ },
+ "data": {
+ "apiID": "JRZQ4AA8",
+ "data": {
+ "data": {
+ "swift_number": "999333_20181029143459_23453A4E0",
+ "code": "00",
+ "flag_debtrepaystress": "1",
+ "drs_nodebtscore": "80"
+ }
+ }
+ }
+ } ,{
+ "feature": {
+ "featureName": "借贷行为验证",
+ "sort": 1
+ },
+ "data": {
+ "apiID": "JRZQ8203",
+ "data":{
+ "data": {
+ "swift_number": "999333_20181029143459_23453A4E0",
+ "code": "00",
+ "flag_totalloan": "1",
+ "tl_id_eletail_lasttime": "2020-05-02",
+ "tl_id_eletail_lasttype": "c",
+ "tl_id_eletail_num": "1",
+ "tl_id_eletail_org": "1",
+ "tl_id_m1_nbank_passnum": "1",
+ "tl_id_m1_nbank_passorg": "1",
+ "tl_id_m1_nbank_passlendamt": "1",
+ "tl_id_m3_nbank_passnum": "1",
+ "tl_id_m3_nbank_passorg": "1",
+ "tl_id_m3_nbank_passlendamt": "1",
+ "tl_id_m6_nbank_passnum": "1",
+ "tl_id_m6_nbank_passorg": "1",
+ "tl_id_m6_nbank_passlendamt": "1",
+ "tl_id_m9_nbank_passnum": "1",
+ "tl_id_m9_nbank_passorg": "1",
+ "tl_id_m9_nbank_passlendamt": "1",
+ "tl_id_m12_nbank_passnum": "1",
+ "tl_id_m12_nbank_passorg": "1",
+ "tl_id_m12_nbank_passlendamt": "1",
+ "tl_id_t0_nbank_num": "1",
+ "tl_id_t0_nbank_org": "1",
+ "tl_id_t0_nbank_lendamt": "1",
+ "tl_id_t0_nbank_reamt": "1",
+ "tl_id_t1_nbank_num": "1",
+ "tl_id_t1_nbank_org": "1",
+ "tl_id_t1_nbank_lendamt": "1",
+ "tl_id_t1_nbank_reamt": "1",
+ "tl_id_t2_nbank_num": "1",
+ "tl_id_t2_nbank_org": "1",
+ "tl_id_t2_nbank_lendamt": "1",
+ "tl_id_t2_nbank_reamt": "1",
+ "tl_id_t3_nbank_num": "1",
+ "tl_id_t3_nbank_org": "1",
+ "tl_id_t3_nbank_lendamt": "1",
+ "tl_id_t3_nbank_reamt": "1",
+ "tl_id_t4_nbank_num": "1",
+ "tl_id_t4_nbank_org": "1",
+ "tl_id_t4_nbank_lendamt": "1",
+ "tl_id_t4_nbank_reamt": "1",
+ "tl_id_t5_nbank_num": "1",
+ "tl_id_t5_nbank_org": "1",
+ "tl_id_t5_nbank_lendamt": "1",
+ "tl_id_t5_nbank_reamt": "1",
+ "tl_id_t6_nbank_num": "1",
+ "tl_id_t6_nbank_org": "1",
+ "tl_id_t6_nbank_lendamt": "1",
+ "tl_id_t6_nbank_reamt": "1",
+ "tl_id_t7_nbank_num": "1",
+ "tl_id_t7_nbank_org": "1",
+ "tl_id_t7_nbank_lendamt": "1",
+ "tl_id_t7_nbank_reamt": "1",
+ "tl_id_t8_nbank_num": "1",
+ "tl_id_t8_nbank_org": "1",
+ "tl_id_t8_nbank_lendamt": "1",
+ "tl_id_t8_nbank_reamt": "1",
+ "tl_id_t9_nbank_num": "1",
+ "tl_id_t9_nbank_org": "1",
+ "tl_id_t9_nbank_lendamt": "1",
+ "tl_id_t9_nbank_reamt": "1",
+ "tl_id_t10_nbank_num": "1",
+ "tl_id_t10_nbank_org": "1",
+ "tl_id_t10_nbank_lendamt": "1",
+ "tl_id_t10_nbank_reamt": "1",
+ "tl_id_t11_nbank_num": "1",
+ "tl_id_t11_nbank_org": "1",
+ "tl_id_t11_nbank_lendamt": "1",
+ "tl_id_t11_nbank_reamt": "1",
+ "tl_cell_eletail_lasttime": "2020-05-02",
+ "tl_cell_eletail_lasttype": "c",
+ "tl_cell_eletail_num": "1",
+ "tl_cell_eletail_org": "1",
+ "tl_cell_m1_nbank_passnum": "1",
+ "tl_cell_m1_nbank_passorg": "1",
+ "tl_cell_m1_nbank_passlendamt": "1",
+ "tl_cell_m3_nbank_passnum": "1",
+ "tl_cell_m3_nbank_passorg": "1",
+ "tl_cell_m3_nbank_passlendamt": "1",
+ "tl_cell_m6_nbank_passnum": "1",
+ "tl_cell_m6_nbank_passorg": "1",
+ "tl_cell_m6_nbank_passlendamt": "1",
+ "tl_cell_m9_nbank_passnum": "1",
+ "tl_cell_m9_nbank_passorg": "1",
+ "tl_cell_m9_nbank_passlendamt": "1",
+ "tl_cell_m12_nbank_passnum": "1",
+ "tl_cell_m12_nbank_passorg": "1",
+ "tl_cell_m12_nbank_passlendamt": "1",
+ "tl_cell_t0_nbank_num": "1",
+ "tl_cell_t0_nbank_org": "1",
+ "tl_cell_t0_nbank_lendamt": "1",
+ "tl_cell_t0_nbank_reamt": "1",
+ "tl_cell_t1_nbank_num": "1",
+ "tl_cell_t1_nbank_org": "1",
+ "tl_cell_t1_nbank_lendamt": "1",
+ "tl_cell_t1_nbank_reamt": "1",
+ "tl_cell_t2_nbank_num": "1",
+ "tl_cell_t2_nbank_org": "1",
+ "tl_cell_t2_nbank_lendamt": "1",
+ "tl_cell_t2_nbank_reamt": "1",
+ "tl_cell_t3_nbank_num": "1",
+ "tl_cell_t3_nbank_org": "1",
+ "tl_cell_t3_nbank_lendamt": "1",
+ "tl_cell_t3_nbank_reamt": "1",
+ "tl_cell_t4_nbank_num": "1",
+ "tl_cell_t4_nbank_org": "1",
+ "tl_cell_t4_nbank_lendamt": "1",
+ "tl_cell_t4_nbank_reamt": "1",
+ "tl_cell_t5_nbank_num": "1",
+ "tl_cell_t5_nbank_org": "1",
+ "tl_cell_t5_nbank_lendamt": "1",
+ "tl_cell_t5_nbank_reamt": "1",
+ "tl_cell_t6_nbank_num": "1",
+ "tl_cell_t6_nbank_org": "1",
+ "tl_cell_t6_nbank_lendamt": "1",
+ "tl_cell_t6_nbank_reamt": "1",
+ "tl_cell_t7_nbank_num": "1",
+ "tl_cell_t7_nbank_org": "1",
+ "tl_cell_t7_nbank_lendamt": "1",
+ "tl_cell_t7_nbank_reamt": "1",
+ "tl_cell_t8_nbank_num": "1",
+ "tl_cell_t8_nbank_org": "1",
+ "tl_cell_t8_nbank_lendamt": "1",
+ "tl_cell_t8_nbank_reamt": "1",
+ "tl_cell_t9_nbank_num": "1",
+ "tl_cell_t9_nbank_org": "1",
+ "tl_cell_t9_nbank_lendamt": "1",
+ "tl_cell_t9_nbank_reamt": "1",
+ "tl_cell_t10_nbank_num": "1",
+ "tl_cell_t10_nbank_org": "1",
+ "tl_cell_t10_nbank_lendamt": "1",
+ "tl_cell_t10_nbank_reamt": "1",
+ "tl_cell_t11_nbank_num": "1",
+ "tl_cell_t11_nbank_org": "1",
+ "tl_cell_t11_nbank_lendamt": "1",
+ "tl_cell_t11_nbank_reamt": "1"
+ }
+ }
+ }
+ } ,{
+ "feature": {
+ "featureName": "名下车辆",
+ "sort": 1
+ },
+ "data": {
+ "apiID": "QCXG7A2B",
+ "data":
+ {
+ "carNum": "1"
+ }
+ }
+ } ,{
+ "feature": {
+ "featureName": "学籍学历核验(实时版)",
+ "sort": 1
+ },
+ "data": {
+ "apiID": "IVYZ3P9M",
+ "data": [
+ {
+ "specialtyName": "20307",
+ "graduationDate": "20210620",
+ "educationLevel": "2",
+ "studentName": "张三",
+ "enrollmentDate": "20180910",
+ "learningForm": "2",
+ "idNumber": "45212220000827423X",
+ "schoolName": "10001"
+ }
+ ]
+ }
+ }
+
+]
\ No newline at end of file
diff --git a/resources/Pure Component/src/App.vue b/resources/Pure Component/src/App.vue
new file mode 100644
index 0000000..1d0e26e
--- /dev/null
+++ b/resources/Pure Component/src/App.vue
@@ -0,0 +1,8 @@
+
+
+
+
+
+
diff --git a/resources/Pure Component/src/assets/base.css b/resources/Pure Component/src/assets/base.css
new file mode 100644
index 0000000..bab64a4
--- /dev/null
+++ b/resources/Pure Component/src/assets/base.css
@@ -0,0 +1,25 @@
+*,
+*::before,
+*::after {
+ box-sizing: border-box;
+ margin: 0;
+ font-weight: normal;
+}
+html {
+ margin: auto !important;
+ /* @apply max-w-lg; */
+ min-width: 320px;
+}
+body {
+ background-color: #f8f8f8;
+ min-height: 100vh;
+ transition: color 0.5s, background-color 0.5s;
+ line-height: 1.6;
+ font-family: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
+ Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue",
+ sans-serif;
+ font-size: 15px;
+ text-rendering: optimizeLegibility;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
diff --git a/resources/Pure Component/src/assets/colors.css b/resources/Pure Component/src/assets/colors.css
new file mode 100644
index 0000000..c4fab8d
--- /dev/null
+++ b/resources/Pure Component/src/assets/colors.css
@@ -0,0 +1,54 @@
+/* 统一颜色变量管理文件 */
+:root {
+ /* ===== 主题色系 ===== */
+ --color-primary: #5d7eeb;
+ --color-primary-50: #f0f3ff;
+ --color-primary-100: #e1e8ff;
+ --color-primary-200: #c3d1ff;
+ --color-primary-300: #a5baff;
+ --color-primary-400: #87a3ff;
+ --color-primary-500: #5d7eeb;
+ --color-primary-600: #4a63bc;
+ --color-primary-700: #38488d;
+ --color-primary-800: #252d5e;
+ --color-primary-900: #13122f;
+
+ --color-primary-light: rgba(93, 126, 235, 0.1);
+ --color-primary-medium: rgba(93, 126, 235, 0.15);
+ --color-primary-dark: rgba(93, 126, 235, 0.8);
+
+ /* ===== 语义化颜色 ===== */
+ --color-success: #07c160;
+ --color-warning: #ff976a;
+ --color-danger: #ee0a24;
+ --color-info: #1989fa;
+
+ /* ===== 中性色系 ===== */
+ --color-gray-50: #fafafa;
+ --color-gray-100: #f5f5f5;
+ --color-gray-200: #e5e5e5;
+ --color-gray-300: #d4d4d4;
+ --color-gray-400: #a3a3a3;
+ --color-gray-500: #737373;
+ --color-gray-600: #525252;
+ --color-gray-700: #404040;
+ --color-gray-800: #262626;
+ --color-gray-900: #171717;
+
+ /* ===== 文本颜色 ===== */
+ --color-text-primary: #323233;
+ --color-text-secondary: #646566;
+ --color-text-tertiary: #969799;
+
+ /* ===== 背景颜色 ===== */
+ --color-bg-primary: #ffffff;
+ --color-bg-secondary: #fafafa;
+ --color-bg-tertiary: #f8f8f8;
+
+ /* ===== 边框颜色 ===== */
+ --color-border-primary: #ebedf0;
+}
+
+.bg-primary {
+ background-color: var(--color-primary) !important;
+}
diff --git a/resources/Pure Component/src/assets/images/empty.svg b/resources/Pure Component/src/assets/images/empty.svg
new file mode 100644
index 0000000..fbecc14
--- /dev/null
+++ b/resources/Pure Component/src/assets/images/empty.svg
@@ -0,0 +1,75 @@
+
\ No newline at end of file
diff --git a/resources/Pure Component/src/assets/images/public_security_record_icon.png b/resources/Pure Component/src/assets/images/public_security_record_icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..6fe667f73fa1ae8c37d33b5bece6f602a861f7bf
GIT binary patch
literal 11143
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
literal 0
HcmV?d00001
diff --git a/resources/Pure Component/src/assets/images/report/ajgl.png b/resources/Pure Component/src/assets/images/report/ajgl.png
new file mode 100644
index 0000000000000000000000000000000000000000..d8ce93d8ce7c469ec3a4c5dc120926bd8e1c1d2f
GIT binary patch
literal 11679
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
literal 0
HcmV?d00001
diff --git a/resources/Pure Component/src/assets/images/report/backgroundcheck_inquire_bg.png b/resources/Pure Component/src/assets/images/report/backgroundcheck_inquire_bg.png
new file mode 100644
index 0000000000000000000000000000000000000000..a786bfe77fe512f1fb0dc1908bcc31a1c7d7763d
GIT binary patch
literal 85548
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