application.yaml 21.3 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458
# ========== 企业微信(存量 zteits-wxcp-portal 的告警发送)==========
# 随迁的 com.zteits.wxcp.* 用 @ConfigurationProperties(wechat.cp) 绑定。
# app-configs 必须存在:WxCpConfiguration.initServices() 是 @PostConstruct,
# 直接 appConfigs.stream(),为 null 会启动即 NPE。给空列表是刻意的:
# 没有凭据的环境也能启动,只是真正发告警时 getCpService() 返回 null。
# 生产/测试在此之上用环境变量覆盖(凭据不进仓库)。
wechat:
  cp:
    corp-id: ${WECHAT_CP_CORP_ID:}
    app-configs: []

spring:
  application:
    name: yudao-server
  autoconfigure:
    # 数据权限拦截器会拿 JSqlParser 解析每一条 SQL;本项目为 PageHelper 钉的是
    # JSqlParser 4.9,解析不了存量 mapper 里的 UNION ALL / DATE_FORMAT 等写法。
    # 由 parking-legacy-common 的 LegacyDataPermissionAutoConfiguration 提供
    # 「只解析 cn.iocoder.yudao.* mapper」的替代实现。详见该类注释。
    exclude: cn.iocoder.yudao.framework.datapermission.config.YudaoDataPermissionAutoConfiguration

  profiles:
    active: local

  main:
    allow-circular-references: true # 允许循环依赖,因为项目是三层架构,无法避免这个情况。

  # 存量业务参数(37 个 @Value 占位符,来自老工程各模块的 application*.properties)
  # 不引入会启动失败 "Could not resolve placeholder"
  # wvp-video.yaml:视频接入(WVP-PRO)的 sip.* / media.* / user-settings.* 配置。
  # 这些 key 名是 WVP 上游代码里写死的,只能单独放一个文件,import 不进来就启动失败。
  config:
    import: classpath:legacy-params.properties,classpath:wvp-video.yaml

  # ========== 邮件(存量 park/pay 的 MailService,发票/异常告警用)==========
  # 老工程把 spring.mail.* 写在各模块的 application.properties 里(未随迁)。
  # host 是 MailSenderAutoConfiguration 的 @ConditionalOnProperty 开关:缺 host 就没有
  # JavaMailSender Bean,而 MailService 是裸 @Autowired JavaMailSender,启动即失败。
  # username 也必须有(MailService 的 @Value 没有默认值);密码只在真正发信时用,
  # 真实密码一律走环境变量(红线:密钥不落仓)。
  mail:
    host: ${SPRING_MAIL_HOST:smtp.163.com}
    port: ${SPRING_MAIL_PORT:25}
    username: ${SPRING_MAIL_USERNAME:}
    password: ${SPRING_MAIL_PASSWORD:}

  # Servlet 配置
  servlet:
    # 文件上传相关配置项
    multipart:
      max-file-size: 16MB # 单个文件大小
      max-request-size: 32MB # 设置总上传的文件大小

  # Jackson 配置项
  jackson:
    serialization:
      write-dates-as-timestamps: true # 设置 Date 的格式,使用时间戳
      write-date-timestamps-as-nanoseconds: false # 设置不使用 nanoseconds 的格式。例如说 1611460870.401,而是直接 1611460870401
      write-durations-as-timestamps: true # 设置 Duration 的格式,使用时间戳
      fail-on-empty-beans: false # 允许序列化无属性的 Bean

  # Cache 配置项
  cache:
    type: REDIS
    redis:
      time-to-live: 1h # 设置过期时间为 1 小时

server:
  servlet:
    encoding:
      enabled: true
      charset: UTF-8 # 必须设置 UTF-8,避免 WebFlux 流式返回(AI 场景)会乱码问题
      force: true

--- #################### 接口文档配置 ####################

springdoc:
  api-docs:
    enabled: true
    path: /v3/api-docs
  swagger-ui:
    enabled: true
    path: /swagger-ui
  default-flat-param-object: true # 参见 https://doc.xiaominfo.com/docs/faq/v4/knife4j-parameterobject-flat-param 文档

knife4j:
  enable: true
  setting:
    language: zh_cn

# 工作流 Flowable 配置
flowable:
  # 1. false: 默认值,Flowable 启动时,对比数据库表中保存的版本,如果不匹配。将抛出异常
  # 2. true: 启动时会对数据库中所有表进行更新操作,如果表存在,不做处理,反之,自动创建表
  # 3. create_drop: 启动时自动创建表,关闭时自动删除表
  # 4. drop_create: 启动时,删除旧表,再创建新表
  database-schema-update: true # 设置为 false,可通过 https://github.com/flowable/flowable-sql 初始化
  db-history-used: true # flowable6 默认 true 生成信息表,无需手动设置
  check-process-definitions: false # 设置为 false,禁用 /resources/processes 自动部署 BPMN XML 流程
  history-level: audit # full:保存历史数据的最高级别,可保存全部流程相关细节,包括流程流转各节点参数

# MyBatis Plus 的配置项
mybatis-plus:
  # 上游 Mapper XML 在 mapper/ 下;停车存量 XML 只在 mybatis/mapper 与 mybatis/smapper
  # (不要把整个 mybatis/ 收进来:mybatis-plugin.xml 是 <configuration>,会被当成 Mapper 解析报错)
  mapper-locations:
    - classpath*:mapper/**/*.xml
    - classpath*:/mybatis/mapper/**/*.xml
    - classpath*:/mybatis/smapper/**/*.xml
  configuration:
    map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。
    # 以下 3 项照搬老工程 mybatis-plugin.xml 的非默认 setting,不配会改变存量行为
    cache-enabled: false
    local-cache-scope: statement # 禁用一级缓存(MyBatis 默认 SESSION)
    default-statement-timeout: 60
    use-generated-keys: true
    call-setters-on-nulls: true
    jdbc-type-for-null: 'null'
  global-config:
    db-config:
      id-type: NONE # “智能”模式,基于 IdTypeEnvironmentPostProcessor + 数据源的类型,自动适配成 AUTO、INPUT 模式。
#      id-type: AUTO # 自增 ID,适合 MySQL 等直接自增的数据库
#      id-type: INPUT # 用户输入 ID,适合 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库
#      id-type: ASSIGN_ID # 分配 ID,默认使用雪花算法。注意,Oracle、PostgreSQL、Kingbase、DB2、H2 数据库时,需要去除实体类上的 @KeySequence 注解
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
    banner: false # 关闭控制台的 Banner 打印
  type-aliases-package: ${yudao.info.base-package}.module.*.dal.dataobject,com.zteits.parking.module.*.domain
  encryptor:
    password: XDV71a+xqStEA3WH # 加解密的秘钥,可使用 https://www.imaegoo.com/2020/aes-key-generator/ 网站生成

# 存量代码分页用 PageHelper(新代码禁止使用,统一 BaseMapperX)
pagehelper:
  helper-dialect: mysql
  reasonable: true
  support-methods-arguments: true
  # 必须 true:存量 60+ 个导出端点用 pageSize=0 表达「查全部」,
  # 6.x 默认 false 会拼 LIMIT 0,导致静默导出空表
  page-size-zero: true

mybatis-plus-join:
  banner: false # 是否打印 mybatis plus join banner,默认true
  sub-table-logic: true # 全局启用副表逻辑删除,默认true。关闭后关联查询不会加副表逻辑删除
  ms-cache: true # 拦截器MappedStatement缓存,默认 true
  table-alias: t # 表别名(默认 t)
  logic-del-type: on # 副表逻辑删除条件的位置,支持 WHERE、ON,默认 ON

# Spring Data Redis 配置
spring:
  data:
    redis:
      repositories:
        enabled: false # 项目未使用到 Spring Data Redis 的 Repository,所以直接禁用,保证启动速度

# VO 转换(数据翻译)相关
easy-trans:
  is-enable-global: false # 【默认禁用,对性能确认压力大】启用全局翻译(拦截所有 SpringMVC ResponseBody 进行自动翻译 )。如果对于性能要求很高可关闭此配置,或通过 @IgnoreTrans 忽略某个接口

--- #################### 验证码相关配置 ####################

aj:
  captcha:
    jigsaw: classpath:images/jigsaw # 滑动验证,底图路径,不配置将使用默认图片;以 classpath: 开头,取 resource 目录下路径
    pic-click: classpath:images/pic-click # 滑动验证,底图路径,不配置将使用默认图片;以 classpath: 开头,取 resource 目录下路径
    cache-type: redis # 缓存 local/redis...
    cache-number: 1000 # local 缓存的阈值,达到这个值,清除缓存
    timing-clear: 180 # local定时清除过期缓存(单位秒),设置为0代表不执行
    type: blockPuzzle # 验证码类型 default 三种都实例化。blockPuzzle 滑块拼图、clickWord 文字点选、pictureWord 文本输入
    water-mark: 芋道源码 # 右下角水印文字(我的水印),可使用 https://tool.chinaz.com/tools/unicode.aspx 中文转 Unicode,Linux 可能需要转 unicode
    interference-options: 0 # 滑动干扰项(0/1/2)
    req-frequency-limit-enable: false # 接口请求次数一分钟限制是否开启 true|false
    req-get-lock-limit: 5 # 验证失败 5 次,get接口锁定
    req-get-lock-seconds: 10 # 验证失败后,锁定时间间隔
    req-get-minute-limit: 30 # get 接口一分钟内请求数限制
    req-check-minute-limit: 60 # check 接口一分钟内请求数限制
    req-verify-minute-limit: 60 # verify 接口一分钟内请求数限制

--- #################### 消息队列相关 ####################

# rocketmq 配置项,对应 RocketMQProperties 配置类
rocketmq:
  # Producer 配置项
  producer:
    group: ${spring.application.name}_PRODUCER # 生产者分组

spring:
  # Kafka 配置项,对应 KafkaProperties 配置类
  kafka:
    # Kafka Producer 配置项
    producer:
      acks: 1 # 0-不应答。1-leader 应答。all-所有 leader 和 follower 应答。
      retries: 3 # 发送失败时,重试发送的次数
      value-serializer: org.springframework.kafka.support.serializer.JsonSerializer # 消息的 value 的序列化
    # Kafka Consumer 配置项
    consumer:
      auto-offset-reset: earliest # 设置消费者分组最初的消费进度为 earliest 。可参考博客 https://blog.csdn.net/lishuangzhe7047/article/details/74530417 理解
      value-deserializer: org.springframework.kafka.support.serializer.JsonDeserializer
      properties:
        spring.json.trusted.packages: '*'
    # Kafka Consumer Listener 监听器配置
    listener:
      missing-topics-fatal: false # 消费监听接口监听的主题不存在时,默认会报错。所以通过设置为 false ,解决报错

--- #################### AI 相关配置 ####################

spring:
  ai:
    chat:
      client:
        enabled: false # 关闭 ChatClient.Builder 自动配置:它要求唯一的 ChatModel Bean,而项目会创建多个,导致 ai + report 模块同时引入时启动报错
    vectorstore: # 向量存储
      redis:
        initialize-schema: true
        index-name: knowledge_index # Redis 中向量索引的名称:用于存储和检索向量数据的索引标识符,所有相关的向量搜索操作都会基于这个索引进行
        prefix: "knowledge_segment:" # Redis 中存储向量数据的键名前缀:这个前缀会添加到每个存储在 Redis 中的向量数据键名前,每个 document 都是一个 hash 结构
      qdrant:
        initialize-schema: true
        collection-name: knowledge_segment # Qdrant 中向量集合的名称:用于存储向量数据的集合标识符,所有相关的向量操作都会在这个集合中进行
        host: 127.0.0.1
        port: 6334
      milvus:
        initialize-schema: true
        database-name: default # Milvus 中数据库的名称
        collection-name: knowledge_segment # Milvus 中集合的名称:用于存储向量数据的集合标识符,所有相关的向量操作都会在这个集合中进行
        client:
          host: 127.0.0.1
          port: 19530
    openai: # OpenAI 官方
      base-url: ${OPENAI_BASE_URL:https://api.openai.com}
      api-key: ${OPENAI_API_KEY:sk-xxxx}
    azure: # OpenAI 微软
      openai:
        endpoint: https://eastusprejade.openai.azure.com
    anthropic: # Anthropic Claude
      base-url: ${ANTHROPIC_BASE_URL:https://api.anthropic.com}
      api-key: ${ANTHROPIC_API_KEY:sk-xxxx}
    ollama:
      base-url: http://127.0.0.1:11434
      chat:
        model: llama3
    stabilityai:
      api-key: ${STABILITYAI_API_KEY:sk-xxxx}
    dashscope: # 通义千问
      api-key: ${DASHSCOPE_API_KEY:sk-xxxx}
    deepseek: # DeepSeek
      api-key: ${DEEPSEEK_API_KEY:sk-xxxx}
      chat:
        options:
          model: deepseek-v4-flash
    model:
      rerank: false # 是否开启“通义千问”的 Rerank 模型,填写 dashscope 开启
    mcp:
      server:
        enabled: false
        name: yudao-mcp-server
        version: 1.0.0
        instructions: 一个 MCP 示例服务
        sse-endpoint: /sse
      client:
        enabled: false
        name: mcp
        sse:
          connections:
            filesystem:
              url: http://127.0.0.1:8089
              sse-endpoint: /sse
        annotation-scanner:
          enabled: false # TODO @芋艿:有 bug https://github.com/spring-projects/spring-ai/issues/4917 需要官方修复

yudao:
  ai:
    gemini: # 谷歌 Gemini
      enable: true
      api-key: ${GEMINI_API_KEY:sk-xxxx}
      model: gemini-2.5-flash
    doubao: # 字节豆包
      enable: true
      api-key: ${DOUBAO_API_KEY:sk-xxxx}
      model: doubao-seed-2-1-turbo-260628
    hunyuan: # 腾讯混元
      enable: true
      api-key: ${HUNYUAN_API_KEY:sk-xxxx}
      model: hy3-preview
    siliconflow: # 硅基流动
      enable: true
      api-key: ${SILICONFLOW_API_KEY:sk-xxxx}
      model: deepseek-ai/DeepSeek-V4-Pro
    xinghuo: # 讯飞星火
      enable: true
      api-key: ${XINGHUO_API_KEY:sk-xxxx}
      model: x2-flash
    baichuan: # 百川智能
      enable: true
      api-key: ${BAICHUAN_API_KEY:sk-xxxx}
      model: Baichuan-M3
    yiyan: # 文心一言
      enable: false
      api-key: ${YIYAN_API_KEY:sk-xxxx}
      model: ernie-5.1
    zhipu: # 智谱 AI(GLM)
      enable: false
      api-key: ${ZHIPU_API_KEY:sk-xxxx}
      model: glm-5.2
    minimax: # MiniMax
      enable: false
      api-key: ${MINIMAX_API_KEY:sk-xxxx}
      model: MiniMax-M3
    moonshot: # 月之暗面(KIMI)
      enable: false
      api-key: ${MOONSHOT_API_KEY:sk-xxxx}
      model: kimi-k2.6
    stepfun: # 阶跃星辰
      enable: false
      api-key: ${STEPFUN_API_KEY:sk-xxxx}
      model: step-3.7-flash
    grok: # Grok
      enable: false
      api-key: ${GROK_API_KEY:sk-xxxx}
      model: grok-4.3
    midjourney:
      enable: true
  #    base-url: https://api.holdai.top/mj-relax/mj
      base-url: https://api.holdai.top/mj
      api-key: ${MIDJOURNEY_API_KEY:sk-xxxx}
      notify-url: http://java.nat300.top/admin-api/ai/image/midjourney/notify
    suno:
      enable: true
  #    base-url: https://suno-55ishh05u-status2xxs-projects.vercel.app
      base-url: http://127.0.0.1:3001
    web-search:
      enable: true
      api-key: ${WEB_SEARCH_API_KEY:sk-xxxx}

--- #################### 芋道相关配置 ####################

yudao:
  info:
    version: 1.0.0
    base-package: cn.iocoder.yudao
  web:
    admin-ui:
      url: http://dashboard.yudao.iocoder.cn # Admin 管理后台 UI 的地址
  xss:
    enable: false
    exclude-urls: # 如下两个 url,仅仅是为了演示,去掉配置也没关系
      - ${spring.boot.admin.context-path}/** # 不处理 Spring Boot Admin 的请求
      - ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求
  security:
    permit-all_urls:
      - /admin-api/mp/open/** # 微信公众号开放平台,微信回调接口,不需要登录
  api-encrypt:
    enable: false # 是否开启 API 加密。默认关闭,避免低版本 JDK 8(8u120 以下)启动时 bcprov 的 JCE 认证报错
    algorithm: AES # 加密算法,支持 AES、RSA 等
    request-key: 52549111389893486934626385991395 # 【AES 案例】请求加密的秘钥,,必须 16、24、32 位
    response-key: 96103715984234343991809655248883 # 【AES 案例】响应加密的秘钥,AES 案例,必须 16、24、32 位
#    request-key: MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAKWzasimcZ1icsWDPVdTXcZs1DkOWjI+m9bTQU8aOqflnomkr6QO1WWeSHBHzuJGsTlV/ZY2pFfq/NstKC94hBjx7yioYJvzb2bKN/Uy4j5nM3iCF//u0RiFkkY8j0Bt/EWoFTOb6RHf8cHIAjbYYtP3pYzbpCIwryfe0g//KIuzAgMBAAECgYADDjZrYcpZjR2xr7RbXmGtzYbyUGXwZEAqa3XaWBD51J2iSyOkAlQEDjGmxGQ3vvb4qDHHadWI+3/TKNeDXJUO+xTVJrnismK5BsHyC6dfxlIK/5BAuknryTca/3UoA1yomS9ZlF3Q0wcecaDoEnSmZEaTrp9T3itPAz4KnGjv5QJBAN5mNcfu6iJ5ktNvEdzqcxkKwbXb9Nq1SLnmTvt+d5TPX7eQ9fCwtOfVu5iBLhhZzb5PJ7pSN3Zt6rl5/jPOGv0CQQC+vETX9oe1wbxZSv6/RBGy0Xow6GndbJwvd89PcAJ2h+OJXWtg/rRHB3t9EQm7iis0XbZTapj19E4U6l8EibhvAkEA1CvYpRwmHKu1SqdM+GBnW/2qHlBwwXJvpoK02TOm674HR/4w0+YRQJfkd7LOAgcyxJuJgDTNmtt0MmzS+iNoFQJAMVSUIZ77XoDq69U/qcw7H5qaFcgmiUQr6QL9tTftCyb+LGri+MUnby96OtCLSdvkbLjIDS8GvKYhA7vSM2RDNQJBAKGyVVnFFIrbK3yuwW71yvxQEGoGxlgvZSezZ4vGgqTxrr9HvAtvWLwR6rpe6ybR/x8uUtoW7NRBWgpiIFwjvY4= # 【RSA 案例】请求解密的私钥
#    response-key: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDh/CHyBcS/zEfVyINVA7+c9Xxl0CPdxPMK1OIjxaLy/7BLfbkoEpI8onQtjuzfpuxCraDem9bu3BMF0pMH95HytI3Vi0kGjaV+WLIalwgc2w37oA2sbsmKzQOP7SDLO5s2QJNAD7kVwd+Q5rqaLu2MO0xVv+0IUJhn83hClC0L5wIDAQAB # 【RSA 案例】响应加密的公钥
  websocket:
    enable: true # websocket的开关
    path: /infra/ws # 路径
    sender-type: local # 消息发送的类型,可选值为 local、redis、rocketmq、kafka、rabbitmq
    sender-rocketmq:
      topic: ${spring.application.name}-websocket # 消息发送的 RocketMQ Topic
      consumer-group: ${spring.application.name}-websocket-consumer # 消息发送的 RocketMQ Consumer Group
    sender-rabbitmq:
      exchange: ${spring.application.name}-websocket-exchange # 消息发送的 RabbitMQ Exchange
      queue: ${spring.application.name}-websocket-queue # 消息发送的 RabbitMQ Queue
    sender-kafka:
      topic: ${spring.application.name}-websocket # 消息发送的 Kafka Topic
      consumer-group: ${spring.application.name}-websocket-consumer # 消息发送的 Kafka Consumer Group
  swagger:
    title: 芋道快速开发平台
    description: 提供管理后台、用户 App 的所有功能
    version: ${yudao.info.version}
    url: ${yudao.web.admin-ui.url}
    email: xingyu4j@vip.qq.com
    license: MIT
    license-url: https://gitee.com/zhijiantianya/ruoyi-vue-pro/blob/master/LICENSE
  codegen:
    base-package: ${yudao.info.base-package}
    db-schemas: ${spring.datasource.dynamic.datasource.master.name}
    front-type: 20 # 前端模版的类型,参见 CodegenFrontTypeEnum 枚举类
    vo-type: 10 # VO 的类型,参见 CodegenVOTypeEnum 枚举类
    delete-batch-enable: true # 是否生成批量删除接口
    unit-test-enable: false # 是否生成单元测试
    import-enable: false # 是否生成 Excel 导入接口
  tenant: # 多租户相关配置项
    enable: true
    ignore-urls:
      - /jmreport/* # 积木报表,无法携带租户编号
      - /open-api/** # 下级平台数据接入,签名鉴权,不带租户编号
    ignore-visit-urls:
      - /admin-api/system/user/profile/**
      - /admin-api/system/auth/**
    ignore-tables:
    ignore-caches:
      - user_role_ids
      - permission_menu_ids
      - oauth_client
      - notify_template
      - mail_account
      - mail_template
      - sms_template
      - iot:device
      - iot:thing_model_list
  sms-code: # 短信验证码相关的配置项
    expire-times: 10m
    send-frequency: 1m
    send-maximum-quantity-per-day: 10
    begin-code: 9999 # 这里配置 9999 的原因是,测试方便。
    end-code: 9999 # 这里配置 9999 的原因是,测试方便。
  trade:
    order:
      pay-expire-time: 2h # 支付的过期时间
      receive-expire-time: 14d # 收货的过期时间
      comment-expire-time: 7d # 评论的过期时间
      status-sync-to-wxa-enable: true # 是否同步订单状态到微信小程序
    express:
      client: kd_100
      kd-niao:
        api-key: cb022f1e-48f1-4c4a-a723-9001ac9676b8
        business-id: 1809751
        request-type: 1002 # 免费版 1002;付费版 8001
      kd100:
        key: pLXUGAwK5305
        customer: E77DF18BE109F454A5CD319E44BF5177
  # IoT 物联网模块已关闭(见根 pom 与 yudao-server/pom.xml),以下配置暂不生效。
  # 重新开启 IoT 时取消注释,并部署 TDengine / IoTDB 供时序存储使用。
#  iot:
#    message-bus:
#      type: redis # 消息总线的类型
#    storage:
#      type: tdengine # 时序存储的类型:tdengine、iotdb,需要配置同名的 spring.datasource.dynamic.datasource 数据源

debug: false

# ========== 停车存量业务配置 ==========
parking:
  # 刷新缓存共享密钥(存量 RefreshCacheController 的 @Value,无默认值)。
  # 默认空 ⇒ fail-closed(一律回 token 不正确),本地/生产用环境变量配。
  refresh-cache:
    token: ${REFRESH_CACHE_TOKEN:}
  # 存量 @Scheduled 定时任务总开关(11 个类,见 MIGRATION.md §7.5)。
  # 默认 false:新老服务同时在线时,只有老服务跑定时任务,避免同一份数据被处理两遍
  # (地磁进出场、出场延迟队列、太极/西城上报、欠费催缴短信)。
  # 正式切换(停老服务、只保留新服务)时置 true。
  legacy:
    scheduler:
      enabled: ${PARKING_LEGACY_SCHEDULER_ENABLED:false}
  # 视频接入(WVP-PRO / GB-T 28181)总开关。false 时整个 parking-module-video 不装配:
  # 不占 SIP 端口、不扫 wvp_* 表、不注册 /api/** 安全链。具体参数见 wvp-video.yaml
  video:
    enabled: ${PARKING_VIDEO_ENABLED:true}
  # 下级平台数据接入(/open-api/dsp/v1/**)
  dsp:
    # 只有前面确实有自己控制的反向代理时才置 true,否则 X-Forwarded-For 可被伪造,
    # 会让 IP 白名单与按 IP 封禁失效
    trust-forwarded-for: ${PARKING_DSP_TRUST_FORWARDED_FOR:false}