| deploy-templates/README-部署说明.txt | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| deploy-templates/backend/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| deploy-templates/backend/start-backend.cmd | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| deploy-templates/backend/start-backend.sh | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| deploy-templates/db/init.sql | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| deploy-templates/db/sql_city_bus.sql | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| deploy-templates/db/sql_city_taxi.sql | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| deploy-templates/db/sql_wyc.sql | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| deploy-templates/frontend/nginx.conf.example | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| docs/功能测试报告/功能测试报告_密钥外部化与打包去密_2026-09-26.md | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| docs/工作日结/工作日结_2026-09-26.md | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| docs/打包部署说明.md | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| pack-deploy.ps1 | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| set-secrets.ps1 | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
deploy-templates/README-²¿Êð˵Ã÷.txt
New file @@ -0,0 +1,67 @@ TrafficAudit 交éè´§è¿ç»è®¡å®¡æ ¸ç³»ç» ââ é¨ç½²å ï¼{stamp}ï¼ ======================================================== ãç®å½ç»æã backend/ traffic-audit-server-1.0.0-SNAPSHOT.jar å端ç¨åºï¼å«å ¨é¨ä¾èµï¼**å·²å åµå端**ï¼ docs/ æ¥è¡¨æ¨¡æ¿ä¸è¿è¡æ°æ®ç®å½ï¼å¿ éï¼å¿å ï¼ application.yml å¤é¨é ç½®ï¼æ¹è¿éå³å¯ï¼æ ééæ°æå ï¼ start-backend.cmd / start-backend.sh å¯å¨èæ¬ frontend/ dist/ å端æå»ºäº§ç©ï¼å¤ç¨ï¼æ³ç¨ nginx æç®¡æ¶ç¨ï¼ nginx.conf.example nginx é ç½®ç¤ºä¾ db/ init.sql 建åºå»ºè¡¨ + é¢ç½®è´¦å·ï¼å¿ é¡»æ§è¡ï¼ sql_city_bus.sql åå¸å®¢è¿-å ¬äº¤æåº¦è¡¨ï¼å¿ é¡»æ§è¡ï¼ sql_city_taxi.sql åå¸å®¢è¿-åºç§æåº¦è¡¨/åºç§ææè¡¨ï¼å¿ é¡»æ§è¡ï¼ sql_wyc.sql ç½çº¦è½¦å ¨çæ»é表/订ååå¸å·è¡¨ï¼å¿ é¡»æ§è¡ï¼ README-é¨ç½²è¯´æ.txt ãé¨ç½²æºç¯å¢è¦æ±ã JDK 8ï¼å¿ éï¼ MySQL 5.7 / 8.0ï¼å¿ éï¼ **ä¸éè¦ Redis**ï¼ä»£ç æªä½¿ç¨ï¼æ§ç说æéç Redis æ¯éçé ç½®ï¼å¯å¿½ç¥ï¼ **ä¸éè¦ nginx**ï¼å端已å åµè¿ jarï¼è®¿é® 8090 å³å¯ï¼nginx ä» ä¸ºå¤éæ¹æ¡ï¼ ãé¨ç½²æ¥éª¤ã 1. åå§åæ°æ®åºï¼4 ä¸ªèæ¬é½è¦æ§è¡ï¼é¡ºåºå¦ä¸ï¼ mysql --default-character-set=utf8mb4 -u root -p < db/init.sql mysql --default-character-set=utf8mb4 -u root -p traffic_audit < db/sql_city_bus.sql mysql --default-character-set=utf8mb4 -u root -p traffic_audit < db/sql_city_taxi.sql mysql --default-character-set=utf8mb4 -u root -p traffic_audit < db/sql_wyc.sql é¢ç½®è´¦å·ï¼admin / admin123ï¼é¦æ¬¡ç»å½å请æ¹å¯ç ï¼ 2. æ¹é ç½® backend/application.yml - spring.datasource.url / username / password ï¼æ¹æé¨ç½²æºç MySQLï¼é»è®¤ç«¯å£ 3306ï¼ - jwt.secret ï¼æ¹æä¸ä¸²éæºå符串ï¼**å¿ é¡»æ¯ Base64 åæ³å符ä¸é¿åº¦æ¯ 4 çåæ°**ï¼å¦ 32 ä½åå è¿å¶ï¼å¡«ä¸æä¼ç»å½å¤±è´¥ï¼ - deepseek.api-key ï¼éè¦ AI åææ¶å¡«ï¼ä¸éè¦å¯ç空 注ï¼application.yml ä¸ jar å级å³çæï¼ä¸ç¨éæ°æå ã 3. å¯å¨å端ï¼å¨ backend ç®å½ä¸ï¼ Windowsï¼åå» start-backend.cmd Linuxï¼ sh start-backend.sh æåæ å¿ï¼åºç° "Started TrafficAuditApplication" ä¸ "Tomcat started on port(s): 8090" 4. 访é®ç³»ç» æµè§å¨æå¼ http://<é¨ç½²æºIP>:8090 ï¼å端已å åµï¼é¡µé¢ä¸æ¥å£åæºï¼ è´¦å·ï¼admin / admin123 ãæ°æ®è¿ç§»ï¼å¯éï¼ã æ³ææ¬æºæ°æ®ä¸å¹¶æ¬å°æ°æºå¨ï¼ç¨ mysqldumpï¼æ¬æº MySQL è¥ä¸å¨ 3306ï¼æå®é ç«¯å£æ¹ï¼ï¼ mysqldump -h 127.0.0.1 -P 3306 -u root -p --databases traffic_audit > traffic_audit_full.sql å卿°æºå¨æ§è¡ï¼ mysql -u root -p < traffic_audit_full.sql 注æï¼å ¨é dump ä¼å¸¦ä¸æ¬æºçè´¦å·å¯ç ï¼è¦ç init.sql é¢ç½®ç admin è´¦å·ã ã常è§é®é¢ã 1. å¯å¨æ¥ãæªæ¾å°æ°æ®ç®å½ docsã/ å¯¼åºæ¥ãæªæ¾å°æ¨¡æ¿æä»¶ãï¼ å¿ é¡»å¨ backend ç®å½ä¸å¯å¨ï¼jar ä¸ docs å级ï¼ï¼ä¸è¦åªæ· jarã 2. æ¥è¡¨å¯¼åºæ¥ãæªæ¾å°æ±æ»è¡¨æ¯çãYYYYå¹´Mæéè·¯è¿è¾éæ±æ»è¡¨.xlsxããï¼ docs/çææ±æ»å¤§è¡¨ ä¸ç¼ºå°è¯¥æä»½æ¯çï¼ææºæºå¨ç该æä»¶æ·è¿å»ã 3. 8090 端å£è¢«å ç¨ï¼æ¹ application.yml ç server.port åéå¯ã 4. 页颿弿¯ç©ºç½ï¼ç¡®è®¤è®¿é®çæ¯ http://<IP>:8090 æ ¹è·¯å¾ï¼ä¸æµè§å¨å¼ºå¶å·æ°ï¼Ctrl+F5ï¼ã 5. ä¸ä¼ 大æä»¶å¤±è´¥ï¼å端éå¶ 100MBï¼å·²é ç½®ï¼å¦åé¢è¿æäº nginxï¼é忥æ¾å¤§ client_max_body_sizeã ã忢æå¡ã Windowsï¼å ³é start-backend.cmd çªå£ Linuxï¼ Ctrl+Cï¼æ kill å¯¹åº java è¿ç¨ï¼ps -ef | grep javaï¼ deploy-templates/backend/application.yml
New file @@ -0,0 +1,56 @@ # ============================================================ # TrafficAudit å端å¤é¨é ç½®ï¼ä¸ jar å级å³å¯çæï¼ä¼å 级é«äº jar å ç½®é ç½®ï¼ # é¨ç½²å°æ°æºå¨åï¼è¯·**è³å°**ä¿®æ¹ä¸é¢æ 注 TODO çä¸å¤æ°æ®åºé ç½®ï¼ # ============================================================ server: port: 8080 app: captcha: required: false # ç产ç¯å¢å¦éå¾å½¢éªè¯ç ï¼æ¹ä¸º true spring: datasource: url: jdbc:mysql://127.0.0.1:3306/traffic_audit?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true username: root # TODO æ¹æä½ ç MySQL è´¦å· password: è¯·æ¹æä½ çæ°æ®åºå¯ç # TODO æ¹æä½ ç MySQL å¯ç driver-class-name: com.mysql.cj.jdbc.Driver servlet: multipart: max-file-size: 100MB max-request-size: 100MB jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: Asia/Shanghai mybatis-plus: mapper-locations: classpath*:/mapper/**/*.xml type-aliases-package: com.trafficaudit configuration: map-underscore-to-camel-case: true global-config: db-config: id-type: auto logic-delete-field: deleted logic-delete-value: 1 logic-not-delete-value: 0 jwt: # å¿ é¡»æ¯ãBase64 åæ³å符 + é¿åº¦æ¯ 4 çåæ°ãï¼ä¸é¢è¿ä¸² 32 ä½åå è¿å¶å¯ç´æ¥ç¨ï¼ # ç产ç¯å¢å»ºè®®æ¢æèªå·±çéæºä¸²ï¼å¡«ä¸ææä¸åæ³å符ä¼å¯¼è´ç»å½ 500ï¼ secret: 8f2c1d64a7b34e09c5d81f6a2b0e7c93 expiration: 86400000 docs: template-root: docs city-passenger: template-dir: docs/åå¸å®¢è¿ passenger: template-dir: docs/å ¬è·¯æ 客 freight: template-dir: docs/è´§è¿ energy: template-dir: docs/è½è investment: template-dir: docs/æèµ/æ¨¡æ¿ summary: template-dir: docs/çææ±æ»å¤§è¡¨ # æ±æ»å¤§è¡¨æ¯çä¸çå¼åç §ä»¶æå¨ç®å½ï¼å¿ éï¼ deepseek: api-key: "" # AI åæç¨ï¼ç空å AI åæä¸å¯ç¨ api-url: https://api.deepseek.com/v1/chat/completions model: deepseek-chat deploy-templates/backend/start-backend.cmd
New file @@ -0,0 +1,16 @@ @echo off chcp 65001 >nul cd /d %~dp0 where java >nul 2>nul if errorlevel 1 ( echo [ERROR] æªæ¾å° javaï¼è¯·å å®è£ JDK 8 å¹¶å å ¥ PATH pause exit /b 1 ) echo ============================================ echo TrafficAudit å¯å¨ä¸ï¼http://localhost:8090 echo å端已å åµï¼ç´æ¥è®¿é® 8090 å³å¯ï¼ä¸éè¦ nginxï¼ echo æ¥å¿æ¾ç¤ºå¨æ¬çªå£ï¼å ³éçªå£å³åæ¢æå¡ echo ============================================ java -jar traffic-audit-server-1.0.0-SNAPSHOT.jar pause deploy-templates/backend/start-backend.sh
New file @@ -0,0 +1,4 @@ #!/bin/sh cd "$(dirname "$0")" || exit 1 echo "TrafficAudit å¯å¨ä¸ï¼http://localhost:8090 ï¼Ctrl+C 忢ï¼" java -jar traffic-audit-server-1.0.0-SNAPSHOT.jar 2>&1 | tee app.log deploy-templates/db/init.sql
New file @@ -0,0 +1,619 @@ -- 交éç»è®¡æ¥è¡¨å®¡æ ¸ç³»ç» - æ°æ®åºåå§åèæ¬ v3 -- Demoèå´ï¼äº¤ä¼ç»H203-2表_é路货ç©è¿è¾æåº¦ç产æ åµ CREATE DATABASE IF NOT EXISTS traffic_audit DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; USE traffic_audit; -- ============================================ -- ä¸ãç¨æ·æé模åï¼å«ä¸åï¼ -- ============================================ -- é¨é¨è¡¨ DROP TABLE IF EXISTS sys_dept; CREATE TABLE sys_dept ( id BIGINT AUTO_INCREMENT PRIMARY KEY, dept_name VARCHAR(100) NOT NULL COMMENT 'é¨é¨åç§°', dept_code VARCHAR(20) NOT NULL COMMENT 'è¡æ¿åºå代ç ', parent_id BIGINT DEFAULT 0 COMMENT 'ä¸çº§é¨é¨', dept_level TINYINT COMMENT '1ç 2å¸ 3å¿', sort_order INT DEFAULT 0 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- è§è²è¡¨ DROP TABLE IF EXISTS sys_role; CREATE TABLE sys_role ( id BIGINT AUTO_INCREMENT PRIMARY KEY, role_name VARCHAR(50) NOT NULL COMMENT 'è§è²å', role_code VARCHAR(50) NOT NULL COMMENT 'SYS_ADMIN/SEC_OFFICER/AUDITOR/PROVINCE/CITY/COUNTY', role_type VARCHAR(20) DEFAULT 'BUSINESS' COMMENT 'SYSTEM(ä¸å)/BUSINESS(ä¸å¡)', role_level TINYINT DEFAULT 1 COMMENT '0ä¸å 1çå 2å¸å± 3å¿åº', is_mutex TINYINT DEFAULT 0 COMMENT '1ä¸åäºæ¥ 0æ®é' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- ç¨æ·è¡¨ DROP TABLE IF EXISTS sys_user; CREATE TABLE sys_user ( id BIGINT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(200) NOT NULL COMMENT 'BCrypt', real_name VARCHAR(50), modules VARCHAR(255) DEFAULT NULL COMMENT 'è´è´£æ¥è¡¨æ¨¡åï¼éå·åéï¼', phone VARCHAR(20), dept_id BIGINT, status TINYINT DEFAULT 1 COMMENT '0ç¦ç¨ 1å¯ç¨', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- ç¨æ·è§è²å ³è DROP TABLE IF EXISTS sys_user_role; CREATE TABLE sys_user_role ( id BIGINT AUTO_INCREMENT PRIMARY KEY, user_id BIGINT NOT NULL, role_id BIGINT NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- ============================================ -- äºãä¸å¡æ°æ®æ¨¡å -- ============================================ -- æ¸ çæ§çéç表ï¼v2 schemaï¼ DROP TABLE IF EXISTS report_enterprise_monthly; -- 交ä¼ç»H203-2表ï¼é路货ç©è¿è¾æåº¦ç产æ åµï¼Demoæ ¸å¿è¡¨ï¼ DROP TABLE IF EXISTS h2032_enterprise_monthly; CREATE TABLE h2032_enterprise_monthly ( id BIGINT AUTO_INCREMENT PRIMARY KEY, report_period VARCHAR(20) NOT NULL COMMENT 'æ¥è¡¨æ 2026-06', region_code VARCHAR(20) COMMENT 'æå±å°åº', enterprise_code VARCHAR(50) COMMENT 'ä¼ä¸ä»£ç ', enterprise_name VARCHAR(200) COMMENT 'ä¼ä¸åç§°', unified_credit_code VARCHAR(50) COMMENT 'ç»ä¸ç¤¾ä¼ä¿¡ç¨ä»£ç ', report_unit VARCHAR(200) COMMENT 'å¡«æ¥åä½', -- è½¦è¾æ°ä¸å¨ä½æ° vehicle_total INT COMMENT 'è½¦è¾æ°_æ»è®¡', tons_total DOUBLE COMMENT 'æ è®°å¨ä½æ°_æ»è®¡', vehicle_tractor INT COMMENT 'è½¦è¾æ°_çµå¼è½¦', vehicle_trailer INT COMMENT 'è½¦è¾æ°_æè½¦', tons_trailer DOUBLE COMMENT 'æ è®°å¨ä½æ°_æè½¦', vehicle_container INT COMMENT 'è½¦è¾æ°_éè£ ç®±è½¦', tons_container DOUBLE COMMENT 'æ è®°å¨ä½æ°_éè£ ç®±è½¦', vehicle_whole INT COMMENT 'è½¦è¾æ°_æ´è½¦', tons_whole DOUBLE COMMENT 'æ è®°å¨ä½æ°_æ´è½¦', -- è´§è¿éä¸å¨è½¬é freight_total DOUBLE COMMENT 'è´§è¿é_æ»è®¡ï¼å¨ï¼', turnover_total DOUBLE COMMENT 'è´§ç©å¨è½¬é_æ»è®¡ï¼å¨å ¬éï¼', -- å货类货è¿é freight_container DOUBLE COMMENT 'è´§è¿é_éè£ ç®±ï¼å¨ï¼', freight_coal DOUBLE COMMENT 'è´§è¿é_ç ¤çåå¶åï¼å¨ï¼', freight_oil_gas DOUBLE COMMENT 'è´§è¿é_ç³æ²¹å¤©ç¶æ°åå¶åï¼å¨ï¼', freight_crude_oil DOUBLE COMMENT 'è´§è¿é_å ¶ä¸åæ²¹ï¼å¨ï¼', freight_metal_ore DOUBLE COMMENT 'è´§è¿é_éå±ç¿ç³ï¼å¨ï¼', freight_iron_ore DOUBLE COMMENT 'è´§è¿é_å ¶ä¸éç¿ç³ï¼å¨ï¼', freight_building DOUBLE COMMENT 'è´§è¿é_ç¿ç©æ§å»ºçææï¼å¨ï¼', freight_grain DOUBLE COMMENT 'è´§è¿é_ç²®é£ï¼å¨ï¼', -- è¿è¥ææ avg_tonnage DOUBLE COMMENT '货车平åå¨ä½', avg_tonnage_trailer DOUBLE COMMENT 'å¹³åå¨ä½_æè½¦', avg_tonnage_whole DOUBLE COMMENT 'å¹³åå¨ä½_æ´è½¦', avg_distance DOUBLE COMMENT '货车平åè¿è·ï¼å ¬éï¼', daily_trips_per_ton DOUBLE COMMENT 'å卿¥åè½½è¿æ¬¡æ°', daily_mileage_per_vehicle DOUBLE COMMENT 'å车å天è¡é©¶éç¨ï¼å ¬éï¼', daily_volume_per_vehicle DOUBLE COMMENT 'å车æ¥åè¿éï¼å¨ï¼', daily_trips_with_tractor DOUBLE COMMENT 'å卿¥åè½½è¿æ¬¡æ°ï¼ç»åçµå¼è½¦ï¼', -- ç¯æ¯å¢é vehicle_mom_growth DOUBLE COMMENT 'è½¦è¾æ°-æ»è®¡ç¯æ¯å¢é', tons_mom_growth DOUBLE COMMENT 'æ è®°å¨ä½-æ»è®¡ç¯æ¯å¢é', freight_mom_growth DOUBLE COMMENT 'è´§è¿é-æ»è®¡ç¯æ¯å¢é', turnover_mom_growth DOUBLE COMMENT 'è´§ç©å¨è½¬é-æ»è®¡ç¯æ¯å¢é', avg_distance_mom_growth DOUBLE COMMENT '货车平åè¿è·-ç¯æ¯å¢é', -- 忝å¢é vehicle_yoy_growth DOUBLE COMMENT 'è½¦è¾æ°-æ»è®¡åæ¯å¢é', tons_yoy_growth DOUBLE COMMENT 'æ è®°å¨ä½-æ»è®¡åæ¯å¢é', tractor_trailer_ratio DOUBLE COMMENT 'çµå¼è½¦æè½¦æ¯', freight_yoy_growth DOUBLE COMMENT 'è´§è¿é-æ»è®¡åæ¯å¢é', turnover_yoy_growth DOUBLE COMMENT 'è´§ç©å¨è½¬é-æ»è®¡åæ¯å¢é', avg_distance_yoy_growth DOUBLE COMMENT '货车平åè¿è·-忝å¢é', -- å¡«æ¥ä¿¡æ¯ unit_leader VARCHAR(50) COMMENT 'åä½è´è´£äºº', stats_leader VARCHAR(50) COMMENT 'ç»è®¡è´è´£äºº', contact_person VARCHAR(50) COMMENT '填表人', contact_phone VARCHAR(20) COMMENT 'èç³»çµè¯', report_date DATE COMMENT 'æ¥åºæ¥æ', verify_explanation TEXT COMMENT 'æ ¸å®æ§åå è§£é', report_notes TEXT COMMENT '䏿¥è¯´æ', modify_record TEXT COMMENT 'ä¿®æ¹è®°å½', import_batch_id BIGINT COMMENT 'å¯¼å ¥æ¹æ¬¡', created_at DATETIME DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='交ä¼ç»H203-2表_é路货ç©è¿è¾æåº¦ç产æ åµ'; -- è¿æ¿è½¦è¾æ°æ® DROP TABLE IF EXISTS transport_auth_vehicle; CREATE TABLE transport_auth_vehicle ( id BIGINT AUTO_INCREMENT PRIMARY KEY, report_period VARCHAR(20) COMMENT 'æ¥è¡¨æ', enterprise_name VARCHAR(200) COMMENT 'ä¼ä¸åç§°', tractor_count INT DEFAULT 0 COMMENT 'æ»çµå¼è½¦æ°', trailer_count INT DEFAULT 0 COMMENT 'æ»æè½¦æ°', other_count INT DEFAULT 0 COMMENT 'å ¶å®è½¦è¾æ°', trailer_tons DOUBLE COMMENT 'æè½¦æ»å¨ä½(å¨)', other_tons DOUBLE COMMENT 'å ¶å®è½¦è¾æ»å¨ä½(å¨)', import_batch_id BIGINT COMMENT 'å¯¼å ¥æ¹æ¬¡', created_at DATETIME DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='è¿æ¿è½¦è¾æ°æ®'; -- 车è¾è½¨è¿¹éç¨æ°æ® DROP TABLE IF EXISTS vehicle_track_mileage; CREATE TABLE vehicle_track_mileage ( id BIGINT AUTO_INCREMENT PRIMARY KEY, enterprise_name VARCHAR(200) COMMENT 'ä¼ä¸åç§°', monthly_mileage DOUBLE COMMENT 'æåº¦æ»éç¨(å ¬é)', tracked_vehicles INT DEFAULT 0 COMMENT 'æéç¨çè½¦è¾æ°', report_period VARCHAR(20) COMMENT 'æ¥è¡¨æ', import_batch_id BIGINT COMMENT 'å¯¼å ¥æ¹æ¬¡', created_at DATETIME DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='车è¾è½¨è¿¹éç¨æ°æ®'; -- è§ä¸è§ä¸æåè¿è¾éï¼ç¨æ·æå¨ä¸ä¼ ï¼ DROP TABLE IF EXISTS scale_split_transport; CREATE TABLE scale_split_transport ( id BIGINT AUTO_INCREMENT PRIMARY KEY, report_period VARCHAR(20) NOT NULL COMMENT 'æ¥è¡¨æ 2026-06', period_type VARCHAR(10) NOT NULL COMMENT 'MONTH彿/CUMULATIVE累计', region_name VARCHAR(50) COMMENT 'å¸å·åç§°', -- è§ä¸ above_scale_freight DOUBLE COMMENT 'è§ä¸è´§è¿é', above_scale_turnover DOUBLE COMMENT 'è§ä¸å¨è½¬é', above_scale_rank INT COMMENT 'è§ä¸æå', above_scale_yoy DOUBLE COMMENT 'è§ä¸åæ¯', above_scale_yoy_rank INT COMMENT 'è§ä¸å¢éæå', -- è§ä¸ below_scale_freight DOUBLE COMMENT 'è§ä¸è´§è¿é', below_scale_turnover DOUBLE COMMENT 'è§ä¸å¨è½¬é', below_scale_rank INT COMMENT 'è§ä¸æå', below_scale_yoy DOUBLE COMMENT 'è§ä¸åæ¯', below_scale_yoy_rank INT COMMENT 'è§ä¸å¢éæå', -- å计 total_freight DOUBLE COMMENT 'è¿è¾éå计-è´§è¿é', total_turnover DOUBLE COMMENT 'è¿è¾éå计-å¨è½¬é', total_rank INT COMMENT 'å计æå', total_yoy DOUBLE COMMENT 'åè®¡åæ¯', total_yoy_rank INT COMMENT 'å计å¢éæå', import_batch_id BIGINT COMMENT 'å¯¼å ¥æ¹æ¬¡', created_at DATETIME DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='è§ä¸è§ä¸æåè¿è¾é'; -- 模æ¿_è´§è¿éå¨è½¬éï¼æ¯æå¯¼å ¥ï¼å·¦åä»å¹´1-Næï¼å³åå»å¹´1-12æï¼N=æ¥è¡¨ææä»½ï¼ DROP TABLE IF EXISTS freight_turnover_import; CREATE TABLE freight_turnover_import ( id BIGINT AUTO_INCREMENT PRIMARY KEY, report_period VARCHAR(20) NOT NULL COMMENT 'æ¥è¡¨æ 2026-06', region_name VARCHAR(50) NOT NULL COMMENT 'å¸å·ææ¹åç', -- ä»å¹´1-12æè´§è¿éï¼å·¦åï¼ä» 1-Nææå¼ï¼ freight_m01 DOUBLE COMMENT '1æè´§è¿é(ä¸å¨)', freight_m02 DOUBLE COMMENT '2æè´§è¿é(ä¸å¨)', freight_m03 DOUBLE COMMENT '3æè´§è¿é(ä¸å¨)', freight_m04 DOUBLE COMMENT '4æè´§è¿é(ä¸å¨)', freight_m05 DOUBLE COMMENT '5æè´§è¿é(ä¸å¨)', freight_m06 DOUBLE COMMENT '6æè´§è¿é(ä¸å¨)', freight_m07 DOUBLE COMMENT '7æè´§è¿é(ä¸å¨)', freight_m08 DOUBLE COMMENT '8æè´§è¿é(ä¸å¨)', freight_m09 DOUBLE COMMENT '9æè´§è¿é(ä¸å¨)', freight_m10 DOUBLE COMMENT '10æè´§è¿é(ä¸å¨)', freight_m11 DOUBLE COMMENT '11æè´§è¿é(ä¸å¨)', freight_m12 DOUBLE COMMENT '12æè´§è¿é(ä¸å¨)', -- å»å¹´1-12æè´§è¿éï¼å³åï¼åºå®12个æï¼ç®åæ¯ç¨ï¼ last_freight_m01 DOUBLE COMMENT 'å»å¹´1æè´§è¿é(ä¸å¨)', last_freight_m02 DOUBLE COMMENT 'å»å¹´2æè´§è¿é(ä¸å¨)', last_freight_m03 DOUBLE COMMENT 'å»å¹´3æè´§è¿é(ä¸å¨)', last_freight_m04 DOUBLE COMMENT 'å»å¹´4æè´§è¿é(ä¸å¨)', last_freight_m05 DOUBLE COMMENT 'å»å¹´5æè´§è¿é(ä¸å¨)', last_freight_m06 DOUBLE COMMENT 'å»å¹´6æè´§è¿é(ä¸å¨)', last_freight_m07 DOUBLE COMMENT 'å»å¹´7æè´§è¿é(ä¸å¨)', last_freight_m08 DOUBLE COMMENT 'å»å¹´8æè´§è¿é(ä¸å¨)', last_freight_m09 DOUBLE COMMENT 'å»å¹´9æè´§è¿é(ä¸å¨)', last_freight_m10 DOUBLE COMMENT 'å»å¹´10æè´§è¿é(ä¸å¨)', last_freight_m11 DOUBLE COMMENT 'å»å¹´11æè´§è¿é(ä¸å¨)', last_freight_m12 DOUBLE COMMENT 'å»å¹´12æè´§è¿é(ä¸å¨)', -- ä»å¹´1-12æå¨è½¬éï¼å·¦åï¼ä» 1-Nææå¼ï¼å¯¼å ¥åæ¡£ï¼æ¥è¡¨ç¨æåè¡¨ï¼ turnover_m01 DOUBLE COMMENT '1æå¨è½¬é(ä¸å¨å ¬é)', turnover_m02 DOUBLE COMMENT '2æå¨è½¬é(ä¸å¨å ¬é)', turnover_m03 DOUBLE COMMENT '3æå¨è½¬é(ä¸å¨å ¬é)', turnover_m04 DOUBLE COMMENT '4æå¨è½¬é(ä¸å¨å ¬é)', turnover_m05 DOUBLE COMMENT '5æå¨è½¬é(ä¸å¨å ¬é)', turnover_m06 DOUBLE COMMENT '6æå¨è½¬é(ä¸å¨å ¬é)', turnover_m07 DOUBLE COMMENT '7æå¨è½¬é(ä¸å¨å ¬é)', turnover_m08 DOUBLE COMMENT '8æå¨è½¬é(ä¸å¨å ¬é)', turnover_m09 DOUBLE COMMENT '9æå¨è½¬é(ä¸å¨å ¬é)', turnover_m10 DOUBLE COMMENT '10æå¨è½¬é(ä¸å¨å ¬é)', turnover_m11 DOUBLE COMMENT '11æå¨è½¬é(ä¸å¨å ¬é)', turnover_m12 DOUBLE COMMENT '12æå¨è½¬é(ä¸å¨å ¬é)', -- å»å¹´1-12æå¨è½¬éï¼å³åï¼åºå®12个æï¼ last_turnover_m01 DOUBLE COMMENT 'å»å¹´1æå¨è½¬é(ä¸å¨å ¬é)', last_turnover_m02 DOUBLE COMMENT 'å»å¹´2æå¨è½¬é(ä¸å¨å ¬é)', last_turnover_m03 DOUBLE COMMENT 'å»å¹´3æå¨è½¬é(ä¸å¨å ¬é)', last_turnover_m04 DOUBLE COMMENT 'å»å¹´4æå¨è½¬é(ä¸å¨å ¬é)', last_turnover_m05 DOUBLE COMMENT 'å»å¹´5æå¨è½¬é(ä¸å¨å ¬é)', last_turnover_m06 DOUBLE COMMENT 'å»å¹´6æå¨è½¬é(ä¸å¨å ¬é)', last_turnover_m07 DOUBLE COMMENT 'å»å¹´7æå¨è½¬é(ä¸å¨å ¬é)', last_turnover_m08 DOUBLE COMMENT 'å»å¹´8æå¨è½¬é(ä¸å¨å ¬é)', last_turnover_m09 DOUBLE COMMENT 'å»å¹´9æå¨è½¬é(ä¸å¨å ¬é)', last_turnover_m10 DOUBLE COMMENT 'å»å¹´10æå¨è½¬é(ä¸å¨å ¬é)', last_turnover_m11 DOUBLE COMMENT 'å»å¹´11æå¨è½¬é(ä¸å¨å ¬é)', last_turnover_m12 DOUBLE COMMENT 'å»å¹´12æå¨è½¬é(ä¸å¨å ¬é)', import_batch_id BIGINT COMMENT 'å¯¼å ¥æ¹æ¬¡', created_at DATETIME DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='模æ¿_è´§è¿éå¨è½¬éå¯¼å ¥'; -- ============================================ -- ä¸ãå®¡æ ¸è§å模å -- ============================================ DROP TABLE IF EXISTS audit_rule; CREATE TABLE audit_rule ( id BIGINT AUTO_INCREMENT PRIMARY KEY, rule_name VARCHAR(100) NOT NULL COMMENT 'è§ååç§°', rule_code VARCHAR(50) NOT NULL COMMENT 'è§åç¼ç ', description TEXT COMMENT 'è§åæè¿°', check_field VARCHAR(200) COMMENT 'æ£æ¥å段', compare_type VARCHAR(20) COMMENT 'DIFF/RATIO/MOM/YOY/NULL_CHECK/RANGE', threshold VARCHAR(50) COMMENT 'éå¼', alert_level VARCHAR(10) DEFAULT 'YELLOW' COMMENT 'RED/YELLOW', report_type VARCHAR(50) DEFAULT 'H2032' COMMENT 'éç¨æ¥è¡¨è¡¨å·', is_enabled TINYINT DEFAULT 1, llm_raw_input TEXT COMMENT 'LLMç¿»è¯åå§è¾å ¥', sort_order INT DEFAULT 0, created_by BIGINT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- é¢ç½®6æ¡å®¡æ ¸è§åï¼Demoï¼ INSERT INTO audit_rule (rule_name, rule_code, description, check_field, compare_type, threshold, alert_level, report_type, is_enabled, sort_order) VALUES ('è½¦è¾æ°è¿æ¿å¯¹æ¯', 'RULE_001', 'ä¼ä¸ä¸æ¥è½¦è¾æ°ä¸è¿æ¿æ°æ®å¯¹æ¯ï¼å·®è·>5å°éæ ¸å®', 'vehicleTotal', 'DIFF', '5', 'RED', 'H2032', 1, 1), ('å¨ä½è¿æ¿å¯¹æ¯', 'RULE_002', 'ä¼ä¸ä¸æ¥å¨ä½ä¸è¿æ¿æ°æ®å¯¹æ¯ï¼å·®è·>50éæ ¸å®', 'tonsTotal', 'DIFF', '50', 'RED', 'H2032', 1, 2), ('å¨è½¬é轨迹对æ¯', 'RULE_003', '䏿¥å¨è½¬éä¸è½¨è¿¹æµç®å¨è½¬é对æ¯ï¼é«åº30%éæ ¸å®', 'turnoverTotal,trackMileage', 'RATIO', '1.3', 'RED', 'H2032', 1, 3), ('è´§è¿ç±»åç¯æ¯', 'RULE_004', '䏿æ ï¼æ¬ææ°å¢ï¼æéï¼ä¸ææï¼æ¬ææ ï¼æéï¼è´§è¿ç±»åç¯æ¯ï¼', 'freightContainer,freightCoal,freightOilGas,freightCrudeOil,freightMetalOre,freightIronOre,freightBuilding,freightGrain', 'MOM', '0', 'YELLOW', 'H2032', 1, 4), ('éè£ ç®±å¼å¸¸', 'RULE_005', 'æ éè£ ç®±è½¦ä½æéè£ ç®±è´§è¿ééæ ¸å®', 'freightContainer,vehicleContainer', 'NULL_CHECK', '0', 'RED', 'H2032', 1, 5), ('æ´è½¦å¨ä½èå´', 'RULE_006', 'æ´è½¦å¨ä½ä¸å¨4-40å¨ä¹é´', 'tonsWhole', 'OUT_RANGE', '4,40', 'YELLOW', 'H2032', 1, 6); -- ============================================ -- åãå®¡æ ¸ç»ææ¨¡å -- ============================================ DROP TABLE IF EXISTS audit_result; CREATE TABLE audit_result ( id BIGINT AUTO_INCREMENT PRIMARY KEY, rule_id BIGINT NOT NULL COMMENT 'FK -> audit_rule', report_id BIGINT NOT NULL COMMENT 'FK -> h2032_enterprise_monthly', enterprise_code VARCHAR(50) COMMENT 'ä¼ä¸ä»£ç ', report_period VARCHAR(20) COMMENT 'æ¥è¡¨æ', actual_value VARCHAR(200) COMMENT 'å®é å¼', threshold_value VARCHAR(200) COMMENT 'éå¼', deviation VARCHAR(200) COMMENT 'åå·®', status VARCHAR(20) DEFAULT 'PENDING' COMMENT 'PENDING/CONFIRMED/IGNORED', reviewer_id BIGINT COMMENT 'å®¡æ ¸äºº', review_comment TEXT COMMENT 'å®¡æ ¸æè§', reviewed_at DATETIME, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; DROP TABLE IF EXISTS audit_explanation; CREATE TABLE audit_explanation ( id BIGINT AUTO_INCREMENT PRIMARY KEY, audit_result_id BIGINT NOT NULL COMMENT 'FK -> audit_result', explanation_text TEXT COMMENT '䏿¥äººè§£é', llm_suggestion TEXT COMMENT 'LLM建议', llm_confidence DECIMAL(5,2) COMMENT '置信度', llm_status VARCHAR(20) DEFAULT 'PENDING' COMMENT 'PENDING/PROCESSED/FAILED' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- ============================================ -- äºãç³»ç»æ¥å¿ä¸å¯¼å ¥æ¹æ¬¡ -- ============================================ DROP TABLE IF EXISTS sys_operation_log; CREATE TABLE sys_operation_log ( id BIGINT AUTO_INCREMENT PRIMARY KEY, user_id BIGINT COMMENT 'æä½äºº', module VARCHAR(50) COMMENT '模å', action VARCHAR(50) COMMENT 'æä½', detail TEXT COMMENT '详æ JSON', ip_address VARCHAR(50) COMMENT 'IPå°å', created_at DATETIME DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; DROP TABLE IF EXISTS import_batch; CREATE TABLE import_batch ( id BIGINT AUTO_INCREMENT PRIMARY KEY, file_name VARCHAR(200) COMMENT 'æä»¶å', import_type VARCHAR(50) COMMENT 'H2032/TRANSPORT_AUTH/TRACK_MILEAGE/SCALE_SPLIT', report_period VARCHAR(20) COMMENT 'æ¥è¡¨æ', total_rows INT DEFAULT 0, success_rows INT DEFAULT 0, fail_rows INT DEFAULT 0, error_detail TEXT COMMENT 'é误详æ ', created_by BIGINT COMMENT 'å¯¼å ¥äºº', created_at DATETIME DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- ============================================ -- å ãLLMè±ææ å° -- ============================================ DROP TABLE IF EXISTS llm_desensitize_map; CREATE TABLE llm_desensitize_map ( id BIGINT AUTO_INCREMENT PRIMARY KEY, original_value VARCHAR(200) COMMENT 'åå§å¼', masked_value VARCHAR(200) COMMENT 'è±æå¼', mask_type VARCHAR(20) COMMENT 'ENTERPRISE/REGION', call_id VARCHAR(50) COMMENT 'è°ç¨ID' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- ============================================ -- ä¸ãé¢ç½®æ°æ® -- ============================================ -- é¢ç½®é¨é¨ï¼æ¹åçï¼ INSERT INTO sys_dept (dept_name, dept_code, dept_level) VALUES ('æ¹åç交éè¿è¾å ', '420000', 1); -- é¢ç½®è§è² INSERT INTO sys_role (role_name, role_code, role_type, role_level, is_mutex) VALUES ('ç³»ç»ç®¡çå', 'SYS_ADMIN', 'SYSTEM', 0, 1), ('å®å ¨ä¿å¯å', 'SEC_OFFICER', 'SYSTEM', 0, 1), ('å®å ¨å®¡è®¡å', 'AUDITOR', 'SYSTEM', 0, 1), ('çå ä¸å¡å', 'PROVINCE', 'BUSINESS', 1, 0); -- é¢ç½®ç®¡çåè´¦å· admin / admin123 INSERT INTO sys_user (username, password, real_name, dept_id) VALUES ('admin', '$2b$10$aqN02Pwvzzuta/66V9MpGerfUH6favtq8av3cc/gueg6lQ9E4CH8u', 'ç³»ç»ç®¡çå', 1); INSERT INTO sys_user_role (user_id, role_id) VALUES (1, 1); -- ============================================ -- å «ãå ¬è·¯æ 客è¿è¾ï¼äº¤ä¼ç»H203-1ï¼æ©å±æ¨¡å -- ============================================ DROP TABLE IF EXISTS h2031_enterprise_monthly; CREATE TABLE h2031_enterprise_monthly ( id BIGINT AUTO_INCREMENT PRIMARY KEY, report_period VARCHAR(20) NOT NULL COMMENT 'æ¥è¡¨æ 2026-06', region_code VARCHAR(20) COMMENT 'æå±å°åº', enterprise_code VARCHAR(50) COMMENT 'ä¼ä¸ä»£ç ', enterprise_name VARCHAR(200) COMMENT 'ä¼ä¸åç§°', vehicle_total INT COMMENT '客è¿è½¦è¾_æ»è®¡', seat_total INT COMMENT 'æ ¸å®è½½å®¢ä½_æ»è®¡', vehicle_schedule INT COMMENT 'è½¦è¾æ°_客è¿ç车ï¼å«å®çº¿æ 游客è¿å®¢è½¦ï¼', seat_schedule INT COMMENT 'æ ¸å®è½½å®¢ä½_客è¿ç车ï¼å«å®çº¿æ 游客è¿å®¢è½¦ï¼', vehicle_charter INT COMMENT 'è½¦è¾æ°_客è¿å 车ï¼å«éå®çº¿æ 游客è¿å®¢è½¦ï¼', seat_charter INT COMMENT 'æ ¸å®è½½å®¢ä½_客è¿å 车ï¼å«éå®çº¿æ 游客è¿å®¢è½¦ï¼', passenger_total DOUBLE COMMENT '客è¿é_æ»è®¡ï¼äººï¼', turnover_total DOUBLE COMMENT 'æ 客å¨è½¬é_æ»è®¡ï¼äººå ¬éï¼', passenger_class1 DOUBLE COMMENT '客è¿é_ä¸ç±»å®¢è¿ç线ï¼å«å®çº¿æ 游ï¼', turnover_class1 DOUBLE COMMENT 'æ 客å¨è½¬é_ä¸ç±»å®¢è¿ç线ï¼å«å®çº¿æ 游ï¼', passenger_class2 DOUBLE COMMENT '客è¿é_äºç±»å®¢è¿ç线ï¼å«å®çº¿æ 游ï¼', turnover_class2 DOUBLE COMMENT 'æ 客å¨è½¬é_äºç±»å®¢è¿ç线ï¼å«å®çº¿æ 游ï¼', passenger_class3 DOUBLE COMMENT '客è¿é_ä¸ç±»å®¢è¿ç线ï¼å«å®çº¿æ 游ï¼', turnover_class3 DOUBLE COMMENT 'æ 客å¨è½¬é_ä¸ç±»å®¢è¿ç线ï¼å«å®çº¿æ 游ï¼', passenger_class4 DOUBLE COMMENT '客è¿é_å类客è¿ç线ï¼å«å®çº¿æ 游ï¼', turnover_class4 DOUBLE COMMENT 'æ 客å¨è½¬é_å类客è¿ç线ï¼å«å®çº¿æ 游ï¼', passenger_charter DOUBLE COMMENT '客è¿é_客è¿å 车ï¼å«éå®çº¿æ 游ï¼', turnover_charter DOUBLE COMMENT 'æ 客å¨è½¬é_客è¿å 车ï¼å«éå®çº¿æ 游ï¼', avg_distance_total DOUBLE COMMENT '客è¿å¹³åè¿è·ï¼å ¬éï¼', avg_distance_class1 DOUBLE COMMENT 'ä¸ç±»å®¢è¿ç线平åè¿è·ï¼å ¬éï¼', avg_distance_class2 DOUBLE COMMENT 'äºç±»å®¢è¿ç线平åè¿è·ï¼å ¬éï¼', avg_distance_class3 DOUBLE COMMENT 'ä¸ç±»å®¢è¿ç线平åè¿è·ï¼å ¬éï¼', avg_distance_class4 DOUBLE COMMENT 'å类客è¿ç线平åè¿è·ï¼å ¬éï¼', avg_distance_charter DOUBLE COMMENT 'æ æ¸¸ãå 车平åè¿è·ï¼å ¬éï¼', verify_explanation TEXT COMMENT 'æ ¸å®æ§åå è§£é', import_batch_id BIGINT COMMENT 'å¯¼å ¥æ¹æ¬¡', created_at DATETIME DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='交ä¼ç»H203-1表_å ¬è·¯æ 客è¿è¾æåº¦ç产æ åµ'; DROP TABLE IF EXISTS passenger_auth_vehicle; CREATE TABLE passenger_auth_vehicle ( id BIGINT AUTO_INCREMENT PRIMARY KEY, report_period VARCHAR(20) COMMENT 'æ¥è¡¨æ', enterprise_code VARCHAR(50) COMMENT 'ä¼ä¸ä»£ç ', enterprise_name VARCHAR(200) COMMENT 'ä¼ä¸åç§°', vehicle_count INT DEFAULT 0 COMMENT 'è½¦è¾æ°', seat_count INT DEFAULT 0 COMMENT 'è½½å®¢ä½æ°', import_batch_id BIGINT COMMENT 'å¯¼å ¥æ¹æ¬¡', created_at DATETIME DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='å ¬è·¯æ å®¢è¿æ¿è½¦è¾æ°æ®'; -- H203-1 é¢ç½®å®¡æ ¸è§åï¼4ç»8æ¡ï¼report_type=H2031ï¼ INSERT INTO audit_rule (rule_name, rule_code, description, check_field, compare_type, threshold, alert_level, report_type, is_enabled, sort_order) VALUES ('è½¦è¾æ°è¿æ¿å¯¹æ¯(æ 客)', 'RULE_P001', '客è¿è½¦è¾æ°ä¸è¿æ¿è½¦è¾æ°å¯¹æ¯ï¼å·®è·>3å°éæ ¸å®', 'vehicleTotal', 'DIFF', '3', 'RED', 'H2031', 1, 21), ('è½½å®¢ä½æ°è¿æ¿å¯¹æ¯(æ 客)', 'RULE_P002', 'æ ¸å®è½½å®¢ä½æ°ä¸è¿æ¿è½½å®¢ä½æ°å¯¹æ¯ï¼å·®è·>50éæ ¸å®', 'seatTotal', 'DIFF', '50', 'RED', 'H2031', 1, 22), ('客è¿éç¯æ¯=0æ ¸å®', 'RULE_P003', 'ä¸ç±»/äºç±»/ä¸ç±»/åç±»/å 车客è¿éç¯æ¯ä¸ä¸ªæçäº0éæ ¸å®', 'passengerClass1,passengerClass2,passengerClass3,passengerClass4,passengerCharter', 'MOM_EQ_ZERO', '0', 'YELLOW', 'H2031', 1, 23), ('æ 客å¨è½¬éç¯æ¯=0æ ¸å®', 'RULE_P004', 'ä¸ç±»/äºç±»/ä¸ç±»/åç±»/å 车æ 客å¨è½¬éç¯æ¯ä¸ä¸ªæçäº0éæ ¸å®', 'turnoverClass1,turnoverClass2,turnoverClass3,turnoverClass4,turnoverCharter', 'MOM_EQ_ZERO', '0', 'YELLOW', 'H2031', 1, 24), ('å¹³åè¿è·ç¯æ¯è¶ ±20%æ ¸å®', 'RULE_P005', 'ä¸ç±»/äºç±»/ä¸ç±»/å类平åè¿è·ç¯æ¯ä¸ä¸ªæè¶ è¿Â±20%éæ ¸å®', 'avgDistanceClass1,avgDistanceClass2,avgDistanceClass3,avgDistanceClass4', 'MOM_PCT', '20', 'YELLOW', 'H2031', 1, 25), ('å 车平åè¿è·çäºä¸ææ ¸å®', 'RULE_P006', 'æ æ¸¸å 车平åè¿è·çäºä¸ä¸ªæéæ ¸å®', 'avgDistanceCharter', 'MOM_EQ', '0', 'YELLOW', 'H2031', 1, 26), ('æ ç线æç线客è¿éæ ¸å®', 'RULE_P007', 'æ 客è¿ç车ï¼ççº¿è½¦è¾æ°ä¸º0ï¼ä½æç线客è¿ééæ ¸å®', 'vehicleSchedule,passengerClass1,passengerClass2,passengerClass3,passengerClass4', 'EXISTENCE', '0', 'RED', 'H2031', 1, 27), ('æ å 车æå 车客è¿éæ ¸å®', 'RULE_P008', 'æ 客è¿å 车ï¼å è½¦è½¦è¾æ°ä¸º0ï¼ä½æå 车客è¿ééæ ¸å®', 'vehicleCharter,passengerCharter', 'EXISTENCE', '0', 'RED', 'H2031', 1, 28); -- ============================================ -- ä¹ãé路货è¿è½æºæ¶èï¼äº¤ä¼ç»H204ï¼æ©å±æ¨¡å -- ============================================ -- é路货è¿è½¦è¾è½æºæ¶èæ åµï¼è½¦è¾ç²åº¦å£æ¥ï¼ DROP TABLE IF EXISTS h204_vehicle_quarterly; CREATE TABLE h204_vehicle_quarterly ( id BIGINT AUTO_INCREMENT PRIMARY KEY, report_period VARCHAR(20) NOT NULL COMMENT 'æ¥è¡¨æ 2026-06ï¼å£åº¦æ«æï¼', region_code VARCHAR(20) COMMENT 'æå±å°åº', enterprise_code VARCHAR(50) COMMENT 'ä¼ä¸ä»£ç ', enterprise_name VARCHAR(200) COMMENT 'ä¼ä¸åç§°', plate_no VARCHAR(30) COMMENT '车çå·', vehicle_type_code VARCHAR(10) COMMENT '车è¾ç±»å代ç ', vehicle_type VARCHAR(50) COMMENT '车è¾ç±»åï¼ä¸æï¼', fuel_type_code VARCHAR(10) COMMENT 'çæç±»å代ç ', fuel_type VARCHAR(50) COMMENT 'çæç±»åï¼ä¸æï¼', manufacture_year INT COMMENT 'åºå年份', marked_tonnage DOUBLE COMMENT 'æ è®°å¨ä½ï¼å¨ï¼', total_mileage DOUBLE COMMENT 'æ»è¡ç¨ï¼å ¬éï¼', loaded_mileage DOUBLE COMMENT '载货éç¨ï¼å ¬éï¼', empty_mileage DOUBLE COMMENT '空驶éç¨ï¼å ¬éï¼', freight DOUBLE COMMENT 'è´§è¿éï¼å¨ï¼', turnover DOUBLE COMMENT 'è´§ç©å¨è½¬éï¼å¨å ¬éï¼', trip_count INT COMMENT 'è¶æ¬¡æ°ï¼ä¸ªï¼', fuel_unit VARCHAR(20) COMMENT 'çæ1计éåä½', fuel_consumption DOUBLE COMMENT 'çæ1æ¶èé', avg_distance DOUBLE COMMENT 'å¹³åè¿è·ï¼å ¬éï¼', avg_loaded_tonnage DOUBLE COMMENT 'å¹³å载货å¨ä½ï¼å¨ï¼', avg_trip_mileage DOUBLE COMMENT 'åè¶å¹³åéç¨ï¼å ¬éï¼', fuel_per_100km DOUBLE COMMENT 'ç¾å ¬éåè', turnover_fuel DOUBLE COMMENT 'å¨è½¬éåè', import_batch_id BIGINT COMMENT 'å¯¼å ¥æ¹æ¬¡', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, KEY idx_period_plate (report_period, plate_no), KEY idx_period_ent (report_period, enterprise_code) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='交ä¼ç»H204表_é路货è¿è½¦è¾è½æºæ¶èæ åµï¼è½¦è¾ç²åº¦ï¼'; -- é路货è¿è½è_è¿æ¿è½¦è¾ä¿¡æ¯ï¼è½¦çç²åº¦ï¼ DROP TABLE IF EXISTS h204_auth_vehicle; CREATE TABLE h204_auth_vehicle ( id BIGINT AUTO_INCREMENT PRIMARY KEY, report_period VARCHAR(20) NOT NULL COMMENT 'æ¥è¡¨æ', plate_no VARCHAR(30) NOT NULL COMMENT '车çå·', vehicle_type VARCHAR(50) COMMENT '车è¾ç±»å', fuel_type VARCHAR(50) COMMENT 'çæç±»å', marked_tonnage DOUBLE COMMENT 'æ è®°å¨ä½ï¼å¨ï¼', traction_quality DOUBLE COMMENT 'åçµå¼è´¨éï¼çµå¼è½¦æ è®°å¨ä½ï¼', import_batch_id BIGINT COMMENT 'å¯¼å ¥æ¹æ¬¡', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, KEY idx_period_plate (report_period, plate_no) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='é路货è¿è½è_è¿æ¿è½¦è¾ä¿¡æ¯ï¼è½¦çç²åº¦ï¼'; -- H204 é¢ç½®å®¡æ ¸è§åï¼4æ¡ï¼report_type=H204ï¼ INSERT INTO audit_rule (rule_name, rule_code, description, check_field, compare_type, threshold, alert_level, report_type, is_enabled, sort_order) VALUES ('车è¾ç±»åä¸è¿æ¿å¯¹æ¯', 'RULE_E001', 'è½èæç»è½¦è¾ç±»åä¸è¿æ¿è½¦è¾ä¿¡æ¯ä¸ä¸è´éæ ¸å®', 'vehicleType', 'CROSS_DIFF', '0', 'RED', 'H204', 1, 31), ('çæç±»åä¸è¿æ¿å¯¹æ¯', 'RULE_E002', 'è½èæç»çæç±»åä¸è¿æ¿è½¦è¾ä¿¡æ¯ä¸ä¸è´éæ ¸å®', 'fuelType', 'CROSS_DIFF', '0', 'RED', 'H204', 1, 32), ('æ è®°å¨ä½ä¸è¿æ¿å¯¹æ¯', 'RULE_E003', 'è½èæç»æ è®°å¨ä½ä¸è¿æ¿å¯¹æ¯ï¼å·®è·>0.05å¨éæ ¸å®ï¼çµå¼è½¦å¯¹æ¯åçµå¼è´¨éï¼', 'markedTonnage', 'CROSS_DIFF', '0.05', 'YELLOW', 'H204', 1, 33), ('è¿æ¿è½¦è¾ä¿¡æ¯ç¼ºå¤±', 'RULE_E004', 'è½èæç»è½¦çå·å¨è¿æ¿è½¦è¾ä¿¡æ¯ä¸ä¸åå¨éæ ¸å®', 'plateNo', 'EXISTENCE_AUTH', '0', 'RED', 'H204', 1, 34), ('载货éç¨å æ¯ä¸åè¶éç¨æ¯æ ¸å®', 'RULE_E005', '载货éç¨/æ»è¡ç¨ ä¸ å¹³åè¿è·/åè¶å¹³åéç¨ ç¸å·®Â±10%éæ ¸å®', 'loadedMileage,totalMileage,avgDistance,avgTripMileage', 'LOADED_RATIO_DIFF', '0.1', 'YELLOW', 'H204', 1, 35), ('ç¾å ¬éåèè¶ èå´æ ¸å®', 'RULE_E006', 'ç¾å ¬éåèå离åçæç±»åä¸ä½æ°è¶ è¿50%éæ ¸å®', 'fuelPer100km,fuelTypeCode', 'FUEL_RANGE', '0.5', 'YELLOW', 'H204', 1, 36), ('ç¾å ¬éåèç¯æ¯ååæ ¸å®', 'RULE_E007', 'åä¸è¾è½¦ç¾å ¬éåèç¯æ¯ååè¶ è¿Â±50%éæ ¸å®', 'fuelPer100km,plateNo', 'FUEL_MOM', '0.5', 'YELLOW', 'H204', 1, 37), ('è½èéä¸è´§è¿ææ¥å¯¹æ¯æ ¸å®', 'RULE_E008', 'ä¼ä¸è½èè´§è¿é/å¨è½¬éä¹å大äºè´§è¿ææ¥50%éæ ¸å®', 'freight,turnover,enterpriseName', 'FREIGHT_VS_H2032', '0.5', 'RED', 'H204', 1, 38), ('å¹³åè¿è·ä¸è´§è¿ææ¥å¯¹æ¯æ ¸å®', 'RULE_E009', '车è¾å¹³åè¿è·ä¸è´§è¿ææ¥å¹³åè¿è·ç¸å·®Â±60%éæ ¸å®', 'avgDistance,enterpriseName', 'AVG_DIST_VS_H2032', '0.6', 'YELLOW', 'H204', 1, 39), ('å¹³å载货å¨ä½ä¸æ è®°å¨ä½æ¯å¼æ ¸å®', 'RULE_E010', 'å¹³å载货å¨ä½/æ è®°å¨ä½ å°äº0.5æå¤§äº1éæ ¸å®', 'avgLoadedTonnage,markedTonnage', 'LOADED_TON_RATIO', '0.5,1', 'YELLOW', 'H204', 1, 40); -- ============================================ -- åãæèµæ¨¡åï¼å®¢è¿ç«åº/ç©æµååºï¼æ©å± -- ============================================ -- æèµé¡¹ç®ä¸»æ¡£ï¼æ 项ç®å+ç±»å« å¯ä¸ï¼ DROP TABLE IF EXISTS investment_project; CREATE TABLE investment_project ( id BIGINT AUTO_INCREMENT PRIMARY KEY, project_name VARCHAR(200) NOT NULL COMMENT '项ç®åç§°', category VARCHAR(20) NOT NULL COMMENT 'ç±»å«ï¼å®¢è¿ç«åº/ç©æµååº', city VARCHAR(50) COMMENT 'å¸å·', county VARCHAR(100) COMMENT 'å¿ï¼å¸ãåºï¼', builder_name VARCHAR(200) COMMENT 'æèµå»ºè®¾åä½', construct_nature VARCHAR(50) COMMENT '建设æ§è´¨', start_time VARCHAR(20) COMMENT 'å¼å·¥æ¶é´', end_time VARCHAR(20) COMMENT '建æ/竣工æ¶é´', total_investment DOUBLE COMMENT 'è®¡åæ»æèµï¼ä¸å ï¼', approval_gk VARCHAR(500) COMMENT '工坿¹å¤', approval_cs VARCHAR(500) COMMENT 'å设æ¹å¤', building_area DOUBLE COMMENT '建çé¢ç§¯ï¼å¹³æ¹ç±³ï¼', is_billion TINYINT DEFAULT 0 COMMENT 'äº¿å æèµé¡¹ç®æ è®°', is_county TINYINT DEFAULT 0 COMMENT 'ç»æµå¼ºå¿é¡¹ç®æ è®°', is_five_year TINYINT DEFAULT 0 COMMENT 'åäºäºéç¹ç©æµé¡¹ç®æ è®°', source VARCHAR(50) COMMENT 'æ°æ®æ¥æº', import_batch_id BIGINT COMMENT 'å¯¼å ¥æ¹æ¬¡', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, UNIQUE KEY uk_name_category (project_name, category) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='æèµé¡¹ç®ä¸»æ¡£'; -- æèµé¡¹ç®æåº¦å®ææ åµ DROP TABLE IF EXISTS investment_monthly; CREATE TABLE investment_monthly ( id BIGINT AUTO_INCREMENT PRIMARY KEY, report_period VARCHAR(20) NOT NULL COMMENT 'æ¥è¡¨æ 2026-07', project_id BIGINT NOT NULL COMMENT '项ç®ä¸»æ¡£ID', year_plan DOUBLE COMMENT 'æ¬å¹´è®¡åæèµï¼ä¸å ï¼', year_cum DOUBLE COMMENT 'èªå¹´åç´¯è®¡å®ææèµï¼ä¸å ï¼', month_done DOUBLE COMMENT 'å ¶ä¸ï¼æ¬æå®ææèµï¼ä¸å ï¼', start_cum DOUBLE COMMENT 'èªå¼å§å»ºè®¾ç´¯è®¡å®ææèµï¼ä¸å ï¼', progress_stage VARCHAR(100) COMMENT 'å»ºè®¾é¶æ®µ', progress_desc VARCHAR(2000) COMMENT '形象è¿åº¦', building_area DOUBLE COMMENT '建çé¢ç§¯ï¼å¹³æ¹ç±³ï¼', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, KEY idx_period (report_period), KEY idx_project (project_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='æèµé¡¹ç®æåº¦å®ææ åµ'; -- æèµç³»ç»æ¥è¯¢å¯¼åºï¼å®¡æ ¸æ¯å¯¹åºåï¼ DROP TABLE IF EXISTS investment_system; CREATE TABLE investment_system ( id BIGINT AUTO_INCREMENT PRIMARY KEY, report_period VARCHAR(20) NOT NULL COMMENT 'æ¥è¡¨æ 2026-07', project_name VARCHAR(200) NOT NULL COMMENT '项ç®åç§°ï¼åä½ï¼', total_investment DOUBLE COMMENT 'è®¡åæ»æèµï¼ä¸å ï¼', start_cum DOUBLE COMMENT 'èªå¼å§å»ºè®¾è³æ¬æç´¯è®¡å®ææèµï¼ä¸å ï¼', year_plan DOUBLE COMMENT 'æ¬å¹´è®¡åæèµï¼ä¸å ï¼', year_cum DOUBLE COMMENT 'èªå¹´åç´¯è®¡å®ææèµï¼ä¸å ï¼', month_done DOUBLE COMMENT '彿宿æèµï¼ä¸å ï¼', import_batch_id BIGINT COMMENT 'å¯¼å ¥æ¹æ¬¡', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, KEY idx_period (report_period) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='æèµç³»ç»æ¥è¯¢å¯¼åºï¼å®¡æ ¸æ¯å¯¹åºåï¼'; -- INVEST é¢ç½®å®¡æ ¸è§åï¼4æ¡ï¼report_type=INVESTï¼ INSERT INTO audit_rule (rule_name, rule_code, description, check_field, compare_type, threshold, alert_level, report_type, is_enabled, sort_order) VALUES ('èªå¼å§ç´¯è®¡ä¸æèµç³»ç»å¯¹æ¯', 'RULE_I001', 'èªå¼å§å»ºè®¾ç´¯è®¡å®ææèµä¸æèµç³»ç»å¯¼åºå·®å¼è¶ éå¼éæ ¸å®', 'startCum', 'CROSS_DIFF', '100|5', 'YELLOW', 'INVEST', 1, 41), ('èªå¹´åç´¯è®¡ä¸æèµç³»ç»å¯¹æ¯', 'RULE_I002', 'èªå¹´åç´¯è®¡å®ææèµä¸æèµç³»ç»å¯¼åºå·®å¼è¶ éå¼éæ ¸å®', 'yearCum', 'CROSS_DIFF', '50|5', 'YELLOW', 'INVEST', 1, 42), ('æ¬æå®æä¸æèµç³»ç»å¯¹æ¯', 'RULE_I003', 'æ¬æå®ææèµä¸æèµç³»ç»å¯¼åºå·®å¼è¶ éå¼éæ ¸å®', 'monthDone', 'CROSS_DIFF', '30|30', 'YELLOW', 'INVEST', 1, 43), ('æèµç³»ç»é¡¹ç®ç¼ºå¤±æ ¸å®', 'RULE_I004', 'æ±æ»å¤§è¡¨é¡¹ç®å¨æèµç³»ç»å¯¼åºä¸ä¸åå¨éæ ¸å®', 'projectName', 'EXISTENCE_SYS', '0', 'YELLOW', 'INVEST', 1, 44); -- ============================================ -- ä¹ãå ¬è·¯æ 客个ä½å®¢è¿é/å¨è½¬éï¼ä¼ä¸çº¿ä¸æ±æ¥ï¼ -- ============================================ DROP TABLE IF EXISTS passenger_individual_monthly; CREATE TABLE passenger_individual_monthly ( id BIGINT AUTO_INCREMENT PRIMARY KEY, report_period VARCHAR(20) COMMENT 'æ¥è¡¨æ 2026-07', region_code VARCHAR(20) COMMENT 'æå±å°åºï¼è¡æ¿åºå代ç ï¼', enterprise_code VARCHAR(50) COMMENT 'ä¼ä¸ä»£ç ', enterprise_name VARCHAR(200) COMMENT 'ä¼ä¸åç§°', passenger_count DOUBLE COMMENT 'å ¶ä¸ä¸ªä½å®¢è¿éï¼äººï¼', turnover DOUBLE COMMENT 'å ¶ä¸ä¸ªä½æ 客å¨è½¬éï¼äººå ¬éï¼', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, KEY idx_period (report_period) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='å ¬è·¯æ 客个ä½å®¢è¿é/å¨è½¬é'; -- ============================================ -- åãæ¥è¡¨æå®¡æ ¸éè¿æ è®°ï¼audit_runï¼ -- ============================================ DROP TABLE IF EXISTS audit_run; CREATE TABLE audit_run ( id BIGINT AUTO_INCREMENT PRIMARY KEY, report_type VARCHAR(50) COMMENT 'æ¥è¡¨ç±»å', report_period VARCHAR(20) COMMENT 'æ¥è¡¨æ', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, KEY idx_type_period (report_type, report_period) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='æ¥è¡¨æå®¡æ ¸éè¿æ è®°'; deploy-templates/db/sql_city_bus.sql
New file @@ -0,0 +1,59 @@ -- åå¸å®¢è¿ç¬¬1æ¥ï¼å ¬äº¤ï¼å»ºè¡¨ + å®¡æ ¸è§å -- æ°æ®æºï¼å¯¼å ¥_åå¸å ¬å ±äº¤éæåº¦è¿è¥æ åµï¼2026å¹´7æï¼.xlsï¼ä¼ä¸çº§æç»ï¼å«å ¬å ±æ±½çµè½¦/轨é/轮渡ä¸ç±»ï¼æ¬è¡¨åªåå ¬å ±æ±½çµè½¦åæ®µï¼ CREATE TABLE IF NOT EXISTS city_bus_monthly ( id BIGINT NOT NULL AUTO_INCREMENT, report_period VARCHAR(20) NOT NULL COMMENT 'æ¥è¡¨æ 2026-07', region_code VARCHAR(20) DEFAULT NULL COMMENT 'æå±å°åºä»£ç ', city VARCHAR(50) DEFAULT NULL COMMENT 'å¸å·ï¼ç±å°åºä»£ç æ å°ï¼', enterprise_code VARCHAR(50) DEFAULT NULL COMMENT 'ä¼ä¸ä»£ç ', enterprise_name VARCHAR(200) DEFAULT NULL COMMENT 'ä¼ä¸åç§°', op_vehicles DOUBLE DEFAULT NULL COMMENT 'å ¬å ±æ±½çµè½¦è¿è¥è½¦æ°', stop_total DOUBLE DEFAULT NULL COMMENT 'è¿è¥ç«ç¹æ»ä¸ªæ°', stop_city DOUBLE DEFAULT NULL COMMENT 'å ¶ä¸ï¼åå¸å è¿è¥ç«ç¹', passenger_volume DOUBLE DEFAULT NULL COMMENT 'å ¬å ±æ±½çµè½¦å®¢è¿éï¼ä¸äººæ¬¡ï¼', passenger_city DOUBLE DEFAULT NULL COMMENT 'å ¶ä¸ï¼åå¸å 客è¿éï¼ä¸äººæ¬¡ï¼', turnover DOUBLE DEFAULT NULL COMMENT 'å ¬å ±æ±½çµè½¦æ 客å¨è½¬éï¼ä¸äººå ¬éï¼', turnover_city DOUBLE DEFAULT NULL COMMENT 'å ¶ä¸ï¼åå¸å æ 客å¨è½¬éï¼ä¸äººå ¬éï¼', avg_distance DOUBLE DEFAULT NULL COMMENT 'å ¬å ±æ±½çµè½¦å¹³åè¿è·ï¼å ¬éï¼', avg_distance_city DOUBLE DEFAULT NULL COMMENT 'åå¸å å¹³åè¿è·ï¼å ¬éï¼', passenger_chengxiang DOUBLE DEFAULT NULL COMMENT 'åé å乡客è¿éï¼ä¸äººæ¬¡ï¼', turnover_chengxiang DOUBLE DEFAULT NULL COMMENT 'åé å乡æ 客å¨è½¬éï¼ä¸äººå ¬éï¼', avg_distance_chengxiang DOUBLE DEFAULT NULL COMMENT 'åé å乡平åè¿è·ï¼å ¬éï¼', rate_op_vehicles_mom DOUBLE DEFAULT NULL COMMENT 'è¿è¥è½¦æ°ç¯æ¯å¢é', rate_passenger_mom DOUBLE DEFAULT NULL COMMENT '客è¿éç¯æ¯å¢é', rate_passenger_city_mom DOUBLE DEFAULT NULL COMMENT 'åå¸å 客è¿éç¯æ¯', rate_chengxiang_mom DOUBLE DEFAULT NULL COMMENT 'åé å乡客è¿éç¯æ¯å¢é', rate_chengxiang_turnover_mom DOUBLE DEFAULT NULL COMMENT 'åé å乡æ 客å¨è½¬éç¯æ¯å¢é', rate_turnover_mom DOUBLE DEFAULT NULL COMMENT 'æ 客å¨è½¬éç¯æ¯å¢é', avg_distance_mom_change DOUBLE DEFAULT NULL COMMENT 'å¹³åè¿è·ç¯æ¯å¢åï¼å ¬éï¼', avg_distance_city_mom_change DOUBLE DEFAULT NULL COMMENT 'åå¸å å¹³åè¿è·ç¯æ¯å¢åï¼å ¬éï¼', daily_passenger_per_vehicle DOUBLE DEFAULT NULL COMMENT 'å车æ¥å客è¿é', rate_op_vehicles_yoy DOUBLE DEFAULT NULL COMMENT 'è¿è¥è½¦æ°åæ¯å¢é', rate_passenger_yoy DOUBLE DEFAULT NULL COMMENT '客è¿é忝å¢é', rate_passenger_city_yoy DOUBLE DEFAULT NULL COMMENT 'åå¸å 客è¿é忝å¢é', rate_chengxiang_yoy DOUBLE DEFAULT NULL COMMENT 'åé å乡客è¿é忝å¢é', rate_chengxiang_turnover_yoy DOUBLE DEFAULT NULL COMMENT 'åé å乡æ 客å¨è½¬é忝å¢é', rate_turnover_yoy DOUBLE DEFAULT NULL COMMENT 'æ 客å¨è½¬é忝å¢é', stop_city_ratio DOUBLE DEFAULT NULL COMMENT 'åå¸å è¿è¥ç«ç¹å æ¯', passenger_city_ratio DOUBLE DEFAULT NULL COMMENT 'åå¸å 客è¿éå æ¯', chengxiang_ratio DOUBLE DEFAULT NULL COMMENT 'åé å乡客è¿éå æ¯', contact_person VARCHAR(100) DEFAULT NULL COMMENT '填表人', contact_phone VARCHAR(50) DEFAULT NULL COMMENT 'èç³»çµè¯', report_date VARCHAR(20) DEFAULT NULL COMMENT 'æ¥åºæ¥æ', verify_explanation TEXT COMMENT 'æ ¸å®æ§åå è§£é', report_note TEXT COMMENT '䏿¥è¯´æ', modify_record TEXT COMMENT 'ä¿®æ¹è®°å½', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), KEY idx_period (report_period), KEY idx_city (city), KEY idx_enterprise (enterprise_name) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='åå¸å ¬äº¤ä¼ä¸æåº¦æ°æ®ï¼åå¸å ¬å ±äº¤éæåº¦è¿è¥æ åµï¼'; -- åå¸å ¬äº¤ 4 ç»å®¡æ ¸è§åï¼report_type=CITY_BUSï¼ INSERT IGNORE INTO audit_rule (rule_name, rule_code, description, check_field, compare_type, threshold, alert_level, report_type, is_enabled, sort_order) VALUES ('åå¸å ä¸åé å乡客è¿éè¶å¿ä¸è´æ ¸å®', 'RULE_B001', 'åå¸å 客è¿éç¯æ¯/忝ä¸åé å乡客è¿éç¯æ¯/忝è¶å¿ä¸ä¸è´ä¸å¢é>2%éæ ¸å®', 'passengerCityMom,passengerChengxiangMom,passengerCityYoy,passengerChengxiangYoy', 'TREND_CONSISTENCY', '0.02', 'YELLOW', 'CITY_BUS', 1, 51), ('客è¿é䏿 客å¨è½¬éè¶å¿ä¸è´æ ¸å®', 'RULE_B002', '客è¿é忝/ç¯æ¯ä¸æ 客å¨è½¬é忝/ç¯æ¯è¶å¿ä¸ä¸è´éæ ¸å®', 'passengerMom,turnoverMom,passengerYoy,turnoverYoy', 'TREND_CONSISTENCY', '0.02', 'YELLOW', 'CITY_BUS', 1, 52), ('åå¸å /åé å乡客è¿éå æ¯ååæ ¸å®', 'RULE_B003', 'åå¸å 客è¿éå æ¯ååé å乡客è¿éå æ¯ä¸ä¸æç¸æ¯åå>1%éæ ¸å®', 'passengerCityRatio,chengxiangRatio', 'RATIO_CHANGE', '0.01', 'YELLOW', 'CITY_BUS', 1, 53), ('å¹³åè¿è·ååå¹ åº¦æ ¸å®', 'RULE_B004', 'å¹³åè¿è·ä¸ä¸æç¸æ¯ååå¹ åº¦è¶ è¿3å ¬ééæ ¸å®ï¼ç¹å«æ¯åé å乡ï¼', 'avgDistanceMomChange,avgDistanceCityMomChange,avgDistanceChengxiang', 'AVG_DIST_CHANGE', '3', 'YELLOW', 'CITY_BUS', 1, 54); deploy-templates/db/sql_city_taxi.sql
New file @@ -0,0 +1,82 @@ -- åå¸å®¢è¿ç¬¬2æ¥ï¼å·¡æ¸¸åºç§ï¼å»ºè¡¨ + å®¡æ ¸è§å -- æ°æ®æº1ï¼å¯¼å ¥_巡游åºç§æ±½è½¦è¿è¥æå¡æ 嵿æ¥ï¼2026å¹´7æï¼.xlsï¼å¸å·çº§ï¼17è¡ï¼ -- æ°æ®æº2ï¼è¾å ¥_åºç§è½¦ä¿¡æ¯(è¿æ¿è½¦è¾ä¿¡æ¯).xlsï¼è½¦è¾çº§æç» 42636 è¡ï¼ CREATE TABLE IF NOT EXISTS city_taxi_monthly ( id BIGINT NOT NULL AUTO_INCREMENT, report_period VARCHAR(20) NOT NULL COMMENT 'æ¥è¡¨æ 2026-07', region_code VARCHAR(20) DEFAULT NULL COMMENT 'æå±å°åºä»£ç ', city VARCHAR(50) DEFAULT NULL COMMENT 'å¸å·', trip_total DOUBLE DEFAULT NULL COMMENT 'è½½å®¢è½¦æ¬¡æ»æ°', trip_city DOUBLE DEFAULT NULL COMMENT 'è½½å®¢è½¦æ¬¡æ»æ°_åå¸å ', passenger_volume DOUBLE DEFAULT NULL COMMENT '客è¿éï¼ä¸äººæ¬¡ï¼', passenger_city DOUBLE DEFAULT NULL COMMENT '客è¿é_å ¶ä¸åå¸å ', turnover DOUBLE DEFAULT NULL COMMENT 'æ 客å¨è½¬éï¼ä¸äººå ¬éï¼', turnover_city DOUBLE DEFAULT NULL COMMENT 'æ 客å¨è½¬é_åå¸å ', op_vehicles DOUBLE DEFAULT NULL COMMENT 'è¿è¥è½¦è¾æ°', avg_distance DOUBLE DEFAULT NULL COMMENT '巡游åºç§æ±½è½¦å¹³åè¿è·ï¼å ¬éï¼', avg_distance_city DOUBLE DEFAULT NULL COMMENT 'åå¸å å¹³åè¿è·ï¼å ¬éï¼', daily_trips_per_vehicle DOUBLE DEFAULT NULL COMMENT 'å车æ¥å载客车次', daily_passenger_per_vehicle DOUBLE DEFAULT NULL COMMENT 'å车æ¥å客è¿é', passengers_per_trip DOUBLE DEFAULT NULL COMMENT 'å车次载客人æ°', passengers_per_trip_city DOUBLE DEFAULT NULL COMMENT 'å车次载客人æ°_åå¸å ', passengers_per_trip_chengxiang DOUBLE DEFAULT NULL COMMENT 'å车次载客人æ°_åé å乡', rate_op_vehicles_mom DOUBLE DEFAULT NULL COMMENT 'è¿è¥è½¦æ°ç¯æ¯å¢é', rate_op_vehicles_yoy DOUBLE DEFAULT NULL COMMENT 'è¿è¥è½¦æ°åæ¯å¢é', rate_trip_mom DOUBLE DEFAULT NULL COMMENT 'è½½å®¢è½¦æ¬¡æ»æ°ç¯æ¯å¢é', rate_trip_yoy DOUBLE DEFAULT NULL COMMENT 'è½½å®¢è½¦æ¬¡åæ¯å¢é', rate_passenger_mom DOUBLE DEFAULT NULL COMMENT '客è¿éç¯æ¯å¢é', rate_passenger_yoy DOUBLE DEFAULT NULL COMMENT '客è¿é忝å¢é', avg_distance_mom_change DOUBLE DEFAULT NULL COMMENT 'å¹³åè¿è·ç¯æ¯å¢åï¼å ¬éï¼', avg_distance_city_mom_change DOUBLE DEFAULT NULL COMMENT 'å¹³åè¿è·_åå¸å ç¯æ¯å¢åï¼å ¬éï¼', rate_trip_city_mom DOUBLE DEFAULT NULL COMMENT 'è½½å®¢è½¦æ¬¡æ»æ°ç¯æ¯å¢é_åå¸å ', rate_passenger_city_mom DOUBLE DEFAULT NULL COMMENT '客è¿éç¯æ¯å¢é_åå¸å ', rate_trip_chengxiang_mom DOUBLE DEFAULT NULL COMMENT 'è½½å®¢è½¦æ¬¡æ»æ°_åé åä¹¡ç¯æ¯å¢é', rate_passenger_chengxiang_mom DOUBLE DEFAULT NULL COMMENT '客è¿é_åé åä¹¡ç¯æ¯å¢é', avg_distance_chengxiang DOUBLE DEFAULT NULL COMMENT 'å¹³åè¿è·_åé å乡ï¼å ¬éï¼', trip_city_ratio DOUBLE DEFAULT NULL COMMENT 'è½½å®¢è½¦æ¬¡æ»æ°_åå¸å å æ¯', passenger_city_ratio DOUBLE DEFAULT NULL COMMENT '客è¿é_åå¸å å æ¯', contact_person VARCHAR(100) DEFAULT NULL COMMENT '填表人', contact_phone VARCHAR(50) DEFAULT NULL COMMENT 'èç³»çµè¯', report_date VARCHAR(20) DEFAULT NULL COMMENT 'æ¥åºæ¥æ', verify_explanation TEXT COMMENT 'æ ¸å®æ§åå è§£é', report_note TEXT COMMENT '䏿¥è¯´æ', modify_record TEXT COMMENT 'ä¿®æ¹è®°å½', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), KEY idx_period (report_period), KEY idx_city (city) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='巡游åºç§æ±½è½¦è¿è¥æå¡æ 嵿æ¥ï¼å¸å·çº§ï¼'; CREATE TABLE IF NOT EXISTS city_taxi_auth ( id BIGINT NOT NULL AUTO_INCREMENT, report_period VARCHAR(20) NOT NULL COMMENT 'æ¥è¡¨æ 2026-07', city VARCHAR(50) DEFAULT NULL COMMENT 'å¸å·ï¼ç±è¯å·/æ¡£æ¡å·/å°åæåï¼', plate_no VARCHAR(30) DEFAULT NULL COMMENT '车çå·ç ', vehicle_type VARCHAR(50) DEFAULT NULL COMMENT '车è¾ç±»å', biz_type VARCHAR(50) DEFAULT NULL COMMENT 'ç»è¥ç±»å', owner_name VARCHAR(100) DEFAULT NULL COMMENT '车主åç§°', license_no VARCHAR(100) DEFAULT NULL COMMENT 'ç»è¥æå·', archive_no VARCHAR(100) DEFAULT NULL COMMENT 'æ¡£æ¡å·', road_cert_no VARCHAR(100) DEFAULT NULL COMMENT 'éè·¯è¿è¾è¯åå·', fuel_type VARCHAR(50) DEFAULT NULL COMMENT 'çæç±»å', operator_name VARCHAR(200) DEFAULT NULL COMMENT '䏿·åç§°', operator_addr VARCHAR(300) DEFAULT NULL COMMENT '䏿·å°å', op_status VARCHAR(20) DEFAULT NULL COMMENT 'è¥è¿ç¶æ', cert_status VARCHAR(20) DEFAULT NULL COMMENT 'è¯ä»¶ç¶æ', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), KEY idx_period (report_period), KEY idx_city (city), KEY idx_period_city (report_period, city) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='åºç§è½¦è¿æ¿è½¦è¾ä¿¡æ¯ï¼è½¦è¾çº§æç»ï¼'; -- åå¸å®¢è¿ç¬¬2æ¥ï¼å·¡æ¸¸åºç§ 7 ç»å®¡æ ¸è§åï¼report_type=CITY_TAXIï¼ INSERT IGNORE INTO audit_rule (rule_name, rule_code, description, check_field, compare_type, threshold, alert_level, report_type, is_enabled, sort_order) VALUES ('è¿è¥è½¦æ°ä¸è¿æ¿ç³»ç»å¯¹æ¯æ ¸å®', 'RULE_T001', 'ææ¥è¿è¥è½¦è¾æ°ä¸è¿æ¿ç³»ç»è½¦è¾æ°å·®è·>3%éæ ¸å®', 'opVehicles', 'CROSS_DIFF_PCT', '3', 'RED', 'CITY_TAXI', 1, 61), ('åå¸å ä¸åé å乡客è¿éè¶å¿ä¸è´æ ¸å®', 'RULE_T002', 'åå¸å 客è¿éç¯æ¯ä¸åé å乡客è¿éç¯æ¯è¶å¿ä¸ä¸è´ä¸å¢é>2%éæ ¸å®', 'passengerCityMom,passengerChengxiangMom', 'TREND_CONSISTENCY', '0.02', 'YELLOW', 'CITY_TAXI', 1, 62), ('客è¿é䏿 客å¨è½¬éè¶å¿ä¸è´æ ¸å®', 'RULE_T003', '客è¿éç¯æ¯ä¸æ 客å¨è½¬éç¯æ¯ï¼ç±å¹³åè¿è·æ¨å¯¼ï¼è¶å¿ä¸ä¸è´éæ ¸å®', 'passengerMom,turnoverMomDerived', 'TREND_CONSISTENCY', '0.02', 'YELLOW', 'CITY_TAXI', 1, 63), ('åå¸å 客è¿éå æ¯ååæ ¸å®', 'RULE_T004', 'åå¸å 客è¿éå æ¯ä¸ä¸æç¸æ¯åå>1%éæ ¸å®', 'passengerCityRatio', 'RATIO_CHANGE', '0.01', 'YELLOW', 'CITY_TAXI', 1, 64), ('å¹³åè¿è·ååå¹ åº¦æ ¸å®', 'RULE_T005', 'å¹³åè¿è·ä¸ä¸æç¸æ¯ååè¶ è¿3å ¬ééæ ¸å®ï¼ç¹å«æ¯åé å乡ï¼', 'avgDistanceMomChange,avgDistanceCityMomChange,avgDistanceChengxiang', 'AVG_DIST_CHANGE', '3', 'YELLOW', 'CITY_TAXI', 1, 65), ('å车次载客人æ°ç³»æ°ååæ ¸å®', 'RULE_T006', 'å车次载客人æ°=客è¿é/è½½å®¢è½¦æ¬¡æ»æ°ï¼ä¸ä¸æç¸æ¯åå>0.2éæ ¸å®', 'passengersPerTrip', 'PAX_PER_TRIP_CHANGE', '0.2', 'YELLOW', 'CITY_TAXI', 1, 66), ('è½½å®¢è½¦æ¬¡æ»æ°ä¸å®¢è¿éè¶å¿ä¸è´æ ¸å®', 'RULE_T007', 'è½½å®¢è½¦æ¬¡æ»æ°ç¯æ¯/忝ä¸å®¢è¿éç¯æ¯/忝è¶å¿ä¸ä¸è´éæ ¸å®', 'tripMom,passengerMom,tripYoy,passengerYoy', 'TREND_CONSISTENCY', '0.01', 'YELLOW', 'CITY_TAXI', 1, 67); deploy-templates/db/sql_wyc.sql
New file @@ -0,0 +1,45 @@ -- åå¸å®¢è¿ç½çº¦è½¦æåº¦è¾å ¥å»ºè¡¨ï¼2026-09-04ï¼ -- æ°æ®æº1ï¼æ¨¡æ¿_ç½çº¦è½¦æ»æ°.xlsxï¼æåº¦å ¨ç pinï¼å®¢è¿é/å ¶ä¸åå¸å /å¨è½¬é/å ¶ä¸åå¸å å¨è½¬éï¼ -- æ°æ®æº2ï¼æ¨¡æ¿_ç½çº¦è½¦è®¢ååå ¨çæ»é.xlsxï¼æåº¦è¾å ¥é¡µï¼B-E å ¨ç pin + F 订åå计 + G-W 17å¸å·è®¢åï¼ CREATE TABLE IF NOT EXISTS wyc_total_monthly ( id BIGINT NOT NULL AUTO_INCREMENT, report_period VARCHAR(20) NOT NULL COMMENT 'æ¥è¡¨æ yyyy-MM', pin_k DOUBLE DEFAULT NULL COMMENT 'å ¨çç½çº¦è½¦å®¢è¿é(ä¸äººæ¬¡)', pin_ck DOUBLE DEFAULT NULL COMMENT 'å ¶ä¸åå¸å 客è¿é', pin_z DOUBLE DEFAULT NULL COMMENT 'å ¨ç客è¿å¨è½¬é(ä¸äººå ¬é)', pin_cz DOUBLE DEFAULT NULL COMMENT 'å ¶ä¸åå¸å å¨è½¬é', created_at DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY uk_wyc_total_period (report_period) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='ç½çº¦è½¦æåº¦å ¨ç pin è¾å ¥'; CREATE TABLE IF NOT EXISTS wyc_order_monthly ( id BIGINT NOT NULL AUTO_INCREMENT, report_period VARCHAR(20) NOT NULL COMMENT 'æ¥è¡¨æ yyyy-MM', pin_k DOUBLE DEFAULT NULL, pin_ck DOUBLE DEFAULT NULL, pin_z DOUBLE DEFAULT NULL, pin_cz DOUBLE DEFAULT NULL, order_sum DOUBLE DEFAULT NULL COMMENT '订åå计ï¼åï¼', order_wuhan DOUBLE DEFAULT NULL, order_huangshi DOUBLE DEFAULT NULL, order_shiyan DOUBLE DEFAULT NULL, order_yichang DOUBLE DEFAULT NULL, order_xiangyang DOUBLE DEFAULT NULL, order_ezhou DOUBLE DEFAULT NULL, order_jingmen DOUBLE DEFAULT NULL, order_xiaogan DOUBLE DEFAULT NULL, order_jingzhou DOUBLE DEFAULT NULL, order_huanggang DOUBLE DEFAULT NULL, order_xianning DOUBLE DEFAULT NULL, order_suizhou DOUBLE DEFAULT NULL, order_enshi DOUBLE DEFAULT NULL, order_xiantao DOUBLE DEFAULT NULL, order_qianjiang DOUBLE DEFAULT NULL, order_tianmen DOUBLE DEFAULT NULL, order_shennong DOUBLE DEFAULT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (id), UNIQUE KEY uk_wyc_order_period (report_period) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='ç½çº¦è½¦è®¢ååå ¨çæ»éæåº¦è¾å ¥'; deploy-templates/frontend/nginx.conf.example
New file @@ -0,0 +1,15 @@ # å端 nginx é 置示ä¾ï¼åªæå¨ä¸æ³ç¨ãjar å åµåç«¯ãæ¶æéè¦ï¼ server { listen 8080; server_name localhost; root /opt/traffic-audit/frontend/dist; # æ¹æå®é è·¯å¾ index index.html; location /api/ { proxy_pass http://127.0.0.1:8090; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_read_timeout 300s; } location / { try_files $uri $uri/ /index.html; } } docs/¹¦ÄܲâÊÔ±¨¸æ/¹¦ÄܲâÊÔ±¨¸æ_ÃÜÔ¿Íⲿ»¯Óë´ò°üÈ¥ÃÜ_2026-09-26.md
@@ -72,3 +72,34 @@ | TC-12 | `traffic-audit-server/config/application.yml` | æ ææ | ä» æ³¨é说æï¼å¼èµ°ç¯å¢åéï¼ | éè¿ | > 说æï¼ç¯å¢åéæ¬èº«ä»æ¯æ¬æºææï¼å卿³¨å表 `HKCU\Environment`ï¼ï¼éååæºå¼åï¼åä½/ç产请ç¨é¨ç½²æºå¤é¨é ç½®æå¯é¥ç®¡çå·¥å ·ãè½®æ¢ key 仿¯æ ¹æ²»æ³é²çå¯ä¸ææ®µã ## ä¸ã第ä¸è½®ï¼2026-09-27ï¼ï¼æ¨¡æ¿å ¥åº + ä¸é®æå + æ¸ çæ§å 1. **æå 模æ¿å ¥åº**ï¼åå æå ç¨ç模æ¿ä»¶ï¼å¤é¨ `application.yml`ã`start-backend.cmd/.sh`ã`nginx.conf.example`ã`README-é¨ç½²è¯´æ.txt`ã`db` ç 4 ä¸ªå»ºè¡¨èæ¬ï¼åªå卿ªè·è¸ªçæ§é¨ç½²å ç®å½éï¼å å å³ä¸¢ãä¸ä¸å¨çæ¬åºã ç°ç»ä¸æ¬å° **`deploy-templates/`**ï¼å¯æäº¤ãå·²å ¥åºï¼ï¼`pack-deploy.ps1` æ¹ä¸ºä»è¯¥ç®å½ç»è£ ã 2. **ä¸é®æå èæ¬ `pack-deploy.ps1`**ï¼æå»º jar â **è§£åèªæ£ï¼å ä½ç¬¦æ ¡éªï¼å½ä¸çå®å¯é¥æææå£ä»¤å³ä¸æ¢ï¼** â é建å端 â ç»è£ 宿´é¨ç½²å å° `E:\è¯éª\traffic-audit-deploy-<yyyyMMdd>`ã 3. **å¯é¥æ´æ°èæ¬ `set-secrets.ps1`**ï¼äº¤äºå¼æ´æ° `DEEPSEEK_API_KEY` / `TRAFFIC_DB_PASSWORD` ç¨æ·ç¯å¢åéï¼å¼ä¸è½æä»¶ï¼ã 4. **æ¸ çæ§å **ï¼ç¨æ·ç¡®è®¤åæ§è¡ï¼ï¼ | å é¤å¯¹è±¡ | 说æ | | --- | --- | | `E:\è¯éª\traffic-audit-deploy-20260913`ï¼246 æä»¶ / 81.5 MBï¼ | æ§é¨ç½²å ç®å½ï¼å«å¸¦å¯é¥ jarï¼ | | `E:\è¯éª\traffic-audit-deploy-20260913.zip`ï¼69.9 MBï¼ | æ§å å缩件ï¼å«å¸¦å¯é¥ jarï¼ | | `deploy\traffic-audit-deploy-20260913`ï¼245 æä»¶ / 81.5 MBï¼ | ä»åºå æ§å 坿¬ | | `_deploytest`ï¼201 æä»¶ / 78.1 MBï¼ | æ§çé¨ç½²æµè¯ç®å½ | | `out`ï¼ç©ºç®å½ï¼ã`deploy`ï¼æ¸ 空åç空ç®å½ï¼ | æ ç¨ç©ºç®å½ | | `traffic-audit-server\target\*.jar`ï¼æ§ï¼ | 被 `mvn clean` è¦çä¸ºæ°æå»º | > 注ï¼è¿äºç®å½éçæä»¶å¸¦åªè¯»å±æ§ï¼`Remove-Item -Force` 被ç¯å¢çç¥æ¦æªï¼æ¹ä¸º**å æ¸ 屿§å `Remove-Item -Recurse`**ã ### 第ä¸è½®éªè¯ | ç¼å· | æ£æ¥ | ç»æ | | --- | --- | --- | | TC-13 | æ°å `E:\è¯éª\traffic-audit-deploy-20260927` | 336 æä»¶ / 95.95 MBï¼å« backend(fresh jar+模æ¿+docs)ãfrontend(dist+nginx 示ä¾)ãdbãREADME | | TC-14 | æ° jar å ç½®é ç½® | å ¨ä¸º `${...}` å ä½ç¬¦ï¼`å« sk- ææ: False` | | TC-15 | æ°å端 dist | 嫿æ°åè½ï¼`rollupTypes` / ãæå¸å·æ±æ»ãï¼ | | TC-16 | å ¨ç夿¥ï¼ä»åº + `E:\è¯éª`ï¼ | å ç½®é 置带 key ç jarï¼**æ **ï¼å缩å å« keyï¼**æ **ï¼ææ¬å« keyï¼**æ ** | | TC-17 | ä¸é®æå èæ¬å®è· | è¾åº"[2/5] å»å¯èªæ£â¦éè¿"å¹¶æåäº§åºæ°å | > å¯ä¸ä»å¸¦ææ key çå°æ¹æ¯**ç¨æ·ç¯å¢åé**ï¼è®¾è®¡å¦æ¤ï¼ä¾æ¬æºå¼åç¨ï¼ä¸**已带åºå»/æå¡å¨ä¸é£ä»½æ§ jar**ââåè éæç¬¬ 4 èè½®æ¢ key æç®å½»åºã docs/¹¤×÷ÈÕ½á/¹¤×÷ÈÕ½á_2026-09-26.md
@@ -28,6 +28,15 @@ - æ¸ çä»åºå å« key çæªè·è¸ªæä»¶ï¼`_shots/all_events.json`ï¼13 å¤ï¼ã`_dep_readme.txt`ï¼1 å¤ï¼â æ¿æ¢ä¸º `sk-REDACTED`ï¼å ¨ä»å¤æ¥æ ææï¼ - å½åæå¡å·²ç¨æ°æ¹å¼éå¯ï¼ç»å½ OK + AI åç"æ¶å°"ï¼åè½æ åå½ã ### 5. æå 模æ¿å ¥åº + ä¸é®æå + æ¸ çæ§å ï¼2026-09-27 ç»ï¼ - æ°å¢ `pack-deploy.ps1`ï¼æå»º â **jar å»å¯èªæ£** â é建å端 â ç»è£ 宿´é¨ç½²å ï¼ä¸ `set-secrets.ps1`ï¼äº¤äºå¼æ´æ°æ¬æºå¯é¥ç¯å¢åéï¼å¼ä¸è½æä»¶ï¼ï¼ - æå 模æ¿ä»¶ï¼å¤é¨ application.ymlãå¯å¨èæ¬ãnginx 示ä¾ãdb 建表 sqlãé¨ç½² READMEï¼ä»æ§å æ¬å° **`deploy-templates/`** å¹¶å ¥åºï¼åå åªå¨æªè·è¸ªçå ç®å½éï¼å å å³ä¸¢ï¼ï¼ - 已产åºå¹²åæ°å **`E:\è¯éª\traffic-audit-deploy-20260927`**ï¼336 æä»¶ / 95.95 MBï¼åç«¯å«ææ°"æå¸å·æ±æ»"åè½ï¼ï¼ - æç¨æ·ç¡®è®¤æ¸ çæ§å ï¼`E:\è¯éª\traffic-audit-deploy-20260913`ï¼ç®å½ + 69.9 MB ç zipï¼ã`deploy\traffic-audit-deploy-20260913`ã`_deploytest`ã空ç `out`/`deploy`ï¼ä»¥å被è¦ççæ§ `target` jarï¼ - å ¨ç夿¥ï¼ä»åº + E:\è¯éªï¼ï¼**å·²æ ä»»ä½å«ææ key ç jar / å缩å / ææ¬æä»¶**ï¼ - åï¼æ§å æä»¶å¸¦åªè¯»å±æ§ï¼`Remove-Item -Force` 被ç¯å¢çç¥æ¦ â æ¹ä¸ºå æ¸ å±æ§å `Remove-Item -Recurse`ã ## äºãæµè¯ç»ææè¦ - æ¥åï¼`docs/åè½æµè¯æ¥å/åè½æµè¯æ¥å_å¯é¥å¤é¨å䏿å å»å¯_2026-09-26.md`ï¼7 æ¡ç¨ä¾å ¨éè¿ï¼ã docs/´ò°ü²¿Êð˵Ã÷.md
@@ -255,6 +255,30 @@ python -c "import zipfile;print(zipfile.ZipFile('traffic-audit-server/target/traffic-audit-server-1.0.0-SNAPSHOT.jar').read('BOOT-INF/classes/application.yml').decode('utf-8'))" | Select-String "password:|api-key:" ``` ### ä¸é®æå ï¼æ¨èï¼2026-09-27 èµ·ï¼ ```powershell powershell -NoProfile -ExecutionPolicy Bypass -File pack-deploy.ps1 # å¯éåæ°ï¼ -OutRoot "E:\è¯éª" -SkipFrontend ``` èæ¬ååä»¶äºï¼ 1. `mvn clean package -DskipTests` æå»ºå端 jarï¼ 2. **è§£å jar èªæ£**ï¼æ£æ¥ `BOOT-INF/classes/application.yml` æ¯å¦å ¨ä¸ºå ä½ç¬¦ââ䏿¦åç° `sk-` æææå£ä»¤**ç´æ¥ä¸æ¢æå **ï¼ 3. `npm run build` é建å端 `dist`ï¼ 4. æ `deploy-templates/` ç»è£ 宿´é¨ç½²å ï¼backend / frontend / db / README-é¨ç½²è¯´æ.txtï¼ï¼è¾åºå° `<OutRoot>\traffic-audit-deploy-<yyyyMMdd>`ã æ¨¡æ¿ä»¶ç»ä¸æ¾å¨ **`deploy-templates/`**ï¼å·²å ¥åºï¼ï¼å¤é¨ `application.yml`ã`start-backend.cmd/.sh`ã`nginx.conf.example`ã`db\{init.sql,sql_city_bus,sql_city_taxi,sql_wyc}.sql`ã`README-é¨ç½²è¯´æ.txt`ãæ¹æ¨¡æ¿å³æ¹æå 产ç©ã ### è½®æ¢å¯é¥ååæ¥æ¬æº ```powershell powershell -NoProfile -ExecutionPolicy Bypass -File set-secrets.ps1 ``` 交äºå¼è¾å ¥ï¼åè½¦è·³è¿æä¸é¡¹ï¼ï¼èªå¨ `setx` å°ç¨æ·ç¯å¢åéå¹¶æç¤ºéå¯å端ï¼å¼ä¸ä¼åå ¥ä»»ä½æä»¶ã ### é¨ç½²æºä¸å /æ¢ DeepSeek key 1. æå ä¸ä¼ åï¼ç¼è¾ **jar å级**ç `backend/application.yml`ï¼`deepseek.api-key: "ä½ çæ°key"`ï¼ç空åé¡µé¢ AI åæä¸å¯ç¨ï¼å ¶ä½åè½æ£å¸¸ï¼ï¼ pack-deploy.ps1
New file @@ -0,0 +1,98 @@ <# ä¸é®æå é¨ç½²å ï¼å«"å»å¯èªæ£"ï¼ââ 2026-09-27 æ°å¢ ç¨æ³ï¼ powershell -NoProfile -ExecutionPolicy Bypass -File pack-deploy.ps1 powershell -NoProfile -ExecutionPolicy Bypass -File pack-deploy.ps1 -OutRoot "E:\è¯éª" -SkipFrontend ååä»¶äºï¼ 1) mvn clean package æå»ºå端 jar 2) è§£å jar æ£æ¥å ç½® application.ymlï¼å¿ é¡»å ¨æ¯å ä½ç¬¦ï¼ç¦æ¢ sk- å¯é¥ / ææå£ä»¤ï¼ï¼ä¸åæ ¼ç´æ¥ä¸æ¢ 3) npm run build æå»ºå端 distï¼å¯ -SkipFrontendï¼ 4) ç»è£ deploy ç®å½ç»æï¼backend / frontend / db / README-é¨ç½²è¯´æ.txtï¼ï¼è¾åºå° <OutRoot>\traffic-audit-deploy-<yyyyMMdd> #> param( [string]$OutRoot = 'E:\è¯éª', [switch]$SkipFrontend ) $ErrorActionPreference = 'Stop' $root = Split-Path -Parent $MyInvocation.MyCommand.Path $tplDir = Join-Path $root 'deploy-templates' # æå 模æ¿ä»¶ï¼å·²å ¥åºï¼2026-09-27 èµ·ï¼ $jarRel = 'traffic-audit-server\target\traffic-audit-server-1.0.0-SNAPSHOT.jar' $jar = Join-Path $root $jarRel Write-Host '[1/5] æå»ºå端ï¼mvn clean package -DskipTestsï¼...' Push-Location $root cmd /c "mvn.cmd -q clean package -DskipTests -f traffic-audit-server\pom.xml > pack-build.log 2>&1" $rc = $LASTEXITCODE Pop-Location if ($rc -ne 0) { throw 'å端æå»ºå¤±è´¥ï¼è¯¦è§ pack-build.log' } if (-not (Test-Path $jar)) { throw "æªæ¾å°æå»ºäº§ç©ï¼$jar" } Write-Host (" 产ç©ï¼{0:N1} MB" -f ((Get-Item $jar).Length / 1MB)) Write-Host '[2/5] å»å¯èªæ£ï¼è§£å jar æ£æ¥ BOOT-INF/classes/application.yml ...' Add-Type -AssemblyName System.IO.Compression.FileSystem $zip = [System.IO.Compression.ZipFile]::OpenRead($jar) try { $entry = $zip.Entries | Where-Object { $_.FullName -eq 'BOOT-INF/classes/application.yml' } if (-not $entry) { throw 'jar å ç¼ºå° BOOT-INF/classes/application.yml' } $sr = New-Object System.IO.StreamReader($entry.Open()) $text = $sr.ReadToEnd() $sr.Close() } finally { $zip.Dispose() } $bad = @() if ($text -match 'sk-[A-Za-z0-9]{16,}') { $bad += 'çä¼¼ææ API keyï¼sk-â¦ï¼' } foreach ($line in ($text -split "`n")) { if ($line -match '^\s*(password|api-key|secret)\s*:\s*(.+)$') { $v = $matches[2].Trim().Trim('"') if ($v -and -not $v.StartsWith('${')) { $bad += ("$($matches[1]) 䏿¯å ä½ç¬¦") } } } if ($bad.Count -gt 0) { throw ('å»å¯èªæ£æªéè¿ï¼' + ($bad -join 'ï¼') + 'ãè¯·æ£æ¥ traffic-audit-server\src\main\resources\application.yml') } Write-Host ' éè¿ï¼jar å ç½®é ç½®å ¨é¨ä¸ºå ä½ç¬¦ï¼æ ææå¯é¥/å£ä»¤ã' Write-Host '[3/5] æå»ºå端ï¼npm run buildï¼å¯ -SkipFrontend è·³è¿ï¼...' if (-not $SkipFrontend) { Push-Location (Join-Path $root 'traffic-audit-web') cmd /c "npm.cmd run build > ..\pack-front.log 2>&1" $rc2 = $LASTEXITCODE Pop-Location if ($rc2 -ne 0) { throw 'å端æå»ºå¤±è´¥ï¼è¯¦è§ pack-front.log' } Write-Host ' å端 dist å·²é建' } Write-Host '[4/5] ç»è£ é¨ç½²ç®å½...' $stamp = Get-Date -Format 'yyyyMMdd' $dest = Join-Path $OutRoot ("traffic-audit-deploy-" + $stamp) $n = 2 while (Test-Path $dest) { $dest = Join-Path $OutRoot ("traffic-audit-deploy-" + $stamp + "-" + $n); $n++ } New-Item -ItemType Directory -Force -Path (Join-Path $dest 'backend'), (Join-Path $dest 'frontend'), (Join-Path $dest 'db') | Out-Null Copy-Item $jar (Join-Path $dest 'backend') -Force Copy-Item (Join-Path $tplDir 'backend\application.yml') (Join-Path $dest 'backend') -Force Copy-Item (Join-Path $tplDir 'backend\start-backend.cmd') (Join-Path $dest 'backend') -Force Copy-Item (Join-Path $tplDir 'backend\start-backend.sh') (Join-Path $dest 'backend') -Force Copy-Item (Join-Path $root 'traffic-audit-web\dist') (Join-Path $dest 'frontend') -Recurse -Force Copy-Item (Join-Path $tplDir 'frontend\nginx.conf.example') (Join-Path $dest 'frontend') -Force Copy-Item (Join-Path $tplDir 'db\*.sql') (Join-Path $dest 'db') -Force # docsï¼è¿è¡æ¶æ¨¡æ¿ + ç¨æ·ææ¡£ï¼æé¤å¼åè¿ç¨ææ¡£ä¸ç¼å/å¤ä»½ï¼åå°ä½ç§¯ãé¿å æå 鍿¸ å带åºå»ï¼ $docsDest = Join-Path $dest 'backend\docs' New-Item -ItemType Directory -Force -Path $docsDest | Out-Null cmd /c "robocopy `"$root\docs`" `"$docsDest`" /E /NFL /NDL /NJH /NJS /NP /XD _cache 工使¥ç» åè½æµè¯æ¥å é®é¢æ±æ» /XF çæ_*.xlsx _bak_* >nul" if ($LASTEXITCODE -ge 8) { throw "docs å¤å¶å¤±è´¥ï¼robocopy è¿å $LASTEXITCODEï¼" } # db èæ¬ä¹æ¾ä¸ä»½å° docsï¼ä¸æ§å ä¸è´ï¼docs/init.sql çï¼ Copy-Item (Join-Path $tplDir 'db\init.sql'), (Join-Path $tplDir 'db\sql_city_bus.sql'), (Join-Path $tplDir 'db\sql_city_taxi.sql'), (Join-Path $tplDir 'db\sql_wyc.sql') $docsDest -Force -ErrorAction SilentlyContinue # READMEï¼ç¨æ§å 模æ¿å¹¶æ¿æ¢æ¥æå ä½ $readme = Get-Content (Join-Path $tplDir 'README-é¨ç½²è¯´æ.txt') -Raw -Encoding UTF8 $readme = $readme.Replace('{stamp}', $stamp) Set-Content -LiteralPath (Join-Path $dest 'README-é¨ç½²è¯´æ.txt') -Value $readme -Encoding UTF8 Write-Host '[5/5] æ±æ»...' $files = Get-ChildItem $dest -Recurse -File Write-Host (" è¾åºç®å½ï¼{0}" -f $dest) Write-Host (" æä»¶æ°ï¼{0}ãå计ï¼{1:N2} MB" -f $files.Count, (($files | Measure-Object Length -Sum).Sum / 1MB)) Write-Host ' æéï¼æå æ·å°é¨ç½²æºåï¼åªéæ¹ backend\application.yml éçæ°æ®åºä¸å¤ + éè¦æ¶å¡« deepseek.api-keyã' set-secrets.ps1
New file @@ -0,0 +1,31 @@ <# 设置/æ´æ°æ¬æºå¯é¥ç¯å¢åéï¼å¼ä¸è½æä»¶ï¼ââ è½®æ¢ DeepSeek key åè·è¿ä¸ª ç¨æ³ï¼powershell -NoProfile -ExecutionPolicy Bypass -File set-secrets.ps1 ï¼åè½¦è·³è¿æä¸é¡¹ï¼è¡¨ç¤ºä¸æ¹ï¼ #> $ErrorActionPreference = 'Stop' function Read-Secret([string]$prompt) { $sec = Read-Host -Prompt $prompt -AsSecureString if ($null -eq $sec) { return '' } $bstr = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($sec) try { return [Runtime.InteropServices.Marshal]::PtrToStringBSTR($bstr) } finally { [Runtime.InteropServices.Marshal]::ZeroFreeBSTR($bstr) } } foreach ($name in @('DEEPSEEK_API_KEY', 'TRAFFIC_DB_PASSWORD')) { $cur = [Environment]::GetEnvironmentVariable($name, 'User') $hint = if ($cur) { 'ï¼å·²è®¾ç½®ï¼é¿åº¦ ' + $cur.Length + 'ï¼' } else { 'ï¼å½åæªè®¾ç½®ï¼' } $val = Read-Secret ("è¾å ¥ " + $name + " " + $hint + "ï¼ç´æ¥å车跳è¿") if ([string]::IsNullOrWhiteSpace($val)) { Write-Host (" è·³è¿ " + $name); continue } & setx.exe $name $val | Out-Null if ($LASTEXITCODE -eq 0) { [Environment]::SetEnvironmentVariable($name, $val, 'Process') Write-Host (" å·²æ´æ° " + $name) } else { Write-Host (" æ´æ°å¤±è´¥ï¼" + $name) } } Write-Host '' Write-Host '宿ãçææ¹å¼ï¼æ°å¼çç»ç«¯èªå¨å¸¦ä¸ï¼ç¨ start-dev.ps1 å¯å¨ä¹ä¼èªå¨ä»æ³¨åè¡¨è½½å ¥ã' Write-Host 'ï¼è¥å端æ£å¨è¿è¡ï¼è¯·éå¯å端ï¼åæ 8090 è¿ç¨åéæ°æ§è¡ start-dev.ps1ï¼'