From 1ae208b8e10abf15fe35789db9b3af4233c32ad6 Mon Sep 17 00:00:00 2001 From: xjs <1294405880@qq.com> Date: Fri, 7 Jan 2022 17:17:59 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=B4=E6=98=8E=EF=BC=9A1=E3=80=81=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0api=E9=A2=84=E8=AD=A6=E5=89=8D=E7=AB=AF=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/api/business/warning/apiwarning.js | 21 +- .../business/warning/apiwarning/index.vue | 123 +++------- .../business/warning/apiwarninginfo/index.vue | 219 ++++++++++++++++++ .../main/java/com/xjs/enums/StatusEnum.java | 5 +- .../java/com/xjs/common/aop/ApiLogAspect.java | 5 +- .../mapper/openapi/CopyWritingMapper.xml | 2 +- .../TianXingOneEnglishFactoryTest.java | 55 ++++- .../xjs/controller/ApiWarningController.java | 62 +++-- .../nacos_config_export_20220107171639.zip | Bin 0 -> 3630 bytes 9 files changed, 378 insertions(+), 114 deletions(-) create mode 100644 ruoyi-ui/src/views/business/warning/apiwarninginfo/index.vue create mode 100644 xjs-sql/2022-01/nacos_config_export_20220107171639.zip diff --git a/ruoyi-ui/src/api/business/warning/apiwarning.js b/ruoyi-ui/src/api/business/warning/apiwarning.js index 42c2d7f6..063e87ea 100644 --- a/ruoyi-ui/src/api/business/warning/apiwarning.js +++ b/ruoyi-ui/src/api/business/warning/apiwarning.js @@ -1,7 +1,7 @@ import request from '@/utils/request' -// 查询API预警列表 -export function listApiwarning(query) { +// 查询API预警信息列表 +export function listApiwarningInfo(query) { return request({ url: '/warning/apiwarning/list', method: 'get', @@ -9,16 +9,16 @@ export function listApiwarning(query) { }) } -// 查询API预警详细 -export function getApiwarning(id) { +// 查询API预警详细信息 +export function getApiwarningInfo(id) { return request({ url: '/warning/apiwarning/' + id, method: 'get' }) } -// 修改API预警 -export function updateApiwarning(data) { +// 修改API预警信息 +export function updateApiwarningInfo(data) { return request({ url: '/warning/apiwarning/edit', method: 'put', @@ -26,3 +26,12 @@ export function updateApiwarning(data) { }) } + +// 查询API预警列表 +export function listApiwarning(query) { + return request({ + url: '/warning/apiwarning/apiwarnlist', + method: 'get', + params: query + }) +} diff --git a/ruoyi-ui/src/views/business/warning/apiwarning/index.vue b/ruoyi-ui/src/views/business/warning/apiwarning/index.vue index dc403f99..a310966c 100644 --- a/ruoyi-ui/src/views/business/warning/apiwarning/index.vue +++ b/ruoyi-ui/src/views/business/warning/apiwarning/index.vue @@ -17,18 +17,6 @@ - - 修改 - - 导出 - + - - - - - - - - - - - + + + - + + + + @@ -82,26 +68,14 @@ @pagination="getList" /> - - - - - - - - - diff --git a/xjs-business/xjs-business-common/src/main/java/com/xjs/enums/StatusEnum.java b/xjs-business/xjs-business-common/src/main/java/com/xjs/enums/StatusEnum.java index c0ff18ab..7a6f33b6 100644 --- a/xjs-business/xjs-business-common/src/main/java/com/xjs/enums/StatusEnum.java +++ b/xjs-business/xjs-business-common/src/main/java/com/xjs/enums/StatusEnum.java @@ -11,7 +11,10 @@ import com.fasterxml.jackson.annotation.JsonValue; public enum StatusEnum { SUCCESS(1,"成功"), - ERROR(2,"失败"); + ERROR(2,"失败"), + + YES(1,"是"), + NO(2,"否"); private String desc; diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/aop/ApiLogAspect.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/aop/ApiLogAspect.java index e6b851b4..e0671551 100644 --- a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/aop/ApiLogAspect.java +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/aop/ApiLogAspect.java @@ -178,7 +178,8 @@ public class ApiLogAspect { apiWarning.setApiName(haveApiRecord.getApiName()); apiWarning.setHandle(NO); apiWarning.setWarningLevel(WarnLevelEnum.NOEMAL.getMessage()); - if(haveApiRecord.getDayCount()>haveApiRecord.getLimitCount()*2){ + if(haveApiRecord.getDayCount()>haveApiRecord.getLimitCount()*2 && + haveApiRecord.getDayCount() < haveApiRecord.getLimitCount() * 3){ apiWarning.setWarningLevel(WarnLevelEnum.WARNING.getMessage()); } else if (haveApiRecord.getDayCount() > haveApiRecord.getLimitCount() * 3) { apiWarning.setWarningLevel(WarnLevelEnum.DANGER.getMessage()); @@ -188,6 +189,8 @@ public class ApiLogAspect { haveApiRecord.getLimitCount(), haveApiRecord.getDayCount()); apiWarning.setWarningMessage(message); remoteWarningCRUDFeign.saveApiWarningForRPC(apiWarning); + + // todo websocket实现即时推送到客户端 } } diff --git a/xjs-business/xjs-business-openapi/src/main/resources/mapper/openapi/CopyWritingMapper.xml b/xjs-business/xjs-business-openapi/src/main/resources/mapper/openapi/CopyWritingMapper.xml index f61212d6..6049ce20 100644 --- a/xjs-business/xjs-business-openapi/src/main/resources/mapper/openapi/CopyWritingMapper.xml +++ b/xjs-business/xjs-business-openapi/src/main/resources/mapper/openapi/CopyWritingMapper.xml @@ -72,7 +72,7 @@ api_copywriting WHERE content IN ( SELECT t.content FROM ( SELECT content FROM api_copywriting GROUP BY content HAVING count( content ) > 1 ) t ) - AND id NOT IN ( SELECT c.id FROM ( SELECT max( id ) id FROM api_copywriting GROUP BY content HAVING count( content )> 1 ) c ) + AND id NOT IN ( SELECT c.id FROM ( SELECT min( id ) id FROM api_copywriting GROUP BY content HAVING count( content )> 1 ) c ) diff --git a/xjs-business/xjs-business-openapi/src/test/java/com/xjs/oneenglish/factory/TianXingOneEnglishFactoryTest.java b/xjs-business/xjs-business-openapi/src/test/java/com/xjs/oneenglish/factory/TianXingOneEnglishFactoryTest.java index 7a845a82..9e85f181 100644 --- a/xjs-business/xjs-business-openapi/src/test/java/com/xjs/oneenglish/factory/TianXingOneEnglishFactoryTest.java +++ b/xjs-business/xjs-business-openapi/src/test/java/com/xjs/oneenglish/factory/TianXingOneEnglishFactoryTest.java @@ -2,14 +2,18 @@ package com.xjs.oneenglish.factory; import com.xjs.XjsOpenApiApp; import com.xjs.config.TianXingProperties; +import com.xjs.copywriting.domain.CopyWriting; +import com.xjs.copywriting.mapper.CopyWritingMapper; +import com.xjs.copywriting.service.CopyWritingService; import com.xjs.oneenglish.domain.ApiEnglish; import com.xjs.oneenglish.domain.RequestBody; +import org.apache.ibatis.session.ExecutorType; +import org.apache.ibatis.session.SqlSession; +import org.apache.ibatis.session.SqlSessionFactory; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import static org.junit.jupiter.api.Assertions.*; - /** * @author xiejs * @desc @@ -24,6 +28,11 @@ class TianXingOneEnglishFactoryTest { @Autowired TianXingProperties tianXingProperties; + @Autowired + private CopyWritingService copyWritingService; + @Autowired + private SqlSessionFactory sqlSessionFactory; + @Test void getOneEnglish() { RequestBody requestBody = new RequestBody(); @@ -31,4 +40,46 @@ class TianXingOneEnglishFactoryTest { ApiEnglish oneEnglish = tianXingOneEnglishFactory.getOneEnglish(requestBody); System.out.println(oneEnglish); } + + + @Test + void insert() { + /*CopyWriting copyWriting = new CopyWriting(); + copyWriting.setSource("xx"); + copyWriting.setContent("既然看不到早上的夕阳,那就追求傍晚到日落。"); + copyWriting.setType(1); + for (int i = 0; i < 100000; i++) { + copyWritingService.save(copyWriting); + }*/ + + /*ArrayList copyWritings = new ArrayList<>(); + for (int i = 0; i < 100000; i++) { + CopyWriting copyWriting = new CopyWriting(); + copyWriting.setSource("xx"); + copyWriting.setContent("既然看不到早上的夕阳,那就追求傍晚到日落。"); + copyWriting.setType(1); + copyWritings.add(copyWriting); + } + copyWritingService.saveBatch(copyWritings,30000);*/ + SqlSession sqlSession=null; + try { + sqlSession= sqlSessionFactory.openSession(ExecutorType.BATCH); + + CopyWritingMapper mapper = sqlSession.getMapper(CopyWritingMapper.class); + + CopyWriting copyWriting = new CopyWriting(); + copyWriting.setSource("xx"); + copyWriting.setContent("既然看不到早上的夕阳,那就追求傍晚到日落。"); + copyWriting.setType(1); + + for (int i = 0; i < 100000; i++) { + mapper.insert(copyWriting); + } + + sqlSession.commit(); + } finally { + sqlSession.close(); + } + + } } \ No newline at end of file diff --git a/xjs-business/xjs-business-warning/src/main/java/com/xjs/controller/ApiWarningController.java b/xjs-business/xjs-business-warning/src/main/java/com/xjs/controller/ApiWarningController.java index eb618c18..68765155 100644 --- a/xjs-business/xjs-business-warning/src/main/java/com/xjs/controller/ApiWarningController.java +++ b/xjs-business/xjs-business-warning/src/main/java/com/xjs/controller/ApiWarningController.java @@ -1,5 +1,6 @@ package com.xjs.controller; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.poi.ExcelUtil; import com.ruoyi.common.core.web.controller.BaseController; @@ -16,6 +17,7 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletResponse; import java.util.List; +import java.util.Objects; /** * @author xiejs @@ -30,7 +32,7 @@ public class ApiWarningController extends BaseController { private ApiWarningService apiWarningService; /** - * 保存 apiRecord + * 远程保存 apiRecord * * @param apiRecord api记录 * @return apiRecord @@ -41,7 +43,7 @@ public class ApiWarningController extends BaseController { } /** - * 修改 + * 远程修改 * * @param apiRecord api记录 * @return ApiRecord @@ -53,8 +55,9 @@ public class ApiWarningController extends BaseController { /** * 远程查询api记录信息 + * * @param apiRecord - * @return R> + * @return R> */ @GetMapping public R> selectApiRecordListForRPC(ApiRecord apiRecord) { @@ -64,60 +67,85 @@ public class ApiWarningController extends BaseController { /** * 远程保存api预警信息 + * * @param apiWarning 预警实体类 - * @return R + * @return R */ @PostMapping("saveApiwarningForRPC") public R saveApiWarningForRPC(@RequestBody ApiWarning apiWarning) { boolean save = apiWarningService.save(apiWarning); - return save? R.ok():R.fail(); + return save ? R.ok() : R.fail(); + } + + + /** + * 查询api预警列表 + */ + @RequiresPermissions("warning:warning:list") + @GetMapping("/apiwarnlist") + public TableDataInfo list(ApiWarning apiWarning) { + startPage(); + List list = apiWarningService.list(new QueryWrapper() + .like(Objects.nonNull(apiWarning.getApiName()),"api_name", apiWarning.getApiName())); + return getDataTable(list); + } + + /** + * 导出api预警列表 + */ + @RequiresPermissions("warning:warning:export") + @Log(title = "api预警", businessType = BusinessType.EXPORT) + @PostMapping("/apiwarnexport") + public void export(HttpServletResponse response, ApiWarning apiWarning) { + List list = apiWarningService.list(new QueryWrapper() + .like(Objects.nonNull(apiWarning.getApiName()),"api_name", apiWarning.getApiName())); + ExcelUtil util = new ExcelUtil(ApiWarning.class); + util.exportExcel(response, list, "api预警数据"); } //-------------------------代码生成------------------------------------ + + /** - * 查询API预警列表 + * 查询API预警信息列表 */ @RequiresPermissions("warning:apiwarning:list") @GetMapping("/list") - public TableDataInfo list(ApiRecord apiRecord) - { + public TableDataInfo list(ApiRecord apiRecord) { startPage(); List list = apiWarningService.selectApiRecordList(apiRecord); return getDataTable(list); } /** - * 导出API预警列表 + * 导出API预警信息列表 */ @RequiresPermissions("warning:apiwarning:export") @Log(title = "API预警", businessType = BusinessType.EXPORT) @PostMapping("/export") - public void export(HttpServletResponse response, ApiRecord apiRecord) - { + public void export(HttpServletResponse response, ApiRecord apiRecord) { List list = apiWarningService.selectApiRecordList(apiRecord); ExcelUtil util = new ExcelUtil(ApiRecord.class); util.exportExcel(response, list, "API预警数据"); } /** - * 获取API预警详细信息 + * 获取API预警详细信息信息 */ @RequiresPermissions("warning:apiwarning:query") @GetMapping(value = "/{id}") - public AjaxResult getInfo(@PathVariable("id") Long id) - { + public AjaxResult getInfo(@PathVariable("id") Long id) { return AjaxResult.success(apiWarningService.selectApiRecordById(id)); } /** - * 修改API预警 + * 修改API预警信息 */ @RequiresPermissions("warning:apiwarning:edit") @Log(title = "API预警", businessType = BusinessType.UPDATE) @PutMapping("edit") - public AjaxResult edit(@RequestBody ApiRecord apiRecord) - { + public AjaxResult edit(@RequestBody ApiRecord apiRecord) { return toAjax(apiWarningService.updateApiRecord(apiRecord)); } diff --git a/xjs-sql/2022-01/nacos_config_export_20220107171639.zip b/xjs-sql/2022-01/nacos_config_export_20220107171639.zip new file mode 100644 index 0000000000000000000000000000000000000000..840866a9d7032324f88f552728f6a02c77b0a91d GIT binary patch literal 3630 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 literal 0 HcmV?d00001