From 7a1863b6a14c2f1384156e37112520528c5b8a82 Mon Sep 17 00:00:00 2001 From: skywsp Date: Sat, 28 Mar 2020 17:47:26 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20#1476=20=E5=B0=8F=E7=A8=8B=E5=BA=8F?= =?UTF-8?q?=E4=BA=91=E5=BC=80=E5=8F=91=E4=BC=98=E5=8C=96=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93CRUD=E6=93=8D=E4=BD=9C=E7=9A=84=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wx/miniapp/api/WxMaCloudService.java | 92 ++++++- .../api/impl/WxMaCloudServiceImpl.java | 251 ++++++++++++++++- .../wx/miniapp/config/WxMaConfig.java | 4 + .../config/impl/WxMaDefaultConfigImpl.java | 54 ++-- .../wx/miniapp/util/JoinerUtils.java | 253 ++++++++++++++++++ .../api/impl/WxMaCloudServiceImplTest.java | 213 +++++++++++++-- .../src/test/resources/test-config-sample.xml | 1 + .../src/test/resources/wx-ma-jssecacerts | Bin 0 -> 116059 bytes .../src/test/resources/wx-mp-jssecacerts | Bin 0 -> 116080 bytes .../api/impl/WxOpenInMemoryConfigStorage.java | 33 ++- 10 files changed, 845 insertions(+), 56 deletions(-) create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/JoinerUtils.java create mode 100644 weixin-java-miniapp/src/test/resources/wx-ma-jssecacerts create mode 100644 weixin-java-miniapp/src/test/resources/wx-mp-jssecacerts diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaCloudService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaCloudService.java index 2cb72fd0..8f48bef8 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaCloudService.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaCloudService.java @@ -5,6 +5,7 @@ import com.google.gson.JsonArray; import me.chanjar.weixin.common.error.WxErrorException; import java.util.List; +import java.util.Map; /** * 云开发相关接口. @@ -32,6 +33,8 @@ public interface WxMaCloudService { String DATABASE_DELETE_URL = "https://api.weixin.qq.com/tcb/databasedelete"; String DATABASE_ADD_URL = "https://api.weixin.qq.com/tcb/databaseadd"; + String invokeCloudFunction(String name, String body) throws WxErrorException; + /** *
    * 触发云函数。注意:HTTP API 途径触发云函数不包含用户信息。
@@ -50,6 +53,12 @@ public interface WxMaCloudService {
    */
   String invokeCloudFunction(String env, String name, String body) throws WxErrorException;
 
+  List 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> fileList = Lists.newArrayList(); @@ -137,6 +350,12 @@ public class WxMaCloudServiceImpl implements WxMaCloudService { return WxGsonBuilder.create().fromJson(response, WxCloudBatchDownloadFileResult.class); } + @Override + public WxCloudBatchDeleteFileResult batchDeleteFile(String[] fileIds) throws WxErrorException { + String cloudEnv = this.wxMaService.getWxMaConfig().getCloudEnv(); + return batchDeleteFile(cloudEnv, fileIds); + } + @Override public WxCloudBatchDeleteFileResult batchDeleteFile(String env, String[] fileIds) throws WxErrorException { String response = this.wxMaService.post(BATCH_DELETE_FILE_URL, ImmutableMap.of("env", env, "fileid_list", fileIds)); @@ -149,14 +368,33 @@ public class WxMaCloudServiceImpl implements WxMaCloudService { return WxGsonBuilder.create().fromJson(response, WxCloudGetQcloudTokenResult.class); } + @Override + public void databaseCollectionAdd(String collectionName) throws WxErrorException { + String cloudEnv = this.wxMaService.getWxMaConfig().getCloudEnv(); + databaseCollectionAdd(cloudEnv, collectionName); + } + @Override public void databaseCollectionAdd(String env, String collectionName) throws WxErrorException { this.wxMaService.post(DATABASE_COLLECTION_ADD_URL, ImmutableMap.of("env", env, "collection_name", collectionName)); } + @Override + public void databaseCollectionDelete(String collectionName) throws WxErrorException { + String cloudEnv = this.wxMaService.getWxMaConfig().getCloudEnv(); + databaseCollectionDelete(cloudEnv, collectionName); + } + @Override public void databaseCollectionDelete(String env, String collectionName) throws WxErrorException { - this.wxMaService.post(DATABASE_COLLECTION_DELETE_URL, ImmutableMap.of("env", env, "collection_name", collectionName)); + this.wxMaService.post(DATABASE_COLLECTION_DELETE_URL, ImmutableMap.of("env", env, "collection_name", + collectionName)); + } + + @Override + public WxCloudDatabaseCollectionGetResult databaseCollectionGet(Long limit, Long offset) throws WxErrorException { + String cloudEnv = this.wxMaService.getWxMaConfig().getCloudEnv(); + return databaseCollectionGet(cloudEnv, limit, offset); } @Override @@ -174,5 +412,4 @@ public class WxMaCloudServiceImpl implements WxMaCloudService { String response = this.wxMaService.post(DATABASE_COLLECTION_GET_URL, params); return WxGsonBuilder.create().fromJson(response, WxCloudDatabaseCollectionGetResult.class); } - } diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/WxMaConfig.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/WxMaConfig.java index 49a80cc4..bc381f43 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/WxMaConfig.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/WxMaConfig.java @@ -87,6 +87,10 @@ public interface WxMaConfig { String getAesKey(); + String getOriginalId(); + + String getCloudEnv(); + String getMsgDataFormat(); long getExpiresTime(); diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/impl/WxMaDefaultConfigImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/impl/WxMaDefaultConfigImpl.java index 98929be1..b75fa711 100644 --- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/impl/WxMaDefaultConfigImpl.java +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/config/impl/WxMaDefaultConfigImpl.java @@ -1,51 +1,53 @@ package cn.binarywang.wx.miniapp.config.impl; -import java.io.File; -import java.util.concurrent.locks.Lock; -import java.util.concurrent.locks.ReentrantLock; - import cn.binarywang.wx.miniapp.config.WxMaConfig; import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder; import me.chanjar.weixin.common.bean.WxAccessToken; import me.chanjar.weixin.common.util.http.apache.ApacheHttpClientBuilder; +import java.io.File; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + /** * 基于内存的微信配置provider,在实际生产环境中应该将这些配置持久化 * * @author Binary Wang */ public class WxMaDefaultConfigImpl implements WxMaConfig { - private volatile String msgDataFormat; protected volatile String appid; - private volatile String secret; protected volatile String token; + /** + * 小程序原始ID + */ + protected volatile String originalId; + protected Lock accessTokenLock = new ReentrantLock(); + /** + * 临时文件目录. + */ + protected volatile File tmpDirFile; + private volatile String msgDataFormat; + private volatile String secret; private volatile String accessToken; private volatile String aesKey; private volatile long expiresTime; - + /** + * 云环境ID + */ + private volatile String cloudEnv; private volatile String httpProxyHost; private volatile int httpProxyPort; private volatile String httpProxyUsername; private volatile String httpProxyPassword; - private volatile String jsapiTicket; private volatile long jsapiTicketExpiresTime; - /** * 微信卡券的ticket单独缓存. */ private volatile String cardApiTicket; private volatile long cardApiTicketExpiresTime; - - protected Lock accessTokenLock = new ReentrantLock(); private Lock jsapiTicketLock = new ReentrantLock(); private Lock cardApiTicketLock = new ReentrantLock(); - - /** - * 临时文件目录. - */ - protected volatile File tmpDirFile; - private volatile ApacheHttpClientBuilder apacheHttpClientBuilder; /** @@ -190,6 +192,24 @@ public class WxMaDefaultConfigImpl implements WxMaConfig { this.aesKey = aesKey; } + @Override + public String getOriginalId() { + return originalId; + } + + public void setOriginalId(String originalId) { + this.originalId = originalId; + } + + @Override + public String getCloudEnv() { + return this.cloudEnv; + } + + public void setCloudEnv(String cloudEnv) { + this.cloudEnv = cloudEnv; + } + @Override public String getMsgDataFormat() { return this.msgDataFormat; diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/JoinerUtils.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/JoinerUtils.java new file mode 100644 index 00000000..3ef3eb91 --- /dev/null +++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/JoinerUtils.java @@ -0,0 +1,253 @@ +/** + * Copyright (c) 2019,sunnybs. + * All Rights Reserved. + *

+ * Project Name:yigou + */ +package cn.binarywang.wx.miniapp.util; + +import com.google.common.base.Joiner; + +/** + * ClassName: JoinerUtils
+ * Description: 字符串连接器
+ * Date: 2019年10月18日 下午1:42:59
+ * + * @author wsp + */ + +public class JoinerUtils { + private static final String NULL = "null"; + + /** + *

+ * 空白连接器,忽略null + *

+ * + *
+     * JoinerUtils.blankJoiner.join("a", "b", "c");
+     * result : abc
+     * 
+     * JoinerUtils.blankJoiner.join("a", null, "c");
+     * result : ac
+     * 
+ */ + public static final Joiner blankJoiner = Joiner.on("").skipNulls(); + /** + *

+ * 空白连接器 + *

+ * + *
+     * JoinerUtils.blankJoinerWithNull.join("a", "b", "c");
+     * result : abc
+     * 
+     * JoinerUtils.blankJoinerWithNull.join("a", null, "c");
+     * result : anullc
+     * 
+ */ + public static final Joiner blankJoinerWithNull = Joiner.on("").useForNull(NULL); + + /** + *

+ * 空格连接器,忽略null + *

+ * + *
+     * JoinerUtils.spaceJoiner.join("a", "b", "c");
+     * result : a b c
+     * 
+     * JoinerUtils.spaceJoiner.join("a", null, "c");
+     * result : a c
+     * 
+ */ + public static final Joiner spaceJoiner = Joiner.on(" ").skipNulls(); + /** + *

+ * 空格连接器 + *

+ * + *
+     * JoinerUtils.spaceJoinerWithNull.join("a", "b", "c");
+     * result : a b c
+     * 
+     * JoinerUtils.spaceJoinerWithNull.join("a", null, "c");
+     * result : a null c
+     * 
+ */ + public static final Joiner spaceJoinerWithNull = Joiner.on(" ").useForNull(NULL); + + /** + *

+ * 逗号分隔符连接器,忽略null + *

+ * + *
+   * JoinerUtils.commaJoiner.join("a", "b", "c");
+   * result : a,b,c
+   *
+   * JoinerUtils.commaJoiner.join("a", null, "c");
+   * result : a,c
+   * 
+ */ + public static final Joiner commaJoiner = Joiner.on(",").skipNulls(); + /** + *

+ * 逗号分隔符连接器 + *

+ * + *
+   * JoinerUtils.commaJoinerWithNull.join("a", "b", "c");
+   * result : a,b,c
+   *
+   * JoinerUtils.commaJoinerWithNull.join("a", null, "c");
+   * result : a,null,c
+   * 
+ */ + public static final Joiner commaJoinerWithNull = Joiner.on(",").useForNull(NULL); + + /** + *

+ * 等号分隔符连接器,忽略null + *

+ * + *
+   * JoinerUtils.equalJoiner.join("a", "b", "c");
+   * result : a=b=c
+   *
+   * JoinerUtils.equalJoiner.join("a", null, "c");
+   * result : a=c
+   * 
+ */ + public static final Joiner equalJoiner = Joiner.on("=").skipNulls(); + /** + *

+ * 等号分隔符连接器 + *

+ * + *
+   * JoinerUtils.equalJoinerWithNull.join("a", "b", "c");
+   * result : a=b=c
+   *
+   * JoinerUtils.equalJoinerWithNull.join("a", null, "c");
+   * result : a=null=c
+   * 
+ */ + public static final Joiner equalJoinerWithNull = Joiner.on("=").useForNull(NULL); + + /** + *

+ * 竖线分隔符连接器,忽略null + *

+ * + *
+     * JoinerUtils.vLineJoiner.join("a", "b", "c");
+     * result : a|b|c
+     * 
+     * JoinerUtils.vLineJoiner.join("a", null, "c");
+     * result : a|c
+     * 
+ */ + public static final Joiner vLineJoiner = Joiner.on("|").skipNulls(); + /** + *

+ * 竖线分隔符连接器 + *

+ * + *
+     * JoinerUtils.vLineJoinerWithNull.join("a", "b", "c");
+     * result : a|b|c
+     * 
+     * JoinerUtils.vLineJoinerWithNull.join("a", null, "c");
+     * result : a|null|c
+     * 
+ */ + public static final Joiner vLineJoinerWithNull = Joiner.on("|").useForNull(NULL); + + /** + *

+ * 中横线分隔符连接器,忽略null + *

+ * + *
+     * JoinerUtils.hLineJoiner.join("a", "b", "c");
+     * result : a-b-c
+     * 
+     * JoinerUtils.hLineJoiner.join("a", null, "c");
+     * result : a-c
+     * 
+ */ + public static final Joiner hLineJoiner = Joiner.on("-").skipNulls(); + /** + *

+ * 中横线分隔符连接器 + *

+ * + *
+     * JoinerUtils.hLineJoinerWithNull.join("a", "b", "c");
+     * result : a-b-c
+     * 
+     * JoinerUtils.hLineJoinerWithNull.join("a", null, "c");
+     * result : a-null-c
+     * 
+ */ + public static final Joiner hLineJoinerWithNull = Joiner.on("-").useForNull(NULL); + + /** + *

+ * 下划线分隔符连接器,忽略null + *

+ * + *
+     * JoinerUtils.underlineJoiner.join("a", "b", "c");
+     * result : a_b_c
+     * 
+     * JoinerUtils.underlineJoiner.join("a", null, "c");
+     * result : a_c
+     * 
+ */ + public static final Joiner underlineJoiner = Joiner.on("_").skipNulls(); + /** + *

+ * 下划线分隔符连接器 + *

+ * + *
+     * JoinerUtils.underlineJoinerWithNull.join("a", "b", "c");
+     * result : a_b_c
+     * 
+     * JoinerUtils.underlineJoinerWithNull.join("a", null, "c");
+     * result : a_null_c
+     * 
+ */ + public static final Joiner underlineJoinerWithNull = Joiner.on("_").useForNull(NULL); + + /** + *

+ * 斜线分隔符连接器,忽略null + *

+ * + *
+     * JoinerUtils.pathJoiner.join("a", "b", "c");
+     * result : a/b/c
+     * 
+     * JoinerUtils.pathJoiner.join("a", null, "c");
+     * result : a/c
+     * 
+ */ + public static final Joiner pathJoiner = Joiner.on("/").skipNulls(); + /** + *

+ * 斜线分隔符连接器 + *

+ * + *
+     * JoinerUtils.pathJoinerWithNull.join("a", "b", "c");
+     * result : a/b/c
+     * 
+     * JoinerUtils.pathJoinerWithNull.join("a", null, "c");
+     * result : a/null/c
+     * 
+ */ + public static final Joiner pathJoinerWithNull = Joiner.on("/").useForNull(NULL); +} diff --git a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaCloudServiceImplTest.java b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaCloudServiceImplTest.java index c3e008fe..69d6cc99 100644 --- a/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaCloudServiceImplTest.java +++ b/weixin-java-miniapp/src/test/java/cn/binarywang/wx/miniapp/api/impl/WxMaCloudServiceImplTest.java @@ -3,13 +3,19 @@ package cn.binarywang.wx.miniapp.api.impl; import cn.binarywang.wx.miniapp.api.WxMaService; import cn.binarywang.wx.miniapp.bean.cloud.*; import cn.binarywang.wx.miniapp.test.ApiTestModule; +import com.google.common.collect.ImmutableSortedMap; import com.google.common.collect.Lists; +import com.google.common.collect.Ordering; import com.google.gson.JsonArray; import com.google.inject.Inject; import me.chanjar.weixin.common.error.WxErrorException; +import org.testng.annotations.BeforeTest; import org.testng.annotations.Guice; import org.testng.annotations.Test; +import java.math.BigDecimal; +import java.util.*; + import static org.assertj.core.api.Assertions.assertThat; /** @@ -20,18 +26,89 @@ import static org.assertj.core.api.Assertions.assertThat; */ @Guice(modules = ApiTestModule.class) public class WxMaCloudServiceImplTest { + + private static final String COLLECTION = "geo"; @Inject private WxMaService wxMaService; + @BeforeTest + public void before() { + /** + * 用以解决:javax.net.ssl.SSLHandshakeException: PKIX path building failed + * 参考:https://www.cnblogs.com/cloudapps/p/5022544.html + */ + String mpCert = ClassLoader.getSystemResource("wx-mp-jssecacerts").getPath(); + String maCert = ClassLoader.getSystemResource("wx-ma-jssecacerts").getPath(); + System.setProperty("javax.net.ssl.trustStore", mpCert + "," + maCert); + String property = System.getProperty("javax.net.ssl.trustStore"); + System.out.println("javax.net.ssl.trustStore=" + property); + } + + @Test public void testInvokeCloudFunction() throws WxErrorException { - final String result = this.wxMaService.getCloudService().invokeCloudFunction("rcn", "login", "{}"); + final String result = this.wxMaService.getCloudService().invokeCloudFunction("login", "{}"); assertThat(result).isNotNull(); } + @Test + public void testAddList() throws WxErrorException { + List stuList = new ArrayList<>(); + + Map product1 = new HashMap<>(); + product1.put("description", "item1"); + product1.put("price", BigDecimal.valueOf(1.2)); + product1.put("due", new Date()); + + /** + * 等价于new db.Geo.Point(113, 23) + * 参见:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/geo/Geo.Point.html + */ + Map point = new HashMap<>(); + point.put("type", "Point"); + point.put("coordinates", new Integer[]{113, 23}); + + Map product2 = new HashMap<>(); + product2.put("tags", new String[]{"cloud", "database"}); + product2.put("location", point); + product2.put("done", false); + + stuList.add(product1); + stuList.add(product2); + List idList = this.wxMaService.getCloudService().add(COLLECTION, stuList); + + System.out.println(idList.size()); + assertThat(idList).isNotEmpty(); + } + + @Test + public void testAddObject() throws WxErrorException { + /** + * 等价于new db.Geo.Point(113, 23) + * 参见:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/geo/Geo.Point.html + */ + Map point = new HashMap<>(); + point.put("type", "Point"); + point.put("coordinates", new Integer[]{113, 23}); + + Map product = new HashMap<>(); + product.put("description", "item1"); + product.put("price", BigDecimal.valueOf(1.2)); + product.put("due", new Date()); + product.put("tags", new String[]{"cloud", "database"}); + product.put("location", point); + product.put("done", false); + + String id = this.wxMaService.getCloudService().add(COLLECTION, product); + + System.out.println(id); + assertThat(id).isNotBlank(); + } + + @Test public void testDatabaseAdd() throws WxErrorException { - JsonArray array = this.wxMaService.getCloudService().databaseAdd("rcn", "db.collection(\"geo\").add({\n" + + JsonArray array = this.wxMaService.getCloudService().databaseAdd("db.collection(\"geo\").add({\n" + " data: [{\n" + " description: \"item1\",\n" + " due:\n" + @@ -63,16 +140,59 @@ public class WxMaCloudServiceImplTest { assertThat(array).isNotEmpty(); } + @Test + public void testDelete() throws WxErrorException { + StringBuilder whereParamSb = new StringBuilder(); + whereParamSb.append("{") + // 等于 + .append("_id: _.eq('79a2c43f5e7e9e8e001a120e494d51b8'),") + // in + .append("age: _.in([0, 1, 2, 3]),") + // 小于 + .append("due: _.lt('Mar 29, 2020 8:47:07 AM'),") + // 存在属性 + .append("price: _.exists(true)") + .append("}"); + + final int result = this.wxMaService.getCloudService().delete( + COLLECTION, whereParamSb.toString()); + assertThat(result).isEqualTo(0); + } + @Test public void testDatabaseDelete() throws WxErrorException { - final int result = this.wxMaService.getCloudService().databaseDelete("rcn", + final int result = this.wxMaService.getCloudService().databaseDelete( "db.collection(\"geo\").doc(\"056120a7-c89e-4616-95bf-dfc9a11daa3b\").remove()"); assertThat(result).isEqualTo(0); } + @Test + public void testUpdate() throws WxErrorException { + StringBuilder whereParamSb = new StringBuilder(); + whereParamSb.append("{") + // in + .append("age: _.in([0, 1, 2, 3]),") + // 小于 + .append("due: _.lt('Mar 29, 2020 8:47:07 AM'),") + // 存在属性 + .append("price: _.exists(true)") + .append("}"); + + StringBuilder updateSb = new StringBuilder(); + updateSb.append("{age: _.inc(1)}"); + + final WxCloudDatabaseUpdateResult result = this.wxMaService.getCloudService().update(COLLECTION, + whereParamSb.toString(), updateSb.toString()); + + assertThat(result).isNotNull(); + assertThat(result.getMatched()).isGreaterThan(0); + assertThat(result.getId()).isEmpty(); + assertThat(result.getModified()).isGreaterThan(0); + } + @Test public void testDatabaseUpdate() throws WxErrorException { - final WxCloudDatabaseUpdateResult result = this.wxMaService.getCloudService().databaseUpdate("rcn", + final WxCloudDatabaseUpdateResult result = this.wxMaService.getCloudService().databaseUpdate( "db.collection(\"geo\").where({description:\"item1\"}).update({data:{age: _.inc(1)}})"); assertThat(result).isNotNull(); assertThat(result.getMatched()).isGreaterThan(0); @@ -80,9 +200,43 @@ public class WxMaCloudServiceImplTest { assertThat(result.getModified()).isGreaterThan(0); } + @Test + public void testQuery() throws WxErrorException { + StringBuilder whereParamSb = new StringBuilder(); + whereParamSb.append("{") + // in + .append("age: _.in([0, 1, 2, 3]),") + // 小于 + .append("due: _.lt('Mar 29, 2020 8:47:07 AM'),") + // 存在属性 + .append("price: _.exists(true)") + .append("}"); + +// // Hutool创建有序map,返回LinkedHashMap +// Map map2 = MapUtil.newHashMap(true); +// map2.put("_id", "asc"); +// map2.put("price", "desc"); + + // 有序map + ImmutableSortedMap orderBy = new ImmutableSortedMap + .Builder(Ordering.natural()) + .put("_id", "asc") + .put("price", "desc") + .build(); + + final WxCloudDatabaseQueryResult result = this.wxMaService.getCloudService().query(COLLECTION, + whereParamSb.toString(), orderBy, 20, 20); + assertThat(result).isNotNull(); + assertThat(result.getPager()).isNotNull(); + assertThat(result.getPager().getLimit()).isEqualTo(10); + assertThat(result.getPager().getOffset()).isEqualTo(1); + assertThat(result.getPager().getTotal()).isGreaterThan(0); + assertThat(result.getData().length).isGreaterThan(0); + } + @Test public void testDatabaseQuery() throws WxErrorException { - final WxCloudDatabaseQueryResult result = this.wxMaService.getCloudService().databaseQuery("rcn", + final WxCloudDatabaseQueryResult result = this.wxMaService.getCloudService().databaseQuery( "db.collection(\"geo\").where({done:false}).limit(10).skip(1).get()"); assertThat(result).isNotNull(); assertThat(result.getPager()).isNotNull(); @@ -94,21 +248,36 @@ public class WxMaCloudServiceImplTest { @Test public void testDatabaseAggregate() throws WxErrorException { - final JsonArray result = this.wxMaService.getCloudService().databaseAggregate("rcn", + final JsonArray result = this.wxMaService.getCloudService().databaseAggregate( "db.collection(\"geo\").aggregate().match({tags:\"cloud\"}).limit(10).end()"); assertThat(result).isNotNull(); } + @Test + public void testCount() throws WxErrorException { + StringBuilder whereParamSb = new StringBuilder(); + whereParamSb.append("{") + // in + .append("age: _.in([0, 1, 2, 3]),") + // 小于 + .append("due: _.lt('Mar 29, 2020 8:47:07 AM'),") + // 存在属性 + .append("price: _.exists(true)") + .append("}"); + final Long result = this.wxMaService.getCloudService().count(COLLECTION, whereParamSb.toString()); + assertThat(result).isGreaterThan(0); + } + @Test public void testDatabaseCount() throws WxErrorException { - final Long result = this.wxMaService.getCloudService().databaseCount("rcn", + final Long result = this.wxMaService.getCloudService().databaseCount( "db.collection(\"geo\").where({done:false}).count()"); assertThat(result).isGreaterThan(0); } @Test public void testUpdateIndex() throws WxErrorException { - this.wxMaService.getCloudService().updateIndex("rcn", "geo", + this.wxMaService.getCloudService().updateIndex(COLLECTION, Lists.newArrayList(new WxCloudDatabaseCreateIndexRequest() .setName("drop_index") .setUnique(true) @@ -119,15 +288,16 @@ public class WxMaCloudServiceImplTest { @Test public void testDatabaseMigrateImport() throws WxErrorException { - final Long result = this.wxMaService.getCloudService().databaseMigrateImport("rcn", "geo", "test.json", + final Long result = this.wxMaService.getCloudService().databaseMigrateImport(COLLECTION, "test.json", 1, true, 1); assertThat(result).isGreaterThan(0); } @Test public void testDatabaseMigrateExport() throws WxErrorException { - final Long result = this.wxMaService.getCloudService().databaseMigrateExport("rcn", "test.json", 1, - "const Point = db.Geo.Point;db.collection('geo').where({age: _.gt(1)}).limit(10).skip(1).orderBy('age','asc').orderBy('name', 'desc')" + + final Long result = this.wxMaService.getCloudService().databaseMigrateExport("test.json", 1, + "const Point = db.Geo.Point;db.collection('geo').where({age: _.gt(1)}).limit(10).skip(1).orderBy('age','asc')" + + ".orderBy('name', 'desc')" + ".field({ name: true }).get()"); assertThat(result).isGreaterThan(0); } @@ -135,14 +305,15 @@ public class WxMaCloudServiceImplTest { @Test public void testDatabaseMigrateQueryInfo() throws WxErrorException { final WxCloudCloudDatabaseMigrateQueryInfoResult result = this.wxMaService.getCloudService() - .databaseMigrateQueryInfo("rcn", 476629L); + .databaseMigrateQueryInfo(476629L); assertThat(result).isNotNull(); System.out.println(result.getFileUrl()); } @Test public void testUploadFile() throws WxErrorException { - final WxCloudUploadFileResult result = this.wxMaService.getCloudService().uploadFile("rcn", "E:\\MyDocs\\Desktop\\test.json"); + final WxCloudUploadFileResult result = this.wxMaService.getCloudService().uploadFile("E:\\MyDocs\\Desktop" + + "\\test.json"); assertThat(result).isNotNull(); assertThat(result.getAuthorization()).isNotNull(); @@ -155,8 +326,9 @@ public class WxMaCloudServiceImplTest { @Test public void testBatchDownloadFile() throws WxErrorException { - final WxCloudBatchDownloadFileResult result = this.wxMaService.getCloudService().batchDownloadFile("rcn", - new String[]{"cloud://rcn.7263-rcn-1258788140/Snipaste_2019-11-13_00-21-27.png", "cloud://rcn.7263-rcn-1258788140/avatar.jpg"}, + final WxCloudBatchDownloadFileResult result = this.wxMaService.getCloudService().batchDownloadFile( + new String[]{"cloud://rcn.7263-rcn-1258788140/Snipaste_2019-11-13_00-21-27.png", "cloud://rcn" + + ".7263-rcn-1258788140/avatar.jpg"}, new long[]{7200, 6800}); assertThat(result).isNotNull(); @@ -171,7 +343,7 @@ public class WxMaCloudServiceImplTest { @Test public void testBatchDeleteFile() throws WxErrorException { - final WxCloudBatchDeleteFileResult result = this.wxMaService.getCloudService().batchDeleteFile("rcn", + final WxCloudBatchDeleteFileResult result = this.wxMaService.getCloudService().batchDeleteFile( new String[]{"cloud://rcn.7263-rcn-1258788140/test.json"}); assertThat(result).isNotNull(); @@ -195,18 +367,19 @@ public class WxMaCloudServiceImplTest { @Test public void testDatabaseCollectionAdd() throws WxErrorException { - this.wxMaService.getCloudService().databaseCollectionAdd("rcn","test_add_collection"); + this.wxMaService.getCloudService().databaseCollectionAdd("test_add_collection"); } @Test public void testDatabaseCollectionDelete() throws WxErrorException { - this.wxMaService.getCloudService().databaseCollectionAdd("rcn","test_delete_collection"); - this.wxMaService.getCloudService().databaseCollectionDelete("rcn","test_delete_collection"); + this.wxMaService.getCloudService().databaseCollectionAdd("test_delete_collection"); + this.wxMaService.getCloudService().databaseCollectionDelete("test_delete_collection"); } @Test public void testDatabaseCollectionGet() throws WxErrorException { - final WxCloudDatabaseCollectionGetResult result = this.wxMaService.getCloudService().databaseCollectionGet("rcn", null, null); + final WxCloudDatabaseCollectionGetResult result = this.wxMaService.getCloudService().databaseCollectionGet( + null, null); assertThat(result).isNotNull(); assertThat(result.getPager()).isNotNull(); diff --git a/weixin-java-miniapp/src/test/resources/test-config-sample.xml b/weixin-java-miniapp/src/test/resources/test-config-sample.xml index 1f6cc388..7812fc74 100644 --- a/weixin-java-miniapp/src/test/resources/test-config-sample.xml +++ b/weixin-java-miniapp/src/test/resources/test-config-sample.xml @@ -4,6 +4,7 @@ secret Token EncodingAESKey + 云环境 可以不填写 可以不填写 某个用户的openId diff --git a/weixin-java-miniapp/src/test/resources/wx-ma-jssecacerts b/weixin-java-miniapp/src/test/resources/wx-ma-jssecacerts new file mode 100644 index 0000000000000000000000000000000000000000..7a7995ea0d7795485a9ede072db7399d4359175c GIT binary patch literal 116059 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 literal 0 HcmV?d00001 diff --git a/weixin-java-miniapp/src/test/resources/wx-mp-jssecacerts b/weixin-java-miniapp/src/test/resources/wx-mp-jssecacerts new file mode 100644 index 0000000000000000000000000000000000000000..5f7a420d3723c44a3350f8557943282029478da2 GIT binary patch literal 116080 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 Kcd0nB2=reeO{JXx literal 0 HcmV?d00001 diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenInMemoryConfigStorage.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenInMemoryConfigStorage.java index 491dc6b7..33678ea8 100644 --- a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenInMemoryConfigStorage.java +++ b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenInMemoryConfigStorage.java @@ -46,7 +46,6 @@ public class WxOpenInMemoryConfigStorage implements WxOpenConfigStorage { private Map cardApiTickets = new ConcurrentHashMap<>(); - @Override public boolean isComponentAccessTokenExpired() { return System.currentTimeMillis() > componentExpiresTime; @@ -79,7 +78,8 @@ public class WxOpenInMemoryConfigStorage implements WxOpenConfigStorage { } @Override - public void setWxOpenInfo(String componentAppId, String componentAppSecret, String componentToken, String componentAesKey) { + public void setWxOpenInfo(String componentAppId, String componentAppSecret, String componentToken, + String componentAesKey) { setComponentAppId(componentAppId); setComponentAppSecret(componentAppSecret); setComponentToken(componentToken); @@ -146,7 +146,8 @@ public class WxOpenInMemoryConfigStorage implements WxOpenConfigStorage { @Override public void updateAuthorizerAccessToken(String appId, WxOpenAuthorizerAccessToken authorizerAccessToken) { - updateAuthorizerAccessToken(appId, authorizerAccessToken.getAuthorizerAccessToken(), authorizerAccessToken.getExpiresIn()); + updateAuthorizerAccessToken(appId, authorizerAccessToken.getAuthorizerAccessToken(), + authorizerAccessToken.getExpiresIn()); } @Override @@ -202,6 +203,14 @@ public class WxOpenInMemoryConfigStorage implements WxOpenConfigStorage { private static class WxOpenInnerConfigStorage implements WxMpConfigStorage, WxMaConfig { private WxOpenConfigStorage wxOpenConfigStorage; private String appId; + /** + * 小程序原始ID + */ + private volatile String originalId; + /** + * 云环境ID + */ + private volatile String cloudEnv; private Lock accessTokenLock = new ReentrantLock(); private Lock jsapiTicketLock = new ReentrantLock(); private Lock cardApiTicketLock = new ReentrantLock(); @@ -325,6 +334,24 @@ public class WxOpenInMemoryConfigStorage implements WxOpenConfigStorage { return this.appId; } + @Override + public String getOriginalId() { + return originalId; + } + + public void setOriginalId(String originalId) { + this.originalId = originalId; + } + + @Override + public String getCloudEnv() { + return this.cloudEnv; + } + + public void setCloudEnv(String cloudEnv) { + this.cloudEnv = cloudEnv; + } + @Override public void expireAccessToken() { wxOpenConfigStorage.expireAuthorizerAccessToken(appId);