TRX 1 vuosi sitten
vanhempi
commit
b6b5de196c

+ 1 - 1
src/main/java/com/zswl/dataservice/controller/hardware/OperationLogsController.java

@@ -31,7 +31,7 @@ public class OperationLogsController {
     @Autowired
     OperationLogsService operationLogsService;
 
-    @Operation(summary = "设备列表-分页查询")
+    @Operation(summary = "操作列表-分页查询")
     @RequestMapping(value = {"page"}, method = {RequestMethod.POST})
     public ResultContent<Page<OperationLogsModel>> page(@Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable,
             @Parameter(required = false) OperationLogsSearchParam param) {

+ 44 - 0
src/main/java/com/zswl/dataservice/controller/openApi/OpenApiRequestLogController.java

@@ -0,0 +1,44 @@
+package com.zswl.dataservice.controller.openApi;
+
+import com.zswl.dataservice.model.openApi.requestLog.OpenApiRequestLogModel;
+import com.zswl.dataservice.model.openApi.requestLog.OpenApiRequestLogSearch;
+import com.zswl.dataservice.model.operLogs.OperationLogsModel;
+import com.zswl.dataservice.model.operLogs.OperationLogsSearchParam;
+import com.zswl.dataservice.service.openApi.OpenApiRequestLogsService;
+import com.zswl.dataservice.service.user.OperationLogsService;
+import com.zswl.dataservice.utils.result.ResultContent;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.web.PageableDefault;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * openAPI日志管理 服务
+ *
+ * @author TRX
+ * @date 2024/3/21
+ */
+@RequestMapping("/openApiRequestLog")
+@RestController
+@Validated
+@Tag(name = "openAPI日志管理")
+public class OpenApiRequestLogController {
+
+    @Autowired
+    OpenApiRequestLogsService openApiRequestLogsService;
+
+    @Operation(summary = "访问请求列表-分页查询")
+    @RequestMapping(value = {"page"}, method = {RequestMethod.POST})
+    public ResultContent<Page<OpenApiRequestLogModel>> page(
+            @Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable,
+            @Parameter(required = false) OpenApiRequestLogSearch param) {
+        return openApiRequestLogsService.pageLogs(pageable, param);
+    }
+}

+ 14 - 0
src/main/java/com/zswl/dataservice/dao/base/BaseImpl.java

@@ -1,6 +1,7 @@
 package com.zswl.dataservice.dao.base;
 
 import com.zswl.dataservice.model.baseParam.SuperSearchParam;
+import com.zswl.dataservice.utils.CommonUtil;
 import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.mongodb.core.query.Criteria;
@@ -23,6 +24,19 @@ public abstract class BaseImpl {
         return criteria;
     }
 
+    public Criteria buildCriteriaAboutTime(SuperSearchParam param) {
+        Criteria criteria = new Criteria();
+        criteria.and("isDelete").ne(Boolean.TRUE);
+        if (!CommonUtil.longIsEmpty(param.getStartTime()) && !CommonUtil.longIsEmpty(param.getEndTime())) {
+            criteria.and("createTime").gte(param.getStartTime()).lte(param.getEndTime());
+        } else if (!CommonUtil.longIsEmpty(param.getStartTime()) && CommonUtil.longIsEmpty(param.getEndTime())) {
+            criteria.and("createTime").gte(param.getStartTime());
+        } else if (CommonUtil.longIsEmpty(param.getStartTime()) && !CommonUtil.longIsEmpty(param.getEndTime())) {
+            criteria.and("createTime").lte(param.getEndTime());
+        }
+        return criteria;
+    }
+
     /**
      * 排序
      *

+ 17 - 0
src/main/java/com/zswl/dataservice/dao/openApi/OpenApiRequestLogDao.java

@@ -0,0 +1,17 @@
+package com.zswl.dataservice.dao.openApi;
+
+import com.zswl.dataservice.dao.MongoDao;
+import com.zswl.dataservice.dao.openApi.extend.OpenApiRequestLogDaoExtend;
+import com.zswl.dataservice.dao.openApi.extend.OpenApiSignInfoDaoExtend;
+import com.zswl.dataservice.domain.openApi.OpenApiRequestLog;
+import com.zswl.dataservice.domain.openApi.OpenApiSignInfo;
+
+/**
+ * @author TRX
+ * @date 2024/3/21
+ */
+public interface OpenApiRequestLogDao extends MongoDao<OpenApiRequestLog>, OpenApiRequestLogDaoExtend {
+
+    OpenApiRequestLog findTopById(String id);
+
+}

+ 17 - 0
src/main/java/com/zswl/dataservice/dao/openApi/extend/OpenApiRequestLogDaoExtend.java

@@ -0,0 +1,17 @@
+package com.zswl.dataservice.dao.openApi.extend;
+
+import com.zswl.dataservice.domain.openApi.OpenApiRequestLog;
+import com.zswl.dataservice.domain.openApi.OpenApiSignInfo;
+import com.zswl.dataservice.model.openApi.requestLog.OpenApiRequestLogSearch;
+import com.zswl.dataservice.model.openApi.sign.OpenApiSignInfoSearch;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+
+/**
+ * @Author TRX
+ * @CreateDate: 2023/7/7
+ * @Version: 1.0
+ */
+public interface OpenApiRequestLogDaoExtend {
+    Page<OpenApiRequestLog> page(Pageable pageable, OpenApiRequestLogSearch param);
+}

+ 68 - 0
src/main/java/com/zswl/dataservice/dao/openApi/impl/OpenApiRequestLogDaoImpl.java

@@ -0,0 +1,68 @@
+package com.zswl.dataservice.dao.openApi.impl;
+
+import com.zswl.dataservice.dao.base.BaseImpl;
+import com.zswl.dataservice.dao.openApi.extend.OpenApiRequestLogDaoExtend;
+import com.zswl.dataservice.dao.openApi.extend.OpenApiSignInfoDaoExtend;
+import com.zswl.dataservice.domain.openApi.OpenApiRequestLog;
+import com.zswl.dataservice.domain.openApi.OpenApiSignInfo;
+import com.zswl.dataservice.helper.DBHelper;
+import com.zswl.dataservice.model.openApi.requestLog.OpenApiRequestLogSearch;
+import com.zswl.dataservice.model.openApi.sign.OpenApiSignInfoSearch;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Pattern;
+
+/**
+ * @Author TRX
+ * @CreateDate: 2023/4/12
+ * @Version: 1.0
+ */
+public class OpenApiRequestLogDaoImpl extends BaseImpl implements OpenApiRequestLogDaoExtend {
+
+    @Autowired
+    private DBHelper dbHelper;
+
+    @Override
+    public Page<OpenApiRequestLog> page(Pageable pageable, OpenApiRequestLogSearch param) {
+        Criteria criteria = buildCriteriaAboutTime(param);
+
+        // 模糊搜索
+        List<Criteria> criterias = new ArrayList<>();
+        if (StringUtils.isNotEmpty(param.getAppId())) {
+            Pattern pattern = Pattern.compile("^.*" + param.getAppId() + ".*$");
+            criterias.add(Criteria.where("appId").is(pattern));
+        }
+
+        if (StringUtils.isNotEmpty(param.getIp())) {
+            Pattern pattern = Pattern.compile("^.*" + param.getIp() + ".*$");
+            criterias.add(Criteria.where("ip").is(pattern));
+        }
+        if (StringUtils.isNotEmpty(param.getUa())) {
+            Pattern pattern = Pattern.compile("^.*" + param.getUa() + ".*$");
+            criterias.add(Criteria.where("ua").is(pattern));
+        }
+        if (StringUtils.isNotEmpty(param.getUrl())) {
+            Pattern pattern = Pattern.compile("^.*" + param.getUrl() + ".*$");
+            criterias.add(Criteria.where("url").is(pattern));
+        }
+        if (!CollectionUtils.isEmpty(criterias)) {
+            criteria.andOperator(criterias.toArray(new Criteria[]{}));
+        }
+
+        criteria.and("isDelete").is(Boolean.FALSE);
+        Sort sort = buildSort(param);
+        Query query = Query.query(criteria);
+        query.with(sort);
+        return dbHelper.pages(query, pageable, OpenApiRequestLog.class);
+    }
+
+}

+ 1 - 1
src/main/java/com/zswl/dataservice/dao/openApi/impl/OpenApiSignInfoDaoImpl.java

@@ -43,7 +43,7 @@ public class OpenApiSignInfoDaoImpl extends BaseImpl implements OpenApiSignInfoD
 
         // 模糊搜索
         List<Criteria> criterias = new ArrayList<>();
-        if (StringUtils.isNotEmpty(param.getName())) {
+        if (StringUtils.isNotEmpty(param.getAppId())) {
             Pattern pattern = Pattern.compile("^.*" + param.getAppId() + ".*$");
             criterias.add(Criteria.where("appId").is(pattern));
         }

+ 21 - 0
src/main/java/com/zswl/dataservice/domain/openApi/OpenApiRequestLog.java

@@ -5,8 +5,11 @@ import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
+import org.springframework.data.mongodb.core.index.Indexed;
 import org.springframework.data.mongodb.core.mapping.Document;
 
+import java.util.Date;
+
 /**
  * 访问日志
  *
@@ -34,4 +37,22 @@ public class OpenApiRequestLog extends SuperEntity {
     @Schema(description = "响应参数")
     private Object responseBody;
 
+    @Schema(description = "IP地址")
+    private String ip;
+
+    @Schema(description = "浏览器")
+    private String ua;
+
+    @Schema(description = "请求地址")
+    private String url;
+
+    @Schema(description = "请求描述")
+    private String msg;
+
+    @Schema(description = "使用时间")
+    private Long userTime = 0l;
+
+    @Schema(description = "过期时间")
+    @Indexed(expireAfterSeconds = 0)
+    private Date TTL;
 }

+ 42 - 0
src/main/java/com/zswl/dataservice/model/openApi/requestLog/OpenApiRequestLogModel.java

@@ -0,0 +1,42 @@
+package com.zswl.dataservice.model.openApi.requestLog;
+
+import com.zswl.dataservice.model.baseParam.SuperModel;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @author TRX
+ * @date 2024/9/11
+ */
+@Data
+public class OpenApiRequestLogModel extends SuperModel {
+    @Schema(description = "appId")
+    private String appId;
+
+    @Schema(description = "请求时间")
+    private Long requestTime;
+
+    @Schema(description = "请求时间,可阅读")
+    private String requestTimeStr;
+
+    @Schema(description = "请求参数")
+    private Object requestBody;
+
+    @Schema(description = "响应参数")
+    private Object responseBody;
+
+    @Schema(description = "IP地址")
+    private String ip;
+
+    @Schema(description = "浏览器")
+    private String ua;
+
+    @Schema(description = "请求地址")
+    private String url;
+
+    @Schema(description = "请求描述")
+    private String msg;
+
+    @Schema(description = "使用时间")
+    private Long userTime = 0l;
+}

+ 25 - 0
src/main/java/com/zswl/dataservice/model/openApi/requestLog/OpenApiRequestLogSearch.java

@@ -0,0 +1,25 @@
+package com.zswl.dataservice.model.openApi.requestLog;
+
+import com.zswl.dataservice.model.baseParam.SuperSearchParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+/**
+ * @author TRX
+ * @date 2024/9/11
+ */
+@Data
+public class OpenApiRequestLogSearch extends SuperSearchParam {
+
+    @Schema(description = "appId")
+    private String appId;
+
+    @Schema(description = "IP地址")
+    private String ip;
+
+    @Schema(description = "浏览器")
+    private String ua;
+
+    @Schema(description = "请求地址")
+    private String url;
+}

+ 3 - 0
src/main/java/com/zswl/dataservice/model/openApi/sign/OpenApiSignInfoParam.java

@@ -27,4 +27,7 @@ public class OpenApiSignInfoParam {
 
     @Schema(description = "数据状态,是否可用")
     private AppState appState = AppState.Enable;
+
+    @Schema(description = "说明信息")
+    private String remark;
 }

+ 81 - 0
src/main/java/com/zswl/dataservice/service/openApi/OpenApiRequestLogsService.java

@@ -0,0 +1,81 @@
+package com.zswl.dataservice.service.openApi;
+
+import com.zswl.dataservice.dao.UserDao;
+import com.zswl.dataservice.dao.mqtt.OperationLogsDao;
+import com.zswl.dataservice.dao.openApi.OpenApiRequestLogDao;
+import com.zswl.dataservice.domain.base.SuperEntity;
+import com.zswl.dataservice.domain.mqtt.OperationLogs;
+import com.zswl.dataservice.domain.openApi.OpenApiRequestLog;
+import com.zswl.dataservice.domain.user.User;
+import com.zswl.dataservice.model.openApi.requestLog.OpenApiRequestLogModel;
+import com.zswl.dataservice.model.openApi.requestLog.OpenApiRequestLogSearch;
+import com.zswl.dataservice.model.operLogs.OperationLogsModel;
+import com.zswl.dataservice.model.operLogs.OperationLogsSearchParam;
+import com.zswl.dataservice.service.base.SuperService;
+import com.zswl.dataservice.utils.DateUtils;
+import com.zswl.dataservice.utils.bean.BeanUtils;
+import com.zswl.dataservice.utils.mqtt.type.LogsLevel;
+import com.zswl.dataservice.utils.net.IPUtil;
+import com.zswl.dataservice.utils.page.PageEntityUtil;
+import com.zswl.dataservice.utils.result.ResultContent;
+import jakarta.servlet.http.HttpServletRequest;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.ObjectUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author TRX
+ * @date 2024/5/24
+ */
+@Slf4j
+@Service
+public class OpenApiRequestLogsService extends SuperService {
+
+    @Autowired
+    private HttpServletRequest request;
+
+    @Autowired
+    private OpenApiRequestLogDao openApiRequestLogDao;
+
+    public ResultContent addLogs(String appId, String msg) {
+        OpenApiRequestLog logs = new OpenApiRequestLog();
+        logs.setMsg(msg);
+        logs.setAppId(appId);
+        logs.setRequestTime(System.currentTimeMillis());
+        logs.setRequestTimeStr(DateUtils.paresTime(System.currentTimeMillis(), DateUtils.FORMAT_LONG));
+        try {
+            logs.setUa(request.getHeader("User-Agent"));
+            logs.setIp(IPUtil.getRemoteIp(request));
+            logs.setUrl(request.getRequestURI());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        openApiRequestLogDao.save(logs);
+        return ResultContent.buildSuccess();
+    }
+
+    /**
+     * 日志列表
+     *
+     * @param pageable
+     * @param param
+     * @return
+     */
+    public ResultContent<Page<OpenApiRequestLogModel>> pageLogs(Pageable pageable, OpenApiRequestLogSearch param) {
+        Page<OpenApiRequestLog> page = openApiRequestLogDao.page(pageable, param);
+        return ResultContent.buildSuccess(PageEntityUtil.toPageModel(page, this::toModel));
+    }
+
+    public OpenApiRequestLogModel toModel(OpenApiRequestLog entity) {
+        OpenApiRequestLogModel model = null;
+        if (ObjectUtils.isNotEmpty(entity)) {
+            model = new OpenApiRequestLogModel();
+            BeanUtils.copyProperties(entity, model);
+        }
+        return model;
+    }
+
+}

+ 3 - 3
src/main/java/com/zswl/dataservice/service/openApi/OpenApiSignInfoService.java

@@ -74,16 +74,16 @@ public class OpenApiSignInfoService extends SuperService {
             if (ObjectUtils.isNotEmpty(nameTemp)) {
                 return ResultContent.buildFail(String.format(ResultMessage.NAME_EXIT, param.getName()));
             }
+            param.setId(null);
             openApiSignInfo = new OpenApiSignInfo();
-            initEntity(openApiSignInfo);
             BeanUtils.copyProperties(param, openApiSignInfo);
+            initEntity(openApiSignInfo);
 
             String appId = AppInfoUtil.generateRandomString();
             String appKey = SecurityUtil.passWord(appId);
             openApiSignInfo.setAppId(appId);
             openApiSignInfo.setAppKey(appKey);
-
-            operationLogsService.addLogs(String.format("添加了openAPI数据:%s", appId), LogsLevel.Low);
+            operationLogsService.addLogs(String.format("添加了openAPI认证数据:%s", appId), LogsLevel.Low);
         }
         openApiSignInfoDao.save(openApiSignInfo);
         return ResultContent.buildSuccess();

+ 8 - 0
src/main/java/com/zswl/dataservice/service/user/OperationLogsService.java

@@ -29,6 +29,7 @@ import org.springframework.stereotype.Service;
 @Slf4j
 @Service
 public class OperationLogsService extends SuperService {
+
     @Autowired
     private OperationLogsDao operationLogsDao;
 
@@ -81,6 +82,13 @@ public class OperationLogsService extends SuperService {
             logs.setDataId(entity.getId());
             logs.setBackObj(entity);
         }
+        try {
+            logs.setUa(request.getHeader("User-Agent"));
+            logs.setIp(IPUtil.getRemoteIp(request));
+            logs.setUrl(request.getRequestURI());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
         operationLogsDao.save(logs);
         return ResultContent.buildSuccess();
     }

+ 3 - 2
src/main/java/com/zswl/dataservice/utils/AppInfoUtil.java

@@ -8,10 +8,11 @@ import org.apache.commons.lang3.RandomStringUtils;
  */
 public class AppInfoUtil {
     /**
-     * 随机生成一个16位的字符串
+     * 随机生成一个30位的字符串
+     *
      * @return
      */
     public static String generateRandomString() {
-        return RandomStringUtils.randomAlphabetic(18);
+        return RandomStringUtils.randomAlphabetic(30).toLowerCase();
     }
 }

+ 14 - 0
src/main/java/com/zswl/dataservice/utils/Test.java

@@ -0,0 +1,14 @@
+package com.zswl.dataservice.utils;
+
+import org.apache.commons.lang3.RandomStringUtils;
+
+/**
+ * @author TRX
+ * @date 2024/9/11
+ */
+public class Test {
+    public static void main(String[] args) {
+        String str = RandomStringUtils.randomAlphanumeric(30).toLowerCase();
+        System.out.println(str);
+    }
+}