Initial commit: reorganized source tree

- backend/: 13 Maven modules (cw-elevator-application, cloudwalk-cloud, intelligent-cwoscomponent, ninca-crk, etc.)
- frontend/: 4 Vue projects (elevator-front, cwos-portal, alarm-front, front_acs) + decompiled + scripts
- scripts/: build, test-env, tools (Docker Compose, service templates, API parity)
- docs/: AGENTS.md, superpowers specs, architecture docs
- .gitignore: standard Java/Maven exclusions

Moved from legacy maven-*/ root layout to backend/ organized structure.
This commit is contained in:
hpd840321
2026-05-09 09:00:12 +08:00
commit 7b2bd307f1
7260 changed files with 612980 additions and 0 deletions
@@ -0,0 +1,5 @@
# 体积大,由 sync-jars.sh 生成;属性文件可版本管理
*.jar
# 运行/调试产生的日志不纳入版本库
**/logs/*.log
@@ -0,0 +1,126 @@
# 电梯应用双版本同路径部署
每个发行目录内 **JAR**、**`application.properties`**、**`application-access-control.properties`**(与生产 access-control 对齐)、**`bootstrap.properties`**Consul)与 **`redis-override.properties`** 位于**同一目录**。`run.sh` 使用:
```bash
--spring.config.location=file:./application.properties,file:./application-access-control.properties,file:./redis-override.properties
```
(说明见下文:Boot 1.5 下 jar 内 `classpath:/application.properties` 往往最后生效,仅靠外置文件盖不住密码;**profile=access-control** 的分表与门禁业务参数以外置 **`application-access-control.properties`** 为准,内容已与 **`星中心/cw-elevator-application-V1.0.0.20211103/application-access-control.properties`** 同步。)
## 目录
| 目录 | JAR | 端口(见配置首行) |
|------|-----|-------------------|
| `v1-legacy/` | `cw-elevator-application-V1.0.0.20211103.jar` | **18080** |
| `v2-maven/` | `cw-elevator-application-V1.0.0.20211103.jar`(固定名,与 V1 一致) | **18081** |
**`application.properties`**:在验证环境常用的 JDBC / Redis / Ribbon / Kafka / 端口等覆盖(数据库为生产还原时,请把 **jdbc-url、账号** 指到承载还原库的实例)。
**`application-access-control.properties`**:生产门禁侧参数(含 **ShardingSphere 分表 `2020..2030`**、门禁阈值、定时任务开关等),与 **星中心** 部署目录保持一致;更新时请从星中心同名文件覆盖后再提交。
属性文件最初由历史包 `cw-elevator-application-V1.0.0.20211103/application.properties` 演化而来;头部保留 **`server.port`**18080 / 18081)便于双实例并行(对拍 / API 套件)。
## 一次性同步 JAR
**`deploy/`** 下执行(需已存在 V1 原始 JAR;V2 优先用 **`releases/cw-elevator-application-V<版本>.<日期>/`** 中最新的同名 JAR,其次兼容旧路径 `releases/v<版本>/`,否则用 `cw-elevator-application-starter/target/`):
```bash
./sync-jars.sh
```
## 启动(两个终端)
```bash
cd v1-legacy && ./run.sh
```
```bash
cd v2-maven && ./run.sh
```
探活示例:`curl -s http://127.0.0.1:18080/actuator/health``18081`
## Consul`192.168.3.12` Docker
本仓库在 **`v1-legacy/bootstrap.properties`**、**`v2-maven/bootstrap.properties`** 中写入,并与 **V1 运行包 `bootstrap.properties` 中 Consul 段**对齐:
- `spring.cloud.consul.host=192.168.3.12`
- `spring.cloud.consul.port=8500`
- `spring.cloud.consul.enabled=true`
- `spring.cloud.consul.discovery.register=true`
- **`spring.cloud.consul.discovery.enabled=false`**(与 V1 一致:不作为 Consul **客户端**做服务发现)
- `spring.profiles.active=access-control`(与 V1 一致)
用于覆盖 fat-jar 内 **`10.128.161.95:8500`**,与 **`deploy/consul-docker`**`hashicorp/consul:1.22`)对齐。在同一目录执行 `./run.sh` 时,Spring Cloud 会加载上述 **`bootstrap.properties`**。
验证 Consul`curl -s http://192.168.3.12:8500/v1/status/leader`。浏览器打开 **`http://192.168.3.12:8500`** 可看 UI。
**Dubbo 属性说明**`bootstrap.properties` 中的 `dubbo.*` 属性为历史遗留(V1 携带),当前运行时**未启用 Dubbo**(POM 中无 Dubbo 依赖),这些属性不生效。
### Feign 上游服务(Ribbon 静态列表)
**`spring.cloud.consul.discovery.enabled=false`**(与 V1 对齐)时,不从 Consul 拉取上游服务实例。Feign 通过 **Ribbon + ConfigurationBasedServerList****`application.properties`** 中 **`{服务名}.ribbon.listOfServers`** 读取静态 IP 列表,按环境配置:
```properties
ninca-crk-std.ribbon.listOfServers=10.0.22.102:16106
ninca-common-component-organization.ribbon.listOfServers=...
ninca-common.ribbon.listOfServers=...
```
V2 v2.0.17 起不再需要 `NIWSServerListClassName``NincaCrkStdRibbonConfiguration`Ribbon 默认 `ConfigurationBasedServerList`。)
## Redis 与 `SPRING_APPLICATION_JSON`
fat JAR 的 `classpath:/application.properties` 会带内网旧 **host****password**;在 Spring Boot 1.5 下,同目录的 `application.properties` / `redis-override.properties` 往往**压不过** jar 里同文件(见上节说明)。
**当前做法**`deploy/merge-redis-json.sh` 读取各目录下的 **`redis-override.properties`**,生成一行 **`SPRING_APPLICATION_JSON`**(包含 `spring.redis.host` / `port` / `password`),由 `run.sh` **`export`** 后再启动 JVM,优先级高于打包配置。
- 默认已指向 **`redis-override.properties`** 中的地址与口令(若你的环境不一致,直接改该文件)。
- **临时覆盖口令**`SPRING_REDIS_PASSWORD='别的密码' ./run.sh`(若设为**空字符串**表示使用无密码 Redis)。
- 需要 **python3**
- **勿把生产口令提交到公开仓库**;团队协作时口令宜走密钥管理,`redis-override.properties` 仅作本机示例。
## 修改配置
直接编辑对应目录下的 **`application.properties`**、**`application-access-control.properties`**(与 JAR 同路径),重启进程生效。
**Consul KV** 中存在同名 `spring.shardingsphere.*` 等键,**运行时仍以 Consul 覆盖为准**,需与库表、本地文件三方对齐后再做生产模拟。
## 生产模拟时还可对齐的项(按需)
| 配置来源(星中心) | deploy 中对应位置 | 说明 |
|-------------------|------------------|------|
| `bootstrap.properties`Consul / Dubbo | `v1-legacy/bootstrap.properties` | 当前保留验证用 Consul 地址;生产 Consul host、Dubbo `zookeeper://...` 若需一致,在确认网络可达后按需合并(V2 构建一般不写 Dubbo)。 |
| `application.properties`jdbc/redis/kafka | 同上目录 `application.properties` + `redis-override.properties` | 还原库在哪台 MySQL、Redis 是否同生产,由你在本机改 URL/口令;**勿将生产口令提交到公开仓库**。 |
| `application-access-control.properties` | 已内置与星中心同内容 | 生产变更分表年限时,从星中心覆盖此文件。 |
## JDK 版本(避免 `InaccessibleObjectException` / CGLIB
历史 JAR 面向 **JDK 8**。本仓库在 **`deploy/common-java.sh`** 顶部用变量 **`DEPLOY_JDK8`** 写死默认路径(当前为 **`/usr/lib/jvm/java-8-openjdk-amd64`**)。换机器请只改这一处,或通过环境变量临时覆盖:
`DEPLOY_JDK8=/你的/jdk8 ./run.sh`
**默认**`run.sh` 使用 **`DEPLOY_JDK8`****不跟随** Conda 的 `JAVA_HOME`
- 坚持用当前 Shell 里的 Java(如 Conda JDK17):
`ELEVATOR_USE_ENV_JAVA=1 ./run.sh`
非 JDK8 时会自动追加 `--add-opens=...`
- 额外 JVM
`ELEVATOR_JAVA_OPTS="-Xmx512m" ./run.sh`
## 发布包与「星中心」扁平目录对齐
执行 `./scripts/release-cw-elevator-application.sh <版本>` 生成的 **`releases/cw-elevator-application-V<版本>.<日期>/`**(日期默认当天 `YYYYMMDD`,可用 **`RELEASE_DATE_LABEL`** 覆盖)除 **`ddl/`** 外,**发布根目录**(与历史运行包 **`cw-elevator-application-V1.0.0.20211103`** 同层习惯)包含:
- **`bootstrap.properties``application.properties``application-access-control.properties`**(与 `deploy/v2-maven/` 同源;与 JAR、`start.sh` 同目录,**不再单独建 `config/`**)。
- **`start.sh` / `stop.sh`**(对齐现场启停脚本)、**`cw-elevator-application.service`**`WorkingDirectory`/`ExecStart` 中占位路径默认为 `/path/to/cw-elevator-application`,部署前请替换为实际目录)。
- **`run.sh`**、**`common-java.sh`**(供 `run.sh` source)。
- **`collect_elevator_runtime_evidence.sh`**:与仓库根 `scripts/` 同源,置于发布包根目录;现场只读采集进程参数、配置快照、日志关键行、Consul 健康与 KV,输出 `tar.gz`(用法见脚本头注释)。
默认还会生成同名 **`releases/cw-elevator-application-V<版本>.<日期>.zip**`;不需要 zip 时:`RELEASE_MAKE_ZIP=0 ./scripts/release-cw-elevator-application.sh <版本>`
## Shell 脚本换行(若出现 `bash\r`
在 Windows 或某些编辑器下保存成 **CRLF** 会导致 `#!/usr/bin/env bash\r`。仓库根已有 **`.editorconfig`** 约束 `*.sh` 使用 **LF**;若再出现可执行:
`find . -name '*.sh' -type f -exec sed -i 's/\r$//' {} +`(在 `反编译` 根目录)
@@ -0,0 +1,38 @@
#!/usr/bin/env bash
# shellcheck shell=bash
# 由 v1-legacy/run.sh、v2-maven/run.sh sourceJAVA_HOME;非 JDK8 时追加 --add-opens。
#
# === 本机 JDK 8 安装根目录(含 bin/java);换机器只需改下行默认路径或通过环境变量覆盖 ===
: "${DEPLOY_JDK8:=/usr/lib/jvm/java-8-openjdk-amd64}"
_pick_java_home() {
if [[ "${ELEVATOR_USE_ENV_JAVA:-0}" == "1" ]] && [[ -n "${JAVA_HOME:-}" && -x "${JAVA_HOME}/bin/java" ]]; then
return 0
fi
if [[ -x "${DEPLOY_JDK8}/bin/java" ]]; then
export JAVA_HOME="${DEPLOY_JDK8}"
return 0
fi
for d in /usr/lib/jvm/java-8-openjdk-amd64 /usr/lib/jvm/java-1.8.0-openjdk; do
if [[ -x "$d/bin/java" ]]; then
export JAVA_HOME="$d"
return 0
fi
done
if [[ -n "${JAVA_HOME:-}" && -x "${JAVA_HOME}/bin/java" ]]; then
return 0
fi
export JAVA_HOME="${JAVA_HOME:-${DEPLOY_JDK8}}"
}
_jdk8_open_flags() {
local java="$1"
if "$java" -version 2>&1 | grep -qE 'version "1\.8\.'; then
echo ""
return
fi
echo "--add-opens=java.base/java.lang=ALL-UNNAMED"
echo "--add-opens=java.base/java.lang.reflect=ALL-UNNAMED"
echo "--add-opens=java.base/java.util=ALL-UNNAMED"
echo "--add-opens=java.base/java.io=ALL-UNNAMED"
}
@@ -0,0 +1,31 @@
# Consul 单机 ServerDocker),镜像 hashicorp/consul:1.22
# 在存放本文件的目录执行: docker compose up -d
# UI / HTTP API: http://<宿主机IP>:8500 (例: 192.168.3.12:8500
# 应用侧: spring.cloud.consul.host=<宿主机IP> spring.cloud.consul.port=8500
services:
consul:
image: hashicorp/consul:1.22
container_name: consul
restart: unless-stopped
ports:
- "8500:8500" # HTTP API / UI
- "8300:8300" # Server RPC
- "8301:8301" # LAN Serf
- "8302:8302/udp"
- "8302:8302/tcp"
- "8600:8600/tcp"
- "8600:8600/udp" # DNS
command: >
agent -server -bootstrap-expect=1 -ui
-client=0.0.0.0
-bind=0.0.0.0
-data-dir=/consul/data
volumes:
- consul-data:/consul/data
# 若夸主机访问 RPC 异常,可在宿主机上改为显式 advertise(示例,按实际 IP 修改):
# command: >
# agent -server -bootstrap-expect=1 -ui -client=0.0.0.0 -bind=0.0.0.0
# -advertise=192.168.3.12 -data-dir=/consul/data
volumes:
consul-data:
+38
View File
@@ -0,0 +1,38 @@
#!/usr/bin/env bash
# 读取 redis-override.properties,输出一行 SPRING_APPLICATION_JSON(紧凑 JSON)。
# 若环境变量 SPRING_REDIS_PASSWORD 已设置(含空字符串),则覆盖文件中的 spring.redis.password。
# 用法: export SPRING_APPLICATION_JSON="$(./merge-redis-json.sh /path/to/redis-override.properties)"
set -euo pipefail
PROP="${1:?用法: merge-redis-json.sh <redis-override.properties>}"
if [[ ! -f "$PROP" ]]; then
echo "找不到文件: $PROP" >&2
exit 1
fi
python3 - "$PROP" <<'PY'
import json, os, pathlib, re, sys
prop = pathlib.Path(sys.argv[1])
lines = prop.read_text(encoding="utf-8")
def get(key):
pat = r"^" + re.escape(key) + r"\s*=\s*(.*?)\s*$"
m = re.search(pat, lines, re.MULTILINE)
return m.group(1).strip() if m else ""
host = get("spring.redis.host") or "127.0.0.1"
port_raw = get("spring.redis.port") or "6379"
try:
port = int(port_raw)
except ValueError:
port = 6379
if "SPRING_REDIS_PASSWORD" in os.environ:
pwd = os.environ["SPRING_REDIS_PASSWORD"]
else:
pwd = get("spring.redis.password")
payload = {"spring": {"redis": {"host": host, "port": port, "password": pwd}}}
print(json.dumps(payload, separators=(",", ":")))
PY
@@ -0,0 +1,3 @@
# 供 run_v1v2_parity_automated.sh 置于 spring.config.location 链末尾加载。
# 本机对拍若无 Consul8500),若不关闭会因 agentServiceRegister 失败导致整进程退出。
spring.cloud.consul.enabled=false
@@ -0,0 +1,23 @@
[Unit]
Description=cw-elevator-application __REL_VER__ (Maven V2 fat jar)
After=network.target remote-fs.target nss-lookup.target
[Service]
# 将 WorkingDirectory、ExecStart、ExecStop 中的路径占位改为实际部署绝对路径(与 JAR、start.sh、properties 同目录)。
PIDFile=/run/cw-elevator-application-__REL_VER__.pid
ExecStartPre=/bin/rm -f /run/cw-elevator-application-__REL_VER__.pid
ExecStart=/bin/bash __DEPLOY_DIR__/start.sh
ExecStop=/bin/bash __DEPLOY_DIR__/stop.sh
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
Restart=always
RestartSec=10
StandardOutput=null
StandardError=null
WorkingDirectory=__DEPLOY_DIR__
[Install]
WantedBy=multi-user.target
@@ -0,0 +1,23 @@
#!/usr/bin/env bash
# 与「星中心」V1 部署习惯对齐:本脚本与 __JAR_NAME__、bootstrap/application*.properties 位于同一目录。
# 覆盖 JVM:设置环境变量 ELEVATOR_JAVA_OPTS(可选);指定 JavaJAVA_HOME 或 JAVA_CMD。
set -euo pipefail
dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
cd "$dir"
JAR="__JAR_NAME__"
if [[ ! -f "$JAR" ]]; then
echo "ERROR: 未找到 ${JAR}(当前目录 $(pwd)" >&2
exit 1
fi
if [[ -n "${JAVA_CMD:-}" ]]; then
JAVA_EXEC="$JAVA_CMD"
elif [[ -n "${JAVA_HOME:-}" && -x "${JAVA_HOME}/bin/java" ]]; then
JAVA_EXEC="${JAVA_HOME}/bin/java"
else
JAVA_EXEC="/usr/lib/jvm/java-8-openjdk-amd64/bin/java"
fi
if [[ -z "${ELEVATOR_JAVA_OPTS:-}" ]]; then
ELEVATOR_JAVA_OPTS="-Xmx3072m -Xms3072m -Xmn1024m"
fi
# shellcheck disable=SC2086
exec "$JAVA_EXEC" $ELEVATOR_JAVA_OPTS -jar "$JAR"
@@ -0,0 +1,9 @@
#!/usr/bin/env bash
# 停止与本目录 __JAR_NAME__ 对应的 Java 进程(仅匹配命令行中含该 JAR 名的进程)。
set -euo pipefail
JAR="__JAR_NAME__"
# shellcheck disable=SC2009
pid=$(ps -ef | grep '[j]ava' | grep "$JAR" | awk '{print $2}' || true)
if [[ -n "${pid}" ]]; then
kill -9 $pid
fi
+73
View File
@@ -0,0 +1,73 @@
#!/usr/bin/env bash
# 将 V1 / V2 JAR 复制到与各目录 application.properties 同路径,便于 java -jar 启动。
#
# 可选:PARITY_PATCH_V1_DATA=1 时,在复制 V1 fat-jar 后,用当前 Maven 构建的
# cw-elevator-application-data 模块 JAR **覆盖** fat-jar 内 lib/cw-elevator-application-data-1.0-SNAPSHOT.jar
#(文件名不变,仅替换字节码)。用于 V1/V2 对拍:消除历史运行包内嵌 data 层与源码分支分叉导致的
# ShardingSphere「no table route」等非业务差异。手工比对「纯正历史 V1」时请 unset 或设为 0。
set -euo pipefail
DEPLOY="$(cd "$(dirname "$0")" && pwd)"
MAVEN="$(cd "$DEPLOY/.." && pwd)"
REPO="$(cd "$MAVEN/.." && pwd)"
V1_SRC="${REPO}/cw-elevator-application-V1.0.0.20211103/cw-elevator-application-V1.0.0.20211103.jar"
V2_VER="${V2_VER:-2.0.7}"
V2_JAR_NAME="cw-elevator-application-${V2_VER}.jar"
V2_TGT="${MAVEN}/cw-elevator-application-starter/target/${V2_JAR_NAME}"
# 发布目录命名:cw-elevator-application-V<版本>.<YYYYMMDD>/(与 V1 运行包风格一致)
V2_BUNDLE="$(ls -1dt "${MAVEN}/releases"/cw-elevator-application-V"${V2_VER}".* 2>/dev/null | head -1 || true)"
V2_REL=""
if [[ -n "${V2_BUNDLE}" ]]; then
V2_REL="${V2_BUNDLE}/${V2_JAR_NAME}"
fi
if [[ -z "${V2_REL}" || ! -f "${V2_REL}" ]]; then
V2_LEGACY="${MAVEN}/releases/v${V2_VER}/${V2_JAR_NAME}"
if [[ -f "${V2_LEGACY}" ]]; then
V2_REL="${V2_LEGACY}"
fi
fi
PATCH_V1_DATA="${PARITY_PATCH_V1_DATA:-0}"
DATA_NEW="${MAVEN}/cw-elevator-application-data/target/cw-elevator-application-data-2.0-SNAPSHOT.jar"
if [[ ! -f "$V1_SRC" ]]; then
echo "ERROR: 未找到 V1 JAR: $V1_SRC" >&2
exit 1
fi
# 优先 target:本地 mvn package 后应与 deploy 同步,避免 releases 里旧包盖住新构建。
V2_SRC=""
if [[ -f "$V2_TGT" ]]; then
V2_SRC="$V2_TGT"
elif [[ -f "$V2_REL" ]]; then
V2_SRC="$V2_REL"
else
echo "ERROR: 未找到 V2 JAR(请先 mvn package,或运行 scripts/release-cw-elevator-application.sh ${V2_VER}:" >&2
echo " ${V2_TGT}" >&2
echo " 或 releases/cw-elevator-application-V${V2_VER}.<日期>/${V2_JAR_NAME}" >&2
exit 1
fi
install -m0644 "$V1_SRC" "${DEPLOY}/v1-legacy/cw-elevator-application-V1.0.0.20211103.jar"
install -m0644 "$V2_SRC" "${DEPLOY}/v2-maven/${V2_JAR_NAME}"
V1_OUT="${DEPLOY}/v1-legacy/cw-elevator-application-V1.0.0.20211103.jar"
if [[ "$PATCH_V1_DATA" == "1" ]]; then
if [[ ! -f "$DATA_NEW" ]]; then
echo "WARN: PARITY_PATCH_V1_DATA=1 但未找到 Maven data 模块产物,跳过覆盖: $DATA_NEW" >&2
else
# Spring Boot 可执行 fat-jar 要求 lib/*.jar 以 ZIP STORED(无压缩)存放;jar uf 会压缩嵌套 JAR,
# 导致 JarLauncher 报错「nested jar files must be stored without compression」。
TMPDIR="$(mktemp -d)"
mkdir -p "${TMPDIR}/lib"
cp -f "$DATA_NEW" "${TMPDIR}/lib/cw-elevator-application-data-1.0-SNAPSHOT.jar"
zip -d "$V1_OUT" "lib/cw-elevator-application-data-1.0-SNAPSHOT.jar" 2>/dev/null || true
(cd "$TMPDIR" && zip -q -0 "$V1_OUT" lib/cw-elevator-application-data-1.0-SNAPSHOT.jar)
rm -rf "$TMPDIR"
echo "OK: 已用当前构建 data 模块覆盖 V1 fat-jar 内 lib/cw-elevator-application-data-1.0-SNAPSHOT.jarSTORE,对拍专用)"
fi
fi
echo "OK: V1 -> deploy/v1-legacy/"
echo "OK: V2 -> deploy/v2-maven/"
ls -la "${DEPLOY}/v1-legacy/"*.jar "${DEPLOY}/v2-maven/"*.jar
@@ -0,0 +1,47 @@
# 来源:星河湾星中星/星中心/cw-elevator-application-V1.0.0.20211103/application-access-control.properties(生产门禁 access-control 参数)
# profile=access-control 时与本目录 application.properties 合并加载;勿随意删减与分表相关项。
# \u56FE\u7247\u524D\u7F00
cloudwalk.elevator.common.relativePrefix=/cwos-portal/portal/fileManager/imgByPath?path=
# \u6570\u636E\u5E93sharding\u914D\u7F6E
spring.shardingsphere.sharding.tables.IT_ACS_RECOG_RECORD.actual-data-nodes=ds0.IT_ACS_RECOG_RECORD_$->{2020..2030}
spring.shardingsphere.sharding.tables.IT_ACS_RECOG_RECORD.table-strategy.standard.sharding-column=RECOGNITION_TIME
spring.shardingsphere.sharding.tables.IT_ACS_RECOG_RECORD.table-strategy.standard.precise-algorithm-class-name=cn.cloudwalk.elevator.YearlyShardingAlgorithm
spring.shardingsphere.sharding.tables.IT_ACS_RECOG_RECORD.table-strategy.standard.range-algorithm-class-name=cn.cloudwalk.elevator.YearlyShardingAlgorithm
# \u7535\u68AF\u5F00\u95E8\u4E8B\u4EF6\u8868
spring.shardingsphere.sharding.tables.IT_ACS_ELEVATOR_RECORD.actual-data-nodes=ds0.IT_ACS_ELEVATOR_RECORD_$->{2020..2030}
spring.shardingsphere.sharding.tables.IT_ACS_ELEVATOR_RECORD.table-strategy.standard.sharding-column=RECOGNITION_TIME
spring.shardingsphere.sharding.tables.IT_ACS_ELEVATOR_RECORD.table-strategy.standard.precise-algorithm-class-name=cn.cloudwalk.elevator.YearlyShardingAlgorithm
spring.shardingsphere.sharding.tables.IT_ACS_ELEVATOR_RECORD.table-strategy.standard.range-algorithm-class-name=cn.cloudwalk.elevator.YearlyShardingAlgorithm
spring.shardingsphere.sharding.binding-tables=IT_ACS_ELEVATOR_RECORD,IT_ACS_RECOG_RECORD
# \u4EBA\u8138\u6293\u62CD\u8BC6\u522B\u9608\u503C
cloudwalk.access-control.common.device-atrr-map.ACS_FACE_REG_THRESHOLD=75
# \u4EBA\u8138\u6BD4\u5BF9\u67E5\u8BE2\u8FC7\u6EE4\u9608\u503C
cloudwalk.access-control.common.face-compare-THRESHOLD=80
# \u5B9A\u65F6\u4EFB\u52A1\u914D\u7F6E
cloudwalk.access-control.schedual.jobs.AcsRecordStatisticsByDayJob.name=AcsRecordStatisticsByDayJob
cloudwalk.access-control.schedual.jobs.AcsRecordStatisticsByDayJob.group=ACCESS-CONTROL_GROUP
cloudwalk.access-control.schedual.jobs.AcsRecordStatisticsByDayJob.executable-class=cn.cloudwalk.service.ninca.accesscontrol.common.job.executable.AcsRecordStatisticsByDayJob
cloudwalk.access-control.schedual.jobs.AcsRecordStatisticsByDayJob.description=AcsRecordStatisticsByDay job is starting.........
## \u6BCF\u5929\u51CC\u66680\u70B910\u5206\u6267\u884C
cloudwalk.access-control.schedual.jobs.AcsRecordStatisticsByDayJob.cron-expression=0 10 0 * * ?
cloudwalk.access-control.schedual.jobs.AcsRecordStatisticsByDayJob.priority=1
# \u5F00\u95E8\u8BB0\u5F55\u63A8\u9001\u5F00\u5173\uFF1Atrue-\u5F00\uFF1Bfalse-\u5173\u3002\u9ED8\u8BA4\u4E3A\u5173
cloudwalk.access-control.common.publish-opendoor-switch=false
# \u5F00\u95E8\u8BB0\u5F55\u63A8\u9001serviceCode
cloudwalk.access-control.common.publish-opendoor-service-code=access-control
# \u540E\u7AEF\u8BC6\u522B\u4E0B\u53D1\u5F00\u95E8\u6307\u4EE4\u76F8\u5173\u914D\u7F6E
# \u6293\u62CD\u65F6\u95F4\u5728\u591A\u4E45\u4E4B\u524D\u4E0D\u4E0B\u53D1\u5F00\u95E8\u6307\u4EE4\u3002\u9ED8\u8BA45\u5206\u949F\u3002\u5355\u4F4D\uFF1A\u6BEB\u79D2\u3002
cloudwalk.access-control.common.face-capture-time-expired-milliseconds=300000
# \u591A\u5C11\u6BEB\u79D2\u4EE5\u5185\u7684\u591A\u6761\u6293\u62CD\u8BB0\u5F55\u53EA\u4E0B\u53D1\u4E00\u6B21\u5F00\u95E8\u6307\u4EE4\u3002\u9ED8\u8BA43\u79D2\u3002\u5355\u4F4D\uFF1A\u6BEB\u79D2
cloudwalk.access-control.common.face-capture-interval-milliseconds=3000
# \u5F00\u95E8\u8BB0\u5F55\u8FC7\u671F\u65F6\u95F4\u3002\u591A\u5C11\u6BEB\u79D2\u4E4B\u540E\uFF0C\u672A\u4E0A\u62A5\u5F00\u95E8\u8BB0\u5F55\uFF0C\u5F00\u95E8\u8BB0\u5F55\u72B6\u6001\u66F4\u65B0\u4E3A\u5931\u8D25\u3002\u9ED8\u8BA410\u5206\u949F\u3002\u5355\u4F4D\uFF1A\u6BEB\u79D2
cloudwalk.access-control.common.face-capture-open-door-fail-milliseconds=600000
# \u95E8\u7981\u63A7\u5236\u5668\u7C7B\u578B\u96C6\u5408
cloudwalk.access-control.common.device-controller-array[0]=mqtt
# \u8BBE\u5907\u79CD\u7C7Bid\u96C6\u5408
cloudwalk.access-control.common.device-category-array[0]=4
cloudwalk.access-control.common.device-category-array[1]=5
cloudwalk.access-control.common.device-category-array[2]=7
cloudwalk.access-control.common.device-category-array[3]=2
cloudwalk.access-control.common.device-category-array[4]=8
cloudwalk.access-control.common.device-category-array[5]=11
@@ -0,0 +1,122 @@
# deploy/v1-legacy \uFF1A\u5386\u53F2\u5305 cw-elevator-application-V1.0.0.20211103.jar\uFF08\u540C\u76EE\u5F55\u542F\u52A8\uFF09
# \u751F\u4EA7\u6A21\u62DF\uFF1Aaccess-control \u4E1A\u52A1/\u5206\u8868/\u95E8\u7981\u9608\u503C\u7B49\u89C1\u540C\u76EE\u5F55 application-access-control.properties
# \uFF08\u4E0E \u661F\u4E2D\u5FC3/cw-elevator-application-V1.0.0.20211103 \u5BF9\u9F50\uFF09\u3002\u672C\u6587\u4EF6\u4FDD\u7559\u7AEF\u53E3\u3001JDBC/Redis/Ribbon/Kafka \u7B49\u9A8C\u8BC1\u73AF\u5883\u8986\u76D6\u3002
server.port=18080
server.tomcat.uri-encoding=UTF-8
spring.application.name=elevator-app
# OpenFeign 2.1.x\uFF1A\u591A\u4E2A @FeignClient \u5171\u540C name \u5360\u4F4D\u7B26\u65F6\u91CD\u590D\u6CE8\u518C FeignClientSpecification\uFF0C\u4E0E Spring \u9519\u8BEF\u63D0\u793A\u4E00\u81F4
spring.main.allow-bean-definition-overriding=true
# spring\u914D\u7F6E
spring.mvc.throw-exception-if-no-handler-found=true
spring.mvc.locale=zh_CN
# \u8D44\u6E90\u6587\u4EF6\u914D\u7F6E
spring.messages.basename=access-control
spring.messages.always-use-message-format=true
spring.messages.encoding=utf-8
# http\u914D\u7F6E
spring.http.multipart.max-file-size=200MB
spring.http.multipart.max-request-size=200MB
spring.http.encoding.force=true
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
# \u65E5\u5FD7\u914D\u7F6E
logging.config=classpath:logs/logback.xml
logging.file=${spring.application.name}
logging.path=logs
logging.level.root=info
logging.level.cn.cloudwalk=info
# mybatis\u914D\u7F6E
mybatis.mapper-locations=classpath*:cn/cloudwalk/elevator/**/*.xml
mybatis.config-location=classpath:mapper/mybatis-config.xml
# \u5E8F\u5217\u53F7\u914D\u7F6E
cloudwalk.serial.enabled=true
cloudwalk.serial.serial-length=8
cloudwalk.serial.serial-type=redis
cloudwalk.serial.serial-redis-key=CLOUDWALK-ACS-SERIAL-KEY
# \u7F13\u5B58\u914D\u7F6E
cloudwalk.spring.cache.expires=CACHE_NAME_APPLICATIONIDS#21600,ACS_DeviceTypesCache#7200,ACS_DeviceTypeFeaturesCache#7200,ACS_DeviceAttrsCache#7200,ACS_RecordStatisticsCache#90000,ACS_AreaTreeCache#60
# \u5185\u90E8\u63A5\u53E3\u8C03\u7528\u5BA2\u6237\u7AEF\u53CA\u8D85\u65F6\u914D\u7F6E
feign.hystrix.enable=true
feign.httpclient.enable=false
feign.okhttp.enable=true
ribbon.http.client.enabled=false
ribbon.okhttp.enabled=true
ribbon.ReadTimeout=10000
ribbon.ConnectTimeout=10000
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=10000
# \u5065\u5EB7\u68C0\u67E5\u914D\u7F6E
management.health.redis.enabled=false
management.health.db.enabled=false
# \u6570\u636E\u8131\u654F\u914D\u7F6E
cloudwalk.datafield.enable=true
cloudwalk.datafield.securityKey=d4b2aabc97394a12a27fc3cca6cd9ba1
cloudwalk.datafield.encrypt=AES
# redis\u914D\u7F6E\uFF08\u672C\u673A Docker\uFF1Aybs-redis 6379->6379\uFF0C\u82E5\u7528 craftlabs-redis \u6539\u4E3A 6380\uFF09
spring.redis.host=127.0.0.1
spring.redis.port=6379
# \u672C\u673A Redis \u65E0\u5BC6\u7801\u65F6\u5FC5\u987B\u4FDD\u7559\u4E0B\u884C\u7A7A\u503C\uFF0C\u4EE5\u8986\u76D6 fat-jar \u5185\u5D4C\u65E7\u5BC6\u7801\uFF08\u5426\u5219 Redisson ERR AUTH\uFF09
spring.redis.password=
spring.redis.database=5
spring.redis.timeout=0
spring.redis.pool.max-active=10
spring.redis.pool.max-idle=1
spring.redis.pool.max-wait=10
spring.redis.pool.min-idle=0
# \u6570\u636E\u5E93sharding\u914D\u7F6E
spring.shardingsphere.datasource.names=ds0
spring.shardingsphere.datasource.ds0.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.ds0.driver-class-name=com.mysql.jdbc.Driver
spring.shardingsphere.datasource.ds0.jdbc-url=jdbc:mysql://192.168.3.12:3307/cw-elevator-application?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true
spring.shardingsphere.datasource.ds0.username=root
spring.shardingsphere.datasource.ds0.password=123456
spring.shardingsphere.datasource.ds0.connection-timeout=60000
spring.shardingsphere.datasource.ds0.maximum-pool-size=20
spring.shardingsphere.datasource.ds0.minimum-idle=5
spring.shardingsphere.datasource.ds0.max-lifetime=1765000
spring.shardingsphere.datasource.ds0.auto-commit=true
spring.shardingsphere.datasource.ds0.pool-name=ds0-pool
spring.shardingsphere.props.sql.show=false
spring.shardingsphere.sharding.default-data-source-name=ds0
# \u5FAE\u670D\u52A1\u670D\u52A1\u540D\u914D\u7F6E
feign.device.name=cwos-portal
feign.resource.name=cwos-portal
feign.cwos-portal.name=cwos-portal
feign.ninca-crk-std.name=ninca-crk-std
# bootstrap \u5DF2\u4E0E V1 fat-jar \u5185\u7F6E\uFF1AConsul \u53D1\u73B0\u5173\u95ED\u3002\u9759\u6001 Ribbon \u4E0E ninca-crk-std.ip \u6309\u73AF\u5883\u4E00\u81F4\u4FEE\u6539\u3002
ninca-crk-std.ribbon.NIWSServerListClassName=com.netflix.loadbalancer.ConfigurationBasedServerList
ninca-crk-std.ribbon.listOfServers=10.128.161.95:16106
feign.davinci-portal.name=cwos-portal
feign.component-organization.name=ninca-common-component-organization
feign.ninca-common.name=ninca-common
feign.mqtt.name=cloudwalk-device-thirdparty
# CWOS\u4E8B\u4EF6\u914D\u7F6E
cloudwalk.event.bootstrap-servers=192.168.3.12:9092
cloudwalk.event.group-id=cw-elevator-application-1
cloudwalk.event.handler-executor-config.core-pool-size=10
cloudwalk.event.handler-executor-config.maximum-pool-size=30
# \u5206\u5E03\u5F0F\u9501\u914D\u7F6E
intelligent.lock.enable=true
intelligent.lock.config.default-wait-time=10000
lockWatchdogTimeout=21000
# PERSON_NAME_SPACE
person.name.space=recordEvent
elevator.application.key=xinghewan
elevator.application.time=600
elevator.application.keyA=5B7DEF88FF04
ninca-crk-std.ip=10.128.161.95:16106
#\u53D1\u9001\u7B2C\u4E09\u65B9\u6570\u636Eip
sendRecord.ip=hrec.star-river.com:32165
sendRecord.token.corpId=53db867a8bb747a1bd04dd1afcad8ca6
sendRecord.token.appKey=293e2d708f0143c2957b702cef44d951
sendRecord.token.appSecret=5f6995009b864669b52041b8f5dc4625
sendRecord.boolean=true
# \u8BBE\u5907\u5904\u7406\u7EBF\u7A0B\u6C60\u914D\u7F6E
ninca.update.floor.pool.corePoolSize=5
ninca.update.floor.pool.maxPoolSize=5
ninca.update.floor.pool.queueCapacity=100000
ninca.update.floor.pool.keepAliveSeconds=150
ninca.update.floor.pool.allowCoreThreadTimeOut=true
#\u697C\u680Bid
floor.building.id=605560539791228928
@@ -0,0 +1,13 @@
# 与 JAR 同目录,覆盖 jar 内 bootstrapConsul 段与 V1 运行包对齐。
# Dubbo/ZooKeeper 仅 V1 fat-jar 内嵌使用;若启动报 ZK 相关错误再于外置 application 中处理。
spring.cloud.consul.host=192.168.3.12
spring.cloud.consul.port=8500
spring.cloud.consul.enabled=true
spring.cloud.consul.discovery.register=true
spring.cloud.consul.discovery.enabled=false
spring.cloud.consul.discovery.prefer-ip-address=true
spring.cloud.consul.discovery.instance-id=${spring.application.name}-${spring.cloud.client.ipAddress}:${server.port}
spring.cloud.consul.discovery.ip-address=${spring.cloud.client.ipAddress}
spring.cloud.consul.discovery.deregister=false
spring.profiles.active=access-control
@@ -0,0 +1,5 @@
# 必须在 spring.config.location 中排在 application.properties 之后加载。
# run.sh 用 merge-redis-json.sh 将本文件转为 SPRING_APPLICATION_JSON,以压过 fat-jar 内 classpath 里的 Redis 配置。
spring.redis.host=192.168.3.12
spring.redis.port=6379
spring.redis.password=1qaz!QAZ
+43
View File
@@ -0,0 +1,43 @@
#!/usr/bin/env bash
# 与当前目录下 application.properties 同路径启动 V1 历史包。
# 默认优先使用系统 JDK 8(避免 Conda 的 JDK17+ 触发 CGLIB 模块错误)。
# 若必须用当前环境的 JAVA_HOME ELEVATOR_USE_ENV_JAVA=1 ./run.sh
# 额外 JVM 参数: ELEVATOR_JAVA_OPTS="-Xmx512m" ./run.sh
set -euo pipefail
cd "$(dirname "$0")"
# shellcheck source=../common-java.sh
source "$(cd "$(dirname "$0")" && pwd)/../common-java.sh"
JAR="cw-elevator-application-V1.0.0.20211103.jar"
if [[ ! -f "$JAR" ]]; then
echo "缺少 $JAR,请在 deploy 目录执行: ./sync-jars.sh" >&2
exit 1
fi
_pick_java_home
if [[ ! -x "${JAVA_HOME}/bin/java" ]]; then
echo "ERROR: 未找到可执行的 JDK。请安装 openjdk-8-jdk,或设定 JAVA_HOME / ELEVATOR_USE_ENV_JAVA=1 ./run.sh(使用 Conda 等当前环境)。" >&2
exit 1
fi
JAVA="${JAVA_HOME}/bin/java"
OPEN_FLAGS=()
while IFS= read -r line; do
[[ -n "$line" ]] && OPEN_FLAGS+=("$line")
done < <(_jdk8_open_flags "$JAVA")
# classpath:/application.properties 最后加载会盖住外置 properties;用 merge-redis-json.sh 把 redis-override.properties
# 转成 SPRING_APPLICATION_JSON(含 host/port/password),优先级高于 jar。
# application-access-control.properties 与星中心生产门禁配置对齐,在 application 之后、redis-override 之前加载。
# 临时改密码:SPRING_REDIS_PASSWORD='其它' ./run.sh(含空字符串表示无密码)
if ! command -v python3 >/dev/null 2>&1; then
echo "需要 python3deploy/merge-redis-json.sh)。请安装 python3。" >&2
exit 1
fi
MERGE="$(cd "$(dirname "$0")" && pwd)/../merge-redis-json.sh"
if [[ ! -x "$MERGE" ]]; then
chmod +x "$MERGE" 2>/dev/null || true
fi
export SPRING_APPLICATION_JSON="$("$MERGE" "$PWD/redis-override.properties")"
# shellcheck disable=SC2086
exec "$JAVA" "${OPEN_FLAGS[@]}" ${ELEVATOR_JAVA_OPTS:-} -jar "$JAR" \
--spring.config.location=file:./application.properties,file:./application-access-control.properties,file:./redis-override.properties
@@ -0,0 +1,45 @@
# \u56FE\u7247\u524D\u7F00
cloudwalk.elevator.common.relativePrefix=/cwos-portal/portal/fileManager/imgByPath?path=
# \u6570\u636E\u5E93sharding\u914D\u7F6E
spring.shardingsphere.sharding.tables.IT_ACS_RECOG_RECORD.actual-data-nodes=ds0.IT_ACS_RECOG_RECORD_$->{2020..2030}
spring.shardingsphere.sharding.tables.IT_ACS_RECOG_RECORD.table-strategy.standard.sharding-column=RECOGNITION_TIME
spring.shardingsphere.sharding.tables.IT_ACS_RECOG_RECORD.table-strategy.standard.precise-algorithm-class-name=cn.cloudwalk.elevator.YearlyShardingAlgorithm
spring.shardingsphere.sharding.tables.IT_ACS_RECOG_RECORD.table-strategy.standard.range-algorithm-class-name=cn.cloudwalk.elevator.YearlyShardingAlgorithm
# \u7535\u68AF\u5F00\u95E8\u4E8B\u4EF6\u8868
spring.shardingsphere.sharding.tables.IT_ACS_ELEVATOR_RECORD.actual-data-nodes=ds0.IT_ACS_ELEVATOR_RECORD_$->{2020..2030}
spring.shardingsphere.sharding.tables.IT_ACS_ELEVATOR_RECORD.table-strategy.standard.sharding-column=RECOGNITION_TIME
spring.shardingsphere.sharding.tables.IT_ACS_ELEVATOR_RECORD.table-strategy.standard.precise-algorithm-class-name=cn.cloudwalk.elevator.YearlyShardingAlgorithm
spring.shardingsphere.sharding.tables.IT_ACS_ELEVATOR_RECORD.table-strategy.standard.range-algorithm-class-name=cn.cloudwalk.elevator.YearlyShardingAlgorithm
spring.shardingsphere.sharding.binding-tables=IT_ACS_ELEVATOR_RECORD,IT_ACS_RECOG_RECORD
# \u4EBA\u8138\u6293\u62CD\u8BC6\u522B\u9608\u503C
cloudwalk.access-control.common.device-atrr-map.ACS_FACE_REG_THRESHOLD=75
# \u4EBA\u8138\u6BD4\u5BF9\u67E5\u8BE2\u8FC7\u6EE4\u9608\u503C
cloudwalk.access-control.common.face-compare-THRESHOLD=80
# \u5B9A\u65F6\u4EFB\u52A1\u914D\u7F6E
cloudwalk.access-control.schedual.jobs.AcsRecordStatisticsByDayJob.name=AcsRecordStatisticsByDayJob
cloudwalk.access-control.schedual.jobs.AcsRecordStatisticsByDayJob.group=ACCESS-CONTROL_GROUP
cloudwalk.access-control.schedual.jobs.AcsRecordStatisticsByDayJob.executable-class=cn.cloudwalk.service.ninca.accesscontrol.common.job.executable.AcsRecordStatisticsByDayJob
cloudwalk.access-control.schedual.jobs.AcsRecordStatisticsByDayJob.description=AcsRecordStatisticsByDay job is starting.........
## \u6BCF\u5929\u51CC\u66680\u70B910\u5206\u6267\u884C
cloudwalk.access-control.schedual.jobs.AcsRecordStatisticsByDayJob.cron-expression=0 10 0 * * ?
cloudwalk.access-control.schedual.jobs.AcsRecordStatisticsByDayJob.priority=1
# \u5F00\u95E8\u8BB0\u5F55\u63A8\u9001\u5F00\u5173\uFF1Atrue-\u5F00\uFF1Bfalse-\u5173\u3002\u9ED8\u8BA4\u4E3A\u5173
cloudwalk.access-control.common.publish-opendoor-switch=false
# \u5F00\u95E8\u8BB0\u5F55\u63A8\u9001serviceCode
cloudwalk.access-control.common.publish-opendoor-service-code=access-control
# \u540E\u7AEF\u8BC6\u522B\u4E0B\u53D1\u5F00\u95E8\u6307\u4EE4\u76F8\u5173\u914D\u7F6E
# \u6293\u62CD\u65F6\u95F4\u5728\u591A\u4E45\u4E4B\u524D\u4E0D\u4E0B\u53D1\u5F00\u95E8\u6307\u4EE4\u3002\u9ED8\u8BA45\u5206\u949F\u3002\u5355\u4F4D\uFF1A\u6BEB\u79D2\u3002
cloudwalk.access-control.common.face-capture-time-expired-milliseconds=300000
# \u591A\u5C11\u6BEB\u79D2\u4EE5\u5185\u7684\u591A\u6761\u6293\u62CD\u8BB0\u5F55\u53EA\u4E0B\u53D1\u4E00\u6B21\u5F00\u95E8\u6307\u4EE4\u3002\u9ED8\u8BA43\u79D2\u3002\u5355\u4F4D\uFF1A\u6BEB\u79D2
cloudwalk.access-control.common.face-capture-interval-milliseconds=3000
# \u5F00\u95E8\u8BB0\u5F55\u8FC7\u671F\u65F6\u95F4\u3002\u591A\u5C11\u6BEB\u79D2\u4E4B\u540E\uFF0C\u672A\u4E0A\u62A5\u5F00\u95E8\u8BB0\u5F55\uFF0C\u5F00\u95E8\u8BB0\u5F55\u72B6\u6001\u66F4\u65B0\u4E3A\u5931\u8D25\u3002\u9ED8\u8BA410\u5206\u949F\u3002\u5355\u4F4D\uFF1A\u6BEB\u79D2
cloudwalk.access-control.common.face-capture-open-door-fail-milliseconds=600000
# \u95E8\u7981\u63A7\u5236\u5668\u7C7B\u578B\u96C6\u5408
cloudwalk.access-control.common.device-controller-array[0]=mqtt
# \u8BBE\u5907\u79CD\u7C7Bid\u96C6\u5408
cloudwalk.access-control.common.device-category-array[0]=4
cloudwalk.access-control.common.device-category-array[1]=5
cloudwalk.access-control.common.device-category-array[2]=7
cloudwalk.access-control.common.device-category-array[3]=2
cloudwalk.access-control.common.device-category-array[4]=8
cloudwalk.access-control.common.device-category-array[5]=11
@@ -0,0 +1,48 @@
# V2 elevator test config — auto-generated from template
# Variables: 192.168.3.12 3307 127.0.0.1 1qaz!QAZ
# 127.0.0.1 9517 127.0.0.1 9092
# 127.0.0.1 16106
server.port=18081
spring.application.name=elevator-app
spring.profiles.active=access-control
# Consul
spring.cloud.consul.host=127.0.0.1
spring.cloud.consul.port=9517
spring.cloud.consul.enabled=true
spring.cloud.consul.discovery.register=true
spring.cloud.consul.discovery.enabled=false
# MySQL (ShardingSphere)
spring.shardingsphere.datasource.ds0.jdbc-url=jdbc:mysql://192.168.3.12:3307/cw-elevator-application?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true
spring.shardingsphere.datasource.ds0.username=root
spring.shardingsphere.datasource.ds0.password=123456
# Redis
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=1qaz!QAZ
spring.redis.database=5
# Kafka
cloudwalk.event.bootstrap-servers=127.0.0.1:9092
cloudwalk.event.group-id=cw-elevator-application-test
# Feign targets
feign.device.name=cwos-portal
feign.cwos-portal.name=cwos-portal
feign.ninca-crk-std.name=ninca-crk-std
ninca-crk-std.ribbon.NIWSServerListClassName=com.netflix.loadbalancer.ConfigurationBasedServerList
ninca-crk-std.ribbon.listOfServers=127.0.0.1:16106
ninca-crk-std.ip=127.0.0.1:16106
# Other
feign.hystrix.enable=true
feign.okhttp.enable=true
ribbon.ReadTimeout=10000
ribbon.ConnectTimeout=10000
elevator.application.key=xinghewan
elevator.application.time=600
elevator.application.keyA=5B7DEF88FF04
floor.building.id=605560539791228928
sendRecord.boolean=false
@@ -0,0 +1,119 @@
# deploy/v2-maven \uFF1Amaven \u6784\u5EFA cw-elevator-application-2.0.0.jar\uFF08\u540C\u76EE\u5F55\u542F\u52A8\uFF09
# \u751F\u4EA7\u6A21\u62DF\uFF1Aaccess-control \u4E1A\u52A1/\u5206\u8868/\u95E8\u7981\u9608\u503C\u7B49\u89C1\u540C\u76EE\u5F55 application-access-control.properties
# \uFF08\u4E0E \u661F\u4E2D\u5FC3/cw-elevator-application-V1.0.0.20211103 \u5BF9\u9F50\uFF09\u3002\u672C\u6587\u4EF6\u4FDD\u7559\u7AEF\u53E3\u3001JDBC/Redis/Ribbon/Kafka \u7B49\u9A8C\u8BC1\u73AF\u5883\u8986\u76D6\u3002
server.port=18081
server.tomcat.uri-encoding=UTF-8
spring.application.name=elevator-app
# Boot 1.5 \u65E0 spring.main.allow-bean-definition-overriding\uFF1B\u82E5\u91CD\u590D Bean \u9700\u5728\u4EE3\u7801\u4FA7\u6D88\u6B67\u4E49\u6216\u5347\u7EA7 Spring Boot
# spring\u914D\u7F6E
spring.mvc.throw-exception-if-no-handler-found=true
spring.mvc.locale=zh_CN
# \u8D44\u6E90\u6587\u4EF6\u914D\u7F6E
spring.messages.basename=access-control
spring.messages.always-use-message-format=true
spring.messages.encoding=utf-8
# http\u914D\u7F6E
spring.http.multipart.max-file-size=200MB
spring.http.multipart.max-request-size=200MB
spring.http.encoding.force=true
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
# \u65E5\u5FD7\u914D\u7F6E
logging.config=classpath:logs/logback.xml
logging.file=${spring.application.name}
logging.path=logs
logging.level.root=info
logging.level.cn.cloudwalk=info
# mybatis\u914D\u7F6E
mybatis.mapper-locations=classpath*:cn/cloudwalk/elevator/**/*.xml
mybatis.config-location=classpath:mapper/mybatis-config.xml
# \u5E8F\u5217\u53F7\u914D\u7F6E
cloudwalk.serial.enabled=true
cloudwalk.serial.serial-length=8
cloudwalk.serial.serial-type=redis
cloudwalk.serial.serial-redis-key=CLOUDWALK-ACS-SERIAL-KEY
# \u7F13\u5B58\u914D\u7F6E
cloudwalk.spring.cache.expires=CACHE_NAME_APPLICATIONIDS#21600,ACS_DeviceTypesCache#7200,ACS_DeviceTypeFeaturesCache#7200,ACS_DeviceAttrsCache#7200,ACS_RecordStatisticsCache#90000,ACS_AreaTreeCache#60
# \u5185\u90E8\u63A5\u53E3\u8C03\u7528\u5BA2\u6237\u7AEF\u53CA\u8D85\u65F6\u914D\u7F6E
feign.hystrix.enable=true
feign.httpclient.enable=false
feign.okhttp.enable=true
ribbon.http.client.enabled=false
ribbon.okhttp.enabled=true
ribbon.ReadTimeout=10000
ribbon.ConnectTimeout=10000
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=10000
# \u5065\u5EB7\u68C0\u67E5\u914D\u7F6E
management.health.redis.enabled=false
management.health.db.enabled=false
# \u6570\u636E\u8131\u654F\u914D\u7F6E
cloudwalk.datafield.enable=true
cloudwalk.datafield.securityKey=d4b2aabc97394a12a27fc3cca6cd9ba1
cloudwalk.datafield.encrypt=AES
# redis\u914D\u7F6E\uFF08\u672C\u673A Docker\uFF1Aybs-redis 6379->6379\uFF0C\u82E5\u7528 craftlabs-redis \u6539\u4E3A 6380\uFF09
spring.redis.host=127.0.0.1
spring.redis.port=6379
# \u672C\u673A Redis \u65E0\u5BC6\u7801\u65F6\u5FC5\u987B\u4FDD\u7559\u4E0B\u884C\u7A7A\u503C\uFF0C\u4EE5\u8986\u76D6 fat-jar \u5185\u5D4C\u65E7\u5BC6\u7801\uFF08\u5426\u5219 Redisson ERR AUTH\uFF09
spring.redis.password=
spring.redis.database=5
spring.redis.timeout=0
spring.redis.pool.max-active=10
spring.redis.pool.max-idle=1
spring.redis.pool.max-wait=10
spring.redis.pool.min-idle=0
# \u6570\u636E\u5E93sharding\u914D\u7F6E
spring.shardingsphere.datasource.names=ds0
spring.shardingsphere.datasource.ds0.type=com.zaxxer.hikari.HikariDataSource
spring.shardingsphere.datasource.ds0.driver-class-name=com.mysql.jdbc.Driver
spring.shardingsphere.datasource.ds0.jdbc-url=jdbc:mysql://192.168.3.12:3307/cw-elevator-application?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true
spring.shardingsphere.datasource.ds0.username=root
spring.shardingsphere.datasource.ds0.password=123456
spring.shardingsphere.datasource.ds0.connection-timeout=60000
spring.shardingsphere.datasource.ds0.maximum-pool-size=20
spring.shardingsphere.datasource.ds0.minimum-idle=5
spring.shardingsphere.datasource.ds0.max-lifetime=1765000
spring.shardingsphere.datasource.ds0.auto-commit=true
spring.shardingsphere.datasource.ds0.pool-name=ds0-pool
spring.shardingsphere.props.sql.show=false
spring.shardingsphere.sharding.default-data-source-name=ds0
# \u5FAE\u670D\u52A1\u670D\u52A1\u540D\u914D\u7F6E
feign.device.name=cwos-portal
feign.resource.name=cwos-portal
feign.cwos-portal.name=cwos-portal
feign.ninca-crk-std.name=ninca-crk-std
feign.davinci-portal.name=cwos-portal
feign.component-organization.name=ninca-common-component-organization
feign.ninca-common.name=ninca-common
feign.mqtt.name=cloudwalk-device-thirdparty
# CWOS\u4E8B\u4EF6\u914D\u7F6E
cloudwalk.event.bootstrap-servers=192.168.3.12:9092
cloudwalk.event.group-id=cw-elevator-application-1
cloudwalk.event.handler-executor-config.core-pool-size=10
cloudwalk.event.handler-executor-config.maximum-pool-size=30
# \u5206\u5E03\u5F0F\u9501\u914D\u7F6E
intelligent.lock.enable=true
intelligent.lock.config.default-wait-time=10000
lockWatchdogTimeout=21000
# PERSON_NAME_SPACE
person.name.space=recordEvent
elevator.application.key=xinghewan
elevator.application.time=600
elevator.application.keyA=5B7DEF88FF04
ninca-crk-std.ip=10.128.161.95:16106
#\u53D1\u9001\u7B2C\u4E09\u65B9\u6570\u636Eip
sendRecord.ip=hrec.star-river.com:32165
sendRecord.token.corpId=53db867a8bb747a1bd04dd1afcad8ca6
sendRecord.token.appKey=293e2d708f0143c2957b702cef44d951
sendRecord.token.appSecret=5f6995009b864669b52041b8f5dc4625
sendRecord.boolean=true
# \u8BBE\u5907\u5904\u7406\u7EBF\u7A0B\u6C60\u914D\u7F6E
ninca.update.floor.pool.corePoolSize=5
ninca.update.floor.pool.maxPoolSize=5
ninca.update.floor.pool.queueCapacity=100000
ninca.update.floor.pool.keepAliveSeconds=150
ninca.update.floor.pool.allowCoreThreadTimeOut=true
#\u697C\u680Bid
floor.building.id=605560539791228928
@@ -0,0 +1,18 @@
server.port=16112
server.tomcat.uri-encoding=UTF-8
spring.application.name=elevator-app
spring.profiles.active=access-control
# consul\u914D\u7F6E
spring.cloud.consul.host=371bfca4972c43d2aefcf302d0a4a277
spring.cloud.consul.port=8500
spring.cloud.consul.enabled=true
spring.cloud.consul.discovery.register=true
spring.cloud.consul.discovery.enabled=false
spring.cloud.consul.discovery.prefer-ip-address=true
spring.cloud.consul.discovery.instance-id=${spring.application.name}-${spring.cloud.client.ipAddress}:${server.port}
spring.cloud.consul.discovery.ip-address=${spring.cloud.client.ipAddress}
spring.cloud.consul.discovery.deregister=false
# zookeeper\u914D\u7F6E
dubbo.registry.address=zookeeper://10.0.22.207:2181
dubbo.protocol.port=16107
dubbo.provider.version=1.0
@@ -0,0 +1,17 @@
Manifest-Version: 1.0
Implementation-Title: cw-elevator-application-starter
Implementation-Version: 2.0-SNAPSHOT
Archiver-Version: Plexus Archiver
Built-By: zebra
Implementation-Vendor-Id: cn.cloudwalk.elevator
Spring-Boot-Version: 1.5.17.RELEASE
Implementation-Vendor: Pivotal Software, Inc.
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: cn.cloudwalk.elevator.ElevatorApplication
Spring-Boot-Classes: BOOT-INF/classes/
Spring-Boot-Lib: BOOT-INF/lib/
Created-By: Apache Maven 3.9.10
Build-Jdk: 1.8.0_482
Implementation-URL: http://projects.spring.io/spring-boot/cw-elevator-
application-reactor/cw-elevator-application-starter/
@@ -0,0 +1,5 @@
#Generated by Apache Maven
#Wed Apr 29 12:15:25 CST 2026
version=2.0-SNAPSHOT
groupId=cn.cloudwalk.elevator
artifactId=cw-elevator-application-starter
@@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.cloudwalk.elevator</groupId>
<artifactId>cw-elevator-application-reactor</artifactId>
<version>2.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
<artifactId>cw-elevator-application-starter</artifactId>
<packaging>jar</packaging>
<name>cw-elevator-application-starter</name>
<description>可执行 Spring Boot 入口:repackage 为单 JAR 发布包(对齐历史 V1 starter 形态)。</description>
<properties>
<alibaba.eclipse.codestyle.path>${project.basedir}/../../docs/style/alibaba-eclipse-codestyle.xml</alibaba.eclipse.codestyle.path>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>cn.cloudwalk</groupId>
<artifactId>cloudwalk-device-sdk-protocol-entity</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>cn.cloudwalk.elevator</groupId>
<artifactId>cw-elevator-application-web</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>${elevator.release.finalName}</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>net.revelc.code.formatter</groupId>
<artifactId>formatter-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
@@ -0,0 +1,4 @@
# run.sh 将本文件合并为 SPRING_APPLICATION_JSON,覆盖 jar 内 Redis 配置。
spring.redis.host=192.168.3.12
spring.redis.port=6379
spring.redis.password=1qaz!QAZ
+38
View File
@@ -0,0 +1,38 @@
#!/usr/bin/env bash
# 与当前目录下 application.properties 同路径启动 V2maven 构建)包。
# 默认优先系统 JDK 8;若只有 JDK11+ 会自动附加 --add-opens。
# ELEVATOR_USE_ENV_JAVA=1 ./run.sh 使用当前 JAVA_HOME(如 Conda)。
# 发布包内脚本与 JAR、properties 均位于发布根目录(与 cw-elevator-application-V1.0.0.20211103 布局一致)。
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck source=../common-java.sh
source "${SCRIPT_DIR}/../common-java.sh"
cd "$SCRIPT_DIR"
JAR=""
for candidate in $(ls -1t cw-elevator-application-*.jar 2>/dev/null || true); do
if [[ "${candidate}" == *.jar.original ]]; then
continue
fi
JAR="${candidate}"
break
done
if [[ -z "${JAR}" || ! -f "${JAR}" ]]; then
echo "缺少 cw-elevator-application-*.jar,请在 deploy 目录执行: ./sync-jars.sh" >&2
exit 1
fi
_pick_java_home
if [[ ! -x "${JAVA_HOME}/bin/java" ]]; then
echo "ERROR: 未找到可执行的 JDK。请安装 openjdk-8-jdk,或设定 JAVA_HOME / ELEVATOR_USE_ENV_JAVA=1 ./run.sh(使用 Conda 等当前环境)。" >&2
exit 1
fi
JAVA="${JAVA_HOME}/bin/java"
OPEN_FLAGS=()
while IFS= read -r line; do
[[ -n "$line" ]] && OPEN_FLAGS+=("$line")
done < <(_jdk8_open_flags "$JAVA")
# 强制走 Consul:不再注入本地 application*.properties / redis-override.properties。
# shellcheck disable=SC2086
exec "$JAVA" "${OPEN_FLAGS[@]}" ${ELEVATOR_JAVA_OPTS:-} -jar "$JAR"