---添加数据日志查询功能

This commit is contained in:
2025-10-21 17:28:41 +08:00
parent caa25dce65
commit 72424ca678
28 changed files with 1358 additions and 22 deletions

View File

@ -12,5 +12,10 @@ public interface ExceptionCommonCode {
*/
final BusinessCode DATA_FIELD_DUPLICATION = BusinessCode.of(10501,"字段【{}】不允许重复");
/**
* 数据删除时id不能为空
*/
final BusinessCode DATA_DEL_ID_IS_NULL = BusinessCode.of(10510,"删除数据时,表【{}】的主键为空,删除失败!");
}

View File

@ -1,5 +1,5 @@
#Generated by Maven
#Wed Sep 24 16:43:44 CST 2025
#Tue Oct 21 16:19:00 CST 2025
version=2.0.4
groupId=com.geg
artifactId=itc-pcitc-dependencies-api

View File

@ -0,0 +1,22 @@
com\pictc\enums\BSalesCode.class
com\pictc\annotations\datalog\LogField.class
com\pictc\annotations\datalog\LogTable.class
com\pictc\enums\BContractCode.class
com\pictc\annotations\datalog\JoinValueType.class
com\pictc\constant\ContractLiteflowRule.class
com\pictc\annotations\datalog\LogJoin.class
com\xjrsoft\module\datalog\vo\DataChangeLogDto.class
com\pictc\annotations\datalog\LogJoinColumn.class
com\pictc\annotations\datalog\ValueDirectionType.class
com\pictc\enums\BReserveCode.class
com\pictc\enums\ExceptionCommonCode.class
com\pictc\annotations\datalog\SourceType.class
com\xjrsoft\module\datalog\vo\OperationType.class
com\pictc\common\mybatis\JsonTypeHandler.class
com\pictc\enums\BusinessCode.class
com\pictc\enums\BTransportCode.class
com\xjrsoft\module\datalog\vo\FieldChangeDto.class
com\pictc\enums\BProcurementCode.class
com\pictc\enums\BFinanceCode.class
com\pictc\annotations\datalog\JoinCaseType.class
com\pictc\annotations\datalog\JoinType.class

View File

@ -1,13 +1,22 @@
F:\ges-scm\code\dev\geg-gas-pcitc\itc-pcitc-dependencies\itc-pcitc-dependencies-api\src\main\java\com\xjrsoft\module\datalog\vo\FieldChangeDto.java
F:\ges-scm\code\dev\geg-gas-pcitc\itc-pcitc-dependencies\itc-pcitc-dependencies-api\src\main\java\com\pictc\enums\BProcurementCode.java
F:\ges-scm\code\dev\geg-gas-pcitc\itc-pcitc-dependencies\itc-pcitc-dependencies-api\src\main\java\com\pictc\enums\BSalesCode.java
F:\ges-scm\code\dev\geg-gas-pcitc\itc-pcitc-dependencies\itc-pcitc-dependencies-api\src\main\java\com\xjrsoft\module\datalog\vo\OperationType.java
F:\ges-scm\code\dev\geg-gas-pcitc\itc-pcitc-dependencies\itc-pcitc-dependencies-api\src\main\java\com\pictc\enums\BContractCode.java
F:\ges-scm\code\dev\geg-gas-pcitc\itc-pcitc-dependencies\itc-pcitc-dependencies-api\src\main\java\com\pictc\annotations\datalog\JoinCaseType.java
F:\ges-scm\code\dev\geg-gas-pcitc\itc-pcitc-dependencies\itc-pcitc-dependencies-api\src\main\java\com\pictc\enums\BFinanceCode.java
F:\ges-scm\code\dev\geg-gas-pcitc\itc-pcitc-dependencies\itc-pcitc-dependencies-api\src\main\java\com\pictc\annotations\datalog\LogField.java
F:\ges-scm\code\dev\geg-gas-pcitc\itc-pcitc-dependencies\itc-pcitc-dependencies-api\src\main\java\com\pictc\annotations\datalog\JoinValueType.java
F:\ges-scm\code\dev\geg-gas-pcitc\itc-pcitc-dependencies\itc-pcitc-dependencies-api\src\main\java\com\pictc\annotations\datalog\LogJoin.java
F:\ges-scm\code\dev\geg-gas-pcitc\itc-pcitc-dependencies\itc-pcitc-dependencies-api\src\main\java\com\pictc\annotations\datalog\JoinType.java
F:\ges-scm\code\dev\geg-gas-pcitc\itc-pcitc-dependencies\itc-pcitc-dependencies-api\src\main\java\com\pictc\common\mybatis\JsonTypeHandler.java
F:\ges-scm\code\dev\geg-gas-pcitc\itc-pcitc-dependencies\itc-pcitc-dependencies-api\src\main\java\com\pictc\enums\BusinessCode.java
F:\ges-scm\code\dev\geg-gas-pcitc\itc-pcitc-dependencies\itc-pcitc-dependencies-api\src\main\java\com\pictc\enums\ExceptionCommonCode.java
F:\ges-scm\code\dev\geg-gas-pcitc\itc-pcitc-dependencies\itc-pcitc-dependencies-api\src\main\java\com\xjrsoft\module\datalog\vo\DataChangeLogDto.java
F:\ges-scm\code\dev\geg-gas-pcitc\itc-pcitc-dependencies\itc-pcitc-dependencies-api\src\main\java\com\pictc\annotations\datalog\ValueDirectionType.java
F:\ges-scm\code\dev\geg-gas-pcitc\itc-pcitc-dependencies\itc-pcitc-dependencies-api\src\main\java\com\pictc\annotations\datalog\SourceType.java
F:\ges-scm\code\dev\geg-gas-pcitc\itc-pcitc-dependencies\itc-pcitc-dependencies-api\src\main\java\com\pictc\annotations\datalog\LogTable.java
F:\ges-scm\code\dev\geg-gas-pcitc\itc-pcitc-dependencies\itc-pcitc-dependencies-api\src\main\java\com\pictc\constant\ContractLiteflowRule.java
F:\ges-scm\code\dev\geg-gas-pcitc\itc-pcitc-dependencies\itc-pcitc-dependencies-api\src\main\java\com\pictc\enums\BTransportCode.java
F:\ges-scm\code\dev\geg-gas-pcitc\itc-pcitc-dependencies\itc-pcitc-dependencies-api\src\main\java\com\pictc\annotations\datalog\LogJoinColumn.java
F:\ges-scm\code\dev\geg-gas-pcitc\itc-pcitc-dependencies\itc-pcitc-dependencies-api\src\main\java\com\pictc\enums\BReserveCode.java

View File

@ -48,10 +48,14 @@ import com.pictc.converts.ConverUtil;
import com.pictc.datalog.LogFieldInfo;
import com.pictc.datalog.LogJoinInfo;
import com.pictc.datalog.LogTableInfo;
import com.pictc.enums.BusinessCode;
import com.pictc.enums.ExceptionCommonCode;
import com.pictc.exceptions.OrmException;
import com.pictc.jdbc.JdbcContext;
import com.pictc.jdbc.ResultSetUtils;
import com.pictc.jdbc.model.JdbcParam;
import com.xjrsoft.common.enums.YesOrNoEnum;
import com.xjrsoft.common.exception.BusinessException;
import com.xjrsoft.common.utils.SecureUtil;
import com.xjrsoft.module.datalog.entity.DataChangeLog;
import com.xjrsoft.module.datalog.entity.json.FieldChange;
@ -124,7 +128,7 @@ public class DataLogTools {
public static final String SQL_LIST = "SELECT * FROM ${TBL_NAME} WHERE entity_id = ? ORDER BY operation_time DESC, flow_id DESC";
public static final Set<String> excludeFields = SetUtils.of("tenantId","dataVersion","tenantId","tenantId","tenantId");
public static final Set<String> excludeFields = SetUtils.of("tenantId","dataVersion","createUserId","createDate","modifyUserId","modifyDate","modifyDate","deleteMark");
public static DataChangeLog createLog(Class<?> klazz,OperationType type) {
@ -250,6 +254,13 @@ public class DataLogTools {
}
public static boolean deleteByIds(Class<?> klazz, @Valid List<Long> ids) {
for (Long id : ids) {
deleteById(klazz, id);
}
return true;
}
public static <T>T deleteById(Class<T> klazz,Long id) {
LogTableInfo tabInfo = getAnnotation(klazz);
BaseMapper mapper = MybatisTools.getMapper(tabInfo.getEntityType());
@ -274,13 +285,68 @@ public class DataLogTools {
return entity;
}
public static boolean deleteByIds(Class<?> klazz, @Valid List<Long> ids) {
private static void delete(Object entity,LogTableInfo tableinfo,BaseMapper mapper){
Long idValue = tableinfo.getIdValue(entity);
if(idValue!=null && idValue > 0) {
mapper.deleteById(idValue);
}else {
throw new BusinessException(BusinessCode.ofArgs(ExceptionCommonCode.DATA_DEL_ID_IS_NULL,tableinfo.getTableName()));
}
}
public static boolean enable(Class<?> klazz, @Valid List<Long> ids) {
for (Long id : ids) {
deleteById(klazz, id);
enableById(klazz, id);
}
return true;
}
public static <T>T enableById(Class<T> klazz,Long id) {
LogTableInfo tabInfo = getAnnotation(klazz);
BaseMapper mapper = MybatisTools.getMapper(tabInfo.getEntityType());
Object entity = findNativeById(klazz, id);
if(entity==null) return null;
T old = BeanUtils.newInstance(klazz);
BeanUtil.copyProperties(entity,old,true);
List<DataChangeLog> logs = CollectionUtils.newArrayList();
tabInfo.setFieldValue(entity,"valid",YesOrNoEnum.YES.getTextCode());
mapper.updateById(entity);
T dto = (T)tabInfo.toDto(entity);
DataChangeLog datalog = createLog(klazz,OperationType.UPDATE);
datalog.setEntityId(id);
buildFields(datalog,tabInfo,dto,null);
logs.add(datalog);
saveLogs(tabInfo,logs);
return dto;
}
public static boolean disable(Class<?> klazz, @Valid List<Long> ids) {
for (Long id : ids) {
enableById(klazz, id);
}
return true;
}
public static <T>T disableById(Class<T> klazz,Long id) {
LogTableInfo tabInfo = getAnnotation(klazz);
BaseMapper mapper = MybatisTools.getMapper(tabInfo.getEntityType());
Object entity = findNativeById(klazz, id);
if(entity==null) return null;
T old = BeanUtils.newInstance(klazz);
BeanUtil.copyProperties(entity,old,true);
List<DataChangeLog> logs = CollectionUtils.newArrayList();
tabInfo.setFieldValue(entity,"valid",YesOrNoEnum.NO.getTextCode());
mapper.updateById(entity);
T dto = (T)tabInfo.toDto(entity);
DataChangeLog datalog = createLog(klazz,OperationType.UPDATE);
datalog.setEntityId(id);
buildFields(datalog,tabInfo,dto,null);
logs.add(datalog);
saveLogs(tabInfo,logs);
return dto;
}
public static <T>T findById(Class<T> klazz,Serializable id){
return findById(klazz,id,false);
}
@ -294,7 +360,14 @@ public class DataLogTools {
initJoinValues(tabInfo,dto,SetUtils.of(klazz), full);
return dto;
}
private static Object findNativeById(Class<?> klazz, Serializable id) {
LogTableInfo tabInfo = getAnnotation(klazz);
BaseMapper mapper = MybatisTools.getMapper(tabInfo.getEntityType());
return mapper.selectById(id);
}
public static void initJoinValues(LogTableInfo tabInfo,Object entity,Set<Class<?>> classPath,boolean full){
List<LogJoinInfo> joins = tabInfo.getJoins();
BaseMapper mapper = MybatisTools.getMapper(tabInfo.getEntityType());
@ -362,18 +435,8 @@ public class DataLogTools {
}
private static void delete(Object entity,LogTableInfo tableinfo,BaseMapper mapper){
Long idValue = tableinfo.getIdValue(entity);
if(idValue!=null && idValue > 0) {
// QueryChainWrapper wrapper = new QueryChainWrapper(mapper);
// wrapper.eq(tableinfo.getIdColumn(),tableinfo.getIdValue(entity));
// mapper.delete(wrapper);
mapper.deleteById(idValue);
}else {
throw new RuntimeException("删除数据时,表【"+tableinfo.getName()+"】的主键为空,删除失败!");
}
}
private static <T>void initJoinValue(T entity,LogTableInfo tabInfo,Set<Class<?>> classes) {
if(classes==null) {
@ -881,4 +944,6 @@ public class DataLogTools {
}

View File

@ -18,8 +18,12 @@ public interface DatalogService {
public <T>T deleteById(Class<T> klazz,long id);
public <T>List<DataChangeLog> findByEntityId(Class<T> klazz,long id);
public <T>List<DataChangeLog> findLogsByEntityId(Class<T> klazz,long id);
public <T>boolean deleteByIds(Class<T> class1, @Valid List<Long> ids);
public <T>boolean enable(Class<T> class1, @Valid List<Long> ids);
public <T>boolean disable(Class<T> class1, @Valid List<Long> ids);
}

View File

@ -52,16 +52,26 @@ public class DatalogServiceImpl implements DatalogService{
@Transactional(rollbackFor = Exception.class)
@Override
public <T> boolean deleteByIds(Class<T> class1, @Valid List<Long> ids) {
return DataLogTools.deleteByIds(class1, ids);
public <T> boolean deleteByIds(Class<T> klazz, @Valid List<Long> ids) {
return DataLogTools.deleteByIds(klazz, ids);
}
@Transactional(readOnly = true)
@Override
public <T> List<DataChangeLog> findByEntityId(Class<T> klazz, long dataId) {
public <T> List<DataChangeLog> findLogsByEntityId(Class<T> klazz, long dataId) {
return DataLogTools.findLogsByEntityId(klazz, dataId);
}
@Override
public <T> boolean enable(Class<T> klazz, @Valid List<Long> ids) {
return DataLogTools.enable(klazz, ids);
}
@Override
public <T> boolean disable(Class<T> klazz, @Valid List<Long> ids) {
return DataLogTools.disable(klazz, ids);
}