Skip to content

Commit 1b62b6e

Browse files
committed
feat(cp): add second batch of wedoc oa apis
1 parent 70870bf commit 1b62b6e

File tree

12 files changed

+688
-0
lines changed

12 files changed

+688
-0
lines changed

weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/WxCpOaWeDocService.java

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import me.chanjar.weixin.cp.bean.WxCpBaseResp;
66
import me.chanjar.weixin.cp.bean.oa.doc.*;
77

8+
import java.io.File;
9+
810
/**
911
* 企业微信文档相关接口.
1012
* <a href="https://developer.work.weixin.qq.com/document/path/97392">文档</a>
@@ -179,6 +181,71 @@ public interface WxCpOaWeDocService {
179181
*/
180182
WxCpDocSheetData getSheetRangeData(@NonNull WxCpDocSheetGetDataRequest request) throws WxErrorException;
181183

184+
/**
185+
* 获取文档数据
186+
* 该接口用于获取在线文档内容数据。
187+
* <p>
188+
* 请求方式:POST(HTTPS)
189+
* 请求地址: https://qyapi.weixin.qq.com/cgi-bin/wedoc/get_doc_data?access_token=ACCESS_TOKEN
190+
*
191+
* @param request 获取文档数据请求参数
192+
* @return 文档内容数据
193+
* @throws WxErrorException the wx error exception
194+
*/
195+
WxCpDocData docGetData(@NonNull WxCpDocGetDataRequest request) throws WxErrorException;
196+
197+
/**
198+
* 编辑文档内容
199+
* 该接口用于编辑在线文档内容。
200+
* <p>
201+
* 请求方式:POST(HTTPS)
202+
* 请求地址: https://qyapi.weixin.qq.com/cgi-bin/wedoc/mod_doc?access_token=ACCESS_TOKEN
203+
*
204+
* @param request 编辑文档内容请求参数
205+
* @return wx cp base resp
206+
* @throws WxErrorException the wx error exception
207+
*/
208+
WxCpBaseResp docModify(@NonNull WxCpDocModifyRequest request) throws WxErrorException;
209+
210+
/**
211+
* 上传文档图片
212+
* 该接口用于上传在线文档编辑时使用的图片资源。
213+
* <p>
214+
* 请求方式:POST(HTTPS)
215+
* 请求地址: https://qyapi.weixin.qq.com/cgi-bin/wedoc/upload_doc_image?access_token=ACCESS_TOKEN
216+
*
217+
* @param file 图片文件
218+
* @return 上传结果
219+
* @throws WxErrorException the wx error exception
220+
*/
221+
WxCpDocImageUploadResult docUploadImage(@NonNull File file) throws WxErrorException;
222+
223+
/**
224+
* 获取智能表格内容权限
225+
* 该接口用于获取智能表格字段/记录等内容权限信息。
226+
* <p>
227+
* 请求方式:POST(HTTPS)
228+
* 请求地址: https://qyapi.weixin.qq.com/cgi-bin/wedoc/smartsheet/get_sheet_auth?access_token=ACCESS_TOKEN
229+
*
230+
* @param request 智能表格内容权限请求
231+
* @return 智能表格内容权限
232+
* @throws WxErrorException the wx error exception
233+
*/
234+
WxCpDocSmartSheetAuth smartSheetGetAuth(@NonNull WxCpDocSmartSheetAuthRequest request) throws WxErrorException;
235+
236+
/**
237+
* 修改智能表格内容权限
238+
* 该接口用于修改智能表格字段/记录等内容权限信息。
239+
* <p>
240+
* 请求方式:POST(HTTPS)
241+
* 请求地址: https://qyapi.weixin.qq.com/cgi-bin/wedoc/smartsheet/mod_sheet_auth?access_token=ACCESS_TOKEN
242+
*
243+
* @param request 修改智能表格内容权限请求
244+
* @return wx cp base resp
245+
* @throws WxErrorException the wx error exception
246+
*/
247+
WxCpBaseResp smartSheetModifyAuth(@NonNull WxCpDocSmartSheetModifyAuthRequest request) throws WxErrorException;
248+
182249
/**
183250
* 创建收集表
184251
* 该接口用于创建收集表。

weixin-java-cp/src/main/java/me/chanjar/weixin/cp/api/impl/WxCpOaWeDocServiceImpl.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,15 @@
44
import lombok.NonNull;
55
import lombok.RequiredArgsConstructor;
66
import lombok.extern.slf4j.Slf4j;
7+
import me.chanjar.weixin.common.bean.CommonUploadParam;
78
import me.chanjar.weixin.common.error.WxErrorException;
89
import me.chanjar.weixin.cp.api.WxCpOaWeDocService;
910
import me.chanjar.weixin.cp.api.WxCpService;
1011
import me.chanjar.weixin.cp.bean.WxCpBaseResp;
1112
import me.chanjar.weixin.cp.bean.oa.doc.*;
1213

14+
import java.io.File;
15+
1316
import static me.chanjar.weixin.cp.constant.WxCpApiPathConsts.Oa.*;
1417

1518
/**
@@ -117,6 +120,41 @@ public WxCpDocSheetData getSheetRangeData(@NonNull WxCpDocSheetGetDataRequest re
117120
return WxCpDocSheetData.fromJson(responseContent);
118121
}
119122

123+
@Override
124+
public WxCpDocData docGetData(@NonNull WxCpDocGetDataRequest request) throws WxErrorException {
125+
String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(WEDOC_GET_DOC_DATA);
126+
String responseContent = this.cpService.post(apiUrl, request.toJson());
127+
return WxCpDocData.fromJson(responseContent);
128+
}
129+
130+
@Override
131+
public WxCpBaseResp docModify(@NonNull WxCpDocModifyRequest request) throws WxErrorException {
132+
String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(WEDOC_MOD_DOC);
133+
String responseContent = this.cpService.post(apiUrl, request.toJson());
134+
return WxCpBaseResp.fromJson(responseContent);
135+
}
136+
137+
@Override
138+
public WxCpDocImageUploadResult docUploadImage(@NonNull File file) throws WxErrorException {
139+
String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(WEDOC_UPLOAD_DOC_IMAGE);
140+
String responseContent = this.cpService.upload(apiUrl, CommonUploadParam.fromFile("media", file));
141+
return WxCpDocImageUploadResult.fromJson(responseContent);
142+
}
143+
144+
@Override
145+
public WxCpDocSmartSheetAuth smartSheetGetAuth(@NonNull WxCpDocSmartSheetAuthRequest request) throws WxErrorException {
146+
String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(WEDOC_SMARTSHEET_GET_SHEET_AUTH);
147+
String responseContent = this.cpService.post(apiUrl, request.toJson());
148+
return WxCpDocSmartSheetAuth.fromJson(responseContent);
149+
}
150+
151+
@Override
152+
public WxCpBaseResp smartSheetModifyAuth(@NonNull WxCpDocSmartSheetModifyAuthRequest request) throws WxErrorException {
153+
String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(WEDOC_SMARTSHEET_MOD_SHEET_AUTH);
154+
String responseContent = this.cpService.post(apiUrl, request.toJson());
155+
return WxCpBaseResp.fromJson(responseContent);
156+
}
157+
120158
@Override
121159
public WxCpFormCreateResult formCreate(@NonNull WxCpFormCreateRequest request) throws WxErrorException {
122160
String apiUrl = this.cpService.getWxCpConfigStorage().getApiUrl(WEDOC_CREATE_FORM);
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package me.chanjar.weixin.cp.bean.oa.doc;
2+
3+
import com.google.gson.JsonElement;
4+
import com.google.gson.annotations.SerializedName;
5+
import lombok.Data;
6+
import me.chanjar.weixin.cp.bean.WxCpBaseResp;
7+
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
8+
9+
import java.io.Serializable;
10+
11+
/**
12+
* 文档内容数据.
13+
*/
14+
@Data
15+
public class WxCpDocData extends WxCpBaseResp implements Serializable {
16+
private static final long serialVersionUID = -3853386375188518430L;
17+
18+
@SerializedName("docid")
19+
private String docId;
20+
21+
/**
22+
* 文档内容,保留为通用 JSON 结构以兼容块级内容格式。
23+
*/
24+
@SerializedName("content")
25+
private JsonElement content;
26+
27+
/**
28+
* 某些返回中使用 doc_content 命名。
29+
*/
30+
@SerializedName("doc_content")
31+
private JsonElement docContent;
32+
33+
@SerializedName("has_more")
34+
private Boolean hasMore;
35+
36+
@SerializedName("next_cursor")
37+
private String nextCursor;
38+
39+
public static WxCpDocData fromJson(String json) {
40+
return WxCpGsonBuilder.create().fromJson(json, WxCpDocData.class);
41+
}
42+
43+
@Override
44+
public String toJson() {
45+
return WxCpGsonBuilder.create().toJson(this);
46+
}
47+
}
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package me.chanjar.weixin.cp.bean.oa.doc;
2+
3+
import com.google.gson.JsonObject;
4+
import com.google.gson.annotations.SerializedName;
5+
import lombok.AllArgsConstructor;
6+
import lombok.Builder;
7+
import lombok.Data;
8+
import lombok.NoArgsConstructor;
9+
import lombok.experimental.Accessors;
10+
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
11+
12+
import java.io.Serializable;
13+
import java.util.Map;
14+
15+
/**
16+
* 获取文档数据请求.
17+
*/
18+
@Data
19+
@Builder
20+
@NoArgsConstructor
21+
@AllArgsConstructor
22+
@Accessors(chain = true)
23+
public class WxCpDocGetDataRequest implements Serializable {
24+
private static final long serialVersionUID = -1382929925556032978L;
25+
26+
/**
27+
* 文档 docid.
28+
*/
29+
@SerializedName("docid")
30+
private String docId;
31+
32+
/**
33+
* 透传扩展参数,便于兼容文档内容查询的游标/范围等字段。
34+
*/
35+
private transient JsonObject extra;
36+
37+
public static WxCpDocGetDataRequest fromJson(String json) {
38+
return WxCpGsonBuilder.create().fromJson(json, WxCpDocGetDataRequest.class);
39+
}
40+
41+
public String toJson() {
42+
JsonObject jsonObject = new JsonObject();
43+
jsonObject.addProperty("docid", this.docId);
44+
if (this.extra != null) {
45+
for (Map.Entry<String, com.google.gson.JsonElement> entry : this.extra.entrySet()) {
46+
jsonObject.add(entry.getKey(), entry.getValue());
47+
}
48+
}
49+
return WxCpGsonBuilder.create().toJson(jsonObject);
50+
}
51+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package me.chanjar.weixin.cp.bean.oa.doc;
2+
3+
import com.google.gson.annotations.SerializedName;
4+
import lombok.Data;
5+
import me.chanjar.weixin.cp.bean.WxCpBaseResp;
6+
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
7+
8+
import java.io.Serializable;
9+
10+
/**
11+
* 上传文档图片结果.
12+
*/
13+
@Data
14+
public class WxCpDocImageUploadResult extends WxCpBaseResp implements Serializable {
15+
private static final long serialVersionUID = -324580838619106032L;
16+
17+
@SerializedName("url")
18+
private String url;
19+
20+
@SerializedName("image_url")
21+
private String imageUrl;
22+
23+
@SerializedName("fileid")
24+
private String fileId;
25+
26+
@SerializedName("imageid")
27+
private String imageId;
28+
29+
@SerializedName("md5")
30+
private String md5;
31+
32+
public static WxCpDocImageUploadResult fromJson(String json) {
33+
return WxCpGsonBuilder.create().fromJson(json, WxCpDocImageUploadResult.class);
34+
}
35+
36+
@Override
37+
public String toJson() {
38+
return WxCpGsonBuilder.create().toJson(this);
39+
}
40+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package me.chanjar.weixin.cp.bean.oa.doc;
2+
3+
import com.google.gson.JsonElement;
4+
import com.google.gson.JsonObject;
5+
import com.google.gson.annotations.SerializedName;
6+
import lombok.AllArgsConstructor;
7+
import lombok.Builder;
8+
import lombok.Data;
9+
import lombok.NoArgsConstructor;
10+
import lombok.experimental.Accessors;
11+
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
12+
13+
import java.io.Serializable;
14+
import java.util.Map;
15+
16+
/**
17+
* 编辑文档内容请求.
18+
*/
19+
@Data
20+
@Builder
21+
@NoArgsConstructor
22+
@AllArgsConstructor
23+
@Accessors(chain = true)
24+
public class WxCpDocModifyRequest implements Serializable {
25+
private static final long serialVersionUID = -1239410717176267110L;
26+
27+
/**
28+
* 文档 docid.
29+
*/
30+
@SerializedName("docid")
31+
private String docId;
32+
33+
/**
34+
* 编辑动作集合或内容块,保留为通用 JSON 结构以兼容文档接口后续扩展。
35+
*/
36+
@SerializedName("requests")
37+
private JsonElement requests;
38+
39+
/**
40+
* 透传扩展参数。
41+
*/
42+
private transient JsonObject extra;
43+
44+
public static WxCpDocModifyRequest fromJson(String json) {
45+
return WxCpGsonBuilder.create().fromJson(json, WxCpDocModifyRequest.class);
46+
}
47+
48+
public String toJson() {
49+
JsonObject jsonObject = new JsonObject();
50+
jsonObject.addProperty("docid", this.docId);
51+
if (this.requests != null) {
52+
jsonObject.add("requests", this.requests);
53+
}
54+
if (this.extra != null) {
55+
for (Map.Entry<String, JsonElement> entry : this.extra.entrySet()) {
56+
jsonObject.add(entry.getKey(), entry.getValue());
57+
}
58+
}
59+
return WxCpGsonBuilder.create().toJson(jsonObject);
60+
}
61+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package me.chanjar.weixin.cp.bean.oa.doc;
2+
3+
import com.google.gson.JsonElement;
4+
import com.google.gson.annotations.SerializedName;
5+
import lombok.Data;
6+
import me.chanjar.weixin.cp.bean.WxCpBaseResp;
7+
import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
8+
9+
import java.io.Serializable;
10+
11+
/**
12+
* 智能表格内容权限信息.
13+
*/
14+
@Data
15+
public class WxCpDocSmartSheetAuth extends WxCpBaseResp implements Serializable {
16+
private static final long serialVersionUID = 6369842878363076286L;
17+
18+
@SerializedName("docid")
19+
private String docId;
20+
21+
@SerializedName("sheet_id")
22+
private String sheetId;
23+
24+
/**
25+
* 通用内容权限结构,兼容字段/记录权限等多种命名。
26+
*/
27+
@SerializedName("auth_info")
28+
private JsonElement authInfo;
29+
30+
@SerializedName("field_auth")
31+
private JsonElement fieldAuth;
32+
33+
@SerializedName("record_auth")
34+
private JsonElement recordAuth;
35+
36+
public static WxCpDocSmartSheetAuth fromJson(String json) {
37+
return WxCpGsonBuilder.create().fromJson(json, WxCpDocSmartSheetAuth.class);
38+
}
39+
40+
@Override
41+
public String toJson() {
42+
return WxCpGsonBuilder.create().toJson(this);
43+
}
44+
}

0 commit comments

Comments
 (0)