add(String collection, List list) throws WxErrorException;
+
+ String add(String collection, Object obj) throws WxErrorException;
+
+ JsonArray databaseAdd(String query) throws WxErrorException;
+
/**
*
* 数据库插入记录
@@ -65,6 +74,10 @@ public interface WxMaCloudService {
*/
JsonArray databaseAdd(String env, String query) throws WxErrorException;
+ Integer delete(String collection, String whereJson) throws WxErrorException;
+
+ int databaseDelete(String query) throws WxErrorException;
+
/**
*
* 数据库删除记录
@@ -80,6 +93,10 @@ public interface WxMaCloudService {
*/
int databaseDelete(String env, String query) throws WxErrorException;
+ WxCloudDatabaseUpdateResult update(String collection, String whereJson, String updateJson) throws WxErrorException;
+
+ WxCloudDatabaseUpdateResult databaseUpdate(String query) throws WxErrorException;
+
/**
*
* 数据库更新记录
@@ -95,6 +112,29 @@ public interface WxMaCloudService {
*/
WxCloudDatabaseUpdateResult databaseUpdate(String env, String query) throws WxErrorException;
+ /**
+ * db.collection('geo')
+ * .where({
+ * price: _.gt(10)
+ * })
+ * .orderBy('_id', 'asc')
+ * .orderBy('price', 'desc')
+ * .skip(1)
+ * .limit(10)
+ * .get()
+ * @param collection
+ * @param whereJson
+ * @param orderBy
+ * @param skip
+ * @param limit
+ * @return
+ * @throws WxErrorException
+ */
+ WxCloudDatabaseQueryResult query(String collection, String whereJson, Map orderBy,
+ Integer skip, Integer limit) throws WxErrorException;
+
+ WxCloudDatabaseQueryResult databaseQuery(String query) throws WxErrorException;
+
/**
*
* 数据库查询记录
@@ -110,6 +150,8 @@ public interface WxMaCloudService {
*/
WxCloudDatabaseQueryResult databaseQuery(String env, String query) throws WxErrorException;
+ JsonArray databaseAggregate(String query) throws WxErrorException;
+
/**
*
* 数据库聚合记录
@@ -125,6 +167,10 @@ public interface WxMaCloudService {
*/
JsonArray databaseAggregate(String env, String query) throws WxErrorException;
+ Long count(String collection, String whereJson) throws WxErrorException;
+
+ Long databaseCount(String query) throws WxErrorException;
+
/**
*
* 统计集合记录数或统计查询语句对应的结果记录数
@@ -140,6 +186,9 @@ public interface WxMaCloudService {
*/
Long databaseCount(String env, String query) throws WxErrorException;
+ void updateIndex(String collectionName, List createIndexes,
+ List dropIndexNames) throws WxErrorException;
+
/**
*
* 变更数据库索引
@@ -157,11 +206,15 @@ public interface WxMaCloudService {
void updateIndex(String env, String collectionName, List createIndexes,
List dropIndexNames) throws WxErrorException;
+ Long databaseMigrateImport(String collectionName, String filePath, int fileType,
+ boolean stopOnError, int conflictMode) throws WxErrorException;
+
/**
*
* 数据库导入
*
- * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/database/databaseMigrateImport.html
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/database/databaseMigrateImport
+ * .html
* 请求地址: POST https://api.weixin.qq.com/tcb/databasemigrateimport?access_token=ACCESS_TOKEN
*
*
@@ -177,11 +230,14 @@ public interface WxMaCloudService {
Long databaseMigrateImport(String env, String collectionName, String filePath, int fileType, boolean stopOnError,
int conflictMode) throws WxErrorException;
+ Long databaseMigrateExport(String filePath, int fileType, String query) throws WxErrorException;
+
/**
*
* 数据库导出
*
- * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/database/databaseMigrateExport.html
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/database/databaseMigrateExport
+ * .html
* 请求地址: POST https://api.weixin.qq.com/tcb/databasemigrateexport?access_token=ACCESS_TOKEN
*
*
@@ -194,11 +250,14 @@ public interface WxMaCloudService {
*/
Long databaseMigrateExport(String env, String filePath, int fileType, String query) throws WxErrorException;
+ WxCloudCloudDatabaseMigrateQueryInfoResult databaseMigrateQueryInfo(Long jobId) throws WxErrorException;
+
/**
*
* 数据库迁移状态查询
*
- * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/database/databaseMigrateQueryInfo.html
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/database
+ * /databaseMigrateQueryInfo.html
* 请求地址:POST https://api.weixin.qq.com/tcb/databasemigratequeryinfo?access_token=ACCESS_TOKEN
*
*
@@ -209,6 +268,8 @@ public interface WxMaCloudService {
*/
WxCloudCloudDatabaseMigrateQueryInfoResult databaseMigrateQueryInfo(String env, Long jobId) throws WxErrorException;
+ WxCloudUploadFileResult uploadFile(String path) throws WxErrorException;
+
/**
*
* 获取文件上传链接
@@ -225,6 +286,8 @@ public interface WxMaCloudService {
*/
WxCloudUploadFileResult uploadFile(String env, String path) throws WxErrorException;
+ WxCloudBatchDownloadFileResult batchDownloadFile(String[] fileIds, long[] maxAges) throws WxErrorException;
+
/**
*
* 获取文件下载链接
@@ -242,6 +305,8 @@ public interface WxMaCloudService {
*/
WxCloudBatchDownloadFileResult batchDownloadFile(String env, String[] fileIds, long[] maxAges) throws WxErrorException;
+ WxCloudBatchDeleteFileResult batchDeleteFile(String[] fileIds) throws WxErrorException;
+
/**
*
* 删除文件
@@ -272,11 +337,14 @@ public interface WxMaCloudService {
*/
WxCloudGetQcloudTokenResult getQcloudToken(long lifeSpan) throws WxErrorException;
+ void databaseCollectionAdd(String collectionName) throws WxErrorException;
+
/**
*
* 新增集合
*
- * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/database/databaseCollectionAdd.html
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/database/databaseCollectionAdd
+ * .html
* 请求地址:POST https://api.weixin.qq.com/tcb/databasecollectionadd?access_token=ACCESS_TOKEN
*
*
@@ -286,11 +354,14 @@ public interface WxMaCloudService {
*/
void databaseCollectionAdd(String env, String collectionName) throws WxErrorException;
+ void databaseCollectionDelete(String collectionName) throws WxErrorException;
+
/**
*
* 删除集合
*
- * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/database/databaseCollectionDelete.html
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/database
+ * /databaseCollectionDelete.html
* 请求地址:POST https://api.weixin.qq.com/tcb/databasecollectionadd?access_token=ACCESS_TOKEN
*
*
@@ -300,17 +371,20 @@ public interface WxMaCloudService {
*/
void databaseCollectionDelete(String env, String collectionName) throws WxErrorException;
+ WxCloudDatabaseCollectionGetResult databaseCollectionGet(Long limit, Long offset) throws WxErrorException;
+
/**
*
* 获取特定云环境下集合信息
*
- * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/database/databaseCollectionGet.html
+ * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-http-api/database/databaseCollectionGet
+ * .html
* 请求地址:POST https://api.weixin.qq.com/tcb/databasecollectionget?access_token=ACCESS_TOKEN
*
*
- * @param env 云环境ID
- * @param limit 获取数量限制,默认值:10
- * @param offset 偏移量,默认值:0
+ * @param env 云环境ID
+ * @param limit 获取数量限制,默认值:10
+ * @param offset 偏移量,默认值:0
* @return .
* @throws WxErrorException .
*/
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaCloudServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaCloudServiceImpl.java
index f83a7bde..f01a87a1 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaCloudServiceImpl.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaCloudServiceImpl.java
@@ -3,20 +3,24 @@ package cn.binarywang.wx.miniapp.api.impl;
import cn.binarywang.wx.miniapp.api.WxMaCloudService;
import cn.binarywang.wx.miniapp.api.WxMaService;
import cn.binarywang.wx.miniapp.bean.cloud.*;
+import cn.binarywang.wx.miniapp.constant.WxMaConstants;
+import cn.binarywang.wx.miniapp.util.JoinerUtils;
+import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import com.google.gson.JsonArray;
+import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.common.error.WxError;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.util.json.WxGsonBuilder;
+import org.apache.commons.lang3.StringUtils;
import java.io.Serializable;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
/**
* 云开发相关接口实现类.
@@ -30,48 +34,225 @@ public class WxMaCloudServiceImpl implements WxMaCloudService {
private static final JsonParser JSON_PARSER = new JsonParser();
private final WxMaService wxMaService;
+ @Override
+ public String invokeCloudFunction(String name, String body) throws WxErrorException {
+ String cloudEnv = this.wxMaService.getWxMaConfig().getCloudEnv();
+ return invokeCloudFunction(cloudEnv, name, body);
+ }
+
@Override
public String invokeCloudFunction(String env, String name, String body) throws WxErrorException {
- final String response = this.wxMaService.post(String.format(INVOKE_CLOUD_FUNCTION_URL, env, name), body);
+ String cloudEnv = this.wxMaService.getWxMaConfig().getCloudEnv();
+ final String response = this.wxMaService.post(String.format(INVOKE_CLOUD_FUNCTION_URL, cloudEnv, name), body);
return JSON_PARSER.parse(response).getAsJsonObject().get("resp_data").getAsString();
}
+ @Override
+ public List add(String collection, List list) throws WxErrorException {
+
+ String jsonData = WxMaGsonBuilder.create().toJson(list);
+ String query = JoinerUtils.blankJoiner.join(
+ "db.collection('", collection, "')",
+ ".add({data: ", jsonData, "})");
+
+ JsonObject params = new JsonObject();
+ params.addProperty("env", this.wxMaService.getWxMaConfig().getCloudEnv());
+ params.addProperty("query", query);
+
+ String responseContent = wxMaService.post(DATABASE_ADD_URL, params.toString());
+ JsonElement tmpJsonElement = JSON_PARSER.parse(responseContent);
+ JsonObject jsonObject = tmpJsonElement.getAsJsonObject();
+ if (jsonObject.get(WxMaConstants.ERRCODE).getAsInt() != 0) {
+ throw new WxErrorException(WxError.fromJson(responseContent));
+ }
+ JsonArray idArray = jsonObject.getAsJsonArray("id_list");
+ List idList = new ArrayList<>();
+ Iterator idIterator = idArray.iterator();
+ while (idIterator.hasNext()) {
+ JsonElement id = idIterator.next();
+ idList.add(id.getAsString());
+ }
+ return idList;
+ }
+
+ @Override
+ public String add(String collection, Object obj) throws WxErrorException {
+ String jsonData = WxMaGsonBuilder.create().toJson(obj);
+ String query = JoinerUtils.blankJoiner.join(
+ "db.collection('", collection, "')",
+ ".add({data: ", jsonData, "})");
+
+ JsonObject params = new JsonObject();
+ params.addProperty("env", this.wxMaService.getWxMaConfig().getCloudEnv());
+ params.addProperty("query", query);
+
+ String responseContent = wxMaService.post(DATABASE_ADD_URL, params.toString());
+ JsonElement tmpJsonElement = JSON_PARSER.parse(responseContent);
+ JsonObject jsonObject = tmpJsonElement.getAsJsonObject();
+ if (jsonObject.get(WxMaConstants.ERRCODE).getAsInt() != 0) {
+ throw new WxErrorException(WxError.fromJson(responseContent));
+ }
+ JsonArray idArray = jsonObject.getAsJsonArray("id_list");
+ return idArray.getAsString();
+ }
+
+ @Override
+ public JsonArray databaseAdd(String query) throws WxErrorException {
+ String cloudEnv = this.wxMaService.getWxMaConfig().getCloudEnv();
+ return databaseAdd(cloudEnv, query);
+ }
+
@Override
public JsonArray databaseAdd(String env, String query) throws WxErrorException {
String response = this.wxMaService.post(DATABASE_ADD_URL, ImmutableMap.of("env", env, "query", query));
return JSON_PARSER.parse(response).getAsJsonObject().get("id_list").getAsJsonArray();
}
+ @Override
+ public Integer delete(String collection, String whereJson) throws WxErrorException {
+ String query = JoinerUtils.blankJoiner.join(
+ "db.collection('", collection, "')",
+ ".where(", whereJson, ").remove()");
+
+ JsonObject params = new JsonObject();
+ params.addProperty("env", this.wxMaService.getWxMaConfig().getCloudEnv());
+ params.addProperty("query", query);
+
+ String responseContent = wxMaService.post(DATABASE_DELETE_URL, params.toString());
+ JsonElement tmpJsonElement = JSON_PARSER.parse(responseContent);
+ JsonObject jsonObject = tmpJsonElement.getAsJsonObject();
+ if (jsonObject.get(WxMaConstants.ERRCODE).getAsInt() != 0) {
+ throw new WxErrorException(WxError.fromJson(responseContent));
+ }
+ Integer deletedNum = jsonObject.get("deleted").getAsInt();
+ return deletedNum;
+ }
+
+ @Override
+ public int databaseDelete(String query) throws WxErrorException {
+ String cloudEnv = this.wxMaService.getWxMaConfig().getCloudEnv();
+ return databaseDelete(cloudEnv, query);
+ }
+
@Override
public int databaseDelete(String env, String query) throws WxErrorException {
String response = this.wxMaService.post(DATABASE_DELETE_URL, ImmutableMap.of("env", env, "query", query));
return JSON_PARSER.parse(response).getAsJsonObject().get("deleted").getAsInt();
}
+ @Override
+ public WxCloudDatabaseUpdateResult update(String collection, String whereJson, String updateJson) throws WxErrorException {
+ String query = JoinerUtils.blankJoiner.join(
+ "db.collection('", collection, "')",
+ ".where(", whereJson, ").update({data:", updateJson, " })");
+
+ JsonObject params = new JsonObject();
+ params.addProperty("env", this.wxMaService.getWxMaConfig().getCloudEnv());
+ params.addProperty("query", query);
+
+ String responseContent = wxMaService.post(DATABASE_UPDATE_URL, params.toString());
+ return WxGsonBuilder.create().fromJson(responseContent, WxCloudDatabaseUpdateResult.class);
+ }
+
+ @Override
+ public WxCloudDatabaseUpdateResult databaseUpdate(String query) throws WxErrorException {
+ String cloudEnv = this.wxMaService.getWxMaConfig().getCloudEnv();
+ return databaseUpdate(cloudEnv, query);
+ }
+
@Override
public WxCloudDatabaseUpdateResult databaseUpdate(String env, String query) throws WxErrorException {
String response = this.wxMaService.post(DATABASE_UPDATE_URL, ImmutableMap.of("env", env, "query", query));
return WxGsonBuilder.create().fromJson(response, WxCloudDatabaseUpdateResult.class);
}
+ @Override
+ public WxCloudDatabaseQueryResult query(String collection, String whereJson, Map orderBy,
+ Integer skip, Integer limit) throws WxErrorException {
+ if (StringUtils.isBlank(whereJson)) {
+ whereJson = "{}";
+ }
+ StringBuilder orderBySb = new StringBuilder();
+ if (null != orderBy && !orderBy.isEmpty()) {
+ orderBy.entrySet().forEach(
+ e -> orderBySb.append(".orderBy('").append(e.getKey()).append("', '").append(e.getValue()).append("')")
+ );
+ }
+ if (null == limit) {
+ limit = 100;
+ }
+ if (null == skip) {
+ skip = 0;
+ }
+ String query = JoinerUtils.blankJoiner.join(
+ "db.collection('", collection, "')",
+ ".where(", whereJson, ")", orderBySb.toString(), ".skip(", skip, ").limit(", limit, ").get()");
+
+ JsonObject params = new JsonObject();
+ params.addProperty("env", this.wxMaService.getWxMaConfig().getCloudEnv());
+ params.addProperty("query", query);
+
+ String responseContent = wxMaService.post(DATABASE_QUERY_URL, params.toString());
+ return WxGsonBuilder.create().fromJson(responseContent, WxCloudDatabaseQueryResult.class);
+ }
+
+ @Override
+ public WxCloudDatabaseQueryResult databaseQuery(String query) throws WxErrorException {
+ String cloudEnv = this.wxMaService.getWxMaConfig().getCloudEnv();
+ return databaseQuery(cloudEnv, query);
+ }
+
@Override
public WxCloudDatabaseQueryResult databaseQuery(String env, String query) throws WxErrorException {
String response = this.wxMaService.post(DATABASE_QUERY_URL, ImmutableMap.of("env", env, "query", query));
return WxGsonBuilder.create().fromJson(response, WxCloudDatabaseQueryResult.class);
}
+ @Override
+ public JsonArray databaseAggregate(String query) throws WxErrorException {
+ String cloudEnv = this.wxMaService.getWxMaConfig().getCloudEnv();
+ return databaseAggregate(cloudEnv, query);
+ }
+
@Override
public JsonArray databaseAggregate(String env, String query) throws WxErrorException {
String response = this.wxMaService.post(DATABASE_AGGREGATE_URL, ImmutableMap.of("env", env, "query", query));
return JSON_PARSER.parse(response).getAsJsonObject().get("data").getAsJsonArray();
}
+ @Override
+ public Long count(String collection, String whereJson) throws WxErrorException {
+ String query = JoinerUtils.blankJoiner.join(
+ "db.collection('", collection, "')",
+ ".where(", whereJson, ").count()");
+
+ JsonObject params = new JsonObject();
+ params.addProperty("env", this.wxMaService.getWxMaConfig().getCloudEnv());
+ params.addProperty("query", query);
+
+ String responseContent = wxMaService.post(DATABASE_COUNT_URL, params.toString());
+ return JSON_PARSER.parse(responseContent).getAsJsonObject().get("count").getAsLong();
+ }
+
+ @Override
+ public Long databaseCount(String query) throws WxErrorException {
+ String cloudEnv = this.wxMaService.getWxMaConfig().getCloudEnv();
+ return databaseCount(cloudEnv, query);
+ }
+
@Override
public Long databaseCount(String env, String query) throws WxErrorException {
String response = this.wxMaService.post(DATABASE_COUNT_URL, ImmutableMap.of("env", env, "query", query));
return JSON_PARSER.parse(response).getAsJsonObject().get("count").getAsLong();
}
+ @Override
+ public void updateIndex(String collectionName, List createIndexes,
+ List dropIndexNames) throws WxErrorException {
+ String cloudEnv = this.wxMaService.getWxMaConfig().getCloudEnv();
+ updateIndex(cloudEnv, collectionName, createIndexes, dropIndexNames);
+ }
+
@Override
public void updateIndex(String env, String collectionName, List createIndexes,
List dropIndexNames) throws WxErrorException {
@@ -86,6 +267,13 @@ public class WxMaCloudServiceImpl implements WxMaCloudService {
"collection_name", collectionName, "create_indexes", createIndexes, "drop_indexes", dropIndexes));
}
+ @Override
+ public Long databaseMigrateImport(String collectionName, String filePath, int fileType,
+ boolean stopOnError, int conflictMode) throws WxErrorException {
+ String cloudEnv = this.wxMaService.getWxMaConfig().getCloudEnv();
+ return databaseMigrateImport(cloudEnv, collectionName, filePath, fileType, stopOnError, conflictMode);
+ }
+
@Override
public Long databaseMigrateImport(String env, String collectionName, String filePath, int fileType,
boolean stopOnError, int conflictMode) throws WxErrorException {
@@ -101,6 +289,12 @@ public class WxMaCloudServiceImpl implements WxMaCloudService {
return JSON_PARSER.parse(response).getAsJsonObject().get("job_id").getAsLong();
}
+ @Override
+ public Long databaseMigrateExport(String filePath, int fileType, String query) throws WxErrorException {
+ String cloudEnv = this.wxMaService.getWxMaConfig().getCloudEnv();
+ return databaseMigrateExport(cloudEnv, filePath, fileType, query);
+ }
+
@Override
public Long databaseMigrateExport(String env, String filePath, int fileType, String query) throws WxErrorException {
JsonObject params = new JsonObject();
@@ -113,18 +307,37 @@ public class WxMaCloudServiceImpl implements WxMaCloudService {
return JSON_PARSER.parse(response).getAsJsonObject().get("job_id").getAsLong();
}
+ @Override
+ public WxCloudCloudDatabaseMigrateQueryInfoResult databaseMigrateQueryInfo(Long jobId) throws WxErrorException {
+ String cloudEnv = this.wxMaService.getWxMaConfig().getCloudEnv();
+ return databaseMigrateQueryInfo(cloudEnv, jobId);
+ }
+
@Override
public WxCloudCloudDatabaseMigrateQueryInfoResult databaseMigrateQueryInfo(String env, Long jobId) throws WxErrorException {
- String response = this.wxMaService.post(DATABASE_MIGRATE_QUERY_INFO_URL, ImmutableMap.of("env", env, "job_id", jobId));
+ String response = this.wxMaService.post(DATABASE_MIGRATE_QUERY_INFO_URL, ImmutableMap.of("env", env, "job_id",
+ jobId));
return WxGsonBuilder.create().fromJson(response, WxCloudCloudDatabaseMigrateQueryInfoResult.class);
}
+ @Override
+ public WxCloudUploadFileResult uploadFile(String path) throws WxErrorException {
+ String cloudEnv = this.wxMaService.getWxMaConfig().getCloudEnv();
+ return uploadFile(cloudEnv, path);
+ }
+
@Override
public WxCloudUploadFileResult uploadFile(String env, String path) throws WxErrorException {
String response = this.wxMaService.post(UPLOAD_FILE_URL, ImmutableMap.of("env", env, "path", path));
return WxGsonBuilder.create().fromJson(response, WxCloudUploadFileResult.class);
}
+ @Override
+ public WxCloudBatchDownloadFileResult batchDownloadFile(String[] fileIds, long[] maxAges) throws WxErrorException {
+ String cloudEnv = this.wxMaService.getWxMaConfig().getCloudEnv();
+ return batchDownloadFile(cloudEnv, fileIds, maxAges);
+ }
+
@Override
public WxCloudBatchDownloadFileResult batchDownloadFile(String env, String[] fileIds, long[] maxAges) throws WxErrorException {
List