From ce9052f85b570d2a07a8248606551e3d5bde40e4 Mon Sep 17 00:00:00 2001 From: liangzai <2440983361@qq.com> Date: Wed, 26 Nov 2025 20:33:04 +0800 Subject: [PATCH] fix --- scripts/deploy.ps1 | 255 +++++++++++++++++++++++++++++++++++++++ scripts/deploy.sh | 221 +++++++++++++++++++++++++++++++++ scripts/init.sql | 65 ++++++++++ scripts/log-manager.sh | 154 +++++++++++++++++++++++ scripts/set_timezone.sql | 13 ++ scripts/成本价.csv | 98 +++++++++++++++ 6 files changed, 806 insertions(+) create mode 100644 scripts/deploy.ps1 create mode 100644 scripts/deploy.sh create mode 100644 scripts/init.sql create mode 100644 scripts/log-manager.sh create mode 100644 scripts/set_timezone.sql create mode 100644 scripts/成本价.csv diff --git a/scripts/deploy.ps1 b/scripts/deploy.ps1 new file mode 100644 index 0000000..5cddd3f --- /dev/null +++ b/scripts/deploy.ps1 @@ -0,0 +1,255 @@ +# TYAPI 生产环境部署脚本 (PowerShell版本) +# 使用方法: .\scripts\deploy.ps1 [版本号] + +param( + [string]$Version = "latest" +) + +# 配置 +$REGISTRY_URL = "docker-registry.tianyuanapi.com" +$IMAGE_NAME = "tyapi-server" +$APP_VERSION = $Version +$BUILD_TIME = (Get-Date -Format "yyyy-MM-ddTHH:mm:ssZ") + +try { + $GIT_COMMIT = git rev-parse --short HEAD 2>$null + if (-not $GIT_COMMIT) { $GIT_COMMIT = "dev" } +} +catch { + $GIT_COMMIT = "dev" +} + +# 颜色输出函数 +function Write-Info($message) { + Write-Host "[INFO] $message" -ForegroundColor Blue +} + +function Write-Success($message) { + Write-Host "[SUCCESS] $message" -ForegroundColor Green +} + +function Write-Warning($message) { + Write-Host "[WARNING] $message" -ForegroundColor Yellow +} + +function Write-Error($message) { + Write-Host "[ERROR] $message" -ForegroundColor Red +} + +# 检查必要工具 +function Test-Requirements { + Write-Info "检查部署环境..." + + if (-not (Get-Command docker -ErrorAction SilentlyContinue)) { + Write-Error "Docker 未安装或不在 PATH 中" + exit 1 + } + + if (-not (Get-Command docker-compose -ErrorAction SilentlyContinue)) { + Write-Error "docker-compose 未安装或不在 PATH 中" + exit 1 + } + + if (-not (Get-Command git -ErrorAction SilentlyContinue)) { + Write-Warning "Git 未安装,将使用默认提交哈希" + } + + Write-Success "环境检查通过" +} + +# 构建 Docker 镜像 +function Build-Image { + Write-Info "开始构建 Docker 镜像..." + + docker build ` + --build-arg VERSION="$APP_VERSION" ` + --build-arg COMMIT="$GIT_COMMIT" ` + --build-arg BUILD_TIME="$BUILD_TIME" ` + -t "$REGISTRY_URL/$IMAGE_NAME`:$APP_VERSION" ` + -t "$REGISTRY_URL/$IMAGE_NAME`:latest" ` + . + + if ($LASTEXITCODE -ne 0) { + Write-Error "Docker 镜像构建失败" + exit 1 + } + + Write-Success "Docker 镜像构建完成" +} + +# 推送镜像到私有仓库 +function Push-Image { + Write-Info "推送镜像到私有仓库..." + + # 推送版本标签 + docker push "$REGISTRY_URL/$IMAGE_NAME`:$APP_VERSION" + if ($LASTEXITCODE -eq 0) { + Write-Success "已推送版本标签: $APP_VERSION" + } + else { + Write-Error "推送版本标签失败" + exit 1 + } + + # 推送latest标签 + docker push "$REGISTRY_URL/$IMAGE_NAME`:latest" + if ($LASTEXITCODE -eq 0) { + Write-Success "已推送latest标签" + } + else { + Write-Error "推送latest标签失败" + exit 1 + } +} + +# 准备生产环境配置 +function Test-Config { + Write-Info "准备生产环境配置..." + + # 检查.env文件是否存在 + if (-not (Test-Path ".env")) { + if (Test-Path ".env.production") { + Write-Warning ".env文件不存在,正在复制模板..." + Copy-Item ".env.production" ".env" + Write-Warning "请编辑 .env 文件并设置正确的配置值" + exit 1 + } + else { + Write-Error "配置文件 .env 和 .env.production 都不存在" + exit 1 + } + } + + # 验证关键配置 + $envContent = Get-Content ".env" -Raw + if (-not ($envContent -match "^DB_PASSWORD=" -and -not ($envContent -match "your_secure_database_password_here"))) { + Write-Error "请在 .env 文件中设置安全的数据库密码" + exit 1 + } + + if (-not ($envContent -match "^JWT_SECRET=" -and -not ($envContent -match "your_super_secure_jwt_secret"))) { + Write-Error "请在 .env 文件中设置安全的JWT密钥" + exit 1 + } + + Write-Success "配置检查通过" +} + +# 部署到生产环境 +function Start-Deploy { + Write-Info "开始部署到生产环境..." + + # 设置版本环境变量 + $env:APP_VERSION = $APP_VERSION + + # 停止现有服务 + Write-Info "停止现有服务..." + docker-compose -f docker-compose.prod.yml down --remove-orphans + + # 清理未使用的镜像 + Write-Info "清理未使用的Docker资源..." + docker image prune -f + + # 拉取最新镜像 + Write-Info "拉取最新镜像..." + docker-compose -f docker-compose.prod.yml pull + + # 启动服务 + Write-Info "启动生产环境服务..." + docker-compose -f docker-compose.prod.yml up -d + + if ($LASTEXITCODE -ne 0) { + Write-Error "服务启动失败" + exit 1 + } + + # 等待服务启动 + Write-Info "等待服务启动..." + Start-Sleep -Seconds 30 + + # 检查服务状态 + Write-Info "检查服务状态..." + docker-compose -f docker-compose.prod.yml ps + + # 健康检查 + Write-Info "执行健康检查..." + $maxAttempts = 10 + $attempt = 0 + + while ($attempt -lt $maxAttempts) { + try { + $response = Invoke-WebRequest -Uri "http://localhost:8080/health" -TimeoutSec 5 -ErrorAction Stop + if ($response.StatusCode -eq 200) { + Write-Success "应用健康检查通过" + break + } + } + catch { + $attempt++ + Write-Info "健康检查失败,重试 $attempt/$maxAttempts..." + Start-Sleep -Seconds 10 + } + } + + if ($attempt -eq $maxAttempts) { + Write-Error "应用健康检查失败,请检查日志" + docker-compose -f docker-compose.prod.yml logs tyapi-app + exit 1 + } + + Write-Success "部署完成!" +} + +# 显示部署信息 +function Show-Info { + Write-Info "部署信息:" + Write-Host " 版本: $APP_VERSION" + Write-Host " 提交: $GIT_COMMIT" + Write-Host " 构建时间: $BUILD_TIME" + Write-Host " 镜像: $REGISTRY_URL/$IMAGE_NAME`:$APP_VERSION" + Write-Host "" + Write-Host "🌐 服务访问地址:" + Write-Host " 📱 API服务: http://localhost:8080" + Write-Host " 📚 API文档: http://localhost:8080/swagger/index.html" + Write-Host " 💚 健康检查: http://localhost:8080/health" + Write-Host "" + Write-Host "📊 监控和追踪:" + Write-Host " 📈 Grafana仪表盘: http://localhost:3000" + Write-Host " 🔍 Prometheus监控: http://localhost:9090" + Write-Host " 🔗 Jaeger链路追踪: http://localhost:16686" + Write-Host "" + Write-Host "🛠 管理工具:" + Write-Host " 🗄️ pgAdmin数据库: http://localhost:5050" + Write-Host " 📦 MinIO对象存储: http://localhost:9000" + Write-Host " 🎛️ MinIO控制台: http://localhost:9001" + Write-Host "" + Write-Host "🔧 管理命令:" + Write-Host " 查看日志: docker-compose -f docker-compose.prod.yml logs -f" + Write-Host " 停止服务: docker-compose -f docker-compose.prod.yml down" + Write-Host " 查看状态: docker-compose -f docker-compose.prod.yml ps" + Write-Host " 重启应用: docker-compose -f docker-compose.prod.yml restart tyapi-app" +} + +# 主函数 +function Main { + Write-Info "开始 TYAPI 生产环境部署..." + Write-Info "版本: $APP_VERSION" + + Test-Requirements + Test-Config + Build-Image + Push-Image + Start-Deploy + Show-Info + + Write-Success "🎉 部署成功!" +} + +# 运行主函数 +try { + Main +} +catch { + Write-Error "部署过程中发生错误: $($_.Exception.Message)" + exit 1 +} \ No newline at end of file diff --git a/scripts/deploy.sh b/scripts/deploy.sh new file mode 100644 index 0000000..4535aba --- /dev/null +++ b/scripts/deploy.sh @@ -0,0 +1,221 @@ +#!/bin/bash + +# TYAPI 生产环境部署脚本 +# 使用方法: ./scripts/deploy.sh [version] + +set -e + +# 配置 +REGISTRY_URL="docker-registry.tianyuanapi.com" +IMAGE_NAME="tyapi-server" +APP_VERSION=${1:-latest} +BUILD_TIME=$(date -u +"%Y-%m-%dT%H:%M:%SZ") +GIT_COMMIT=$(git rev-parse --short HEAD 2>/dev/null || echo 'dev') + +# 颜色输出 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# 日志函数 +log_info() { + echo -e "${BLUE}[INFO]${NC} $1" +} + +log_success() { + echo -e "${GREEN}[SUCCESS]${NC} $1" +} + +log_warning() { + echo -e "${YELLOW}[WARNING]${NC} $1" +} + +log_error() { + echo -e "${RED}[ERROR]${NC} $1" +} + +# 检查必要工具 +check_requirements() { + log_info "检查部署环境..." + + if ! command -v docker &> /dev/null; then + log_error "Docker 未安装或不在 PATH 中" + exit 1 + fi + + if ! command -v docker-compose &> /dev/null; then + log_error "docker-compose 未安装或不在 PATH 中" + exit 1 + fi + + if ! command -v git &> /dev/null; then + log_warning "Git 未安装,将使用默认提交哈希" + fi + + log_success "环境检查通过" +} + +# 构建 Docker 镜像 +build_image() { + log_info "开始构建 Docker 镜像..." + + docker build \ + --build-arg VERSION="$APP_VERSION" \ + --build-arg COMMIT="$GIT_COMMIT" \ + --build-arg BUILD_TIME="$BUILD_TIME" \ + -t "$REGISTRY_URL/$IMAGE_NAME:$APP_VERSION" \ + -t "$REGISTRY_URL/$IMAGE_NAME:latest" \ + . + + log_success "Docker 镜像构建完成" +} + +# 推送镜像到私有仓库 +push_image() { + log_info "推送镜像到私有仓库..." + + # 推送版本标签 + docker push "$REGISTRY_URL/$IMAGE_NAME:$APP_VERSION" + log_success "已推送版本标签: $APP_VERSION" + + # 推送latest标签 + docker push "$REGISTRY_URL/$IMAGE_NAME:latest" + log_success "已推送latest标签" +} + +# 准备生产环境配置 +prepare_config() { + log_info "准备生产环境配置..." + + # 检查.env文件是否存在 + if [ ! -f ".env" ]; then + if [ -f ".env.production" ]; then + log_warning ".env文件不存在,正在复制模板..." + cp .env.production .env + log_warning "请编辑 .env 文件并设置正确的配置值" + exit 1 + else + log_error "配置文件 .env 和 .env.production 都不存在" + exit 1 + fi + fi + + # 验证关键配置 + if ! grep -q "^DB_PASSWORD=" .env || grep -q "your_secure_database_password_here" .env; then + log_error "请在 .env 文件中设置安全的数据库密码" + exit 1 + fi + + if ! grep -q "^JWT_SECRET=" .env || grep -q "your_super_secure_jwt_secret" .env; then + log_error "请在 .env 文件中设置安全的JWT密钥" + exit 1 + fi + + log_success "配置检查通过" +} + +# 部署到生产环境 +deploy() { + log_info "开始部署到生产环境..." + + # 设置版本环境变量 + export APP_VERSION="$APP_VERSION" + + # 停止现有服务 + log_info "停止现有服务..." + docker-compose -f docker-compose.prod.yml down --remove-orphans + + # 清理未使用的镜像 + log_info "清理未使用的Docker资源..." + docker image prune -f + + # 拉取最新镜像 + log_info "拉取最新镜像..." + docker-compose -f docker-compose.prod.yml pull + + # 启动服务 + log_info "启动生产环境服务..." + docker-compose -f docker-compose.prod.yml up -d + + # 等待服务启动 + log_info "等待服务启动..." + sleep 30 + + # 检查服务状态 + log_info "检查服务状态..." + docker-compose -f docker-compose.prod.yml ps + + # 健康检查 + log_info "执行健康检查..." + max_attempts=10 + attempt=0 + + while [ $attempt -lt $max_attempts ]; do + if curl -f http://localhost:8080/health > /dev/null 2>&1; then + log_success "应用健康检查通过" + break + else + attempt=$((attempt + 1)) + log_info "健康检查失败,重试 $attempt/$max_attempts..." + sleep 10 + fi + done + + if [ $attempt -eq $max_attempts ]; then + log_error "应用健康检查失败,请检查日志" + docker-compose -f docker-compose.prod.yml logs tyapi-app + exit 1 + fi + + log_success "部署完成!" +} + +# 显示部署信息 +show_info() { + log_info "部署信息:" + echo " 版本: $APP_VERSION" + echo " 提交: $GIT_COMMIT" + echo " 构建时间: $BUILD_TIME" + echo " 镜像: $REGISTRY_URL/$IMAGE_NAME:$APP_VERSION" + echo "" + echo "🌐 服务访问地址:" + echo " 📱 API服务: http://localhost:8080" + echo " 📚 API文档: http://localhost:8080/swagger/index.html" + echo " 💚 健康检查: http://localhost:8080/health" + echo "" + echo "📊 监控和追踪:" + echo " 📈 Grafana仪表盘: http://localhost:3000" + echo " 🔍 Prometheus监控: http://localhost:9090" + echo " 🔗 Jaeger链路追踪: http://localhost:16686" + echo "" + echo "🛠 管理工具:" + echo " 🗄️ pgAdmin数据库: http://localhost:5050" + echo " 📦 MinIO对象存储: http://localhost:9000" + echo " 🎛️ MinIO控制台: http://localhost:9001" + echo "" + echo "🔧 管理命令:" + echo " 查看日志: docker-compose -f docker-compose.prod.yml logs -f" + echo " 停止服务: docker-compose -f docker-compose.prod.yml down" + echo " 查看状态: docker-compose -f docker-compose.prod.yml ps" + echo " 重启应用: docker-compose -f docker-compose.prod.yml restart tyapi-app" +} + +# 主函数 +main() { + log_info "开始 TYAPI 生产环境部署..." + log_info "版本: $APP_VERSION" + + check_requirements + prepare_config + build_image + push_image + deploy + show_info + + log_success "🎉 部署成功!" +} + +# 运行主函数 +main "$@" \ No newline at end of file diff --git a/scripts/init.sql b/scripts/init.sql new file mode 100644 index 0000000..82fb120 --- /dev/null +++ b/scripts/init.sql @@ -0,0 +1,65 @@ +-- TYAPI Server Database Initialization Script +-- This script runs when PostgreSQL container starts for the first time + +-- Create development database if it doesn't exist +-- Note: tyapi_dev is already created by POSTGRES_DB environment variable + +-- Create test database for running tests +-- Note: Skip database creation in init script, handle in application if needed + +-- Create production database (for reference) +-- CREATE DATABASE tyapi_prod; + +-- Connect to development database +\c tyapi_dev; + +-- Enable necessary extensions +CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; + +CREATE EXTENSION IF NOT EXISTS "pg_trgm"; + +CREATE EXTENSION IF NOT EXISTS "btree_gin"; + +-- Create schemas for better organization +CREATE SCHEMA IF NOT EXISTS public; + +CREATE SCHEMA IF NOT EXISTS logs; + +CREATE SCHEMA IF NOT EXISTS metrics; + +-- Set search path +SET search_path TO public, logs, metrics; + +-- Test database setup will be handled by application migrations +-- when needed, since we don't create it in this init script + +-- Continue with development database setup +-- (already connected to tyapi_dev) + +-- Create application-specific roles (optional) +-- CREATE ROLE tyapi_app WITH LOGIN PASSWORD 'app_password'; +-- CREATE ROLE tyapi_readonly WITH LOGIN PASSWORD 'readonly_password'; + +-- Grant permissions +-- GRANT CONNECT ON DATABASE tyapi_dev TO tyapi_app; +-- GRANT USAGE ON SCHEMA public TO tyapi_app; +-- GRANT CREATE ON SCHEMA public TO tyapi_app; + +-- Initial seed data can be added here +-- This will be replaced by proper migrations in the application + +-- Log the initialization +-- Note: pg_stat_statements extension may not be available, skip this insert + +-- Create a simple health check function +CREATE OR REPLACE FUNCTION health_check() +RETURNS json AS $$ +BEGIN + RETURN json_build_object( + 'status', 'healthy', + 'database', current_database(), + 'timestamp', now(), + 'version', version() + ); +END; +$$ LANGUAGE plpgsql; \ No newline at end of file diff --git a/scripts/log-manager.sh b/scripts/log-manager.sh new file mode 100644 index 0000000..8318ba0 --- /dev/null +++ b/scripts/log-manager.sh @@ -0,0 +1,154 @@ +#!/bin/bash + +# 日志管理脚本 +# 用于清理旧日志文件和查看日志统计信息 + +LOG_DIR="./logs" +RETENTION_DAYS=30 + +# 颜色定义 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# 打印带颜色的消息 +print_info() { + echo -e "${BLUE}[INFO]${NC} $1" +} + +print_success() { + echo -e "${GREEN}[SUCCESS]${NC} $1" +} + +print_warning() { + echo -e "${YELLOW}[WARNING]${NC} $1" +} + +print_error() { + echo -e "${RED}[ERROR]${NC} $1" +} + +# 显示帮助信息 +show_help() { + echo "日志管理脚本" + echo "" + echo "用法: $0 [命令]" + echo "" + echo "命令:" + echo " clean - 清理超过 $RETENTION_DAYS 天的旧日志文件" + echo " stats - 显示日志统计信息" + echo " size - 显示日志目录大小" + echo " list - 列出所有日志文件" + echo " help - 显示此帮助信息" + echo "" + echo "示例:" + echo " $0 clean # 清理旧日志" + echo " $0 stats # 查看统计信息" +} + +# 清理旧日志文件 +clean_old_logs() { + print_info "开始清理超过 $RETENTION_DAYS 天的旧日志文件..." + + if [ ! -d "$LOG_DIR" ]; then + print_error "日志目录 $LOG_DIR 不存在" + return 1 + fi + + # 查找并删除超过指定天数的日志文件 + find "$LOG_DIR" -name "*.log*" -type f -mtime +$RETENTION_DAYS -exec rm -f {} \; + + # 删除空的日期目录 + find "$LOG_DIR" -type d -empty -delete + + print_success "旧日志文件清理完成" +} + +# 显示日志统计信息 +show_stats() { + print_info "日志统计信息:" + echo "" + + if [ ! -d "$LOG_DIR" ]; then + print_error "日志目录 $LOG_DIR 不存在" + return 1 + fi + + # 总文件数 + total_files=$(find "$LOG_DIR" -name "*.log*" -type f | wc -l) + echo "总日志文件数: $total_files" + + # 总大小 + total_size=$(du -sh "$LOG_DIR" 2>/dev/null | cut -f1) + echo "日志目录总大小: $total_size" + + # 按日期统计 + echo "" + echo "按日期统计:" + for date_dir in "$LOG_DIR"/*/; do + if [ -d "$date_dir" ]; then + date_name=$(basename "$date_dir") + file_count=$(find "$date_dir" -name "*.log*" -type f | wc -l) + dir_size=$(du -sh "$date_dir" 2>/dev/null | cut -f1) + echo " $date_name: $file_count 个文件, $dir_size" + fi + done + + # 最近修改的文件 + echo "" + echo "最近修改的日志文件:" + find "$LOG_DIR" -name "*.log*" -type f -exec ls -lh {} \; | head -5 +} + +# 显示日志目录大小 +show_size() { + if [ ! -d "$LOG_DIR" ]; then + print_error "日志目录 $LOG_DIR 不存在" + return 1 + fi + + total_size=$(du -sh "$LOG_DIR" 2>/dev/null | cut -f1) + print_info "日志目录大小: $total_size" +} + +# 列出所有日志文件 +list_logs() { + if [ ! -d "$LOG_DIR" ]; then + print_error "日志目录 $LOG_DIR 不存在" + return 1 + fi + + print_info "所有日志文件:" + find "$LOG_DIR" -name "*.log*" -type f -exec ls -lh {} \; +} + +# 主函数 +main() { + case "$1" in + "clean") + clean_old_logs + ;; + "stats") + show_stats + ;; + "size") + show_size + ;; + "list") + list_logs + ;; + "help"|"-h"|"--help"|"") + show_help + ;; + *) + print_error "未知命令: $1" + show_help + exit 1 + ;; + esac +} + +# 执行主函数 +main "$@" \ No newline at end of file diff --git a/scripts/set_timezone.sql b/scripts/set_timezone.sql new file mode 100644 index 0000000..be76411 --- /dev/null +++ b/scripts/set_timezone.sql @@ -0,0 +1,13 @@ +-- 设置时区为北京时间 +ALTER SYSTEM SET timezone = 'Asia/Shanghai'; + +ALTER SYSTEM SET log_timezone = 'Asia/Shanghai'; + +-- 重新加载配置 +SELECT pg_reload_conf (); + +-- 验证时区设置 +SELECT name, setting +FROM pg_settings +WHERE + name IN ('timezone', 'log_timezone'); \ No newline at end of file diff --git a/scripts/成本价.csv b/scripts/成本价.csv new file mode 100644 index 0000000..4bd811d --- /dev/null +++ b/scripts/成本价.csv @@ -0,0 +1,98 @@ +产品编号,产品名称,分类,价格,数据源,数据源编号,成本价 +DWBG6A2C,司南报告服务,多维报告,10.8,安徽智查,ZCI102,2.4 +DWBG8B4D,谛听多维报告,多维报告,10.8,安徽智查,ZCI103,2.1 +FLXG2E8F,司法核验报告,风险管控,5,安徽智查,ZCI101,1.2 +FLXG5A3B,个人司法涉诉B,风险管控,2.2,安徽智查,ZCI006,0.42 +FLXG8B4D,涉赌涉诈风险评估,风险管控,1.8,安徽智查,ZCI027,0.3 +FLXG9C1D,法院信息详情高级版,风险管控,1.5,安徽智查,ZCI007,0.23 +FLXGDEA8,公安不良人员名单,风险管控,2,安徽智查,ZCI028,0.45 +FLXGDEA9,公安不良人员名单(加强版),风险管控,2.5,安徽智查,ZCI005,0.45 +IVYZ2A8B,身份二要素认证,身份验证,0.25,安徽智查,ZCI001,0.05 +IVYZ5E3F,单人婚姻状态B,身份验证,2.5,安徽智查,ZCI029,0.55 +IVYZ7C9D,人脸识别验证,身份验证,0.3,安徽智查,ZCI013,0.3 +IVYZ7F3A,学历信息查询B,身份验证,4.5,安徽智查,ZCI035,2.3 +JRZQ09J8,收入评估(社保评级),金融验证,3.5,安徽智查,ZCI031,0.83 +JRZQ1D09,3C租赁申请意向,金融验证,3,安徽智查,ZCI020,0.23 +JRZQ3C7B,借贷意向验证B,金融验证,2.5,安徽智查,ZCI017,0.33 +JRZQ4B6C,探针C风险评估,金融验证,2,安徽智查,ZCI023,0.5 +JRZQ5E9F,借选指数评估,金融验证,3,安徽智查,ZCI021,0.38 +JRZQ7F1A,全景雷达,金融验证,3.5,安徽智查,ZCI008,0.6 +JRZQ8A2D,特殊名单验证B,金融验证,2,安徽智查,ZCI018,0 +QCXG9P1C,名下车辆详版,汽车相关,3.8,安徽智查,ZCI051,1.6 +YYSY3E7F,空号检测服务,运营商验证,0.2,安徽智查,ZCI010,0.055 +YYSY4F2E,运营商三要素验证(详版),运营商验证,0.35,安徽智查,ZCI002,0.16 +YYSY6D9A,全网手机号状态验证,运营商验证,0.6,安徽智查,ZCI030,0.035 +YYSY8B1C,手机在网时长B,运营商验证,0.3,安徽智查,ZCI003,0.1 +YYSY9E4A,手机号码归属地,运营商验证,0.3,安徽智查,ZCI026,0 +FLXG0687,反赌反诈,风险管控,1.8,羽山数据,RIS031,0.3 +FLXGBC21,手机号码特别风险,风险管控,2,羽山数据,MOB032,0.1 +QCXG7A2B,名下车辆,汽车相关,2,羽山数据,CAR061,1.6 +FLXG0V3B,个人不良核验(标准版),风险管控,3,西部数据,G34BJ03,0.8 +FLXG0V4B,个人司法涉诉,风险管控,2.5,西部数据,G22SC01,0.5 +FLXG162A,团伙欺诈评估,风险管控,2.5,西部数据,G32BJ05,0.7 +FLXG3D56,特殊名单验证,金融验证,2.5,西部数据,G26BJ05,0.2 +FLXG54F5,手机号码风险,风险管控,3,西部数据,G03HZ01,0.55 +FLXG5876,易诉人识别,风险管控,2,西部数据,G03XM02,0.6 +FLXG5B2E,自然人限高信息,风险管控,2,西部数据,G36SC01,0.5 +FLXG75FE,涉网风险,风险管控,2,西部数据,FLXG75FE,0.4 +FLXG8A3F,自然人失信信息,风险管控,2,西部数据,G37SC01,0.5 +FLXG9687,电诈风险预警,风险管控,1,西部数据,G31BJ05,0.4 +FLXG970F,风险人员核验,风险管控,2,西部数据,WEST00028,0.35 +FLXGC9D1,黑灰产等级,风险管控,3,西部数据,G30BJ05,0.2 +FLXGCA3D,个人综合涉诉,风险管控,2.5,西部数据,G22BJ03,0.5 +FLXGDEC7,个人不良核验,风险管控,3,西部数据,G23BJ03,0.8 +IVYZ0B03,二要素验证(姓名、手机号),身份验证,0.3,西部数据,G17BJ02,0.29 +IVYZ1C9D,,身份验证,,西部数据,G38SC02, +IVYZ2125,活体+人像核验组件,身份验证,0.3,西部数据,IVYZ2125,0.3 +IVYZ385E,自然人生存状态标识,身份验证,1.5,西部数据,WEST00020,0.3 +IVYZ4E8B,单人婚姻状态C,身份验证,2.5,西部数据,G09GZ02, +IVYZ5733,单人婚姻状态A,身份验证,2.5,西部数据,G09GZ02,1 +IVYZ7F2A,双人婚姻状态B,身份验证,2.5,西部数据,G10GZ02,0.6 +IVYZ81NC,单人婚姻查询(登记时间版),身份验证,4.5,西部数据,G09XM02,1 +IVYZ9363,双人婚姻状态A,身份验证,2.5,西部数据,G10XM02,1 +IVYZ9A2B,学历信息查询A,身份验证,5,西部数据,G11BJ06,3 +IVYZADEE,身份证三要素比对,身份验证,0.3,西部数据,IVYZADEE,0.2 +IVYZGZ08,,身份验证,,西部数据,G08SC02, +JRZQ0A03,借贷意向验证,金融验证,2.5,西部数据,G27BJ05,0.6 +JRZQ4AA8,偿债压力指数,金融验证,3,西部数据,G29BJ05,0.6 +JRZQ8203,借贷行为验证,金融验证,3,西部数据,G28BJ05,1 +JRZQDCBE,银行卡四要素验证,金融验证,0.4,西部数据,G20GZ01,0.3 +QYGL2ACD,企业三要素核验,企业相关,0.2,西部数据,WEST00022,0.1 +QYGL45BD,企业法人四要素核验,企业相关,0.3,西部数据,WEST00021,0.25 +QYGL6F2D,人企关联,企业相关,3,西部数据,G05XM02,0.9 +QYGL8261,企业综合涉诉,企业相关,2.5,西部数据,Q03BJ03,0.5 +QYGL8271,企业司法涉诉(详版),企业相关,2.5,西部数据,Q03SC01,0.5 +QYGLB4C0,股东人企关系精准版,企业相关,3,西部数据,G05HZ01,0.6 +YYSY09CD,运营商三要素验证(简版),运营商验证,0.3,西部数据,G16BJ02,0.3 +YYSY4B21,手机在网状态,运营商验证,0.5,西部数据,G25BJ02,0.055 +YYSY4B37,手机在网时长A,运营商验证,0.3,西部数据,G02BJ02,0.2 +YYSY6F2E,运营商三要素核验(高级版),运营商验证,0.4,西部数据,G15BJ02,0.35 +YYSYD50F,二要素核验(手机号、身份证号),运营商验证,0.35,西部数据,G18BJ02,0.29 +YYSYF7DB,手机二次卡,运营商验证,0.3,西部数据,G19BJ02,0.2 +DWBG7F3A,多头借贷行业风险版,金融验证,2.5,四川星维,CDJ-1101695406546284544,0.45 +FLXG7E8F,个人司法涉诉查询,风险管控,2,四川星维,CDJ-1101695378264092672,0.36 +IVYZ3A7F,学历信息查询(学校名称版),身份验证,5,四川星维,CDJ-1104648854749245440,3 +IVYZ6G7H,单人婚姻状态(补证版),身份验证,3.5,四川星维,CDJ-1104646268587536384,0.7 +IVYZ8I9J,互联网行为推测,身份验证,1.8,四川星维,CDJ-1074522823015198720,0.6 +IVYZ9D2E,,身份验证,,四川星维,CDJ-1104648845446279168,2.2 +JRZQ0L85,个人信用分,金融验证,1.5,四川星维,CDJ-1101695364016041984,0.38 +JRZQ6F2A,借贷意向验证A,金融验证,2,四川星维,CDJ-1101695369065984000,0.25 +JRZQ8B3C,个人消费能力等级,金融验证,3,四川星维,CDJ-1101695392528920576,0.34 +JRZQ9D4E,多头借贷小时级,金融验证,2.5,四川星维,CDJ-1118085532960616448,0.4 +JRZQ9E2A,多头借贷风险信息查询,金融验证,3,四川星维,CDJ-1068350101688086528,0.6 +QYGL5F6A,名下企业关联,企业相关,2.8,四川星维,CDJ-1101695397213958144,0.44 +YYSY7D3E,携号转网查询,运营商验证,0.3,四川星维,CDJ-1100244706893164544,0.02 +YYSY8C2D,运营商三要素(新详版),运营商验证,0.35,四川星维,CDJ-1100244702166183936,0.19 +YYSY8F3A,,运营商验证,,四川星维,CDJ-1100244697766359040,0.14 +YYSY9A1B,运营商三要素验证(简版),运营商验证,0.3,四川星维,CDJ-1100244697766359040,0.14 +QYGL4B2E,,企业相关,,天眼查,TaxContravention, +QYGL5A3C,对外投资历史,企业相关,0.5,天眼查,InvestHistory,0.1 +QYGL7C1A,经营异常,企业相关,0.5,天眼查,AbnormalInfo,0.15 +QYGL7D9A,,企业相关,,天眼查,OwnTax, +QYGL8B4D,融资历史,企业相关,0.5,天眼查,FinancingHistory,0.1 +QYGL9E2F,行政处罚,企业相关,0.5,天眼查,PunishmentInfo,0.15 +QYGL23T7,企业法人四要素高级版,企业相关,0.3,阿里云,check, +YYSYBE08,二要素核验(姓名、身份证号),运营商验证,0.25,阿里云,check,0.03 +IVYZ3P9M,学历信息查询(实时版),身份验证,5,木子数据,PC0041,1.72 +COMENT01,企业风险报告(专业版),组合包,30,内部处理,, +QYGL3F8E,人企关系加强版,企业相关,10.8,内部处理,,