From d9ea8c7654c2d2a4c610d7952b7f090b7242f74b Mon Sep 17 00:00:00 2001 From: jackjintai Date: Mon, 17 Feb 2020 19:35:20 +0800 Subject: [PATCH] =?UTF-8?q?modify:=201=E3=80=81=E5=85=BC=E5=AE=B9=E4=BB=A3?= =?UTF-8?q?=E9=A9=BEkop=E7=8E=AF=E5=A2=83=E6=95=B0=E6=8D=AEmock=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Android/config.gradle | 2 +- .../kit/network/rpc/RpcMockInterceptor.java | 22 ++-- .../okhttp/interceptor/MockInterceptor.java | 19 ++- .../kit/network/room_db/DokitDbManager.java | 111 ++++++++++++++---- .../ui/MockTemplatePreviewFragment.java | 11 ++ .../kit/network/ui/NetWorkMockFragment.java | 4 +- .../kit/network/ui/TemplateMockAdapter.java | 1 + .../dk_fragment_mock_template_preview.xml | 20 ++++ 8 files changed, 152 insertions(+), 38 deletions(-) diff --git a/Android/config.gradle b/Android/config.gradle index c45cf49c..b0617abd 100755 --- a/Android/config.gradle +++ b/Android/config.gradle @@ -4,7 +4,7 @@ ext { // 线上包不会接入DoraemonKit,测试包会自动接入 applyPlugin : true, //上传到仓库时需要打开 - uploadArchives : false, + uploadArchives : true, //是否发布插件到远程仓库 publishPluginToRemote: false, localRepoURL : "/Users/didi/project/dokit_repo" diff --git a/Android/doraemonkit-rpc/src/main/java/com/didichuxing/doraemonkit/kit/network/rpc/RpcMockInterceptor.java b/Android/doraemonkit-rpc/src/main/java/com/didichuxing/doraemonkit/kit/network/rpc/RpcMockInterceptor.java index c45877a8..8bfd15d2 100644 --- a/Android/doraemonkit-rpc/src/main/java/com/didichuxing/doraemonkit/kit/network/rpc/RpcMockInterceptor.java +++ b/Android/doraemonkit-rpc/src/main/java/com/didichuxing/doraemonkit/kit/network/rpc/RpcMockInterceptor.java @@ -47,9 +47,10 @@ public class RpcMockInterceptor implements RpcInterceptor" + interceptApiBean.getMockApiName() + " newUrl=====>" + newUrl); + HttpRpcRequest mockRequest = oldRequest.newBuilder() .setMethod(HttpMethod.GET, null) .setUrl(newUrl).build(); @@ -128,7 +133,11 @@ public class RpcMockInterceptor implements RpcInterceptor" + templateApiBean.getMockApiName() + " isOpen===>" + templateApiBean.isOpen()); if (templateApiBean.isOpen()) { //保存老的response 数据到数据库 response = saveResponse2DB(response, templateApiBean); @@ -235,7 +244,6 @@ public class RpcMockInterceptor implements RpcInterceptor" + path + " newUrl=====>" + newUrl); + Request newRequest = oldRequest.newBuilder() .method("GET", null) .url(newUrl).build(); @@ -195,7 +200,11 @@ public class MockInterceptor implements Interceptor { if (TextUtils.isEmpty(templateMatchedId)) { return; } - MockTemplateApiBean templateApiBean = (MockTemplateApiBean) DokitDbManager.getInstance().getTemplateApiByIdInMap(path, templateMatchedId); + MockTemplateApiBean templateApiBean = (MockTemplateApiBean) DokitDbManager.getInstance().getTemplateApiByIdInMap(path, templateMatchedId,DokitDbManager.FROM_SDK_OTHER); + if (templateApiBean == null) { + return; + } + LogHelper.i("MOCK_TEMPLATE", "path=====>" + path + "isOpen===>" + templateApiBean.isOpen()); if (templateApiBean.isOpen()) { //保存老的response 数据到数据库 saveResponse2DB(oldResponse, templateApiBean); diff --git a/Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/network/room_db/DokitDbManager.java b/Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/network/room_db/DokitDbManager.java index ff52aa53..ba6521f0 100644 --- a/Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/network/room_db/DokitDbManager.java +++ b/Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/network/room_db/DokitDbManager.java @@ -136,15 +136,34 @@ public class DokitDbManager { /** - * 内存中获取指定的 template api + * 数据库中获取指定的mock intercept api + */ + public T getInterceptApiByIdInDb(String id) { + return (T) DokitViewManager.getInstance().getDb().mockApiDao().findInterceptApiById(id); + } + + /** + * 内存中中获取指定的mock intercept api */ - public T getTemplateApiByIdInMap(String path, String id) { - if (mGlobalTemplateApiMaps.get(path) == null) { + public T getInterceptApiByIdInMap(String path, String id, int fromSDK) { + + if (mGlobalInterceptApiMaps == null) { + return null; + } + //先进行全匹配 + List mGlobalInterceptApis = mGlobalInterceptApiMaps.get(path); + if (mGlobalInterceptApis == null) { + path = dealPath(path, fromSDK); + mGlobalInterceptApis = mGlobalInterceptApiMaps.get(path); + } + + //再进行滴滴内部匹配 + if (mGlobalInterceptApis == null) { return null; } T selectedMockApi = null; - for (T mockApi : mGlobalTemplateApiMaps.get(path)) { + for (T mockApi : mGlobalInterceptApis) { if (mockApi.getId().equals(id)) { selectedMockApi = mockApi; break; @@ -154,24 +173,26 @@ public class DokitDbManager { return selectedMockApi; } - /** - * 数据库中获取指定的mock intercept api - */ - public T getInterceptApiByIdInDb(String id) { - return (T) DokitViewManager.getInstance().getDb().mockApiDao().findInterceptApiById(id); - } - - /** - * 内存中中获取指定的mock intercept api + * 内存中获取指定的 template api */ - public T getInterceptApiByIdInMap(String path, String id) { - if (mGlobalInterceptApiMaps.get(path) == null) { + public T getTemplateApiByIdInMap(String path, String id, int fromSDK) { + if (mGlobalTemplateApiMaps == null) { + return null; + } + List mGlobalTemplateApis = mGlobalTemplateApiMaps.get(path); + //先进行全匹配 + if (mGlobalTemplateApis == null) { + path = dealPath(path, fromSDK); + mGlobalTemplateApis = mGlobalTemplateApiMaps.get(path); + } + //再进行滴滴内部匹配 + if (mGlobalTemplateApis == null) { return null; } T selectedMockApi = null; - for (T mockApi : mGlobalInterceptApiMaps.get(path)) { + for (T mockApi : mGlobalTemplateApis) { if (mockApi.getId().equals(id)) { selectedMockApi = mockApi; break; @@ -311,6 +332,15 @@ public class DokitDbManager { */ public static final int MOCK_API_TEMPLATE = 2; + /** + * 来自滴滴内部SDK + */ + public static int FROM_SDK_DIDI = 100; + /** + * 来自外部SDK + */ + public static int FROM_SDK_OTHER = 101; + /** * 返回命中的id * @@ -319,29 +349,64 @@ public class DokitDbManager { * @param operateType * @return */ - public String isMockMatched(String path, String strLocalQuery, int operateType) { - T mockApi = mockMatched(path, strLocalQuery, operateType); + public String isMockMatched(String path, String strLocalQuery, int operateType, int fromSDK) { + T mockApi = mockMatched(path, strLocalQuery, operateType, fromSDK); if (mockApi == null) { return ""; } return mockApi.getId(); } + /** + * 兼容滴滴内部外网映射环境 该环境的 path上会多一级/kop_xxx/路径 + * + * @param oldPath + * @param fromSDK + * @return + */ + private String dealPath(String oldPath, int fromSDK) { + if (fromSDK == FROM_SDK_OTHER) { + return oldPath; + } + String newPath = oldPath; + //包含多级路径 + if (oldPath.contains("/kop") && oldPath.split("\\/").length > 1) { + String[] childPaths = oldPath.split("\\/"); + String endPath = childPaths[childPaths.length - 1]; + if (!endPath.contains("kop")) { + newPath = "/" + endPath; + } + } + return newPath; + } + /** * 通过path和query查询指定的对象 * * @param path * @param strLocalQuery - * @param operateType 1:代表拦截 2:代表模板 + * @param operateType 1:代表拦截 2:代表模板 * @return */ - private T mockMatched(String path, String strLocalQuery, int operateType) { - List mockApis; - if (operateType == 1) { + private T mockMatched(String path, String strLocalQuery, int operateType, int fromSDK) { + List mockApis = null; + if (operateType == DokitDbManager.MOCK_API_INTERCEPT) { + //先进行一次全匹配 mockApis = mGlobalInterceptApiMaps.get(path); - } else { + //滴滴内部sdk匹配 + if (mockApis == null) { + path = dealPath(path, fromSDK); + mockApis = mGlobalInterceptApiMaps.get(path); + } + } else if (operateType == DokitDbManager.MOCK_API_TEMPLATE) { + //先进行一次全匹配 mockApis = mGlobalTemplateApiMaps.get(path); + //滴滴内部sdk匹配 + if (mockApis == null) { + path = dealPath(path, fromSDK); + mockApis = mGlobalTemplateApiMaps.get(path); + } } if (mockApis == null) { return null; diff --git a/Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/network/ui/MockTemplatePreviewFragment.java b/Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/network/ui/MockTemplatePreviewFragment.java index 89ee83c6..9d9eed7b 100644 --- a/Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/network/ui/MockTemplatePreviewFragment.java +++ b/Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/network/ui/MockTemplatePreviewFragment.java @@ -54,6 +54,7 @@ public class MockTemplatePreviewFragment extends BaseFragment { TextView tvPath = findViewById(R.id.tv_path); tvName.setText(String.format("mock接口名称:%s", DokitDbManager.getInstance().getGlobalTemplateApiBean().getMockApiName())); tvPath.setText(String.format("mock接口路径:%s", DokitDbManager.getInstance().getGlobalTemplateApiBean().getPath())); + JsonRecyclerView jsonViewQuery = findViewById(R.id.json_query); JsonRecyclerView jsonRecycleView = findViewById(R.id.jsonviewer); TextView tvUpload = findViewById(R.id.tv_upload); @@ -72,6 +73,7 @@ public class MockTemplatePreviewFragment extends BaseFragment { .execute(new StringCallback() { @Override public void onSuccess(Response response) { + LogHelper.i(TAG, "上传模板===>" + response.body()); ToastUtils.showShort("上传模板成功"); } @@ -90,6 +92,15 @@ public class MockTemplatePreviewFragment extends BaseFragment { return; } try { + + JSONObject jsonQuery = new JSONObject(DokitDbManager.getInstance().getGlobalTemplateApiBean().getQuery()); + if (jsonQuery.length() == 0) { + jsonViewQuery.setVisibility(View.GONE); + } else { + jsonViewQuery.setVisibility(View.VISIBLE); + jsonViewQuery.bindJson(jsonQuery); + } + new JSONObject(DokitDbManager.getInstance().getGlobalTemplateApiBean().getStrResponse()); jsonRecycleView.setTextSize(16); jsonRecycleView.bindJson(DokitDbManager.getInstance().getGlobalTemplateApiBean().getStrResponse()); diff --git a/Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/network/ui/NetWorkMockFragment.java b/Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/network/ui/NetWorkMockFragment.java index 12de6698..e5550319 100644 --- a/Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/network/ui/NetWorkMockFragment.java +++ b/Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/network/ui/NetWorkMockFragment.java @@ -769,7 +769,7 @@ public class NetWorkMockFragment extends BaseFragment { * @return */ private boolean hasInterceptApiInDb(String path, String id) { - MockInterceptApiBean mockInterceptApi = (MockInterceptApiBean) DokitDbManager.getInstance().getInterceptApiByIdInMap(path, id); + MockInterceptApiBean mockInterceptApi = (MockInterceptApiBean) DokitDbManager.getInstance().getInterceptApiByIdInMap(path, id,DokitDbManager.FROM_SDK_OTHER); return mockInterceptApi != null; } @@ -781,7 +781,7 @@ public class NetWorkMockFragment extends BaseFragment { * @return */ private boolean hasTemplateApiInDb(String path, String id) { - MockTemplateApiBean mockTemplateApi = (MockTemplateApiBean) DokitDbManager.getInstance().getTemplateApiByIdInMap(path, id); + MockTemplateApiBean mockTemplateApi = (MockTemplateApiBean) DokitDbManager.getInstance().getTemplateApiByIdInMap(path, id,DokitDbManager.FROM_SDK_OTHER); return mockTemplateApi != null; } diff --git a/Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/network/ui/TemplateMockAdapter.java b/Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/network/ui/TemplateMockAdapter.java index 9c576225..a3a1c411 100644 --- a/Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/network/ui/TemplateMockAdapter.java +++ b/Android/doraemonkit/src/main/java/com/didichuxing/doraemonkit/kit/network/ui/TemplateMockAdapter.java @@ -158,6 +158,7 @@ public class TemplateMockAdapter extends BaseMultiIte .execute(new StringCallback() { @Override public void onSuccess(Response response) { + LogHelper.i(TAG, "上传模板===>" + response.body()); ToastUtils.showShort("上传模板成功"); } diff --git a/Android/doraemonkit/src/main/res/layout/dk_fragment_mock_template_preview.xml b/Android/doraemonkit/src/main/res/layout/dk_fragment_mock_template_preview.xml index e3814aee..85e1e383 100644 --- a/Android/doraemonkit/src/main/res/layout/dk_fragment_mock_template_preview.xml +++ b/Android/doraemonkit/src/main/res/layout/dk_fragment_mock_template_preview.xml @@ -38,8 +38,28 @@ android:text="接口路径:" android:textColor="@color/dk_color_333333" android:textSize="16sp" /> + + + + + + + +