From 08fd243390196b600343761a63dc666a72bff77c Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期二, 12 五月 2026 15:55:53 +0800
Subject: [PATCH] 日志

---
 xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpAdminOperationLogController.java |   79 +++++++++++++++++++++++++++++++++++++--
 1 files changed, 74 insertions(+), 5 deletions(-)

diff --git a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpAdminOperationLogController.java b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpAdminOperationLogController.java
index 1c16a4c..c8bfc18 100644
--- a/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpAdminOperationLogController.java
+++ b/xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpAdminOperationLogController.java
@@ -1,17 +1,25 @@
 package com.xiaopeng.operation.controller;
 
+import cn.afterturn.easypoi.excel.ExcelExportUtil;
+import cn.afterturn.easypoi.excel.entity.ExportParams;
 import com.xiaopeng.api.model.operation.XpAdminOperationLog;
 import com.xiaopeng.common.core.domain.R;
+import com.xiaopeng.common.core.exception.ServiceException;
+import com.xiaopeng.common.core.utils.WebUtils;
 import com.xiaopeng.common.core.web.domain.AjaxResult;
 import com.xiaopeng.common.core.web.page.PageInfo;
+import com.xiaopeng.common.log.annotation.AdminOperationLog;
 import com.xiaopeng.common.log.enums.AdminBusinessType;
+import com.xiaopeng.common.log.enums.AdminOperationType;
 import com.xiaopeng.common.security.annotation.InnerAuth;
 import com.xiaopeng.common.security.annotation.Logical;
 import com.xiaopeng.common.security.annotation.RequiresPermissions;
+import com.xiaopeng.operation.exportExcle.XpAdminOperationLogExportExcel;
 import com.xiaopeng.operation.query.AdminOperationLogPageQuery;
 import com.xiaopeng.operation.service.IXpAdminOperationLogService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.poi.ss.usermodel.Workbook;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -19,7 +27,13 @@
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.time.format.DateTimeFormatter;
 import java.time.LocalDateTime;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Comparator;
 import java.util.LinkedHashMap;
@@ -31,18 +45,51 @@
  * 管理后台操作记录
  */
 @RestController
-@RequestMapping({"/api/v1/adminOperationLog"})
+@RequestMapping({""})
 @Api(tags = "管理后台-操作记录")
 public class XpAdminOperationLogController {
+
+    private static final DateTimeFormatter EXPORT_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
 
     @Resource
     private IXpAdminOperationLogService adminOperationLogService;
 
-    @RequiresPermissions(value = {"/adminOperationLog/list", "/operationLog/list"}, logical = Logical.OR)
-    @GetMapping("/list")
+//    @RequiresPermissions(value = {"/adminOperationLog/list", "/operationLog/list"}, logical = Logical.OR)
+    @GetMapping("/api/v1/adminOperationLog/list")
     @ApiOperation(value = "管理后台操作记录分页列表", tags = {"管理后台-操作记录"})
     public AjaxResult<PageInfo<XpAdminOperationLog>> list(AdminOperationLogPageQuery query) {
         return AjaxResult.success(adminOperationLogService.pageList(query));
+    }
+
+    @PostMapping("/api/v1/adminOperationLog/exportExcel")
+    @ApiOperation(value = "管理后台操作记录导出", tags = {"管理后台-操作记录"})
+    @AdminOperationLog(
+            businessType = AdminBusinessType.SYSTEM,
+            operationType = AdminOperationType.EXPORT,
+            content = "导出管理后台操作记录",
+            appendRequestData = true
+    )
+    public void exportExcel(@RequestBody AdminOperationLogPageQuery query) {
+        List<XpAdminOperationLog> list = adminOperationLogService.exportList(query);
+        List<XpAdminOperationLogExportExcel> exportList = list == null ? new ArrayList<>() : list.stream()
+                .map(this::toExportRow)
+                .collect(Collectors.toList());
+        HttpServletResponse response = WebUtils.response();
+        if (response == null) {
+            throw new ServiceException("导出失败:未获取到响应对象");
+        }
+        response.setContentType("application/vnd.ms-excel");
+        response.setCharacterEncoding("utf-8");
+        try {
+            String fileName = URLEncoder.encode("管理后台操作记录.xls", "utf-8");
+            response.setHeader("Content-dispodition", "attachment;filename=" + fileName);
+            try (Workbook workbook = ExcelExportUtil.exportExcel(new ExportParams(), XpAdminOperationLogExportExcel.class, exportList);
+                 ServletOutputStream outputStream = response.getOutputStream()) {
+                workbook.write(outputStream);
+            }
+        } catch (IOException e) {
+            throw new ServiceException("管理后台操作记录导出失败");
+        }
     }
 
     @RequiresPermissions(value = {"/adminOperationLog/list", "/operationLog/list"}, logical = Logical.OR)
@@ -50,6 +97,7 @@
     @ApiOperation(value = "管理后台操作记录业务类型列表", tags = {"管理后台-操作记录"})
     public AjaxResult<List<Map<String, Object>>> businessTypeList() {
         List<Map<String, Object>> list = Arrays.stream(AdminBusinessType.values())
+                .filter(type -> type != AdminBusinessType.OTHER)
                 .sorted(Comparator.comparingInt(AdminBusinessType::getCode))
                 .map(type -> {
                     Map<String, Object> item = new LinkedHashMap<>();
@@ -62,13 +110,34 @@
         return AjaxResult.success(list);
     }
 
-    @InnerAuth
-    @PostMapping("/saveLog")
+//    @InnerAuth
+    @PostMapping("/logan/adminOperationLog/saveLog")
     public R<Boolean> saveLog(@RequestBody XpAdminOperationLog adminOperationLog) {
+        if (adminOperationLog == null
+                || Integer.valueOf(AdminBusinessType.OTHER.getCode()).equals(adminOperationLog.getBusinessType())
+                || Integer.valueOf(AdminOperationType.OTHER.getCode()).equals(adminOperationLog.getOperationType())) {
+            return R.ok(false);
+        }
         if (adminOperationLog.getOperationTime() == null) {
             adminOperationLog.setOperationTime(LocalDateTime.now());
         }
         adminOperationLog.setCreateTime(LocalDateTime.now());
         return R.ok(adminOperationLogService.save(adminOperationLog));
     }
+
+    private XpAdminOperationLogExportExcel toExportRow(XpAdminOperationLog log) {
+        XpAdminOperationLogExportExcel row = new XpAdminOperationLogExportExcel();
+        row.setBusinessTypeName(log.getBusinessTypeName());
+        row.setOperationTypeName(log.getOperationTypeName());
+        row.setOperatorName(log.getOperatorName());
+        row.setOperatorAccount(log.getOperatorAccount());
+        row.setOperationContent(log.getOperationContent());
+        row.setOperationIp(log.getOperationIp());
+        row.setRequestUri(log.getRequestUri());
+        row.setRequestMethod(log.getRequestMethod());
+        row.setStatusName(Integer.valueOf(0).equals(log.getStatus()) ? "成功" : "失败");
+        row.setErrorMsg(log.getErrorMsg());
+        row.setOperationTime(log.getOperationTime() == null ? null : EXPORT_TIME_FORMATTER.format(log.getOperationTime()));
+        return row;
+    }
 }

--
Gitblit v1.7.1