diff --git a/wcs/src/main/java/org/wcs/mapper/impl/AppRecordApiRequestDao.java b/wcs/src/main/java/org/wcs/mapper/impl/AppRecordApiRequestDao.java index fe60c4a..309e7b7 100755 --- a/wcs/src/main/java/org/wcs/mapper/impl/AppRecordApiRequestDao.java +++ b/wcs/src/main/java/org/wcs/mapper/impl/AppRecordApiRequestDao.java @@ -50,6 +50,35 @@ public class AppRecordApiRequestDao extends ServiceImpl queryByRequest(QueryRecordApiRequestReq request) { + if(request == null) { + return null; + } + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(request.getSuccess() != null, AppRecordApiRequest::getSuccess, request.getSuccess()); + if(AppStringUtils.isNotEmpty(request.getQueryStr())) { + queryWrapper.like(AppRecordApiRequest::getApiKey, request.getQueryStr()) + .or().like(AppRecordApiRequest::getRequestMsg, request.getQueryStr()) + .or().like(AppRecordApiRequest::getResponseMsg, request.getQueryStr()); + } + if(request.getRequestTimes() != null && request.getRequestTimes().length == 2) { + queryWrapper.between(AppRecordApiRequest::getRequestTime, request.getRequestTimes()[0], request.getRequestTimes()[1]); + } + queryWrapper.orderByDesc(AppRecordApiRequest::getRequestTime); + try { + return super.baseMapper.selectList(queryWrapper); + } catch (Exception e) { + return null; + } + } + /** * 插入数据 * diff --git a/wcs/src/main/java/org/wcs/mapper/intf/AppRecordApiRequestService.java b/wcs/src/main/java/org/wcs/mapper/intf/AppRecordApiRequestService.java index db589bb..5d8f3d3 100755 --- a/wcs/src/main/java/org/wcs/mapper/intf/AppRecordApiRequestService.java +++ b/wcs/src/main/java/org/wcs/mapper/intf/AppRecordApiRequestService.java @@ -11,6 +11,7 @@ public interface AppRecordApiRequestService extends IService> queryByPage(QueryRecordApiRequestReq request, Integer pageSize, Integer pageIndex); + List queryByRequest(QueryRecordApiRequestReq request); int insert(AppRecordApiRequest record); // 插入数据 int deleteBySaveDays(int saveDays); // 删除指定天数前的数据 diff --git a/wcs/src/main/java/org/wcs/model/vo/serve/recordApi/ExportRecordApiRequestVo.java b/wcs/src/main/java/org/wcs/model/vo/serve/recordApi/ExportRecordApiRequestVo.java new file mode 100644 index 0000000..5b513af --- /dev/null +++ b/wcs/src/main/java/org/wcs/model/vo/serve/recordApi/ExportRecordApiRequestVo.java @@ -0,0 +1,90 @@ +package org.wcs.model.vo.serve.recordApi; + +import cn.afterturn.easypoi.excel.annotation.Excel; +import lombok.Getter; +import lombok.Setter; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * 导出记录API请求列表 + */ +@Getter +@Setter +public class ExportRecordApiRequestVo { + + /** + * 记录ID + */ + @Excel(name = "记录编号") + private String recordId; + + /** + * API KEY + */ + @Excel(name = "API KEY") + private String apiKey; + + /** + * 请求URL + */ + @Excel(name = "请求地址") + private String requestUrl; + + /** + * 请求是否成功 + */ + @Excel(name = "请求是否成功") + private String success; + + /** + * 请求方式 + */ + @Excel(name = "请求方式") + private String method; + + /** + * url参数 + */ + @Excel(name = "URL参数") + private String urlParam; + + /** + * 请求参数 + */ + @Excel(name = "请求数据") + private String requestMsg; + + /** + * 响应内容 + */ + @Excel(name = "响应内容") + private String responseMsg; + + /** + * 请求时间 + */ + @Excel(name = "请求时间") + private LocalDateTime requestTime; + + /** + * 响应时间 + */ + @Excel(name = "响应时间") + private LocalDateTime responseTime; + + /** + * 耗时 + */ + @Excel(name = "耗时") + private BigDecimal useTime; + + /** + * 错误信息 + */ + @Excel(name = "错误信息") + private String errMsg; + + +} diff --git a/wcs/src/main/java/org/wcs/serve/controller/app/RecordApiController.java b/wcs/src/main/java/org/wcs/serve/controller/app/RecordApiController.java index 760d756..42c22c3 100644 --- a/wcs/src/main/java/org/wcs/serve/controller/app/RecordApiController.java +++ b/wcs/src/main/java/org/wcs/serve/controller/app/RecordApiController.java @@ -1,6 +1,7 @@ package org.wcs.serve.controller.app; import cn.dev33.satoken.annotation.SaCheckPermission; +import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import org.wcs.model.dto.serve.recordApi.QueryRecordApiRequestReq; @@ -20,7 +21,7 @@ import org.wcs.serve.service.intf.IRecordApiService; @RequiredArgsConstructor public class RecordApiController { - private final IRecordApiService recordApiRequestService; + private final IRecordApiService recordApiService; /** * 查询 API 请求记录 @@ -32,7 +33,7 @@ public class RecordApiController { @SaCheckPermission("recordApiRequest:query") @PostMapping("/queryApiRequestWithPage") public AppServeDataResponse> queryRecordApiRequest(@RequestBody QueryRecordApiRequestReq request, @RequestParam("pageSize") Integer pageSize, @RequestParam("pageIndex") Integer pageIndex) { - return recordApiRequestService.queryRecordApiRequest(request, pageSize, pageIndex); + return recordApiService.queryRecordApiRequest(request, pageSize, pageIndex); } /** @@ -45,7 +46,18 @@ public class RecordApiController { @SaCheckPermission("recordApiResponse:query") @PostMapping("/queryApiResponseWithPage") public AppServeDataResponse> queryRecordApiResponse(@RequestBody QueryRecordApiResponseReq request, @RequestParam("pageSize") Integer pageSize, @RequestParam("pageIndex") Integer pageIndex) { - return recordApiRequestService.queryRecordApiResponse(request, pageSize, pageIndex); + return recordApiService.queryRecordApiResponse(request, pageSize, pageIndex); + } + + /** + * 导出 API 请求记录 + * @param response 响应 + * @param request 查询参数 + */ + @SaCheckPermission("recordApiRequest:export") + @PostMapping("/exportApiRequest") + public void exportApiRequest(HttpServletResponse response, @RequestBody QueryRecordApiRequestReq request) { + recordApiService.exportApiRequest(response, request); } diff --git a/wcs/src/main/java/org/wcs/serve/service/impl/RecordApiService.java b/wcs/src/main/java/org/wcs/serve/service/impl/RecordApiService.java index 2e9fccb..3f3adf4 100644 --- a/wcs/src/main/java/org/wcs/serve/service/impl/RecordApiService.java +++ b/wcs/src/main/java/org/wcs/serve/service/impl/RecordApiService.java @@ -1,8 +1,10 @@ package org.wcs.serve.service.impl; +import jakarta.servlet.http.HttpServletResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.wcs.constant.enums.common.TrueOrFalseEnum; import org.wcs.factory.AppServeResponseFactory; import org.wcs.mapper.intf.AppRecordApiRequestService; import org.wcs.mapper.intf.AppRecordApiResponseService; @@ -12,12 +14,15 @@ import org.wcs.model.po.app.AppRecordApiRequest; import org.wcs.model.po.app.AppRecordApiResponse; import org.wcs.model.vo.serve.AppServeDataResponse; import org.wcs.model.vo.serve.common.PageDataResponse; +import org.wcs.model.vo.serve.recordApi.ExportRecordApiRequestVo; import org.wcs.model.vo.serve.recordApi.RecordApiRequestVo; import org.wcs.model.vo.serve.recordApi.RecordApiResponseVo; +import org.wcs.plugin.excel.ExcelPoi; import org.wcs.serve.service.intf.IRecordApiService; import org.wcs.model.bo.tuple.Tuple2; import org.wcs.utils.AppBeanUtils; +import java.util.ArrayList; import java.util.List; @Slf4j @@ -27,6 +32,7 @@ public class RecordApiService implements IRecordApiService { private final AppRecordApiRequestService recordApiRequestService; private final AppRecordApiResponseService recordApiResponseService; + private final ExcelPoi excelPoi; /** * 查询记录API请求列表 @@ -76,5 +82,41 @@ public class RecordApiService implements IRecordApiService { return AppServeResponseFactory.success("查询成功", response); } + /** + * 导出记录API请求列表 + * @param response 响应 + * @param request 查询参数 + */ + @Override + public void exportApiRequest(HttpServletResponse response, QueryRecordApiRequestReq request) { + List recordApiRequests = recordApiRequestService.queryByRequest(request); + if(recordApiRequests == null) { + log.error("导出API请求数据时查询数据失败"); + return; + } + List recordApiRequestVos = new ArrayList<>(); + for (AppRecordApiRequest recordApiRequest : recordApiRequests) { + ExportRecordApiRequestVo recordApiRequestVo = new ExportRecordApiRequestVo(); + recordApiRequestVo.setRecordId(recordApiRequest.getRecordId()); + recordApiRequestVo.setApiKey(recordApiRequest.getApiKey()); + recordApiRequestVo.setRequestUrl(recordApiRequest.getRequestUrl()); + recordApiRequestVo.setSuccess(TrueOrFalseEnum.getByCode(recordApiRequest.getSuccess()).getMsg()); + recordApiRequestVo.setMethod(recordApiRequest.getMethod()); + recordApiRequestVo.setUrlParam(recordApiRequest.getUrlParam()); + recordApiRequestVo.setRequestMsg(recordApiRequest.getRequestMsg()); + recordApiRequestVo.setResponseMsg(recordApiRequest.getResponseMsg()); + recordApiRequestVo.setRequestTime(recordApiRequest.getRequestTime()); + recordApiRequestVo.setResponseTime(recordApiRequest.getResponseTime()); + recordApiRequestVo.setUseTime(recordApiRequest.getUseTime()); + recordApiRequestVo.setErrMsg(recordApiRequest.getErrMsg()); + recordApiRequestVos.add(recordApiRequestVo); + } + try { + excelPoi.doWriteExcel("API请求数据", response, recordApiRequestVos, ExportRecordApiRequestVo.class); + } catch (Exception e) { + log.error("导出API请求数据时发生异常", e); + } + } + } diff --git a/wcs/src/main/java/org/wcs/serve/service/intf/IRecordApiService.java b/wcs/src/main/java/org/wcs/serve/service/intf/IRecordApiService.java index 011bed4..55afb1d 100644 --- a/wcs/src/main/java/org/wcs/serve/service/intf/IRecordApiService.java +++ b/wcs/src/main/java/org/wcs/serve/service/intf/IRecordApiService.java @@ -1,5 +1,6 @@ package org.wcs.serve.service.intf; +import jakarta.servlet.http.HttpServletResponse; import org.wcs.model.dto.serve.recordApi.QueryRecordApiRequestReq; import org.wcs.model.dto.serve.recordApi.QueryRecordApiResponseReq; import org.wcs.model.vo.serve.AppServeDataResponse; @@ -11,4 +12,6 @@ public interface IRecordApiService { AppServeDataResponse> queryRecordApiRequest(QueryRecordApiRequestReq request, Integer pageSize, Integer pageIndex); AppServeDataResponse> queryRecordApiResponse(QueryRecordApiResponseReq request, Integer pageSize, Integer pageIndex); + + void exportApiRequest(HttpServletResponse response, QueryRecordApiRequestReq request); // 导出 API 请求记录 } diff --git a/wcs_web/src/api/recordApi.ts b/wcs_web/src/api/recordApi.ts index 3cd68fd..371b983 100644 --- a/wcs_web/src/api/recordApi.ts +++ b/wcs_web/src/api/recordApi.ts @@ -21,5 +21,12 @@ export default class RecordApi { pageIndex: pageIndex } }) - } + }; + + static downLoadApiRequest(query: IRecordApiRequestSearch) { + return axiosInstance.post('/app/recordApi/exportApiRequest', query, { + responseType: 'blob', + timeout: 30000 + }) + }; } \ No newline at end of file diff --git a/wcs_web/src/views/tabs/RecordApiRequest.vue b/wcs_web/src/views/tabs/RecordApiRequest.vue index 7e37a8b..c6f3484 100644 --- a/wcs_web/src/views/tabs/RecordApiRequest.vue +++ b/wcs_web/src/views/tabs/RecordApiRequest.vue @@ -13,6 +13,7 @@ import MessageUtils from "@/utils/MessageUtils.ts"; import RecordApiRequestDetail from "@/components/page/recordApi/RecordApiRequestDetail.vue"; import {menuStore} from "@/stores/menu.ts"; import AppPermission from "@/components/manage/AppPermission.vue"; +import StackerLocationApi from "@/api/stackerLocation.ts"; const menuStoreInstance = menuStore(); const trueFalseTagStyleFormatter = new TrueFalseTagStyleFormatter(); @@ -73,6 +74,21 @@ const handleEdit = (index: number, row: any) => { }; showDetail.value = true; }; +// 导出数据 +const exportData = () => { + MessageUtils.confirmMessageBox('确定导出数据?','导出确认').then(() => { + RecordApi.downLoadApiRequest(querySearch.value).then(res => { + const url = window.URL.createObjectURL(new Blob([res.data])); + const link = document.createElement('a'); + link.href = url; + link.setAttribute('download', '接口请求信息下载.xlsx'); + document.body.appendChild(link); + link.click(); + MessageUtils.successMessage('您的下载将尽快开始,请稍后'); + document.body.removeChild(link); + }).catch(() => {}) + }).catch(() => {}) +} @@ -104,7 +120,7 @@ const handleEdit = (index: number, row: any) => { 查询/刷新 重置查询参数 - 导出数据 + 导出数据