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();