1. 剔除掉多余的文档以及标记

This commit is contained in:
chenbowen
2025-11-28 18:12:00 +08:00
parent 30bd4810f5
commit 0c22975df0
432 changed files with 705 additions and 1650200 deletions

View File

@@ -114,15 +114,21 @@ Controller 暴露的 REST 接口:
- IWorkUserInfoRespVO解析用户响应
- `userId` (String):从 iWork 响应中解析出的用户编号(如果能解析到)。
- `payload` / `rawBody`:原始返回信息。
- `success` / `message`:调用成功标志与提示信息。
- IWorkWorkflowCreateReqVO发起流程
- `requestName` (String):流程标题
- `workflowId` (Long):流程模板 ID可选缺省时使用配置的默认值)。
- `mainFields` (`List<IWorkFormFieldVO>`):主表字段集合
- `detailTables` (`List<IWorkDetailTableVO>`):明细表集合(可选)。
- `otherParams` / `formExtras`:额外参数,`formExtras` 会以 form-data 方式追加
- IWorkWorkflowCreateReqVO统一用印流程发起)
- `workflowId` (String):流程模板 ID必填不再回退到配置
- `jbr`用印申请人iWork 人员 ID必填)。
- `yybm`:用印部门 ID必填
- `fb`:用印单位/分部 ID必填)。
- `sqsj`申请时间yyyy-MM-dd必填
- `yyqx`:用印去向(必填)。
- `yyfkUrl`:用印依据附件 URL可选
- `yysy`:用印事由或摘要(可选)。
- `xyywjUrl`:用印材料附件 URL必填
- `yysx`:用印事项(必填)。
- `ywxtdjbh`:业务系统单据编号(必填,同时用于生成流程标题“用印-{ywxtdjbh}”)。
- 额外字段不再支持Service 会根据以上字段自动补齐固定流程类型 (`lclx=2979600781334966993`) 与签署动作 (`qsdz=CORPORATE`)。
- IWorkWorkflowVoidReqVO作废
- `requestId` (String):流程请求编号(必填)。
@@ -147,57 +153,34 @@ Controller 暴露的 REST 接口:
项目同时提供 `IWorkIntegrationService` Bean可直接注入并调用
```java
import com.zt.plat.module.system.controller.admin.integration.iwork.vo.IWorkDetailRecordVO;
import com.zt.plat.module.system.controller.admin.integration.iwork.vo.IWorkDetailTableVO;
import com.zt.plat.module.system.controller.admin.integration.iwork.vo.IWorkFormFieldVO;
import com.zt.plat.module.system.controller.admin.integration.iwork.vo.IWorkOperationRespVO;
import com.zt.plat.module.system.controller.admin.integration.iwork.vo.IWorkWorkflowCreateReqVO;
import com.zt.plat.module.system.service.integration.iwork.IWorkIntegrationService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import java.util.List;
@RequiredArgsConstructor
@Component
public class MyService {
private final IWorkIntegrationService iworkService;
public void startFlow() {
public void startSealFlow() {
IWorkWorkflowCreateReqVO req = new IWorkWorkflowCreateReqVO();
// 使用 application.yml 中配置的 app-id无需额外指定
req.setRequestName("测试-创建流程");
// 若需要覆盖配置的默认流程,可显式设置 workflowId
// req.setWorkflowId(54L);
// 主表字段
IWorkFormFieldVO nameField = new IWorkFormFieldVO();
nameField.setFieldName("name");
nameField.setFieldValue("张三");
IWorkFormFieldVO amountField = new IWorkFormFieldVO();
amountField.setFieldName("amount");
amountField.setFieldValue("1000");
req.setMainFields(List.of(nameField, amountField));
// 明细表(可选)
IWorkFormFieldVO detailField = new IWorkFormFieldVO();
detailField.setFieldName("itemName");
detailField.setFieldValue("办公用品");
IWorkDetailRecordVO record = new IWorkDetailRecordVO();
record.setRecordOrder(0);
record.setFields(List.of(detailField));
IWorkDetailTableVO detailTable = new IWorkDetailTableVO();
detailTable.setTableDBName("formtable_main_26_dt1");
detailTable.setRecords(List.of(record));
req.setDetailTables(List.of(detailTable));
req.setWorkflowId("54");
req.setJbr("1001");
req.setYybm("2001");
req.setFb("3001");
req.setSqsj("2025-01-01");
req.setYyqx("对外邮寄");
req.setYyfkUrl("https://files.example.com/evidence.pdf");
req.setYysy("与客户合同用印");
req.setXyywjUrl("https://files.example.com/contract.pdf");
req.setYysx("合同用印");
req.setYwxtdjbh("DJ-2025-0001");
IWorkOperationRespVO resp = iworkService.createWorkflow(req);
if (resp.isSuccess()) {
// 处理成功,例如记录 requestId
} else {
// 日志或重试
}
}
}
@@ -245,13 +228,22 @@ curl -X POST \
```bash
curl -X POST -H "Content-Type: application/json" -d '{
"requestName":"测试REST创建流程",
"workflowId":54,
"mainFields":[{"fieldName":"name","fieldValue":"张三"}],
"appId":"my-iwork-app"
"workflowId":"54",
"jbr":"1001",
"yybm":"2001",
"fb":"3001",
"sqsj":"2025-01-01",
"yyqx":"对外邮寄",
"yyfkUrl":"https://files.example.com/evidence.pdf",
"yysy":"与客户合同用印",
"xyywjUrl":"https://files.example.com/contract.pdf",
"yysx":"合同用印",
"ywxtdjbh":"DJ-2025-0001"
}' https://your-zt-server/admin-api/system/integration/iwork/workflow/create
```
> 说明:外部仍以 JSON 请求调用本服务,系统在向 iWork 转发时会自动将负载转换为 `application/x-www-form-urlencoded` 表单(含 `requestName`、`workflowId`、`mainData` 等字段)。
1. Void workflow
```bash
@@ -288,8 +280,9 @@ curl -X POST -H "Content-Type: application/json" -d '{
1. 请求构造
- JSON 请求使用 `application/json`,表单请求(如创建流程/作废)使用 `application/x-www-form-urlencoded`
- 认证 Header`IWorkProperties.Headers` 中的常量控制,固定键名为 `app-id``client-public-key``secret``token``time``user-id`
- 用户解析、作废等场景继续以 `application/json` 调用 iWork
- 用印流程发起在转发至 iWork 时改为 `application/x-www-form-urlencoded` 表单,请求正文包含 `requestName``workflowId` 及字符串化后的 `mainData`,与 iWork 网关当前要求保持一致
- 认证 Header`IWorkProperties.Headers` 中的常量控制,固定键名为 `app-id``client-public-key``secret``token``time``user-id`
1. 响应解析
@@ -306,9 +299,9 @@ curl -X POST -H "Content-Type: application/json" -d '{
- 场景:`app-id``client-public-key``user-id` 等关键字段没有配置或只包含空白字符。
- 处理:在 `application.yml` 或配置中心中补充对应字段,确保它们与 iWork 侧一致。
- 流程编号缺失IWORK_WORKFLOW_ID_MISSING
- 场景:请求体、凭证与全局配置均未提供流程模板编号
- 处理:在请求中指定 `workflowId`,或在配置中设置 `workflow-id` / 凭证级 `default-workflow-id`
- 用印必填字段缺失IWORK_SEAL_REQUIRED_FIELD_MISSING
- 场景:`workflowId``jbr``yybm``fb``sqsj``yyqx``xyywjUrl``yysx``ywxtdjbh` 等任一字段为空
- 处理:根据返回的字段名称补齐相应值后重新发起
- RSA 加密/注册/申请 token 失败IWORK_REGISTER_FAILED / IWORK_APPLY_TOKEN_FAILED / IWORK_REMOTE_REQUEST_FAILED
- 处理:通过日志查看 iWork 返回的 HTTP 状态码与 body确认请求头/路径/参数是否匹配 iWork 网关要求。

View File

@@ -104,10 +104,15 @@ databus:
nonce-ttl-seconds: 600
require-body-encryption: true
encrypt-response: true
gateway:
web-client:
connection-pool-enabled: true # 默认启用 Reactor Netty 连接池,可在排查连接复用/长连接异常时设为 false
```
> `GatewaySecurityFilter` 会自动注册到最高优先级 +10确保该路径的请求先经过安全校验。
关闭连接池后,每次 HTTP Step 请求都会新建 TCP 连接,适合短期定位“连接被复用导致 Reset/超时”的场景,但会带来额外的握手开销;切换时可关注启动日志中的 `Databus gateway WebClient pooling` 提示。
## 8. 第三方调用流程详解
### 8.1 前置准备
@@ -135,7 +140,7 @@ databus:
#### 签名字段示例
```
```text
appId=demo-app
&body={"orderNo":"SO20251120001"}
&nonce=0c5e2df9a1