diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/RemoteWarningCRUDFeign.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/RemoteWarningCRUDFeign.java index a8a28908..797f042e 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/RemoteWarningCRUDFeign.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/RemoteWarningCRUDFeign.java @@ -25,11 +25,11 @@ import java.util.List; public interface RemoteWarningCRUDFeign { @PostMapping("apiwarning") - public R saveApiRecordForRPC(@RequestBody ApiRecord apiRecord); + R saveApiRecordForRPC(@RequestBody ApiRecord apiRecord); @PutMapping("apiwarning") - public R updateApiRecordForRPC(@RequestBody ApiRecord apiRecord); + R updateApiRecordForRPC(@RequestBody ApiRecord apiRecord); @GetMapping("apiwarning") R> selectApiRecordListForRPC(@SpringQueryMap ApiRecord apiRecord); @@ -38,6 +38,9 @@ public interface RemoteWarningCRUDFeign { R saveApiWarningForRPC(@RequestBody ApiWarning apiWarning); @GetMapping("apiwarning/getApiNameForRPC") - public R> getApiName(); + R> getApiName(); + + @GetMapping("apistatistics") + R> selectApiRecordListForRPC(); } diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/factory/RemoteWarningCRUDFactory.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/factory/RemoteWarningCRUDFactory.java index f6fd03da..b760ecf8 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/factory/RemoteWarningCRUDFactory.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/xjs/business/warning/factory/RemoteWarningCRUDFactory.java @@ -53,6 +53,12 @@ public class RemoteWarningCRUDFactory implements FallbackFactory> selectApiRecordListForRPC() { + log.error("调用预警服务api统计查询所有api接口失败,执行降级处理----"); + return R.fail(); + } }; } } diff --git a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/AliyunOssFileServiceImpl.java b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/AliyunOssFileServiceImpl.java index 3ee9857a..c2e5fdd6 100644 --- a/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/AliyunOssFileServiceImpl.java +++ b/ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/AliyunOssFileServiceImpl.java @@ -9,6 +9,7 @@ import com.ruoyi.file.utils.FileUploadUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Service; +import org.springframework.util.Assert; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; @@ -17,12 +18,13 @@ import java.util.Date; /** * 阿里云oss文件上传实现 + * * @author xiejs * @since 2022-01-25 */ @Service @Primary -public class AliyunOssFileServiceImpl implements ISysFileService{ +public class AliyunOssFileServiceImpl implements ISysFileService { @Autowired @@ -30,6 +32,7 @@ public class AliyunOssFileServiceImpl implements ISysFileService{ @Override public String uploadFile(MultipartFile file) throws Exception { + Assert.notNull(file, "file is null"); try { String endpoint = aliyunOssProperties.getEndpoint(); String keyId = aliyunOssProperties.getKeyId(); @@ -42,13 +45,13 @@ public class AliyunOssFileServiceImpl implements ISysFileService{ //获取文件后缀 String extension = FileUploadUtils.getExtension(file); //获取文件名称 - String fileName = getDataTime()+"."+extension; + String fileName = getDataTime() + "." + extension; //执行文件上传 bucket名称 文件名称 文件流 - ossClient.putObject(bucketName,fileName,is); + ossClient.putObject(bucketName, fileName, is); //关闭ossClient ossClient.shutdown(); //拼接文件地址 - return "https://"+bucketName+"."+endpoint+"/"+fileName; + return "https://" + bucketName + "." + endpoint + "/" + fileName; } catch (IOException e) { e.printStackTrace(); return null; @@ -57,13 +60,14 @@ public class AliyunOssFileServiceImpl implements ISysFileService{ /** * 生成一个当前日期文件名 - * @return + * + * @return 文件名 */ - private String getDataTime(){ + private String getDataTime() { String today = DateUtil.format(new Date(), "yyyy-MM"); String time = DateUtil.formatDateTime(new Date()); - int random = RandomUtil.randomInt(1000, 10000); + int random = RandomUtil.randomInt(100, 10000); //防止同一时间生成文件名重复 - return today+"/"+time+"-"+random; + return today + "/" + time + "-" + random; } } diff --git a/ruoyi-ui/src/api/business/statistics/apistatistics.js b/ruoyi-ui/src/api/business/statistics/apistatistics.js new file mode 100644 index 00000000..e5b83c18 --- /dev/null +++ b/ruoyi-ui/src/api/business/statistics/apistatistics.js @@ -0,0 +1,18 @@ +import request from '@/utils/request' + + +//查询API历史记录统计 +export function getStatisticsHistoryApi() { + return request({ + url: '/statistics/apistatistics/history', + method: 'get', + }) +} + +//查询API当天记录统计 +export function getStatisticsTodayApi() { + return request({ + url: '/statistics/apistatistics/today', + method: 'get', + }) +} diff --git a/ruoyi-ui/src/views/business/statistics/apistatistics/index.vue b/ruoyi-ui/src/views/business/statistics/apistatistics/index.vue new file mode 100644 index 00000000..041db427 --- /dev/null +++ b/ruoyi-ui/src/views/business/statistics/apistatistics/index.vue @@ -0,0 +1,130 @@ + + + + + diff --git a/ruoyi-ui/src/views/business/tools/apitools/index.vue b/ruoyi-ui/src/views/business/tools/apitools/index.vue index 344146e1..0887c1d3 100644 --- a/ruoyi-ui/src/views/business/tools/apitools/index.vue +++ b/ruoyi-ui/src/views/business/tools/apitools/index.vue @@ -59,8 +59,12 @@ - 搜索 @@ -91,8 +95,12 @@ - 搜索 @@ -132,7 +140,10 @@ - + 搜索 @@ -170,7 +181,11 @@ - 搜索 + 搜索 + @@ -202,7 +217,10 @@ - 搜索 @@ -256,7 +274,10 @@ - 搜索 @@ -290,7 +311,10 @@ - 搜索 @@ -319,7 +343,10 @@ - 搜索 @@ -361,7 +388,10 @@ - 搜索 @@ -399,7 +429,10 @@ - 搜索 diff --git a/xjs-business/xjs-business-statistics/src/main/java/com/xjs/controller/ApiStatisticsController.java b/xjs-business/xjs-business-statistics/src/main/java/com/xjs/controller/ApiStatisticsController.java new file mode 100644 index 00000000..3616ce97 --- /dev/null +++ b/xjs-business/xjs-business-statistics/src/main/java/com/xjs/controller/ApiStatisticsController.java @@ -0,0 +1,45 @@ +package com.xjs.controller; + +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.security.annotation.RequiresPermissions; +import com.xjs.service.ApiStatisticsService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.Map; + +/** + * api记录统计控制器 + * @author xiejs + * @since 2022-01-25 + */ +@RestController +@RequestMapping("apistatistics") +@Api(tags = "业务模块-API记录统计") +public class ApiStatisticsController { + + @Autowired + private ApiStatisticsService apiStatisticsService; + + @GetMapping("history") + @ApiOperation("查询API历史记录统计") + @RequiresPermissions("statistics:apistatistics:list") + public R> statisticsHistoryApi() { + Map map = apiStatisticsService.statisticsHistoryApi(); + return R.ok(map); + } + + @GetMapping("today") + @ApiOperation("查询API当天记录统计") + @RequiresPermissions("statistics:apistatistics:list") + public R> statisticsTodayApi() { + Map map = apiStatisticsService.statisticsTodayApi(); + return R.ok(map); + } + +} diff --git a/xjs-business/xjs-business-statistics/src/main/java/com/xjs/service/ApiStatisticsService.java b/xjs-business/xjs-business-statistics/src/main/java/com/xjs/service/ApiStatisticsService.java new file mode 100644 index 00000000..3884a964 --- /dev/null +++ b/xjs-business/xjs-business-statistics/src/main/java/com/xjs/service/ApiStatisticsService.java @@ -0,0 +1,27 @@ +package com.xjs.service; + +import java.util.List; +import java.util.Map; + +/** + * api统计服务接口 + * @author xiejs + * @since 2022-01-25 + */ +public interface ApiStatisticsService { + + + /** + * 统计历史api次数 + * @return map + */ + Map statisticsHistoryApi(); + + + /** + * 统计当天api次数 + * @return map + */ + Map statisticsTodayApi(); + +} diff --git a/xjs-business/xjs-business-statistics/src/main/java/com/xjs/service/impl/ApiStatisticsServiceImpl.java b/xjs-business/xjs-business-statistics/src/main/java/com/xjs/service/impl/ApiStatisticsServiceImpl.java new file mode 100644 index 00000000..2221c73d --- /dev/null +++ b/xjs-business/xjs-business-statistics/src/main/java/com/xjs/service/impl/ApiStatisticsServiceImpl.java @@ -0,0 +1,65 @@ +package com.xjs.service.impl; + +import com.ruoyi.common.core.domain.R; +import com.xjs.business.warning.RemoteWarningCRUDFeign; +import com.xjs.business.warning.domain.ApiRecord; +import com.xjs.service.ApiStatisticsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * api统计服务接口实现 + * @author xiejs + * @since 2022-01-25 + */ +@Service +public class ApiStatisticsServiceImpl implements ApiStatisticsService { + + @Autowired + private RemoteWarningCRUDFeign remoteWarningCRUDFeign; + + @Override + public Map statisticsHistoryApi() { + List recordList = getData(); + Map map = new HashMap<>(); + List apiNames = new ArrayList<>(); + List count = new ArrayList<>(); + recordList.forEach(record ->{ + apiNames.add(record.getApiName()); + count.add(record.getTotalCount()); + }); + map.put("apiNames", apiNames); + map.put("count", count); + return map; + } + + @Override + public Map statisticsTodayApi() { + List recordList = getData(); + Map map = new HashMap<>(); + List apiNames = new ArrayList<>(); + List count = new ArrayList<>(); + recordList.forEach(record ->{ + apiNames.add(record.getApiName()); + count.add(record.getDayCount()); + }); + map.put("apiNames", apiNames); + map.put("count", count); + return map; + } + + + /** + * 获取R中的data + * @return List + */ + private List getData() { + R> listR = remoteWarningCRUDFeign.selectApiRecordListForRPC(); + return listR.getData(); + } +} diff --git a/xjs-business/xjs-business-warning/src/main/java/com/xjs/controller/ApiStatisticsController.java b/xjs-business/xjs-business-warning/src/main/java/com/xjs/controller/ApiStatisticsController.java new file mode 100644 index 00000000..4ca1134e --- /dev/null +++ b/xjs-business/xjs-business-warning/src/main/java/com/xjs/controller/ApiStatisticsController.java @@ -0,0 +1,35 @@ +package com.xjs.controller; + +import com.ruoyi.common.core.domain.R; +import com.xjs.domain.ApiRecord; +import com.xjs.service.ApiWarningService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * api记录统计控制器 + * @author xiejs + * @since 2022-01-25 + */ +@RestController +@RequestMapping("apistatistics") +@Api(tags = "业务模块-API记录统计") +public class ApiStatisticsController { + + @Autowired + private ApiWarningService apiWarningService; + + @GetMapping + @ApiOperation("远程查询API记录统计") + public R> selectApiRecordListForRPC() { + List apiRecords = apiWarningService.selectApiRecordList(new ApiRecord()); + return R.ok(apiRecords); + } + +}