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 ("\n 1. 提交审批申请..." );
149+ String spNo = submitApprovalApplication ();
150+
151+ // 2. 获取审批详情
152+ System .out .println ("\n 2. 获取审批详情..." );
153+ getApprovalDetails (spNo );
154+
155+ // 3. 批量获取审批信息
156+ System .out .println ("\n 3. 批量获取审批信息..." );
157+ batchGetApprovalInfo ();
158+
159+ // 4. 模板管理
160+ System .out .println ("\n 4. 模板管理..." );
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