From 337ed5402d29db8635ef329b82ed25ec759fbe42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E7=A6=8F=E8=B4=A2?= <1471584931@qq.com> Date: Tue, 23 Dec 2025 16:56:59 +0800 Subject: [PATCH] =?UTF-8?q?---=E5=B8=A6=E5=AD=90=E8=A1=A8=E7=9A=84?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BF=AE=E6=94=B9bug=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../listener/PEventListenerPublisher.java | 2 +- .../java/com/pictc/utils/DataLogTools.java | 147 ++++++++---------- .../module/datalog/entity/DataChangeLog.java | 26 ++++ .../UpdateLngCustomerGroupCustomerDto.java | 2 +- .../sales/dto/UpdateLngCustomerGroupDto.java | 4 +- 5 files changed, 98 insertions(+), 83 deletions(-) diff --git a/itc-pcitc-dependencies/itc-pcitc-dependencies-service/src/main/java/com/pictc/listener/PEventListenerPublisher.java b/itc-pcitc-dependencies/itc-pcitc-dependencies-service/src/main/java/com/pictc/listener/PEventListenerPublisher.java index 71d9cce..5eb8ecc 100644 --- a/itc-pcitc-dependencies/itc-pcitc-dependencies-service/src/main/java/com/pictc/listener/PEventListenerPublisher.java +++ b/itc-pcitc-dependencies/itc-pcitc-dependencies-service/src/main/java/com/pictc/listener/PEventListenerPublisher.java @@ -64,7 +64,7 @@ public class PEventListenerPublisher { } if(single) return res; } - } catch (URISyntaxException e) { + } catch (Exception e) { e.printStackTrace(); log.info("客户端:{}调用失败!",serviceId); } diff --git a/itc-pcitc-dependencies/itc-pcitc-dependencies-service/src/main/java/com/pictc/utils/DataLogTools.java b/itc-pcitc-dependencies/itc-pcitc-dependencies-service/src/main/java/com/pictc/utils/DataLogTools.java index 06ea03b..026dff3 100644 --- a/itc-pcitc-dependencies/itc-pcitc-dependencies-service/src/main/java/com/pictc/utils/DataLogTools.java +++ b/itc-pcitc-dependencies/itc-pcitc-dependencies-service/src/main/java/com/pictc/utils/DataLogTools.java @@ -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 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 logs) { String tableName = parseLogTableName(tableInfo); initTable(tableName); -// String sql = parseSql(SQL_INSERT, tableName); -// List> batchParams = CollectionUtils.newArrayList(); -// Map> pidMap = logs.stream().collect(Collectors.groupingBy(DataChangeLog::getPid)); -// -// for (DataChangeLog item : logs) { -// //没有改变的属性,且没有子表修改时跳过 -// if(!item.hasFieldChanges() && !hasChild(item, pidMap)) { -// continue; -// } -// -// List 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); + } + } } } diff --git a/itc-pcitc-dependencies/itc-pcitc-dependencies-service/src/main/java/com/xjrsoft/module/datalog/entity/DataChangeLog.java b/itc-pcitc-dependencies/itc-pcitc-dependencies-service/src/main/java/com/xjrsoft/module/datalog/entity/DataChangeLog.java index 7351d57..ad3b2aa 100644 --- a/itc-pcitc-dependencies/itc-pcitc-dependencies-service/src/main/java/com/xjrsoft/module/datalog/entity/DataChangeLog.java +++ b/itc-pcitc-dependencies/itc-pcitc-dependencies-service/src/main/java/com/xjrsoft/module/datalog/entity/DataChangeLog.java @@ -104,6 +104,23 @@ public class DataChangeLog implements Serializable{ @ApiModelProperty("操作IP地址") private String operationIp; + private List 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; + } + + + + } diff --git a/itc-pcitc-mdm/itc-pcitc-mdm-api/src/main/java/com/xjrsoft/module/sales/dto/UpdateLngCustomerGroupCustomerDto.java b/itc-pcitc-mdm/itc-pcitc-mdm-api/src/main/java/com/xjrsoft/module/sales/dto/UpdateLngCustomerGroupCustomerDto.java index 5fa1616..9886525 100644 --- a/itc-pcitc-mdm/itc-pcitc-mdm-api/src/main/java/com/xjrsoft/module/sales/dto/UpdateLngCustomerGroupCustomerDto.java +++ b/itc-pcitc-mdm/itc-pcitc-mdm-api/src/main/java/com/xjrsoft/module/sales/dto/UpdateLngCustomerGroupCustomerDto.java @@ -18,7 +18,7 @@ import java.io.Serializable; */ @Data @LogTable(source="lng_customer_group_customer",name="客户组") -public class UpdateLngCustomerGroupCustomerDto implements Serializable { +public class UpdateLngCustomerGroupCustomerDto extends com.xjrsoft.common.model.base.BaseModel { private static final long serialVersionUID = 1L; diff --git a/itc-pcitc-mdm/itc-pcitc-mdm-api/src/main/java/com/xjrsoft/module/sales/dto/UpdateLngCustomerGroupDto.java b/itc-pcitc-mdm/itc-pcitc-mdm-api/src/main/java/com/xjrsoft/module/sales/dto/UpdateLngCustomerGroupDto.java index 80b55ec..0c918c1 100644 --- a/itc-pcitc-mdm/itc-pcitc-mdm-api/src/main/java/com/xjrsoft/module/sales/dto/UpdateLngCustomerGroupDto.java +++ b/itc-pcitc-mdm/itc-pcitc-mdm-api/src/main/java/com/xjrsoft/module/sales/dto/UpdateLngCustomerGroupDto.java @@ -2,6 +2,8 @@ package com.xjrsoft.module.sales.dto; import com.fasterxml.jackson.annotation.JsonFormat; import com.pictc.annotations.datalog.*; +import com.xjrsoft.common.model.base.BaseModel; + import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -19,7 +21,7 @@ import java.util.List; */ @Data @LogTable(source="lng_customer_group",name="客户组") -public class UpdateLngCustomerGroupDto implements Serializable { +public class UpdateLngCustomerGroupDto extends BaseModel { private static final long serialVersionUID = 1L;