feat: add service config templates and extraction script

Former-commit-id: 1de24b7eb79676d1aba9d799a58c5a753290cf52
This commit is contained in:
反编译工作区
2026-05-01 19:38:01 +08:00
parent 3175b7074b
commit 8b15445328
2433 changed files with 8322164 additions and 1604 deletions
@@ -1,9 +1,9 @@
artifact=cw-elevator-application-2.0.0.jar
directory=/media/zebra/9e8fa357-7db6-4d70-88ed-d5de5a059a663/星河湾星中星/反编译/maven-cw-elevator-application/releases/v2.0.0
built_at=2026-04-27T14:05:31+08:00
built_at=2026-04-29T17:18:10+08:00
java_home=/usr/lib/jvm/java-8-openjdk-amd64
java_version_line=openjdk version "1.8.0_482"
java_version_line=OpenJDK Runtime Environment (build 1.8.0_482-8u482-ga~us1-0ubuntu1~22.04-b08)
java_version_line=OpenJDK 64-Bit Server VM (build 25.482-b08, mixed mode)
git_rev=571c9a99ee26d90505e550c287eb8ad8d743ff8d
git_rev=376f94edd602d3dfed1cbada6e08361ee7b08e73
git_branch=release/cw-elevator-v1-lib-min-risk
@@ -0,0 +1,75 @@
# cw-elevator-application v2.0.0 SQL与代码一致性审核记录
**审核目标**:确认发布规范涉及 SQL 脚本与当前代码逻辑一致,满足实施交付依据留档要求。
**审核范围**`tenant_visitor_floor_policy` 建表脚本、初始化脚本、访客派梯策略读取与求交流程。
**审核时间**`2026-04-29`
**审核人**`____________`
---
## 1. 审核过程
1. 审阅 SQL 脚本:
- `docs/sql/tenant_visitor_floor_policy.sql`
- `docs/sql/tenant_visitor_floor_policy_init_guangfa_fund.sql`
2. 审阅代码路径:
- `cw-elevator-application-service/.../PersonRuleServiceImpl#addVisitor`
- `cw-elevator-application-data/.../TenantVisitorFloorPolicyMapper.xml`
- `cw-elevator-application-data/.../TenantVisitorFloorPolicyDto`
3. 做场景对照:
- UC-01:调用方未传 `floorIds`
- UC-02:调用方已传 `floorIds`
- 策略缺失/无效 JSON/交集为空等异常分支
4. 形成一致性结论与风险提示,并纳入发布包。
---
## 2. 审核依据与结果
| 检查项 | SQL 依据 | 代码依据 | 结论 |
|------|----------|----------|------|
| 策略表字段是否齐全(business_id/policy_type/allow_zone_ids/building_id/enabled/policy_version | `tenant_visitor_floor_policy.sql` DDL 定义上述字段 | Mapper 查询并映射到 DTO 同名语义字段 | 一致 |
| 代码是否只读取“启用+租户默认+INTERSECT_ALLOWLIST”策略 | 初始化脚本使用 `policy_type='INTERSECT_ALLOWLIST'``building_id=NULL``enabled=1` | Mapper `WHERE enabled=1 AND policy_type='INTERSECT_ALLOWLIST' AND (building_id IS NULL OR building_id='')` | 一致 |
| allow_zone_ids 的数据格式是否匹配代码解析方式 | SQL 注释与初始化脚本均为 JSON 数组字符串(如 `["605560545117995008"]` | `parseAllowZoneIds` 使用 `JSON.parseArray(..., String.class)` 解析 | 一致 |
| 未传 floorIds 时是否执行“被访人楼层 ∩ 策略楼层” | 策略表提供 allowlist 数据来源 | `addVisitor``!callerProvidedFloors` 分支求交 | 一致 |
| 交集为空是否按规范失败 | 初始化脚本可构造交集为空场景 | `intersected.isEmpty()` 返回 `76260532` | 一致 |
| 已传 floorIds 是否跳过策略表 | SQL 与此分支无冲突 | `callerProvidedFloors=true` 时不进入策略读取分支 | 一致 |
---
## 3. 关键证据(摘录)
- 代码读取策略(启用、类型、租户默认)来自 `TenantVisitorFloorPolicyMapper.xml`
- 代码在 `PersonRuleServiceImpl#addVisitor` 中:
- `!callerProvidedFloors` 才读取被访人楼层与租户策略;
- `allow_zone_ids` 解析成功且非空才参与求交;
- 求交为空返回 `76260532`
- 调用方已传楼层时不走策略求交流程。
- 初始化脚本 `tenant_visitor_floor_policy_init_guangfa_fund.sql` 的字段取值与上述查询条件完全兼容。
---
## 4. 审核结论
**结论:通过。**
发布规范涉及的 SQL 脚本内容与当前代码逻辑一致,满足 v2.0.0 发布包“数据库脚本 + 功能升级说明 + 实施交付依据”要求。
---
## 5. 风险提示与建议
1. **唯一性治理风险(中)**
DDL 使用 `UNIQUE KEY (business_id, building_id)`,在 MySQL 下 `building_id=NULL` 可能存在多行;当前代码通过 `ORDER BY updated_at DESC, policy_version DESC LIMIT 1` 取最新一条,不阻断功能,但建议运维侧增加“每租户默认策略唯一”巡检。
2. **配置数据质量风险(中)**
`allow_zone_ids` 必须是电梯域 `zone_id` 字符串数组,若误填其它系统 UUID 会导致策略不生效或交集为空。
---
## 6. 签字确认
| 角色 | 姓名 | 日期 | 备注 |
|------|------|------|------|
| 审核人 | `____________` | `____` | `____` |
| 实施负责人 | `____________` | `____` | `____` |
| 甲方确认(可选) | `____________` | `____` | `____` |
@@ -0,0 +1,92 @@
# 图片前缀
cloudwalk.elevator.common.relativePrefix=/cwos-portal/portal/fileManager/imgByPath?path=
# 数据库sharding配置
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
# 电梯开门事件表
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
# 人脸抓拍识别阈值
cloudwalk.access-control.common.device-atrr-map.ACS_FACE_REG_THRESHOLD=75
# 人脸比对查询过滤阈值
cloudwalk.access-control.common.face-compare-THRESHOLD=80
# 定时任务配置
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.........
## 每天凌晨0点10分执行
cloudwalk.access-control.schedual.jobs.AcsRecordStatisticsByDayJob.cron-expression=0 10 0 * * ?
cloudwalk.access-control.schedual.jobs.AcsRecordStatisticsByDayJob.priority=1
# 开门记录推送开关:true-开;false-关。默认为关
cloudwalk.access-control.common.publish-opendoor-switch=false
# 开门记录推送serviceCode
cloudwalk.access-control.common.publish-opendoor-service-code=access-control
# 后端识别下发开门指令相关配置
# 抓拍时间在多久之前不下发开门指令。默认5分钟。单位:毫秒。
cloudwalk.access-control.common.face-capture-time-expired-milliseconds=300000
# 多少毫秒以内的多条抓拍记录只下发一次开门指令。默认3秒。单位:毫秒
cloudwalk.access-control.common.face-capture-interval-milliseconds=3000
# 开门记录过期时间。多少毫秒之后,未上报开门记录,开门记录状态更新为失败。默认10分钟。单位:毫秒
cloudwalk.access-control.common.face-capture-open-door-fail-milliseconds=600000
# 门禁控制器类型集合
cloudwalk.access-control.common.device-controller-array[0]=mqtt
# 设备种类id集合
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
# 来源:星河湾星中星/星中心/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,111 @@
# spring配置
spring.mvc.throw-exception-if-no-handler-found=true
spring.mvc.locale=zh_CN
# 资源文件配置
spring.messages.basename=access-control
spring.messages.always-use-message-format=true
spring.messages.encoding=utf-8
# http配置
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
# 日志配置
logging.config=classpath:logs/logback.xml
logging.file=${spring.application.name}
logging.path=/data/cwos/cw-elevator-application-V1.0.0.20211103/logs
logging.level.root=info
logging.level.cn.cloudwalk=info
# mybatis配置
mybatis.mapper-locations=classpath*:cn/cloudwalk/elevator/**/*.xml
mybatis.config-location=classpath:mapper/mybatis-config.xml
# 序列号配置
cloudwalk.serial.enable=true
cloudwalk.serial.serial-length=8
cloudwalk.serial.serial-type=redis
cloudwalk.serial.serial-redis-key=CLOUDWALK-ACS-SERIAL-KEY
# 缓存配置
cloudwalk.spring.cache.expires=CACHE_NAME_APPLICATIONIDS#21600,ACS_DeviceTypesCache#7200,ACS_DeviceTypeFeaturesCache#7200,ACS_DeviceAttrsCache#7200,ACS_RecordStatisticsCache#90000,ACS_AreaTreeCache#60
# 内部接口调用客户端及超时配置
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
# 健康检查配置
management.health.redis.enabled=false
management.health.db.enabled=false
# 数据脱敏配置
cloudwalk.datafield.enable=true
cloudwalk.datafield.securityKey=d4b2aabc97394a12a27fc3cca6cd9ba1
cloudwalk.datafield.encrypt=AES
# redis配置
spring.redis.host=redis_01.redis_ip
spring.redis.port=6379
spring.redis.password=1qaz!QAZ
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
# 数据库sharding配置
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://mysql_01.mysql_ip:3306/cw-elevator-application?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&useSSL=false&allowMultiQueries=true
spring.shardingsphere.datasource.ds0.username=cloudwalk
spring.shardingsphere.datasource.ds0.password=1qaz!QAZ
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
# 微服务服务名配置
feign.device.name=cwos-portal
feign.resource.name=cwos-portal
feign.cwos-portal.name=cwos-portal
feign.davinci-portal.name=cwos-portal
feign.ninca-crk-std.name=ninca-crk-std
feign.component-organization.name=ninca-common-component-organization
feign.ninca-common.name=ninca-common
feign.mqtt.name=cloudwalk-device-thirdparty
# CWOS事件配置
cloudwalk.event.bootstrap-servers=371bfca4972c43d2aefcf302d0a4a277:9092,44700995ee904679a7ad5afddcf93bb5:9092,0837a70b5fab47569391828f5feb2561: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
# 分布式锁配置
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.0.22.102:16106
#发送第三方数据ip
sendRecord.ip=hrec.star-river.com:32165
#sendRecord.ip=172.16.16.56:32165
sendRecord.token.corpId=53db867a8bb747a1bd04dd1afcad8ca6
sendRecord.token.appKey=293e2d708f0143c2957b702cef44d951
sendRecord.token.appSecret=5f6995009b864669b52041b8f5dc4625
#是否推送
sendRecord.boolean=true
# 设备处理线程池配置
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
#楼栋id
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配置
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配置
dubbo.registry.address=zookeeper://10.0.22.207:2181
dubbo.protocol.port=16107
dubbo.provider.version=1.0
@@ -0,0 +1,47 @@
-- 广发基金租户:访客默认楼层策略初始化(电梯库 cw-elevator-application
--
-- 请先执行同目录 tenant_visitor_floor_policy.sql 建表(或 releases/v2.0.0/ddl 同源 DDL)。
--
-- 字段说明:allow_zone_ids 为 JSON 数组字符串,元素须与组织/派梯侧 floorList、image_rule_ref 使用的
-- zone_id(电梯库 snowflake 形态)一致,勿使用 cw_is_area 的 UUID。
--
-- 数据来源(现场查询 192.168.3.12:3307,截至脚本编写日):
-- business_idcomponent-organization.cw_is_organization
-- NAME='[28-38F]广发基金管理有限公司' -> BUSINESS_ID = 2524639890ba4f2cba9ba1a4eeaa4015
-- 28F zone_idcw-elevator-application.code_elevator_area / image_rule_ref
-- zone_id = 605560545117995008zone_name=28Fcode=0x1C
--
-- 重复执行:依赖主键 id 固定,使用 ON DUPLICATE KEY UPDATE 刷新策略字段。
SET NAMES utf8mb4;
INSERT INTO tenant_visitor_floor_policy (
id,
business_id,
policy_type,
allow_zone_ids,
building_id,
enabled,
policy_version,
remark,
created_at,
updated_at
) VALUES (
'gf_vstr_policy_guangfa_fund_001x',
'2524639890ba4f2cba9ba1a4eeaa4015',
'INTERSECT_ALLOWLIST',
'["605560545117995008"]',
NULL,
1,
1,
'广发基金:访客与 floorList 求交后仅保留 allowlist(默认仅 28F zone)。业务配置见产品方案。',
UNIX_TIMESTAMP(NOW()) * 1000,
UNIX_TIMESTAMP(NOW()) * 1000
)
ON DUPLICATE KEY UPDATE
policy_type = VALUES(policy_type),
allow_zone_ids = VALUES(allow_zone_ids),
enabled = VALUES(enabled),
policy_version = policy_version + 1,
remark = VALUES(remark),
updated_at = VALUES(updated_at);
@@ -7,7 +7,10 @@
**对甲交付(业务表述与排期)**
- [甲方版本升级说明](./cw-elevator-application-v2.0.0-甲方版本升级说明.md)
- [升级计划(含夜间 · 周二/周三窗口)](./cw-elevator-application-v2.0.0-升级计划.md)
- [升级计划(含夜间 · 周二/周三窗口)](./cw-elevator-application-v2.0.0-升级计划.md)
- [实施交付清单(实施方内部与对甲交付核对)](./cw-elevator-application-v2.0.0-实施交付清单.md)
- [实施验收记录模板(上线当晚记录)](./cw-elevator-application-v2.0.0-实施验收记录模板.md)
- [SQL与代码一致性审核记录(发布规范走查依据)](./cw-elevator-application-v2.0.0-SQL与代码一致性审核记录.md)
---
@@ -20,7 +23,7 @@ export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
./scripts/release-cw-elevator-application.sh
```
输出:`**maven-cw-elevator-application/releases/v2.0.0/**`,含 `jar``ddl/``版本升级说明书.md``甲方版本升级说明.md``升级计划.md``发布说明.md``BUILD_MANIFEST.txt`
输出:`**maven-cw-elevator-application/releases/v2.0.0/**`,含 `jar``ddl/`(建表与初始化脚本)、`config/`(生产基线属性文件)`版本升级说明书.md``甲方版本升级说明.md``升级计划.md``实施交付清单.md``实施验收记录模板.md``SQL与代码一致性审核记录.md``发布说明.md``BUILD_MANIFEST.txt`
---
@@ -0,0 +1,60 @@
# cw-elevator-application v2.0.0 实施交付清单
**用途**:用于正式发布交付前后的材料核对,满足“发布包 + 数据库脚本 + 升级说明 + 实施验收记录”闭环。
---
## 1. 发布包文件清单
- [ ] `cw-elevator-application-2.0.0.jar`
- [ ] `ddl/tenant_visitor_floor_policy.sql`(建表脚本)
- [ ] `ddl/tenant_visitor_floor_policy_init_guangfa_fund.sql`(广发基金初始化示例/可直接执行)
- [ ] `版本升级说明书.md`(技术实施口径)
- [ ] `甲方版本升级说明.md`(业务口径)
- [ ] `升级计划.md`(实施窗口与回滚安排)
- [ ] `实施验收记录模板.md`(上线当晚记录)
- [ ] `BUILD_MANIFEST.txt`(构建时间、分支、提交号)
---
## 2. 数据库变更交付项
- [ ] DBA 已确认目标库与执行窗口
- [ ] 已备份目标库(全库/指定库按现场规范)
- [ ] 已执行 `tenant_visitor_floor_policy.sql`
- [ ] 已执行或评审 `tenant_visitor_floor_policy_init_guangfa_fund.sql`
- [ ] 已确认 `allow_zone_ids` 使用的是电梯库 `zone_id`(非其它系统 UUID
- [ ] 已留存 SQL 执行记录(执行人、时间、结果)
---
## 3. 应用部署交付项
- [ ] 上线前已保存旧版 JAR 回滚包
- [ ] 已按窗口替换为 `cw-elevator-application-2.0.0.jar`
- [ ] 应用启动日志无严重报错
- [ ] 关键接口健康检查通过(含 `add/visitor` 主链路)
- [ ] 监控观察窗口内无持续异常
---
## 4. 验收交付项
- [ ] UC-01:未传 `floorIds` 且策略启用时,楼层为 `floorList ∩ allow_zone_ids`
- [ ] UC-01:无交集时返回 `76260532`
- [ ] UC-02:显式传 `floorIds` 时不受策略表影响
- [ ] 未启用策略租户行为与升级前一致
- [ ] 已按《实施验收记录模板》完成签字/邮件留档
---
## 5. 交付确认信息
| 项目 | 内容 |
|------|------|
| 实施项目 | cw-elevator-application v2.0.0 |
| 实施日期 | `____年____月____日` |
| 甲方确认人 | `____________` |
| 乙方实施人 | `____________` |
| 文档留存路径 | `____________` |
@@ -0,0 +1,73 @@
# cw-elevator-application v2.0.0 实施验收记录模板
**用途**:实施当晚记录数据库执行、应用部署、业务验收和回滚判定,作为交付归档依据。
---
## 1. 基本信息
| 项目 | 内容 |
|------|------|
| 项目名称 | 智慧电梯 / 访客派梯系统 |
| 发布版本 | v2.0.0 |
| 实施日期 | `____年____月____日` |
| 实施时段 | `____:____` - `____:____` |
| 环境 | 生产 / 预生产(圈选) |
| 实施负责人 | `____________` |
| 甲方联系人 | `____________` |
---
## 2. 数据库执行记录
| 序号 | 脚本 | 执行时间 | 执行人 | 结果 | 备注 |
|------|------|----------|--------|------|------|
| 1 | tenant_visitor_floor_policy.sql | `____` | `____` | 成功/失败 | `____` |
| 2 | tenant_visitor_floor_policy_init_guangfa_fund.sql | `____` | `____` | 成功/失败 | `____` |
**异常记录**`______________________________________________`
---
## 3. 应用发布记录
| 项目 | 记录 |
|------|------|
| 上线前版本 | `____________` |
| 上线后版本 | `cw-elevator-application-2.0.0.jar` |
| 启停方式 | `____________` |
| 服务恢复时间 | `____________` |
| 日志健康检查 | 通过 / 不通过 |
| 监控观察结论 | 正常 / 异常(说明) |
---
## 4. 验收结果记录
| 用例 | 期望 | 实际 | 结论 |
|------|------|------|------|
| UC-01(未传 floorIds,策略启用) | floorList 与 allow_zone_ids 求交 | `____` | 通过/不通过 |
| UC-01(交集为空) | 返回 `76260532` | `____` | 通过/不通过 |
| UC-02(显式传 floorIds | 不受策略表影响 | `____` | 通过/不通过 |
| 无策略租户回归 | 行为与升级前一致 | `____` | 通过/不通过 |
---
## 5. 回滚判定
- [ ] 无需回滚,发布成功
- [ ] 需要回滚应用(原因:`________________`
- [ ] 需要回滚数据/策略(原因:`________________`
回滚执行记录(如发生):`______________________________________________`
---
## 6. 签字确认
| 角色 | 姓名 | 日期 | 备注 |
|------|------|------|------|
| 甲方确认 | `____________` | `____` | `____` |
| 乙方实施 | `____________` | `____` | `____` |
| 乙方复核 | `____________` | `____` | `____` |