Server
esign-helper-server 是独立可部署的 e签宝服务模块。
它的定位不是重复造一套 e签宝逻辑,而是把自身内置的核心能力服务化输出,让多个业务系统通过统一 HTTP 接口共享同一套能力。
1. 模块定位
这个模块主要面向两类团队:
- 想把 e签宝能力做成统一微服务的平台团队
- 不希望每个业务系统都各自重复接入 e签宝 的组织
它适合:
- 单实例部署
- 多实例集群部署
- 接在网关、SLB、Ingress 后统一暴露
它不适合:
- 当作核心能力研发模块继续堆业务逻辑
- 在这里继续堆叠业务系统私有逻辑
2. 产品价值
从产品角度看,esign-helper-server 的意义在于:
- 统一对外接口
- 统一回调入口
- 统一数据库口径
- 统一升级节奏
- 统一日志与运维边界
- 统一管理面板与巡检入口
这对多系统组织特别重要,因为平台一旦形成,后续新增系统就不需要再在每个系统里重新接一次 e签宝。
3. 模块结构
esign-helper-server
├─ README.md
├─ pom.xml
└─ src
├─ main
│ ├─ java/top/qnmdmyy/server
│ └─ resources
└─ test关键类:
流程创建接口: EsignFlowCommandController.java
流程查询接口: EsignFlowQueryController.java
服务信息接口: ServiceInfoController.java
持久化保护: ServerPersistenceGuard.java
server 自带 DDL: META-INF/esign-ddl
4. 当前提供的接口
server 现在对外同时暴露两层接口:
- 集成层接口:面向“业务系统通过 businessId / tenantCode / systemCode 发起并归档流程”
- 能力层接口:面向“直接把 server 内置能力域 HTTP 化输出”
4.1 集成层流程接口
POST /api/esign/flows/filePOST /api/esign/flows/templateGET /api/esign/flows/{signFlowId}GET /api/esign/flows?tenantCode=...&systemCode=...&businessId=...
4.2 能力域 HTTP 接口
已补齐的主要能力域:
authaccountsealmembercontractFileflowTemplatecontractManagemententerpriseConsolecatalograw
代表性接口:
POST /api/esign/auth/person-auth-urlGET /api/esign/auth/persons/identity-infoPOST /api/esign/accounts/personsPOST /api/esign/seals/organization-templateGET /api/esign/organizations/{orgId}/membersPOST /api/esign/files/upload-urlPOST /api/esign/sign-flows/create-by-filePOST /api/esign/sign-flows/create-by-sign-templatePOST /api/esign/sign-flows/{signFlowId}/signers/sign-fieldsPOST /api/esign/evidence/reportsGET /api/esign/workspaces/{orgId}GET /api/esign/catalog/capability-groupsPOST /api/esign/raw/invoke
4.3 回调入口
POST /esign/callback/sign-notifyPOST /esign/auth/notifyGET /esign/auth/redirectPOST /esign/auth/redirect
4.4 服务信息与管理面板
GET /api/esign/service/infoGET /admin/esignGET /admin/esign/dashboard
管理面板基于 thymeleaf 构建,当前展示:
- 服务实例信息
- 流程总量、运行中、已完成统计
- 任务总量
- API 调用成功/失败统计
- 最近流程
- 最近任务
- 最近 API 调用日志
5. 为什么 server 必须用共享持久化
这是本模块最重要的设计前提。
5.1 原因
服务化以后,流程和资源都是“共享状态”:
- 回调可能打到 A 节点
- 查询可能落到 B 节点
- 某些资源归档可能在 C 节点执行
如果你还用内存仓储,就会出现:
- 数据在不同实例之间不一致
- 节点重启后数据丢失
- 集群下状态漂移
5.2 保护机制
server 启动时会通过 ServerPersistenceGuard.java 强制校验:
- 流程仓储不能是内存实现
- 任务仓储不能是内存实现
- 主体、资源、账号、授权、出证相关仓储也不能是内存实现
也就是说,server 的定位就是:
必须基于共享数据库运行
6. 如何运行
6.1 Maven 运行
mvn -q -f esign-helper-server/pom.xml spring-boot:run6.2 打包
mvn -q -f esign-helper-server/pom.xml package6.3 最小配置
通常至少需要:
esign:
enabled: true
app-id: your-app-id
app-secret: your-app-secret
host: https://openapi.esign.cn
default-tenant-code: DEFAULT_TENANT
default-system-code: DEFAULT
callback-endpoint-enabled: true
callback-path: /esign/callback/sign-notify
auth-callback-endpoint-enabled: true
auth-notify-path: /esign/auth/notify
auth-redirect-path: /esign/auth/redirect同时你还需要一个共享数据库。
server 启动后会自动自检当前数据源类型,并根据 JDBC 连接识别为:
- MySQL
- PostgreSQL
- Oracle
- SQL Server
随后加载 server 自带的对应完整 DDL,对缺失的默认表和索引执行补建; 如果对象已经存在,则直接跳过,不会重复创建。
默认情况下,server 已经把 Hibernate 自动建表关闭,改由这套启动自检机制负责默认表初始化。
如果你准备直接使用管理面板,建议保持 API 调用日志开启:
esign:
api-log-enabled: true补充说明:
callback-path用于签署流程回调。auth-notify-path/auth-redirect-path用于授权NotifyUrl/RedirectUrl。- 如果你只是想换 server 对外暴露的授权回调地址,可以直接改这两个配置,默认归档逻辑仍然会保留。
7. 数据库建议
7.1 新服务初始化
如果是新部署的 server,现在有两种推荐方式:
- 默认方式:直接依赖 server 启动期自检自动补齐默认表结构
- 治理方式:在正式生产库里用 Flyway 显式管理表结构升级
其中启动自检适合:
- 新环境首次落地
- 本地联调
- 测试环境快速起服务
它会自动补齐的默认对象包括当前内置的 15 张表,以及对应的常用索引,例如:
ESIGN_FLOWESIGN_FLOW_TASKESIGN_PSN_IDENTITYESIGN_ORG_IDENTITYESIGN_SEALESIGN_MEMBERESIGN_TEMPLATEESIGN_FILEESIGN_FLOW_DETAILESIGN_PSN_ACCOUNTESIGN_ORG_ACCOUNTESIGN_PSN_AUTHESIGN_ORG_AUTHESIGN_EVIDENCE_REPORTESIGN_API_CALL_LOG
需要说明的是:
- 如果表不存在,会自动创建
- 如果独立索引不存在,会自动补齐
- 如果表已经存在,则不会对已有表做侵入式
ALTER - 对于生产环境的结构演进,仍然推荐后续接入 Flyway 做显式版本治理
推荐阅读:
7.2 表结构说明
推荐阅读:
8. 单机与集群部署建议
8.1 单机部署
适合:
- 内部测试
- 小流量场景
- 平台试运行
要求:
- 仍然要有共享数据库
8.2 集群部署
适合:
- 多业务系统统一接入
- 流量较大
- 需要横向扩容
建议:
- 所有实例使用同一数据库
- 所有实例使用同一套 e签宝应用配置
- 统一通过网关暴露签署回调与授权回调入口
- 配健康检查和实例摘除
9. 产品边界
server 和 starter 是两个互相独立的产品模块。
可以理解为:
starter:适合嵌入业务系统的本地集成形态server:适合统一部署、统一运维的远程服务形态
二者的原则是:
- 常规 e签宝能力尽量保持功能对齐
- 各自拥有独立源码、独立资源、独立构建与运行链路
- 只有像 dashboard 这类明显只适合服务端的能力,才允许只存在于
server
10. 面向开发者的推荐阅读顺序
如果你要维护这个模块,建议按下面顺序看:
- EsignHelperServerApplication.java
- EsignFlowCommandController.java
- EsignFlowQueryController.java
- ServiceInfoController.java
- AdminPanelController.java
- ServerPersistenceGuard.java
- 最后再回看 ServerDefaultSchemaInitializer.java 和 ServerPersistenceGuard.java,把启动建表与共享持久化约束串起来理解
11. 测试
关键测试:
运行:
mvn -q -f esign-helper-server/pom.xml test补充说明:
server和starter处于同一个仓库,但彼此独立构建。- 服务化运行、打包和测试都应直接针对
esign-helper-server/pom.xml执行。
12. 结论
如果一句话概括:
esign-helper-server 是一个可独立部署、可统一运维、可支撑单机与集群的 e签宝平台服务模块。