From e6d788eef335aa02ac306e984c44affa68ab971c Mon Sep 17 00:00:00 2001
From: zhangherong <571457620@qq.com>
Date: 星期三, 30 七月 2025 20:45:03 +0800
Subject: [PATCH] art: 新增系统第三方集成调用日志表,切面服务实现

---
 db/双林新火炬MES数据库设计.pdma.json                                                    |  450 ++++++++++++++++++++++++
 src/main/java/org/jeecg/common/constant/ApiLogCategoryEnum.java               |   21 +
 src/main/java/org/jeecg/modules/system/mapper/SysApiLogMapper.java            |   17 
 src/main/java/org/jeecg/modules/system/entity/SysApiLog.java                  |   86 ++++
 src/main/java/org/jeecg/modules/system/service/ISysApiLogService.java         |   14 
 src/main/java/org/jeecg/modules/system/mapper/xml/SysApiLogMapper.xml         |    5 
 src/main/java/org/jeecg/modules/sap/service/ProductionOrderSync.java          |    4 
 src/main/java/org/jeecg/modules/sap/service/impl/ProductionOrderSyncImpl.java |  174 +++++----
 src/main/java/org/jeecg/modules/sap/controller/SAPTestController.java         |   10 
 src/main/java/org/jeecg/modules/system/controller/SysApiLogController.java    |   58 +++
 src/main/java/org/jeecg/common/aspect/ApiLogAspect.java                       |  152 ++++++++
 src/main/java/org/jeecg/codegenerate/JeecgOneUtil.java                        |    8 
 src/main/java/org/jeecg/common/aspect/annotation/ApiLog.java                  |   22 +
 src/main/java/org/jeecg/modules/system/service/impl/SysApiLogServiceImpl.java |   19 +
 14 files changed, 953 insertions(+), 87 deletions(-)

diff --git "a/db/\345\217\214\346\236\227\346\226\260\347\201\253\347\202\254MES\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241.pdma.json" "b/db/\345\217\214\346\236\227\346\226\260\347\201\253\347\202\254MES\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241.pdma.json"
index 42ffab3..eef16dd 100644
--- "a/db/\345\217\214\346\236\227\346\226\260\347\201\253\347\202\254MES\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241.pdma.json"
+++ "b/db/\345\217\214\346\236\227\346\226\260\347\201\253\347\202\254MES\346\225\260\346\215\256\345\272\223\350\256\276\350\256\241.pdma.json"
@@ -2,9 +2,9 @@
   "name": "鍙屾灄鏂扮伀鐐琈ES鏁版嵁搴撹璁�",
   "describe": "鎻忚堪鍙岃柂鏂扮伀鐐琈ES鏁版嵁搴撹璁¤鎯�",
   "avatar": "",
-  "version": "4.9.4",
+  "version": "4.9.2",
   "createdTime": "2025-3-10 16:38:19",
-  "updatedTime": "2025-7-28 20:46:22",
+  "updatedTime": "2025-7-30 14:19:17",
   "dbConns": [],
   "profile": {
     "default": {
@@ -68299,6 +68299,449 @@
       "correlations": [],
       "indexes": [],
       "type": "P"
+    },
+    {
+      "id": "8C08DDB8-C3E9-4FBF-B4CE-EAB9BCFE1E38",
+      "env": {
+        "base": {
+          "nameSpace": "",
+          "codeRoot": ""
+        }
+      },
+      "defKey": "sys_api_log",
+      "defName": "绯荤粺绗笁鏂归泦鎴愭帴鍙f棩蹇�",
+      "comment": "",
+      "properties": {
+        "partitioned by": "(date string)",
+        "row format delimited": "",
+        "fields terminated by ','": "",
+        "collection items terminated by '-'": "",
+        "map keys terminated by ':'": "",
+        "store as textfile;": ""
+      },
+      "sysProps": {
+        "nameTemplate": "{defKey}[{defName}]"
+      },
+      "notes": {},
+      "headers": [
+        {
+          "refKey": "hideInGraph",
+          "hideInGraph": true
+        },
+        {
+          "refKey": "defKey",
+          "freeze": false,
+          "hideInGraph": false
+        },
+        {
+          "refKey": "defName",
+          "freeze": false,
+          "hideInGraph": false
+        },
+        {
+          "refKey": "primaryKey",
+          "freeze": false,
+          "hideInGraph": false
+        },
+        {
+          "refKey": "notNull",
+          "freeze": false,
+          "hideInGraph": true
+        },
+        {
+          "refKey": "autoIncrement",
+          "freeze": false,
+          "hideInGraph": true
+        },
+        {
+          "refKey": "domain",
+          "freeze": false,
+          "hideInGraph": true
+        },
+        {
+          "refKey": "type",
+          "freeze": false,
+          "hideInGraph": false
+        },
+        {
+          "refKey": "len",
+          "freeze": false,
+          "hideInGraph": false
+        },
+        {
+          "refKey": "scale",
+          "freeze": false,
+          "hideInGraph": false
+        },
+        {
+          "refKey": "comment",
+          "freeze": false,
+          "hideInGraph": true
+        },
+        {
+          "refKey": "refDict",
+          "freeze": false,
+          "hideInGraph": true
+        },
+        {
+          "refKey": "defaultValue",
+          "freeze": false,
+          "hideInGraph": true
+        },
+        {
+          "refKey": "isStandard",
+          "freeze": false,
+          "hideInGraph": false
+        },
+        {
+          "refKey": "uiHint",
+          "freeze": false,
+          "hideInGraph": true
+        },
+        {
+          "refKey": "extProps",
+          "freeze": false,
+          "hideInGraph": true
+        },
+        {
+          "refKey": "attr1",
+          "freeze": false,
+          "hideInGraph": true
+        },
+        {
+          "refKey": "attr2",
+          "freeze": false,
+          "hideInGraph": true
+        },
+        {
+          "refKey": "attr3",
+          "freeze": false,
+          "hideInGraph": true
+        },
+        {
+          "refKey": "attr4",
+          "freeze": false,
+          "hideInGraph": true
+        },
+        {
+          "refKey": "attr5",
+          "freeze": false,
+          "hideInGraph": true
+        },
+        {
+          "refKey": "attr6",
+          "freeze": false,
+          "hideInGraph": true
+        },
+        {
+          "refKey": "attr7",
+          "freeze": false,
+          "hideInGraph": true
+        },
+        {
+          "refKey": "attr8",
+          "freeze": false,
+          "hideInGraph": true
+        },
+        {
+          "refKey": "attr9",
+          "freeze": false,
+          "hideInGraph": true
+        }
+      ],
+      "fields": [
+        {
+          "defKey": "id",
+          "defName": "涓婚敭",
+          "comment": "",
+          "type": "",
+          "len": "",
+          "scale": "",
+          "primaryKey": true,
+          "notNull": true,
+          "autoIncrement": false,
+          "defaultValue": "",
+          "hideInGraph": false,
+          "refDict": "",
+          "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64",
+          "extProps": {},
+          "domain": "16120F75-6AA7-4483-868D-F07F511BB081",
+          "id": "493A6ADA-F893-45D2-AC93-D3090DC02B0D"
+        },
+        {
+          "defKey": "create_by",
+          "defName": "鍒涘缓浜�",
+          "comment": "",
+          "domain": "54611CCC-CA4B-42E1-9F32-4944C85B85A6",
+          "type": "",
+          "len": "",
+          "scale": "",
+          "primaryKey": false,
+          "notNull": false,
+          "autoIncrement": false,
+          "defaultValue": "",
+          "hideInGraph": true,
+          "refDict": "",
+          "uiHint": "",
+          "id": "C9EFA288-7FAB-408E-87FB-91A4C08BDF73",
+          "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64"
+        },
+        {
+          "defKey": "create_time",
+          "defName": "鍒涘缓鏃堕棿",
+          "comment": "",
+          "domain": "7CFFA0D3-6A93-4DDC-BC10-DF21211064DC",
+          "type": "",
+          "len": "",
+          "scale": "",
+          "primaryKey": false,
+          "notNull": false,
+          "autoIncrement": false,
+          "defaultValue": "",
+          "hideInGraph": true,
+          "refDict": "",
+          "uiHint": "",
+          "id": "E239E79C-CBF1-42DA-907E-2FCADECD2C67",
+          "baseType": "89D69E81-EA34-42EE-9FA2-93B8BD27E098"
+        },
+        {
+          "defKey": "api_category",
+          "defName": "API鍒嗙被",
+          "comment": "",
+          "type": "",
+          "len": "",
+          "scale": "",
+          "primaryKey": false,
+          "notNull": false,
+          "autoIncrement": false,
+          "defaultValue": "",
+          "hideInGraph": false,
+          "refDict": "",
+          "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64",
+          "extProps": {},
+          "domain": "73FD2BAD-2358-4336-B96D-45DC897BD792",
+          "id": "F49D357B-7349-4B9D-9907-191F2F94DA3B"
+        },
+        {
+          "defKey": "api_name",
+          "defName": "鎺ュ彛鍚嶇О",
+          "comment": "",
+          "type": "",
+          "len": "",
+          "scale": "",
+          "primaryKey": false,
+          "notNull": false,
+          "autoIncrement": false,
+          "defaultValue": "",
+          "hideInGraph": false,
+          "refDict": "",
+          "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64",
+          "extProps": {},
+          "domain": "9092C4E0-1A54-4859-ABBB-5B62DBC27573",
+          "id": "66F55A69-EE62-442E-926D-97695E82BE19"
+        },
+        {
+          "defKey": "request_time",
+          "defName": "璇锋眰鏃堕棿",
+          "comment": "",
+          "type": "",
+          "len": "",
+          "scale": "",
+          "primaryKey": false,
+          "notNull": false,
+          "autoIncrement": false,
+          "defaultValue": "",
+          "hideInGraph": false,
+          "refDict": "",
+          "baseType": "89D69E81-EA34-42EE-9FA2-93B8BD27E098",
+          "extProps": {},
+          "domain": "7CFFA0D3-6A93-4DDC-BC10-DF21211064DC",
+          "id": "42B46C10-65A4-410E-A238-3A3F86018945"
+        },
+        {
+          "defKey": "response_time",
+          "defName": "鍝嶅簲鏃堕棿",
+          "comment": "",
+          "type": "",
+          "len": "",
+          "scale": "",
+          "primaryKey": false,
+          "notNull": false,
+          "autoIncrement": false,
+          "defaultValue": "",
+          "hideInGraph": false,
+          "refDict": "",
+          "baseType": "89D69E81-EA34-42EE-9FA2-93B8BD27E098",
+          "extProps": {},
+          "domain": "7CFFA0D3-6A93-4DDC-BC10-DF21211064DC",
+          "id": "628E5760-93A0-4779-85A9-C0231AD79EBC"
+        },
+        {
+          "defKey": "request_method",
+          "defName": "璇锋眰鏂瑰紡",
+          "comment": "",
+          "type": "",
+          "len": "",
+          "scale": "",
+          "primaryKey": false,
+          "notNull": false,
+          "autoIncrement": false,
+          "defaultValue": "",
+          "hideInGraph": false,
+          "refDict": "",
+          "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64",
+          "extProps": {},
+          "domain": "73FD2BAD-2358-4336-B96D-45DC897BD792",
+          "id": "AF639452-207A-474B-9C76-266BDD0F6BA5"
+        },
+        {
+          "defKey": "request_url",
+          "defName": "璇锋眰URL",
+          "comment": "",
+          "type": "",
+          "len": "",
+          "scale": "",
+          "primaryKey": false,
+          "notNull": false,
+          "autoIncrement": false,
+          "defaultValue": "",
+          "hideInGraph": false,
+          "refDict": "",
+          "baseType": "B17BDED3-085F-40E1-9019-3B79CF2BF075",
+          "extProps": {},
+          "domain": "13DE7063-440C-426F-B1DF-25EC824C6DB8",
+          "id": "A3AD6177-3EAE-4ADC-BC22-1B29AC035DD1"
+        },
+        {
+          "defKey": "request_headers",
+          "defName": "璇锋眰澶�",
+          "comment": "",
+          "type": "",
+          "len": "",
+          "scale": "",
+          "primaryKey": false,
+          "notNull": false,
+          "autoIncrement": false,
+          "defaultValue": "",
+          "hideInGraph": false,
+          "refDict": "",
+          "baseType": "B17BDED3-085F-40E1-9019-3B79CF2BF075",
+          "extProps": {},
+          "domain": "13DE7063-440C-426F-B1DF-25EC824C6DB8",
+          "id": "2BA704F8-36C4-4B4D-BF63-C721376D4B7E"
+        },
+        {
+          "defKey": "request_body",
+          "defName": "璇锋眰浣�",
+          "comment": "",
+          "type": "",
+          "len": "",
+          "scale": "",
+          "primaryKey": false,
+          "notNull": false,
+          "autoIncrement": false,
+          "defaultValue": "",
+          "hideInGraph": false,
+          "refDict": "",
+          "baseType": "B17BDED3-085F-40E1-9019-3B79CF2BF075",
+          "extProps": {},
+          "domain": "13DE7063-440C-426F-B1DF-25EC824C6DB8",
+          "id": "4DBE1100-12B3-4CFD-B0B1-4AFE5A9033AB"
+        },
+        {
+          "defKey": "response_code",
+          "defName": "鍝嶅簲缂栫爜",
+          "comment": "",
+          "type": "",
+          "len": "",
+          "scale": "",
+          "primaryKey": false,
+          "notNull": false,
+          "autoIncrement": false,
+          "defaultValue": "",
+          "hideInGraph": false,
+          "refDict": "",
+          "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64",
+          "extProps": {},
+          "domain": "54611CCC-CA4B-42E1-9F32-4944C85B85A6",
+          "id": "4CD23738-EE0F-4029-9465-9CDF3E7CD461"
+        },
+        {
+          "defKey": "response_message",
+          "defName": "鍝嶅簲娑堟伅",
+          "comment": "",
+          "type": "",
+          "len": "",
+          "scale": "",
+          "primaryKey": false,
+          "notNull": false,
+          "autoIncrement": false,
+          "defaultValue": "",
+          "hideInGraph": false,
+          "refDict": "",
+          "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64",
+          "extProps": {},
+          "domain": "9092C4E0-1A54-4859-ABBB-5B62DBC27573",
+          "id": "E872F6CA-7D7A-40F1-959D-FD35447BB5A1"
+        },
+        {
+          "defKey": "response_body",
+          "defName": "鍝嶅簲浣�",
+          "comment": "",
+          "type": "",
+          "len": "",
+          "scale": "",
+          "primaryKey": false,
+          "notNull": false,
+          "autoIncrement": false,
+          "defaultValue": "",
+          "hideInGraph": false,
+          "refDict": "",
+          "baseType": "B17BDED3-085F-40E1-9019-3B79CF2BF075",
+          "extProps": {},
+          "domain": "13DE7063-440C-426F-B1DF-25EC824C6DB8",
+          "id": "AC48A8A8-E320-4E79-AFA7-4FDB1059961F"
+        },
+        {
+          "defKey": "request_status",
+          "defName": "鐘舵��",
+          "comment": "鎴愬姛銆佸け璐�",
+          "type": "",
+          "len": "",
+          "scale": "",
+          "primaryKey": false,
+          "notNull": false,
+          "autoIncrement": false,
+          "defaultValue": "",
+          "hideInGraph": false,
+          "refDict": "",
+          "baseType": "1D764C4A-6F9F-421E-B11A-6F3E23B51811",
+          "extProps": {},
+          "domain": "6BC8F04B-6CFA-4995-98D3-318F5CDD774E",
+          "id": "4CCFBCCD-0681-4B6F-BAE8-624063397C72"
+        },
+        {
+          "defKey": "method",
+          "defName": "璋冪敤鏂规硶",
+          "comment": "",
+          "type": "",
+          "len": "",
+          "scale": "",
+          "primaryKey": false,
+          "notNull": false,
+          "autoIncrement": false,
+          "defaultValue": "",
+          "hideInGraph": false,
+          "refDict": "",
+          "baseType": "FC9790A7-36B8-4A48-8F9A-BC1042BCFE64",
+          "extProps": {},
+          "domain": "9092C4E0-1A54-4859-ABBB-5B62DBC27573",
+          "id": "112770C9-963A-40F4-BCDF-289177A84824"
+        }
+      ],
+      "correlations": [],
+      "indexes": [],
+      "type": "P"
     }
   ],
   "views": [],
@@ -69073,7 +69516,8 @@
         "ED18EDD7-96F9-4CCA-93F0-633567955063",
         "ADF40C7F-5C97-4196-BCA7-E780FCC8E2FB",
         "27A01955-9C87-4E63-9A2A-8B489835879F",
-        "D36AAD93-CF06-45C1-8058-430304D98601"
+        "D36AAD93-CF06-45C1-8058-430304D98601",
+        "8C08DDB8-C3E9-4FBF-B4CE-EAB9BCFE1E38"
       ],
       "refViews": [],
       "refDiagrams": [],
diff --git a/src/main/java/org/jeecg/codegenerate/JeecgOneUtil.java b/src/main/java/org/jeecg/codegenerate/JeecgOneUtil.java
index 3fe39ee..d20e656 100644
--- a/src/main/java/org/jeecg/codegenerate/JeecgOneUtil.java
+++ b/src/main/java/org/jeecg/codegenerate/JeecgOneUtil.java
@@ -6,10 +6,10 @@
 public class JeecgOneUtil {
     public static void main(String[] args) throws Exception {
         TableVo tableVo = new TableVo();
-        tableVo.setTableName("lsw_material");
-        tableVo.setEntityName("LswMaterial");
-        tableVo.setEntityPackage("lsw");
-        tableVo.setFtlDescription("绾胯竟搴撶墿鏂欎俊鎭�");
+        tableVo.setTableName("sys_api_log");
+        tableVo.setEntityName("SysApiLog");
+        tableVo.setEntityPackage("system");
+        tableVo.setFtlDescription("绯荤粺绗笁鏂归泦鎴愭帴鍙f棩蹇�");
         new CodeGenerateOne(tableVo).generateCodeFile(null);
     }
 }
diff --git a/src/main/java/org/jeecg/common/aspect/ApiLogAspect.java b/src/main/java/org/jeecg/common/aspect/ApiLogAspect.java
new file mode 100644
index 0000000..9da336c
--- /dev/null
+++ b/src/main/java/org/jeecg/common/aspect/ApiLogAspect.java
@@ -0,0 +1,152 @@
+package org.jeecg.common.aspect;
+
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.parser.Feature;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.sap.conn.jco.*;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Pointcut;
+import org.aspectj.lang.reflect.MethodSignature;
+import org.jeecg.common.aspect.annotation.ApiLog;
+import org.jeecg.common.constant.ApiLogCategoryEnum;
+import org.jeecg.common.exception.JeecgBootException;
+import org.jeecg.modules.mdc.util.ThrowableUtil;
+import org.jeecg.modules.system.entity.SysApiLog;
+import org.jeecg.modules.system.service.ISysApiLogService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+@Aspect
+@Component
+public class ApiLogAspect {
+    @Autowired
+    private ISysApiLogService apiLogService;
+    @Autowired
+    private ObjectMapper objectMapper;
+
+    @Pointcut("@annotation(org.jeecg.common.aspect.annotation.ApiLog)")
+    public void logPointCut() {
+
+    }
+
+    @Around("logPointCut()")
+    public Object around(ProceedingJoinPoint point) {
+        SysApiLog dto = new SysApiLog();
+        dto.setRequestTime(new Date());
+        //鎵ц鏂规硶
+        Object result = null;
+        try {
+            result = point.proceed();
+            //鎵ц鏃堕暱(姣)
+            dto.setResponseTime(new Date());
+            //淇濆瓨鏃ュ織
+            saveApiLog(dto, point, result);
+        } catch (Throwable e) {
+            //鎵ц鏃堕暱(姣)
+            dto.setResponseTime(new Date());
+            //淇濆瓨鏃ュ織
+            saveErrorLog(dto, point, e);
+        }
+        return result;
+    }
+
+    private void saveApiLog(SysApiLog dto, ProceedingJoinPoint joinPoint, Object result) {
+        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
+        Method method = signature.getMethod();
+
+        ApiLog syslog = method.getAnnotation(ApiLog.class);
+        if (syslog != null) {
+            String apiName = syslog.apiName();
+            ApiLogCategoryEnum apiCategory = syslog.apiCategory();
+            //娉ㄨВ涓婄殑鎻忚堪,鎿嶄綔鏃ュ織鍐呭
+            dto.setApiName(apiName);
+            dto.setApiCategory(apiCategory.name());
+            switch (apiCategory) {
+                case SAP:
+                    dto.setRequestMethod("RFC");
+                    if (result instanceof Map) {
+                        Map<String, Object> map = (Map<String, Object>) result;
+                        dto.setResponseCode(map.get("ztype").toString());
+                        dto.setResponseMessage(map.get("zmess").toString());
+                        dto.setRequestBody(map.get("importParameters").toString());
+                        dto.setResponseBody(parseSAPResponseResult(map.get("result")));
+                    }
+                    break;
+                case WMS:
+                    dto.setRequestMethod("Webservice");
+                    break;
+                case FEI_SHU:
+                    dto.setRequestMethod("Http");
+                    break;
+            }
+        }
+
+        //璇锋眰鐨勬柟娉曞悕
+        String className = joinPoint.getTarget().getClass().getName();
+        String methodName = signature.getName();
+        dto.setMethod(className + "." + methodName + "()");
+        dto.setRequestStatus(0);
+        apiLogService.save(dto);
+    }
+
+    private void saveErrorLog(SysApiLog dto, ProceedingJoinPoint joinPoint, Throwable e) {
+        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
+        Method method = signature.getMethod();
+
+        ApiLog syslog = method.getAnnotation(ApiLog.class);
+        if (syslog != null) {
+            String apiName = syslog.apiName();
+            ApiLogCategoryEnum apiCategory = syslog.apiCategory();
+            //娉ㄨВ涓婄殑鎻忚堪,鎿嶄綔鏃ュ織鍐呭
+            dto.setApiName(apiName);
+            dto.setApiCategory(apiCategory.name());
+            switch (apiCategory) {
+                case SAP:
+                    dto.setRequestMethod("RFC");
+                    break;
+                case WMS:
+                    dto.setRequestMethod("Webservice");
+                    break;
+                case FEI_SHU:
+                    dto.setRequestMethod("Http");
+                    break;
+            }
+        }
+
+        //璇锋眰鐨勬柟娉曞悕
+        String className = joinPoint.getTarget().getClass().getName();
+        String methodName = signature.getName();
+        dto.setMethod(className + "." + methodName + "()");
+        dto.setRequestStatus(-1);
+        dto.setResponseCode("-1");
+        dto.setResponseMessage("璇锋眰寮傚父锛岃鏌ョ湅鍝嶅簲浣擄紒");
+        dto.setResponseBody(ThrowableUtil.getStackTrace(e));
+        apiLogService.save(dto);
+    }
+
+    private String parseSAPResponseResult(Object result) {
+        List<JSONObject> items = new ArrayList<>();
+        if (result instanceof List) {
+            List<Object> list = (List<Object>) result;
+            try {
+                for (Object obj : list) {
+                    String json = objectMapper.writeValueAsString(obj);
+                    JSONObject item = JSONObject.parseObject(json, Feature.OrderedField);
+                    items.add(item);
+                }
+            } catch (JsonProcessingException e) {
+                throw new JeecgBootException(e);
+            }
+        }
+        return items.toString();
+    }
+}
diff --git a/src/main/java/org/jeecg/common/aspect/annotation/ApiLog.java b/src/main/java/org/jeecg/common/aspect/annotation/ApiLog.java
new file mode 100644
index 0000000..c809029
--- /dev/null
+++ b/src/main/java/org/jeecg/common/aspect/annotation/ApiLog.java
@@ -0,0 +1,22 @@
+package org.jeecg.common.aspect.annotation;
+
+import org.jeecg.common.constant.ApiLogCategoryEnum;
+
+import java.lang.annotation.*;
+
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface ApiLog {
+    /**
+     * API鍚嶇О
+     * @return
+     */
+    String apiName() default "";
+
+    /**
+     * API鍒嗙被
+     * @return
+     */
+    ApiLogCategoryEnum apiCategory() default ApiLogCategoryEnum.SAP;
+}
diff --git a/src/main/java/org/jeecg/common/constant/ApiLogCategoryEnum.java b/src/main/java/org/jeecg/common/constant/ApiLogCategoryEnum.java
new file mode 100644
index 0000000..28fa6ef
--- /dev/null
+++ b/src/main/java/org/jeecg/common/constant/ApiLogCategoryEnum.java
@@ -0,0 +1,21 @@
+package org.jeecg.common.constant;
+
+/**
+ * 绗笁鏂归泦鎴愭帴鍙e鎺ョ被鍨�
+ */
+public enum ApiLogCategoryEnum {
+    SAP,  //SAP鎺ュ彛瀵规帴
+    WMS, //WMS鎺ュ彛瀵规帴
+    FEI_SHU, //椋炰功鎺ュ彛瀵规帴
+    ;
+
+    public static ApiLogCategoryEnum getInstance(String code) {
+        ApiLogCategoryEnum[] values = ApiLogCategoryEnum.values();
+        for (ApiLogCategoryEnum value : values) {
+            if (value.name().equals(code)) {
+                return value;
+            }
+        }
+        return null;
+    }
+}
diff --git a/src/main/java/org/jeecg/modules/sap/controller/SAPTestController.java b/src/main/java/org/jeecg/modules/sap/controller/SAPTestController.java
index c51bd9c..b1a4451 100644
--- a/src/main/java/org/jeecg/modules/sap/controller/SAPTestController.java
+++ b/src/main/java/org/jeecg/modules/sap/controller/SAPTestController.java
@@ -11,6 +11,8 @@
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.Map;
+
 @Api(tags = "SAP闆嗘垚娴嬭瘯")
 @RestController
 @RequestMapping("/sap/client")
@@ -28,10 +30,10 @@
         return Result.ok(test);
     }
 
-    @ApiOperation(value = "SAP闆嗘垚娴嬭瘯-娴嬭瘯鎺ュ彛", notes = "SAP闆嗘垚娴嬭瘯-娴嬭瘯鎺ュ彛")
+    @ApiOperation(value = "SAP闆嗘垚娴嬭瘯-鐢熶骇璁㈠崟鍚屾鎺ュ彛", notes = "SAP闆嗘垚娴嬭瘯-鐢熶骇璁㈠崟鍚屾鎺ュ彛")
     @GetMapping("/syncProductionOrder")
-    public Result<?> syncProductionOrder() {
-        productionOrderSync.syncProductionOrder();
-        return Result.ok();
+    public Result<?> syncProductionOrder() throws Exception {
+        Map<String, Object> resultMap = productionOrderSync.syncProductionOrder();
+        return Result.ok(resultMap);
     }
 }
diff --git a/src/main/java/org/jeecg/modules/sap/service/ProductionOrderSync.java b/src/main/java/org/jeecg/modules/sap/service/ProductionOrderSync.java
index 8373a02..7cb68da 100644
--- a/src/main/java/org/jeecg/modules/sap/service/ProductionOrderSync.java
+++ b/src/main/java/org/jeecg/modules/sap/service/ProductionOrderSync.java
@@ -1,8 +1,10 @@
 package org.jeecg.modules.sap.service;
 
+import java.util.Map;
+
 public interface ProductionOrderSync {
     /**
      * 鍚屾鐢熸垚璁㈠崟
      */
-    void syncProductionOrder();
+    Map<String, Object> syncProductionOrder() throws Exception;
 }
diff --git a/src/main/java/org/jeecg/modules/sap/service/impl/ProductionOrderSyncImpl.java b/src/main/java/org/jeecg/modules/sap/service/impl/ProductionOrderSyncImpl.java
index ed2c10b..9cb836b 100644
--- a/src/main/java/org/jeecg/modules/sap/service/impl/ProductionOrderSyncImpl.java
+++ b/src/main/java/org/jeecg/modules/sap/service/impl/ProductionOrderSyncImpl.java
@@ -1,7 +1,13 @@
 package org.jeecg.modules.sap.service.impl;
 
-import com.sap.conn.jco.*;
+import com.alibaba.fastjson.JSONObject;
+import com.sap.conn.jco.JCoDestination;
+import com.sap.conn.jco.JCoFunction;
+import com.sap.conn.jco.JCoRepository;
+import com.sap.conn.jco.JCoTable;
 import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.aspect.annotation.ApiLog;
+import org.jeecg.common.constant.ApiLogCategoryEnum;
 import org.jeecg.config.sap.SapRfcConnectionManager;
 import org.jeecg.modules.sap.FunctionConst;
 import org.jeecg.modules.sap.dto.ProductionOrderDTO;
@@ -10,7 +16,9 @@
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 鐢熸垚璁㈠崟鍚屾鏈嶅姟
@@ -35,81 +43,97 @@
 
 
     @Override
-    public void syncProductionOrder() {
+    @ApiLog(apiName = "鐢熶骇璁㈠崟鍚屾鎺ュ彛(ZPPF_033_1)", apiCategory = ApiLogCategoryEnum.SAP)
+    public Map<String, Object> syncProductionOrder() throws Exception {
+        Map<String, Object> resultMap = new HashMap<>();
         JCoDestination destination = connectionManager.getDestination();
-        try {
-            JCoRepository repository = destination.getRepository();
-            JCoFunction function = repository.getFunction(FunctionConst.ZPPF_033_1);
-            if (function == null) {
-                throw new RuntimeException("RFC 鍑芥暟 ZPPF_033_1 鏈壘鍒帮紒");
-            }
-            // 璁剧疆杈撳叆鍙傛暟
-            //璁㈠崟鍙锋煡璇㈡潯浠�
-//            JCoTable AUFNRTable = function.getTableParameterList().getTable("ZTAB_AUFNR");
-            //璁㈠崟绫诲瀷 鏍囧噯鐢熶骇璁㈠崟
-            JCoTable AUARTTable = function.getTableParameterList().getTable("ZTAB_AUART");
-            AUARTTable.appendRow();
-            AUARTTable.setValue("AUART", orderTypeCode1);
-            //鍏垎鍘傝皟搴�
-            JCoTable FEVORTable = function.getTableParameterList().getTable("ZTAB_FEVOR");
-            FEVORTable.appendRow();
-            FEVORTable.setValue("FEVOR", productionManager);
-            //鏂扮伀鐐�
-            JCoTable WERKSTable = function.getTableParameterList().getTable("ZTAB_WERKS");
-            WERKSTable.appendRow();
-            WERKSTable.setValue("WERKS", factoryCode);
-            //璁㈠崟鐘舵��
-            JCoTable TXT04Table = function.getTableParameterList().getTable("ZTAB_TXT04");
-            TXT04Table.appendRow();
-            TXT04Table.setValue("TXT04", orderStatus);
-            // 鎵ц璋冪敤
-            function.execute(destination);
-            //鑾峰彇杩斿洖缁撴灉
-            String zmess = function.getExportParameterList().getValue("ZMESS").toString();
-            String ztype = function.getExportParameterList().getValue("ZTYPE").toString();//S 鏍囪瘑 鎴愬姛
-            if(!"S".equals(ztype)){
-                log.error("鑾峰彇璁㈠崟淇℃伅澶辫触锛孼TYPE={}, ZMESS={}", ztype, zmess);
-                return;
-            }
-            // 鑾峰彇杈撳嚭鍙傛暟
-            JCoTable outputTable = function.getTableParameterList().getTable("ZTAB_OUT");
-            int numRows = outputTable.getNumRows();
-            List<ProductionOrderDTO> resultList = new ArrayList<>();
-            ProductionOrderDTO dto;
-            for (int i = 0; i < numRows; i++) {
-                outputTable.setRow(i);
-                dto = new ProductionOrderDTO();
-                dto.setKDPOS(outputTable.getString("KDPOS"));
-                dto.setCHARG(outputTable.getString("CHARG"));
-                dto.setMAKTX(outputTable.getString("MAKTX"));
-                dto.setMATNR(outputTable.getString("MATNR"));
-                dto.setKDAUF(outputTable.getString("KDAUF"));
-                dto.setAUFNR(outputTable.getString("AUFNR"));
-                dto.setDAUAT(outputTable.getString("DAUAT"));
-                dto.setGAMNG(outputTable.getString("GAMNG"));
-                dto.setGMEIN(outputTable.getString("GMEIN"));
-                dto.setAPRIO(outputTable.getString("APRIO"));
-                dto.setAUFPL(outputTable.getString("AUFPL"));
-                dto.setSTLNR(outputTable.getString("STLNR"));
-                dto.setDWERK(outputTable.getString("DWERK"));
-                dto.setNAME1(outputTable.getString("NAME1"));
-                dto.setFEVOR(outputTable.getString("FEVOR"));
-                dto.setTXT(outputTable.getString("TXT"));
-                dto.setUSNAM(outputTable.getString("USNAM"));
-                dto.setUDATE(outputTable.getString("UDATE"));
-                dto.setLAEDA(outputTable.getString("LAEDA"));
-                dto.setTIMES(outputTable.getString("TIMES"));
-                dto.setTXT04(outputTable.getString("TXT04"));
-                dto.setTXT30(outputTable.getString("TXT30"));
-                dto.setGSTRP(outputTable.getString("GSTRP"));
-                dto.setGLTRP(outputTable.getString("GLTRP"));
-
-                //娣诲姞缁撴灉闆�
-                resultList.add(dto);
-                log.info(dto.toString());
-            }
-        } catch (JCoException e) {
-            log.error(e.getMessage(), e);
+        JCoRepository repository = destination.getRepository();
+        JCoFunction function = repository.getFunction(FunctionConst.ZPPF_033_1);
+        if (function == null) {
+            throw new RuntimeException("RFC 鍑芥暟 ZPPF_033_1 鏈壘鍒帮紒");
         }
+        // 璁剧疆杈撳叆鍙傛暟
+        //璁㈠崟鍙锋煡璇㈡潯浠�
+//            JCoTable AUFNRTable = function.getTableParameterList().getTable("ZTAB_AUFNR");
+        List<JSONObject> items = new ArrayList<>();
+        //璁㈠崟绫诲瀷 鏍囧噯鐢熶骇璁㈠崟
+        JCoTable AUARTTable = function.getTableParameterList().getTable("ZTAB_AUART");
+        AUARTTable.appendRow();
+        AUARTTable.setValue("AUART", orderTypeCode1);
+        //缁勮璇锋眰鍙傛暟
+        JSONObject item1 = new JSONObject();
+        item1.put("AUART", orderTypeCode1);
+        items.add(item1);
+        //鍏垎鍘傝皟搴�
+        JCoTable FEVORTable = function.getTableParameterList().getTable("ZTAB_FEVOR");
+        FEVORTable.appendRow();
+        FEVORTable.setValue("FEVOR", productionManager);
+        //缁勮璇锋眰鍙傛暟
+        JSONObject item2 = new JSONObject();
+        item2.put("FEVOR", productionManager);
+        items.add(item2);
+        //鏂扮伀鐐�
+        JCoTable WERKSTable = function.getTableParameterList().getTable("ZTAB_WERKS");
+        WERKSTable.appendRow();
+        WERKSTable.setValue("WERKS", factoryCode);
+        //缁勮璇锋眰鍙傛暟
+        JSONObject item3 = new JSONObject();
+        item3.put("WERKS", factoryCode);
+        items.add(item3);
+        //璁㈠崟鐘舵��
+        JCoTable TXT04Table = function.getTableParameterList().getTable("ZTAB_TXT04");
+        TXT04Table.appendRow();
+        TXT04Table.setValue("TXT04", orderStatus);
+        //缁勮璇锋眰鍙傛暟
+        JSONObject item4 = new JSONObject();
+        item4.put("TXT04", orderStatus);
+        items.add(item4);
+        // 鎵ц璋冪敤
+        function.execute(destination);
+        //鑾峰彇杩斿洖缁撴灉
+        String zmess = function.getExportParameterList().getValue("ZMESS").toString();
+        String ztype = function.getExportParameterList().getValue("ZTYPE").toString();//S 鏍囪瘑 鎴愬姛
+        // 鑾峰彇杈撳嚭鍙傛暟
+        JCoTable outputTable = function.getTableParameterList().getTable("ZTAB_OUT");
+        int numRows = outputTable.getNumRows();
+        List<ProductionOrderDTO> resultList = new ArrayList<>();
+        ProductionOrderDTO dto;
+        for (int i = 0; i < numRows; i++) {
+            outputTable.setRow(i);
+            dto = new ProductionOrderDTO();
+            dto.setKDPOS(outputTable.getString("KDPOS"));
+            dto.setCHARG(outputTable.getString("CHARG"));
+            dto.setMAKTX(outputTable.getString("MAKTX"));
+            dto.setMATNR(outputTable.getString("MATNR"));
+            dto.setKDAUF(outputTable.getString("KDAUF"));
+            dto.setAUFNR(outputTable.getString("AUFNR"));
+            dto.setDAUAT(outputTable.getString("DAUAT"));
+            dto.setGAMNG(outputTable.getString("GAMNG"));
+            dto.setGMEIN(outputTable.getString("GMEIN"));
+            dto.setAPRIO(outputTable.getString("APRIO"));
+            dto.setAUFPL(outputTable.getString("AUFPL"));
+            dto.setSTLNR(outputTable.getString("STLNR"));
+            dto.setDWERK(outputTable.getString("DWERK"));
+            dto.setNAME1(outputTable.getString("NAME1"));
+            dto.setFEVOR(outputTable.getString("FEVOR"));
+            dto.setTXT(outputTable.getString("TXT"));
+            dto.setUSNAM(outputTable.getString("USNAM"));
+            dto.setUDATE(outputTable.getString("UDATE"));
+            dto.setLAEDA(outputTable.getString("LAEDA"));
+            dto.setTIMES(outputTable.getString("TIMES"));
+            dto.setTXT04(outputTable.getString("TXT04"));
+            dto.setTXT30(outputTable.getString("TXT30"));
+            dto.setGSTRP(outputTable.getString("GSTRP"));
+            dto.setGLTRP(outputTable.getString("GLTRP"));
+
+            //娣诲姞缁撴灉闆�
+            resultList.add(dto);
+            log.info(dto.toString());
+        }
+        resultMap.put("zmess", zmess);
+        resultMap.put("ztype", ztype);
+        resultMap.put("importParameters", items);
+        resultMap.put("result", resultList);
+        return resultMap;
     }
 }
diff --git a/src/main/java/org/jeecg/modules/system/controller/SysApiLogController.java b/src/main/java/org/jeecg/modules/system/controller/SysApiLogController.java
new file mode 100644
index 0000000..588d41d
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/system/controller/SysApiLogController.java
@@ -0,0 +1,58 @@
+package org.jeecg.modules.system.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.modules.system.entity.SysApiLog;
+import org.jeecg.modules.system.service.ISysApiLogService;
+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.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+
+ /**
+ * @Description: 绯荤粺绗笁鏂归泦鎴愭帴鍙f棩蹇�
+ * @Author: jeecg-boot
+ * @Date:   2025-07-30
+ * @Version: V1.0
+ */
+@Slf4j
+@Api(tags="绯荤粺绗笁鏂归泦鎴愭帴鍙f棩蹇�")
+@RestController
+@RequestMapping("/system/sysApiLog")
+public class SysApiLogController extends JeecgController<SysApiLog, ISysApiLogService> {
+	@Autowired
+	private ISysApiLogService sysApiLogService;
+	
+	/**
+	 * 鍒嗛〉鍒楄〃鏌ヨ
+	 *
+	 * @param sysApiLog
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	@AutoLog(value = "绯荤粺绗笁鏂归泦鎴愭帴鍙f棩蹇�-鍒嗛〉鍒楄〃鏌ヨ")
+	@ApiOperation(value="绯荤粺绗笁鏂归泦鎴愭帴鍙f棩蹇�-鍒嗛〉鍒楄〃鏌ヨ", notes="绯荤粺绗笁鏂归泦鎴愭帴鍙f棩蹇�-鍒嗛〉鍒楄〃鏌ヨ")
+	@GetMapping(value = "/list")
+	public Result<?> queryPageList(SysApiLog sysApiLog,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<SysApiLog> queryWrapper = QueryGenerator.initQueryWrapper(sysApiLog, req.getParameterMap());
+		Page<SysApiLog> page = new Page<SysApiLog>(pageNo, pageSize);
+		IPage<SysApiLog> pageList = sysApiLogService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+}
diff --git a/src/main/java/org/jeecg/modules/system/entity/SysApiLog.java b/src/main/java/org/jeecg/modules/system/entity/SysApiLog.java
new file mode 100644
index 0000000..ca78486
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/system/entity/SysApiLog.java
@@ -0,0 +1,86 @@
+package org.jeecg.modules.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecg.common.aspect.annotation.Dict;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+/**
+ * @Description: 绯荤粺绗笁鏂归泦鎴愭帴鍙f棩蹇�
+ * @Author: jeecg-boot
+ * @Date:   2025-07-30
+ * @Version: V1.0
+ */
+@Data
+@TableName("sys_api_log")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="sys_api_log瀵硅薄", description="绯荤粺绗笁鏂归泦鎴愭帴鍙f棩蹇�")
+public class SysApiLog implements Serializable {
+    
+	/**涓婚敭*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭")
+	private String id;
+	/**鍒涘缓浜�*/
+    @ApiModelProperty(value = "鍒涘缓浜�")
+	private String createBy;
+	/**鍒涘缓鏃堕棿*/
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date createTime;
+	/**API鍒嗙被*/
+    @ApiModelProperty(value = "API鍒嗙被")
+	@Dict(dicCode = "api_log_category")
+	private String apiCategory;
+	/**鎺ュ彛鍚嶇О*/
+    @ApiModelProperty(value = "鎺ュ彛鍚嶇О")
+	private String apiName;
+	/**璇锋眰鏃堕棿*/
+    @ApiModelProperty(value = "璇锋眰鏃堕棿")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date requestTime;
+	/**鍝嶅簲鏃堕棿*/
+    @ApiModelProperty(value = "鍝嶅簲鏃堕棿")
+	@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private Date responseTime;
+	/**璇锋眰鏂瑰紡*/
+    @ApiModelProperty(value = "璇锋眰鏂瑰紡")
+	private String requestMethod;
+	/**璇锋眰瀹屾垚URL*/
+    @ApiModelProperty(value = "璇锋眰URL")
+	private String requestUrl;
+	/**璇锋眰澶�*/
+    @ApiModelProperty(value = "璇锋眰澶�")
+	private String requestHeaders;
+	/**璇锋眰浣�*/
+    @ApiModelProperty(value = "璇锋眰浣�")
+	private String requestBody;
+	/**鍝嶅簲缂栫爜*/
+    @ApiModelProperty(value = "鍝嶅簲缂栫爜")
+	private String responseCode;
+	/**鍝嶅簲娑堟伅*/
+    @ApiModelProperty(value = "鍝嶅簲娑堟伅")
+	private String responseMessage;
+	/**鍝嶅簲浣�*/
+    @ApiModelProperty(value = "鍝嶅簲浣�")
+	private String responseBody;
+	/**鐘舵��;鎴愬姛銆佸け璐�*/
+    @ApiModelProperty(value = "鐘舵��;鎴愬姛銆佸け璐�")
+	private Integer requestStatus;
+	/**璋冪敤鏂规硶*/
+	@ApiModelProperty(value = "璋冪敤鏂规硶")
+	private String method;
+}
diff --git a/src/main/java/org/jeecg/modules/system/mapper/SysApiLogMapper.java b/src/main/java/org/jeecg/modules/system/mapper/SysApiLogMapper.java
new file mode 100644
index 0000000..460c32d
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/system/mapper/SysApiLogMapper.java
@@ -0,0 +1,17 @@
+package org.jeecg.modules.system.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.system.entity.SysApiLog;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 绯荤粺绗笁鏂归泦鎴愭帴鍙f棩蹇�
+ * @Author: jeecg-boot
+ * @Date:   2025-07-30
+ * @Version: V1.0
+ */
+public interface SysApiLogMapper extends BaseMapper<SysApiLog> {
+
+}
diff --git a/src/main/java/org/jeecg/modules/system/mapper/xml/SysApiLogMapper.xml b/src/main/java/org/jeecg/modules/system/mapper/xml/SysApiLogMapper.xml
new file mode 100644
index 0000000..7fb8f4d
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/system/mapper/xml/SysApiLogMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.system.mapper.SysApiLogMapper">
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/java/org/jeecg/modules/system/service/ISysApiLogService.java b/src/main/java/org/jeecg/modules/system/service/ISysApiLogService.java
new file mode 100644
index 0000000..3905d43
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/system/service/ISysApiLogService.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.system.service;
+
+import org.jeecg.modules.system.entity.SysApiLog;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 绯荤粺绗笁鏂归泦鎴愭帴鍙f棩蹇�
+ * @Author: jeecg-boot
+ * @Date:   2025-07-30
+ * @Version: V1.0
+ */
+public interface ISysApiLogService extends IService<SysApiLog> {
+
+}
diff --git a/src/main/java/org/jeecg/modules/system/service/impl/SysApiLogServiceImpl.java b/src/main/java/org/jeecg/modules/system/service/impl/SysApiLogServiceImpl.java
new file mode 100644
index 0000000..ddef969
--- /dev/null
+++ b/src/main/java/org/jeecg/modules/system/service/impl/SysApiLogServiceImpl.java
@@ -0,0 +1,19 @@
+package org.jeecg.modules.system.service.impl;
+
+import org.jeecg.modules.system.entity.SysApiLog;
+import org.jeecg.modules.system.mapper.SysApiLogMapper;
+import org.jeecg.modules.system.service.ISysApiLogService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 绯荤粺绗笁鏂归泦鎴愭帴鍙f棩蹇�
+ * @Author: jeecg-boot
+ * @Date:   2025-07-30
+ * @Version: V1.0
+ */
+@Service
+public class SysApiLogServiceImpl extends ServiceImpl<SysApiLogMapper, SysApiLog> implements ISysApiLogService {
+
+}

--
Gitblit v1.9.3