From 1213db31d0fba77301da33c193849bb0461304c8 Mon Sep 17 00:00:00 2001 From: icanci Date: Tue, 17 Jan 2023 19:53:41 +0800 Subject: [PATCH] mockcalltest --- .../amc/biz/mapper/AppMockCallTestMapper.java | 15 ++ .../biz/service/AppMockCallTestService.java | 22 ++ .../impl/AppMockCallTestServiceImpl.java | 79 +++++++ .../daointerface/AppMockCallTestDAO.java | 26 +++ .../mongodb/dataobject/AppMockCallTestDO.java | 45 ++++ .../mongo/MongoAppMockCallTestDAO.java | 72 ++++++ .../vueboot/src/api/appMockCallTestApi.js | 46 ++++ .../vueboot/src/api/loadSelectorApi.js | 18 +- .../resources/vueboot/src/router/index.js | 9 + .../src/views/config/dialog/mockCallForm.vue | 4 +- .../views/config/dialog/mockCallTestForm.vue | 149 +++++++++++++ .../src/views/config/dialog/teamForm.vue | 46 ++-- .../vueboot/src/views/config/mockCallTest.vue | 207 ++++++++++++++++++ .../config/AppMockCallTestController.java | 55 +++++ .../web/form/AppMockCallTestQueryForm.java | 20 ++ .../web/mapper/AppMockCallTestWebMapper.java | 15 ++ .../amc/web/model/AppMockCallTest.java | 44 ++++ .../amc/common/enums/ModuleTypeEnum.java | 4 + .../model/config/AppMockCallTestVO.java | 45 ++++ 19 files changed, 895 insertions(+), 26 deletions(-) create mode 100644 admin/admin-biz/src/main/java/cn/icanci/loopstack/amc/biz/mapper/AppMockCallTestMapper.java create mode 100644 admin/admin-biz/src/main/java/cn/icanci/loopstack/amc/biz/service/AppMockCallTestService.java create mode 100644 admin/admin-biz/src/main/java/cn/icanci/loopstack/amc/biz/service/impl/AppMockCallTestServiceImpl.java create mode 100644 admin/admin-dal/src/main/java/cn/icanci/loopstack/amc/admin/dal/mongodb/daointerface/AppMockCallTestDAO.java create mode 100644 admin/admin-dal/src/main/java/cn/icanci/loopstack/amc/admin/dal/mongodb/dataobject/AppMockCallTestDO.java create mode 100644 admin/admin-dal/src/main/java/cn/icanci/loopstack/amc/admin/dal/mongodb/mongo/MongoAppMockCallTestDAO.java create mode 100644 admin/admin-views/src/main/resources/vueboot/src/api/appMockCallTestApi.js create mode 100644 admin/admin-views/src/main/resources/vueboot/src/views/config/dialog/mockCallTestForm.vue create mode 100644 admin/admin-views/src/main/resources/vueboot/src/views/config/mockCallTest.vue create mode 100644 admin/admin-web/src/main/java/cn/icanci/loopstack/amc/web/controller/config/AppMockCallTestController.java create mode 100644 admin/admin-web/src/main/java/cn/icanci/loopstack/amc/web/form/AppMockCallTestQueryForm.java create mode 100644 admin/admin-web/src/main/java/cn/icanci/loopstack/amc/web/mapper/AppMockCallTestWebMapper.java create mode 100644 admin/admin-web/src/main/java/cn/icanci/loopstack/amc/web/model/AppMockCallTest.java create mode 100644 common/src/main/java/cn/icanci/loopstack/amc/common/model/config/AppMockCallTestVO.java diff --git a/admin/admin-biz/src/main/java/cn/icanci/loopstack/amc/biz/mapper/AppMockCallTestMapper.java b/admin/admin-biz/src/main/java/cn/icanci/loopstack/amc/biz/mapper/AppMockCallTestMapper.java new file mode 100644 index 0000000..b34cd14 --- /dev/null +++ b/admin/admin-biz/src/main/java/cn/icanci/loopstack/amc/biz/mapper/AppMockCallTestMapper.java @@ -0,0 +1,15 @@ +package cn.icanci.loopstack.amc.biz.mapper; + +import cn.icanci.loopstack.amc.admin.dal.mongodb.dataobject.AppMockCallTestDO; +import cn.icanci.loopstack.amc.common.model.config.AppMockCallTestVO; + +import org.mapstruct.Mapper; +import org.mapstruct.NullValueMappingStrategy; + +/** + * @author icanci + * @since 1.0 Created in 2023/01/15 12:45 + */ +@Mapper(componentModel = "spring", uses = {}, nullValueMappingStrategy = NullValueMappingStrategy.RETURN_NULL) +public interface AppMockCallTestMapper extends BaseMapper { +} diff --git a/admin/admin-biz/src/main/java/cn/icanci/loopstack/amc/biz/service/AppMockCallTestService.java b/admin/admin-biz/src/main/java/cn/icanci/loopstack/amc/biz/service/AppMockCallTestService.java new file mode 100644 index 0000000..aff3020 --- /dev/null +++ b/admin/admin-biz/src/main/java/cn/icanci/loopstack/amc/biz/service/AppMockCallTestService.java @@ -0,0 +1,22 @@ +package cn.icanci.loopstack.amc.biz.service; + +import java.util.List; + +import cn.icanci.loopstack.amc.common.model.PageList; +import cn.icanci.loopstack.amc.common.model.TextValue; +import cn.icanci.loopstack.amc.common.model.config.AppMockCallTestVO; + +/** + * @author icanci + * @since 1.0 Created in 2023/01/17 19:21 + */ +public interface AppMockCallTestService { + + PageList queryPage(AppMockCallTestVO web2vo, int currentPage, int pageSize); + + void save(AppMockCallTestVO web2vo); + + AppMockCallTestVO validateAppMockCallName(String mockName); + + List loadSelector(); +} diff --git a/admin/admin-biz/src/main/java/cn/icanci/loopstack/amc/biz/service/impl/AppMockCallTestServiceImpl.java b/admin/admin-biz/src/main/java/cn/icanci/loopstack/amc/biz/service/impl/AppMockCallTestServiceImpl.java new file mode 100644 index 0000000..91c8534 --- /dev/null +++ b/admin/admin-biz/src/main/java/cn/icanci/loopstack/amc/biz/service/impl/AppMockCallTestServiceImpl.java @@ -0,0 +1,79 @@ +package cn.icanci.loopstack.amc.biz.service.impl; + +import cn.hutool.json.JSONUtil; +import cn.icanci.loopstack.amc.admin.dal.mongodb.daointerface.AppMockCallTestDAO; +import cn.icanci.loopstack.amc.admin.dal.mongodb.dataobject.AppMockCallTestDO; +import cn.icanci.loopstack.amc.biz.event.log.LogEvent; +import cn.icanci.loopstack.amc.biz.mapper.AppMockCallTestMapper; +import cn.icanci.loopstack.amc.biz.service.AppMockCallTestService; +import cn.icanci.loopstack.amc.biz.service.BaseService; +import cn.icanci.loopstack.amc.common.enums.LogOperatorTypeEnum; +import cn.icanci.loopstack.amc.common.enums.ModuleTypeEnum; +import cn.icanci.loopstack.amc.common.model.PageList; +import cn.icanci.loopstack.amc.common.model.TextValue; +import cn.icanci.loopstack.amc.common.model.config.AppMockCallTestVO; + +import java.util.List; + +import javax.annotation.Resource; + +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Service; + +import com.google.common.collect.Lists; + +/** + * @author icanci + * @since 1.0 Created in 2023/01/17 19:21 + */ +@Service +public class AppMockCallTestServiceImpl extends BaseService implements AppMockCallTestService { + @Resource + private AppMockCallTestDAO appMockCallTestDAO; + @Resource + private AppMockCallTestMapper appMockCallTestMapper; + + @Override + public PageList queryPage(AppMockCallTestVO web2vo, int currentPage, int pageSize) { + PageList pageQuery = appMockCallTestDAO.pageQuery(appMockCallTestMapper.vo2do(web2vo), currentPage, pageSize); + return new PageList<>(appMockCallTestMapper.dos2vos(pageQuery.getData()), pageQuery.getPaginator()); + } + + @Override + public void save(AppMockCallTestVO appMockCallTest) { + if (doInsert(appMockCallTest)) { + AppMockCallTestDO appMockCallTestDO = appMockCallTestMapper.vo2do(appMockCallTest); + appMockCallTestDAO.insert(appMockCallTestDO); + eventDispatcher + .fire(new LogEvent(appMockCallTestDO.getUuid(), ModuleTypeEnum.AMC_APP_MOCK_CALL_TEST, JSONUtil.toJsonStr(appMockCallTestDO), LogOperatorTypeEnum.CREATE)); + } else { + appMockCallTestDAO.update(appMockCallTestMapper.vo2do(appMockCallTest)); + eventDispatcher.fire(new LogEvent(appMockCallTest.getUuid(), ModuleTypeEnum.AMC_APP_MOCK_CALL_TEST, JSONUtil.toJsonStr(appMockCallTest), LogOperatorTypeEnum.UPDATE)); + } + } + + @Override + public AppMockCallTestVO validateAppMockCallName(String mockName) { + return appMockCallTestMapper.do2vo(appMockCallTestDAO.queryByAppMockName(mockName)); + } + + @Override + public List loadSelector() { + List appMockTestList = appMockCallTestDAO.queryAll(); + if (CollectionUtils.isEmpty(appMockTestList)) { + return Lists.newArrayList(); + } + List textValues = Lists.newArrayList(); + for (AppMockCallTestDO appMockCallTestDO : appMockTestList) { + String label; + AppMockCallTestVO appMockCallTestVO = appMockCallTestMapper.do2vo(appMockCallTestDO); + if (isDeleted(appMockCallTestVO)) { + label = String.format(DELETED_FORMAT, appMockCallTestVO.getMockTestName()); + } else { + label = String.format(NOT_DELETED_FORMAT, appMockCallTestVO.getMockTestName()); + } + textValues.add(new TextValue(label, appMockCallTestVO.getTestJson())); + } + return textValues; + } +} diff --git a/admin/admin-dal/src/main/java/cn/icanci/loopstack/amc/admin/dal/mongodb/daointerface/AppMockCallTestDAO.java b/admin/admin-dal/src/main/java/cn/icanci/loopstack/amc/admin/dal/mongodb/daointerface/AppMockCallTestDAO.java new file mode 100644 index 0000000..242eb1c --- /dev/null +++ b/admin/admin-dal/src/main/java/cn/icanci/loopstack/amc/admin/dal/mongodb/daointerface/AppMockCallTestDAO.java @@ -0,0 +1,26 @@ +package cn.icanci.loopstack.amc.admin.dal.mongodb.daointerface; + +import cn.icanci.loopstack.amc.admin.dal.mongodb.dataobject.AppMockCallTestDO; + +/** + * @author icanci + * @since 1.0 Created in 2023/01/15 12:23 + */ +public interface AppMockCallTestDAO extends BaseDAO { + /** + * 文档对应的名字 + */ + String COLLECTION_NAME = "amc-app-mock-call-test"; + /** + * 文档对应的Class + */ + Class COLLECTION_CLASS = AppMockCallTestDO.class; + + AppMockCallTestDO queryByAppMockName(String mockName); + + interface AppMockCallTestColumn extends BaseColumn { + String mockTestName = "mockTestName"; + String appUuid = "appUuid"; + String testJson = "testJson"; + } +} diff --git a/admin/admin-dal/src/main/java/cn/icanci/loopstack/amc/admin/dal/mongodb/dataobject/AppMockCallTestDO.java b/admin/admin-dal/src/main/java/cn/icanci/loopstack/amc/admin/dal/mongodb/dataobject/AppMockCallTestDO.java new file mode 100644 index 0000000..d0ca9a8 --- /dev/null +++ b/admin/admin-dal/src/main/java/cn/icanci/loopstack/amc/admin/dal/mongodb/dataobject/AppMockCallTestDO.java @@ -0,0 +1,45 @@ +package cn.icanci.loopstack.amc.admin.dal.mongodb.dataobject; + +/** +* @author icanci +* @since 1.0 Created in 2023/01/07 15:22 +*/ +public class AppMockCallTestDO extends BaseDO { + + /** + * mock 配置名称 + */ + private String mockTestName; + /** + * 脚本关联的uuid + */ + private String appUuid; + /** + * 脚本的请求方法 + */ + private String testJson; + + public String getMockTestName() { + return mockTestName; + } + + public void setMockTestName(String mockTestName) { + this.mockTestName = mockTestName; + } + + public String getAppUuid() { + return appUuid; + } + + public void setAppUuid(String appUuid) { + this.appUuid = appUuid; + } + + public String getTestJson() { + return testJson; + } + + public void setTestJson(String testJson) { + this.testJson = testJson; + } +} \ No newline at end of file diff --git a/admin/admin-dal/src/main/java/cn/icanci/loopstack/amc/admin/dal/mongodb/mongo/MongoAppMockCallTestDAO.java b/admin/admin-dal/src/main/java/cn/icanci/loopstack/amc/admin/dal/mongodb/mongo/MongoAppMockCallTestDAO.java new file mode 100644 index 0000000..89c3ef9 --- /dev/null +++ b/admin/admin-dal/src/main/java/cn/icanci/loopstack/amc/admin/dal/mongodb/mongo/MongoAppMockCallTestDAO.java @@ -0,0 +1,72 @@ +package cn.icanci.loopstack.amc.admin.dal.mongodb.mongo; + +import cn.icanci.loopstack.amc.admin.dal.mongodb.daointerface.AppMockCallTestDAO; +import cn.icanci.loopstack.amc.admin.dal.mongodb.dataobject.AppMockCallTestDO; +import cn.icanci.loopstack.amc.common.model.PageList; + +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.data.domain.Sort; +import org.springframework.data.mongodb.core.query.Criteria; +import org.springframework.data.mongodb.core.query.Query; +import org.springframework.stereotype.Service; + +/** + * @author icanci + * @since 1.0 Created in 2023/01/17 19:19 + */ +@Service("appMockCallTestDAO") +public class MongoAppMockCallTestDAO extends AbstractBaseDAO implements AppMockCallTestDAO { + + @Override + public void insert(AppMockCallTestDO appMockCallTestDO) { + super.insert(appMockCallTestDO); + mongoTemplate.insert(appMockCallTestDO, COLLECTION_NAME); + } + + @Override + public void update(AppMockCallTestDO appMockCallTestDO) { + super.update(appMockCallTestDO); + mongoTemplate.save(appMockCallTestDO, COLLECTION_NAME); + } + + @Override + public List queryAll() { + Criteria criteria = Criteria.where(AppMockCallTestColumn.env).is(DEFAULT_ENV); + Query query = new Query(criteria); + return mongoTemplate.find(query, COLLECTION_CLASS, COLLECTION_NAME); + } + + @Override + public PageList pageQuery(AppMockCallTestDO appMockCallTestDO, int pageNum, int pageSize) { + Criteria criteria = Criteria.where(AppMockCallTestColumn.env).is(DEFAULT_ENV); + + if (StringUtils.isNotBlank(appMockCallTestDO.getMockTestName())) { + // 不分区大小写查询,其中操作符"i":表示不分区大小写 + criteria.and(AppMockCallTestColumn.mockTestName).regex("^.*" + appMockCallTestDO.getMockTestName() + ".*$", "i"); + } + + Query query = new Query(criteria); + query.with(Sort.by(Sort.Direction.DESC, AppMockCallTestColumn.createTime)); + + return pageQuery(query, COLLECTION_CLASS, pageSize, pageNum, COLLECTION_NAME); + } + + @Override + public AppMockCallTestDO queryOneById(String _id) { + Criteria criteria = Criteria.where(AppMockCallTestColumn._id).is(_id); + criteria.and(AppMockCallTestColumn.env).is(DEFAULT_ENV); + Query query = new Query(criteria); + return mongoTemplate.findOne(query, COLLECTION_CLASS, COLLECTION_NAME); + } + + @Override + public AppMockCallTestDO queryByAppMockName(String mockName) { + Criteria criteria = Criteria.where(AppMockCallTestColumn.mockTestName).is(mockName); + criteria.and(AppMockCallTestColumn.env).is(DEFAULT_ENV); + Query query = new Query(criteria); + return mongoTemplate.findOne(query, COLLECTION_CLASS, COLLECTION_NAME); + } + +} \ No newline at end of file diff --git a/admin/admin-views/src/main/resources/vueboot/src/api/appMockCallTestApi.js b/admin/admin-views/src/main/resources/vueboot/src/api/appMockCallTestApi.js new file mode 100644 index 0000000..3f386bc --- /dev/null +++ b/admin/admin-views/src/main/resources/vueboot/src/api/appMockCallTestApi.js @@ -0,0 +1,46 @@ +import request from '@/utils/request' + +/** + * 分页查询 + * + * @param appMockCallTest appMockCallTest + * @param paginator paginator + * @returns {*} + */ +export async function appMockCallTestQuery(appMockCallTest, paginator) { + return await request({ + url: '/amc/appMockCallTest/query', + method: 'post', + data: { + 'appMockCallTest': appMockCallTest, + 'paginator': paginator + } + }) +} + +/** + * 保存 + * + * @param appMockCallTest appMockCallTest + * @returns {*} + */ +export async function saveAppMockTestCall(appMockCallTest) { + return await request({ + url: '/amc/appMockCallTest/save', + method: 'post', + data: appMockCallTest + }) +} + +/** + * validateAppMockCallName + * + * @param mockTestName mockTestName + * @returns {*} + */ +export async function validateAppMockCallTestName(mockTestName) { + return await request({ + url: '/amc/appMockCallTest/validateAppMockCallTestName/' + mockTestName, + method: 'get' + }) +} diff --git a/admin/admin-views/src/main/resources/vueboot/src/api/loadSelectorApi.js b/admin/admin-views/src/main/resources/vueboot/src/api/loadSelectorApi.js index a60c17d..f1d54f9 100644 --- a/admin/admin-views/src/main/resources/vueboot/src/api/loadSelectorApi.js +++ b/admin/admin-views/src/main/resources/vueboot/src/api/loadSelectorApi.js @@ -65,7 +65,7 @@ export async function loadAppIdSelector() { } /** - * loadAppSelector + * loadAppMockCallSelector * * @returns {*} */ @@ -80,6 +80,22 @@ export async function loadAppMockCallSelector() { return [] } +/** + * loadAppMockCallTestSelector + * + * @returns {*} + */ +export async function loadAppMockCallTestSelector() { + let ret = await request({ + url: '/amc/appMockCallTest/loadSelector', + method: 'get', + }); + if (ret.ok) { + return ret.data.textValues; + } + return [] +} + /** * loadScriptSelector * diff --git a/admin/admin-views/src/main/resources/vueboot/src/router/index.js b/admin/admin-views/src/main/resources/vueboot/src/router/index.js index 3c1d002..b075efc 100644 --- a/admin/admin-views/src/main/resources/vueboot/src/router/index.js +++ b/admin/admin-views/src/main/resources/vueboot/src/router/index.js @@ -81,6 +81,15 @@ export const constantRouterMap = [ icon: 'exit-fullscreen' } }, + { + path: 'mockCallTest', + name: 'Mock配置', + component: () => import('@/views/config/mockCallTest'), + meta: { + title: 'Mock配置', + icon: 'chart' + } + }, { path: 'mockCall', name: 'Mock调用配置', diff --git a/admin/admin-views/src/main/resources/vueboot/src/views/config/dialog/mockCallForm.vue b/admin/admin-views/src/main/resources/vueboot/src/views/config/dialog/mockCallForm.vue index 4569618..a118c89 100644 --- a/admin/admin-views/src/main/resources/vueboot/src/views/config/dialog/mockCallForm.vue +++ b/admin/admin-views/src/main/resources/vueboot/src/views/config/dialog/mockCallForm.vue @@ -98,7 +98,7 @@ import {loadAppSelector, loadScriptSelector} from "../../../api/loadSelectorApi" import {mockCallDebug, saveAppMockCall, validateAppMockCallName} from "../../../api/appMockCallApi"; export default { - name: "appConfigForm", + name: "mockCallForm", filters: {}, components: {}, data() { @@ -106,7 +106,7 @@ export default { if (this.saveData.id) { callback() } - let ret = await validateAppMockCallName(this.saveData.appConfigName); + let ret = await validateAppMockCallName(this.saveData.mockName); if (ret.data.result) { callback() } else { diff --git a/admin/admin-views/src/main/resources/vueboot/src/views/config/dialog/mockCallTestForm.vue b/admin/admin-views/src/main/resources/vueboot/src/views/config/dialog/mockCallTestForm.vue new file mode 100644 index 0000000..bd442b0 --- /dev/null +++ b/admin/admin-views/src/main/resources/vueboot/src/views/config/dialog/mockCallTestForm.vue @@ -0,0 +1,149 @@ + + + diff --git a/admin/admin-views/src/main/resources/vueboot/src/views/config/dialog/teamForm.vue b/admin/admin-views/src/main/resources/vueboot/src/views/config/dialog/teamForm.vue index d5585fb..74f5096 100644 --- a/admin/admin-views/src/main/resources/vueboot/src/views/config/dialog/teamForm.vue +++ b/admin/admin-views/src/main/resources/vueboot/src/views/config/dialog/teamForm.vue @@ -3,32 +3,32 @@