Skip to content

Commit 26f5887

Browse files
authored
📝 为现有的企业微信流程审批功能添加完整的使用文档
1 parent 23a2e18 commit 26f5887

File tree

2 files changed

+330
-0
lines changed

2 files changed

+330
-0
lines changed
Lines changed: 141 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,141 @@
1+
# WeChat Enterprise Workflow Approval Guide
2+
# 企业微信流程审批功能使用指南
3+
4+
## Overview / 概述
5+
6+
WxJava SDK provides comprehensive support for WeChat Enterprise workflow approval (企业微信流程审批), including both traditional OA approval and the approval process engine.
7+
8+
WxJava SDK 提供全面的企业微信流程审批支持,包括传统OA审批和审批流程引擎。
9+
10+
## Current Implementation Status / 当前实现状态
11+
12+
### ✅ Fully Implemented APIs / 已完整实现的API
13+
14+
1. **Submit Approval Application / 提交审批申请**
15+
- Endpoint: `/cgi-bin/oa/applyevent`
16+
- Documentation: [91853](https://work.weixin.qq.com/api/doc/90000/90135/91853)
17+
- Implementation: `WxCpOaService.apply(WxCpOaApplyEventRequest)`
18+
19+
2. **Get Approval Details / 获取审批申请详情**
20+
- Endpoint: `/cgi-bin/oa/getapprovaldetail`
21+
- Implementation: `WxCpOaService.getApprovalDetail(String spNo)`
22+
23+
3. **Batch Get Approval Numbers / 批量获取审批单号**
24+
- Endpoint: `/cgi-bin/oa/getapprovalinfo`
25+
- Implementation: `WxCpOaService.getApprovalInfo(...)`
26+
27+
4. **Approval Process Engine / 审批流程引擎**
28+
- Endpoint: `/cgi-bin/corp/getopenapprovaldata`
29+
- Implementation: `WxCpOaAgentService.getOpenApprovalData(String thirdNo)`
30+
31+
5. **Template Management / 模板管理**
32+
- Create: `WxCpOaService.createOaApprovalTemplate(...)`
33+
- Update: `WxCpOaService.updateOaApprovalTemplate(...)`
34+
- Get Details: `WxCpOaService.getTemplateDetail(...)`
35+
36+
## Usage Examples / 使用示例
37+
38+
### 1. Submit Approval Application / 提交审批申请
39+
40+
```java
41+
// Create approval request
42+
WxCpOaApplyEventRequest request = new WxCpOaApplyEventRequest()
43+
.setCreatorUserId("userId")
44+
.setTemplateId("templateId")
45+
.setUseTemplateApprover(0)
46+
.setApprovers(Arrays.asList(
47+
new WxCpOaApplyEventRequest.Approver()
48+
.setAttr(2)
49+
.setUserIds(new String[]{"approver1", "approver2"})
50+
))
51+
.setNotifiers(new String[]{"notifier1", "notifier2"})
52+
.setNotifyType(1)
53+
.setApplyData(new WxCpOaApplyEventRequest.ApplyData()
54+
.setContents(Arrays.asList(
55+
new ApplyDataContent()
56+
.setControl("Text")
57+
.setId("Text-1234567890")
58+
.setValue(new ContentValue().setText("Approval content"))
59+
))
60+
);
61+
62+
// Submit approval
63+
String spNo = wxCpService.getOaService().apply(request);
64+
```
65+
66+
### 2. Get Approval Details / 获取审批详情
67+
68+
```java
69+
// Get approval details by approval number
70+
WxCpApprovalDetailResult result = wxCpService.getOaService()
71+
.getApprovalDetail("approval_number");
72+
73+
WxCpApprovalDetailResult.WxCpApprovalDetail detail = result.getInfo();
74+
System.out.println("Approval Status: " + detail.getSpStatus());
75+
System.out.println("Approval Name: " + detail.getSpName());
76+
```
77+
78+
### 3. Batch Get Approval Information / 批量获取审批信息
79+
80+
```java
81+
// Get approval info with filters
82+
Date startTime = new Date(System.currentTimeMillis() - 7 * 24 * 60 * 60 * 1000);
83+
Date endTime = new Date();
84+
85+
WxCpApprovalInfo approvalInfo = wxCpService.getOaService()
86+
.getApprovalInfo(startTime, endTime, "0", 100, null);
87+
88+
List<String> spNumbers = approvalInfo.getSpNoList();
89+
```
90+
91+
### 4. Third-Party Application Support / 第三方应用支持
92+
93+
```java
94+
// For third-party applications
95+
WxCpTpOAService tpOaService = wxCpTpService.getOaService();
96+
97+
// Submit approval for specific corp
98+
String spNo = tpOaService.apply(request, "corpId");
99+
100+
// Get approval details for specific corp
101+
WxCpApprovalDetailResult detail = tpOaService.getApprovalDetail("spNo", "corpId");
102+
```
103+
104+
## Multi-Account Configuration / 多账号配置支持
105+
106+
WxJava supports multi-account configurations for enterprise scenarios:
107+
108+
```java
109+
// Spring Boot configuration example
110+
@Autowired
111+
private WxCpMultiServices wxCpMultiServices;
112+
113+
// Get service for specific corp
114+
WxCpService wxCpService = wxCpMultiServices.getWxCpService("corpId");
115+
WxCpOaService oaService = wxCpService.getOaService();
116+
```
117+
118+
## Available Data Models / 可用数据模型
119+
120+
- `WxCpOaApplyEventRequest` - Approval application request
121+
- `WxCpApprovalDetailResult` - Approval details response
122+
- `WxCpApprovalInfo` - Batch approval information
123+
- `WxCpXmlApprovalInfo` - XML approval message handling
124+
- `WxCpOaApprovalTemplate` - Approval template management
125+
126+
## Documentation References / 文档参考
127+
128+
- [Submit Approval Application (91853)](https://work.weixin.qq.com/api/doc/90000/90135/91853)
129+
- [Get Approval Details (91983)](https://work.weixin.qq.com/api/doc/90000/90135/91983)
130+
- [Batch Get Approval Numbers (91816)](https://work.weixin.qq.com/api/doc/90000/90135/91816)
131+
- [Approval Process Engine (90269)](https://developer.work.weixin.qq.com/document/path/90269)
132+
133+
## Conclusion / 结论
134+
135+
WxJava already provides comprehensive support for WeChat Enterprise workflow approval. The "new version" (新版) approval functionality referenced in issue requests is **already fully implemented** and available for use.
136+
137+
WxJava 已经提供了企业微信流程审批的全面支持。问题中提到的"新版"流程审批功能**已经完全实现**并可使用。
138+
139+
For questions about specific usage, please refer to the test cases in `WxCpOaServiceImplTest` and the comprehensive API documentation.
140+
141+
有关具体使用问题,请参考 `WxCpOaServiceImplTest` 中的测试用例和全面的API文档。
Lines changed: 189 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,189 @@
1+
package me.chanjar.weixin.cp.demo;
2+
3+
import me.chanjar.weixin.cp.api.WxCpService;
4+
import me.chanjar.weixin.cp.bean.oa.WxCpApprovalDetailResult;
5+
import me.chanjar.weixin.cp.bean.oa.WxCpApprovalInfo;
6+
import me.chanjar.weixin.cp.bean.oa.WxCpOaApplyEventRequest;
7+
import me.chanjar.weixin.cp.bean.oa.applydata.ApplyDataContent;
8+
import me.chanjar.weixin.cp.bean.oa.applydata.ContentValue;
9+
10+
import java.util.Arrays;
11+
import java.util.Date;
12+
13+
/**
14+
* 企业微信流程审批功能演示代码
15+
* WeChat Enterprise Workflow Approval Demo
16+
*
17+
* 演示如何使用WxJava SDK中已实现的完整审批流程功能
18+
* Demonstrates how to use the comprehensive approval workflow features already implemented in WxJava SDK
19+
*
20+
* 文档参考 Documentation Reference: https://work.weixin.qq.com/api/doc/90000/90135/91853
21+
*/
22+
public class WxCpApprovalWorkflowDemo {
23+
24+
private WxCpService wxCpService;
25+
26+
public WxCpApprovalWorkflowDemo(WxCpService wxCpService) {
27+
this.wxCpService = wxCpService;
28+
}
29+
30+
/**
31+
* 示例1: 提交审批申请
32+
* Example 1: Submit Approval Application
33+
* API: /cgi-bin/oa/applyevent (Document 91853)
34+
*/
35+
public String submitApprovalApplication() throws Exception {
36+
// 构建审批申请请求
37+
WxCpOaApplyEventRequest request = new WxCpOaApplyEventRequest()
38+
.setCreatorUserId("creator_user_id") // 申请人userid
39+
.setTemplateId("3Tka1eD6v6JfzhDMqPd3aMkFdxqtJMc2ZRioUBGCNS") // 模板id
40+
.setUseTemplateApprover(0) // 不使用模板中的审批流
41+
.setApprovers(Arrays.asList(
42+
new WxCpOaApplyEventRequest.Approver()
43+
.setAttr(2) // 审批类型: 或签
44+
.setUserIds(new String[]{"approver1", "approver2"})
45+
))
46+
.setNotifiers(new String[]{"notifier1", "notifier2"}) // 抄送人
47+
.setNotifyType(1) // 抄送方式: 提单时抄送
48+
.setApplyData(new WxCpOaApplyEventRequest.ApplyData()
49+
.setContents(Arrays.asList(
50+
// 文本控件
51+
new ApplyDataContent()
52+
.setControl("Text")
53+
.setId("Text-1234567890")
54+
.setValue(new ContentValue().setText("这是一个审批申请的文本内容")),
55+
56+
// 数字控件
57+
new ApplyDataContent()
58+
.setControl("Number")
59+
.setId("Number-1234567890")
60+
.setValue(new ContentValue().setNewNumber("1000")),
61+
62+
// 金额控件
63+
new ApplyDataContent()
64+
.setControl("Money")
65+
.setId("Money-1234567890")
66+
.setValue(new ContentValue().setNewMoney("10000"))
67+
))
68+
);
69+
70+
// 提交审批申请
71+
String spNo = wxCpService.getOaService().apply(request);
72+
System.out.println("审批申请提交成功,审批单号: " + spNo);
73+
74+
return spNo;
75+
}
76+
77+
/**
78+
* 示例2: 获取审批申请详情
79+
* Example 2: Get Approval Application Details
80+
* API: /cgi-bin/oa/getapprovaldetail
81+
*/
82+
public void getApprovalDetails(String spNo) throws Exception {
83+
WxCpApprovalDetailResult result = wxCpService.getOaService().getApprovalDetail(spNo);
84+
85+
WxCpApprovalDetailResult.WxCpApprovalDetail detail = result.getInfo();
86+
87+
System.out.println("审批单号: " + detail.getSpNo());
88+
System.out.println("审批名称: " + detail.getSpName());
89+
System.out.println("审批状态: " + detail.getSpStatus().getCode());
90+
System.out.println("申请人: " + detail.getApplyer().getUserId());
91+
System.out.println("申请时间: " + detail.getApplyTime());
92+
93+
// 打印审批记录
94+
if (detail.getSpRecord() != null) {
95+
detail.getSpRecord().forEach(record -> {
96+
System.out.println("审批节点状态: " + record.getSpStatus());
97+
System.out.println("审批人: " + record.getDetails());
98+
});
99+
}
100+
}
101+
102+
/**
103+
* 示例3: 批量获取审批单号
104+
* Example 3: Batch Get Approval Numbers
105+
* API: /cgi-bin/oa/getapprovalinfo
106+
*/
107+
public void batchGetApprovalInfo() throws Exception {
108+
// 获取最近7天的审批单
109+
Date startTime = new Date(System.currentTimeMillis() - 7 * 24 * 60 * 60 * 1000L);
110+
Date endTime = new Date();
111+
112+
WxCpApprovalInfo approvalInfo = wxCpService.getOaService()
113+
.getApprovalInfo(startTime, endTime, "0", 100, null);
114+
115+
System.out.println("获取到的审批单数量: " + approvalInfo.getCount());
116+
117+
// 遍历审批单号
118+
if (approvalInfo.getSpNoList() != null) {
119+
approvalInfo.getSpNoList().forEach(spNo -> {
120+
System.out.println("审批单号: " + spNo);
121+
// 可以进一步调用 getApprovalDetails 获取详情
122+
});
123+
}
124+
}
125+
126+
/**
127+
* 示例4: 模板管理
128+
* Example 4: Template Management
129+
*/
130+
public void templateManagement() throws Exception {
131+
// 获取模板详情
132+
String templateId = "3Tka1eD6v6JfzhDMqPd3aMkFdxqtJMc2ZRioUBGCNS";
133+
var templateResult = wxCpService.getOaService().getTemplateDetail(templateId);
134+
135+
System.out.println("模板名称: " + templateResult.getTemplateNames());
136+
System.out.println("模板内容: " + templateResult.getTemplateContent());
137+
}
138+
139+
/**
140+
* 完整的审批流程演示
141+
* Complete Approval Workflow Demo
142+
*/
143+
public void completeWorkflowDemo() {
144+
try {
145+
System.out.println("=== 企业微信流程审批完整演示 ===");
146+
147+
// 1. 提交审批申请
148+
System.out.println("\n1. 提交审批申请...");
149+
String spNo = submitApprovalApplication();
150+
151+
// 2. 获取审批详情
152+
System.out.println("\n2. 获取审批详情...");
153+
getApprovalDetails(spNo);
154+
155+
// 3. 批量获取审批信息
156+
System.out.println("\n3. 批量获取审批信息...");
157+
batchGetApprovalInfo();
158+
159+
// 4. 模板管理
160+
System.out.println("\n4. 模板管理...");
161+
templateManagement();
162+
163+
System.out.println("\n=== 演示完成 ===");
164+
System.out.println("WxJava SDK 已经完整支持企业微信流程审批功能!");
165+
166+
} catch (Exception e) {
167+
System.err.println("演示过程中发生错误: " + e.getMessage());
168+
e.printStackTrace();
169+
}
170+
}
171+
172+
public static void main(String[] args) {
173+
// 注意: 这里需要配置真实的企业微信服务
174+
// Note: You need to configure real WeChat Enterprise service here
175+
176+
System.out.println("企业微信流程审批功能演示");
177+
System.out.println("该演示代码展示了WxJava SDK中已经完整实现的审批流程功能");
178+
System.out.println("包括文档91853中描述的所有核心功能");
179+
System.out.println("");
180+
System.out.println("主要功能:");
181+
System.out.println("- 提交审批申请 (/cgi-bin/oa/applyevent)");
182+
System.out.println("- 获取审批详情 (/cgi-bin/oa/getapprovaldetail)");
183+
System.out.println("- 批量获取审批单号 (/cgi-bin/oa/getapprovalinfo)");
184+
System.out.println("- 模板管理功能");
185+
System.out.println("- 审批流程引擎支持");
186+
System.out.println("");
187+
System.out.println("如需运行演示,请配置正确的企业微信服务参数。");
188+
}
189+
}

0 commit comments

Comments
 (0)