package com.sk.sams.common.mybatis.changemonitor.listener;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateFormatUtils;
import org.springframework.data.mongodb.core.MongoOperations;
import com.sk.sams.common.HistoryEntry;
import com.sk.sams.common.mybatis.changemonitor.domain.ChangeData;
import com.sk.sams.common.mybatis.changemonitor.domain.ChangeObject;
import com.sk.sams.common.mybatis.changemonitor.domain.PropertyHistory;
import com.sk.sams.share.SamsConstants;
import com.sk.sams.util.IpUtil;
import com.sk.sams.util.RandomCodeUtil;
import com.sk.sams.util.Tools;
import com.sk.sams.util.URLUtil;
import com.sk.sams.util.UserUtil;
public class DoChangeEventListener implements DoInsertEventListener, DoDeleteEventListener, DoUpdateEventListener {
private MongoOperations mongoOperations;
@Override
public void onPostDelete(List<ChangeData> changeTable) {
for (ChangeData changeData : changeTable) {
Long entityId = changeData.getEntityId();
HistoryEntry historyEntry = new HistoryEntry(URLUtil.getURL(), entityId, RandomCodeUtil.getRandomCode(),
changeData.getTableName(), SamsConstants.OPER_DEL, StringUtils.EMPTY,
Tools.obj2Json(changeData.getCurrentEntityMap()), UserUtil.getUserID(), IpUtil.getIp(),
DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss.SSS"));
mongoOperations.insert(historyEntry);
}
}
@Override
public void onPostInsert(List<ChangeData> changeTable) {
for (ChangeData changeData : changeTable) {
Long entityId = changeData.getEntityId();
HistoryEntry historyEntry = new HistoryEntry(URLUtil.getURL(), entityId, RandomCodeUtil.getRandomCode(),
changeData.getTableName(), SamsConstants.OPER_ADD, StringUtils.EMPTY,
Tools.obj2Json(changeData.getCurrentEntityMap()), UserUtil.getUserID(), IpUtil.getIp(),
DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss.SSS"));
mongoOperations.insert(historyEntry);
}
}
@Override
public void onPostUpdate(List<ChangeData> changeTable) {
for (ChangeData changeData : changeTable) {
Long entityId = changeData.getEntityId();
List<ChangeObject> afterColumnList = changeData.getAfterColumnList();
List<ChangeObject> beforeColumnList = changeData.getBeforeColumnList();
List<PropertyHistory> list = new ArrayList<>();
for (ChangeObject beforeChangeObject : beforeColumnList) {
PropertyHistory propertyHistory = new PropertyHistory();
String property = beforeChangeObject.getName();
String oldValue = getExactValue(beforeChangeObject.getValue());
propertyHistory.setProperty(property);
propertyHistory.setOldVal(oldValue);
String newValue = StringUtils.EMPTY;
for (ChangeObject afterChangeObject : afterColumnList) {
if (StringUtils.equals(property, afterChangeObject.getName())) {
newValue = getExactValue(afterChangeObject.getValue());
break;
}
}
if (oldValue != null && !oldValue.equals(newValue)) {
propertyHistory.setNewVal(newValue);
list.add(propertyHistory);
}
}
if (CollectionUtils.isEmpty(list)) {
return;
}
HistoryEntry historyEntry = new HistoryEntry(URLUtil.getURL(), entityId, RandomCodeUtil.getRandomCode(),
changeData.getTableName(), SamsConstants.OPER_UPDATE, Tools.obj2Json(list),
Tools.obj2Json(changeData.getCurrentEntityMap()), UserUtil.getUserID(), IpUtil.getIp(),
DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss.SSS"));
mongoOperations.insert(historyEntry);
}
}
public void setMongoOperations(MongoOperations mongoOperations) {
this.mongoOperations = mongoOperations;
}
private String getExactValue(Object value) {
if (value == null)
return StringUtils.EMPTY;
if (value instanceof Boolean) {
boolean flag = Boolean.valueOf(value.toString()).booleanValue();
return flag ? "1" : "0";
}
if (value instanceof Number) {
return BigDecimal.valueOf((Double.parseDouble(value.toString()))).stripTrailingZeros().toPlainString();
}
return value.toString();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Mybatis拦截器记录数据更新历史记录到MongoDB
共22个文件
java:22个
3星 · 超过75%的资源 需积分: 49 96 下载量 155 浏览量
2018-08-15
17:30:14
上传
评论 1
收藏 13KB RAR 举报
温馨提示
Mybatis拦截器记录数据更新历史记录到MongoDB的源码,另外需要配置拦截器到mybatis配置文件中。
资源推荐
资源详情
资源评论
收起资源包目录
changemonitor.rar (22个子文件)
changemonitor
enumerate
DBActionTypeEnum.java 422B
domain
PropertyHistory.java 761B
ChangeData.java 1KB
ChangeObject.java 352B
ChangeDataUtil.java 3KB
listener
DoChangeEventListener.java 4KB
DoInsertEventListener.java 265B
DoDeleteEventListener.java 264B
DoUpdateEventListener.java 262B
ChangeEventListener.java 1KB
parse
JsqlParserHelper.java 1KB
ParseContext.java 3KB
ParseInsertData.java 2KB
ParseUpdateData.java 2KB
ParseFactory.java 763B
SqlParserInfo.java 3KB
DataPaser.java 821B
ParseDeleteData.java 2KB
ChangeMinitorInterceptor.java 2KB
mybatis
MSUtils.java 2KB
MybatisParameterUtils.java 2KB
MybatisInvocation.java 1KB
共 22 条
- 1
我不想写昵称
- 粉丝: 60
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- MEM2307-VB一款SOT23封装P-Channel场效应MOS管
- 逐次分半积分实验.wps
- MEM2303XG-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- MEM2303-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- 1_base.apk.1
- 基于FPGA深度学习的9I2C 读写 RTC 时钟实验,适合FPGA初学者
- MEM2303M3G-VB一款P-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- MEM2302XG-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明
- manage.py 相对路径
- 数据库设计课程设计-高校选课管理系统免费提供
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页