From a1679eec5003bceb4d1b95def140049e291eb92c Mon Sep 17 00:00:00 2001 From: lyd <1419499670@qq.com> Date: Fri, 5 Aug 2022 13:53:58 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A8=E6=A0=BC=E5=88=97=E8=A1=A8-=E8=A1=A8?= =?UTF-8?q?=E5=8D=95=E6=9E=84=E5=BB=BA-redis=E7=9B=91=E6=8E=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nladmin-system/pom.xml | 11 +- .../src/main/java/org/nl/AppRun.java | 4 + .../modules/system/rest/GridController.java | 69 ++ .../system/rest/GridFieldController.java | 89 ++ .../modules/system/rest/RedisController.java | 57 + .../system/service/GridFieldService.java | 68 ++ .../modules/system/service/GridService.java | 53 + .../modules/system/service/RedisService.java | 35 + .../system/service/convert/RedisConvert.java | 39 + .../modules/system/service/dto/GridDto.java | 61 + .../system/service/dto/GridFieldDto.java | 96 ++ .../system/service/entity/RedisKeyDefine.java | 112 ++ .../service/entity/RedisKeyRegistry.java | 28 + .../service/impl/GridFieldServiceImpl.java | 139 +++ .../system/service/impl/GridServiceImpl.java | 110 ++ .../system/service/impl/RedisServiceImpl.java | 84 ++ .../system/service/vo/IdempotentRedisDAO.java | 35 + .../service/vo/RedisKeyDefineRespVO.java | 39 + .../system/service/vo/RedisMonitorRespVO.java | 47 + .../vo/YudaoIdempotentConfiguration.java | 21 + .../org/nl/modules/system/wql/GRIDFIELD.wql | 56 + nladmin-ui/package.json | 5 +- nladmin-ui/src/api/system/grid.js | 33 + nladmin-ui/src/api/system/gridField.js | 50 + nladmin-ui/src/api/system/redis.js | 35 + nladmin-ui/src/assets/icons/svg/button.svg | 1 + nladmin-ui/src/assets/icons/svg/cascader.svg | 1 + nladmin-ui/src/assets/icons/svg/checkbox.svg | 1 + nladmin-ui/src/assets/icons/svg/color.svg | 1 + nladmin-ui/src/assets/icons/svg/component.svg | 1 + .../src/assets/icons/svg/date-range.svg | 1 + nladmin-ui/src/assets/icons/svg/input.svg | 1 + nladmin-ui/src/assets/icons/svg/number.svg | 1 + nladmin-ui/src/assets/icons/svg/radio.svg | 1 + nladmin-ui/src/assets/icons/svg/rate.svg | 1 + nladmin-ui/src/assets/icons/svg/rich-text.svg | 1 + nladmin-ui/src/assets/icons/svg/row.svg | 1 + nladmin-ui/src/assets/icons/svg/select.svg | 1 + nladmin-ui/src/assets/icons/svg/slider.svg | 1 + nladmin-ui/src/assets/icons/svg/switch.svg | 1 + nladmin-ui/src/assets/icons/svg/table.svg | 1 + nladmin-ui/src/assets/icons/svg/textarea.svg | 1 + .../src/assets/icons/svg/time-range.svg | 1 + nladmin-ui/src/assets/icons/svg/time.svg | 1 + nladmin-ui/src/assets/icons/svg/upload.svg | 1 + nladmin-ui/src/components/TopNav/index.vue | 2 +- .../src/layout/components/TagsView/index.vue | 42 + nladmin-ui/src/main.js | 7 + .../build/components/CodeTypeDialog.vue | 114 ++ .../system/build/components/DraggableItem.vue | 120 ++ .../system/build/components/FormDrawer.vue | 358 ++++++ .../system/build/components/IconsDialog.vue | 126 ++ .../system/build/components/JsonDrawer.vue | 173 +++ .../build/components/ResourceDialog.vue | 118 ++ .../system/build/components/RightPanel.vue | 1047 +++++++++++++++++ .../build/components/TreeNodeDialog.vue | 160 +++ .../system/build/config/pluginsConfig.js | 13 + .../src/views/system/build/css/mixin.scss | 33 + .../views/system/build/generator/config.js | 630 ++++++++++ .../src/views/system/build/generator/css.js | 18 + .../system/build/generator/drawingDefalut.js | 37 + .../src/views/system/build/generator/html.js | 399 +++++++ .../src/views/system/build/generator/js.js | 271 +++++ .../system/build/generator/ruleTrigger.js | 16 + nladmin-ui/src/views/system/build/index.vue | 860 ++++++++++++++ .../src/views/system/build/render/render.js | 121 ++ .../system/build/render/slots/el-button.js | 5 + .../build/render/slots/el-checkbox-group.js | 13 + .../system/build/render/slots/el-input.js | 8 + .../build/render/slots/el-radio-group.js | 13 + .../system/build/render/slots/el-select.js | 9 + .../system/build/render/slots/el-upload.js | 17 + .../src/views/system/build/tinymce/README.md | 3 + .../src/views/system/build/tinymce/config.js | 8 + .../system/build/tinymce/example/Index.vue | 38 + .../src/views/system/build/tinymce/index.js | 3 + .../src/views/system/build/tinymce/index.vue | 88 ++ .../views/system/build/tinymce/package.json | 28 + .../src/views/system/build/tinymce/zh_CN.js | 420 +++++++ nladmin-ui/src/views/system/build/utils/db.js | 54 + .../src/views/system/build/utils/icon.json | 1 + .../src/views/system/build/utils/index.js | 441 +++++++ .../system/build/utils/loadBeautifier.js | 28 + .../views/system/build/utils/loadMonaco.js | 40 + .../views/system/build/utils/loadScript.js | 60 + .../views/system/build/utils/loadTinymce.js | 29 + .../src/views/system/build/utils/rouyi.js | 224 ++++ nladmin-ui/src/views/system/grid/index.vue | 395 +++++++ nladmin-ui/src/views/system/grid/table.vue | 93 ++ nladmin-ui/src/views/system/redis/index.vue | 267 +++++ .../system/timing/components/crontab.vue | 430 +++++++ .../views/system/timing/components/day.vue | 161 +++ .../views/system/timing/components/hour.vue | 114 ++ .../views/system/timing/components/min.vue | 116 ++ .../views/system/timing/components/month.vue | 114 ++ .../views/system/timing/components/result.vue | 556 +++++++++ .../views/system/timing/components/second.vue | 117 ++ .../views/system/timing/components/week.vue | 202 ++++ .../views/system/timing/components/year.vue | 131 +++ nladmin-ui/src/views/system/timing/index.vue | 31 +- 100 files changed, 10306 insertions(+), 12 deletions(-) create mode 100644 nladmin-system/src/main/java/org/nl/modules/system/rest/GridController.java create mode 100644 nladmin-system/src/main/java/org/nl/modules/system/rest/GridFieldController.java create mode 100644 nladmin-system/src/main/java/org/nl/modules/system/rest/RedisController.java create mode 100644 nladmin-system/src/main/java/org/nl/modules/system/service/GridFieldService.java create mode 100644 nladmin-system/src/main/java/org/nl/modules/system/service/GridService.java create mode 100644 nladmin-system/src/main/java/org/nl/modules/system/service/RedisService.java create mode 100644 nladmin-system/src/main/java/org/nl/modules/system/service/convert/RedisConvert.java create mode 100644 nladmin-system/src/main/java/org/nl/modules/system/service/dto/GridDto.java create mode 100644 nladmin-system/src/main/java/org/nl/modules/system/service/dto/GridFieldDto.java create mode 100644 nladmin-system/src/main/java/org/nl/modules/system/service/entity/RedisKeyDefine.java create mode 100644 nladmin-system/src/main/java/org/nl/modules/system/service/entity/RedisKeyRegistry.java create mode 100644 nladmin-system/src/main/java/org/nl/modules/system/service/impl/GridFieldServiceImpl.java create mode 100644 nladmin-system/src/main/java/org/nl/modules/system/service/impl/GridServiceImpl.java create mode 100644 nladmin-system/src/main/java/org/nl/modules/system/service/impl/RedisServiceImpl.java create mode 100644 nladmin-system/src/main/java/org/nl/modules/system/service/vo/IdempotentRedisDAO.java create mode 100644 nladmin-system/src/main/java/org/nl/modules/system/service/vo/RedisKeyDefineRespVO.java create mode 100644 nladmin-system/src/main/java/org/nl/modules/system/service/vo/RedisMonitorRespVO.java create mode 100644 nladmin-system/src/main/java/org/nl/modules/system/service/vo/YudaoIdempotentConfiguration.java create mode 100644 nladmin-system/src/main/java/org/nl/modules/system/wql/GRIDFIELD.wql create mode 100644 nladmin-ui/src/api/system/grid.js create mode 100644 nladmin-ui/src/api/system/gridField.js create mode 100644 nladmin-ui/src/api/system/redis.js create mode 100644 nladmin-ui/src/assets/icons/svg/button.svg create mode 100644 nladmin-ui/src/assets/icons/svg/cascader.svg create mode 100644 nladmin-ui/src/assets/icons/svg/checkbox.svg create mode 100644 nladmin-ui/src/assets/icons/svg/color.svg create mode 100644 nladmin-ui/src/assets/icons/svg/component.svg create mode 100644 nladmin-ui/src/assets/icons/svg/date-range.svg create mode 100644 nladmin-ui/src/assets/icons/svg/input.svg create mode 100644 nladmin-ui/src/assets/icons/svg/number.svg create mode 100644 nladmin-ui/src/assets/icons/svg/radio.svg create mode 100644 nladmin-ui/src/assets/icons/svg/rate.svg create mode 100644 nladmin-ui/src/assets/icons/svg/rich-text.svg create mode 100644 nladmin-ui/src/assets/icons/svg/row.svg create mode 100644 nladmin-ui/src/assets/icons/svg/select.svg create mode 100644 nladmin-ui/src/assets/icons/svg/slider.svg create mode 100644 nladmin-ui/src/assets/icons/svg/switch.svg create mode 100644 nladmin-ui/src/assets/icons/svg/table.svg create mode 100644 nladmin-ui/src/assets/icons/svg/textarea.svg create mode 100644 nladmin-ui/src/assets/icons/svg/time-range.svg create mode 100644 nladmin-ui/src/assets/icons/svg/time.svg create mode 100644 nladmin-ui/src/assets/icons/svg/upload.svg create mode 100644 nladmin-ui/src/views/system/build/components/CodeTypeDialog.vue create mode 100644 nladmin-ui/src/views/system/build/components/DraggableItem.vue create mode 100644 nladmin-ui/src/views/system/build/components/FormDrawer.vue create mode 100644 nladmin-ui/src/views/system/build/components/IconsDialog.vue create mode 100644 nladmin-ui/src/views/system/build/components/JsonDrawer.vue create mode 100644 nladmin-ui/src/views/system/build/components/ResourceDialog.vue create mode 100644 nladmin-ui/src/views/system/build/components/RightPanel.vue create mode 100644 nladmin-ui/src/views/system/build/components/TreeNodeDialog.vue create mode 100644 nladmin-ui/src/views/system/build/config/pluginsConfig.js create mode 100644 nladmin-ui/src/views/system/build/css/mixin.scss create mode 100644 nladmin-ui/src/views/system/build/generator/config.js create mode 100644 nladmin-ui/src/views/system/build/generator/css.js create mode 100644 nladmin-ui/src/views/system/build/generator/drawingDefalut.js create mode 100644 nladmin-ui/src/views/system/build/generator/html.js create mode 100644 nladmin-ui/src/views/system/build/generator/js.js create mode 100644 nladmin-ui/src/views/system/build/generator/ruleTrigger.js create mode 100644 nladmin-ui/src/views/system/build/index.vue create mode 100644 nladmin-ui/src/views/system/build/render/render.js create mode 100644 nladmin-ui/src/views/system/build/render/slots/el-button.js create mode 100644 nladmin-ui/src/views/system/build/render/slots/el-checkbox-group.js create mode 100644 nladmin-ui/src/views/system/build/render/slots/el-input.js create mode 100644 nladmin-ui/src/views/system/build/render/slots/el-radio-group.js create mode 100644 nladmin-ui/src/views/system/build/render/slots/el-select.js create mode 100644 nladmin-ui/src/views/system/build/render/slots/el-upload.js create mode 100644 nladmin-ui/src/views/system/build/tinymce/README.md create mode 100644 nladmin-ui/src/views/system/build/tinymce/config.js create mode 100644 nladmin-ui/src/views/system/build/tinymce/example/Index.vue create mode 100644 nladmin-ui/src/views/system/build/tinymce/index.js create mode 100644 nladmin-ui/src/views/system/build/tinymce/index.vue create mode 100644 nladmin-ui/src/views/system/build/tinymce/package.json create mode 100644 nladmin-ui/src/views/system/build/tinymce/zh_CN.js create mode 100644 nladmin-ui/src/views/system/build/utils/db.js create mode 100644 nladmin-ui/src/views/system/build/utils/icon.json create mode 100644 nladmin-ui/src/views/system/build/utils/index.js create mode 100644 nladmin-ui/src/views/system/build/utils/loadBeautifier.js create mode 100644 nladmin-ui/src/views/system/build/utils/loadMonaco.js create mode 100644 nladmin-ui/src/views/system/build/utils/loadScript.js create mode 100644 nladmin-ui/src/views/system/build/utils/loadTinymce.js create mode 100644 nladmin-ui/src/views/system/build/utils/rouyi.js create mode 100644 nladmin-ui/src/views/system/grid/index.vue create mode 100644 nladmin-ui/src/views/system/grid/table.vue create mode 100644 nladmin-ui/src/views/system/redis/index.vue create mode 100644 nladmin-ui/src/views/system/timing/components/crontab.vue create mode 100644 nladmin-ui/src/views/system/timing/components/day.vue create mode 100644 nladmin-ui/src/views/system/timing/components/hour.vue create mode 100644 nladmin-ui/src/views/system/timing/components/min.vue create mode 100644 nladmin-ui/src/views/system/timing/components/month.vue create mode 100644 nladmin-ui/src/views/system/timing/components/result.vue create mode 100644 nladmin-ui/src/views/system/timing/components/second.vue create mode 100644 nladmin-ui/src/views/system/timing/components/week.vue create mode 100644 nladmin-ui/src/views/system/timing/components/year.vue diff --git a/nladmin-system/pom.xml b/nladmin-system/pom.xml index 954dcc2e5..23c775483 100644 --- a/nladmin-system/pom.xml +++ b/nladmin-system/pom.xml @@ -20,12 +20,11 @@ - - - - - - + + com.alicp.jetcache + jetcache-starter-redis + 2.5.14 + org.nl diff --git a/nladmin-system/src/main/java/org/nl/AppRun.java b/nladmin-system/src/main/java/org/nl/AppRun.java index 6db3e946b..768ea50c4 100644 --- a/nladmin-system/src/main/java/org/nl/AppRun.java +++ b/nladmin-system/src/main/java/org/nl/AppRun.java @@ -1,5 +1,7 @@ package org.nl; +import com.alicp.jetcache.anno.config.EnableCreateCacheAnnotation; +import com.alicp.jetcache.anno.config.EnableMethodCache; import io.swagger.annotations.Api; import org.nl.annotation.rest.AnonymousGetMapping; import org.nl.utils.SpringContextHolder; @@ -30,6 +32,8 @@ import org.springframework.web.bind.annotation.RestController; @ServletComponentScan @EnableTransactionManagement @EnableJpaAuditing(auditorAwareRef = "auditorAware") +@EnableMethodCache(basePackages = "org.nl") +@EnableCreateCacheAnnotation public class AppRun { public static void main(String[] args) { diff --git a/nladmin-system/src/main/java/org/nl/modules/system/rest/GridController.java b/nladmin-system/src/main/java/org/nl/modules/system/rest/GridController.java new file mode 100644 index 000000000..1fe847cfa --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/rest/GridController.java @@ -0,0 +1,69 @@ +package org.nl.modules.system.rest; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.annotation.Log; +import org.nl.modules.system.service.GridService; +import org.nl.modules.system.service.dto.GridDto; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + * @Author: lyd + * @Description: 系统表格管理 + * @Date: 2022-08-01 + */ +@RestController +@RequiredArgsConstructor +@Api(tags = "系统表格管理") +@RequestMapping("/api/grid") +@Slf4j +public class GridController { + private final GridService gridService; + + @GetMapping + @Log("查询系统表格") + @ApiOperation("查询系统表格") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page){ + return new ResponseEntity<>(gridService.queryAll(whereJson,page),HttpStatus.OK); + } + + @PostMapping + @Log("新增系统表格") + @ApiOperation("新增系统表格") + public ResponseEntity create(@Validated @RequestBody GridDto dto){ + log.info("dto:{}",dto); + gridService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改系统表格") + @ApiOperation("修改系统表格") + public ResponseEntity update(@Validated @RequestBody GridDto dto){ + gridService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除系统表格") + @ApiOperation("删除系统表格") + @DeleteMapping + public ResponseEntity delete(@RequestBody String[] ids) { + gridService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @GetMapping("/selectList") + @Log("下拉框获取表格数据") + @ApiOperation("下拉框获取表格数据") + public ResponseEntity getGridList(){ + return new ResponseEntity<>(gridService.getGridList(),HttpStatus.OK); + } +} diff --git a/nladmin-system/src/main/java/org/nl/modules/system/rest/GridFieldController.java b/nladmin-system/src/main/java/org/nl/modules/system/rest/GridFieldController.java new file mode 100644 index 000000000..9913847e3 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/rest/GridFieldController.java @@ -0,0 +1,89 @@ +package org.nl.modules.system.rest; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.annotation.Log; +import org.nl.modules.system.service.GridFieldService; +import org.nl.modules.system.service.dto.GridFieldDto; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Map; + +/** + * @Author: lyd + * @Description: 系统表格字段管理 + * @Date: 2022-08-01 + */ +@RestController +@RequiredArgsConstructor +@Api(tags = "系统表格字段管理") +@RequestMapping("/api/gridField") +@Slf4j +public class GridFieldController { + private final GridFieldService gridFieldService; + + @GetMapping + @Log("查询系统表格") + @ApiOperation("查询系统表格") + public ResponseEntity query(@RequestParam Map whereJson, Pageable page){ + return new ResponseEntity<>(gridFieldService.queryAll(whereJson,page),HttpStatus.OK); + } + + @PostMapping + @Log("单个新增表格字段") + @ApiOperation("单个新增表格字段") + public ResponseEntity create(@Validated @RequestBody GridFieldDto dto){ + log.info("dto:{}",dto); + gridFieldService.create(dto); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PutMapping + @Log("修改表格字段") + @ApiOperation("修改表格字段") + public ResponseEntity update(@Validated @RequestBody GridFieldDto dto){ + gridFieldService.update(dto); + return new ResponseEntity<>(HttpStatus.NO_CONTENT); + } + + @Log("删除表格字段") + @ApiOperation("删除表格字段") + @DeleteMapping + public ResponseEntity delete(@RequestBody String[] ids) { + gridFieldService.deleteAll(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PostMapping("/batchAdd") + @Log("批量新增表格字段") + @ApiOperation("批量新增表格字段") + public ResponseEntity batchAdd(@RequestBody JSONObject json){ +// log.info("json{}",json); + gridFieldService.batchAdd(json); + return new ResponseEntity<>(HttpStatus.CREATED); + } + + @PostMapping("/getGridFields") + @Log("根据gridId获取所有字段") + @ApiOperation("根据gridId获取所有字段") + public ResponseEntity getGridFieldsById(@RequestBody String id){ + log.info("dto:{}",id); + return new ResponseEntity<>(gridFieldService.getGridFieldsById(id),HttpStatus.CREATED); + } + + @PostMapping("/getGridFieldsByCode") + @Log("根据gridCode获取所有字段") + @ApiOperation("根据gridCode获取所有字段") + public ResponseEntity getGridFieldsByCode(@RequestBody String grid_code){ + log.info("dto:{}",grid_code); + return new ResponseEntity<>(gridFieldService.getGridFieldsByCode(grid_code),HttpStatus.CREATED); + } +} diff --git a/nladmin-system/src/main/java/org/nl/modules/system/rest/RedisController.java b/nladmin-system/src/main/java/org/nl/modules/system/rest/RedisController.java new file mode 100644 index 000000000..1b4ca8c9c --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/rest/RedisController.java @@ -0,0 +1,57 @@ +package org.nl.modules.system.rest; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.annotation.Log; +import org.nl.modules.system.service.RedisService; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +/** + * @Author: lyd + * @Description: Redis监控管理 + * @Date: 2022-08-04 + */ +@RestController +@RequiredArgsConstructor +@Api(tags = "系统表格管理") +@RequestMapping("/api/redis") +@Slf4j +public class RedisController { + + private final RedisService redisService; + + @GetMapping("/get-monitor-info") + @Log("查询redis的信息") + @ApiOperation("查询redis的信息") + public ResponseEntity getRedisMonitorInfo() { + return new ResponseEntity<>(redisService.getRedisMonitorInfo(),HttpStatus.OK); + } + + @GetMapping("/get-key-define-list") + @Log("获得 Redis Key 模板列表") + @ApiOperation("获得 Redis Key 模板列表") + public ResponseEntity getKeyDefineList() { + return new ResponseEntity<>(redisService.getKeyDefineList(),HttpStatus.OK); + } + + @GetMapping("/get-key-value-list") + @Log("获得 Redis Key Value列表") + @ApiOperation("获得 Redis Key Value列表") + public ResponseEntity getKeyValueList() { + return new ResponseEntity<>( redisService.getKeyValueList(),HttpStatus.OK); + } + + @Log("根据key删除Redis数据") + @ApiOperation("根据key删除Redis数据") + @DeleteMapping + public ResponseEntity deleteByKey(@RequestBody String[] ids) { + redisService.deleteByKey(ids); + return new ResponseEntity<>(HttpStatus.OK); + } + + +} diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/GridFieldService.java b/nladmin-system/src/main/java/org/nl/modules/system/service/GridFieldService.java new file mode 100644 index 000000000..89773173b --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/GridFieldService.java @@ -0,0 +1,68 @@ +package org.nl.modules.system.service; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.nl.modules.system.service.dto.GridFieldDto; +import org.springframework.data.domain.Pageable; + +import java.util.Map; + +/** + * @Author: lyd + * @Description: 表格字段服务 + * @Date: 2022-08-01 + */ +public interface GridFieldService { + /** + * 查询数据分页 + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 创建 + * @param dto + */ + void create(GridFieldDto dto); + + /** + * 根据ID查询 + * @param id ID + * @return Param + */ + GridFieldDto findById(String id); + + /** + * 编辑 + * @param dto + */ + void update(GridFieldDto dto); + + /** + * 批量删除 + * @param ids + */ + void deleteAll(String[] ids); + + /** + * 批量添加数据 + * @param json + */ + void batchAdd(JSONObject json); + + /** + * 根据grid_id获取所有字段信息 + * @param id + * @return + */ + JSONArray getGridFieldsById(String id); + + /** + * 根据grid_code获取所有字段信息 + * @param grid_code + * @return + */ + JSONArray getGridFieldsByCode(String grid_code); +} diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/GridService.java b/nladmin-system/src/main/java/org/nl/modules/system/service/GridService.java new file mode 100644 index 000000000..312457bd2 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/GridService.java @@ -0,0 +1,53 @@ +package org.nl.modules.system.service; + +import com.alibaba.fastjson.JSONArray; +import org.nl.modules.system.service.dto.GridDto; +import org.springframework.data.domain.Pageable; + +import java.util.Map; + +/** + * @Author: lyd + * @Description: 表格服务接口 + * @Date: 2022-08-01 + */ +public interface GridService { + /** + * 查询数据分页 + * @param whereJson 条件 + * @param page 分页参数 + * @return Map + */ + Map queryAll(Map whereJson, Pageable page); + + /** + * 创建 + * @param dto + */ + void create(GridDto dto); + + /** + * 根据ID查询 + * @param id ID + * @return Param + */ + GridDto findById(String id); + + /** + * 编辑 + * @param dto + */ + void update(GridDto dto); + + /** + * 批量删除 + * @param ids + */ + void deleteAll(String[] ids); + + /** + * 下拉选择表格 + * @return + */ + JSONArray getGridList(); +} diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/RedisService.java b/nladmin-system/src/main/java/org/nl/modules/system/service/RedisService.java new file mode 100644 index 000000000..e12c48bcf --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/RedisService.java @@ -0,0 +1,35 @@ +package org.nl.modules.system.service; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +/** + * @Author: lyd + * @Description: Redis监控的服务 + * @Date: 2022-08-04 + */ +public interface RedisService { + /** + * 获取redis的信息 + * @return + */ + JSONObject getRedisMonitorInfo(); + + /** + * 获得 Redis Key 模板列表 + * @return + */ + JSONObject getKeyDefineList(); + + /** + * 获取所有的键值信息 + * @return + */ + JSONArray getKeyValueList(); + + /** + * 删除redis缓存数据 + * @param ids + */ + void deleteByKey(String[] ids); +} diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/convert/RedisConvert.java b/nladmin-system/src/main/java/org/nl/modules/system/service/convert/RedisConvert.java new file mode 100644 index 000000000..39d9c1315 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/convert/RedisConvert.java @@ -0,0 +1,39 @@ +package org.nl.modules.system.service.convert; + +import cn.hutool.core.util.StrUtil; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; +import org.nl.modules.system.service.entity.RedisKeyDefine; +import org.nl.modules.system.service.vo.RedisKeyDefineRespVO; +import org.nl.modules.system.service.vo.RedisMonitorRespVO; + +import java.util.ArrayList; +import java.util.List; +import java.util.Properties; + +/** + * @Author: lyd + * @Description: redis---Spring Boot 对象转换 MapStruct + * @Date: 2022-08-04 + */ +@Mapper +public interface RedisConvert { + + RedisConvert INSTANCE = Mappers.getMapper(RedisConvert.class); + + default RedisMonitorRespVO build(Properties info, Long dbSize, Properties commandStats) { + RedisMonitorRespVO respVO = RedisMonitorRespVO.builder().info(info).dbSize(dbSize) + .commandStats(new ArrayList<>(commandStats.size())).build(); + commandStats.forEach((key, value) -> { + respVO.getCommandStats().add(RedisMonitorRespVO.CommandStat.builder() + .command(StrUtil.subAfter((String) key, "cmdstat_", false)) + .calls(Integer.valueOf(StrUtil.subBetween((String) value, "calls=", ","))) + .usec(Long.valueOf(StrUtil.subBetween((String) value, "usec=", ","))) + .build()); + }); + return respVO; + } + + List convertList(List list); + +} diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/dto/GridDto.java b/nladmin-system/src/main/java/org/nl/modules/system/service/dto/GridDto.java new file mode 100644 index 000000000..14ccd520d --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/dto/GridDto.java @@ -0,0 +1,61 @@ +package org.nl.modules.system.service.dto; + +import lombok.Data; + +/** + * @Author: lyd + * @Description: 系统表格dto + * @Date: 2022-08-01 + */ +@Data +public class GridDto { + /** + * 标识id + */ + private String id; + + /** + * 编码 + */ + private String code; + + /** + * 名称 + */ + private String name; + + /** + * 备注 + */ + private String remark; + + /** + * 是否激活 + */ + private String is_active; + + /** + * 是否删除 + */ + private String is_delete; + + /** + * 创建人 + */ + private String create_by; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 更新人 + */ + private String update_by; + + /** + * 更新时间 + */ + private String update_time; +} diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/dto/GridFieldDto.java b/nladmin-system/src/main/java/org/nl/modules/system/service/dto/GridFieldDto.java new file mode 100644 index 000000000..2429f096a --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/dto/GridFieldDto.java @@ -0,0 +1,96 @@ +package org.nl.modules.system.service.dto; + +import lombok.Data; + +/** + * @Author: lyd + * @Description: 表格字段dto + * @Date: 2022-08-01 + */ +@Data +public class GridFieldDto { + /** + * 标识id + */ + private String id; + + /** + * 编码 + */ + private String code; + + /** + * 名称 + */ + private String name; + + /** + * 宽度 + */ + private Integer width; + + /** + * 对齐 + */ + private String align; + + /** + * 格式 + */ + private String format; + + /** + * 备注 + */ + private String remark; + + /** + * 排序 + */ + private Integer sort_num; + + /** + * 是否激活 + */ + private String is_active; + + /** + * 是否删除 + */ + private String is_delete; + + /** + * 是否隐藏 + */ + private String is_hidden; + + /** + * 创建人 + */ + private String create_by; + + /** + * 创建时间 + */ + private String create_time; + + /** + * 更新人 + */ + private String update_by; + + /** + * 更新时间 + */ + private String update_time; + + /** + * 表格id + */ + private String grid_id; + + /** + * 表格名称 + */ + private String grid_name; +} diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/entity/RedisKeyDefine.java b/nladmin-system/src/main/java/org/nl/modules/system/service/entity/RedisKeyDefine.java new file mode 100644 index 000000000..cb6f0310d --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/entity/RedisKeyDefine.java @@ -0,0 +1,112 @@ +package org.nl.modules.system.service.entity; + +import com.fasterxml.jackson.annotation.JsonValue; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.Getter; + +import java.time.Duration; + +/** + * @Author: lyd + * @Description: Redis Key 定义类 + * @Date: 2022-08-04 + */ +@Data +public class RedisKeyDefine { + + @Getter + @AllArgsConstructor + public enum KeyTypeEnum { + + STRING("String"), + LIST("List"), + HASH("Hash"), + SET("Set"), + ZSET("Sorted Set"), + STREAM("Stream"), + PUBSUB("Pub/Sub"); + + /** + * 类型 + */ + @JsonValue + private final String type; + + } + + @Getter + @AllArgsConstructor + public enum TimeoutTypeEnum { + + FOREVER(1), // 永不超时 + DYNAMIC(2), // 动态超时 + FIXED(3); // 固定超时 + + /** + * 类型 + */ + @JsonValue + private final Integer type; + + } + + /** + * Key 模板 + */ + private final String keyTemplate; + /** + * Key 类型的枚举 + */ + private final KeyTypeEnum keyType; + /** + * Value 类型 + * + * 如果是使用分布式锁,设置为 {@link java.util.concurrent.locks.Lock} 类型 + */ + private final Class valueType; + /** + * 超时类型 + */ + private final TimeoutTypeEnum timeoutType; + /** + * 过期时间 + */ + private final Duration timeout; + /** + * 备注 + */ + private final String memo; + + private RedisKeyDefine(String memo, String keyTemplate, KeyTypeEnum keyType, Class valueType, + TimeoutTypeEnum timeoutType, Duration timeout) { + this.memo = memo; + this.keyTemplate = keyTemplate; + this.keyType = keyType; + this.valueType = valueType; + this.timeout = timeout; + this.timeoutType = timeoutType; + // 添加注册表 + RedisKeyRegistry.add(this); + } + + public RedisKeyDefine(String memo, String keyTemplate, KeyTypeEnum keyType, Class valueType, Duration timeout) { + this(memo, keyTemplate, keyType, valueType, TimeoutTypeEnum.FIXED, timeout); + } + + public RedisKeyDefine(String memo, String keyTemplate, KeyTypeEnum keyType, Class valueType, TimeoutTypeEnum timeoutType) { + this(memo, keyTemplate, keyType, valueType, timeoutType, Duration.ZERO); + } + + /** + * 格式化 Key + * + * 注意,内部采用 {@link String#format(String, Object...)} 实现 + * + * @param args 格式化的参数 + * @return Key + */ + public String formatKey(Object... args) { + return String.format(keyTemplate, args); + } +} diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/entity/RedisKeyRegistry.java b/nladmin-system/src/main/java/org/nl/modules/system/service/entity/RedisKeyRegistry.java new file mode 100644 index 000000000..8b5bb264f --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/entity/RedisKeyRegistry.java @@ -0,0 +1,28 @@ +package org.nl.modules.system.service.entity; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Author: lyd + * @Description: {@link RedisKeyDefine} 注册表 + * @Date: 2022-08-04 + */ +public class RedisKeyRegistry { + /** + * Redis RedisKeyDefine 数组 + */ + private static final List defines = new ArrayList<>(); + + public static void add(RedisKeyDefine define) { + defines.add(define); + } + + public static List list() { + return defines; + } + + public static int size() { + return defines.size(); + } +} diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/impl/GridFieldServiceImpl.java b/nladmin-system/src/main/java/org/nl/modules/system/service/impl/GridFieldServiceImpl.java new file mode 100644 index 000000000..1cd9a9eef --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/impl/GridFieldServiceImpl.java @@ -0,0 +1,139 @@ +package org.nl.modules.system.service.impl; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.exception.BadRequestException; +import org.nl.modules.system.service.GridFieldService; +import org.nl.modules.system.service.dto.GridDto; +import org.nl.modules.system.service.dto.GridFieldDto; +import org.nl.utils.SecurityUtils; +import org.nl.wql.WQL; +import org.nl.wql.core.bean.ResultBean; +import org.nl.wql.core.bean.WQLObject; +import org.nl.wql.util.WqlUtil; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.HashMap; +import java.util.Map; + +/** + * @Author: lyd + * @Description: 表格字段实现类 + * @Date: 2022-08-01 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class GridFieldServiceImpl implements GridFieldService { + + @Override + public Map queryAll(Map whereJson, Pageable page) { + HashMap map = new HashMap<>(); + String grid_name = (String) whereJson.get("name"); + map.put("flag","1"); + if (StrUtil.isNotEmpty(grid_name)){ + map.put("grid_name","%" + grid_name + "%"); + } + JSONObject json = WQL.getWO("GRIDFIELD").addParamMap(map).pageQuery(WqlUtil.getHttpContext(page), "sys_grid_field.sort_num"); + return json; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(GridFieldDto dto) { + String currentUsername = SecurityUtils.getCurrentUsername(); + String now = DateUtil.now(); + + dto.setId(IdUtil.simpleUUID()); + dto.setCreate_by(currentUsername); + dto.setUpdate_by(currentUsername); + dto.setUpdate_time(now); + dto.setCreate_time(now); + + WQLObject wo = WQLObject.getWQLObject("sys_grid_field"); + JSONObject json = JSONObject.parseObject( JSONObject.toJSONString(dto)); + wo.insert(json); + } + + @Override + public GridFieldDto findById(String id) { + WQLObject wo = WQLObject.getWQLObject("sys_grid_field"); + JSONObject json = wo.query("id ='" + id + "' AND is_delete = '0'").uniqueResult(0); + final GridFieldDto obj = json.toJavaObject(GridFieldDto.class);; + return obj; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(GridFieldDto dto) { + GridFieldDto entity = this.findById(dto.getId()); + if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); + + String currentUsername = SecurityUtils.getCurrentUsername(); + String now = DateUtil.now(); + dto.setUpdate_time(now); + dto.setUpdate_by(currentUsername); + + WQLObject wo = WQLObject.getWQLObject("sys_grid_field"); + JSONObject json = JSONObject.parseObject( JSONObject.toJSONString(dto)); + wo.update(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(String[] ids) { + WQLObject wo = WQLObject.getWQLObject("sys_grid_field"); + for (String id : ids) { + GridFieldDto gridFieldDto = this.findById(id); + gridFieldDto.setIs_delete("1"); + JSONObject json = JSONObject.parseObject( JSONObject.toJSONString(gridFieldDto)); + wo.update(json); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void batchAdd(JSONObject json) { + String grid_id = json.getString("grid_id"); + JSONArray fieldDatas = json.getJSONArray("gridFieldData"); + WQLObject wo = WQLObject.getWQLObject("sys_grid_field"); + String currentUsername = SecurityUtils.getCurrentUsername(); + // 先删除原先所有的数据 + wo.delete("grid_id = '" + grid_id + "'"); + // 然后添加 + for (int i=0; i queryAll(Map whereJson, Pageable page) { + WQLObject wo = WQLObject.getWQLObject("sys_grid"); + String where = "1=1"; + if (whereJson.get("name") != null) { + where = "name like ('%" + whereJson.get("name") + "%')"; + } + ResultBean rb = wo.pagequery(WqlUtil.getHttpContext(page), where +" AND is_delete = '0'", "update_time desc"); + final JSONObject json = rb.pageResult(); + return json; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void create(GridDto dto) { + String currentUsername = SecurityUtils.getCurrentUsername(); + String now = DateUtil.now(); + + dto.setId(IdUtil.simpleUUID()); + dto.setCreate_by(currentUsername); + dto.setUpdate_by(currentUsername); + dto.setUpdate_time(now); + dto.setCreate_time(now); + + WQLObject wo = WQLObject.getWQLObject("sys_grid"); + JSONObject json = JSONObject.parseObject( JSONObject.toJSONString(dto)); + wo.insert(json); + } + + @Override + public GridDto findById(String id) { + WQLObject wo = WQLObject.getWQLObject("sys_grid"); + JSONObject json = wo.query("id ='" + id + "' AND is_delete = '0'").uniqueResult(0); + final GridDto obj = json.toJavaObject(GridDto.class);; + return obj; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(GridDto dto) { + GridDto entity = this.findById(dto.getId()); + if (entity == null) throw new BadRequestException("被删除或无权限,操作失败!"); + + String currentUsername = SecurityUtils.getCurrentUsername(); + String now = DateUtil.now(); + dto.setUpdate_time(now); + dto.setUpdate_by(currentUsername); + + WQLObject wo = WQLObject.getWQLObject("sys_grid"); + JSONObject json = JSONObject.parseObject( JSONObject.toJSONString(dto)); + wo.update(json); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteAll(String[] ids) { + WQLObject wo = WQLObject.getWQLObject("sys_grid"); + WQLObject wqlObject = WQLObject.getWQLObject("sys_grid_field"); + // 删除明细 + for (String grid_id : ids) { + wqlObject.delete("grid_id = '" + grid_id + "'"); + wo.delete("id = '" + grid_id + "'"); + } + } + + @Override + public JSONArray getGridList() { + JSONArray arr = WQLObject.getWQLObject("sys_grid").query("is_delete= '0' AND is_active= '1'").getResultJSONArray(0); + JSONArray result = new JSONArray(); + for (int i = 0; i < arr.size(); i++) { + JSONObject obj = arr.getJSONObject(i); + JSONObject json = new JSONObject(); + json.put("grid_id", obj.getString("id")); + json.put("grid_code", obj.getString("code")); + json.put("grid_name", obj.getString("name")); + result.add(json); + } + return result; + } +} diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/impl/RedisServiceImpl.java b/nladmin-system/src/main/java/org/nl/modules/system/service/impl/RedisServiceImpl.java new file mode 100644 index 000000000..189c8d184 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/impl/RedisServiceImpl.java @@ -0,0 +1,84 @@ +package org.nl.modules.system.service.impl; + +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.nl.modules.system.service.RedisService; +import org.nl.modules.system.service.convert.RedisConvert; +import org.nl.modules.system.service.entity.RedisKeyDefine; +import org.nl.modules.system.service.entity.RedisKeyRegistry; +//import org.nl.modules.system.service.vo.IdempotentRedisDAO; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.connection.DataType; +import org.springframework.data.redis.connection.RedisServerCommands; +import org.springframework.data.redis.core.RedisCallback; +import org.springframework.data.redis.core.StringRedisTemplate; +import org.springframework.stereotype.Service; + +import java.util.*; + +/** + * @Author: lyd + * @Description: Redis监控的实现类 + * @Date: 2022-08-04 + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class RedisServiceImpl implements RedisService { + + @Autowired + private StringRedisTemplate stringRedisTemplate; + + @Override + public JSONObject getRedisMonitorInfo() { + // 获得 Redis 统计信息 + Properties info = stringRedisTemplate.execute((RedisCallback) RedisServerCommands::info); + Long dbSize = stringRedisTemplate.execute(RedisServerCommands::dbSize); + Properties commandStats = stringRedisTemplate.execute(( + RedisCallback) connection -> connection.info("commandstats")); + assert commandStats != null; // 断言,避免警告 +// System.out.println("info:" + info + " dbsize:" + dbSize + " com:" + commandStats); + // 拼接结果返回 + // 转成实体 + JSONObject json = new JSONObject(); + json.put("info", RedisConvert.INSTANCE.build(info, dbSize, commandStats)); + return json; + } + + @Override + public JSONObject getKeyDefineList() { + List keyDefines = RedisKeyRegistry.list(); + JSONObject json = new JSONObject(); + System.out.println(keyDefines); + json.put("info", RedisConvert.INSTANCE.convertList(keyDefines)); + return json; + } + + @Override + public JSONArray getKeyValueList() { + JSONArray result = new JSONArray(); + Set keys = stringRedisTemplate.keys("*"); + // 迭代 + Iterator it = keys.iterator(); + while ( it.hasNext() ) { + String key = it.next(); + JSONObject redis = new JSONObject(); + DataType dataType = stringRedisTemplate.type(key); // 数据类型 + String s = stringRedisTemplate.opsForValue().get(key); // 获取值 + Long expire = stringRedisTemplate.getExpire(key); // 获取剩余时间 + redis.put("dataType", dataType); + redis.put("key", key); + redis.put("value", s); + redis.put("expire", expire); + result.add(redis); + } + return result; + } + + @Override + public void deleteByKey(String[] ids) { + stringRedisTemplate.delete(Arrays.asList(ids)); + } +} diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/vo/IdempotentRedisDAO.java b/nladmin-system/src/main/java/org/nl/modules/system/service/vo/IdempotentRedisDAO.java new file mode 100644 index 000000000..41ea9c562 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/vo/IdempotentRedisDAO.java @@ -0,0 +1,35 @@ +package org.nl.modules.system.service.vo; + +import lombok.AllArgsConstructor; +import org.nl.modules.system.service.entity.RedisKeyDefine; +import org.springframework.data.redis.core.StringRedisTemplate; + +import java.util.concurrent.TimeUnit; + +import static org.nl.modules.system.service.entity.RedisKeyDefine.KeyTypeEnum.STRING; + +/** + * @Author: lyd + * @Description: 幂等操作 + * @Date: 2022-08-04 + */ +//@AllArgsConstructor +//public class IdempotentRedisDAO { +// +// private static final RedisKeyDefine IDEMPOTENT = new RedisKeyDefine("幂等操作", +// "idempotent:%s", // 参数为 uuid +// STRING, String.class, RedisKeyDefine.TimeoutTypeEnum.DYNAMIC); +// +// private final StringRedisTemplate redisTemplate; +// +// public Boolean setIfAbsent(String key, long timeout, TimeUnit timeUnit) { +// String redisKey = formatKey(key); +// return redisTemplate.opsForValue().setIfAbsent(redisKey, "", timeout, timeUnit); +// } +// +// private static String formatKey(String key) { +// return String.format(IDEMPOTENT.getKeyTemplate(), key); +// } +// +//} + diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/vo/RedisKeyDefineRespVO.java b/nladmin-system/src/main/java/org/nl/modules/system/service/vo/RedisKeyDefineRespVO.java new file mode 100644 index 000000000..cfc2e3478 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/vo/RedisKeyDefineRespVO.java @@ -0,0 +1,39 @@ +package org.nl.modules.system.service.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import org.nl.modules.system.service.entity.RedisKeyDefine; + +import java.time.Duration; + +/** + * @Author: lyd + * @Description: 管理后台 - Redis Key 信息 Response VO + * @Date: 2022-08-04 + */ +@ApiModel("管理后台 - Redis Key 信息 Response VO") +@Data +@Builder +@AllArgsConstructor +public class RedisKeyDefineRespVO { + @ApiModelProperty(value = "Key 模板", required = true, example = "login_user:%s") + private String keyTemplate; + + @ApiModelProperty(value = "Key 类型的枚举", required = true, example = "String") + private RedisKeyDefine.KeyTypeEnum keyType; + + @ApiModelProperty(value = "Value 类型", required = true, example = "java.lang.String") + private Class valueType; + + @ApiModelProperty(value = "超时类型", required = true, example = "1") + private RedisKeyDefine.TimeoutTypeEnum timeoutType; + + @ApiModelProperty(value = "过期时间,单位:毫秒", required = true, example = "1024") + private Duration timeout; + + @ApiModelProperty(value = "备注", required = true, example = "啦啦啦啦~") + private String memo; +} diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/vo/RedisMonitorRespVO.java b/nladmin-system/src/main/java/org/nl/modules/system/service/vo/RedisMonitorRespVO.java new file mode 100644 index 000000000..53c2625a1 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/vo/RedisMonitorRespVO.java @@ -0,0 +1,47 @@ +package org.nl.modules.system.service.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; + +import java.util.List; +import java.util.Properties; + +/** + * @Author: lyd + * @Description: 管理后台 - Redis 监控信息 Response VO + * @Date: 2022-08-04 + */ +@ApiModel("管理后台 - Redis 监控信息 Response VO") +@Data +@Builder +@AllArgsConstructor +public class RedisMonitorRespVO { + @ApiModelProperty(value = "Redis info 指令结果", required = true, notes = "具体字段,查看 Redis 文档") + private Properties info; + + @ApiModelProperty(value = "Redis key 数量", required = true, example = "1024") + private Long dbSize; + + @ApiModelProperty(value = "CommandStat 数组", required = true) + private List commandStats; + + @ApiModel("Redis 命令统计结果") + @Data + @Builder + @AllArgsConstructor + public static class CommandStat { + + @ApiModelProperty(value = "Redis 命令", required = true, example = "get") + private String command; + + @ApiModelProperty(value = "调用次数", required = true, example = "1024") + private Integer calls; + + @ApiModelProperty(value = "消耗 CPU 秒数", required = true, example = "666") + private Long usec; + + } +} diff --git a/nladmin-system/src/main/java/org/nl/modules/system/service/vo/YudaoIdempotentConfiguration.java b/nladmin-system/src/main/java/org/nl/modules/system/service/vo/YudaoIdempotentConfiguration.java new file mode 100644 index 000000000..7681d11df --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/service/vo/YudaoIdempotentConfiguration.java @@ -0,0 +1,21 @@ +package org.nl.modules.system.service.vo; + +import org.nl.config.RedisConfig; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.core.StringRedisTemplate; + +/** + * @Author: lyd + * @Description: 测试的Redistemplate模板 + * @Date: 2022-08-04 + */ +//@Configuration(proxyBeanMethods = false) +//@AutoConfigureAfter(RedisConfig.class) +//public class YudaoIdempotentConfiguration { +// @Bean +// public IdempotentRedisDAO idempotentRedisDAO(StringRedisTemplate stringRedisTemplate) { +// return new IdempotentRedisDAO(stringRedisTemplate); +// } +//} diff --git a/nladmin-system/src/main/java/org/nl/modules/system/wql/GRIDFIELD.wql b/nladmin-system/src/main/java/org/nl/modules/system/wql/GRIDFIELD.wql new file mode 100644 index 000000000..3de1a3f79 --- /dev/null +++ b/nladmin-system/src/main/java/org/nl/modules/system/wql/GRIDFIELD.wql @@ -0,0 +1,56 @@ +[交易说明] + 交易名: 表格数据 + 所属模块: + 功能简述: + 版权所有: + 表引用: + 版本经历: + +[数据库] + --指定数据库,为空采用默认值,默认为db.properties中列出的第一个库 + +[IO定义] + ################################################# + ## 表字段对应输入参数 + ################################################# + 输入.flag TYPEAS s_string + 输入.grid_name TYPEAS s_string + + + +[临时表] + --这边列出来的临时表就会在运行期动态创建 + +[临时变量] + --所有中间过程变量均可在此处定义 + +[业务过程] + + ########################################## + # 1、输入输出检查 # + ########################################## + + + ########################################## + # 2、主过程前处理 # + ########################################## + + + ########################################## + # 3、业务主过程 # + ########################################## + IF 输入.flag = "1" + PAGEQUERY + SELECT + sys_grid_field.*, sys_grid.name as grid_name + FROM + sys_grid_field + LEFT JOIN sys_grid ON sys_grid_field.grid_id = sys_grid.id + WHERE + sys_grid_field.is_delete = '0' AND sys_grid.is_delete = '0' + OPTION 输入.grid_name <> "" + sys_grid.name LIKE 输入.grid_name + ENDOPTION + ENDSELECT + ENDPAGEQUERY + ENDIF \ No newline at end of file diff --git a/nladmin-ui/package.json b/nladmin-ui/package.json index 22e8b7780..bda4ee1b8 100644 --- a/nladmin-ui/package.json +++ b/nladmin-ui/package.json @@ -38,7 +38,7 @@ "@riophae/vue-treeselect": "0.4.0", "af-table-column": "^1.0.3", "axios": "0.18.1", - "clipboard": "2.0.4", + "clipboard": "^2.0.4", "codemirror": "^5.49.2", "connect": "3.6.6", "echarts": "^4.2.1", @@ -62,6 +62,7 @@ "qs": "^6.9.1", "screenfull": "4.2.0", "sortablejs": "1.8.4", + "throttle-debounce": "^5.0.0", "vue": "2.6.10", "vue-color": "^2.8.1", "vue-count-to": "1.0.13", @@ -74,7 +75,7 @@ "vue-router": "3.0.2", "vue-seamless-scroll": "^1.1.23", "vue-splitpane": "1.0.4", - "vuedraggable": "2.20.0", + "vuedraggable": "^2.24.3", "vuex": "3.1.0", "vxe-table": "^3.3.10", "wangeditor": "^3.1.1", diff --git a/nladmin-ui/src/api/system/grid.js b/nladmin-ui/src/api/system/grid.js new file mode 100644 index 000000000..02857d4e8 --- /dev/null +++ b/nladmin-ui/src/api/system/grid.js @@ -0,0 +1,33 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/grid', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/grid/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/grid', + method: 'put', + data + }) +} +export function selectList() { + return request({ + url: 'api/grid/selectList', + method: 'get' + }) +} + +export default { add, edit, del, selectList } diff --git a/nladmin-ui/src/api/system/gridField.js b/nladmin-ui/src/api/system/gridField.js new file mode 100644 index 000000000..a207188a5 --- /dev/null +++ b/nladmin-ui/src/api/system/gridField.js @@ -0,0 +1,50 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/gridField', + method: 'post', + data + }) +} +export function batchAdd(json) { // use + return request({ + url: 'api/gridField/batchAdd', + method: 'post', + data: json + }) +} + +export function del(ids) { + return request({ + url: 'api/gridField/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/gridField', + method: 'put', + data + }) +} + +export function getGridFieldsById(id) { // use + return request({ + url: 'api/gridField/getGridFields', + method: 'post', + data: id + }) +} + +export function getGridFieldsByCode(grid_code) { // use + return request({ + url: 'api/gridField/getGridFieldsByCode', + method: 'post', + data: grid_code + }) +} + +export default { add, edit, del, batchAdd, getGridFieldsById, getGridFieldsByCode } diff --git a/nladmin-ui/src/api/system/redis.js b/nladmin-ui/src/api/system/redis.js new file mode 100644 index 000000000..71261bab1 --- /dev/null +++ b/nladmin-ui/src/api/system/redis.js @@ -0,0 +1,35 @@ +import request from '@/utils/request' + +// 查询缓存详细 +export function getCache() { + return request({ + url: '/api/redis/get-monitor-info', + method: 'get' + }) +} + +// 获取模块 +export function getKeyDefineList() { + return request({ + url: '/api/redis/get-key-define-list', + method: 'get' + }) +} + +// 获取模块 +export function getKeyValueList() { + return request({ + url: '/api/redis/get-key-value-list', + method: 'get' + }) +} + +export function batch(ids) { + return request({ + url: 'api/redis/', + method: 'delete', + data: ids + }) +} + +export default { getCache, getKeyDefineList, batch } diff --git a/nladmin-ui/src/assets/icons/svg/button.svg b/nladmin-ui/src/assets/icons/svg/button.svg new file mode 100644 index 000000000..904fddc85 --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/button.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/cascader.svg b/nladmin-ui/src/assets/icons/svg/cascader.svg new file mode 100644 index 000000000..e256024f9 --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/cascader.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/checkbox.svg b/nladmin-ui/src/assets/icons/svg/checkbox.svg new file mode 100644 index 000000000..013fd3a27 --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/checkbox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/color.svg b/nladmin-ui/src/assets/icons/svg/color.svg new file mode 100644 index 000000000..44a81aab1 --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/color.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/component.svg b/nladmin-ui/src/assets/icons/svg/component.svg new file mode 100644 index 000000000..29c345809 --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/component.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/date-range.svg b/nladmin-ui/src/assets/icons/svg/date-range.svg new file mode 100644 index 000000000..fda571e70 --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/date-range.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/input.svg b/nladmin-ui/src/assets/icons/svg/input.svg new file mode 100644 index 000000000..ab91381e6 --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/input.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/number.svg b/nladmin-ui/src/assets/icons/svg/number.svg new file mode 100644 index 000000000..ad5ce9af2 --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/number.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/radio.svg b/nladmin-ui/src/assets/icons/svg/radio.svg new file mode 100644 index 000000000..0cde34521 --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/radio.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/rate.svg b/nladmin-ui/src/assets/icons/svg/rate.svg new file mode 100644 index 000000000..aa3b14d7d --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/rate.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/rich-text.svg b/nladmin-ui/src/assets/icons/svg/rich-text.svg new file mode 100644 index 000000000..76c45bfe3 --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/rich-text.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/row.svg b/nladmin-ui/src/assets/icons/svg/row.svg new file mode 100644 index 000000000..078099222 --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/row.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/select.svg b/nladmin-ui/src/assets/icons/svg/select.svg new file mode 100644 index 000000000..d6283828b --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/select.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/slider.svg b/nladmin-ui/src/assets/icons/svg/slider.svg new file mode 100644 index 000000000..fbe4f39f0 --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/slider.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/switch.svg b/nladmin-ui/src/assets/icons/svg/switch.svg new file mode 100644 index 000000000..0ba61e38d --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/switch.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/table.svg b/nladmin-ui/src/assets/icons/svg/table.svg new file mode 100644 index 000000000..e8068454f --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/textarea.svg b/nladmin-ui/src/assets/icons/svg/textarea.svg new file mode 100644 index 000000000..2709f292e --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/textarea.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/time-range.svg b/nladmin-ui/src/assets/icons/svg/time-range.svg new file mode 100644 index 000000000..13c1202bd --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/time-range.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/time.svg b/nladmin-ui/src/assets/icons/svg/time.svg new file mode 100644 index 000000000..b376e32a6 --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/time.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/assets/icons/svg/upload.svg b/nladmin-ui/src/assets/icons/svg/upload.svg new file mode 100644 index 000000000..bae49c0a5 --- /dev/null +++ b/nladmin-ui/src/assets/icons/svg/upload.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/nladmin-ui/src/components/TopNav/index.vue b/nladmin-ui/src/components/TopNav/index.vue index f1457e5cc..c3b10a21a 100644 --- a/nladmin-ui/src/components/TopNav/index.vue +++ b/nladmin-ui/src/components/TopNav/index.vue @@ -2,7 +2,7 @@