From c6afc9558beaab61e1c9660decc56c4f30348577 Mon Sep 17 00:00:00 2001
From: quyixiao <2621048238@qq.com>
Date: Sun, 19 Oct 2025 17:53:40 +0800
Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BF=AE=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../heyu/api/data/config/RabbitConfig.java | 9 +-
.../heyu/api/data/dao/vv/VvRequestLogDao.java | 45 +++
.../heyu/api/data/dto/VVRequestLogDTO.java | 63 ++++
.../data/entity/vv/VvRequestLogEntity.java | 276 ++++++++++++++++++
.../impl/vv/VvRequestLogServiceImpl.java | 68 +++++
.../data/service/vv/VvRequestLogService.java | 34 +++
.../heyu/api/data/utils/AnnotationUtils.java | 19 ++
.../com/heyu/api/data/utils/DateUtils.java | 15 +
.../heyu/api/data/utils/ExpressionParse.java | 77 +++++
.../com/heyu/api/data/utils/SqlDateParse.java | 35 +++
.../resources/mapper/vv/VvRequestLogDao.xml | 6 +
.../resources/mapper/vv/VvRequstLogDao.xml | 6 +
.../java/com/test/xxx/MysqlMain_insert.java | 2 +-
.../java/com/test/xxx/MysqlMain_update.java | 2 +-
.../java/com/test/xxx/mysql/FieldBean.java | 6 +-
.../com/test/xxx/mysql/SqlParseUtilsTest.java | 4 +-
.../java/com/heyu/api/aop/ZhenZhenLogAop.java | 115 +++++---
.../VVUrlQueueSimpleRabbitListener.java | 48 +++
.../src/main/resources/bootstrap.yml | 1 +
.../src/test/java/com/api/test/test2.java | 26 ++
20 files changed, 809 insertions(+), 48 deletions(-)
create mode 100644 api-mapper/src/main/java/com/heyu/api/data/dao/vv/VvRequestLogDao.java
create mode 100644 api-mapper/src/main/java/com/heyu/api/data/dto/VVRequestLogDTO.java
create mode 100644 api-mapper/src/main/java/com/heyu/api/data/entity/vv/VvRequestLogEntity.java
create mode 100644 api-mapper/src/main/java/com/heyu/api/data/service/impl/vv/VvRequestLogServiceImpl.java
create mode 100644 api-mapper/src/main/java/com/heyu/api/data/service/vv/VvRequestLogService.java
create mode 100644 api-mapper/src/main/java/com/heyu/api/data/utils/ExpressionParse.java
create mode 100644 api-mapper/src/main/java/com/heyu/api/data/utils/SqlDateParse.java
create mode 100644 api-mapper/src/main/resources/mapper/vv/VvRequestLogDao.xml
create mode 100644 api-mapper/src/main/resources/mapper/vv/VvRequstLogDao.xml
create mode 100644 api-web/api-interface/src/main/java/com/heyu/api/listener/VVUrlQueueSimpleRabbitListener.java
diff --git a/api-mapper/src/main/java/com/heyu/api/data/config/RabbitConfig.java b/api-mapper/src/main/java/com/heyu/api/data/config/RabbitConfig.java
index 1625827..3d0b5e1 100644
--- a/api-mapper/src/main/java/com/heyu/api/data/config/RabbitConfig.java
+++ b/api-mapper/src/main/java/com/heyu/api/data/config/RabbitConfig.java
@@ -10,13 +10,14 @@ import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
/**
* @author wutao
* @description mq配置
* @date 2020-12-25
*/
-// @Configuration
+ @Configuration
@Slf4j
public class RabbitConfig {
@@ -67,6 +68,12 @@ public class RabbitConfig {
}
+ @Bean
+ public Queue urlStatisticQueue(@Value("${eb.config.rabbitQueue.urlStatisticQueue}") String queueName) {
+ return new Queue(queueName);
+ }
+
+
@Bean(name = "accountLogNameQueueSimpleRabbitListenerContainerFactory")
public SimpleRabbitListenerContainerFactory accountLogNameQueueSimpleRabbitListenerContainerFactory() {
SimpleRabbitListenerContainerFactory listenerContainerFactory = new SimpleRabbitListenerContainerFactory();
diff --git a/api-mapper/src/main/java/com/heyu/api/data/dao/vv/VvRequestLogDao.java b/api-mapper/src/main/java/com/heyu/api/data/dao/vv/VvRequestLogDao.java
new file mode 100644
index 0000000..a077e57
--- /dev/null
+++ b/api-mapper/src/main/java/com/heyu/api/data/dao/vv/VvRequestLogDao.java
@@ -0,0 +1,45 @@
+package com.heyu.api.data.dao.vv;
+/**
+*
+* 评论表 服务类
+*
+*
+* @author quyixiao
+* @since 2025-10-19
+*/
+import com.heyu.api.data.entity.vv.VvRequestLogEntity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.lz.mybatis.plugin.annotations.Column;
+import com.lz.mybatis.plugin.annotations.DateFormat;
+import com.lz.mybatis.plugin.annotations.EQ;
+import com.lz.mybatis.plugin.utils.DF_Const;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface VvRequestLogDao extends BaseMapper {
+
+
+ VvRequestLogEntity selectVvRequestLogById(@Param("id")Long id);
+
+
+ Long insertVvRequestLog(VvRequestLogEntity vvRequestLog);
+
+
+ Long insertOrUpdateVvRequestLog(VvRequestLogEntity vvRequestLog);
+
+
+ int updateVvRequestLogById(VvRequestLogEntity vvRequestLog);
+
+
+ int updateCoverVvRequestLogById(VvRequestLogEntity vvRequestLog);
+
+
+ int deleteVvRequestLogById(@Param("id")Long id);
+
+
+
+ List selectVvRequestLogByCreateTime(@Column(VvRequestLogEntity.create_time) @EQ @DateFormat(DF_Const.y_m_d) String createTime);
+}
\ No newline at end of file
diff --git a/api-mapper/src/main/java/com/heyu/api/data/dto/VVRequestLogDTO.java b/api-mapper/src/main/java/com/heyu/api/data/dto/VVRequestLogDTO.java
new file mode 100644
index 0000000..c6aefa0
--- /dev/null
+++ b/api-mapper/src/main/java/com/heyu/api/data/dto/VVRequestLogDTO.java
@@ -0,0 +1,63 @@
+
+package com.heyu.api.data.dto;
+
+
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+@Data
+public class VVRequestLogDTO extends BaseRabbitDTO {
+
+ /***
+ * url
+ */
+ private String url;
+
+ /***
+ * 执行时间
+ */
+ private Long exet;
+
+
+ /***
+ * 请求参数
+ */
+ private String params;
+
+ /**
+ * 买家id
+ */
+ private Long buyerId ;
+ /***
+ * 接口描述
+ */
+ private String description;
+
+ public VVRequestLogDTO() {
+
+ }
+
+ public VVRequestLogDTO(String token,
+ String userName,
+ String traceId,
+ long msgSendTime,
+ String url,
+ Long exet,
+ String params,
+ Long buyerId,
+ String describe
+
+ ) {
+ this.token = token;
+ this.userName = userName;
+ this.url = url;
+ this.traceId = traceId;
+ this.msgSendTime = msgSendTime;
+ this.exet = exet;
+ this.params = params;
+ this.buyerId = buyerId;
+ this.description = describe;
+ }
+
+}
diff --git a/api-mapper/src/main/java/com/heyu/api/data/entity/vv/VvRequestLogEntity.java b/api-mapper/src/main/java/com/heyu/api/data/entity/vv/VvRequestLogEntity.java
new file mode 100644
index 0000000..8e9740d
--- /dev/null
+++ b/api-mapper/src/main/java/com/heyu/api/data/entity/vv/VvRequestLogEntity.java
@@ -0,0 +1,276 @@
+package com.heyu.api.data.entity.vv;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+/**
+*评论表
+* @author quyixiao
+* @since 2025-10-19
+*/
+
+@Data
+@TableName("vv_request_log")
+public class VvRequestLogEntity implements java.io.Serializable {
+private static final long serialVersionUID = 1L;
+
+ public final static String CLASS_NAME ="com.heyu.api.data.entity.vv.VvRequestLogEntity:";
+
+ public final static String all = CLASS_NAME + "*";
+ public final static String id_ = CLASS_NAME + "id"; //
+ public final static String is_delete = CLASS_NAME + "is_delete"; // 是否删除:0 否 1 删除
+ public final static String create_time = CLASS_NAME + "create_time"; // 创建时间
+ public final static String modify_time = CLASS_NAME + "modify_time"; // 修改时间
+ public final static String token_ = CLASS_NAME + "token"; // token
+ public final static String user_name = CLASS_NAME + "user_name"; // 用户名
+ public final static String uri_ = CLASS_NAME + "uri"; // uri
+ public final static String trace_id = CLASS_NAME + "trace_id"; // 日志编号
+ public final static String msg_send_time = CLASS_NAME + "msg_send_time"; // 消息发送时间
+ public final static String exet_ = CLASS_NAME + "exet"; // 时间
+ public final static String params_ = CLASS_NAME + "params"; // 参数
+ public final static String buyer_id = CLASS_NAME + "buyer_id"; // 买家id
+ public final static String description_ = CLASS_NAME + "description"; // 描述
+ //
+ @TableId(value = "id", type = IdType.AUTO)
+ private Long id;
+ //是否删除:0 否 1 删除
+ private Integer isDelete;
+ //创建时间
+ private Date createTime;
+ //修改时间
+ private Date modifyTime;
+ //token
+ private String token;
+ //用户名
+ private String userName;
+ //uri
+ private String uri;
+ //日志编号
+ private String traceId;
+ //消息发送时间
+ private Long msgSendTime;
+ //时间
+ private Long exet;
+ //参数
+ private String params;
+ //买家id
+ private Long buyerId;
+ //描述
+ private String description;
+ /**
+ *
+ * @return
+ */
+ public Long getId() {
+ return id;
+ }
+ /**
+ *
+ * @param id
+ */
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ /**
+ * 是否删除:0 否 1 删除
+ * @return
+ */
+ public Integer getIsDelete() {
+ return isDelete;
+ }
+ /**
+ * 是否删除:0 否 1 删除
+ * @param isDelete
+ */
+ public void setIsDelete(Integer isDelete) {
+ this.isDelete = isDelete;
+ }
+
+ /**
+ * 创建时间
+ * @return
+ */
+ public Date getCreateTime() {
+ return createTime;
+ }
+ /**
+ * 创建时间
+ * @param createTime
+ */
+ public void setCreateTime(Date createTime) {
+ this.createTime = createTime;
+ }
+
+ /**
+ * 修改时间
+ * @return
+ */
+ public Date getModifyTime() {
+ return modifyTime;
+ }
+ /**
+ * 修改时间
+ * @param modifyTime
+ */
+ public void setModifyTime(Date modifyTime) {
+ this.modifyTime = modifyTime;
+ }
+
+ /**
+ * token
+ * @return
+ */
+ public String getToken() {
+ return token;
+ }
+ /**
+ * token
+ * @param token
+ */
+ public void setToken(String token) {
+ this.token = token;
+ }
+
+ /**
+ * 用户名
+ * @return
+ */
+ public String getUserName() {
+ return userName;
+ }
+ /**
+ * 用户名
+ * @param userName
+ */
+ public void setUserName(String userName) {
+ this.userName = userName;
+ }
+
+ /**
+ * uri
+ * @return
+ */
+ public String getUri() {
+ return uri;
+ }
+ /**
+ * uri
+ * @param uri
+ */
+ public void setUri(String uri) {
+ this.uri = uri;
+ }
+
+ /**
+ * 日志编号
+ * @return
+ */
+ public String getTraceId() {
+ return traceId;
+ }
+ /**
+ * 日志编号
+ * @param traceId
+ */
+ public void setTraceId(String traceId) {
+ this.traceId = traceId;
+ }
+
+ /**
+ * 消息发送时间
+ * @return
+ */
+ public Long getMsgSendTime() {
+ return msgSendTime;
+ }
+ /**
+ * 消息发送时间
+ * @param msgSendTime
+ */
+ public void setMsgSendTime(Long msgSendTime) {
+ this.msgSendTime = msgSendTime;
+ }
+
+ /**
+ * 时间
+ * @return
+ */
+ public Long getExet() {
+ return exet;
+ }
+ /**
+ * 时间
+ * @param exet
+ */
+ public void setExet(Long exet) {
+ this.exet = exet;
+ }
+
+ /**
+ * 参数
+ * @return
+ */
+ public String getParams() {
+ return params;
+ }
+ /**
+ * 参数
+ * @param params
+ */
+ public void setParams(String params) {
+ this.params = params;
+ }
+
+ /**
+ * 买家id
+ * @return
+ */
+ public Long getBuyerId() {
+ return buyerId;
+ }
+ /**
+ * 买家id
+ * @param buyerId
+ */
+ public void setBuyerId(Long buyerId) {
+ this.buyerId = buyerId;
+ }
+
+ /**
+ * 描述
+ * @return
+ */
+ public String getDescription() {
+ return description;
+ }
+ /**
+ * 描述
+ * @param description
+ */
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ @Override
+ public String toString() {
+ return "VvRequestLogEntity{" +
+ ",id=" + id +
+ ",isDelete=" + isDelete +
+ ",createTime=" + createTime +
+ ",modifyTime=" + modifyTime +
+ ",token=" + token +
+ ",userName=" + userName +
+ ",uri=" + uri +
+ ",traceId=" + traceId +
+ ",msgSendTime=" + msgSendTime +
+ ",exet=" + exet +
+ ",params=" + params +
+ ",buyerId=" + buyerId +
+ ",description=" + description +
+ "}";
+ }
+}
\ No newline at end of file
diff --git a/api-mapper/src/main/java/com/heyu/api/data/service/impl/vv/VvRequestLogServiceImpl.java b/api-mapper/src/main/java/com/heyu/api/data/service/impl/vv/VvRequestLogServiceImpl.java
new file mode 100644
index 0000000..53f070a
--- /dev/null
+++ b/api-mapper/src/main/java/com/heyu/api/data/service/impl/vv/VvRequestLogServiceImpl.java
@@ -0,0 +1,68 @@
+package com.heyu.api.data.service.impl.vv;
+/**
+*
+* 评论表 服务类
+*
+*
+* @author quyixiao
+* @since 2025-10-19
+*/
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.heyu.api.data.dao.vv.VvRequestLogDao;
+import com.heyu.api.data.entity.vv.VvRequestLogEntity;
+import com.heyu.api.data.service.vv.VvRequestLogService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+@Service
+public class VvRequestLogServiceImpl extends ServiceImpl implements VvRequestLogService {
+
+
+ @Autowired
+ private VvRequestLogDao vvRequestLogDao;
+
+
+
+ @Override
+ public VvRequestLogEntity selectVvRequestLogById(Long id){
+ return vvRequestLogDao.selectVvRequestLogById(id);
+ }
+
+
+
+ @Override
+ public Long insertVvRequestLog(VvRequestLogEntity vvRequestLog){
+ return vvRequestLogDao.insertVvRequestLog(vvRequestLog);
+ }
+
+
+
+ @Override
+ public Long insertOrUpdateVvRequestLog(VvRequestLogEntity vvRequestLog){
+ return vvRequestLogDao.insertOrUpdateVvRequestLog(vvRequestLog);
+ }
+
+
+
+ @Override
+ public int updateVvRequestLogById(VvRequestLogEntity vvRequestLog){
+ return vvRequestLogDao.updateVvRequestLogById(vvRequestLog);
+ }
+
+
+
+ @Override
+ public int updateCoverVvRequestLogById(VvRequestLogEntity vvRequestLog){
+ return vvRequestLogDao.updateCoverVvRequestLogById(vvRequestLog);
+ }
+
+
+
+ @Override
+ public int deleteVvRequestLogById(Long id){
+ return vvRequestLogDao.deleteVvRequestLogById(id);
+ }
+
+
+
+}
diff --git a/api-mapper/src/main/java/com/heyu/api/data/service/vv/VvRequestLogService.java b/api-mapper/src/main/java/com/heyu/api/data/service/vv/VvRequestLogService.java
new file mode 100644
index 0000000..82c2878
--- /dev/null
+++ b/api-mapper/src/main/java/com/heyu/api/data/service/vv/VvRequestLogService.java
@@ -0,0 +1,34 @@
+package com.heyu.api.data.service.vv;
+/**
+*
+* 评论表 服务类
+*
+*
+* @author quyixiao
+* @since 2025-10-19
+*/
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.heyu.api.data.entity.vv.VvRequestLogEntity;
+public interface VvRequestLogService extends IService {
+
+
+
+ VvRequestLogEntity selectVvRequestLogById(Long id);
+
+
+ Long insertVvRequestLog(VvRequestLogEntity vvRequestLog);
+
+
+ Long insertOrUpdateVvRequestLog(VvRequestLogEntity vvRequestLog);
+
+
+ int updateVvRequestLogById(VvRequestLogEntity vvRequestLog);
+
+
+ int updateCoverVvRequestLogById(VvRequestLogEntity vvRequestLog);
+
+
+ int deleteVvRequestLogById(Long id);
+
+
+}
\ No newline at end of file
diff --git a/api-mapper/src/main/java/com/heyu/api/data/utils/AnnotationUtils.java b/api-mapper/src/main/java/com/heyu/api/data/utils/AnnotationUtils.java
index fa4ddb1..4663dea 100644
--- a/api-mapper/src/main/java/com/heyu/api/data/utils/AnnotationUtils.java
+++ b/api-mapper/src/main/java/com/heyu/api/data/utils/AnnotationUtils.java
@@ -71,6 +71,25 @@ public class AnnotationUtils {
}
+ public static T getAnnotationValueByMethod(Method method, String annotationName, String key) {
+ Annotation annotation[] = method.getAnnotations();
+ if (annotation != null && annotation.length > 0) {
+ for (Annotation annotation1 : annotation) {
+
+ if (annotationName.equals(getAnnotationName(annotation1))) {
+ return getAnnotationValue(annotation1, key);
+ }
+
+
+ }
+ }
+
+
+ return null;
+ }
+
+
+
public static T getAnnotationValue(Annotation annotation,String key) {
try {
diff --git a/api-mapper/src/main/java/com/heyu/api/data/utils/DateUtils.java b/api-mapper/src/main/java/com/heyu/api/data/utils/DateUtils.java
index 135f79c..0717367 100644
--- a/api-mapper/src/main/java/com/heyu/api/data/utils/DateUtils.java
+++ b/api-mapper/src/main/java/com/heyu/api/data/utils/DateUtils.java
@@ -202,6 +202,21 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
return new Time(localTime.getHour(), localTime.getMinute(), localTime.getSecond());
}
+
+ /**
+ * 日期型字符串转化为日期 格式
+ */
+ public static Date myParseDate(Object str) {
+ if (str == null) {
+ return null;
+ }
+ try {
+ return parseDate(str.toString(), parsePatterns);
+ } catch (ParseException e) {
+ return null;
+ }
+ }
+
/**
* Get start of date.
*
diff --git a/api-mapper/src/main/java/com/heyu/api/data/utils/ExpressionParse.java b/api-mapper/src/main/java/com/heyu/api/data/utils/ExpressionParse.java
new file mode 100644
index 0000000..10d7fb4
--- /dev/null
+++ b/api-mapper/src/main/java/com/heyu/api/data/utils/ExpressionParse.java
@@ -0,0 +1,77 @@
+package com.heyu.api.data.utils;
+
+import lombok.extern.slf4j.Slf4j;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
+import java.util.List;
+
+@Slf4j
+public class ExpressionParse {
+
+ public static T getValue(String expression) {
+ String className = "";
+ String methodName = "";
+ List paramsList = new ArrayList<>();
+ Object result = null;
+ try {
+ int index = expression.lastIndexOf(".");
+ className = expression.substring(0, index);
+ System.out.println();
+ String methodNameParams = expression.substring(index + 1);
+
+ String methodNameParamArrays[] = methodNameParams.split("\\(");
+ methodName = methodNameParamArrays[0];
+ String params = methodNameParamArrays[1];
+ System.out.println();
+ String realParams[] = params.split("\\)");
+
+ if (realParams.length > 0) {
+ String realParam = realParams[0];
+ String[] ps = realParam.split(",");
+ for (String p : ps) {
+ paramsList.add(p);
+ }
+ }
+ Class clazz = Class.forName(className);
+ Method methods[] = clazz.getDeclaredMethods();
+
+ for (Method method : methods) {
+ if (method.getName().equals(methodName)
+ && method.getParameterTypes().length == paramsList.size()) {
+ method.setAccessible(true);
+ Object pas[] = new Object[paramsList.size()];
+ if (method.getParameterTypes().length > 0) {
+ for (int i = 0; i < paramsList.size(); i++) {
+ String paramValue = paramsList.get(i);
+ if (paramValue.startsWith("'") && paramValue.endsWith("'")) {
+ paramValue = paramValue.substring(1, paramValue.length() - 1);
+ }
+ pas[i] = BeanUtil.parseBasicTypeWrapper(method.getParameterTypes()[i], paramValue);
+ }
+ }
+ if (Modifier.isStatic(method.getModifiers())) {
+ result = method.invoke(null, pas);
+ } else {
+ result = method.invoke(clazz.newInstance(), pas);
+ }
+ return (T) BeanUtil.parseBasicTypeWrapper(method.getReturnType(), result);
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ log.info("ExpressionParse.getValue className:{},methodName:{},paramsList:{},result:{},expression:{}",
+ className, methodName, paramsList, result, expression);
+ }
+ return null;
+
+ }
+
+ public static void main(String[] args) throws Exception {
+ String a = "com.heyu.api.data.utils.SqlDateParse.addDaysReturnTimestamp('yyyy-MM-dd 23:59:59',-1)";
+ Long b = getValue(a);
+ System.out.println(b.toString());
+ }
+}
diff --git a/api-mapper/src/main/java/com/heyu/api/data/utils/SqlDateParse.java b/api-mapper/src/main/java/com/heyu/api/data/utils/SqlDateParse.java
new file mode 100644
index 0000000..222a06a
--- /dev/null
+++ b/api-mapper/src/main/java/com/heyu/api/data/utils/SqlDateParse.java
@@ -0,0 +1,35 @@
+package com.heyu.api.data.utils;
+
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public class SqlDateParse {
+
+
+ public static String addDays(String formate, Integer days) {
+ Date date = DateUtils.addDays(new Date(), days);
+ SimpleDateFormat sdf = new SimpleDateFormat(formate);
+ return sdf.format(date);
+ }
+
+
+ public static Long addDaysReturnTimestamp(Integer days) {
+ Date date = DateUtils.addDays(new Date(), days);
+ return date.getTime();
+ }
+
+
+ public static Long addDaysReturnTimestamp(String formate, Integer days) {
+ try {
+ Date date = DateUtils.addDays(new Date(), days);
+ SimpleDateFormat sdf = new SimpleDateFormat(formate);
+ String dateStr = sdf.format(date);
+ Date date1 = DateUtils.myParseDate(dateStr);
+ return date1.getTime();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return System.currentTimeMillis();
+ }
+}
diff --git a/api-mapper/src/main/resources/mapper/vv/VvRequestLogDao.xml b/api-mapper/src/main/resources/mapper/vv/VvRequestLogDao.xml
new file mode 100644
index 0000000..27ddebe
--- /dev/null
+++ b/api-mapper/src/main/resources/mapper/vv/VvRequestLogDao.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/api-mapper/src/main/resources/mapper/vv/VvRequstLogDao.xml b/api-mapper/src/main/resources/mapper/vv/VvRequstLogDao.xml
new file mode 100644
index 0000000..3a88d66
--- /dev/null
+++ b/api-mapper/src/main/resources/mapper/vv/VvRequstLogDao.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/api-mapper/src/test/java/com/test/xxx/MysqlMain_insert.java b/api-mapper/src/test/java/com/test/xxx/MysqlMain_insert.java
index 19c4805..81e1371 100644
--- a/api-mapper/src/test/java/com/test/xxx/MysqlMain_insert.java
+++ b/api-mapper/src/test/java/com/test/xxx/MysqlMain_insert.java
@@ -95,7 +95,7 @@ public class MysqlMain_insert {
List list = new ArrayList();
- list.add(new TablesBean("vv_comment"));
+ list.add(new TablesBean("vv_request_log"));
diff --git a/api-mapper/src/test/java/com/test/xxx/MysqlMain_update.java b/api-mapper/src/test/java/com/test/xxx/MysqlMain_update.java
index 3eac3da..4220e2c 100644
--- a/api-mapper/src/test/java/com/test/xxx/MysqlMain_update.java
+++ b/api-mapper/src/test/java/com/test/xxx/MysqlMain_update.java
@@ -49,7 +49,7 @@ public class MysqlMain_update {
List list = new ArrayList();
- String a = "vv_package";
+ String a = "vv_request_log";
for (String s : a.split(",")) {
list.add(new TablesBean(s));
}
diff --git a/api-mapper/src/test/java/com/test/xxx/mysql/FieldBean.java b/api-mapper/src/test/java/com/test/xxx/mysql/FieldBean.java
index 574b5cd..bb85a5f 100644
--- a/api-mapper/src/test/java/com/test/xxx/mysql/FieldBean.java
+++ b/api-mapper/src/test/java/com/test/xxx/mysql/FieldBean.java
@@ -22,11 +22,7 @@ public class FieldBean {
this.comment = comment;
this.javaCode = MysqlUtil.field2JavaCode(this.field);
this.javaTypeFull = MysqlUtil.type2JavaTypeFull(this.type);
- if (field.endsWith("_id")) {
- this.javaType = "Long";
- } else {
- this.javaType = MysqlUtil.type2JavaType(this.type);
- }
+ this.javaType = MysqlUtil.type2JavaType(this.type);
}
public String getJavaCodeForGet() {
diff --git a/api-mapper/src/test/java/com/test/xxx/mysql/SqlParseUtilsTest.java b/api-mapper/src/test/java/com/test/xxx/mysql/SqlParseUtilsTest.java
index ef18d0c..0bdd2fc 100644
--- a/api-mapper/src/test/java/com/test/xxx/mysql/SqlParseUtilsTest.java
+++ b/api-mapper/src/test/java/com/test/xxx/mysql/SqlParseUtilsTest.java
@@ -1,6 +1,6 @@
package com.test.xxx.mysql;
-import com.heyu.api.data.dao.vv.VvTradeOrderLineDao;
+import com.heyu.api.data.dao.vv.VvRequestLogDao;
import com.lz.mybatis.plugin.utils.TestParseUtils;
import com.lz.mybatis.plugin.utils.t.Tuple2;
import org.junit.Test;
@@ -11,7 +11,7 @@ SqlParseUtilsTest {
@Test
public void test1() {
- Tuple2 tuple = TestParseUtils.testSql(VvTradeOrderLineDao::selectByAppCondition).getData();
+ Tuple2 tuple = TestParseUtils.testSql(VvRequestLogDao::selectVvRequestLogByCreateTime).getData();
System.out.println(tuple.getSecond());
diff --git a/api-web/api-interface/src/main/java/com/heyu/api/aop/ZhenZhenLogAop.java b/api-web/api-interface/src/main/java/com/heyu/api/aop/ZhenZhenLogAop.java
index f1e8faa..10b1193 100644
--- a/api-web/api-interface/src/main/java/com/heyu/api/aop/ZhenZhenLogAop.java
+++ b/api-web/api-interface/src/main/java/com/heyu/api/aop/ZhenZhenLogAop.java
@@ -4,8 +4,7 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.heyu.api.common.LogAspect;
import com.heyu.api.data.dto.BuyerDTO;
-import com.heyu.api.data.entity.vv.VvReverseOrderEntity;
-import com.heyu.api.data.service.bussiness.RedisSettingService;
+import com.heyu.api.data.dto.VVRequestLogDTO;
import com.heyu.api.data.utils.*;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
@@ -14,7 +13,9 @@ 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.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
@@ -45,8 +46,13 @@ public class ZhenZhenLogAop {
private RedisUtils redisUtils;
+ @Value("${eb.config.rabbitQueue.urlStatisticQueue}")
+ private String urlStatisticQueue;
+
+
@Autowired
- private RedisSettingService redisSettingService;
+ private RabbitTemplate rabbitTemplate;
+
@Pointcut(value = "(" + " @within(org.springframework.web.bind.annotation.RestController) || " + " @within(org.springframework.stereotype.Controller)" + ")")
public void pointcut() {
@@ -67,15 +73,19 @@ public class ZhenZhenLogAop {
if (StringUtils.isBlank(traceId)) {
traceId = OrderUtil.getUserPoolOrder("on");
}
+ Long buyerId = null;
+ Long startTime = System.currentTimeMillis();
LogAspect.threadLocalNo.set(traceId);
LogAspect.threadLocalTime.set(System.currentTimeMillis());
HttpServletRequest request = attributes.getRequest();
uri = attributes.getRequest().getRequestURI();
+ String describe = null;
// 如果不是小程序的url ,则直接过滤掉
if (!uri.startsWith("/mm/") && !uri.startsWith("/app/")) {
return point.proceed();
}
+ String token = "";
try {
args = recordRequestLog(point.getArgs(), uri);
Signature sig = point.getSignature();
@@ -83,21 +93,23 @@ public class ZhenZhenLogAop {
if (sig instanceof MethodSignature) {
methodName = ((MethodSignature) sig).getMethod().getName();
}
+
+ describe = AnnotationUtils.getAnnotationValueByMethod(method, "Describe", "value");
+
+
Class clazz = point.getTarget().getClass();
className = clazz.getName();
- String token = attributes.getRequest().getHeader("token");
-
+ token = attributes.getRequest().getHeader("token");
if (uri.startsWith("/app/")) {
- Object [] argArrs= point.getArgs();
+ Object[] argArrs = point.getArgs();
if (argArrs != null && argArrs.length > 0) {
/***
*
*/
- Long buyerId = null;
- if(StringUtils.isNotBlank(token)){
+ if (StringUtils.isNotBlank(token)) {
Object tokenValue = redisUtils.get(token);
- if(tokenValue !=null){
+ if (tokenValue != null) {
String tokenStr = tokenValue.toString();
BuyerDTO buyerDTO = JSONObject.parseObject(tokenStr, BuyerDTO.class);
buyerId = buyerDTO.getBuyerId();
@@ -105,9 +117,25 @@ public class ZhenZhenLogAop {
}
for (Object argArr : argArrs) {
argArr.getClass().getDeclaredMethods();
+
List methods = new ArrayList<>();
- getClassDeclaredMethods(argArr.getClass(),methods);
+ getClassDeclaredMethods(argArr.getClass(), methods);
+
+ for (Method m : methods) {
+ if (m.getName().startsWith("get")) {
+ String mName = m.getName().substring(3);
+ if ("buyerId".equalsIgnoreCase(mName)) {
+ m.setAccessible(true);
+
+ Object getBuyerId = m.invoke(argArr);
+ if (buyerId == null && getBuyerId != null) {
+ buyerId = NumberUtil.objToLongDefault(getBuyerId, -1L);
+ }
+ }
+ }
+ }
+
for (Method m : methods) {
if (m.getName().startsWith("set")) {
@@ -121,6 +149,8 @@ public class ZhenZhenLogAop {
}
}
}
+
+
} else if (uri.startsWith("/mm/")) {
// 登录不拦截
if (!"/mm/admin/login".equals(uri)) {
@@ -132,16 +162,16 @@ public class ZhenZhenLogAop {
}
result = point.proceed();
- if(result instanceof R){
+ if (result instanceof R) {
R r = (R) result;
- Object object = r.getData();
+ Object object = r.getData();
convertImage(object);
}
} catch (Exception e) {
log.error("LogAop set error " + sb.toString(), e);
} finally {
- printLog(result, args, ip, className, methodName, uri);
+ printLog(result, args, ip, className, methodName, uri, token, traceId, startTime, buyerId, describe);
LogAspect.threadLocalNo.remove();
LogAspect.threadLocalTime.remove();
}
@@ -149,22 +179,22 @@ public class ZhenZhenLogAop {
}
- public static void convertImage(Object object){
- if(object == null){
- return ;
+ public static void convertImage(Object object) {
+ if (object == null) {
+ return;
}
- if(object instanceof List){
+ if (object instanceof List) {
List list = (List) object;
for (Object o : list) {
convertImage(o);
}
- }else if (object instanceof Map) {
+ } else if (object instanceof Map) {
Map map = (Map) object;
for (Object key : map.keySet()) {
Object value = map.get(key);
convertImage(value);
}
- }else if (object.getClass().isArray()) {
+ } else if (object.getClass().isArray()) {
Object[] array = (Object[]) object;
for (Object o : array) {
convertImage(o);
@@ -187,8 +217,8 @@ public class ZhenZhenLogAop {
// 如果是基本数据类型
if (SanUtils.isBasicDataTypes(method.getReturnType())) {
if (method.getReturnType() == String.class) {
- String str = (String)image;
- if (str!=null
+ String str = (String) image;
+ if (str != null
&& str.startsWith("http://heyuimage.ihzhy.com")) {
String setMethodName = "set" + method.getName().substring(3);
Method setMethod = methodMap.get(setMethodName);
@@ -207,21 +237,11 @@ public class ZhenZhenLogAop {
}
}
-
- public static void main(String[] args) {
-
- VvReverseOrderEntity vvReverseOrderEntity = new VvReverseOrderEntity();
- vvReverseOrderEntity.setStatus("http://heyuimage.ihzhy.com/48a458c49f5e0b9c74eeb163b577a49d.mp4");
-
- convertImage(vvReverseOrderEntity);
- System.out.println(JSON.toJSONString(vvReverseOrderEntity));
- }
-
- public static void getClassDeclaredMethods( Class entityType, List methods){
- if(entityType == Object.class){
- return ;
+ public static void getClassDeclaredMethods(Class entityType, List methods) {
+ if (entityType == Object.class) {
+ return;
}
- Method method [] = entityType.getDeclaredMethods();
+ Method method[] = entityType.getDeclaredMethods();
for (Method method1 : method) {
methods.add(method1);
}
@@ -229,17 +249,36 @@ public class ZhenZhenLogAop {
}
-
-
public void printLog(Object result, String args, String ip, String className, String methodName,
- String preUri) {
+ String preUri, String token, String traceId, Long startTime, Long buyerId,
+ String describe
+ ) {
StringBuilder sb = new StringBuilder();
+
sb.append("ZhenZhenLogAop args:").append(args).append(BLANK_SPACE)
.append("ip:").append(ip).append(BLANK_SPACE)
.append("class:").append(className).append("#").append(methodName).append(BLANK_SPACE)
.append("uri:").append(preUri).append(BLANK_SPACE)
.append("result:").append(JSON.toJSONString(result));
log.info(sb.toString());
+
+
+ if (preUri.startsWith("/app/")) {
+ rabbitTemplate.convertAndSend(urlStatisticQueue,
+ JSON.toJSONString(new VVRequestLogDTO(
+ token, // token
+ null,
+ traceId,
+ System.currentTimeMillis(), // 当前请求的接口
+ preUri, //日志编号
+ System.currentTimeMillis() - startTime,
+ args,
+ buyerId,
+ describe
+ )
+ ));
+
+ }
}
private String recordRequestLog(Object[] argArrs, String uri) {
diff --git a/api-web/api-interface/src/main/java/com/heyu/api/listener/VVUrlQueueSimpleRabbitListener.java b/api-web/api-interface/src/main/java/com/heyu/api/listener/VVUrlQueueSimpleRabbitListener.java
new file mode 100644
index 0000000..d3f53e4
--- /dev/null
+++ b/api-web/api-interface/src/main/java/com/heyu/api/listener/VVUrlQueueSimpleRabbitListener.java
@@ -0,0 +1,48 @@
+package com.heyu.api.listener;
+
+import com.alibaba.fastjson.JSONObject;
+import com.heyu.api.data.dao.vv.VvRequestLogDao;
+import com.heyu.api.data.entity.vv.VvRequestLogEntity;
+import com.rabbitmq.client.Channel;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.rabbit.annotation.RabbitHandler;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.amqp.support.AmqpHeaders;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.messaging.handler.annotation.Header;
+import org.springframework.messaging.handler.annotation.Payload;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+
+@Component
+@Slf4j
+public class VVUrlQueueSimpleRabbitListener {
+
+ @Value("${eb.config.rabbitQueue.urlStatisticQueue}")
+ private String urlStatisticQueue;
+
+
+ @Autowired
+ private VvRequestLogDao vvRequestLogDao;
+
+
+ @RabbitHandler
+ @RabbitListener(queues = "#{urlStatisticQueue.name}", containerFactory = "accountAmountQueueSimpleRabbitListenerContainerFactory")
+ public void consumeMessage(@Payload String message, @Header(AmqpHeaders.DELIVERY_TAG) long delivertTag, Channel channel) {
+ try {
+ VvRequestLogEntity vvRequestLogEntity = JSONObject.parseObject(message, VvRequestLogEntity.class);
+ vvRequestLogDao.insert(vvRequestLogEntity);
+ } catch (Exception e) {
+ log.error("urlStatisticQueue handle", e);
+ } finally {
+ try {
+ log.info("urlStatisticQueue消息{},消息确认完成", message);
+ channel.basicAck(delivertTag, true);
+ } catch (IOException e) {
+ log.error("urlStatisticQueue消息确认异常", e);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/api-web/api-interface/src/main/resources/bootstrap.yml b/api-web/api-interface/src/main/resources/bootstrap.yml
index af60305..05d6049 100644
--- a/api-web/api-interface/src/main/resources/bootstrap.yml
+++ b/api-web/api-interface/src/main/resources/bootstrap.yml
@@ -57,6 +57,7 @@ eb:
accountAmountQueue: ACCOUNT_AMOUNT_QUEUE_NAME
accountLogName: ACCOUNT_LOG_NAME
postCodeData: post_code_data
+ urlStatisticQueue: URL_STATISTIC_QUEUE
tencent:
diff --git a/api-web/api-interface/src/test/java/com/api/test/test2.java b/api-web/api-interface/src/test/java/com/api/test/test2.java
index 3ec52a4..c61c25c 100644
--- a/api-web/api-interface/src/test/java/com/api/test/test2.java
+++ b/api-web/api-interface/src/test/java/com/api/test/test2.java
@@ -2,12 +2,15 @@ package com.api.test;
import com.alibaba.fastjson.JSON;
import com.heyu.api.data.entity.vv.VvResourceEntity;
+import org.apache.commons.lang3.text.StrSubstitutor;
import org.junit.Test;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Arrays;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -26,6 +29,29 @@ public class test2 {
}
+ @Test
+ public void testxx(){
+
+ Map valuesMap = new HashMap();
+ valuesMap.put("yesterDay", "2025-10-18");
+ String templateString = "\n" +
+ "select x,name,y from (\n" +
+ "select \n" +
+ "date_format(create_time, '%Y-%m-%d') as x ,description as name,count(*) as y \n" +
+ "from vv_request_log where DATE_FORMAT(create_time, '%Y-%m-%d') = DATE_FORMAT('${yesterDay}', '%Y-%m-%d') group by description\n" +
+ ") as all_data order by y desc limit 100 \n" +
+ "\n" +
+ "\n" +
+ "\n" +
+ "\n";
+
+ StrSubstitutor sub = new StrSubstitutor(valuesMap);
+ String resolvedString = sub.replace(templateString);
+
+
+ System.out.println(resolvedString);
+ }
+
@Test
public void test1() throws Exception{
VvResourceEntity vvResourceEntity = new VvResourceEntity();