server:
  port: 8091
# 应用时区配置
app:
  timezone: Asia/Shanghai
  scheduler:
    start: true
  # yihangyi 目录轮询 ASR（YihangyiVllmAsrScheduler）：仅当 asr.enabled=true 时才会创建 Bean 并输出日志；与下文根节点 asr.* 不是同一套配置
  audio:
    upload:
      yihangyi:
        asr:
          enabled: true

# hxrd 后台订单列表（LBAdminPullScheduler：每 50 分钟一次，仅工作日 18:10～23:59:59 执行，周末不跑）。默认关闭。
hxr:
  admin:
    enabled: true
    # 未支付订单定时同步写入 lb_order_row 的租户 id（LBAdminPullScheduler#pullOrdersForUnPay）
    sync-tenant-id: "TENANT_ID_CST_2026"
    # 首次拉单延迟（毫秒），0 表示启动后尽快执行；集成测试会设为较大值避免与用例并发
    pull-initial-delay-ms: 0
    cookie: PHPSID=f3710baf6381da418aa832660ccb9d08
    phpsid: "f3710baf6381da418aa832660ccb9d08"
    # 货品同步 /api/order/goods（LbGoodsController#sync-from-hxr）
    goods-api-token: "75d9a643-ea07-4f0a-afff-2f8bbcd3f3f2"
    goods-api-app-str: "ssniQQ3UP2Vr8mXwaugssgaOLzQo0cX5"
    goods-api-origin: "https://hxrdweb.hxrdsm.cn"
    goods-api-referer: "https://hxrdweb.hxrdsm.cn/"
# DashScope API配置
dashscope:
  api:
    key: ${DASHSCOPE_API_KEY}

# AI 问答 - 本地 OpenAI 兼容 Chat Completions（无 Authorization）
ai:
  qa:
    local:
      chat-url: http://192.168.1.44:8000/v1/chat/completions
      default-model: Qwen2.5-7B-Instruct
      # 模型总上下文（与推理服务一致）；勿与 max-tokens、min-output-tokens 混用同一数值
      context-length: 16384
      # 单次补全上限。过小（如 512）会导致课堂纪要等 JSON 总结被截断、字段残缺或不准；建议 2048～4096（须保证 input+max_tokens 不超过 context-length）
      max-tokens: 2048
      min-output-tokens: 128

langchain4j:
  open-ai:
    chat-model:
      base-url: https://dashscope.aliyuncs.com/compatible-mode/v1
      api-key: ${DASHSCOPE_API_KEY}
      model-name: qwen-plus
      log-requests: true
      log-responses: true
    streaming-chat-model:
      base-url: https://dashscope.aliyuncs.com/compatible-mode/v1
      api-key: ${DASHSCOPE_API_KEY}
      model-name: qwen-plus
      log-requests: true
      log-responses: true
    embedding-model:
      base-url: https://dashscope.aliyuncs.com/compatible-mode/v1
      api-key: ${DASHSCOPE_API_KEY}
      model-name: text-embedding-v3
      log-requests: true
      log-responses: true
      max-segments-per-batch: 10
      # 禁用启动时的连接测试
      enabled: true
  #  redis 向量数据库
  community:
    redis:
      host: 101.43.230.106
      port: 6388

logging:
  level:
    dev.langchain4j: DEBUG
    dev.langchain4j.http.client.log: ERROR
    dev.langchain4j.internal.RetryUtils: ERROR
    # MyBatis Plus SQL日志
    com.baomidou.mybatisplus: DEBUG
    # MyBatis SQL日志 - 设置为TRACE以输出SQL执行结果
    com.rj.mapper: TRACE
    # 数据库连接池日志
#    com.zaxxer.hikari: DEBUG
    # Spring JDBC日志 - 设置为TRACE以输出结果集数据
    org.springframework.jdbc: TRACE
    org.springframework.jdbc.core: TRACE
    org.springframework.jdbc.core.JdbcTemplate: TRACE
    org.springframework.jdbc.core.StatementCreatorUtils: TRACE
    # 显示SQL参数
    com.baomidou.mybatisplus.core.executor: DEBUG
    # 显示SQL执行时间
    com.baomidou.mybatisplus.core.toolkit: DEBUG
    # MyBatis核心日志 - 输出SQL执行结果
    org.apache.ibatis: TRACE
    org.apache.ibatis.executor: TRACE
    org.apache.ibatis.executor.resultset: TRACE
    # JDBC驱动日志 - 输出结果集
    jdbc.sqlonly: DEBUG
    jdbc.sqltiming: DEBUG
    jdbc.resultset: TRACE
    jdbc.resultsettable: TRACE


spring:
  # 可选加载本地钉钉配置（见 application-local-dingtalk.example.yml，实际文件已 .gitignore）
  config:
    import: optional:classpath:application-local-dingtalk.yml
  autoconfigure:
    exclude:
      - dev.langchain4j.community.store.embedding.redis.spring.RedisEmbeddingStoreAutoConfiguration
  # 默认定时任务线程池为 1：长时间阻塞的 @Scheduled（如 ASR HTTP）会卡住其余全部调度任务
  task:
    scheduling:
      pool:
        size: 8
      thread-name-prefix: app-scheduling-
#  data:
#    redis:
#      port: 6389
#      host: 124.221.59.58
#      password: qwe123
#      database: 0
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    # tcpKeepAlive：TCP 层定期发保活包，降低 NAT/防火墙 idle 断连（常见约 15 分钟）概率
    url: jdbc:mysql://101.35.52.237:13319/ai_smart_ee?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true&tcpKeepAlive=true&socketTimeout=60000&connectTimeout=30000&autoReconnect=true&failOverReadOnly=false&maxReconnects=3&initialTimeout=2
#    url: jdbc:mysql://192.168.1.44:3309/ai_smart_ee?useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&tcpKeepAlive=true&autoReconnect=true&failOverReadOnly=false&maxReconnects=3&initialTimeout=2&connectTimeout=30000&socketTimeout=60000
    username: root
    password: cstcom.123!
#    password: ChangAndb.123!
    hikari:
      # 连接池大小配置
      maximumPoolSize: 10
      minimumIdle: 5
      # 连接超时配置（毫秒）
      connectionTimeout: 30000  # 获取连接的超时时间，30秒
      validationTimeout: 5000  # 连接验证的超时时间，5秒
      # 连接生命周期（毫秒）：须同时满足 (1) < MySQL wait_timeout (2) 常小于云 NAT/防火墙 idle 断连（约 15 分钟）
      idleTimeout: 180000  # 3 分钟，池中空闲连接提前回收，避免持有可能已被中间设备掐断的 socket
      maxLifetime: 600000  # 10 分钟，小于常见 15 分钟断连窗口，并远小于典型 wait_timeout(8h)，由池主动换连接
      # 连接验证配置
      connectionTestQuery: "SELECT 1"
      # 连接泄漏检测（毫秒）：仅“借用超过该时长”会打 WARN，批量导入等长事务易误报；0=关闭检测
      leakDetectionThreshold: 180000  # 3 分钟，降低远程库大批量 insert 的误报；排查真泄漏时可改回 60000
      # 池中连接定期 JDBC 探活，须小于 maxLifetime；1 分钟可对抗长时间无 SQL 导致的“假空闲”断链
      keepaliveTime: 60000
      # 连接池名称（便于监控和调试）
      poolName: HikariPool-Main
      # 连接初始化配置
      initializationFailTimeout: 1  # 初始化失败时立即失败，不等待
      # 是否允许连接池自动提交
      autoCommit: true
      # 连接注册JMX（可选，用于监控）
      registerMbeans: false
  output:
    ansi:
      enabled: always
  # 文件上传配置
  servlet:
    multipart:
      # 单个文件最大大小（50MB）
      max-file-size: 50MB
      # 总上传大小限制（100MB）
      max-request-size: 100MB
      # 文件写入磁盘的阈值（1MB）
      file-size-threshold: 1MB
      # 是否延迟文件解析
      resolve-lazily: false


  main:
    allow-bean-definition-overriding: true
  mybatis:
  configuration:
    # 开启SQL日志 - 这是最重要的配置
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    # 开启驼峰命名转换
    map-underscore-to-camel-case: true
    # 开启自动生成主键
    use-generated-keys: true
    # 开启日志前缀
    log-prefix: "MyBatis SQL: "
  # MyBatis Plus 全局配置
  global-config:
    db-config:
      # 主键类型
      id-type: ASSIGN_UUID
      # 逻辑删除配置
      logic-delete-field: deleted
      logic-delete-value: 1
      logic-not-delete-value: 0
  jackson:
    deserialization:
      # 忽略不能解析的字段。当前端传过来的字段，后端不能解析时直接抛弃。
      fail-on-unknown-properties: false


knife4j:
  # 开启增强模式
  enable: true
  # 开启生产环境屏蔽
  production: false
  # 基础配置
  basic:
    enable: true
    username: admin
    password: 123456

# 阿里云配置
aliyun:
  # 阿里云API Key - 请替换为您的实际API Key
  api-key: ${DASHSCOPE_API_KEY:your-api-key-here}
  # 阿里云区域
  region: cn-beijing
  # 是否启用阿里云服务
  enabled: true
  # API超时配置
  api:
    # 连接超时时间（毫秒）
    connect-timeout: 60000
    # 读取超时时间（毫秒）
    read-timeout: 300000
    # 最大重试次数
    max-retries: 5
    # 重试延迟时间（毫秒）
    retry-delay: 3000
    # URL访问测试超时（毫秒）
    url-test-timeout: 10000

# ASR语音识别配置
asr:
  # 是否启用ASR服务
  enabled: true
  # 默认ASR模型
  default-model: paraformer-v2
  # 请求超时时间（毫秒）
  timeout: 60000
  # 是否启用标点符号
  enable-punctuation: true
  # 是否启用数字转换
  enable-number-conversion: true
  # 是否启用说话人分离
  enable-speaker-diarization: false
  # 默认说话人数量
  default-speaker-count: 1
  # 默认音频格式
  default-format: wav
  # 默认采样率
  default-sample-rate: 16000
  # OpenAI 兼容 ASR（如 vLLM 部署的 Qwen3-ASR，POST /v1/audio/transcriptions）
  # 接口 /transcribe-openai-compatible 的 audioFilePath 指本应用进程所在服务器的本地路径
  vllm-openai-asr:
    enabled: true
    base-url: http://101.35.52.237:17001/v1
    api-key: EMPTY
    model: Qwen3-ASR-1.7B


springdoc:
  swagger-ui:
    path: /swagger-ui.html   # Swagger UI 访问路径
    tags-sorter: alpha       # 标签排序
    operations-sorter: alpha # 接口排序
  api-docs:
    path: /v3/api-docs       # OpenAPI 描述文件路径
  default-consumes-media-type: application/json
  default-produces-media-type: application/json
  override-with-generic-response: false  # 禁用通用响应覆盖，解决版本兼容性问题

swagger:
    api:
      base-url: http://localhost:8091
#      http://localhost:9060/swagger-ui/index.html?urls.primaryName=public-api


# Dify API 配置
dify:
  api:
    base-url: http://101.43.230.106/v1
    workflow-endpoint-consultingScenar: /workflows/run
    apikey-consultingScenar: app-iCpRTMLI9qienp6Czpv0nFKh
    summary-qiwei-token: app-WPuiaYg0iVLc2ws0iOfsAUC6
    summary-ddc-token: app-rgaQbIir7vrVb1473Z3Puz6w
    summary-nameplate-token: app-cv5glaYrY4zgjq0XIidSoJea
    portrait-3in1-token: app-jlrV6lLDlhy1YDEdUiK4hdVZ
    ai-feed-token: app-b6kFOvLvAsAOxB1vDgSNa0OO
    top-sales-alldim-token: app-99nVuuKfcRR2vikxgOTiNQm0
    classification-token: app-Id1eOuv5yBb1pexpEWVDqSS3

# 高德地图 Web 服务（地理编码、周边 POI）
# 未设环境变量时使用与 com.rj.gaode.AllShopCollectorV5 一致的本地默认；生产/正式环境请设置 AMAP_WEB_SERVICE_KEY 覆盖
amap:
  web-service-key: ${AMAP_WEB_SERVICE_KEY:34eaa47387aa9e8c1a8ca0d4c8abaa1d}

# 申请评估 - 钉钉群机器人（自定义机器人 Webhook）
lb:
# 本文件已加入 .gitignore，仅本机生效；勿将真实 token 提交到仓库。
# 若机器人启用了「加签」，请增加 secret 行（SEC 开头）。
  assessment-apply:
    dingtalk:
      enabled: true
      access-token: 65aad0554c700d12d2ea71f9c62a3214d5f8f8b2b24679d30489ce9c11a6105c
      secret: "SECxxxxxxxx"

# MinIO 对象存储配置
minio:
  # MinIO服务器地址
  endpoint: http://101.35.52.237:19100
  # 访问密钥
  access-key: minioadmin
  # 秘密密钥
  secret-key: minioadmin
  # 默认存储桶名称
  bucket-name: cst

# SiliconFlow API 配置
siliconflow:
  # SiliconFlow API 基础URL
  base-url: https://api.siliconflow.cn/v1
  # API Token - 请替换为您的实际Token
  api-key: ${siliconflow_api_key}
  # 默认TTS模型
  default-tts-model: FunAudioLLM/CosyVoice2-0.5B
  # 请求超时时间（毫秒）
  timeout: 30000
  # 是否启用SiliconFlow服务
  enabled: true
#qiwei：
# corpid: wwf863be906c659801
# app-secret: 5fiJNav_GrLBN70aBjJK3khRpzDPKoj-b9JhXFwNZOk
# contract-secret: KQbOvEW8SQORCkvArJ6aF-voarpveVHN5Jj1p4DnWto   KQbOvEW8SQORCkvArJ6aF8T_h4ObCgn9uuDRtot_T_c