---带子表的新增修改bug修改
This commit is contained in:
@ -64,7 +64,7 @@ public class PEventListenerPublisher {
|
||||
}
|
||||
if(single) return res;
|
||||
}
|
||||
} catch (URISyntaxException e) {
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
log.info("客户端:{}调用失败!",serviceId);
|
||||
}
|
||||
|
||||
@ -89,24 +89,25 @@ public class DataLogTools {
|
||||
}
|
||||
|
||||
public static DataChangeLog createLog(Class<?> klazz,OperationType type,DataChangeLog parent) {
|
||||
UserDto currentUser = SecureUtil.getCurrentUser();
|
||||
LogTableInfo annotation = getAnnotation(klazz);
|
||||
//变更人的IP地址
|
||||
HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
|
||||
String ipAddress = request.getRemoteAddr();
|
||||
DataChangeLog changeLog = new DataChangeLog()
|
||||
.setEntityClassName(klazz.getCanonicalName())
|
||||
.setBusName(annotation.getName())
|
||||
.setId(IdUtil.getSnowflakeNextIdStr())
|
||||
.setOperationIp(ipAddress)
|
||||
.setOperationType(type)
|
||||
.setOperatorId(currentUser.getId())
|
||||
.setOperatorName(currentUser.getName())
|
||||
.setOperationTime(LocalDateTime.now());
|
||||
DataChangeLog changeLog = null;
|
||||
if(parent!=null) {
|
||||
changeLog.setFlowId(parent.getFlowId());
|
||||
changeLog.setPid(parent.getId());
|
||||
changeLog = parent.addChild(type);
|
||||
}else {
|
||||
//变更人的IP地址
|
||||
HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
|
||||
String ipAddress = request.getRemoteAddr();
|
||||
UserDto currentUser = SecureUtil.getCurrentUser();
|
||||
changeLog = new DataChangeLog()
|
||||
.setOperationIp(ipAddress)
|
||||
.setOperatorId(currentUser.getId())
|
||||
.setOperatorName(currentUser.getName())
|
||||
.setOperationTime(LocalDateTime.now())
|
||||
.setOperationType(type);
|
||||
}
|
||||
changeLog.setEntityClassName(klazz.getCanonicalName())
|
||||
.setBusName(annotation.getName())
|
||||
.setId(IdUtil.getSnowflakeNextIdStr());
|
||||
return changeLog;
|
||||
}
|
||||
|
||||
@ -649,36 +650,44 @@ public class DataLogTools {
|
||||
for (Object item : listValue) {
|
||||
Long idValue = joinTable.getIdValue(item);
|
||||
DataChangeLog datalog = createLog(join.getTargetClass(),type,parent);
|
||||
datalog.setEntityId(idValue);
|
||||
Object bean = BeanUtil.toBean(item,joinTable.getEntityType());
|
||||
mapper.insert(bean);
|
||||
mapper.insert(joinTable.toEntity(item));
|
||||
saveAttrs(joinTable,item);
|
||||
buildFields(datalog,joinTable,item,null);
|
||||
logs.add(datalog);
|
||||
}
|
||||
}else {
|
||||
} else {
|
||||
for (Object item : listValue) {
|
||||
Long idValue = joinTable.getIdValue(item);
|
||||
DataChangeLog datalog = createLog(join.getTargetClass(),type,parent);
|
||||
datalog.setEntityId(idValue);
|
||||
Object pojo = BeanUtil.toBean(item,joinTable.getKlazz());
|
||||
delete(pojo, joinTable, mapper);
|
||||
delete(item, joinTable, mapper);
|
||||
saveAttrs(joinTable,item,true);
|
||||
buildFields(datalog,joinTable,item,null);
|
||||
logs.add(datalog);
|
||||
}
|
||||
}
|
||||
}else {
|
||||
List oldList = getJoinList(joinTable, join, mapper, parentInfo, entity);
|
||||
Set<Long> ids = CollectionUtils.newHashSet();
|
||||
for (Object item : listValue) {
|
||||
Long idValue = joinTable.getIdValue(item);
|
||||
ids.add(idValue);
|
||||
DataChangeLog datalog = createLog(join.getTargetClass(),type,parent);
|
||||
datalog.setEntityId(idValue);
|
||||
Object old = findById(join.getTargetClass(), idValue);
|
||||
Object pojo = BeanUtil.toBean(item,joinTable.getKlazz());
|
||||
mapper.updateById(pojo);
|
||||
Object old = findById(join.getTargetClass(),idValue);
|
||||
mapper.updateById(joinTable.toEntity(item));
|
||||
saveAttrs(joinTable,item);
|
||||
buildFields(datalog,joinTable,item,old);
|
||||
logs.add(datalog);
|
||||
}
|
||||
//删除旧数据
|
||||
if(oldList!=null) {
|
||||
log.info("关联属性【{}】=>{}",join.getField().getName(),JSON.toJSONString(oldList));
|
||||
for (Object item : oldList) {
|
||||
Long idValue = joinTable.getIdValue(item);
|
||||
if(!ids.contains(idValue)) {
|
||||
DataChangeLog datalog = createLog(join.getTargetClass(),OperationType.DELETE,parent);
|
||||
Object pojo = BeanUtil.toBean(item,joinTable.getKlazz());
|
||||
delete(pojo, joinTable, mapper);
|
||||
saveAttrs(joinTable,item,true);
|
||||
buildFields(datalog,joinTable,item,null);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if(type==OperationType.UPDATE || type==OperationType.DELETE){
|
||||
@ -689,12 +698,10 @@ public class DataLogTools {
|
||||
for (Object item : oldList) {
|
||||
Long idValue = joinTable.getIdValue(item);
|
||||
DataChangeLog datalog = createLog(join.getTargetClass(),OperationType.DELETE,parent);
|
||||
datalog.setEntityId(idValue);
|
||||
Object pojo = BeanUtil.toBean(item,joinTable.getKlazz());
|
||||
delete(pojo, joinTable, mapper);
|
||||
saveAttrs(joinTable,item,true);
|
||||
buildFields(datalog,joinTable,item,null);
|
||||
logs.add(datalog);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -703,21 +710,18 @@ public class DataLogTools {
|
||||
if(val!=null) {
|
||||
Long idValue = joinTable.getIdValue(val);
|
||||
DataChangeLog datalog = createLog(join.getTargetClass(),type,parent);
|
||||
logs.add(datalog);
|
||||
datalog.setEntityId(idValue);
|
||||
Object pojo = BeanUtil.toBean(val,joinTable.getKlazz());
|
||||
if(type==OperationType.INSERT || type==OperationType.DELETE) {
|
||||
if(type==OperationType.INSERT) {
|
||||
mapper.insert(pojo);
|
||||
mapper.insert(joinTable.toEntity(val));
|
||||
saveAttrs(joinTable,val);
|
||||
}else {
|
||||
delete(pojo, joinTable, mapper);
|
||||
delete(val, joinTable, mapper);
|
||||
saveAttrs(joinTable,val,true);
|
||||
}
|
||||
buildFields(datalog,joinTable, val, null);
|
||||
buildFields(datalog,joinTable,val,null);
|
||||
}else {
|
||||
Object old = mapper.selectById(idValue);
|
||||
mapper.updateById(pojo);
|
||||
mapper.updateById(joinTable.toEntity(val));
|
||||
saveAttrs(joinTable,val,true);
|
||||
buildFields(datalog,joinTable,val,old);
|
||||
}
|
||||
@ -725,10 +729,9 @@ public class DataLogTools {
|
||||
//进行修改或者删除时,级联对象为空时,需要删除旧数据
|
||||
Object old = getJoinObj(joinTable, join, mapper, parentInfo, entity);
|
||||
if(old!=null) {
|
||||
Object dto = BeanUtil.toBean(old,joinTable.getKlazz());
|
||||
Object dto = joinTable.toDto(old);
|
||||
Long idValue = joinTable.getIdValue(old);
|
||||
DataChangeLog datalog = createLog(join.getTargetClass(),OperationType.DELETE,parent);
|
||||
datalog.setEntityId(idValue);
|
||||
delete(dto, joinTable, mapper);
|
||||
saveAttrs(joinTable,dto,true);
|
||||
buildFields(datalog,joinTable,dto,null);
|
||||
@ -901,47 +904,31 @@ public class DataLogTools {
|
||||
public static void saveLogs(LogTableInfo tableInfo,List<DataChangeLog> logs) {
|
||||
String tableName = parseLogTableName(tableInfo);
|
||||
initTable(tableName);
|
||||
// String sql = parseSql(SQL_INSERT, tableName);
|
||||
// List<List<JdbcParam>> batchParams = CollectionUtils.newArrayList();
|
||||
// Map<String, List<DataChangeLog>> pidMap = logs.stream().collect(Collectors.groupingBy(DataChangeLog::getPid));
|
||||
//
|
||||
// for (DataChangeLog item : logs) {
|
||||
// //没有改变的属性,且没有子表修改时跳过
|
||||
// if(!item.hasFieldChanges() && !hasChild(item, pidMap)) {
|
||||
// continue;
|
||||
// }
|
||||
//
|
||||
// List<JdbcParam> params = CollectionUtils.newArrayList();
|
||||
// params.add(JdbcParam.of(Types.VARCHAR,String.class, item.getId()));
|
||||
// params.add(JdbcParam.of(Types.VARCHAR,String.class, item.getFlowId()));
|
||||
// params.add(JdbcParam.of(Types.VARCHAR,String.class, item.getPid()));
|
||||
// params.add(JdbcParam.of(Types.VARCHAR,String.class, item.getEntityClassName()));
|
||||
// params.add(JdbcParam.of(Types.VARCHAR,String.class, item.getBusName()));
|
||||
// params.add(JdbcParam.of(Types.BIGINT,long.class, item.getEntityId()));
|
||||
// params.add(JdbcParam.of(Types.VARCHAR,String.class,JSON.toJSONString(item.getFieldChanges())));
|
||||
// params.add(JdbcParam.of(Types.VARCHAR,String.class,item.getOperationType().name()));
|
||||
// params.add(JdbcParam.of(Types.VARCHAR,long.class,item.getOperatorId()));
|
||||
// params.add(JdbcParam.of(Types.VARCHAR,String.class,item.getOperatorName()));
|
||||
// params.add(JdbcParam.of(Types.TIMESTAMP,Timestamp.class,item.getOperationTime()));
|
||||
// params.add(JdbcParam.of(Types.VARCHAR,String.class,item.getOperationIp()));
|
||||
// batchParams.add(params);
|
||||
// }
|
||||
// executeBatch(sql, batchParams);
|
||||
for (DataChangeLog item : logs) {
|
||||
if(item.hasFieldChanges()) {
|
||||
logDbService.insertDataLog(tableName,item.getId(),
|
||||
item.getFlowId(), // 2. flow_id
|
||||
item.getPid(), // 3. pid
|
||||
item.getEntityClassName(), // 4. entity_class_name
|
||||
item.getBusName(), // 5. bus_name
|
||||
item.getEntityId(), // 6. entity_id
|
||||
JSON.toJSONString(item.getFieldChanges()), // 7. field_changes(可传 JSON 字符串)
|
||||
item.getOperationType().name(), // 8. operation_type(如 "INSERT/UPDATE/DELETE")
|
||||
item.getOperatorId(), // 9. operator_id
|
||||
item.getOperatorName(), // 10. operator_name
|
||||
item.getOperationTime(), // 11. operation_time(Date 类型,MyBatis 自动转数据库时间类型)
|
||||
item.getOperationIp());
|
||||
}
|
||||
saveLog(tableName,item);
|
||||
}
|
||||
}
|
||||
|
||||
private static void saveLog(String tableName,DataChangeLog item) {
|
||||
if(item.hasFieldChanges() || item.hasChildLogs()) {
|
||||
logDbService.insertDataLog(tableName,
|
||||
item.getId(),// 1. id
|
||||
item.getFlowId(), // 2. flow_id
|
||||
item.getPid(), // 3. pid
|
||||
item.getEntityClassName(), // 4. entity_class_name
|
||||
item.getBusName(), // 5. bus_name
|
||||
item.getEntityId(), // 6. entity_id
|
||||
JSON.toJSONString(item.getFieldChanges()), // 7. field_changes(可传 JSON 字符串)
|
||||
item.getOperationType().name(), // 8. operation_type(如 "INSERT/UPDATE/DELETE")
|
||||
item.getOperatorId(), // 9. operator_id
|
||||
item.getOperatorName(), // 10. operator_name
|
||||
item.getOperationTime(), // 11. operation_time(Date 类型,MyBatis 自动转数据库时间类型)
|
||||
item.getOperationIp());
|
||||
if(item.hasChildLogs()) {
|
||||
for (DataChangeLog child : item.getChildren()) {
|
||||
saveLog(tableName,child);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -104,6 +104,23 @@ public class DataChangeLog implements Serializable{
|
||||
@ApiModelProperty("操作IP地址")
|
||||
private String operationIp;
|
||||
|
||||
private List<DataChangeLog> children;
|
||||
|
||||
public DataChangeLog addChild(OperationType type) {
|
||||
DataChangeLog child = new DataChangeLog();
|
||||
child.setPid(this.id);
|
||||
child.setFlowId(this.flowId);
|
||||
child.setEntityId(this.entityId);
|
||||
child.setOperationIp(operationIp);
|
||||
child.setOperatorId(operatorId);
|
||||
child.setOperatorName(operatorName);
|
||||
child.setOperationTime(operationTime);
|
||||
child.setOperationType(type);
|
||||
if(this.children==null) this.children = new ArrayList<>();
|
||||
this.children.add(child);
|
||||
return child;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 判断是否有字段变更
|
||||
@ -116,5 +133,14 @@ public class DataChangeLog implements Serializable{
|
||||
public void addFiledChnage(FieldChange change) {
|
||||
fieldChanges.add(change);
|
||||
}
|
||||
|
||||
|
||||
public boolean hasChildLogs() {
|
||||
return this.children!=null && this.children.size()>0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user