App.json 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. {
  2. "$schema": "https://gitee.com/dotnetchina/Furion/raw/v4/schemas/v4/furion-schema.json",
  3. "Urls": "http://*:5005", // 默认端口
  4. "AllowedHosts": "*", // 允许所有地址
  5. "AppSettings": {
  6. "InjectSpecificationDocument": true, // 生产环境是否开启Swagger
  7. "ExternalAssemblies": [ "plugins" ], // 插件目录
  8. "VirtualPath": "" // 二级虚拟目录
  9. },
  10. "DynamicApiControllerSettings": {
  11. "DefaultRoutePrefix": "api",
  12. "CamelCaseSeparator": "", // 驼峰命名分隔符
  13. "SplitCamelCase": false, // 切割骆驼(驼峰)/帕斯卡命名
  14. "LowercaseRoute": false, // 小写路由格式
  15. "AsLowerCamelCase": true, // 小驼峰命名(首字母小写)
  16. "KeepVerb": false, // 保留动作方法请求谓词
  17. "KeepName": false // 保持原有名称不处理
  18. },
  19. "FriendlyExceptionSettings": {
  20. "DefaultErrorMessage": "系统异常,请联系管理员",
  21. "ThrowBah": true, // 是否将 Oops.Oh 默认抛出为业务异常
  22. "LogError": false // 是否输出异常日志
  23. },
  24. // 静态资源处理方式(允许这些文件被访问),包含".*": "application/octet-stream"允许访问所有静态资源
  25. "StaticContentTypeMappings": {
  26. ".dll": "application/octet-stream",
  27. ".exe": "application/octet-stream",
  28. ".pdb": "application/octet-stream",
  29. ".so": "application/octet-stream"
  30. },
  31. "LocalizationSettings": {
  32. "SupportedCultures": [ "zh-CN", "en" ], // 语言列表
  33. "DefaultCulture": "zh-CN", // 默认语言
  34. "DateTimeFormatCulture": "zh-CN" // 固定时间区域为特定时区(多语言)
  35. },
  36. "CorsAccessorSettings": {
  37. //"PolicyName": "App.Cors.Policy", // 跨域策略名称
  38. "WithOrigins": [ "http://localhost:8888", "http://127.0.0.1:8888", "http://123.60.180.165:8888" ], // 前端开发服来源(公网/本机)
  39. "WithExposedHeaders": [ "Content-Disposition", "X-Pagination", "access-token", "x-access-token", "Access-Control-Expose-Headersx-access-token" ], // 如果前端不代理且是axios请求
  40. "SignalRSupport": true // 启用 SignalR 跨域支持
  41. },
  42. // 定时任务/作业调度
  43. "JobSchedule": {
  44. "Enabled": true // 是否开启。2026-09-26 曾临时置 false 规避启动期连接竞态,根因(火忘 Task.Run)已撤回,恢复 true。本机如需关闭调度,用启动参数覆盖,不要再改这里。
  45. },
  46. "S8ActiveFlowWatch": {
  47. "Enabled": true, // 是否启用卡死扫描
  48. "ThresholdHours": 4, // ActiveFlow 超过多少小时未更新视为疑似卡死
  49. "AlertCooldownMinutes": 60, // 同一异常重复告警冷却时间
  50. "BatchSize": 100 // 单轮最大扫描数量
  51. },
  52. "S8MasterData": {
  53. "DepartmentFactoryRefId": 1329900200002 // S0 部门主数据 DepartmentMaster 所在 factory_ref_id(与 S8 运营 factory_id=1 分离);0=由唯一 active D-UNASSIGNED 推导
  54. },
  55. "AiDOP": {
  56. "PickBill": {
  57. "Mode": "Mes" // WP9 S4:Mes=165 权威建领料;Local=本库降级路径
  58. },
  59. "Stock": {
  60. "Source": "Mes", // 齐套库存来源:Mes=直读 165 实时;Local=本库 InvMaster 快照(降级)
  61. "MesDomain": "8010",
  62. "MesTenantId": 797403760988229,
  63. "BatchSize": 500
  64. },
  65. "Inventory": {
  66. "SourceCode": "DOPDEMORQ_SQLSERVER",
  67. "BalanceMode": "LiveThenStd",
  68. "BatchSize": 500,
  69. "StdMaxAgeMinutes": 90,
  70. "LocationOverlapMinutes": 120,
  71. "TransBootstrapMonths": 12,
  72. "MaxPageSize": 200,
  73. "LiveTimeoutSeconds": 5,
  74. "DefaultDomain": "8010"
  75. },
  76. "PoCompletion": {
  77. // 承担 S8_PO_COMPLETION_SOURCE 角色(WMS/MES 收货执行)的 mdp_source.source_code。
  78. // 下面这个值是开发/UAT 实例;部署到非开发环境时必须改成真实 WMS 源,
  79. // 否则 DevOnlySourceCodes 会让同步 fail-closed 直接失败,不会静默使用测试库。
  80. "SourceCode": "DOPDEMORQ_SQLSERVER",
  81. "DevOnlySourceCodes": [ "DOPDEMORQ_SQLSERVER" ],
  82. "SourcePotype": "po", // 与 PurOrdWmsPushService 自建单推送口径一致
  83. "MaxSourceRows": 50000,
  84. "UpsertBatchSize": 200
  85. },
  86. "S1Rebuild": {
  87. "MaxParallelTenants": 2
  88. },
  89. "Outbound": {
  90. "Enabled": false // 开发库总开关:false=只入队不写 165。正式环境删除本段或置 true(缺省即为 true)
  91. },
  92. "Jobs": {
  93. // ETL 执行机开关:false=本实例不跑任何 AiDOP 定时作业与轮询后台(页面手工重算不受影响)。
  94. // 开发库这里必须是 false —— 每台开发机启动后端都会变成一台完整的 ETL 引擎,
  95. // 多实例共用 aidopdev 时同一套作业被重复执行 N 份,2026-09-24 就是这样把
  96. // MySQL 连接耗尽的(1040 Too many connections)。
  97. // 真正的执行机用环境变量 AIDOP_JOBS_ENABLED=true 显式打开,不要改这里;
  98. // env 优先于本文件(Furion 的 JSON 装配在 env provider 之后,故代码直读 env)。
  99. // 缺省(整段删除)即为 true,与修复前行为一致。
  100. "Enabled": false
  101. },
  102. "MdpRebuild": {
  103. "MaxParallelScopes": 1,
  104. // 全库并发上限:所有连同一个库的实例加起来最多同时跑几个 scope。
  105. // MaxParallelScopes 只约束单进程,多实例共库会成倍放大。缺省回落到 MaxParallelScopes。
  106. // 2026-09-26 包 C:开发库改为 1,夜间全量兜底靠它串行消费。
  107. "GlobalMaxParallelScopes": 1,
  108. // AUTO / BOOTSTRAP 入队的最小间隔小时数。0 表示关闭冷却。
  109. "AutoMinIntervalHours": 6,
  110. "Modules": {
  111. "S1": { "Enabled": true },
  112. "S2": { "Enabled": true },
  113. "S3": { "Enabled": true },
  114. "S4": { "Enabled": true },
  115. "S5": { "Enabled": true },
  116. "S6": { "Enabled": true },
  117. "S7": { "Enabled": true }
  118. }
  119. }
  120. },
  121. // 雪花Id
  122. "SnowId": {
  123. "WorkerId": 1, // 雪花Id机器码,多服务器时全局唯一
  124. "WorkerIdBitLength": 6, // 机器码位长 默认值6,取值范围 [1, 19]
  125. "SeqBitLength": 6, // 序列数位长 默认值6,取值范围 [3, 21](建议不小于4,值越大性能越高、Id位数也更长)
  126. "WorkerPrefix": "adminnet_" // 缓存前缀
  127. },
  128. // 密码策略
  129. "Cryptogram": {
  130. "StrongPassword": false, // 是否开启密码强度验证
  131. "PasswordStrengthValidation": "(?=^.{6,16}$)(?=.*\\d)(?=.*\\W+)(?=.*[A-Z])(?=.*[a-z])(?!.*\\n).*$", // 密码强度验证正则表达式,必须须包含大小写字母、数字和特殊字符的组合,长度在6-16之间
  132. "PasswordStrengthValidationMsg": "密码必须包含大小写字母、数字和特殊字符的组合,长度在6-16之间", // 密码强度验证消息提示
  133. "CryptoType": "SM2", // 密码加密算法:MD5、SM2、SM4
  134. // 新业务系统记得改密匙,通过接口(http://localhost:5005/api/sysCommon/smKeyPair)获取。记得同步修改前端公钥配置:VITE_SM_PUBLIC_KEY
  135. "PublicKey": "0484C7466D950E120E5ECE5DD85D0C90EAA85081A3A2BD7C57AE6DC822EFCCBD66620C67B0103FC8DD280E36C3B282977B722AAEC3C56518EDCEBAFB72C5A05312", // 公钥
  136. "PrivateKey": "8EDB615B1D48B8BE188FC0F18EC08A41DF50EA731FA28BF409E6552809E3A111" // 私钥
  137. }
  138. }