From 90663502f2520e8cfa7f6d8a887e46d2cf61be2f Mon Sep 17 00:00:00 2001
From: yanderong <307678080@qq.com>
Date: 星期五, 03 七月 2026 22:07:57 +0800
Subject: [PATCH] feat: 余额变更增加记录和查询
---
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/config/web/MybatisConfig.java | 21 +++++++
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TravelCardServiceImpl.java | 2
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/config/datasource/MultiDataSourceConfig.java | 6 --
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserInfoMapper.java | 3
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TravelCard.xml | 5 -
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserInfoMapper.xml | 4 +
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/config/datasource/SingleDataSourceConfig.java | 6 --
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/core/intercept/BalanceUpdateInterceptor.java | 81 +++++++++++++++++++-------
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TravelCardMapper.java | 3 -
9 files changed, 86 insertions(+), 45 deletions(-)
diff --git a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/config/datasource/MultiDataSourceConfig.java b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/config/datasource/MultiDataSourceConfig.java
index 953a03a..66d442f 100644
--- a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/config/datasource/MultiDataSourceConfig.java
+++ b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/config/datasource/MultiDataSourceConfig.java
@@ -6,10 +6,8 @@
import com.stylefeng.guns.core.config.properties.DruidProperties;
import com.stylefeng.guns.core.config.properties.MutiDataSourceProperties;
import com.stylefeng.guns.core.datascope.DataScopeInterceptor;
-import com.stylefeng.guns.core.intercept.BalanceUpdateInterceptor;
import com.stylefeng.guns.core.mutidatasource.DynamicDataSource;
import com.stylefeng.guns.core.mutidatasource.aop.MultiSourceExAop;
-import org.apache.ibatis.plugin.Interceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.ConfigurationProperties;
@@ -125,8 +123,4 @@
return new DataSourceTransactionManager(mutiDataSource);
}
- @Bean
- public Interceptor balanceUpdateInterceptor() {
- return new BalanceUpdateInterceptor();
- }
}
diff --git a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/config/datasource/SingleDataSourceConfig.java b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/config/datasource/SingleDataSourceConfig.java
index b3f510b..6496133 100644
--- a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/config/datasource/SingleDataSourceConfig.java
+++ b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/config/datasource/SingleDataSourceConfig.java
@@ -5,8 +5,6 @@
import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
import com.stylefeng.guns.core.config.properties.DruidProperties;
import com.stylefeng.guns.core.datascope.DataScopeInterceptor;
-import com.stylefeng.guns.core.intercept.BalanceUpdateInterceptor;
-import org.apache.ibatis.plugin.Interceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
@@ -59,9 +57,5 @@
return new OptimisticLockerInterceptor();
}
- @Bean
- public Interceptor balanceUpdateInterceptor() {
- return new BalanceUpdateInterceptor();
- }
}
diff --git a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/config/web/MybatisConfig.java b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/config/web/MybatisConfig.java
new file mode 100644
index 0000000..7849d33
--- /dev/null
+++ b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/config/web/MybatisConfig.java
@@ -0,0 +1,21 @@
+package com.stylefeng.guns.config.web;
+
+import com.stylefeng.guns.core.intercept.BalanceUpdateInterceptor;
+import org.apache.ibatis.plugin.Interceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+
+/**
+ * @author Lux
+ * @version 1.0.0
+ * @since 2026/7/3 14:33
+ */
+@Configuration
+public class MybatisConfig {
+
+ @Bean
+ public Interceptor balanceUpdateInterceptor() {
+ return new BalanceUpdateInterceptor();
+ }
+}
diff --git a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/core/intercept/BalanceUpdateInterceptor.java b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/core/intercept/BalanceUpdateInterceptor.java
index 1aafcfa..9c135bc 100644
--- a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/core/intercept/BalanceUpdateInterceptor.java
+++ b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/core/intercept/BalanceUpdateInterceptor.java
@@ -1,19 +1,18 @@
package com.stylefeng.guns.core.intercept;
-import com.stylefeng.guns.modular.system.dao.TravelCardMapper;
import com.stylefeng.guns.modular.system.dao.UserInfoMapper;
import com.stylefeng.guns.modular.system.model.UserInfo;
import com.stylefeng.guns.modular.system.model.vo.BalanceModifyRecordVo;
-import org.apache.ibatis.javassist.bytecode.analysis.Executor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.SqlCommandType;
-import org.apache.ibatis.plugin.Interceptor;
-import org.apache.ibatis.plugin.Intercepts;
-import org.apache.ibatis.plugin.Invocation;
-import org.apache.ibatis.plugin.Signature;
+import org.apache.ibatis.plugin.*;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
+import org.springframework.util.ReflectionUtils;
import java.lang.reflect.Field;
import java.util.Map;
@@ -26,15 +25,17 @@
* @version 1.0.0
* @since 2026/7/3 12:03
*/
+@Slf4j
@Component
@Intercepts({@Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class})})
public class BalanceUpdateInterceptor implements Interceptor {
@Autowired
- private UserInfoMapper userInfoMapper;
+ private ApplicationContext context;
- @Autowired
- private TravelCardMapper travelCardMapper;
+ private UserInfoMapper getMapper() {
+ return context.getBean(UserInfoMapper.class);
+ }
@Override
public Object intercept(Invocation invocation) throws Throwable {
@@ -59,22 +60,22 @@
// 关键:先执行前查旧值(需要拿 userId)
Long userId = extractUserId(param);
// 查询旧的用户
- UserInfo oldUser = userInfoMapper.selectById(userId);
+ UserInfo oldUser = getMapper().selectById(userId);
// 执行更新
Object result = invocation.proceed();
// 查新的用户
- UserInfo newUser = userInfoMapper.selectById(userId);
+ UserInfo newUser = getMapper().selectById(userId);
// 新增余额的变更记录(所有余额的变更记录都需要存)
if(Objects.nonNull(oldUser) && Objects.nonNull(newUser)) {
- travelCardMapper.insertBalanceModifyRecord(BalanceModifyRecordVo.convert(oldUser, newUser));
+ getMapper().insertBalanceModifyRecord(BalanceModifyRecordVo.convert(oldUser, newUser));
}
return result;
}
@Override
public Object plugin(Object target) {
- return null;
+ return Plugin.wrap(target, this);
}
@Override
@@ -86,19 +87,53 @@
* 获取用户id
*/
private Long extractUserId(Object param) {
- // 兼容 Map / entity / wrapper
- if (param instanceof Map) {
- Object id = ((Map<?, ?>) param).get("id");
- return id == null ? null : Long.valueOf(id.toString());
- }
- try {
- Field f = param.getClass().getDeclaredField("id");
- f.setAccessible(true);
- return (Long) f.get(param);
- } catch (Exception e) {
+ if (param == null) {
return null;
}
+
+ // MyBatis ParamMap
+ if (param instanceof Map) {
+
+ Map<?, ?> map = (Map<?, ?>) param;
+
+ // 第一种:直接传id
+ try{
+ Object id = map.get("id");
+ if (id != null) {
+ return Long.valueOf(id.toString());
+ }
+ }
+ catch (Exception e){
+ log.error("sql中没有id");
+ }
+
+
+ // 第二种:MyBatis-Plus update(entity, wrapper)
+ Object entity = map.get("param1");
+ if (entity == null) {
+ entity = map.get("et");
+ }
+
+ if (entity != null) {
+ return extractId(entity);
+ }
+ }
+
+ // 直接就是实体
+ return extractId(param);
+ }
+
+ private Long extractId(Object obj) {
+ Field field = ReflectionUtils.findField(obj.getClass(), "id");
+ if (field == null) {
+ return null;
+ }
+
+ ReflectionUtils.makeAccessible(field);
+ Object value = ReflectionUtils.getField(field, obj);
+
+ return value == null ? null : Long.valueOf(value.toString());
}
}
diff --git a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TravelCardMapper.java b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TravelCardMapper.java
index 1eb34d0..35aeef6 100644
--- a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TravelCardMapper.java
+++ b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/TravelCardMapper.java
@@ -13,9 +13,6 @@
TravelCard getTravelCardByCardNo(@Param("cardNo") String cardNo);
- void insertBalanceModifyRecord(@Param("recordVo") BalanceModifyRecordVo recordVo);
-
-
List<BalanceModifyRecordVo> getBalanceModifyRecord(@Param("userId") Integer userId,
@Param("type") Integer type,
@Param("startDate") String startDate,
diff --git a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserInfoMapper.java b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserInfoMapper.java
index 076e8b6..9dd6254 100644
--- a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserInfoMapper.java
+++ b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/UserInfoMapper.java
@@ -2,6 +2,7 @@
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.stylefeng.guns.modular.system.model.UserInfo;
+import com.stylefeng.guns.modular.system.model.vo.BalanceModifyRecordVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@@ -58,6 +59,6 @@
Integer getDiscount();
-
+ void insertBalanceModifyRecord(@Param("recordVo") BalanceModifyRecordVo recordVo);
}
diff --git a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TravelCard.xml b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TravelCard.xml
index 1c22a2f..95aa2eb 100644
--- a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TravelCard.xml
+++ b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/TravelCard.xml
@@ -6,11 +6,6 @@
select * from t_travel_card where cardNo = #{cardNo}
</select>
- <select id="insertBalanceModifyRecord">
- insert into t_balance_modify_record (recordID, userId, userName, phone, money, type, createTime)
- values (#{recordVo.recordID}, #{recordVo.userId}, #{recordVo.userName}, #{recordVo.phone}, #{recordVo.money}, #{recordVo.type}, #{recordVo.createTime})
- </select>
-
<select id="getBalanceModifyRecord" resultType="com.stylefeng.guns.modular.system.model.vo.BalanceModifyRecordVo">
select * from t_balance_modify_record
where userId = #{userId}
diff --git a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserInfoMapper.xml b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserInfoMapper.xml
index 748a4b6..126bf2b 100644
--- a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserInfoMapper.xml
+++ b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/dao/mapping/UserInfoMapper.xml
@@ -199,4 +199,8 @@
select id from t_user_activity where now() between startTime and endTime and status =3 order by id limit 1
</select>
+ <select id="insertBalanceModifyRecord">
+ insert into t_balance_modify_record (recordID, userId, userName, phone, money, type, createTime)
+ values (#{recordVo.recordID}, #{recordVo.userId}, #{recordVo.userName}, #{recordVo.phone}, #{recordVo.money}, #{recordVo.type}, #{recordVo.createTime})
+ </select>
</mapper>
\ No newline at end of file
diff --git a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TravelCardServiceImpl.java b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TravelCardServiceImpl.java
index e36c2ae..a867e65 100644
--- a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TravelCardServiceImpl.java
+++ b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TravelCardServiceImpl.java
@@ -62,7 +62,7 @@
travelCard.setRechargeTime(new Date());
this.baseMapper.updateById(travelCard);
// 新增余额变更记录(出行卡兑换类型)
- // this.baseMapper.insertBalanceModifyRecord(BalanceModifyRecordVo.convert(userInfo.getId(), userInfo.getNickName(), userInfo.getPhone(), travelCard.getAmount()));
+ // this.baseMapper.insertBalanceModifyRecord(BalanceModifyRecordVo.convert(userInfo.getId(), userInfo.getNickName(), userInfo.getPhone(), travelCard.getAmount()));
}
return travelCard.getAmount();
}
--
Gitblit v1.7.1