diff --git a/admin/admin-biz/src/main/java/cn/icanci/loopstack/ddk/admin/biz/service/AppConfigService.java b/admin/admin-biz/src/main/java/cn/icanci/loopstack/ddk/admin/biz/service/AppConfigService.java index 905730b5b69f69507bae494e3b00ee221b18e84d..b9083a399b37827ad8918e5acd6d39f755057dd9 100644 --- a/admin/admin-biz/src/main/java/cn/icanci/loopstack/ddk/admin/biz/service/AppConfigService.java +++ b/admin/admin-biz/src/main/java/cn/icanci/loopstack/ddk/admin/biz/service/AppConfigService.java @@ -1,9 +1,22 @@ package cn.icanci.loopstack.ddk.admin.biz.service; +import cn.icanci.loopstack.ddk.common.model.PageList; +import cn.icanci.loopstack.ddk.common.model.TextValue; +import cn.icanci.loopstack.ddk.common.model.config.AppConfigVO; + +import java.util.List; + /** * @author icanci * @since 1.0 Created in 2023/01/05 21:40 */ public interface AppConfigService { + PageList queryPage(AppConfigVO vo, int currentPage, int pageSize); + + void save(AppConfigVO vo); + + AppConfigVO queryByAppConfigName(String appConfigName); + + List loadSelector(); } diff --git a/admin/admin-biz/src/main/java/cn/icanci/loopstack/ddk/admin/biz/service/impl/AppConfigServiceImpl.java b/admin/admin-biz/src/main/java/cn/icanci/loopstack/ddk/admin/biz/service/impl/AppConfigServiceImpl.java index 20101ffeb72ebcfec7d7010671c40d3b84935915..52e5a86f80e321952e0008b7de06a82af42fbc0c 100644 --- a/admin/admin-biz/src/main/java/cn/icanci/loopstack/ddk/admin/biz/service/impl/AppConfigServiceImpl.java +++ b/admin/admin-biz/src/main/java/cn/icanci/loopstack/ddk/admin/biz/service/impl/AppConfigServiceImpl.java @@ -1,18 +1,96 @@ package cn.icanci.loopstack.ddk.admin.biz.service.impl; +import cn.hutool.json.JSONUtil; +import cn.icanci.loopstack.ddk.admin.biz.event.log.LogEvent; +import cn.icanci.loopstack.ddk.admin.biz.mapping.config.AppConfigMapping; import cn.icanci.loopstack.ddk.admin.biz.service.AppConfigService; +import cn.icanci.loopstack.ddk.admin.biz.service.BaseService; +import cn.icanci.loopstack.ddk.admin.biz.utils.EnvUtils; +import cn.icanci.loopstack.ddk.admin.dal.mapper.entity.AppConfigDO; import cn.icanci.loopstack.ddk.admin.dal.mapper.mapper.AppConfigMapper; +import cn.icanci.loopstack.ddk.common.enums.LogOperatorTypeEnum; +import cn.icanci.loopstack.ddk.common.enums.ModuleTypeEnum; +import cn.icanci.loopstack.ddk.common.model.PageList; +import cn.icanci.loopstack.ddk.common.model.TextValue; +import cn.icanci.loopstack.ddk.common.model.config.AppConfigVO; +import cn.icanci.loopstack.ddk.common.utils.PaginatorUtils; + +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/06 09:45 */ @Service -public class AppConfigServiceImpl implements AppConfigService { +public class AppConfigServiceImpl extends BaseService implements AppConfigService { @Resource - private AppConfigMapper appConfigMapper; + private AppConfigMapper appConfigMapper; + @Resource + private AppConfigMapping appConfigMapping; + + @Override + public PageList queryPage(AppConfigVO vo, int currentPage, int pageSize) { + vo.setEnv(getEnv()); + vo.setIsDelete(null); + + currentPage = Math.max(currentPage - 1, 0); + + List ret = appConfigMapper.selectPage(appConfigMapping.vo2do(vo), currentPage, pageSize); + + return PaginatorUtils.formatPaginator(appConfigMapping.dos2vos(ret), currentPage, pageSize); + } + + @Override + public void save(AppConfigVO vo) { + if (doInsert(vo)) { + beforeInsert(vo); + AppConfigDO appConfigDO = appConfigMapping.vo2do(vo); + appConfigMapper.insert(appConfigDO); + eventDispatcher.fire(new LogEvent(vo.getUuid(), ModuleTypeEnum.DDK_APP_CONFIG, JSONUtil.toJsonStr(appConfigDO), LogOperatorTypeEnum.CREATE), false); + } else { + beforeUpdate(vo); + AppConfigDO appConfigDO = appConfigMapping.vo2do(vo); + appConfigMapper.update(appConfigDO); + eventDispatcher.fire(new LogEvent(vo.getUuid(), ModuleTypeEnum.DDK_APP_CONFIG, JSONUtil.toJsonStr(appConfigDO), LogOperatorTypeEnum.UPDATE), false); + } + } + + @Override + public AppConfigVO queryByAppConfigName(String appConfigName) { + AppConfigDO config = appConfigMapper.queryByAppConfigName(appConfigName, EnvUtils.getEnv()); + return appConfigMapping.do2vo(config); + } + + @Override + public List loadSelector() { + AppConfigDO appConfigDO = new AppConfigDO(); + appConfigDO.setEnv(getEnv()); + + List apps = appConfigMapper.selectList(appConfigDO); + + if (CollectionUtils.isEmpty(apps)) { + return Lists.newArrayList(); + } + + List appConfigVOS = appConfigMapping.dos2vos(apps); + List textValues = Lists.newArrayList(); + for (AppConfigVO appConfigVO : appConfigVOS) { + String label; + if (isDeleted(appConfigVO)) { + label = String.format(DELETED_FORMAT, appConfigVO.getAppConfigName()); + } else { + label = String.format(NOT_DELETED_FORMAT, appConfigVO.getAppConfigName()); + } + String value = appConfigVO.getUuid(); + textValues.add(new TextValue(label, value)); + } + return textValues; + } } diff --git a/admin/admin-dal/src/main/java/cn/icanci/loopstack/ddk/admin/dal/mapper/mapper/AppConfigMapper.java b/admin/admin-dal/src/main/java/cn/icanci/loopstack/ddk/admin/dal/mapper/mapper/AppConfigMapper.java index 8270f02b2654a42626d86ccfc67f14a5063ce46c..e2eb63346459dbfab9ad5483cb5ed045c7374ebe 100644 --- a/admin/admin-dal/src/main/java/cn/icanci/loopstack/ddk/admin/dal/mapper/mapper/AppConfigMapper.java +++ b/admin/admin-dal/src/main/java/cn/icanci/loopstack/ddk/admin/dal/mapper/mapper/AppConfigMapper.java @@ -1,11 +1,12 @@ package cn.icanci.loopstack.ddk.admin.dal.mapper.mapper; -import cn.icanci.loopstack.ddk.admin.dal.mapper.entity.*; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; +import cn.icanci.loopstack.ddk.admin.dal.mapper.entity.AppConfigDO; import java.util.List; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + /** * DdkAppConfigMapper * ⚠️ 修改之后请勿使用生成器再次生成,否则会覆盖修改 @@ -80,4 +81,13 @@ public interface AppConfigMapper { * @param ddkAppConfig 查询条件 **/ int total(AppConfigDO ddkAppConfig); + + /** + * queryByAppConfigName + * + * @param appConfigName appConfigName + * @param env env + * @return AppConfigDO + */ + AppConfigDO queryByAppConfigName(@Param("appConfigName")String appConfigName,@Param("env") String env); } diff --git a/admin/admin-dal/src/main/resources/mybatis/mapper/AppConfigMapper.xml b/admin/admin-dal/src/main/resources/mybatis/mapper/AppConfigMapper.xml index 59259dea11cc9da1d51b86f08773241ead5631c6..0858682342fa735ccbf983e9ddbe4e8fa3785602 100644 --- a/admin/admin-dal/src/main/resources/mybatis/mapper/AppConfigMapper.xml +++ b/admin/admin-dal/src/main/resources/mybatis/mapper/AppConfigMapper.xml @@ -239,18 +239,19 @@ and `env` = #{ddkAppConfig.env} - and `app_config_name` = #{ddkAppConfig.appConfigName} + and `app_config_name` like CONCAT('%',#{ddkAppConfig.appConfigName},'%') - and `app_config_value` = #{ddkAppConfig.appConfigValue} + and `app_config_value` like CONCAT('%',#{ddkAppConfig.appConfigValue},'%') and `app_config_type` = #{ddkAppConfig.appConfigType} - and `app_uuid` = #{ddkAppConfig.appUuid} + and `app_uuid` like CONCAT('%',#{ddkAppConfig.appUuid},'%') + order by create_time desc limit #{page,jdbcType=INTEGER}, #{pageSize,jdbcType=INTEGER} @@ -293,4 +294,10 @@ + \ No newline at end of file diff --git a/admin/admin-views/src/main/resources/vueboot/src/api/appConfigApi.js b/admin/admin-views/src/main/resources/vueboot/src/api/appConfigApi.js new file mode 100644 index 0000000000000000000000000000000000000000..c9e9b32f918cf7eb6cc5595085863f5657d58bd4 --- /dev/null +++ b/admin/admin-views/src/main/resources/vueboot/src/api/appConfigApi.js @@ -0,0 +1,46 @@ +import request from '@/utils/request' + +/** + * 分页查询 + * + * @param app app + * @param paginator paginator + * @returns {*} + */ +export async function appConfigQuery(appConfig, paginator) { + return await request({ + url: '/ddk/appConfig/query', + method: 'post', + data: { + 'appConfig': appConfig, + 'paginator': paginator + } + }) +} + +/** + * 保存 + * + * @param appConfig appConfig + * @returns {*} + */ +export async function saveAppConfig(appConfig) { + return await request({ + url: '/ddk/appConfig/save', + method: 'post', + data: appConfig + }) +} + +/** + * remoteValidateAppConfigName + * + * @param appConfigName appConfigName + * @returns {*} + */ +export async function remoteValidateAppConfigName(appConfigName) { + return await request({ + url: '/ddk/appConfig/validateAppConfigName/' + appConfigName, + method: 'get' + }) +} 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 2bf1e9af29c582bb72295dd3b6cf1d610a703f7f..dcccf1c02b0304592a566f4ca0562f2565811026 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,15 +81,16 @@ export const constantRouterMap = [ icon: 'exit-fullscreen' } }, + { + path: 'baseData', + name: '项目配置', + component: () => import('@/views/config/appConfig'), + meta: { + title: '项目配置', + icon: 'form' + } + }, // { - // path: 'baseData', - // name: 'baseData', - // component: () => import('@/views/ruleConfig/baseData'), - // meta: { - // title: '基础数据配置', - // icon: 'form' - // } - // }, { // path: 'dataSource', // name: 'dataSource', // component: () => import('@/views/ruleConfig/dataSource'), diff --git a/admin/admin-views/src/main/resources/vueboot/src/views/config/appConfig.vue b/admin/admin-views/src/main/resources/vueboot/src/views/config/appConfig.vue new file mode 100644 index 0000000000000000000000000000000000000000..0140ff4c835613c1c39efea0aefcb518c1357283 --- /dev/null +++ b/admin/admin-views/src/main/resources/vueboot/src/views/config/appConfig.vue @@ -0,0 +1,218 @@ + + + + + diff --git a/admin/admin-views/src/main/resources/vueboot/src/views/config/dialog/appConfigForm.vue b/admin/admin-views/src/main/resources/vueboot/src/views/config/dialog/appConfigForm.vue new file mode 100644 index 0000000000000000000000000000000000000000..444aff7550a9eb5194dc8e9c0b428c15a7185e60 --- /dev/null +++ b/admin/admin-views/src/main/resources/vueboot/src/views/config/dialog/appConfigForm.vue @@ -0,0 +1,149 @@ + + + diff --git a/admin/admin-views/src/main/resources/vueboot/src/views/config/dialog/appForm.vue b/admin/admin-views/src/main/resources/vueboot/src/views/config/dialog/appForm.vue index f142771861fec95bec1c7c0dbccde00c88e3fc9c..5cf5bb2d2123c06409d3b38cb91a46f5ceb6b5f6 100644 --- a/admin/admin-views/src/main/resources/vueboot/src/views/config/dialog/appForm.vue +++ b/admin/admin-views/src/main/resources/vueboot/src/views/config/dialog/appForm.vue @@ -38,7 +38,7 @@ - + diff --git a/admin/admin-views/src/main/resources/vueboot/src/views/config/dialog/groupForm.vue b/admin/admin-views/src/main/resources/vueboot/src/views/config/dialog/groupForm.vue index e8bcc914091dacfa7cd287bbd6b93795dfd93ce6..32608d895e4208b5815f3ee706287f150ca421fb 100644 --- a/admin/admin-views/src/main/resources/vueboot/src/views/config/dialog/groupForm.vue +++ b/admin/admin-views/src/main/resources/vueboot/src/views/config/dialog/groupForm.vue @@ -22,7 +22,7 @@ - + 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 2b300a06dec1d3620a3788fda41a72e2943a8f7a..d5585fb73f01c78b5143b0b4932a08eea639f4e2 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 @@ -38,7 +38,7 @@ - + diff --git a/admin/admin-web/src/main/java/cn/icanci/loopstack/ddk/web/controller/config/AppConfigController.java b/admin/admin-web/src/main/java/cn/icanci/loopstack/ddk/web/controller/config/AppConfigController.java new file mode 100644 index 0000000000000000000000000000000000000000..c4b9b58eaf9013be19c910e634147918abcd52ed --- /dev/null +++ b/admin/admin-web/src/main/java/cn/icanci/loopstack/ddk/web/controller/config/AppConfigController.java @@ -0,0 +1,54 @@ +package cn.icanci.loopstack.ddk.web.controller.config; + +import java.util.List; + +import javax.annotation.Resource; + +import org.springframework.web.bind.annotation.*; + +import cn.icanci.loopstack.ddk.admin.biz.service.AppConfigService; +import cn.icanci.loopstack.ddk.common.model.TextValue; +import cn.icanci.loopstack.ddk.common.model.config.AppConfigVO; +import cn.icanci.loopstack.ddk.common.result.R; +import cn.icanci.loopstack.ddk.web.form.AppConfigQueryForm; +import cn.icanci.loopstack.ddk.web.mapping.AppConfigWebMapping; +import cn.icanci.loopstack.ddk.web.model.AppConfig; + +/** + * @author icanci + * @since 1.0 Created in 2023/01/06 21:11 + */ +@RestController +@RequestMapping("/ddk/appConfig") +public class AppConfigController { + @Resource + private AppConfigService appConfigService; + + @Resource + private AppConfigWebMapping appConfigWebMapping; + + @PostMapping("query") + public R query(@RequestBody AppConfigQueryForm form) { + return R.builderOk() + .data("queryPage", appConfigService.queryPage(appConfigWebMapping.web2vo(form.getAppConfig()), form.getPaginator().getCurrentPage(), form.getPaginator().getPageSize())) + .build(); + } + + @PostMapping("save") + public R save(@RequestBody AppConfig appConfig) { + appConfigService.save(appConfigWebMapping.web2vo(appConfig)); + return R.builderOk().build(); + } + + @GetMapping("validateAppConfigName/{appConfigName:.*}") + public R validateAppConfigName(@PathVariable("appConfigName") String appConfigName) { + AppConfigVO appConfigVO = appConfigService.queryByAppConfigName(appConfigName); + return R.builderOk().data("result", appConfigVO == null).build(); + } + + @GetMapping("loadSelector") + public R loadSelector() { + List textValues = appConfigService.loadSelector(); + return R.builderOk().data("textValues", textValues).build(); + } +} diff --git a/admin/admin-web/src/main/java/cn/icanci/loopstack/ddk/web/form/AppConfigQueryForm.java b/admin/admin-web/src/main/java/cn/icanci/loopstack/ddk/web/form/AppConfigQueryForm.java new file mode 100644 index 0000000000000000000000000000000000000000..9d1269375d5690be6deeb39aa387f5576a1a86eb --- /dev/null +++ b/admin/admin-web/src/main/java/cn/icanci/loopstack/ddk/web/form/AppConfigQueryForm.java @@ -0,0 +1,22 @@ +package cn.icanci.loopstack.ddk.web.form; + +import cn.icanci.loopstack.ddk.web.model.AppConfig; + +/** + * @author icanci + * @since 1.0 Created in 2023/01/08 11:28 + */ +public class AppConfigQueryForm extends BaseQueryForm { + /** + * appConfig 查询信息 + */ + private AppConfig appConfig; + + public AppConfig getAppConfig() { + return appConfig; + } + + public void setAppConfig(AppConfig appConfig) { + this.appConfig = appConfig; + } +}