初始化elog框架

main
钱涛 1 year ago
commit f95310163a

@ -0,0 +1,15 @@
package com.api.salary.elog;
import javax.ws.rs.Path;
/**
*
* <p>Copyright: Copyright (c) 2023</p>
* <p>Company: </p>
*
* @author qiantao
* @version 1.0
**/
@Path("/bs/hrmsalary/elog")
public class LoggerTableController extends com.engine.salary.elog.web.LoggerTableController{
}

@ -0,0 +1,23 @@
package com.engine.salary.elog.annotation;
import java.lang.annotation.*;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface Elog {
String module();
String function();
String operateType();
String operateTypeName();
String sql() default "";
boolean isLocal() default true;
String infoMethod() default "";
}

@ -0,0 +1,14 @@
package com.engine.salary.elog.annotation;
import java.lang.annotation.*;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface ElogDetailField {
String fieldType() default "varchar";
String length() default "50";
String fieldName();
String desc() default "自定义字段";
}

@ -0,0 +1,13 @@
package com.engine.salary.elog.annotation;
import java.lang.annotation.*;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface ElogDetailTable {
String module();
String function() default "common";
}

@ -0,0 +1,23 @@
package com.engine.salary.elog.annotation;
import com.engine.salary.elog.entity.dto.DataTypeEnum;
import java.lang.annotation.*;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface ElogField {
DataTypeEnum dataType() default DataTypeEnum.VARCHAR;
int length() default 50;
String comment() default "自定义字段";
String defaultValue() default "";
boolean isNull() default true;
boolean isKey() default false;
}

@ -0,0 +1,9 @@
package com.engine.salary.elog.annotation;
import java.lang.annotation.*;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.PARAMETER})
public @interface ElogPrimaryKey {
}

@ -0,0 +1,14 @@
package com.engine.salary.elog.annotation;
import java.lang.annotation.*;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface ElogTable {
String module();
String function() default "common";
}

@ -0,0 +1,29 @@
package com.engine.salary.elog.annotation;
import java.lang.annotation.*;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.TYPE})
@Inherited
public @interface ElogTransform {
String tablename() default "";
String name();
int labelId() default -1;
String type() default "";
String valuesKVPairs() default "";
boolean ignore() default false;
boolean analyticSubclass() default false;
boolean analyticList() default false;
Class<?> analyticListClass() default void.class;
}

@ -0,0 +1,17 @@
package com.engine.salary.elog.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface HandleElog {
String modulename() default "";
String functionname() default "";
String service() default "";
}

@ -0,0 +1,22 @@
package com.engine.salary.elog.annotation;
import java.lang.annotation.*;
/**
* @ClassName: LoggerTarget
* @Description -
* @Author tanghj
* @Date 2021/2/10 14:18
*/
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface LoggerTarget {
// @AliasFor("module")
String value() default "";
// @AliasFor("value")
String module() default "";
String function() default "common";
}

@ -0,0 +1,15 @@
package com.engine.salary.elog.annotation;
public class OperateType {
public static final String view = "view";
public static final String viewSpan = "查看";
public static final String add = "add";
public static final String addSpan = "新增";
public static final String update = "update";
public static final String updateSpan = "更新";
public static final String delete = "delete";
public static final String deleteSpan = "删除";
}

@ -0,0 +1,30 @@
package com.engine.salary.elog.async;
import com.engine.salary.elog.config.ELogTableChecker;
import com.engine.salary.elog.entity.dto.LoggerContext;
import com.engine.salary.elog.service.impl.LocalElogService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @ClassName: LoggerMessageListener
* @Description
* @Author tanghj
* @Date 2021/2/10 14:18
*/
public class LoggerMessageListener {
private final Logger logger = LoggerFactory.getLogger(getClass());
LocalElogService localElogService = new LocalElogService();
public <T> String receiveold(LoggerContext messageBean) {
new ELogTableChecker().check(messageBean);
localElogService.insertLocalElog(messageBean);
return "";
}
}

@ -0,0 +1,25 @@
package com.engine.salary.elog.config;
import com.engine.salary.mapper.elog.ElogTableCheckerMapper;
import com.engine.salary.elog.util.db.MapperProxyFactory;
import java.util.HashMap;
import java.util.Map;
public class ELogCache {
private Map<String, Long> tableCache = new HashMap<>();
private ElogTableCheckerMapper getTableCheckerMapper() {
return MapperProxyFactory.getProxy(ElogTableCheckerMapper.class);
}
public Long getVersion(String mainTable) {
Long version = tableCache.get(mainTable);
if (version == null) {
version = getTableCheckerMapper().getVersion(mainTable);
tableCache.put(mainTable, version);
}
return version;
}
}

@ -0,0 +1,44 @@
package com.engine.salary.elog.config;
import com.engine.salary.elog.entity.dto.LoggerContext;
import com.engine.salary.mapper.elog.ElogTableCheckerMapper;
import com.engine.salary.elog.util.db.IdGenerator;
import com.engine.salary.elog.util.db.MapperProxyFactory;
public class ELogTableChecker {
private static final long version = 0;
private ELogCache eLogCache = new ELogCache();
private ElogTableCheckerMapper getTableCheckerMapper() {
return MapperProxyFactory.getProxy(ElogTableCheckerMapper.class);
}
public <T> void check(LoggerContext<T> loggerContext) {
String module = loggerContext.getModuleName();
String function = loggerContext.getFunctionName();
String mainTable = String.format("%s_%slogs", module, function);
Long v = eLogCache.getVersion(mainTable);
boolean noTable = v == null;
if (noTable) {
this.initTable(mainTable);
v = version;
} else {
this.checkVersion(mainTable, v);
}
}
private void checkVersion(String mainTable, Long v) {
if (v == version) {
return;
}
}
private void initTable(String mainTable) {
getTableCheckerMapper().recordVersion(IdGenerator.generate(), mainTable, version);
getTableCheckerMapper().createMainTable(mainTable);
getTableCheckerMapper().createDetailTable(mainTable + "_detail");
}
}

@ -0,0 +1,25 @@
package com.engine.salary.elog.entity.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* @ClassName: CancelContext
* @Description
* @Author tanghj
* @Date 2021/2/10 14:18
*/
@ApiModel("撤销实体类")
public class CancelContext<T> {
@ApiModelProperty("撤销参数")
private T cancleParams;
public T getCancleParams() {
return cancleParams;
}
public void setCancleParams(T cancleParams) {
this.cancleParams = cancleParams;
}
}

@ -0,0 +1,16 @@
package com.engine.salary.elog.entity.dto;
public enum DataTypeEnum {
VARCHAR,
BIGINT,
INT,
DATETIME,
TEXT,
LONGTEXT,
DOUBLE,
DECIMAL,
TINYINT,
FLOAT;
}

@ -0,0 +1,116 @@
package com.engine.salary.elog.entity.dto;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @Date: 2022/5/2 21:51
* @Author: deli.xu
* @Description: bean
**/
public class ElogBean implements Serializable {
private static final long serialVersionUID = 5357552376749564256L;
private String module;
private String function;
private String current;
private String pageSize;
private String dataset;
private String searchMap;
private List<ShowColumsDto> showColumns = new ArrayList<>();
private List<FilterConditionDto> filterConditionDtos = new ArrayList<>();
private String downloadSize;
private String transMethod;
private Map authParamsJson;
public String getModule() {
return module;
}
public void setModule(String module) {
this.module = module;
}
public String getFunction() {
return function;
}
public void setFunction(String function) {
this.function = function;
}
public String getCurrent() {
return current;
}
public void setCurrent(String current) {
this.current = current;
}
public String getPageSize() {
return pageSize;
}
public void setPageSize(String pageSize) {
this.pageSize = pageSize;
}
public String getDataset() {
return dataset;
}
public void setDataset(String dataset) {
this.dataset = dataset;
}
public String getSearchMap() {
return searchMap;
}
public void setSearchMap(String searchMap) {
this.searchMap = searchMap;
}
public List<ShowColumsDto> getShowColumns() {
return showColumns;
}
public void setShowColumns(List<ShowColumsDto> showColumns) {
this.showColumns = showColumns;
}
public List<FilterConditionDto> getFilterConditionDtos() {
return filterConditionDtos;
}
public void setFilterConditionDtos(List<FilterConditionDto> filterConditionDtos) {
this.filterConditionDtos = filterConditionDtos;
}
public String getDownloadSize() {
return downloadSize;
}
public void setDownloadSize(String downloadSize) {
this.downloadSize = downloadSize;
}
public String getTransMethod() {
return transMethod;
}
public void setTransMethod(String transMethod) {
this.transMethod = transMethod;
}
public Map getAuthParamsJson() {
return authParamsJson;
}
public void setAuthParamsJson(Map authParamsJson) {
this.authParamsJson = authParamsJson;
}
}

@ -0,0 +1,91 @@
package com.engine.salary.elog.entity.dto;
import java.io.Serializable;
/**
* @date: 2021/5/25 17:23
* @author: deli.xu
* @description:
*/
public class FilterConditionDto implements Serializable {
private static final long serialVersionUID = -3399942468474767859L;
/**
*
*/
private String columIndex;
/**
*
*/
private String value;
/**
*
*/
private String type;
/**
*
*/
private Like like;
/**
*
*/
private String connectCondition;
/**
* sql
*/
private String sql;
public String getColumIndex() {
return columIndex;
}
public void setColumIndex(String columIndex) {
this.columIndex = columIndex;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Like getLike() {
return like;
}
public void setLike(Like like) {
this.like = like;
}
public String getConnectCondition() {
return connectCondition;
}
public void setConnectCondition(String connectCondition) {
this.connectCondition = connectCondition;
}
public String getSql() {
return sql;
}
public void setSql(String sql) {
this.sql = sql;
}
}

@ -0,0 +1,31 @@
package com.engine.salary.elog.entity.dto;
import java.io.Serializable;
/**
* @date: 2021/6/1 17:50
* @author: deli.xu
* @description:
*/
public class Like implements Serializable {
private static final long serialVersionUID = -3399942468474767851L;
private String prefix;
private String suffix;
public String getPrefix() {
return prefix;
}
public void setPrefix(String prefix) {
this.prefix = prefix;
}
public String getSuffix() {
return suffix;
}
public void setSuffix(String suffix) {
this.suffix = suffix;
}
}

@ -0,0 +1,890 @@
package com.engine.salary.elog.entity.dto;
import com.alibaba.fastjson.annotation.JSONField;
import com.engine.salary.elog.annotation.ElogField;
import com.engine.salary.elog.annotation.ElogTable;
import com.engine.salary.elog.enums.ElogConsts;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.StringUtils;
import weaver.hrm.User;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* @ClassName: LoggerContext
* @Description
* @Author tanghj
* @Date 2021/2/10 14:18
*/
@ElogTable(module = ElogConsts.BASE_TABLE)
@ApiModel("日志实体类")
public class LoggerContext<T> implements Serializable {
private static final long serialVersionUID = 15869325700230992L;
private User user;
@ElogField(comment = "ID", dataType = DataTypeEnum.BIGINT, isKey = true)
@ApiModelProperty("日志ID")
private long id;
@ElogField(dataType = DataTypeEnum.VARCHAR, length = 36, comment = "日志UUID")
@ApiModelProperty("日志UUID")
private String uuid = "";
@ApiModelProperty("自定义日志字段信息")
private T customInfo;
@ElogField(dataType = DataTypeEnum.DATETIME, comment = "操作时间")
@ApiModelProperty("操作时间")
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date date = new Date();
@ElogField(dataType = DataTypeEnum.VARCHAR, length = 500, comment = "终端信息")
@ApiModelProperty("终端信息")
private String device = "";
@ElogField(dataType = DataTypeEnum.BIGINT, defaultValue = "-1", comment = "操作人")
@ApiModelProperty("操作人")
private String operator = "";
@ElogField(dataType = DataTypeEnum.VARCHAR, length = 100, comment = "操作人姓名")
@ApiModelProperty("操作人姓名")
private String operatorName = "";
@ElogField(dataType = DataTypeEnum.VARCHAR, length = 10, comment = "租户id")
@ApiModelProperty("租户id")
private String tenant_key = "";
/**
*
*/
@ElogField(dataType = DataTypeEnum.BIGINT, defaultValue = "-1", comment = "操作目标id")
@ApiModelProperty("操作目标id")
private String targetId = "";
@ElogField(dataType = DataTypeEnum.TEXT, comment = "操作目标名称")
@ApiModelProperty("操作目标名称(用于显示)")
private String targetName = "";
@ElogField(dataType = DataTypeEnum.VARCHAR, length = 100, comment = "模块")
@ApiModelProperty("目标对象类型(大分类,模块,服务)")
private String moduleName;// 模块
/**
* /
* _
* __
*/
@ElogField(dataType = DataTypeEnum.VARCHAR, length = 100, comment = "服务(方法)")
@ApiModelProperty("目标对象类型(小分类,模块/服务下的子功能。子项目)")
private String functionName;
@ElogField(dataType = DataTypeEnum.VARCHAR, length = 100, comment = "访问接口名")
@ApiModelProperty("访问接口名")
private String interfaceName = "";
@ElogField(dataType = DataTypeEnum.VARCHAR, length = 200, comment = "请求全路径")
@ApiModelProperty("请求全路径")
private String requestUrl = "";
@ElogField(dataType = DataTypeEnum.VARCHAR, length = 200, comment = "请求地址")
@ApiModelProperty("请求地址")
private String requestUri = "";
@ElogField(dataType = DataTypeEnum.VARCHAR, length = 50, comment = "操作类型")
@ApiModelProperty("操作类型(增删改查等)")
private String operateType = "";
@ElogField(dataType = DataTypeEnum.VARCHAR, length = 100, comment = "操作类型名称")
@ApiModelProperty("操作类型名称")
private String operateTypeName = "";
/**
* TableChangeBean
*/
@ApiModelProperty("修改前、后的值")
private List<TableChangeBean> changeValues;// 操作表名,[字段名,值]
@ElogField(dataType = DataTypeEnum.VARCHAR, length = 3000, comment = "操作详细说明")
@ApiModelProperty("操作详细说明")
private String operatedesc = "";
@ElogField(dataType = DataTypeEnum.LONGTEXT, comment = "涉及的相关参数")
@ApiModelProperty("涉及的相关参数")
private Map<String, Object> params;
@ApiModelProperty("涉及的相关参数-转string存储")
private String paramsStr;
/**
* belongMainId
*/
@ElogField(dataType = DataTypeEnum.VARCHAR, length = 36, comment = "所属主表uuid")
@ApiModelProperty("所属主表uuid")
private String belongMainId = "";
@ElogField(dataType = DataTypeEnum.VARCHAR, length = 50, comment = "操作IP")
@ApiModelProperty("操作IP")
private String clientIp = "";
@ElogField(dataType = DataTypeEnum.VARCHAR, length = 50, comment = "分组")
@ApiModelProperty("分组")
private String groupId = "";
/*@ApiModelProperty("是否明显表")
private boolean isDetail;*/
@ElogField(dataType = DataTypeEnum.VARCHAR, length = 1000, comment = "分组标题")
@ApiModelProperty("分组标题")
private String groupNameLabel = "";
@ElogField(dataType = DataTypeEnum.VARCHAR, length = 200, comment = "重做业务接口")
@ApiModelProperty("重做业务接口")
private String redoService = "";
@ElogField(dataType = DataTypeEnum.LONGTEXT, comment = "重做参数")
@ApiModelProperty("重做参数")
private RedoContext redoContext;
@ApiModelProperty("重做参数-转String存储")
private String redoContextStr;
@ElogField(dataType = DataTypeEnum.VARCHAR, length = 200, comment = "撤销业务接口")
@ApiModelProperty("撤销业务接口")
private String cancelService = "";
@ElogField(dataType = DataTypeEnum.LONGTEXT, comment = "撤销参数")
@ApiModelProperty("撤销参数")
private CancelContext cancelContext;
@ApiModelProperty("撤销参数-转String存储")
private String cancelContextStr;
@ApiModelProperty("日志明细列表(值变化列表-自动赋值、或者自定义字段)")
private List<LoggerDetailContext> detailContexts;
@ElogField(dataType = DataTypeEnum.DATETIME, defaultValue = "CURRENT_TIMESTAMP", comment = "创建时间")
@ApiModelProperty("创建时间")
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date create_time;
@ElogField(dataType = DataTypeEnum.DATETIME, defaultValue = "CURRENT_TIMESTAMP", comment = "修改时间")
@ApiModelProperty("修改时间")
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date update_time;
@ElogField(dataType = DataTypeEnum.BIGINT, defaultValue = "-1", comment = "创建人id")
@ApiModelProperty("创建人id")
private long creator;
@ElogField(dataType = DataTypeEnum.INT, defaultValue = "0", comment = "是否删除")
@ApiModelProperty("是否删除")
private int delete_type;
@ElogField(dataType = DataTypeEnum.BIGINT, defaultValue = "0", comment = "总运行时长")
@ApiModelProperty("总运行时长")
private long totalRunTime;
@ElogField(dataType = DataTypeEnum.BIGINT, defaultValue = "0", comment = "主方法运行时长")
@ApiModelProperty("主方法运行时长")
private long mainRunTime;
@ElogField(dataType = DataTypeEnum.VARCHAR, length = 100, defaultValue = "", comment = "运行结果标识")
@ApiModelProperty("运行结果标识")
private String result = "";
@ElogField(dataType = DataTypeEnum.VARCHAR, length = 100, defaultValue = "", comment = "来自pc web")
@ApiModelProperty("来自终端")
private String fromTerminal = "";
@ElogField(dataType = DataTypeEnum.TEXT, comment = "运行结果描述")
@ApiModelProperty("运行结果描述")
private String resultDesc = "";
@ElogField(dataType = DataTypeEnum.VARCHAR, length = 3000, comment = "原先内容")
@ApiModelProperty("原先内容et用")
private String old_content = "";
@ElogField(dataType = DataTypeEnum.VARCHAR, length = 20, comment = "链接类型")
@ApiModelProperty("链接类型et用")
private String link_type = "";
@ElogField(dataType = DataTypeEnum.BIGINT, defaultValue = "0", comment = "链接id")
@ApiModelProperty("链接idet用")
private long link_id;
@ElogField(dataType = DataTypeEnum.BIGINT, defaultValue = "0", comment = "原先链接id")
@ApiModelProperty("原先链接idet用")
private long old_link_id;
/**
*
*/
@ApiModelProperty("临时参数")
private Object tempParams;
/**
*
*/
@ApiModelProperty("是否忽略该日志,不进行数据记录")
private boolean logIgnore;
/**
*
*/
@ApiModelProperty("审计操作类型")
protected String operateAuditType;
/**
*
*/
@ApiModelProperty("操作人账号")
protected String operateAccount;
@ApiModelProperty("操作人id兼容数据库用")
protected long logOperator;
@ApiModelProperty("操作人id兼容数据库用")
protected long logTargetid;
@ApiModelProperty("ES存储大字段功能标识")
protected Boolean esFunction;
@ApiModelProperty("params参数是否忽略记录")
private Boolean paramsIgnore = Boolean.FALSE;
@ApiModelProperty("params请求体keys")
private List<String> paramsBodyKeys;
@ApiModelProperty("日志弱控记录")
private Boolean weakElogReocrd = Boolean.FALSE;
private List<String> clobFieldList;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public List<String> getClobFieldList() {
return clobFieldList;
}
public void setClobFieldList(List<String> clobFieldList) {
this.clobFieldList = clobFieldList;
}
public Boolean getWeakElogReocrd() {
return weakElogReocrd;
}
public void setWeakElogReocrd(Boolean weakElogReocrd) {
this.weakElogReocrd = weakElogReocrd;
}
public Boolean getParamsIgnore() {
return paramsIgnore;
}
public void setParamsIgnore(Boolean paramsIgnore) {
this.paramsIgnore = paramsIgnore;
}
public List<String> getParamsBodyKeys() {
return paramsBodyKeys;
}
public void setParamsBodyKeys(List<String> paramsBodyKeys) {
this.paramsBodyKeys = paramsBodyKeys;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getUuid() {
return uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
public T getCustomInfo() {
return customInfo;
}
public void setCustomInfo(T customInfo) {
this.customInfo = customInfo;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public String getDevice() {
return device;
}
public void setDevice(String device) {
this.device = device;
}
public String getOperator() {
return operator;
}
public void setOperator(String operator) {
this.operator = operator;
}
public String getTenant_key() {
return tenant_key;
}
public void setTenant_key(String tenant_key) {
this.tenant_key = tenant_key;
}
public String getTargetId() {
return targetId;
}
public void setTargetId(String targetId) {
this.targetId = targetId;
}
public String getTargetName() {
return targetName;
}
public void setTargetName(String targetName) {
this.targetName = targetName;
}
public String getModuleName() {
return moduleName;
}
public void setModuleName(String moduleName) {
this.moduleName = moduleName;
}
public String getFunctionName() {
return functionName;
}
public void setFunctionName(String functionName) {
this.functionName = functionName;
}
public String getInterfaceName() {
return interfaceName;
}
public void setInterfaceName(String interfaceName) {
this.interfaceName = interfaceName;
}
public String getOperateType() {
return operateType;
}
public void setOperateType(String operateType) {
this.operateType = operateType;
}
public List<TableChangeBean> getChangeValues() {
return changeValues;
}
public void setChangeValues(List<TableChangeBean> changeValues) {
this.changeValues = changeValues;
}
public String getOperatedesc() {
return operatedesc;
}
public void setOperatedesc(String operatedesc) {
this.operatedesc = operatedesc;
}
public Map<String, Object> getParams() {
return params;
}
public void setParams(Map<String, Object> params) {
this.params = params;
}
/*public String getMainId() {
return mainId;
}
public void setMainId(String mainId) {
this.mainId = mainId;
}
public String getBelongMainId() {
return belongMainId;
}
public void setBelongMainId(String belongMainId) {
this.belongMainId = belongMainId;
}*/
public String getClientIp() {
return clientIp;
}
public void setClientIp(String clientIp) {
this.clientIp = clientIp;
}
public String getGroupId() {
return groupId;
}
public void setGroupId(String groupId) {
this.groupId = groupId;
}
/* public boolean isDetail() {
return isDetail;
}
public void setDetail(boolean detail) {
isDetail = detail;
}*/
public String getGroupNameLabel() {
return groupNameLabel;
}
public void setGroupNameLabel(String groupNameLabel) {
this.groupNameLabel = groupNameLabel;
}
public String getRedoService() {
return redoService;
}
public void setRedoService(String redoService) {
this.redoService = redoService;
}
public RedoContext getRedoContext() {
return redoContext;
}
public void setRedoContext(RedoContext redoContext) {
this.redoContext = redoContext;
}
public CancelContext getCancelContext() {
return cancelContext;
}
public void setCancelContext(CancelContext cancelContext) {
this.cancelContext = cancelContext;
}
public String getCancelService() {
return cancelService;
}
public void setCancelService(String cancelService) {
this.cancelService = cancelService;
}
public List<LoggerDetailContext> getDetailContexts() {
return detailContexts;
}
public void setDetailContexts(List<LoggerDetailContext> detailContexts) {
this.detailContexts = detailContexts;
}
public void addDetailContext(LoggerDetailContext loggerDetailContext) {
if (this.detailContexts != null) {
this.detailContexts.add(loggerDetailContext);
} else {
this.detailContexts = new ArrayList<>();
this.detailContexts.add(loggerDetailContext);
}
}
public void addDetailContext(List<LoggerDetailContext> list) {
if (this.detailContexts != null) {
this.detailContexts.addAll(list);
} else {
this.detailContexts = new ArrayList<>();
this.detailContexts.addAll(list);
}
}
public String getOperatorName() {
return operatorName;
}
public void setOperatorName(String operatorName) {
this.operatorName = operatorName;
}
public void setOldValues(Object object) {
TableChangeBean bean = new TableChangeBean();
bean.setOldValue(object);
getChangeList().add(bean);
}
public void setOldValueList(List<Object> list) {
if (list != null)
list.stream().forEach(obj -> setOldValues(obj));
}
public void setNewValueList(List<Object> list) {
if (list != null)
list.stream().forEach(obj -> setNewValues(obj));
}
public void setNewValues(Object object) {
List<TableChangeBean> list = getChangeList();
boolean handled = false;
for (TableChangeBean bean : list) {
if (bean.getNewValue() == null) {
bean.setNewValue(object);
handled = true;
break;
}
}
if (!handled) {
TableChangeBean bean = new TableChangeBean();
bean.setNewValue(object);
list.add(bean);
}
}
public void setOldValues(Object object, String tableName, String dataId, String belongDataid) {
setOldValues(object, tableName, dataId, belongDataid, false);
}
public void setOldValues(Object object, String tableName, String dataId, String belongDataid, boolean isDetail) {
TableChangeBean bean = new TableChangeBean();
if (StringUtils.isNotEmpty(tableName))
bean.setTableName(tableName);
if (StringUtils.isNotEmpty(dataId))
bean.setDataid(dataId);
if (StringUtils.isNotEmpty(belongDataid))
bean.setBelongDataid(belongDataid);
if (isDetail)
bean.setIsDetail(1);
bean.setOldValue(object);
getChangeList().add(bean);
}
public void setOldValueList(List<Object> list, String tableName, String dataId, String belongDataid) {
setOldValueList(list, tableName, dataId, belongDataid, false);
}
public void setNewValueList(List<Object> list, String tableName, String dataId, String belongDataid) {
setNewValueList(list, tableName, dataId, belongDataid, false);
}
public void setOldValueList(List<Object> list, String tableName, String dataId, String belongDataid, boolean isDetail) {
if (list != null)
list.stream().forEach(obj -> setOldValues(obj, tableName, dataId, belongDataid, isDetail));
}
public void setNewValueList(List<Object> list, String tableName, String dataId, String belongDataid, boolean isDetail) {
if (list != null)
list.stream().forEach(obj -> setNewValues(obj, tableName, dataId, belongDataid, isDetail));
}
public void setNewValues(Object object, String tableName, String dataId, String belongDataid) {
setNewValues(object, tableName, dataId, belongDataid, false);
}
public void setNewValues(Object object, String tableName, String dataId, String belongDataid, boolean isDetail) {
List<TableChangeBean> list = getChangeList();
boolean handled = false;
for (TableChangeBean bean : list) {
if (bean.getNewValue() == null) {
bean.setNewValue(object);
if (StringUtils.isNotEmpty(tableName))
bean.setTableName(tableName);
if (StringUtils.isNotEmpty(dataId))
bean.setDataid(dataId);
if (StringUtils.isNotEmpty(belongDataid))
bean.setBelongDataid(belongDataid);
if (isDetail)
bean.setIsDetail(1);
handled = true;
break;
}
}
if (!handled) {
TableChangeBean bean = new TableChangeBean();
if (StringUtils.isNotEmpty(tableName))
bean.setTableName(tableName);
if (StringUtils.isNotEmpty(dataId))
bean.setDataid(dataId);
if (StringUtils.isNotEmpty(belongDataid))
bean.setBelongDataid(belongDataid);
if (isDetail)
bean.setIsDetail(1);
bean.setNewValue(object);
list.add(bean);
}
}
public List<TableChangeBean> getChangeList() {
if (this.changeValues == null) {
this.changeValues = new ArrayList<>();
}
return this.changeValues;
}
public Object getParam(String id) {
return this.params.get(id);
}
public String getOperateTypeName() {
return operateTypeName;
}
public void setOperateTypeName(String operateTypeName) {
this.operateTypeName = operateTypeName;
}
public String getParamsStr() {
return paramsStr;
}
public void setParamsStr(String paramsStr) {
this.paramsStr = paramsStr;
}
public String getRedoContextStr() {
return redoContextStr;
}
public void setRedoContextStr(String redoContextStr) {
this.redoContextStr = redoContextStr;
}
public String getCancelContextStr() {
return cancelContextStr;
}
public void setCancelContextStr(String cancelContextStr) {
this.cancelContextStr = cancelContextStr;
}
public String getBelongMainId() {
return belongMainId;
}
public void setBelongMainId(String belongMainId) {
this.belongMainId = belongMainId;
}
public String getRequestUrl() {
return requestUrl;
}
public void setRequestUrl(String requestUrl) {
this.requestUrl = requestUrl;
}
public String getRequestUri() {
return requestUri;
}
public void setRequestUri(String requestUri) {
this.requestUri = requestUri;
}
public Date getCreate_time() {
return create_time;
}
public void setCreate_time(Date create_time) {
this.create_time = create_time;
}
public Date getUpdate_time() {
return update_time;
}
public void setUpdate_time(Date update_time) {
this.update_time = update_time;
}
public long getCreator() {
return creator;
}
public void setCreator(long creator) {
this.creator = creator;
}
public int getDelete_type() {
return delete_type;
}
public void setDelete_type(int delete_type) {
this.delete_type = delete_type;
}
public long getTotalRunTime() {
return totalRunTime;
}
public void setTotalRunTime(long totalRunTime) {
this.totalRunTime = totalRunTime;
}
public long getMainRunTime() {
return mainRunTime;
}
public void setMainRunTime(long mainRunTime) {
this.mainRunTime = mainRunTime;
}
public Object getTempParams() {
return tempParams;
}
public void setTempParams(Object tempParams) {
this.tempParams = tempParams;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
public String getFromTerminal() {
return fromTerminal;
}
public void setFromTerminal(String fromTerminal) {
this.fromTerminal = fromTerminal;
}
public String getResultDesc() {
return resultDesc;
}
public void setResultDesc(String resultDesc) {
this.resultDesc = resultDesc;
}
public String getOld_content() {
return old_content;
}
public void setOld_content(String old_content) {
this.old_content = old_content;
}
public String getLink_type() {
return link_type;
}
public void setLink_type(String link_type) {
this.link_type = link_type;
}
public long getLink_id() {
return link_id;
}
public void setLink_id(long link_id) {
this.link_id = link_id;
}
public long getOld_link_id() {
return old_link_id;
}
public void setOld_link_id(long old_link_id) {
this.old_link_id = old_link_id;
}
public String getOperateAuditType() {
return operateAuditType;
}
public void setOperateAuditType(String operateAuditType) {
this.operateAuditType = operateAuditType;
}
public String getOperateAccount() {
return operateAccount;
}
public void setOperateAccount(String operateAccount) {
this.operateAccount = operateAccount;
}
public long getLogOperator() {
return logOperator;
}
public void setLogOperator(long logOperator) {
this.logOperator = logOperator;
}
public long getLogTargetid() {
return logTargetid;
}
public void setLogTargetid(long logTargetid) {
this.logTargetid = logTargetid;
}
public boolean getLogIgnore() {
return logIgnore;
}
public void setLogIgnore(boolean logIgnore) {
this.logIgnore = logIgnore;
}
public Boolean getEsFunction() {
return esFunction;
}
public void setEsFunction(Boolean esFunction) {
this.esFunction = esFunction;
}
}

@ -0,0 +1,316 @@
package com.engine.salary.elog.entity.dto;
import com.engine.salary.elog.annotation.ElogDetailTable;
import com.engine.salary.elog.annotation.ElogField;
import com.engine.salary.elog.enums.ElogConsts;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.util.Date;
/**
* @ClassName: ValueChangeBean
* @Description
* @Author tanghj
* @Date 2021/3/9 11:06
*/
@ElogDetailTable(module = ElogConsts.BASE_TABLE)
@ApiModel("值变化实体类")
public class LoggerDetailContext<T> implements Serializable {
private static final long serialVersionUID = 15869325700230992L;
@ElogField(comment = "ID", dataType = DataTypeEnum.BIGINT, isKey = true)
@ApiModelProperty("ID")
private long id;
@ElogField(dataType = DataTypeEnum.VARCHAR, length = 36,comment = "日志UUID")
@ApiModelProperty("同一个bean转换的数据uuid相同作为区分标识")
private String uuid = "";
@ElogField(dataType = DataTypeEnum.VARCHAR, length = 36,comment = "主表id")
@ApiModelProperty("主表id")
private String mainid = "";
@ElogField(dataType = DataTypeEnum.VARCHAR, length = 50,comment = "数据id")
@ApiModelProperty("数据id")
private String dataid = "";
/**
* belongDataId
*/
@ElogField(dataType = DataTypeEnum.VARCHAR, length = 50,comment = "主表数据id")
@ApiModelProperty("主表数据id")
private String belongDataid = "";
@ElogField(dataType = DataTypeEnum.VARCHAR, length = 200,comment = "表名")
@ApiModelProperty("表名")
private String tableName ="";
@ElogField(dataType = DataTypeEnum.VARCHAR, defaultValue = "-1", length = 50,comment = "表名labelid")
@ApiModelProperty("表名labelid")
private String tableNameLabelId = "-1";
@ElogField(dataType = DataTypeEnum.VARCHAR, defaultValue="",isNull = false,length = 50,comment = "对应数据库的表")
@ApiModelProperty("对应数据库的表")
private String tableNameDesc = "";
@ElogField(dataType = DataTypeEnum.VARCHAR, length = 200,comment = "字段名")
@ApiModelProperty("字段名")
private String fieldName ="";
@ElogField(dataType = DataTypeEnum.VARCHAR, defaultValue = "-1", length = 50,comment = "字段名labelid")
@ApiModelProperty("字段名labelid")
private String fieldNameLabelId = "-1";
@ElogField(dataType = DataTypeEnum.LONGTEXT,comment = "更新后的值")
@ApiModelProperty("更新后的值")
private String newValue = "";
@ElogField(dataType = DataTypeEnum.LONGTEXT,comment = "更新前的值")
@ApiModelProperty("更新前的值")
private String oldValue = "";
@ElogField(dataType = DataTypeEnum.LONGTEXT,comment = "更新后的显示值")
@ApiModelProperty("更新后的显示值")
private String newRealValue = "";
@ElogField(dataType = DataTypeEnum.LONGTEXT,comment = "更新前的显示值")
@ApiModelProperty("更新前的显示值")
private String oldRealValue = "";
@ElogField(dataType = DataTypeEnum.VARCHAR, length = 200, comment = "字段名")
@ApiModelProperty("字段描述")
private String fieldDesc = "";
@ElogField(dataType = DataTypeEnum.INT, comment = "字段名")
@ApiModelProperty("字段展示顺序")
private int showorder = 0;
@ApiModelProperty("自定义字段")
private T customDetailInfo;
@ElogField(dataType = DataTypeEnum.DATETIME, defaultValue = "CURRENT_TIMESTAMP", comment = "创建时间")
@ApiModelProperty("创建时间")
private Date create_time;
@ElogField(dataType = DataTypeEnum.DATETIME, defaultValue = "CURRENT_TIMESTAMP", comment = "修改时间")
@ApiModelProperty("修改时间")
private Date update_time;
@ElogField(dataType = DataTypeEnum.BIGINT, defaultValue = "-1", comment = "创建人id")
@ApiModelProperty("创建人id")
private long creator;
@ElogField(dataType = DataTypeEnum.INT, defaultValue = "0" , comment = "是否删除")
@ApiModelProperty("是否删除")
private int delete_type;
@ElogField(dataType = DataTypeEnum.VARCHAR,length = 10,comment = "租户id")
@ApiModelProperty("租户id")
private String tenant_key = "";
@ElogField(dataType = DataTypeEnum.INT, defaultValue = "0" , comment = "是否明细字段")
@ApiModelProperty("是否明细字段")
private int isDetail = 0;
private String cusValus;
public String getCusValus() {
return cusValus;
}
public void setCusValus(String cusValus) {
this.cusValus = cusValus;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getMainid() {
return mainid;
}
public void setMainid(String mainid) {
this.mainid = mainid;
}
public String getUuid() {
return uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public String getFieldName() {
return fieldName;
}
public void setFieldName(String fieldName) {
this.fieldName = fieldName;
}
public String getNewValue() {
return newValue;
}
public void setNewValue(String newValue) {
this.newValue = newValue;
}
public String getOldValue() {
return oldValue;
}
public void setOldValue(String oldValue) {
this.oldValue = oldValue;
}
public String getFieldDesc() {
return fieldDesc;
}
public void setFieldDesc(String fieldDesc) {
this.fieldDesc = fieldDesc;
}
public int getShoworder() {
return showorder;
}
public void setShoworder(int showorder) {
this.showorder = showorder;
}
public T getCustomDetailInfo() {
return customDetailInfo;
}
public void setCustomDetailInfo(T customDetailInfo) {
this.customDetailInfo = customDetailInfo;
}
public String getDataid() {
return dataid;
}
public void setDataid(String dataid) {
this.dataid = dataid;
}
public String getBelongDataid() {
return belongDataid;
}
public void setBelongDataid(String belongDataid) {
this.belongDataid = belongDataid;
}
public Date getCreate_time() {
return create_time;
}
public void setCreate_time(Date create_time) {
this.create_time = create_time;
}
public Date getUpdate_time() {
return update_time;
}
public void setUpdate_time(Date update_time) {
this.update_time = update_time;
}
public long getCreator() {
return creator;
}
public void setCreator(long creator) {
this.creator = creator;
}
public int getDelete_type() {
return delete_type;
}
public void setDelete_type(int delete_type) {
this.delete_type = delete_type;
}
public String getTenant_key() {
return tenant_key;
}
public void setTenant_key(String tenant_key) {
this.tenant_key = tenant_key;
}
public int getIsDetail() {
return isDetail;
}
public void setIsDetail(int isDetail) {
this.isDetail = isDetail;
}
public String getNewRealValue() {
return newRealValue;
}
public void setNewRealValue(String newRealValue) {
this.newRealValue = newRealValue;
}
public String getOldRealValue() {
return oldRealValue;
}
public void setOldRealValue(String oldRealValue) {
this.oldRealValue = oldRealValue;
}
public String getTableNameLabelId() {
return tableNameLabelId;
}
public void setTableNameLabelId(String tableNameLabelId) {
this.tableNameLabelId = tableNameLabelId;
}
public String getFieldNameLabelId() {
return fieldNameLabelId;
}
public void setFieldNameLabelId(String fieldNameLabelId) {
this.fieldNameLabelId = fieldNameLabelId;
}
public String getTableNameDesc() {
return tableNameDesc;
}
public void setTableNameDesc(String tableNameDesc) {
this.tableNameDesc = tableNameDesc;
}
}

@ -0,0 +1,40 @@
package com.engine.salary.elog.entity.dto;
import java.io.Serializable;
import java.util.Date;
/**
* @date: 2022/5/14 13:52
* @author: deli.xu
* @description:
*/
public class ReadInfoEntity implements Serializable {
private static final long serialVersionUID = -8890667941835568289L;
private Long employeeId;
private Date date;
public Long getEmployeeId() {
return this.employeeId;
}
public void setEmployeeId(Long employeeId) {
this.employeeId = employeeId;
}
public Date getDate() {
return this.date;
}
public void setDate(Date date) {
this.date = date;
}
public ReadInfoEntity() {
}
public ReadInfoEntity(Long employeeId, Date date) {
this.employeeId = employeeId;
this.date = date;
}
}

@ -0,0 +1,24 @@
package com.engine.salary.elog.entity.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* @ClassName: RedoContext
* @Description
* @Author tanghj
* @Date 2021/2/10 14:18
*/
@ApiModel("重做实体类")
public class RedoContext<T> {
@ApiModelProperty("重做参数")
private T redoParams;
public T getRedoParams() {
return redoParams;
}
public void setRedoParams(T redoParams) {
this.redoParams = redoParams;
}
}

@ -0,0 +1,105 @@
package com.engine.salary.elog.entity.dto;
import java.io.Serializable;
/**
* @date: 2021/5/11 18:46
* @author: deli.xu
* @description:
*/
public class ShowColumsDto implements Serializable {
private static final long serialVersionUID = 4650449925605408753L;
/**
*
*/
private String columName;
/**
*
*/
private String aliasColumName;
/**
* index
*/
private String columIndex;
/**
*
*/
private boolean isHide = false;
/**
*
*/
private String width;
/**
*
*/
private boolean isTransfLanguage = false;
/**
*
* @param width
*/
private boolean newLine = false;
public void setWidth(String width){
this.width =width;
}
public String getWidth(){
return width;
}
public String getColumName() {
return columName;
}
public void setColumName(String columName) {
this.columName = columName;
}
public String getAliasColumName() {
return aliasColumName;
}
public void setAliasColumName(String aliasColumName) {
this.aliasColumName = aliasColumName;
}
public boolean isHide() {
return isHide;
}
public void setHide(boolean hide) {
isHide = hide;
}
public String getColumIndex() {
return columIndex;
}
public void setColumIndex(String columIndex) {
this.columIndex = columIndex;
}
public boolean isTransfLanguage() {
return isTransfLanguage;
}
public boolean isNewLine() {
return newLine;
}
public void setNewLine(boolean newLine) {
this.newLine = newLine;
}
public void setTransfLanguage(boolean transfLanguage) {
isTransfLanguage = transfLanguage;
}
}

@ -0,0 +1,153 @@
package com.engine.salary.elog.entity.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
/**
* @ClassName: TableChangeBean
* @Description
* @Author tanghj
* @Date 2021/3/8 15:58
*/
@ApiModel("表更新前后值类")
public class TableChangeBean<T> implements Serializable {
private static final long serialVersionUID = 15869325700230992L;
@ApiModelProperty("表名")
private String tableName;
@ApiModelProperty("数据id")
private String dataid;
@ApiModelProperty("所属主表数据id")
private String belongDataid;
@ApiModelProperty("是否为明细表0,否1")
private int isDetail = 0;
/**
*
*/
@ApiModelProperty("更新前的值")
private T oldValue;
/**
*
*/
@ApiModelProperty("更新后的值")
private T newValue;
/**
*
*/
@ApiModelProperty("更新前显示的值")
private T oldRealValue;
/**
*
*/
@ApiModelProperty("更新后显示的值")
private T newRealValue;
@ApiModelProperty("字段对应的labelid")
private String fieldNameLabelId;
@ApiModelProperty("表对应的labelid")
private String tableNameLabelId;
@ApiModelProperty("对应数据库的表")
private String tableNameDesc;
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public T getOldValue() {
return oldValue;
}
public void setOldValue(T oldValue) {
this.oldValue = oldValue;
}
public T getNewValue() {
return newValue;
}
public void setNewValue(T newValue) {
this.newValue = newValue;
}
public String getDataid() {
return dataid;
}
public void setDataid(String dataid) {
this.dataid = dataid;
}
public String getBelongDataid() {
return belongDataid;
}
public void setBelongDataid(String belongDataid) {
this.belongDataid = belongDataid;
}
public int getIsDetail() {
return isDetail;
}
public void setIsDetail(int isDetail) {
this.isDetail = isDetail;
}
public T getOldRealValue() {
return oldRealValue;
}
public void setOldRealValue(T oldRealValue) {
this.oldRealValue = oldRealValue;
}
public T getNewRealValue() {
return newRealValue;
}
public String getFieldNameLabelId() {
return fieldNameLabelId;
}
public void setFieldNameLabelId(String fieldNameLabelId) {
this.fieldNameLabelId = fieldNameLabelId;
}
public String getTableNameLabelId() {
return tableNameLabelId;
}
public void setTableNameLabelId(String tableNameLabelId) {
this.tableNameLabelId = tableNameLabelId;
}
public String getTableNameDesc() {
return tableNameDesc;
}
public void setTableNameDesc(String tableNameDesc) {
this.tableNameDesc = tableNameDesc;
}
public void setNewRealValue(T newRealValue) {
this.newRealValue = newRealValue;
}
}

@ -0,0 +1,155 @@
package com.engine.salary.elog.entity.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* @ClassName: TableColumnBean
* @Description
* @Author tanghj
* @Date 2021/3/12 11:44
*/
@ApiModel("表字段类")
public class TableColumnBean {
@ApiModelProperty("列名")
private String columnName;
/**
* varchar(20)
*/
@ApiModelProperty("数据类型")
private String columnType;
@ApiModelProperty("字段类型-字符串")
private String dataTypeStr;
@ApiModelProperty("字段类型")
private DataTypeEnum dataType;
@ApiModelProperty("长度")
private long fieldLength;
@ApiModelProperty("是否为空")
private boolean isNullable;
@ApiModelProperty("是否为空-字符串")
private String isNullableStr;
@ApiModelProperty("默认值")
private Object columnDefault;
@ApiModelProperty("备注")
private String columnComment;
public String getColumnName() {
return columnName;
}
public void setColumnName(String columnName) {
this.columnName = columnName;
}
public String getColumnType() {
return columnType;
}
public void setColumnType(String columnType) {
this.columnType = columnType;
}
public DataTypeEnum getDataType() {
return dataType;
}
public void setDataType(DataTypeEnum dataType) {
this.dataType = dataType;
}
public long getFieldLength() {
return fieldLength;
}
public void setFieldLength(long fieldLength) {
this.fieldLength = fieldLength;
}
public boolean isNullable() {
return isNullable;
}
public void setNullable(boolean nullable) {
isNullable = nullable;
}
public Object getColumnDefault() {
return columnDefault;
}
public void setColumnDefault(Object columnDefault) {
this.columnDefault = columnDefault;
}
public String getColumnComment() {
return columnComment;
}
public void setColumnComment(String columnComment) {
this.columnComment = columnComment;
}
public String getDataTypeStr() {
return dataTypeStr;
}
public void setDataTypeStr(String dataTypeStr) {
this.dataTypeStr = dataTypeStr;
}
public String getIsNullableStr() {
return isNullableStr;
}
public void setIsNullableStr(String isNullableStr) {
this.isNullableStr = isNullableStr;
}
public boolean equals(TableColumnBean tableColumnBean) {
return this.toSql().equals(tableColumnBean.toSql());
}
public String toSql() {
StringBuilder sb = new StringBuilder(this.columnName.toLowerCase()).append(" ");
if (this.dataType == null) {
return "类型为空";
}
switch (this.dataType) {
case BIGINT:
case INT:
case TEXT:
case LONGTEXT:
case DATETIME:
case FLOAT:
case TINYINT:
case DOUBLE:
sb.append(this.dataType.name().toLowerCase()).append(" ");
break;
case VARCHAR:
sb.append(this.dataType.name().toLowerCase()).append("(").append(this.fieldLength).append(") ");
break;
case DECIMAL:
long length = (this.fieldLength < 0 || this.fieldLength > 38) ? 0 : this.fieldLength;
sb.append(this.dataType.name().toLowerCase()).append("(").append(38 - length).append(",").append(length).append(") ");
break;
default:
sb.append("varchar").append("(").append(10).append(") ");
}
sb.append("comment ").append("'").append(this.columnComment).append("' ");
return sb.toString();
}
}

@ -0,0 +1,35 @@
package com.engine.salary.elog.entity.param;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ELogGetLogParam {
/**
*
*/
String module;
/**
*
*/
String function;
/**
*
*/
String condition;
/**
*
*/
String pageSize;
/**
* '
*
*/
String current;
}

@ -0,0 +1,29 @@
package com.engine.salary.elog.entity.param;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class GetDetailChangesParam {
/**
*
*/
String module;
/**
*
*/
String function;
/**
* id
*/
String mainid;
/**
*
*/
String detailTransMethod;
}

@ -0,0 +1,22 @@
package com.engine.salary.elog.enums;
/**
* @date: 2022/3/30 20:32
* @author: deli.xu
* @description:
*/
public class ElogConsts {
public static final String ORACLE = "oracle";
public static final String SQLSERVER = "sqlserver";
public static final String MYSQL = "mysql";
public static final String POSTGRESQL = "postgresql";
public static final String BASE_TABLE = "BASE_ELOG_TABLE";
public static final String TABLE_SPACER = "_";
public static final String TABLE_SUFFIX = "logs";
public static final String DETAIL_TABLE_SUFFIX = "_detail";
public static final String ES = "ES";
}

@ -0,0 +1,48 @@
package com.engine.salary.elog.enums;
/**
* @ClassName: FromTerminalType
* @Description TODO
* @Author tanghj
* @Date 2021/6/8 11:35
*/
public enum FromTerminalType {
PC("pc","来自 pc web"),
ANDROID("android","来自 安卓"),
IOS("ios","来自 iphone"),
IPHONE("iphone","来自 iphone"),
PC_CLIENT("pc_client","来自 windows客户端"),
MAC_CLIENT("mac_client","来自 mac客户端"),
H5("H5","来自 手机H5"),
MOBILEWEB("mobileWeb","来自 手机H5"),
MICO_MSG("mico_msg","来自 微信"),
WECHAT("wechat","来自 企业微信"),
APP_H5("app_h5","来自 app_h5"),
BROWSER("browser", "来自 网页"),
MOBILE("mobile","来自 移动端");
private String code;
private String face;
FromTerminalType(String code, String face) {
this.code = code;
this.face = face;
}
public String getCode() {
return code;
}
public String getFace() {
return face;
}
public static FromTerminalType fromString(String name) {
try {
FromTerminalType type = FromTerminalType.valueOf(name);
return type;
} catch (Exception e) {
return null;
}
}
}

@ -0,0 +1,173 @@
package com.engine.salary.elog.enums;
/**
* @date: 2022/5/13 21:13
* @author: deli.xu
* @description: eteams-base-bean
*/
/**
*
*
* @author gk
*/
public enum LinkType {
// 主线
mainline("项目"),
blog("工作日报"),
workreport("计划报告"),
clue("线索"),
crmcontact("联系人-用于全局搜索"),
marketactivity("活动"),
crmSummary("报表"),
statisticalReport("统计报表"),
attend("出勤"),
singalForm("表单应用"),
biaoge("表格"),
// 标签
tag("标签"),
// 表单标签
formtag("表单标签"),
// 附件
attachment("附件"),
// 用户
user("用户"),
// 任务
task("任务"),
// 子任务
subtask("子任务"),
// 文档
document("文档"),
// 文件夹
folder("文件夹"),
// 客户
customer("客户"),
// 联系人
contact("联系人"),
// 销售商机
saleChance("销售商机"),
// 产品
production("产品"),
// 合同
contract("合同"),
// 竞争对手
competitor("竞争对手"),
// 公告
placard("公告"),
// 审批
workflow("审批"),
// 部门
department("部门"),
// 岗位
position("岗位"),
// 日程
calendar("日程"),
// 群组
group("群组"),
// 合同
hrcontract("人事合同"),
//人事管理
hr("人事"),
//KPI
kpi("绩效考核"),kpiFlow("绩效考核流程"),
// 全部
all("所有人"),
formdatareport("数据上报"),
form("表单"),
userSetting("不可见成员"),
sms("短信"),
wechatEnterprise("企业微信"),
wechatService("微信服务号"),
salarybill("工资单"),
staffPosition("员工位置")/*定制化模块*/,
app("应用")/*自定义应用*/,
email("邮件"),
workTrends("工作动态"),
tenantLogo("个性化定制"),
module("模块"),
orderform("订单"),
price("价格"),
capital("资金"),
quote("报价"),
room("会议室管理"),
//模板任务
mtTask("模板任务"),
watchMe("关注我的"),
// crm
crm("CRM"),
// 空
blank(""),
role("角色"),
externalUser("外部联系人"),
subcompany("分部");
private String displayName;
LinkType(String displayName) {
this.displayName = displayName;
}
public String getDisplayName() {
return displayName;
}
}

@ -0,0 +1,14 @@
package com.engine.salary.elog.enums;
public class OperateAuditType {
//自动
public static final String AUTO = "AUTO";
//信息
public static final String INFO = "INFO";
//错误
public static final String ERROR = "ERROR";
//警告
public static final String WARNING = "WARNING";
//重大事件
public static final String EVENT = "EVENT";
}

@ -0,0 +1,13 @@
package com.engine.salary.elog.service;
import com.engine.salary.elog.entity.dto.LoggerContext;
import com.engine.salary.elog.entity.dto.LoggerDetailContext;
public interface ILocalElogService {
<T> int insertLocalElog(LoggerContext<T> context);
<T> int insertElogDetail(LoggerDetailContext<T> loggerDetailContext, String mainId, String detailTableName);
// <T> void rollBackElog(LoggerContext<T> context);
}

@ -0,0 +1,41 @@
package com.engine.salary.elog.service;
import com.cloudstore.eccom.pc.table.WeaTable;
import com.engine.salary.elog.entity.param.ELogGetLogParam;
import com.engine.salary.elog.entity.param.GetDetailChangesParam;
import com.engine.salary.elog.util.page.PageInfo;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
public interface ILoggerTableService {
PageInfo queryLogs(String data);
WeaTable queryLogsPapi(String data, HttpServletRequest request);
List getDetailChanges(GetDetailChangesParam param);
List getDetailChangesPapi(String module, String function, String mainid, String transMethod, HttpServletRequest request);
List queryLogList(ELogGetLogParam param);
List queryCardLogList(String data);
Map countLog(String module, String function);
List queryDetailLogList(String module, String function, String current, String pageSize, String condition, String mainId);
Map countDestailLog(String module, String function, String mainId);
WeaTable queryElogTraceInfo(String traceId, String module, String function, Integer currentPage, Integer pageSize,String traceTransMethod);
List queryLogInfoByCustom(String module, String function, String field, String value, boolean isDetail);
List queryLogInfoByCustom(String module, String function, String field, String value);
// BatchDocumentMessage downloadLog(String data);
WeaTable getDetailChangePages(String module, String function, String mainid, String detailTransMethod, String current, String pageSize);
}

@ -0,0 +1,435 @@
package com.engine.salary.elog.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.engine.salary.elog.entity.dto.LoggerContext;
import com.engine.salary.elog.entity.dto.LoggerDetailContext;
import com.engine.salary.elog.enums.ElogConsts;
import com.engine.salary.elog.service.ILocalElogService;
import com.engine.salary.elog.util.ElogUtils;
import com.engine.salary.mapper.elog.LocalElogAopDaoMapper;
import com.engine.salary.elog.util.db.IdGenerator;
import com.engine.salary.elog.util.db.MapperProxyFactory;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.CollectionUtils;
import weaver.conn.RecordSet;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
/**
* @ClassName: LocalElogService
* @Description
* @Author tanghj
* @Date 2021/2/24 11:03
*/
public class LocalElogService implements ILocalElogService {
private static final Logger logger = LoggerFactory.getLogger(LocalElogService.class);
private LocalElogAopDaoMapper getLocalElogAopDaoMapper() {
return MapperProxyFactory.getProxy(LocalElogAopDaoMapper.class);
}
// private RestHighLevelClient client;
//
// private LazyRollBack lazyRollBack;
//数据库类型
private static final String databaseId = new RecordSet().getDBType();
/**
* @param context
* @param <T>
* @return
*/
@Override
public <T> int insertLocalElog(LoggerContext<T> context) {
// logger.error("接收到的数据context:{}",JSONObject.toJSONString(context));
// logger.info("接收到数据的时间log_date:{}",context.getDate());
if (StringUtils.isEmpty(context.getUuid())) {
context.setUuid(UUID.randomUUID().toString().replace("-", ""));
}
String cusColumns = "";
String cusValus = "";
if (context.getCustomInfo() != null) {
JSONObject custom = JSONObject.parseObject(JSON.toJSONString(context.getCustomInfo()));
List<String> clobFieldList = context.getClobFieldList();
for (String key : (Set<String>) custom.keySet()) {
cusColumns = cusColumns + ", " + key;
String keystr = custom.getString(key);
//如果keystr包含单引号将单引号去掉
if (StringUtils.isNotEmpty(keystr) && keystr.contains("'")) {
keystr = keystr.replace("'", "''");
}
//如果是Oracle数据库
if (ElogConsts.ORACLE.equals(databaseId)) {
//clob字段集合不为空且包含此字段
if (!CollectionUtils.isEmpty(clobFieldList) && clobFieldList.contains(key)) {
String clobColumnStr = ElogUtils.handleClobColumn(keystr);
cusValus = cusValus + ",TO_CLOB( " + clobColumnStr + " )";
} else if (checkStrIsDate(keystr)) {
//并且字符串为时间类型格式 则进行特殊处理
cusValus = cusValus + ",TO_DATE('" + keystr + "', 'SYYYY-MM-DD HH24:MI:SS')";
} else {
cusValus = cusValus + ",'" + keystr + "'";
}
} else {
cusValus = cusValus + ",'" + keystr + "'";
}
}
}
normalizationContext(context);
String tableName = context.getModuleName() + "_" + context.getFunctionName() + "logs";
//context.setId(IdGenerator.generate());
Integer id = getLocalElogAopDaoMapper().queryElogContextById(context.getId(), tableName);
if (id != null) {
return 1;
}
// logger.info("插入前的数据context:{}",JSONObject.toJSONString(context));
int count = getLocalElogAopDaoMapper().insertElogContext(context, cusColumns, cusValus, tableName);
if (context.getDetailContexts() != null) {
String detailTableName = context.getModuleName() + "_" + context.getFunctionName() + "logs_detail";
insertBatchDetailPrepared(detailTableName, context);
}
return count;
}
/**
*
*
* @param detailTableName
* @param context
*/
private void insertBatchDetailPrepared(String detailTableName, LoggerContext context) {
// 用mapper
//分两种 有无自定义字段
List<LoggerDetailContext> detailContexts = context.getDetailContexts();
Boolean hasCustonInfo = false;
String cusColumns = "";
if (Objects.nonNull(detailContexts.get(0).getCustomDetailInfo())) {
hasCustonInfo = true;
//有自定义明细字段
JSONObject custom = JSONObject.parseObject(JSON.toJSONString(detailContexts.get(0).getCustomDetailInfo()));
for (String key : (Set<String>) custom.keySet()) {
cusColumns = cusColumns + ", " + key;
}
}
for (LoggerDetailContext detailContext : detailContexts) {
if (StringUtils.isNotEmpty(detailContext.getNewValue())) {
String str = detailContext.getNewValue().replaceAll("[\\x{1F600}-\\x{1F64F}\\x{1F300}-\\x{1F5FF}]", "");
detailContext.setNewValue(str);
}
if (StringUtils.isNotEmpty(detailContext.getOldValue())) {
String str = detailContext.getOldValue().replaceAll("[\\x{1F600}-\\x{1F64F}\\x{1F300}-\\x{1F5FF}]", "");
detailContext.setOldValue(str);
}
if (StringUtils.isNotEmpty(detailContext.getNewRealValue())) {
String str = detailContext.getNewRealValue().replaceAll("[\\x{1F600}-\\x{1F64F}\\x{1F300}-\\x{1F5FF}]", "");
detailContext.setNewRealValue(str);
}
if (StringUtils.isNotEmpty(detailContext.getOldRealValue())) {
String str = detailContext.getOldRealValue().replaceAll("[\\x{1F600}-\\x{1F64F}\\x{1F300}-\\x{1F5FF}]", "");
detailContext.setOldRealValue(str);
}
detailContext.setTenant_key(context.getTenant_key());
detailContext.setCreate_time(new Date());
detailContext.setUpdate_time(new Date());
detailContext.setCreator(context.getLogOperator());
detailContext.setId(IdGenerator.generate());
if (hasCustonInfo) {
String cusValus = "";
//如果有明细
JSONObject custom = JSONObject.parseObject(JSON.toJSONString(detailContext.getCustomDetailInfo()));
for (String key : (Set<String>) custom.keySet()) {
String keystr = custom.getString(key);
//如果keystr包含单引号将单引号去掉
if (StringUtils.isNotEmpty(keystr) && keystr.contains("'")) {
keystr = keystr.replace("'", "''");
}
cusValus = cusValus + ",'" + keystr + "'";
}
detailContext.setCusValus(cusValus);
}
}
if (hasCustonInfo) {
getLocalElogAopDaoMapper().insertElogDetailPreparedHasCustonInfo(detailTableName, detailContexts, context.getUuid(), cusColumns);
} else {
getLocalElogAopDaoMapper().insertElogDetailPrepared(detailTableName, detailContexts, context.getUuid());
}
}
private <T> void normalizationContext(LoggerContext<T> context) {
String params = "";
if (StringUtils.isNotEmpty(context.getParamsStr())) {
params = context.getParamsStr();
} else if (context.getParams() != null) {
params = ElogUtils.compress(JSONObject.toJSONString(context.getParams()));
}
context.setParamsStr(params);
if (StringUtils.isBlank(context.getCancelContextStr())) {
context.setCancelContextStr(context.getCancelContext() == null ? "" : JSONObject.toJSONString(context.getCancelContext()));
}
if (StringUtils.isBlank(context.getRedoContextStr())) {
context.setRedoContextStr(context.getRedoContext() == null ? "" : JSONObject.toJSONString(context.getRedoContext()));
}
if (StringUtils.isEmpty(context.getOperatedesc())) {
context.setOperatedesc("");
} else {
//todo 兼容emojo特殊字符 没有时间 先暴力替换
String str = context.getOperatedesc().replaceAll("[\\x{1F600}-\\x{1F64F}\\x{1F300}-\\x{1F5FF}]", "");
context.setOperatedesc(str);
}
if (Objects.isNull(context.getDate())) {
context.setDate(new Date());
}
if (StringUtils.isEmpty(context.getOperator())) {
context.setLogOperator(-1l);
} else {
context.setLogOperator(Long.parseLong(context.getOperator()));
}
if (StringUtils.isEmpty(context.getTargetId())) {
context.setLogTargetid(-1l);
} else {
context.setLogTargetid(Long.parseLong(context.getTargetId()));
}
if (StringUtils.isEmpty(context.getClientIp())) {
context.setClientIp("127.0.0.1");
}
if (Objects.isNull(context.getCreate_time())) {
context.setCreate_time(new Date());
}
if (Objects.isNull(context.getUpdate_time())) {
context.setUpdate_time(new Date());
}
if (Objects.isNull(context.getDelete_type())) {
context.setDelete_type(0);
}
}
private void insertBatchDetailSql(String detailTableName, LoggerContext context) {
String standardField = "id, mainid, uuid, tablename, fieldname, newvalue, oldvalue, fielddesc, showorder, dataid, belongDataid, isDetail, tenant_key,creator, newRealValue, oldRealValue,tableNameDesc, tableNameLabelId,fieldNameLabelId, create_time, update_time";
Boolean hasCustonInfo = false;
StringBuilder sb = new StringBuilder();
sb.append("INSERT INTO ").append(detailTableName).append("(").append(standardField);
//List<LoggerDetailContext> collect = detailContexts.stream().filter(s -> Objects.nonNull(s.getCustomDetailInfo())).collect(Collectors.toList());
List<LoggerDetailContext> detailContexts = context.getDetailContexts();
if (Objects.nonNull(detailContexts.get(0).getCustomDetailInfo())) {
hasCustonInfo = true;
//有自定义明细字段
String cusColumns = "";
JSONObject custom = JSONObject.parseObject(JSON.toJSONString(detailContexts.get(0).getCustomDetailInfo()));
for (String key : (Set<String>) custom.keySet()) {
cusColumns = cusColumns + ", " + key;
}
sb.append(cusColumns);
}
sb.append(")");
if ("oracle".equalsIgnoreCase(databaseId)) {
sb.append(" ").append(String.join(" UNION ALL ", getBatchInsertValue(context, hasCustonInfo, true)));
} else {
sb.append(" VALUES ").append(String.join(",", getBatchInsertValue(context, hasCustonInfo, false)));
}
try {
getLocalElogAopDaoMapper().batchInsertDetail(sb.toString());
} catch (Exception e) {
logger.error("明细批量添加sql是:{},批量插入明细失败,{}", sb.toString(), e.getMessage(), e);
}
}
private List<String> getBatchInsertValue(LoggerContext context, boolean hasCustomInfo, boolean isOracle) {
LocalDateTime localDateTime = LocalDateTime.now();
String nowDate = localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
List<LoggerDetailContext> detailContexts = context.getDetailContexts();
List<String> batchValue = new ArrayList<>();
for (LoggerDetailContext detailContext : detailContexts) {
detailContext.setTenant_key(context.getTenant_key());
detailContext.setCreator(context.getLogOperator());
detailContext.setId(IdGenerator.generate());
StringBuilder sb = new StringBuilder();
sb.append(isOracle ? " SELECT " : " ( ");
sb.append(detailContext.getId())
.append(",'").append(context.getUuid()).append("'")
.append(",'").append(detailContext.getUuid()).append("'")
.append(",'").append(detailContext.getTableName()).append("'")
.append(",'").append(detailContext.getFieldName()).append("'")
.append(",'").append(transferString(detailContext.getNewValue())).append("'")
.append(",'").append(transferString(detailContext.getOldValue())).append("'")
.append(",'").append(detailContext.getFieldDesc()).append("'")
.append(",'").append(detailContext.getShoworder()).append("'")
.append(",'").append(detailContext.getDataid()).append("'")
.append(",'").append(detailContext.getBelongDataid()).append("'")
.append(",'").append(detailContext.getIsDetail()).append("'")
.append(",'").append(detailContext.getTenant_key()).append("'")
.append(",'").append(detailContext.getCreator()).append("'")
.append(",'").append(transferString(detailContext.getNewRealValue())).append("'")
.append(",'").append(transferString(detailContext.getOldRealValue())).append("'")
.append(",'").append(detailContext.getTableNameDesc()).append("'")
.append(",'").append(detailContext.getTableNameLabelId()).append("'")
.append(",'").append(detailContext.getFieldNameLabelId()).append("'")
.append(",").append(handleValue(nowDate, databaseId))
.append(",").append(handleValue(nowDate, databaseId));
if (hasCustomInfo) {
String cusValus = "";
//如果有明细
JSONObject custom = JSONObject.parseObject(JSON.toJSONString(detailContext.getCustomDetailInfo()));
for (String key : (Set<String>) custom.keySet()) {
String keystr = custom.getString(key);
//如果keystr包含单引号将单引号去掉
if (StringUtils.isNotEmpty(keystr) && keystr.contains("'")) {
keystr = keystr.replace("'", "''");
}
cusValus = cusValus + ",'" + keystr + "'";
}
sb.append(cusValus);
}
String sql = isOracle ? sb.append(" from dual ").toString() : sb.append(")").toString();
batchValue.add(sql);
}
return batchValue;
}
private String transferString(String str) {
if (StringUtils.isNotEmpty(str)) {
str = str.replaceAll("#\\{", "\\\\\\\\#{");
if (str.contains("'")) {
str = str.replace("'", "''");
}
}
return str;
}
private String handleValue(String nowDate, String databaseId) {
switch (databaseId) {
case "mysql":
return "'" + nowDate + "'";
case "oracle":
return "TO_DATE('" + nowDate + "','YYYY-MM-DD HH24:MI:SS')";
case "sqlserver":
return "'" + nowDate + "'";
case "postgresql":
return "'" + nowDate + "'";
}
return nowDate;
}
// private <T> void insertESElogCenter(LoggerContext<T> context, String customInfo, String tableName) {
// //将数据转换为ES的数据格式
// LogESDoc logESDoc = LogESDoc.context2Doc(context, customInfo, tableName);
// String json = JSON.toJSONString(logESDoc);
// String elogESTableName = ElogEsUtils.getElogESTableName(true, ElogEsUtils.getDateStr(context.getDate()));
// IndexRequest indexRequest = new IndexRequest(elogESTableName).id(logESDoc.getId().toString());
// indexRequest.source(json, XContentType.JSON);
//
// try {
// client.index(indexRequest, RequestOptions.DEFAULT);
// } catch (IOException e) {
//// logger.info("主表数据添加失败:{}",e.getMessage());
// }
// }
@Override
public <T> int insertElogDetail(LoggerDetailContext<T> loggerDetailContext, String mainId, String detailTableName) {
String cusColumns = "";
String cusValus = "";
if (loggerDetailContext.getCustomDetailInfo() != null) {
JSONObject custom = JSONObject.parseObject(JSON.toJSONString(loggerDetailContext.getCustomDetailInfo()));
for (String key : (Set<String>) custom.keySet()) {
cusColumns = cusColumns + ", " + key;
String keystr = custom.getString(key);
//如果keystr包含单引号将单引号去掉
if (StringUtils.isNotEmpty(keystr) && keystr.contains("'")) {
keystr = keystr.replace("'", "''");
}
cusValus = cusValus + ",'" + keystr + "'";
}
}
loggerDetailContext.setId(IdGenerator.generate());
return getLocalElogAopDaoMapper().insertElogDetail(loggerDetailContext, mainId, cusColumns, cusValus, detailTableName);
}
// @Override
// public <T> void rollBackElog(LoggerContext<T> context) {
// //根据ID 判断数据是否存在
//
// String tableName = getElogTableName(context.getModuleName(), context.getFunctionName());
// Integer id = getLocalElogAopDaoMapper().queryElogContextById(context.getId(), tableName);
// //没查到就直接返回
// if (id == null) {
// lazyRollBack.delayedRollBack(context);
// return;
// }
// getLocalElogAopDaoMapper().rollBackElogById(context.getId(), tableName);
//
//// if (context.getDetailContexts() != null) {
// String detailTableName = context.getModuleName() + "_" + context.getFunctionName() + "logs_detail";
// //根据uuid回滚
// getLocalElogAopDaoMapper().rollBackDetailElogByUUID(context.getUuid(), detailTableName);
//// }
//
//
// }
/**
*
*/
public static Boolean checkStrIsDate(String str) {
if (StringUtils.isBlank(str)) {
return false;
} else {
try {
LocalDateTime.parse(str, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
return true;
} catch (Exception e) {
return false;
}
}
}
private String getElogTableName(String moduleName, String functionName) {
// List<String> list = Arrays.asList("meetingTopic", "meetingService", "meetingDecision", "meetingSign", "meetingSignSet", "meetingMember", "meetingShare");
// if (list.contains(moduleName)) {
// return "meeting"+ "_" + functionName + "logs";
// }
return moduleName + "_" + functionName + "logs";
}
}

@ -0,0 +1,75 @@
package com.engine.salary.elog.threadlocal;
import com.alibaba.fastjson.JSONObject;
import com.engine.salary.elog.entity.dto.LoggerContext;
import java.util.ArrayList;
import java.util.List;
/**
* @Date: 2022/5/18 20:26
* @Author: deli.xu
* @Description:
**/
public class ElogThreadLocal {
private static final ThreadLocal<List<LoggerContext>> loggerContextList = new ThreadLocal<>();
private static final ThreadLocal<JSONObject> requestBody = new ThreadLocal<>();
public static LoggerContext currentLoggerContext() {
List<LoggerContext> list = loggerContextList.get();
if(list == null || list.size() == 0) {
return null;
} else {
return list.get(list.size() -1);
}
}
public static void addLoggerContext(LoggerContext loggerContext) {
if(loggerContext == null)
return;
List<LoggerContext> list = loggerContextList.get();
if(list == null) {
list = new ArrayList<>();
loggerContextList.set(list);
}
list.add(loggerContext);
}
public static List<LoggerContext> getLoggerContextList() {
return loggerContextList.get();
}
public static void clear() {
loggerContextList.set(null);
}
public static void removeLast() {
List<LoggerContext> list = loggerContextList.get();
if(list != null) {
int size = list.size();
if(size > 0)
list.remove(size - 1);
}
}
public static void remove() {
loggerContextList.remove();
}
public static JSONObject getRequestBody() {
return requestBody.get();
}
public static void setRequestBody(JSONObject json) {
requestBody.set(json);
}
public static void removeRequestBody() {
requestBody.remove();
}
}

@ -0,0 +1,92 @@
package com.engine.salary.elog.util;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.engine.salary.elog.entity.dto.ElogBean;
import com.engine.salary.elog.entity.dto.FilterConditionDto;
import com.engine.salary.elog.entity.dto.ShowColumsDto;
import com.engine.salary.elog.enums.ElogConsts;
import java.util.List;
import java.util.Map;
/**
* @Date: 2022/5/18 19:19
* @Author: deli.xu
* @Description: elog
**/
public class ElogServiceUtils {
public static String getTableName(String module, String function) {
return getTableName(module, function, false);
}
public static String getTableName(String module, String function, boolean isDetail) {
String tablename = module + ElogConsts.TABLE_SPACER + function + ElogConsts.TABLE_SUFFIX + (isDetail ? ElogConsts.DETAIL_TABLE_SUFFIX : "");
sqlCheck(tablename);
return tablename;
}
public static void sqlCheck(String value) {
if (value != null) {
if (!value.matches("^[A-Za-z][a-zA-Z0-9_\\.,]{0,31}$")) {
throw new RuntimeException("sqlCheck failed ! value :" + value);
}
}
}
public static ElogBean getElogBean(String data) {
JSONObject datas = JSONObject.parseObject(data);
ElogBean elogBean = new ElogBean();
String module = datas.getString("module");
String function = datas.getString("function");
String pageNum = datas.getString("current");
String pageSize = datas.getString("pageSize");
String searchMap = datas.getString("searchMap");
String transMethod = datas.getString("transMethod");
String authParams = datas.getString("authParams");
String showColums = datas.getString("showColums");
String filterConditions = datas.getString("filterConditions");
String downloadSize = datas.getString("downloadSize");
List<ShowColumsDto> showColumsDtos = JSONArray.parseArray(showColums, ShowColumsDto.class);
List<FilterConditionDto> filterConditionDtos = JSONArray.parseArray(filterConditions, FilterConditionDto.class);
Map authParamsJson = JSONObject.parseObject(authParams);
elogBean.setModule(module);
elogBean.setFunction(function);
elogBean.setCurrent(pageNum);
elogBean.setPageSize(pageSize);
elogBean.setSearchMap(searchMap);
elogBean.setTransMethod(transMethod);
elogBean.setDownloadSize(downloadSize);
elogBean.setShowColumns(showColumsDtos);
elogBean.setFilterConditionDtos(filterConditionDtos);
elogBean.setAuthParamsJson(authParamsJson);
return elogBean;
}
public static int getIntValue(String v) {
return getIntValue(v, -1);
}
public static int getIntValue(String v, int def) {
try {
return Integer.parseInt(v);
} catch (Exception var3) {
return def;
}
}
public static long getLongValue(String v) {
return getLongValue(v, -1l);
}
public static long getLongValue(String v, long def) {
try {
return Long.parseLong(v);
} catch (Exception var3) {
return def;
}
}
}

File diff suppressed because it is too large Load Diff

@ -0,0 +1,513 @@
package com.engine.salary.elog.util;
import com.engine.salary.elog.entity.dto.LoggerContext;
import com.engine.salary.elog.enums.FromTerminalType;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.http.HttpServletRequest;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
/**
* @Date: 2022/5/18 23:34
* @Author: deli.xu
* @Description: elog
**/
public class ElogSeviceUtils {
private static final Logger logger = LoggerFactory.getLogger(ElogSeviceUtils.class);
/*@Autowired
private ComInfoCache comInfoCache;
private static ComInfoCache baseComInfoCache;
@PostConstruct
public void init() {
baseComInfoCache = comInfoCache;
}*/
private static final String TABLE_SPACER = "_";
private static final String TABLE_SUFFIX = "logs";
private static final String DETAIL_TABLE_SUFFIX = "_detail";
public static final String BASE_TABLE = "BASE_ELOG_TABLE";
public static String getTableName(String module, String function) {
return getTableName(module, function, false);
}
public static String getTableName(String module, String function, boolean isDetail) {
String tablename = module + TABLE_SPACER + function + TABLE_SUFFIX + (isDetail ? DETAIL_TABLE_SUFFIX : "");
// SecurityUtil.sqlCheck(tablename);
return tablename;
}
/**
* String
*
* @param c
* @param string
* @param <T>
* @return
*/
public static <T extends Enum<T>> T getEnumFromString(Class<T> c, String string) {
if (c != null && string != null) {
try {
return Enum.valueOf(c, string.trim().toUpperCase());
} catch (IllegalArgumentException ex) {
}
}
return null;
}
/**
* ip
*
* @param request
* @return
*/
public static String getIp(HttpServletRequest request) {
String ipAddress = request.getHeader("x-forwarded-for");
String unknown = "unknown";
if (ipAddress == null || ipAddress.length() == 0 || unknown.equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("Proxy-Client-IP");
}
if (ipAddress == null || ipAddress.length() == 0 || unknown.equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("WL-Proxy-Client-IP");
}
if (ipAddress == null || ipAddress.length() == 0 || unknown.equalsIgnoreCase(ipAddress)) {
ipAddress = request.getRemoteAddr();
String benji = "127.0.0.1";
String bj = "0:0:0:0:0:0:0:1";
if (benji.equals(ipAddress) || bj.equals(ipAddress)) {
///根据网卡取本机配置的IP
InetAddress inet = null;
try {
inet = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
logger.error("UnknownHostException", e);
}
if (inet != null) {
ipAddress = inet.getHostAddress();
}
}
}
///对于通过多个代理的情况第一个IP为客户端真实IP,多个IP按照','分割
int i = 15;
String s = ",";
if (ipAddress != null && ipAddress.length() > i) {
if (ipAddress.indexOf(s) > 0) {
ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
}
}
return ipAddress;
}
/**
*
*
* @param request
* @return
*/
public static String getDevice(HttpServletRequest request) {
return request.getHeader("User-Agent");
}
/**
*
*
* @param context
* @param request
* @return
*/
public static void getFromTerminal(LoggerContext context, HttpServletRequest request) {
String fromTerminal = context.getFromTerminal();
if (StringUtils.isEmpty(fromTerminal)) {
String device = getDevice(request);
String setFT = "";
if (StringUtils.isNotEmpty(device)) {
context.setFromTerminal(getFromTerminal(device));
}
}
}
private static String getTraceId(HttpServletRequest request) {
String traceId = request.getHeader("traceId");
if (StringUtils.isNotBlank(traceId)) {
//System.out.println("traceId:====="+traceId);
return traceId;
}
return "";
}
/**
* @param request
* @return localhost:9080/api/fs/demo/updateReport
*/
public static String getRequestUrl(HttpServletRequest request) {
if (Objects.isNull(request) || Objects.isNull(request.getRequestURL())) {
return null;
}
return request.getRequestURL().toString();
}
/**
* @param request
* @return /api/fs/demo/updateReport
*/
public static String getRequestUri(HttpServletRequest request) {
return request.getRequestURI();
}
/**
* @param request
* @return GET/POST
*/
public static String getRequestMethod(HttpServletRequest request) {
return request.getMethod();
}
// /**
// * 获取当前方法中的日志实体类
// * @return
// */
// public static LoggerContext currentElogContext() {
// return ElogThreadLocal.currentLoggerContext();
// }
public static int getIntValue(String v) {
return getIntValue(v, -1);
}
public static int getIntValue(String v, int def) {
try {
return Integer.parseInt(v);
} catch (Exception var3) {
return def;
}
}
public static long getLongValue(String v) {
return getLongValue(v, -1l);
}
public static long getLongValue(String v, long def) {
try {
return Long.parseLong(v);
} catch (Exception var3) {
return def;
}
}
public static boolean isLongValue(String v) {
try {
Long.parseLong(v);
} catch (Exception e) {
return false;
}
return true;
}
// /**
// * 获取request请求
// *
// * @return
// */
// public static HttpServletRequest getRequest() {
// return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
// }
/**
*
*
* @param obj
* @param def null
* @return
*/
public static String null2String(Object obj, String def) {
return obj == null ? def : obj.toString();
}
public static String null2String(Object obj) {
return null2String(obj, "");
}
public static int getIntValue(Object obj, int def) {
try {
return Integer.parseInt(null2String(obj));
} catch (Exception ex) {
return def;
}
}
// public static Page getPage() {
// HttpServletRequest request = getRequest();
// String num = request.getParameter("pageNum");
// String size = request.getParameter("pageSize");
//
// Page page = new Page(ElogSeviceUtils.getIntValue(num, 1), ElogSeviceUtils.getIntValue(size, 10));
// return page;
// }
// public static void main(String[] args) {
// //System.out.println(getTableName("select", "from"));
// //DataTypeEnum columnTypeEnum = getEnumFromString(DataTypeEnum.class, "varchar");
// }
public static List switchString(List<Map> list) {
if (list != null) {
return list.stream().map(m -> {
Set<Map.Entry> en = m.entrySet();
for (Map.Entry entry : en) {
if (entry.getValue() != null) {
entry.setValue(String.valueOf(entry.getValue()));
}
}
return m;
}).collect(Collectors.toList());
} else {
return list;
}
}
public static List switchComplexString(List<Map> list) {
if (list != null) {
return list.stream().map(m -> {
Iterator<Map.Entry> iterator = m.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry next = iterator.next();
if (next.getValue() != null) {
if (next.getValue() instanceof Map && "parmas".equals(next.getKey())) {
next.setValue(String.valueOf(next.getValue()));
}
if (next.getValue() instanceof List) {
} else {
next.setValue(String.valueOf(next.getValue()));
}
}
}
return m;
}).collect(Collectors.toList());
} else {
return list;
}
}
public static String getTenantKey() {
return "all_teams";
}
public static String getEmployeeId() {
return "";
}
// public static String getUserName() {
//
// String employeeId = getEmployeeId();
// if (StringUtils.isNotEmpty(employeeId)) {
// SimpleEmployee simpleEmployee = null;
// try {
// HrmCommonUtil hrmCommonUtil = (HrmCommonUtil) ApplicationContextProvider.getBean("hrmCommonUtil");
// simpleEmployee = hrmCommonUtil.getSimpleEmployee(ElogSeviceUtils.getLongValue(employeeId));
// } catch (Exception e) {
// logger.error("Exception", e);
// }
// if (simpleEmployee != null) {
// if (StringUtils.isNotBlank(simpleEmployee.getUsername())) {
// return simpleEmployee.getUsername();
// }
// }
// }
//
//
// return "";
// }
// /**
// * 获取rpc信息客户端ip和来源设备
// *
// * @param context
// */
// public static void initRpcInfo(LoggerContext context) {
// String device = "";
// String clientIp = "";
// String traceId = "";
// try {
// device = RpcContext.getContext().getAttachment(EteamsConstant.DEVICE);
// clientIp = RpcContext.getContext().getAttachment(EteamsConstant.CLIENT_IP);
// traceId = RpcContext.getContext().getAttachment(ApmConstant.TRACE_ID);
// logger.info("rpc调用获取到 device:{},clientIp:{},traceId:{}", device, clientIp, traceId);
// } catch (Exception e) {
// logger.error("Exception", e);
// }
// if (StringUtils.isEmpty(context.getDevice()) && StringUtils.isNotEmpty(device)) {
// context.setDevice(device);
// }
// if (StringUtils.isEmpty(context.getFromTerminal()) && StringUtils.isNotEmpty(device)) {
// context.setFromTerminal(getFromTerminal(device));
// }
//
// if (StringUtils.isEmpty(context.getClientIp()) && StringUtils.isNotEmpty(clientIp)) {
// context.setClientIp(clientIp);
// }
// if (StringUtils.isEmpty(context.getBelongMainId()) && StringUtils.isNotEmpty(traceId)) {
// context.setBelongMainId(traceId);
// }
// }
public static String getFromTerminal(String device) {
String setFT = "";
if (StringUtils.isNotEmpty(device)) {
if (!device.contains("wxwork") && device.contains("MicroMessenger")) {//来自微信
setFT = FromTerminalType.MICO_MSG.getCode();
} else if (device.contains("wxwork") && device.contains("MicroMessenger")) {//企业微信
setFT = FromTerminalType.WECHAT.getCode();
} else if (device.contains("iPhone") && device.contains("Mac")) {//来自 Iphone
setFT = FromTerminalType.IOS.getCode();
} else if (device.contains("Mac OS") && !device.contains("iPhone") && device.contains("weapp-pc")) {//来自 mac_client
setFT = FromTerminalType.MAC_CLIENT.getCode();//mac_client
} else if (!device.contains("wxwork") && device.contains("Mobile")) {//移动端
setFT = FromTerminalType.H5.getCode();
} else if (device.contains("Android") && !device.contains("wxwork")) {//来自安卓 包含安卓并且不包含微信
setFT = FromTerminalType.ANDROID.getCode();
} else {//pc
setFT = FromTerminalType.PC.getCode();
}
}
return setFT;
}
/**
* sqlsql
*
* @param condition
* @return
*/
public static String checkConditionSql(String condition) {
if ("AND".equalsIgnoreCase(condition) || "OR".equalsIgnoreCase(condition)) {
return condition;
}
return "AND";
}
public static String checkTypeSql(String type) {
if ("LIKE".equalsIgnoreCase(type) || "IN".equalsIgnoreCase(type) || "!<>".equalsIgnoreCase(type) || "!=".equalsIgnoreCase(type) || "BETWEEN".equalsIgnoreCase(type) || "IS NULL".equalsIgnoreCase(type) || "IS NULL".equalsIgnoreCase(type) || "=".equalsIgnoreCase(type) || "IS NOT NULL".equalsIgnoreCase(type)) {
return type;
}
return "=";
}
/**
* sql
*
* @param value
* @return
*/
public static String checkValSql(String value) {
if (StringUtils.isBlank(value)) {
return "";
}
Pattern p = Pattern.compile("\\s+");
Matcher m = p.matcher(value);
String val = m.replaceAll(" ");
String[] keywords = {"master ", "truncate ", "declare ", "alert ", "create ", "drop ", " version", "show ", "table ", "index ", "insert ", "into ", "from ", "select ", "delete ", "update ", "mid ", "master ", "char ", "union "};
String replaceStr = val.replaceAll(" ", "");
if (replaceStr.contains("1=1") || replaceStr.contains(";")) {
return "-1";
}
int count = 0;
String filterVal = "";
for (String keyddlword : keywords) {
if (val.toLowerCase().contains(keyddlword)) {
count++;
if (count == 1) {
filterVal = keyddlword;
}
}
}
if (count > 2) {
return filterVal;
}
// value = SecurityUtil.ecodeForSql(value);
return value;
}
/**
* -
*
* @param str
* @return desc:version 0.0.1 jdk GZIP base64
* jdk deflate
* snappy hadoop
* xz -
* commonjdkjdk
* weaver jdk
*/
public static String compress(String str) {
if (str == null || str.trim().length() == 0) {
return str;
}
try (ByteArrayOutputStream out = new ByteArrayOutputStream(); GZIPOutputStream gzip = new GZIPOutputStream(out)) {
gzip.write(str.getBytes());
gzip.close();
return Base64.getEncoder().encodeToString(out.toByteArray());
} catch (Exception e) {
logger.error("压缩失败", e.getMessage());
return str;
}
}
/**
*
*
* @param str
* @return
*/
public static String uncompress(String str) {
byte[] decode = Base64.getDecoder().decode(str);
if (str == null || str.trim().length() == 0) {
return str;
}
try (ByteArrayOutputStream out = new ByteArrayOutputStream(); ByteArrayInputStream in = new ByteArrayInputStream(decode)) {
GZIPInputStream ungzip = new GZIPInputStream(in);
byte[] buffer = new byte[2048];
int n;
while ((n = ungzip.read(buffer)) >= 0) {
out.write(buffer, 0, n);
}
return new String(out.toByteArray());
} catch (Exception e) {
logger.error("解缩失败:{}", e.getMessage());
return str;
}
}
public static Boolean checkIsNumber(Object obj) {
if (obj == null) {
return false;
}
return StringUtils.isNumeric(obj.toString());
}
}

@ -0,0 +1,713 @@
package com.engine.salary.elog.util;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.engine.salary.elog.entity.dto.LoggerContext;
import com.engine.salary.elog.enums.FromTerminalType;
import com.engine.salary.elog.threadlocal.ElogThreadLocal;
import org.apache.commons.lang3.StringUtils;
import org.apache.dubbo.common.utils.CollectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import weaver.hrm.User;
import javax.servlet.http.HttpServletRequest;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
/**
* @ClassName: ElogUtils
* @Description TODO
* @Author tanghj
* @Date 2021/3/12 14:17
*/
@Component
public class ElogUtils {
private static final Logger logger = LoggerFactory.getLogger(ElogUtils.class);
private static final String TABLE_SPACER = "_";
private static final String TABLE_SUFFIX = "logs";
private static final String DETAIL_TABLE_SUFFIX = "_detail";
public static final String BASE_TABLE = "BASE_ELOG_TABLE";
public String getApplicationName() {
return applicationName;
}
public void setApplicationName(String applicationName) {
this.applicationName = applicationName;
}
// @Value("${spring.application.name}")
public static String applicationName;
public static String getTableName(String module, String function) {
return getTableName(module, function, false);
}
public static String getTableName(String module, String function, boolean isDetail) {
String tablename = module + TABLE_SPACER + function + TABLE_SUFFIX + (isDetail ? DETAIL_TABLE_SUFFIX : "");
// SecurityUtil.sqlCheck(tablename);
return tablename;
}
/**
* String
*
* @param c
* @param string
* @param <T>
* @return
*/
public static <T extends Enum<T>> T getEnumFromString(Class<T> c, String string) {
if (c != null && string != null) {
try {
return Enum.valueOf(c, string.trim().toUpperCase());
} catch (IllegalArgumentException ex) {
}
}
return null;
}
/**
* ip
*
* @param request
* @return
*/
public static String getIp(HttpServletRequest request) {
String ipAddress = request.getHeader("x-forwarded-for");
String unknown = "unknown";
if (ipAddress == null || ipAddress.length() == 0 || unknown.equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("Proxy-Client-IP");
}
if (ipAddress == null || ipAddress.length() == 0 || unknown.equalsIgnoreCase(ipAddress)) {
ipAddress = request.getHeader("WL-Proxy-Client-IP");
}
if (ipAddress == null || ipAddress.length() == 0 || unknown.equalsIgnoreCase(ipAddress)) {
ipAddress = request.getRemoteAddr();
String benji = "127.0.0.1";
String bj = "0:0:0:0:0:0:0:1";
if (benji.equals(ipAddress) || bj.equals(ipAddress)) {
///根据网卡取本机配置的IP
InetAddress inet = null;
try {
inet = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
logger.error("UnknownHostException", e);
}
if (inet != null) {
ipAddress = inet.getHostAddress();
}
}
}
///对于通过多个代理的情况第一个IP为客户端真实IP,多个IP按照','分割
int i = 15;
String s = ",";
if (ipAddress != null && ipAddress.length() > i) {
if (ipAddress.indexOf(s) > 0) {
ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
}
}
return ipAddress;
}
/**
*
*
* @param request
* @return
*/
public static String getDevice(HttpServletRequest request) {
return request.getHeader("User-Agent");
}
/**
*
*
* @param context
* @param request
* @return
*/
public static void getFromTerminal(LoggerContext context, HttpServletRequest request) {
String fromTerminal = context.getFromTerminal();
if (StringUtils.isEmpty(fromTerminal)) {
String device = getDevice(request);
String setFT = "";
if (StringUtils.isNotEmpty(device)) {
context.setFromTerminal(getFromTerminal(device));
}
}
}
public static void initRequestInfo(HttpServletRequest request, LoggerContext context) {
if (StringUtils.isEmpty(context.getRequestUrl())) {
context.setRequestUrl(getRequestUrl(request));
}
if (StringUtils.isEmpty(context.getRequestUri())) {
context.setRequestUri(getRequestMethod(request) + ":" + getRequestUri(request));
}
//if (context.getParams() == null) {
//默认记录params此参数给true时 或报表服务,不记录
if (!context.getParamsIgnore() && !applicationName.equalsIgnoreCase("weaver-edcreportd-service")) {
context.setParams(getRequstParam(request,context));
}
// }
if (StringUtils.isEmpty(context.getClientIp())) {
context.setClientIp(getIp(request));
}
if (StringUtils.isEmpty(context.getDevice())) {
context.setDevice(getDevice(request));
}
if (StringUtils.isEmpty(context.getFromTerminal())) {
context.setFromTerminal(getFromTerminal(getDevice(request)));
}
if (StringUtils.isEmpty(context.getBelongMainId())) {
context.setBelongMainId(getTraceId(request));
}
}
private static String getTraceId(HttpServletRequest request) {
String traceId = request.getHeader("traceId");
if (StringUtils.isNotBlank(traceId)) {
//System.out.println("traceId:====="+traceId);
return traceId;
}
return "";
}
/**
* @param request
* @return localhost:9080/api/fs/demo/updateReport
*/
public static String getRequestUrl(HttpServletRequest request) {
if (Objects.isNull(request) || Objects.isNull(request.getRequestURL())) {
return null;
}
return request.getRequestURL().toString();
}
/**
* @param request
* @return /api/fs/demo/updateReport
*/
public static String getRequestUri(HttpServletRequest request) {
return request.getRequestURI();
}
/**
* @param request
* @return GET/POST
*/
public static String getRequestMethod(HttpServletRequest request) {
return request.getMethod();
}
public static Map getRequstParam(HttpServletRequest request, LoggerContext context) {
return request2Map(request, context);
}
/**
*
*
* @return
*/
public static LoggerContext currentElogContext() {
return ElogThreadLocal.currentLoggerContext();
}
public static Map<String, Object> request2Map(HttpServletRequest request, LoggerContext context) {
// 参数Map
Map properties = request.getParameterMap();
// 返回值Map
Map<String, Object> returnMap = new HashMap<String, Object>();
Iterator<Map.Entry> entries = properties.entrySet().iterator();
Map.Entry entry;
String name = "";
Object value = null;
while (entries.hasNext()) {
entry = (Map.Entry) entries.next();
name = (String) entry.getKey();
Object valueObj = entry.getValue();
if (null == valueObj) {
value = null;
} else if (valueObj instanceof String[]) {
String[] values = (String[]) valueObj;
if (values.length == 1) {
value = values[0];
} else {
value = values;
}
} else {
value = valueObj.toString();
}
returnMap.put(name, value);
}
//放入ip
returnMap.put("param_ip", getIp(request));
returnMap.put("request_header_user_agent", request.getHeader("user-agent"));
JSONObject body = ElogThreadLocal.getRequestBody();
if (body != null) {
// returnMap.put("request_body", body);
setReturnMapBody(returnMap,context.getParamsBodyKeys(),body);
}
return returnMap;
}
public static void setReturnMapBody(Map<String, Object> returnMap,List<String> keys,JSONObject body) {
//模块没设置则全部记录
if (CollectionUtils.isEmpty(keys)) {
returnMap.put("request_body", body);
}else {
JSONObject newBody = new JSONObject();
for (String key : keys) {
newBody.put(key,body.get(key));
}
returnMap.put("request_body", newBody);
}
}
public static int getIntValue(String v) {
return getIntValue(v, -1);
}
public static int getIntValue(String v, int def) {
try {
return Integer.parseInt(v);
} catch (Exception var3) {
return def;
}
}
public static long getLongValue(String v) {
return getLongValue(v, -1l);
}
public static long getLongValue(String v, long def) {
try {
return Long.parseLong(v);
} catch (Exception var3) {
return def;
}
}
/**
*
*
* @param obj
* @param def null
* @return
*/
public static String null2String(Object obj, String def) {
return obj == null ? def : obj.toString();
}
public static String null2String(Object obj) {
return null2String(obj, "");
}
public static int getIntValue(Object obj, int def) {
try {
return Integer.parseInt(null2String(obj));
} catch (Exception ex) {
return def;
}
}
// public static Page getPage() {
// HttpServletRequest request = getRequest();
// String num = request.getParameter("pageNum");
// String size = request.getParameter("pageSize");
//
// Page page = new Page(ElogUtils.getIntValue(num, 1), ElogUtils.getIntValue(size, 10));
// return page;
// }
// public static void main(String[] args) {
// //System.out.println(getTableName("select", "from"));
// //DataTypeEnum columnTypeEnum = getEnumFromString(DataTypeEnum.class, "varchar");
// }
public static List switchString(List<Map> list) {
if (list != null) {
return list.stream().map(m -> {
Set<Map.Entry> en = m.entrySet();
for (Map.Entry entry : en) {
if (entry.getValue() != null) {
entry.setValue(String.valueOf(entry.getValue()));
}
}
return m;
}).collect(Collectors.toList());
} else {
return list;
}
}
public static List switchComplexString(List<Map> list) {
if (list != null) {
return list.stream().map(m -> {
Iterator<Map.Entry> iterator = m.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry next = iterator.next();
if (next.getValue() != null) {
if (next.getValue() instanceof Map && "parmas".equals(next.getKey())) {
next.setValue(String.valueOf(next.getValue()));
}
if (next.getValue() instanceof List) {
} else {
next.setValue(String.valueOf(next.getValue()));
}
}
}
return m;
}).collect(Collectors.toList());
} else {
return list;
}
}
/**
* rpcip
*
* @param context
*/
public static void initRpcInfo(LoggerContext context) {
User user = context.getUser();
if(user == null){
return;
}
String device = user.getLogintype();
String clientIp = user.getLoginip();
String traceId = "";
if (StringUtils.isEmpty(context.getDevice()) && StringUtils.isNotEmpty(device)) {
context.setDevice(device);
}
if (StringUtils.isEmpty(context.getFromTerminal()) && StringUtils.isNotEmpty(device)) {
context.setFromTerminal(getFromTerminal(device));
}
if (StringUtils.isEmpty(context.getClientIp()) && StringUtils.isNotEmpty(clientIp)) {
context.setClientIp(clientIp);
}
if (StringUtils.isEmpty(context.getBelongMainId()) && StringUtils.isNotEmpty(traceId)) {
context.setBelongMainId(traceId);
}
}
public static String getFromTerminal(String device) {
String setFT = "";
if (StringUtils.isNotEmpty(device)) {
if (!device.contains("wxwork") && device.contains("MicroMessenger")) {//来自微信
setFT = FromTerminalType.MICO_MSG.getCode();
} else if (device.contains("wxwork") && device.contains("MicroMessenger")) {//企业微信
setFT = FromTerminalType.WECHAT.getCode();
} else if (device.contains("iPhone") && device.contains("Mac")) {//来自 Iphone
setFT = FromTerminalType.IOS.getCode();
} else if (device.contains("Mac OS") && !device.contains("iPhone") && device.contains("weapp-pc")) {//来自 mac_client
setFT = FromTerminalType.MAC_CLIENT.getCode();//mac_client
} else if (!device.contains("wxwork") && device.contains("Mobile")) {//移动端
setFT = FromTerminalType.H5.getCode();
} else if (device.contains("Android") && !device.contains("wxwork")) {//来自安卓 包含安卓并且不包含微信
setFT = FromTerminalType.ANDROID.getCode();
} else {//pc
setFT = FromTerminalType.PC.getCode();
}
}
return setFT;
}
/**
* sqlsql
*
* @param condition
* @return
*/
public static String checkConditionSql(String condition) {
if ("AND".equalsIgnoreCase(condition) ||
"OR".equalsIgnoreCase(condition)
) {
return condition;
}
return "AND";
}
public static String checkTypeSql(String type) {
if ("LIKE".equalsIgnoreCase(type) ||
"IN".equalsIgnoreCase(type) ||
"!<>".equalsIgnoreCase(type) ||
"!=".equalsIgnoreCase(type) ||
"BETWEEN".equalsIgnoreCase(type) ||
"IS NULL".equalsIgnoreCase(type) ||
"IS NULL".equalsIgnoreCase(type) ||
"=".equalsIgnoreCase(type) ||
"IS NOT NULL".equalsIgnoreCase(type)) {
return type;
}
return "=";
}
/**
* sql
*
* @param value
* @return
*/
public static String checkValSql(String value) {
Pattern p = Pattern.compile("\\s+");
Matcher m = p.matcher(value);
String val = m.replaceAll(" ");
String[] keywords = {"master", "truncate", "declare", "alert", "create", "drop", "version",
"show", "table", "index", "insert", "into", "from",
"insert", "select", "delete", "update", "chr", "mid", "master", "truncate", "char", "declare", "union"};
int count = 0;
String filterVal = "";
for (String keyddlword : keywords) {
if (val.toLowerCase().contains(keyddlword)) {
count++;
if (count == 1) {
filterVal = keyddlword;
}
}
}
if (count > 2) {
return filterVal;
}
// value = SecurityUtil.ecodeForSql(value);
return value;
}
/**
* -
*
* @param str
* @return desc:version 0.0.1 jdk GZIP base64
* jdk deflate
* snappy hadoop
* xz -
* commonjdkjdk
* weaver jdk
*/
public static String compress(String str) {
if (str == null || str.trim().length() == 0) {
return str;
}
try (ByteArrayOutputStream out = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(out)) {
gzip.write(str.getBytes());
gzip.close();
return Base64.getEncoder().encodeToString(out.toByteArray());
} catch (Exception e) {
logger.error("压缩失败", e.getMessage());
return str;
}
}
/**
*
*
* @param str
* @return
*/
public static String uncompress(String str) {
byte[] decode = Base64.getDecoder().decode(str);
if (str == null || str.trim().length() == 0) {
return str;
}
try (ByteArrayOutputStream out = new ByteArrayOutputStream();
ByteArrayInputStream in = new ByteArrayInputStream(decode)) {
GZIPInputStream ungzip = new GZIPInputStream(in);
byte[] buffer = new byte[2048];
int n;
while ((n = ungzip.read(buffer)) >= 0) {
out.write(buffer, 0, n);
}
return new String(out.toByteArray());
} catch (Exception e) {
logger.error("解缩失败:{}", e.getMessage());
return str;
}
}
public static <T> LoggerContext<T> getEsField(LoggerContext<T> context, String field) {
switch (field.toLowerCase()) {
case "interfacename":
context.setInterfaceName("");
break;
case "operatetype":
context.setOperateType("");
break;
case "operatedesc":
context.setOperatedesc("");
break;
case "params":
context.setParamsStr("ES");
break;
case "clientip":
context.setClientIp("");
break;
case "groupnamelabel":
context.setGroupNameLabel("");
break;
case "redoservice":
context.setRedoService("");
break;
case "redocontext":
context.setRedoContextStr("");
break;
case "cancelservice":
context.setCancelService("");
break;
case "cancelcontext":
context.setCancelContextStr("");
break;
case "device":
context.setDevice("");
break;
case "groupid":
context.setGroupId("");
break;
case "belongmainid":
context.setBelongMainId("");
break;
case "requesturl":
context.setRequestUrl("");
break;
case "requesturi":
context.setRequestUri("");
break;
case "log_result":
context.setResult("");
break;
case "fromterminal":
context.setFromTerminal("");
break;
case "resultdesc":
context.setResultDesc("");
break;
case "old_content":
context.setOld_content("");
break;
case "link_type":
context.setLink_type("");
break;
}
return context;
}
public static String[] getESfields(String value) {
String[] split = value.split(",");
List<String> list = new ArrayList<>();
for (String s : split) {
switch (s.toLowerCase()) {
case "interfacename":
list.add("interfacename");
break;
case "operatetype":
list.add("operatetype");
break;
case "operatedesc":
list.add("operatedesc");
break;
case "params":
list.add("params");
break;
case "clientip":
list.add("clientip");
break;
case "groupnamelabel":
list.add("groupnamelabel");
break;
case "redoservice":
list.add("redoservice");
break;
case "redocontext":
list.add("redocontext");
break;
case "cancelservice":
list.add("cancelservice");
break;
case "cancelcontext":
list.add("cancelcontext");
break;
case "device":
list.add("device");
break;
case "groupid":
list.add("groupid");
break;
case "belongmainid":
list.add("belongmainid");
break;
case "requesturl":
list.add("requesturl");
break;
case "requesturi":
list.add("requesturi");
break;
case "log_result":
list.add("logResult");
break;
case "fromterminal":
list.add("fromterminal");
break;
case "resultdesc":
list.add("resultdesc");
break;
case "old_content":
list.add("oldContent");
break;
case "link_type":
list.add("linkType");
break;
}
}
//list转为数组
if (list.size() > 0) {
String[] strings = list.toArray(new String[list.size()]);
return strings;
}
return null;
}
public static String handleClobColumn(String value) {
// 处理超长字符串oracle插入报错ORA-01704: string literal too long
if (StringUtils.isBlank(value)){
return "";
}
StringBuilder formatValue = new StringBuilder();
String[] split = StrUtil.split(value, 1000);
for (int i = 0; i < split.length; i++) {
formatValue.append("TO_CLOB('").append(split[i]).append("')");
if (i != split.length - 1) {
formatValue.append("||");
}
}
return formatValue.toString();
}
}

@ -0,0 +1,94 @@
package com.engine.salary.elog.util;
import org.apache.commons.lang3.StringUtils;
import java.util.HashMap;
import java.util.Map;
/**
* @ClassName: FieldNameMap
* @Description TODO
* @Author tanghj
* @Date 2021/3/31 14:27
*/
public class FieldNameMap {
private static Map<String, String> mainFieldNameMap = new HashMap<>();
private static Map<String, String> detailFieldNameMap = new HashMap<>();
private static Map<String, Map<String, String>> mainCusFieldNameMap = new HashMap<>();
private static Map<String, Map<String, String>> detailCusFieldNameMap = new HashMap<>();
public static void setMainFieldName(Map<String, String> fieldNameMap) {
mainFieldNameMap.putAll(fieldNameMap);
}
public static void setDetailFieldName(Map<String, String> fieldNameMap) {
detailFieldNameMap.putAll(fieldNameMap);
}
public static void setMainCusFieldName(String module, String function, Map<String, String> fieldNameMap) {
mainCusFieldNameMap.put(getKey(module, function), fieldNameMap);
}
public static void setDetailCusFieldName(String module, String function, Map<String, String> fieldNameMap) {
detailCusFieldNameMap.put(getKey(module, function), fieldNameMap);
}
public static String getMainFieldNameMap(String module, String function, String key) {
String str = key.toLowerCase();
if(mainFieldNameMap.containsKey(str)) {
return StringUtils.isNotEmpty(mainFieldNameMap.get(str)) ? mainFieldNameMap.get(str) : key;
} else {
return getMainCusFieldNameMap(module, function,key);
}
}
public static String getDetailFieldNameMap(String module, String function, String key) {
key = key.toLowerCase();
if(detailFieldNameMap.containsKey(key)) {
return StringUtils.isNotEmpty(detailFieldNameMap.get(key)) ? detailFieldNameMap.get(key) : key;
} else {
return getDetailCusFieldNameMap(module, function, key);
}
}
public static String getMainCusFieldNameMap(String module, String function, String key) {
if(mainCusFieldNameMap.containsKey(getKey(module, function))) {
if(mainCusFieldNameMap.get(getKey(module, function)).containsKey(key)) {
return StringUtils.isNotEmpty(mainCusFieldNameMap.get(getKey(module, function)).get(key)) ?
mainCusFieldNameMap.get(getKey(module, function)).get(key) :
key;
} else {
return key;
}
} else {
return key;
}
}
public static String getDetailCusFieldNameMap(String module, String function, String key) {
if(detailCusFieldNameMap.containsKey(getKey(module, function))) {
if(detailCusFieldNameMap.get(getKey(module, function)).containsKey(key)) {
return StringUtils.isNotEmpty(detailCusFieldNameMap.get(getKey(module, function)).get(key)) ?
detailCusFieldNameMap.get(getKey(module, function)).get(key) :
key;
} else {
return key;
}
} else {
return key;
}
}
private static String getKey(String module, String function) {
return module + "@" + function;
}
}

@ -0,0 +1,631 @@
package com.engine.salary.elog.util;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.parser.Feature;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.engine.salary.elog.annotation.ElogTransform;
import com.engine.salary.elog.async.LoggerMessageListener;
import com.engine.salary.elog.entity.dto.LoggerContext;
import com.engine.salary.elog.entity.dto.LoggerDetailContext;
import com.engine.salary.elog.entity.dto.TableChangeBean;
import com.engine.salary.elog.util.db.IdGenerator;
import com.engine.salary.elog.util.db.IdGenerator;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import weaver.hrm.User;
import java.lang.reflect.Field;
import java.util.*;
/**
* @ClassName: LoggerTemplate
* @Description
* @Author tanghj
* @Date 2021/2/10 14:18
*/
//@Component
public class LoggerTemplate {
protected String function = "common";
protected String module;
protected String logCenterQueue = "Elog_cneterlogQueue";
public static final String AUDITLOGQUEUE = "AuditLog";
public static final String ELOG = "Elog";
protected String localQueue;
protected String moduleName;
protected static String applicationName;
public void setApplicationName(String applicationName) {
LoggerTemplate.applicationName = applicationName;
}
public String getApplicationName() {
return applicationName;
}
private static final Logger logger = LoggerFactory.getLogger(LoggerTemplate.class);
protected static String publishkitGroup;
public void setPublishkitGroup(String publishkitGroup) {
LoggerTemplate.publishkitGroup = publishkitGroup;
}
public String getPublishkitGroup() {
return publishkitGroup;
}
LoggerMessageListener loggerMessageListener = new LoggerMessageListener();
/**
*
*
* @param context
*/
public void write(LoggerContext context) {
this.write(context, true);
}
/**
*
*
* @param context
* @param isLocal true false
*/
public void write(LoggerContext context, boolean isLocal) {
String elogLocalQueue = ELOG + this.applicationName;
if (StringUtils.isEmpty(this.localQueue))
this.localQueue = (StringUtils.isNotEmpty(this.moduleName) ? this.moduleName : elogLocalQueue) + "LocalQueue" + this.publishkitGroup;
try {
handleContext(context);
} catch (Exception e) {
logger.error("handleContext方法异常{}", e.getMessage(), e);
}
loggerMessageListener.receiveold(context);
}
// public void writeLocal(LoggerContext context){
// String elogLocalQueue = ELOG + this.applicationName;
// if(StringUtils.isEmpty(this.localQueue))
// this.localQueue = (StringUtils.isNotEmpty(this.moduleName) ? this.moduleName : elogLocalQueue) + "LocalQueue" + this.publishkitGroup;
// AsyncBean<LoggerContext> asyncBean = new AsyncBean<>();
// handleContext(context);
// if (context.getWeakElogReocrd() && CollectionUtils.isEmpty(context.getDetailContexts() )) {
// logger.info("日志弱控且没有明细记录,不记录日志,modulename:{},functionname:{}",context.getModuleName(),context.getFunctionName());
// return;
// }
//
// try {
// asyncBean.setMessage(context);
// asyncBean.setQueue(localQueue);
// asyncClient.send(asyncBean);
// } catch (Exception e) {
// logger.error("发送writeLocal-mq消息异常{}",e.getMessage(),e);
// }
// }
// public void checkAsyncBean(AsyncBean asyncBean) {
// int length = JSON.toJSON(asyncBean).toString().getBytes(StandardCharsets.UTF_8).length / 1000;
// boolean checkPass = length <= 5120;
// if (!checkPass)
// throw new RuntimeException("消息体超出5M不支持发送!");
// }
// /**
// * 没有明细变化可以不写入日志
// * @param context 日志信息
// * @param isLocal 是否写入本地
// * @param notChangeDetailSendLog 没有明细变化不写入日志
// */
// public void write(LoggerContext context, boolean isLocal,boolean notChangeDetailSendLog){
// String elogLocalQueue = ELOG + this.applicationName;
// if(StringUtils.isEmpty(this.localQueue))
// this.localQueue = (StringUtils.isNotEmpty(this.moduleName) ? this.moduleName : elogLocalQueue) + "LocalQueue";
// AsyncBean<LoggerContext> asyncBean = new AsyncBean<>();
// handleContext(context);
//
// if (notChangeDetailSendLog && (context.getDetailContexts() == null || context.getDetailContexts().size() == 0)) {
// return;
// }
// try {
// asyncBean.setMessage(context);
// asyncBean.setQueue(logCenterQueue);
// asyncClient.send(asyncBean);
// writeHrmLog(context);
// if(isLocal) {
// asyncBean.setQueue(localQueue);
// asyncClient.send(asyncBean);
// }
// } catch (Exception e) {
// logger.error("发送mq消息异常{}",e.getMessage(),e);
// }
//
// }
// /**
// * 支持了向其他模块服务发送业务日志
// * @param context
// * @param isLocal
// * @param moduleName
// */
// public void write(LoggerContext context, boolean isLocal, String moduleName){
//
// if(StringUtils.isNotEmpty(moduleName)) {
// String localQueue = moduleName + "LocalQueue";
// // context.setModuleName(moduleName);
// AsyncBean<LoggerContext> asyncBean = new AsyncBean<>();
// handleContext(context);
// try {
// asyncBean.setMessage(context);
// asyncBean.setQueue(logCenterQueue);
// asyncClient.send(asyncBean);
// writeHrmLog(context);
// if(isLocal) {
// asyncBean.setQueue(localQueue);
// asyncClient.send(asyncBean);
// }
// } catch (Exception e) {
// logger.error("发送mq消息异常:{}",e.getMessage());
// }
// } else {
// write(context, isLocal);
// }
//
// }
// public void writeHrmLog(LoggerContext context) {
// AsyncBean<LoggerContext> asyncBean = new AsyncBean<>();
// handleContext(context);
// asyncBean.setMessage(context);
// //asyncBean.setTopic(WRITEAUDITLOGTOPIC);
// asyncBean.setQueue(AUDITLOGQUEUE);
// asyncClient.send(asyncBean);
//
// }
// /**
// * 支持了向其他模块服务发送业务日志
// * @param context
// * @param isLocal
// * @param moduleName
// */
// public void write(LoggerContext context, boolean isLocal, String moduleName,String functionName,String queueName){
//
// if (StringUtils.isNotEmpty(moduleName) && StringUtils.isNotEmpty(functionName)) {
// context.setModuleName(moduleName);
// context.setFunctionName(functionName);
// this.localQueue = queueName + "LocalQueue";
// AsyncBean<LoggerContext> asyncBean = new AsyncBean<>();
// handleContext(context);
// try {
// asyncBean.setMessage(context);
// asyncBean.setQueue(logCenterQueue);
// asyncClient.send(asyncBean);
// writeHrmLog(context);
// if (isLocal) {
// asyncBean.setQueue(localQueue);
// asyncClient.send(asyncBean);
// }
// } catch (Exception e) {
// logger.error("发送mq消息异常,{}",e);
// }
// } else {
// write(context, isLocal);
// }
//
// }
private void handleContext(LoggerContext context) {
if (StringUtils.isEmpty(context.getModuleName()))
context.setModuleName(module);
if (StringUtils.isEmpty(context.getFunctionName()))
context.setFunctionName(function);
if (!(context.getId() > 0))
context.setId(IdGenerator.generate());
if (StringUtils.isEmpty(context.getUuid())) {
context.setUuid(UUID.randomUUID().toString().replace("-", ""));
}
context.setTempParams(null);
String employeeId = Optional.ofNullable(context.getUser()).map(User::getUID).orElse(0).toString();
String tenantKey = "all_teams";
String userName = Optional.ofNullable(context.getUser()).map(User::getUsername).orElse("").toString();
if (StringUtils.isEmpty(context.getOperator()) && StringUtils.isNotEmpty(employeeId)) {
context.setOperator(employeeId + "");
}
if (StringUtils.isEmpty(context.getTenant_key()) && StringUtils.isNotEmpty(tenantKey)) {
context.setTenant_key(tenantKey);
}
if (StringUtils.isEmpty(context.getOperatorName()) && StringUtils.isNotEmpty(userName)) {
context.setOperatorName(userName);
}
//}
if (StringUtils.isBlank(context.getOperator()) || "null".equals(context.getOperator())) {
context.setOperator("-1");
}
if (StringUtils.isBlank(context.getTargetId()) || "null".equals(context.getTargetId())) {
context.setTargetId("-1");
}
// RequestAttributes requestAttributes = SalaryContext.get().getRequestAttributesSafely();
// if ((requestAttributes instanceof ServletRequestAttributes)) {
// HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
// ElogUtils.initRequestInfo(request, context);
// } else {
// if (StringUtils.isEmpty(context.getRequestUrl())) {
// context.setRequestUrl("非http请求");
// }
// ElogUtils.initRpcInfo(context);
// }
ElogUtils.initRpcInfo(context);
List<TableChangeBean> changeBeans = context.getChangeValues();
List<LoggerDetailContext> valueChangeList = new ArrayList<>();
int showOrder = 0;
if (changeBeans != null)
for (TableChangeBean changeBean : changeBeans) {
if (changeBean != null && (changeBean.getNewValue() != null || changeBean.getOldValue() != null)) {
String uuid = UUID.randomUUID().toString().replace("-", "");
ApiModel apiModel = null;
ElogTransform tableTransform = null;
JSONObject newJo = new JSONObject();
JSONObject oldJo = new JSONObject();
JSONObject valueChange = JSONObject.parseObject(JSONObject.toJSONString(changeBean, SerializerFeature.WriteDateUseDateFormat), Feature.OrderedField);
Field[] fields = null;
if (changeBean.getNewValue() != null) {
apiModel = changeBean.getNewValue().getClass().getAnnotation(ApiModel.class);
tableTransform = changeBean.getNewValue().getClass().getAnnotation(ElogTransform.class);
//fields = changeBean.getNewValue().getClass().getDeclaredFields();
fields = getAllFields(changeBean.getNewValue().getClass());
newJo = valueChange.getJSONObject("newValue");
} else {
apiModel = changeBean.getOldValue().getClass().getAnnotation(ApiModel.class);
tableTransform = changeBean.getOldValue().getClass().getAnnotation(ElogTransform.class);
//fields = changeBean.getOldValue().getClass().getDeclaredFields();
fields = getAllFields(changeBean.getOldValue().getClass());
}
if (changeBean.getOldValue() != null) {
oldJo = valueChange.getJSONObject("oldValue");
}
if ((apiModel != null || tableTransform != null) && fields != null) {
for (Field field : fields) {
if (StringUtils.isEmpty(newJo.getString(field.getName())) && StringUtils.isEmpty(oldJo.getString(field.getName()))) {
continue;
}
if (StringUtils.isNotEmpty(newJo.getString(field.getName())) && newJo.getString(field.getName()).equals(oldJo.getString(field.getName()))) {
continue;
}
ApiModelProperty apiModelProperty = field.getAnnotation(ApiModelProperty.class);
ElogTransform fieldElogTransform = field.getAnnotation(ElogTransform.class);
LoggerDetailContext valueChangeBean = new LoggerDetailContext();
if (fieldElogTransform != null && fieldElogTransform.ignore()) {
continue;
}
//todo 若analyticList为true 且 新旧值属于JSONArray 解析List<T>
if (fieldElogTransform != null && fieldElogTransform.analyticList() && fieldElogTransform.analyticListClass() != void.class) {
analyticListMethod(field, newJo, oldJo, valueChangeList, fieldElogTransform);
continue;
}
valueChangeBean.setUuid(uuid);
valueChangeBean.setTableName(tableTransform != null && StringUtils.isNotEmpty(tableTransform.name()) ? tableTransform.name() : changeBean.getTableName());
valueChangeBean.setTableNameDesc(tableTransform != null && StringUtils.isNotEmpty(tableTransform.tablename()) ? tableTransform.tablename() : "");
valueChangeBean.setTableNameLabelId(tableTransform != null && tableTransform.labelId() != -1 ? tableTransform.labelId() + "" : "");
valueChangeBean.setIsDetail(changeBean.getIsDetail());
valueChangeBean.setFieldName(field.getName());
valueChangeBean.setFieldDesc(fieldElogTransform != null ? fieldElogTransform.name() : apiModelProperty != null ? apiModelProperty.value() : field.getName());
valueChangeBean.setFieldNameLabelId(fieldElogTransform != null ? fieldElogTransform.labelId() + "" : "-1");
valueChangeBean.setDataid(StringUtils.isNotEmpty(changeBean.getDataid()) ? changeBean.getDataid() :
StringUtils.isNoneEmpty(newJo.getString("id")) ? newJo.getString("id") : oldJo.getString("id"));
valueChangeBean.setBelongDataid(StringUtils.isNotEmpty(changeBean.getBelongDataid()) ? changeBean.getBelongDataid() : "");
valueChangeBean.setNewValue(newJo.getString(field.getName()));
valueChangeBean.setOldValue(oldJo.getString(field.getName()));
valueChangeBean.setCreator(-1l);
try {
extracted(newJo, oldJo, field, fieldElogTransform, valueChangeBean);
} catch (Exception e) {
logger.error("转换出错:{}", e);
//System.out.println("转换出错:" + e.getMessage());
}
valueChangeBean.setShoworder(showOrder++);
valueChangeList.add(valueChangeBean);
}
} else {
Set<String> keys = new HashSet<>();
for (String key : (Set<String>) newJo.keySet()) {
keys.add(key);
if (newJo.getString(key).equals(oldJo.getString(key))) {
continue;
}
LoggerDetailContext valueChangeBean = new LoggerDetailContext();
valueChangeBean.setUuid(uuid);
valueChangeBean.setTableName(changeBean.getTableName());
valueChangeBean.setIsDetail(changeBean.getIsDetail());
valueChangeBean.setDataid(StringUtils.isNotEmpty(changeBean.getDataid()) ? changeBean.getDataid() :
StringUtils.isNoneEmpty(newJo.getString("id")) ? newJo.getString("id") : oldJo.getString("id"));
valueChangeBean.setBelongDataid(StringUtils.isNotEmpty(changeBean.getBelongDataid()) ? changeBean.getBelongDataid() : "");
valueChangeBean.setFieldName(key);
valueChangeBean.setFieldDesc(key);
valueChangeBean.setNewValue(newJo.getString(key));
valueChangeBean.setOldValue(oldJo.getString(key));
valueChangeBean.setShoworder(showOrder++);
valueChangeBean.setCreator(-1l);
valueChangeList.add(valueChangeBean);
}
for (String key : (Set<String>) oldJo.keySet()) {
if (keys.contains(key))
continue;
keys.add(key);
if (oldJo.getString(key).equals(newJo.getString(key))) {
continue;
}
LoggerDetailContext valueChangeBean = new LoggerDetailContext();
valueChangeBean.setTableName(changeBean.getTableName());
valueChangeBean.setIsDetail(changeBean.getIsDetail());
valueChangeBean.setFieldName(key);
valueChangeBean.setFieldDesc(key);
valueChangeBean.setNewValue(newJo.getString(key));
valueChangeBean.setOldValue(oldJo.getString(key));
valueChangeBean.setShoworder(showOrder++);
valueChangeBean.setCreator(-1l);
valueChangeList.add(valueChangeBean);
}
}
}
}
if (valueChangeList.size() > 0)
context.setDetailContexts(valueChangeList);
}
private void analyticListMethod(Field field, JSONObject newJo, JSONObject oldJo, List<LoggerDetailContext> valueChangeList, ElogTransform tableTransform) {
JSONArray newValueArr = newJo.get(field.getName()) == null ? new JSONArray() : (JSONArray) newJo.get(field.getName());
JSONArray oldvalueArr = oldJo.get(field.getName()) == null ? new JSONArray() : (JSONArray) oldJo.get(field.getName());
Field[] allFields = getAllFields(tableTransform.analyticListClass());
Boolean oldvalueIsNull = false;
Boolean newvalueIsNull = false;
if (oldvalueArr.size() == 0) {
oldvalueIsNull = true;
}
if (newValueArr.size() == 0) {
newvalueIsNull = true;
}
if ((oldvalueIsNull && newvalueIsNull) || (!oldvalueIsNull && !newvalueIsNull && oldvalueArr.size() != newValueArr.size())) {
//如果新、旧没值或新旧值list数量对不上 直接返回
return;
}
JSONArray foreachArr = oldvalueIsNull ? newValueArr : oldvalueArr;
//遍历list
for (int i = 0; i < foreachArr.size(); i++) {
//默认另一个list关系是一一对应的
JSONObject oldValue = oldvalueIsNull ? new JSONObject() : (JSONObject) oldvalueArr.get(i);
JSONObject newValue = newvalueIsNull ? new JSONObject() : (JSONObject) newValueArr.get(i);
//dataid uuid showOrder
long dataid = IdGenerator.generate();
String uuid = UUID.randomUUID().toString().replace("-", "");
int showOrder = 0;
//遍历字段
for (Field allField : allFields) {
if (StringUtils.isEmpty(newValue.getString(allField.getName())) && StringUtils.isEmpty(oldValue.getString(allField.getName()))) {
continue;
}
if (StringUtils.isNotEmpty(newValue.getString(allField.getName())) && newValue.getString(allField.getName()).equals(oldValue.getString(allField.getName()))) {
continue;
}
ApiModelProperty apiModelProperty = allField.getAnnotation(ApiModelProperty.class);
ElogTransform fieldElogTransform = allField.getAnnotation(ElogTransform.class);
LoggerDetailContext valueChangeBean = new LoggerDetailContext();
valueChangeBean.setUuid(uuid);
valueChangeBean.setTableName(tableTransform != null && StringUtils.isNotEmpty(tableTransform.name()) ? tableTransform.name() : field.getName());
valueChangeBean.setTableNameDesc(tableTransform != null && StringUtils.isNotEmpty(tableTransform.tablename()) ? tableTransform.tablename() : "");
valueChangeBean.setTableNameLabelId(tableTransform != null && tableTransform.labelId() != -1 ? tableTransform.labelId() + "" : "");
valueChangeBean.setIsDetail(1);
valueChangeBean.setFieldName(allField.getName());
valueChangeBean.setNewValue(newValue.getString(allField.getName()));
valueChangeBean.setOldValue(oldValue.getString(allField.getName()));
valueChangeBean.setCreator(-1l);
valueChangeBean.setBelongDataid("");
valueChangeBean.setDataid(String.valueOf(dataid));
if (fieldElogTransform != null) {
if (fieldElogTransform.ignore()) {
continue;
}
valueChangeBean.setFieldDesc(fieldElogTransform != null ? fieldElogTransform.name() : apiModelProperty != null ? apiModelProperty.value() : field.getName());
valueChangeBean.setFieldNameLabelId(fieldElogTransform != null ? fieldElogTransform.labelId() + "" : "-1");
try {
extracted(newValue, oldValue, allField, fieldElogTransform, valueChangeBean);
} catch (Exception e) {
logger.error("转换出错", e);
//System.out.println("转换出错:" + e.getMessage());
}
valueChangeBean.setShoworder(showOrder++);
} else {
valueChangeBean.setFieldDesc(allField.getName());
valueChangeBean.setShoworder(showOrder++);
}
valueChangeList.add(valueChangeBean);
}
}
}
private void extracted(JSONObject newJo, JSONObject oldJo, Field field, ElogTransform fieldElogTransform, LoggerDetailContext valueChangeBean) {
JSONObject jo = null;
if (fieldElogTransform != null && StringUtils.isNotEmpty(fieldElogTransform.valuesKVPairs())) {
jo = JSONObject.parseObject(fieldElogTransform.valuesKVPairs());
if (jo != null) {
valueChangeBean.setNewRealValue(jo.getString(newJo.getString(field.getName())));
valueChangeBean.setOldRealValue(jo.getString(oldJo.getString(field.getName())));
}
}
}
public void setModuleName(String moduleName) {
this.moduleName = moduleName;
}
public void setLocalQueue(String localQueue) {
this.localQueue = localQueue;
}
public String getFunction() {
return function;
}
public void setFunction(String function) {
this.function = function;
}
public String getModule() {
return module;
}
/**
*
*
* @return
*/
public LoggerContext getContext() {
LoggerContext loggerContext = new LoggerContext();
loggerContext.setUuid(UUID.randomUUID().toString().replace("-", ""));
loggerContext.setModuleName(this.module);
loggerContext.setFunctionName(this.function);
return loggerContext;
}
public void setModule(String module) {
this.module = module;
}
// public void setAsyncClient(AsyncClient asyncClient) {
// this.asyncClient = asyncClient;
// }
public static Field[] getAllFields(Class obj) {
Class superclass = obj.getSuperclass();
Field[] superField = null;
//获取父类
if (superclass != Object.class) {
superField = superclass.getDeclaredFields();
}
//获取当前类
Field[] nowfield = obj.getDeclaredFields();
return addFields(superField, nowfield);
}
public static Field[] addFields(Field[] superFields, Field[] fields) {
return ArrayUtils.addAll(superFields, fields);
}
public void write(List<LoggerContext> context, boolean isLocal) {
context.forEach(loggerContext -> {
this.write(loggerContext, isLocal);
});
}
public void write(List<LoggerContext> context) {
context.forEach(loggerContext -> {
this.write(loggerContext);
});
}
// public void writeAsync(LoggerContext context, boolean isLocal){
// String applicationNameBak = this.applicationName;
// String localQueueBak = this.localQueue;
// String moduleNameBak = this.moduleName;
// String pk = this.publishkitGroup;
// LocalRunnable localRunnable = new LocalRunnable() {
// @Override
// public void execute() {
// String localQueueBakBak = localQueueBak;
// String elogLocalQueue = ELOG + applicationNameBak;
// if(StringUtils.isEmpty(localQueueBakBak))
// localQueueBakBak = (StringUtils.isNotEmpty(moduleNameBak) ? moduleNameBak : elogLocalQueue) + "LocalQueue" + pk;
// AsyncBean<LoggerContext> asyncBean = new AsyncBean<>();
// handleContext(context);
// if (context.getWeakElogReocrd() && CollectionUtils.isEmpty(context.getDetailContexts() )) {
// logger.info("日志弱控且没有明细记录,不记录日志,modulename:{},functionname:{}",context.getModuleName(),context.getFunctionName());
// return;
// }
// try {
// asyncBean.setMessage(context);
// asyncBean.setQueue(logCenterQueue);
// checkAsyncBean(asyncBean);//检查消息体大小
// asyncClient.send(asyncBean);
// writeHrmLog(context);
// if(isLocal) {
// asyncBean.setQueue(localQueueBakBak);
// asyncClient.send(asyncBean);
// }
// } catch (Exception e) {
// logger.error("发送mq消息异常{}",e.getMessage(),e);
// }
// }
// };
// ThreadPoolUtil.fixedPoolExecute(ModulePoolEnum.OTHER, "LoggerTemplate_writeAsync", localRunnable);
//
// }
//
// /**
// * 回滚队列
// *
// * @param context
// */
// public void writeRollBack(LoggerContext context){
// String elogRollBackQueue = ELOG + this.applicationName + "RollBackQueue" + this.publishkitGroup;
// AsyncBean<LoggerContext> asyncBean = new AsyncBean<>();
//
// try {
// asyncBean.setMessage(context);
// asyncBean.setQueue(elogRollBackQueue);
// checkAsyncBean(asyncBean);//检查消息体大小
// asyncClient.send(asyncBean);
// } catch (Exception e) {
// logger.error("发送mq消息异常{}",e.getMessage(),e);
// }
// }
}

@ -0,0 +1,21 @@
package com.engine.salary.elog.util;
/**
* @ClassName: LoggerTemplateBuilder
* @Description
* @Author tanghj
* @Date 2021/2/10 14:18
*/
public class LoggerTemplateBuilder {
public static LoggerTemplate build(String module){
return build(module, "common");
}
public static LoggerTemplate build(String module, String function){
LoggerTemplate loggerTemplate = new LoggerTemplate();
loggerTemplate.setFunction(function);
loggerTemplate.setModule(module);
return loggerTemplate;
}
}

@ -0,0 +1,135 @@
package com.engine.salary.elog.util;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import weaver.general.BaseBean;
import weaver.hrm.User;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
/**
*
* <p>Copyright: Copyright (c) 2022</p>
* <p>Company: </p>
*
* @author qiantao
* @version 1.0
**/
@Slf4j
public class ResponseResult<T, R> {
private static final long serialVersionUID = 1L;
private final User user;
public ResponseResult(User user) {
this.user = user;
}
/**
*
*/
public String run(Function<T, R> f, T t) {
try {
return Ok(f.apply(t));
} catch (RuntimeException e) {
log.error("salary api run fail , param {}", t, e);
return Error(e.getMessage());
} catch (Exception e) {
log.error("salary api run fail , param {}", t, e);
return Error("系统异常!");
}
}
/**
*
*/
public String run(Consumer<T> f, T t) {
try {
f.accept(t);
return Ok();
} catch (RuntimeException e) {
log.error("salary api run fail , param {}", t, e);
return Error(e.getMessage());
} catch (Exception e) {
log.error("salary api run fail , param {}", t, e);
return Error("系统异常!", e);
}
}
/**
*
*/
public String run(Supplier<R> f) {
try {
return Ok(f.get());
} catch (RuntimeException e) {
log.error("salary api run fail", e);
return Error(e.getMessage());
} catch (Exception e) {
log.error("salary api run fail", e);
return Error("系统异常!", e);
}
}
private static String getJsonString(Object apidatas) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(apidatas);
}
/**
*
*/
private String Ok() {
Map<String, Object> apidatas = new HashMap<>();
apidatas.put("status", true);
return JSONObject.toJSONString(apidatas, SerializerFeature.DisableCircularReferenceDetect);
}
/**
*
*/
private String Ok(R r) throws JsonProcessingException {
Map<String, Object> apidatas = new HashMap<>();
apidatas.put("status", true);
apidatas.put("data", r);
String success = getJsonString(apidatas);
return success;
}
/**
*
*/
private static String Error(String message) {
Map<String, Object> apidatas = new HashMap<>();
apidatas.put("status", false);
apidatas.put("errormsg", message);
return JSONObject.toJSONString(apidatas, SerializerFeature.DisableCircularReferenceDetect);
}
/**
*
*/
private static String Error(String message, Exception e) {
Map<String, Object> apidatas = new HashMap<>();
apidatas.put("status", false);
apidatas.put("errormsg", message);
apidatas.put("error", e.getMessage());
return JSONObject.toJSONString(apidatas, SerializerFeature.DisableCircularReferenceDetect);
}
}

@ -0,0 +1,50 @@
package com.engine.salary.elog.util;
/**
*
* <p>Copyright: Copyright (c) 2022</p>
* <p>Company: </p>
*
* @author qiantao
* @version 1.0
**/
public class SalaryI18nUtil {
/**
*
*
* @param labelId labelId
* @param defaultLabel
* @return
*/
public static String getI18nLabel(int labelId, String defaultLabel) {
return defaultLabel;
}
//
// /**
// * 获取多语言信息
// *
// * @param tenantKey 租户key
// * @param employeeId 人员id
// * @param labelId 多语言对应的labelId
// * @param defaultLabel 默认中文
// * @return
// */
// public static String getI18nLabel(String tenantKey, Long employeeId, int labelId, String defaultLabel) {
// int languageId = I18nLanguageUtil.getLangId(employeeId);
// return SalaryI18nUtil.getI18nLabel(labelId, languageId, tenantKey, defaultLabel);
// }
//
// /**
// * 获取多语言信息
// *
// * @param simpleEmployee 租户信息
// * @param labelId 多语言对应的labelId
// * @param defaultLabel 默认中文
// * @return
// */
// public static String getI18nLabel(DataCollectionEmployee simpleEmployee, int labelId, String defaultLabel) {
// int languageId = I18nLanguageUtil.getLangId(simpleEmployee.getEmployeeId());
// return SalaryI18nUtil.getI18nLabel(labelId, languageId, simpleEmployee.getTenantKey(), defaultLabel);
// }
}

@ -0,0 +1,46 @@
package com.engine.salary.elog.util.db;
import java.util.concurrent.atomic.AtomicLong;
public class IdGenerator {
private static AtomicLong next = new AtomicLong(1L);
public static final int ID_LENGTH_36 = 36;
public IdGenerator() {
}
public static long generate() {
return System.currentTimeMillis() + next.getAndIncrement();
}
public static String generateId() {
return System.currentTimeMillis() + String.valueOf(next.getAndIncrement());
}
public static String generateStrId() {
return System.currentTimeMillis() + generateStrId(36);
}
public static String generateStrId(int idLength) {
if (idLength >= 1 && idLength <= 36) {
char[] srcChars = new char[]{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'g', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
char[] chars = new char[idLength];
for(int i = 0; i < idLength; ++i) {
if (i != 8 && i != 13 && i != 18 && i != 23) {
if (i == 0) {
chars[i] = srcChars[(int)(Math.random() * 26.0D) % 26];
} else {
chars[i] = srcChars[(int)(Math.random() * 36.0D) % 36];
}
} else {
chars[i] = '_';
}
}
return new String(chars);
} else {
return "";
}
}
}

@ -0,0 +1,79 @@
/**
*
*/
package com.engine.salary.elog.util.db;
import org.apache.ibatis.session.SqlSession;
import weaver.conn.mybatis.MyBatisFactory;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* mapper
* <p>Copyright: Copyright (c) 2022</p>
* <p>Company: </p>
*
* @author qiantao
* @version 1.0
**/
public class MapperProxyFactory implements InvocationHandler {
private Class clazz;
private boolean enableTransactions = false;
private SqlSession session;
public MapperProxyFactory(Class clazz) {
this.clazz = clazz;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Exception {
this.session = MyBatisFactory.sqlSessionFactory.openSession();
try {
Object target = session.getMapper(clazz);
return method.invoke(target, args);
} finally {
if (!enableTransactions) {
session.commit();
session.close();
}
}
}
public Object getProxy() {
ClassLoader loader = Thread.currentThread().getContextClassLoader();
Class<?>[] interfaces = new Class<?>[1];
interfaces[0] = this.clazz;
return Proxy.newProxyInstance(loader, interfaces, this);
}
public Object getProxy(boolean enableTransactions) {
this.enableTransactions = enableTransactions;
return this.getProxy();
}
public void commit() {
if (this.session != null) {
this.session.commit();
this.session.close();
}
}
public void rollback() {
if (this.session != null) {
this.session.rollback();
this.session.close();
}
}
public static <T> T getProxy(Class<T> clazz) {
MapperProxyFactory handle = new MapperProxyFactory(clazz);
return (T) handle.getProxy();
}
public static <T> T getProxy(Class<T> clazz, boolean enableTransactions) {
MapperProxyFactory handle = new MapperProxyFactory(clazz);
return (T) handle.getProxy(enableTransactions);
}
}

@ -0,0 +1,23 @@
package com.engine.salary.elog.util.page;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Column {
String title;
String dataIndex;
String key;
boolean display;
public Column(String title, String dataIndex, String key) {
this.title = title;
this.dataIndex = dataIndex;
this.key = key;
}
}

@ -0,0 +1,9 @@
package com.engine.salary.elog.util.page;
import lombok.Data;
@Data
public class DataSource {
String key;
String title;
}

@ -0,0 +1,62 @@
package com.engine.salary.elog.util.page;
import com.engine.salary.elog.util.page.Column;
import com.engine.salary.elog.util.page.DataSource;
import lombok.Data;
import lombok.ToString;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
@Data
@ToString
public class PageInfo<T> extends com.github.pagehelper.PageInfo<T> {
Class<T> clazz;
public void setColumns(List<Column> columns) {
this.columns.addAll(columns);
}
List<Column> columns = new ArrayList<>();
List<DataSource> dataSource = new ArrayList<>();
public PageInfo() {
}
public PageInfo(Class<T> clazz) {
this.clazz = clazz;
this.columns = buildColumns();
}
public PageInfo(List<T> list) {
super(list);
}
public PageInfo(List<T> list, Class<T> clazz) {
super(list);
this.clazz = clazz;
this.columns = buildColumns();
}
public List<Column> buildColumns() {
if(clazz==null){
return this.columns;
}
Field[] fields = clazz.getDeclaredFields();
for (Field f : fields) {
boolean isanno = f.isAnnotationPresent(TableTitle.class);
if (isanno) {
TableTitle annotation = f.getAnnotation(TableTitle.class);
String title = annotation.title();
String dataIndex = annotation.dataIndex();
String key = annotation.key();
boolean display = annotation.display();
Column column = Column.builder().title(title).dataIndex(dataIndex).key(key).display(display).build();
columns.add(column);
}
}
return columns;
}
}

@ -0,0 +1,117 @@
package com.engine.salary.elog.util.page;
import com.engine.salary.elog.util.page.PageInfo;
import com.github.pagehelper.PageHelper;
import org.apache.commons.collections4.CollectionUtils;
import java.awt.*;
import java.awt.font.FontRenderContext;
import java.awt.geom.Rectangle2D;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class SalaryPageUtil {
public static void start(Integer pageNum, Integer pageSize) {
pageNum = pageNum == null || pageNum <= 0 ? 1 : pageNum;
pageSize = pageSize == null || pageSize <= 0 ? 10 : pageSize;
PageHelper.startPage(pageNum, pageSize);
}
public static <T> com.engine.salary.elog.util.page.PageInfo<T> buildPage(Integer pageNo, Integer pageSize) {
pageNo = pageNo == null || pageNo <= 0 ? 1 : pageNo;
pageSize = pageSize == null || pageSize <= 0 ? 10 : pageSize;
com.engine.salary.elog.util.page.PageInfo<T> pageInfo = new com.engine.salary.elog.util.page.PageInfo<>();
pageInfo.setPageNum(pageNo);
pageInfo.setPageSize(pageSize);
pageInfo.setList(new ArrayList<>());
return pageInfo;
}
public static <T> com.engine.salary.elog.util.page.PageInfo<T> buildPage(Integer pageNo, Integer pageSize, Class<T> clazz) {
pageNo = pageNo == null || pageNo <= 0 ? 1 : pageNo;
pageSize = pageSize == null || pageSize <= 0 ? 10 : pageSize;
com.engine.salary.elog.util.page.PageInfo<T> pageInfo = new com.engine.salary.elog.util.page.PageInfo<>(clazz);
pageInfo.setPageNum(pageNo);
pageInfo.setPageSize(pageSize);
pageInfo.setList(new ArrayList<>());
return pageInfo;
}
public static <T> com.engine.salary.elog.util.page.PageInfo<T> buildPage(Integer pageNo, Integer pageSize, List<T> totalCollection) {
com.engine.salary.elog.util.page.PageInfo<T> pageInfo = new com.engine.salary.elog.util.page.PageInfo<>();
pageInfo.setTotal(totalCollection.size());
totalCollection = subList(pageNo, pageSize, totalCollection);
pageInfo.setPageNum(pageNo);
pageInfo.setPageSize(pageSize);
pageInfo.setList(totalCollection);
return pageInfo;
}
/**
*
*
* @param pageNo
* @param pageSize
* @param source
* @param clazz
* @param <T>
* @return
*/
public static <T> com.engine.salary.elog.util.page.PageInfo<T> buildPage(Integer pageNo, Integer pageSize, List<T> source, Class<T> clazz) {
pageNo = pageNo == null || pageNo <= 0 ? 1 : pageNo;
pageSize = pageSize == null || pageSize <= 0 ? 10 : pageSize;
com.engine.salary.elog.util.page.PageInfo<T> pageInfo = new PageInfo<>(clazz);
pageInfo.setPageNum(pageNo);
pageInfo.setPageSize(pageSize);
pageInfo.setTotal(source == null ? 0 : source.size());
pageInfo.setList(subList(pageNo, pageSize, source));
return pageInfo;
}
/**
*
*
* @param pageNo 1
* @param pageSize
* @param source
* @param <T>
* @return
*/
public static <T> List<T> subList(Integer pageNo, Integer pageSize, List<T> source) {
if (CollectionUtils.isEmpty(source)) {
return Collections.emptyList();
}
pageNo = pageNo == null || pageNo <= 0 ? 1 : pageNo;
pageSize = pageSize == null || pageSize <= 0 ? 10 : pageSize;
int endIndex = pageNo * pageSize;
int startIndex = (pageNo - 1) * pageSize;
startIndex = startIndex < 0 ? 0 : startIndex;
return source.subList(startIndex > source.size() ? source.size() : startIndex,
endIndex > source.size() ? source.size() : endIndex);
}
static Font font = new Font("Arial", Font.PLAIN, 12); // 设置字体样式、大小等属性
static FontRenderContext frc = new FontRenderContext(null, true, false);
// GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
/**
*
* @param chars
* @param width
* @return
*/
public static String selfAdaption(String chars, Integer width) {
if (width != null && width != 0) {
return width + "";
}
Rectangle2D bounds = font.getStringBounds(chars, frc);
int pxLength = (int) Math.ceil(bounds.getWidth());
return pxLength + 55 + "";
}
}

@ -0,0 +1,13 @@
package com.engine.salary.elog.util.page;
import java.lang.annotation.*;
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface TableTitle {
String title();
String dataIndex();
String key();
boolean display() default true;
}

@ -0,0 +1,200 @@
package com.engine.salary.elog.web;
import com.engine.common.util.ServiceUtil;
import com.engine.salary.elog.entity.param.ELogGetLogParam;
import com.engine.salary.elog.entity.param.GetDetailChangesParam;
import com.engine.salary.elog.service.ILoggerTableService;
import com.engine.salary.elog.service.impl.LoggerTableService;
import com.engine.salary.elog.util.ResponseResult;
import com.engine.salary.elog.util.page.PageInfo;
import io.swagger.v3.oas.annotations.parameters.RequestBody;
import weaver.hrm.HrmUserVarify;
import weaver.hrm.User;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import java.util.List;
import java.util.Map;
public class LoggerTableController {
private ILoggerTableService getLoggerTableService(User user) {
return ServiceUtil.getService(LoggerTableService.class, user);
}
/**
*
*
* @param request
* @param response
* @param data
* @return
*/
@POST
@Path("/getLogs")
@Produces(MediaType.APPLICATION_JSON)
public String getLogs(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody String data) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<String, PageInfo>(user).run(getLoggerTableService(user)::queryLogs, data);
}
/**
*
*
* @param request
* @param response
* @param data
* @return
*/
@POST
@Path("/getCardLogs")
@Produces(MediaType.APPLICATION_JSON)
public String carddatas(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody String data) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<String, List<Map<String, Object>>>(user).run(getLoggerTableService(user)::queryCardLogList, data);
}
/**
*
* @param request
* @param response
* @param param
* @return
*/
@POST
@Path("/getDetailChanges")
@Produces(MediaType.APPLICATION_JSON)
public String getDetailChanges(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody GetDetailChangesParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<GetDetailChangesParam, List>(user).run(getLoggerTableService(user)::getDetailChanges, param);
}
// @ApiOperation("获取单条操作记录的更新明细")
// @POST
// @Path("/getDetailChanges")
// @Produces(MediaType.APPLICATION_JSON)
// public String getDetailChanges(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody String data) {
// User user = HrmUserVarify.getUser(request, response);
// return new ResponseResult<String, List<Map<String, Object>>>(user).run(getLoggerTableService(user)::getDetailChanges, data);
// }
//
// /**
// * 获取单条操作记录的更新明细(分页)
// *
// * @param module 服务(模块)名
// * @param function 方法名
// * @param mainid 主键id
// * @param detailTransMethod 转换方法
// * @param current 页码
// * @param pageSize 每页条数
// * @return WeaTable
// */
// @ApiOperation("获取单条操作记录的更新明细(分页)")
// @RequestMapping(path = "getDetailChangePages", method = {RequestMethod.GET, RequestMethod.POST})
// @WeaPermission(publicPermission = true)
// public WeaResult<WeaTable> getDetailChangePages(@PathVariable("module") @ApiParam("服务(模块)名") String module,
// @PathVariable("function") @ApiParam("方法名") String function,
// @RequestParam("mainid") @ApiParam("主键id") String mainid,
// @RequestParam("detailTransMethod") @ApiParam("转换方法") String detailTransMethod,
// @RequestParam("page") @ApiParam("页码") String current,
// @RequestParam("pageSize") @ApiParam("每页条数") String pageSize) {
// return WeaResult.success(getLoggerTableService(user).getDetailChangePages(module, function, mainid, detailTransMethod, current, pageSize));
// }
/**
*
*
* @param request
* @param response
* @param param
* @return
*/
@POST
@Path("/datas")
@Produces(MediaType.APPLICATION_JSON)
public String datas(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody ELogGetLogParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<ELogGetLogParam, List>(user).run(getLoggerTableService(user)::queryLogList, param);
}
// @ApiOperation("获取日志总数")
// @RequestMapping(path = "counts", method = {RequestMethod.GET, RequestMethod.POST})
// @WeaPermission(publicPermission = true)
// public WeaResult<Map<String, Object>> counts(@PathVariable("module") @ApiParam("服务(模块)名") String module,
// @PathVariable("function") @ApiParam("方法名") String function) {
// return WeaResult.success(getLoggerTableService(user).countLog(module, function), "success");
// }
//
// @ApiOperation("获取明细日志列表")
// @RequestMapping(path = "detaildatas", method = {RequestMethod.GET, RequestMethod.POST})
// @WeaPermission(publicPermission = true)
// public WeaResult<List<Map<String, Object>>> detaildatas(@PathVariable("module") @ApiParam("服务(模块)名") String module,
// @PathVariable("function") @ApiParam("方法名") String function,
// @Param("pageSize") @ApiParam("每页多少数据") String pageSize,
// @Param("current") @ApiParam("当前页") String current,
// @Param("mainId") @ApiParam("主表id") String mainId,
// @ApiParam("查询条件") String condition) {
//
// if ("datasecurity".equals(module) && "auditLog".equals(function)) {
// try {
// ILoggerTableService tableService = ApplicationContextProvider.getBean("auditLogService", ILoggerTableService.class);
// if (tableService != null) {
// List<Map<String, Object>> list = tableService.queryDetailLogList(module, function, current, pageSize, condition, mainId);
// return WeaResult.success(list);
// }
// } catch (Exception e) {
//
// }
// }
// List<Map<String, Object>> list = getLoggerTableService(user).queryDetailLogList(module, function, current, pageSize, condition, mainId);
// return WeaResult.success(list);
// }
//
// @ApiOperation("获取日志总数")
// @RequestMapping(path = "detailcounts", method = {RequestMethod.GET, RequestMethod.POST})
// @WeaPermission(publicPermission = true)
// public WeaResult<Map<String, Object>> detailcounts(@PathVariable("module") @ApiParam("服务(模块)名") String module,
// @PathVariable("function") @ApiParam("方法名") String function,
// @Param("mainId") @ApiParam("主表id") String mainId) {
// return WeaResult.success(getLoggerTableService(user).countDestailLog(module, function, mainId), "success");
// }
//
// @ApiOperation("根据traceId获取链路列表")
// @RequestMapping(path = "queryLogTraceInfo", method = {RequestMethod.GET, RequestMethod.POST})
// @WeaPermission(publicPermission = true)
// public WeaResult<WeaTable> queryLogTraceInfo(@PathVariable("module") @ApiParam("服务(模块)名") String module,
// @PathVariable("function") @ApiParam("方法名") String function,
// @Param("traceId") @ApiParam("traceId") String traceId,
// @Param("currentPage") @ApiParam("currentPage") Integer currentPage,
// @Param("pageSize") @ApiParam("pageSize") Integer pageSize,
// @Param("traceTransMethod") @ApiParam("traceTransMethod") String traceTransMethod
// ) {
//
// if ("datasecurity".equals(module) && "auditLog".equals(function)) {
// try {
// ILoggerTableService tableService = ApplicationContextProvider.getBean("auditLogService", ILoggerTableService.class);
// if (tableService != null) {
// return WeaResult.success(tableService.queryElogTraceInfo(traceId, module, function, currentPage, pageSize, traceTransMethod), "success");
// }
// } catch (Exception e) {
//
// }
// }
//
// return WeaResult.success(getLoggerTableService(user).queryElogTraceInfo(traceId, module, function, currentPage, pageSize, traceTransMethod), "success");
// }
//
// @ApiOperation("日志下载")
// @RequestMapping(path = "downloadLog", method = {RequestMethod.GET, RequestMethod.POST})
// @WeaPermission(publicPermission = true)
// public WeaResult<BatchDocumentMessage> downloadLog(@RequestBody(required = false) @ApiParam("数据") String data) {
//
// BatchDocumentMessage message = getLoggerTableService(user).downloadLog(data);
// return WeaResult.success(message);
// }
}

@ -0,0 +1,30 @@
package com.engine.salary.mapper.elog;
import com.engine.salary.elog.entity.dto.TableColumnBean;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
import java.util.Set;
public interface ElogTableCheckerMapper {
Long getVersion(@Param("mainTable") String mainTable);
void recordVersion(@Param("id") long id, @Param("mainTable") String mainTable, @Param("version") long version);
void createMainTable(@Param("mainTable") String mainTable);
void createDetailTable(@Param("detailTable") String detailTable);
List<TableColumnBean> getTableStructure(@Param("tableName") String tableName);
void createElogTable(@Param("createElogSql") String createElogSql);
Map getTableIndex(@Param("tableName") String tableName, @Param("columnName") String columnName);
Map getDataBase();
void createTableIndex(@Param("tableName") String tableName, @Param("columnName") String columnName, @Param("id") long id);
List<String> getAllExistTables(@Param("tableNames") Set<String> tables);
}

@ -0,0 +1,451 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.engine.salary.mapper.elog.ElogTableCheckerMapper">
<insert id="recordVersion">
insert into hrsa_elog_version (id, maintable, version) values (#{id},#{mainTable},#{version})
</insert>
<select id="getVersion" resultType="java.lang.Long">
select version from hrsa_elog_version where maintable = #{mainTable}
</select>
<update id="createMainTable">
create table ${mainTable}
(
id bigint comment 'ID',
create_time datetime default current_timestamp ,
update_time datetime default current_timestamp ,
creator bigint,
delete_type int,
tenant_key varchar(10),
uuid char(36),
log_date datetime default current_timestamp ,
log_operator varchar(50),
operatorName varchar(50),
targetId varchar(50),
targetName text,
modulename varchar(100),
functionname varchar(100),
interfaceName varchar(100),
requesturl varchar(200),
requesturi varchar(200),
operateType varchar(50),
operatetypename varchar(100),
operatedesc varchar(1000),
params longtext,
belongmainid varchar(36),
clientIp varchar(50),
groupid varchar(50),
device varchar(200),
groupNameLabel varchar(500),
redoService varchar(200),
redoContext longtext,
cancelService varchar(200),
cancelContext longtext,
totalruntime bigint,
mainruntime bigint,
log_result varchar(100),
fromterminal varchar(100),
resultdesc text,
old_content varchar(1000),
link_type varchar(20),
link_id bigint,
old_link_id bigint,
PRIMARY KEY (id)
)
</update>
<update id="createMainTable" databaseId="oracle">
create table ${mainTable}
(
id number(*,0) not null primary key,
create_time date default sysdate,
update_time date default sysdate,
creator number(*,0),
delete_type number(*,0),
tenant_key varchar2(10),
uuid varchar2(36),
log_date date default sysdate,
log_operator varchar2(50),
operatorName varchar2(50),
targetId varchar2(50),
targetName varchar2(4000),
modulename varchar2(100),
functionname varchar2(100),
interfaceName varchar2(100),
requesturl varchar2(200),
requesturi varchar2(200),
operateType varchar2(50),
operatetypename varchar2(100),
operatedesc varchar2(1000),
params clob,
belongmainid varchar2(36),
clientIp varchar2(200),
groupid varchar2(50),
device varchar2(200),
groupNameLabel varchar2(500),
redoService varchar2(200),
redoContext varchar2(4000),
cancelService varchar2(200),
cancelContext varchar2(4000),
totalruntime number(*,0),
mainruntime number(*,0),
log_result varchar2(4000),
fromterminal varchar2(100),
resultdesc varchar2(4000),
old_content varchar2(1000),
link_type varchar2(20),
link_id number(*,0),
old_link_id number(*,0)
)
</update>
<update id="createMainTable" databaseId="sqlserver">
create table ${mainTable}
(
id bigint not null primary key,
create_time datetime default getdate(),
update_time datetime default getdate(),
creator bigint default '-1',
delete_type bigint default 0,
tenant_key nvarchar(10),
uuid nvarchar(36),
log_date datetime default getdate(),
device nvarchar(500),
log_operator bigint default '-1',
operatorname nvarchar(100),
targetid bigint default '-1',
targetname nvarchar(3000),
modulename nvarchar(100),
functionname nvarchar(100),
interfacename nvarchar(100),
requesturl nvarchar(200),
requesturi nvarchar(200),
operatetype nvarchar(50),
operatetypename nvarchar(100),
operatedesc nvarchar(3000),
params nvarchar(max),
belongmainid nvarchar(36),
clientip nvarchar(200),
groupid nvarchar(50),
groupnamelabel nvarchar(1000),
redoservice nvarchar(200),
redocontext nvarchar(3000),
cancelservice nvarchar(200),
cancelcontext nvarchar(3000),
totalruntime bigint default 0,
mainruntime bigint default 0,
log_result nvarchar(100),
fromterminal nvarchar(100),
resultdesc nvarchar(3000),
old_content nvarchar(3000),
link_type nvarchar(20),
link_id bigint default 0,
old_link_id bigint default 0
)
</update>
<update id="createMainTable" databaseId="postgresql">
create table ${mainTable}
(
id int8 not null primary key,
create_time timestamp default current_timestamp,
update_time timestamp default current_timestamp,
creator int8,
delete_type int,
tenant_key varchar(10),
uuid varchar(36),
log_date timestamp default current_timestamp,
log_operator varchar(50),
operatorName varchar(50),
targetId varchar(50),
targetName text,
modulename varchar(100),
functionname varchar(100),
interfaceName varchar(100),
requesturl varchar(200),
requesturi varchar(200),
operateType varchar(50),
operatetypename varchar(100),
operatedesc varchar(1000),
params text,
belongmainid varchar(36),
clientIp varchar(200),
groupid varchar(50),
device varchar(200),
groupNameLabel varchar(500),
redoService varchar(200),
redoContext text,
cancelService varchar(200),
cancelContext text,
totalruntime int4,
mainruntime int4,
log_result varchar(100),
fromterminal varchar(100),
resultdesc text,
old_content varchar(1000),
link_type varchar(20),
link_id int4,
old_link_id int4
)
</update>
<update id="createDetailTable">
create table ${detailTable}
(
id bigint not null primary key,
create_time datetime default current_timestamp ,
update_time datetime default current_timestamp ,
creator bigint,
delete_type int,
tenant_key varchar(10),
uuid varchar(36),
mainid varchar(36),
dataid varchar(50),
belongdataid varchar(50),
tableName varchar(200),
tablenamelabelid varchar(50),
tablenamedesc varchar(50),
fieldName varchar(200),
fieldnamelabelid varchar(200),
newValue longtext,
oldValue longtext,
newrealvalue longtext,
oldrealvalue longtext,
fieldDesc varchar(200),
showorder int default 0,
isdetail int default 0
)
</update>
<update id="createDetailTable" databaseId="postgresql">
create table ${detailTable}
(
id int8 not null primary key,
create_time timestamp default current_timestamp ,
update_time timestamp default current_timestamp ,
creator int8,
delete_type int8,
tenant_key varchar(10),
uuid varchar(36),
mainid varchar(36),
dataid varchar(50),
belongdataid varchar(50),
tableName varchar(200),
tablenamelabelid varchar(50),
tablenamedesc varchar(50),
fieldName varchar(200),
fieldnamelabelid varchar(200),
newValue text,
oldValue text,
newrealvalue text,
oldrealvalue text,
fieldDesc varchar(200),
showorder int8 default 0,
isdetail int8 default 0
)
</update>
<update id="createDetailTable" databaseId="oracle">
create table ${detailTable}
(
id number(*,0) not null primary key,
create_time date default sysdate,
update_time date default sysdate,
creator number(*,0),
delete_type number(*,0),
tenant_key varchar2(10),
uuid varchar2(36),
mainid varchar2(36),
dataid varchar2(50),
belongdataid varchar2(50),
tableName varchar2(200),
tablenamelabelid varchar2(50),
tablenamedesc varchar2(50),
fieldName varchar2(200),
fieldnamelabelid varchar2(200),
newValue CLOB,
oldValue CLOB,
newrealvalue CLOB,
oldrealvalue CLOB,
fieldDesc varchar2(200),
showorder number(*,0) default 0,
isdetail number(*,0) default 0
)
</update>
<update id="createDetailTable" databaseId="sqlserver">
create table ${detailTable}
(
id bigint not null primary key,
create_time datetime default getdate(),
update_time datetime default getdate(),
creator bigint,
delete_type bigint,
tenant_key nvarchar(10),
uuid nvarchar(36),
mainid nvarchar(36),
dataid nvarchar(50),
belongdataid nvarchar(50),
tableName nvarchar(200),
tablenamelabelid nvarchar(50),
tablenamedesc nvarchar(50),
fieldName nvarchar(200),
fieldnamelabelid nvarchar(200),
newValue nvarchar(max),
oldValue nvarchar(max),
newrealvalue nvarchar(max),
oldrealvalue nvarchar(max),
fieldDesc varchar(200),
showorder bigint default 0,
isdetail bigint default 0
)
</update>
<!-- 获取表结构 -->
<select id="getTableStructure" resultType="com.engine.salary.elog.entity.dto.TableColumnBean" >
SELECT
COLUMN_NAME columnName,
DATA_TYPE dataTypeStr,
COLUMN_TYPE columnType,
CHARACTER_MAXIMUM_LENGTH fieldLength,
IS_NULLABLE isNullableStr,
COLUMN_DEFAULT columnDefault,
COLUMN_COMMENT columnComment
FROM
INFORMATION_SCHEMA.COLUMNS
where
table_name = #{tableName}
and TABLE_SCHEMA = (select database())
</select>
<select id="getTableStructure" resultType="com.engine.salary.elog.entity.dto.TableColumnBean" databaseId="postgresql">
select *
from pg_tables
where tableowner = (select current_user)
and tablename = #{tableName}
</select>
<select id="getTableStructure" resultType="com.engine.salary.elog.entity.dto.TableColumnBean" databaseId="oracle">
SELECT
COLUMN_NAME columnName
FROM
user_tab_columns
where
TABLE_NAME=UPPER(#{tableName})
</select>
<select id="getTableStructure" resultType="com.engine.salary.elog.entity.dto.TableColumnBean" databaseId="sqlserver">
SELECT
COLUMN_NAME columnName
FROM
INFORMATION_SCHEMA.COLUMNS
where
table_name = #{tableName}
and TABLE_catalog = (select DB_NAME())
</select>
<update id="createElogTable">
${createElogSql}
</update>
<!--查询表索引信息-->
<select id="getTableIndex" resultType="java.util.Map">
SELECT COLUMN_KEY
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = #{tableName}
AND COLUMN_NAME = #{columnName}
AND TABLE_SCHEMA = (SELECT DATABASE()) LIMIT 1
</select>
<select id="getTableIndex" resultType="java.util.Map" databaseId="postgresql">
SELECT COLUMN_KEY
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = #{tableName}
AND COLUMN_NAME = #{columnName}
AND TABLE_SCHEMA = (SELECT current_database()) limit 1 offset 0
</select>
<select id="getTableIndex" resultType="java.util.Map" databaseId="oracle">
SELECT *
FROM user_ind_columns
WHERE TABLE_NAME = UPPER(#{tableName})
AND COLUMN_NAME = UPPER(#{columnName})
</select>
<select id="getTableIndex" resultType="java.util.Map" databaseId="sqlserver">
SELECT a.name,
c.name,
d.name
FROM sysindexes a
JOIN sysindexkeys b ON
a.id = b.id
AND a.indid = b.indid
JOIN sysobjects c ON
b.id = c.id
JOIN syscolumns d ON
b.id = d.id
AND b.colid = d.colid
WHERE a.indid NOT IN (0,
255)
AND c.name = #{tableName}
and d.name = #{columnName}
</select>
<!--查询表索引信息-->
<select id="getDataBase" resultType="java.util.Map">
SELECT DATABASE() as databasename
</select>
<select id="getDataBase" resultType="java.util.Map" databaseId="postgresql">
SELECT current_database() as databasename
</select>
<select id="getDataBase" resultType="java.util.Map" databaseId="oracle">
SELECT user as databasename
</select>
<select id="getDataBase" resultType="java.util.Map" databaseId="sqlserver">
SELECT db_name() as databasename
</select>
<update id="createTableIndex">
create index idx${id} on ${tableName} (${columnName})
</update>
<update id="createTableIndex" databaseId="oracle">
create index idx${id} on ${tableName} (${columnName})
</update>
<update id="createTableIndex" databaseId="sqlserver">
create index idx${id} on ${tableName} (${columnName})
</update>
<select id="getAllExistTables" resultType="java.lang.String">
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = (SELECT DATABASE())
AND TABLE_NAME IN
<foreach collection="tableNames" item="tableName" open="(" separator="," close=")">
#{tableName}
</foreach>
</select>
<select id="getAllExistTables" resultType="java.lang.String" databaseId="oracle">
SELECT
TABLE_NAME
FROM
USER_TABLES
WHERE TABLE_NAME IN
<foreach collection="tableNames" item="tableName" open="(" separator="," close=")">
UPPER(#{tableName})
</foreach>
</select>
<select id="getAllExistTables" resultType="java.lang.String" databaseId="sqlserver">
SELECT table_name
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_catalog = (select DB_NAME())
AND table_name IN
<foreach collection="tableNames" item="tableName" open="(" separator="," close=")">
#{tableName}
</foreach>
</select>
<select id="getAllExistTables" resultType="java.lang.String" databaseId="postgresql">
SELECT tablename
FROM pg_tables
WHERE tableowner = (select current_user)
AND tablename IN
<foreach collection="tableNames" item="tableName" open="(" separator="," close=")">
#{tableName}
</foreach>
</select>
</mapper>

@ -0,0 +1,45 @@
package com.engine.salary.mapper.elog;
import com.engine.salary.elog.entity.dto.LoggerContext;
import com.engine.salary.elog.entity.dto.LoggerDetailContext;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @ClassName: LocalElogAopDaoMapper
* @Description
* @Author tanghj
* @Date 2021/2/24 9:35
*/
public interface LocalElogAopDaoMapper {
int insertElogContext(@Param(value="logContent") LoggerContext loggerContext,
@Param(value="cusColumns")String cusColumns ,
@Param(value="cusValus")String cusValus,
@Param(value="tableName")String tableName);
int insertElogDetail(@Param(value="detailContext") LoggerDetailContext loggerDetailContext,
@Param(value="mainid")String mainid,
@Param(value="cusColumns")String cusColumns ,
@Param(value="cusValus")String cusValus,
@Param(value="detailTableName")String tableName);
Integer queryElogContextById(@Param(value="id")Long id,
@Param(value="tableName")String tableName);
void batchInsertDetail(@Param("sql") String sql);
void insertElogDetailPrepared(@Param("tablename") String detailTableName, @Param("list") List<LoggerDetailContext> detailContexts, @Param("mainid") String mainid);
void insertElogDetailPreparedHasCustonInfo(@Param("tablename") String detailTableName, @Param("list") List<LoggerDetailContext> detailContexts, @Param("mainid") String mainid, @Param(value="cusColumns")String cusColumns);
void rollBackElogById(@Param("id") Long id,@Param("tableName") String tableName);
void rollBackDetailElogByUUID(@Param("mainid") String uuid,@Param("tableName") String detailTableName);
}

@ -0,0 +1,170 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.engine.salary.mapper.elog.LocalElogAopDaoMapper">
<insert id="insertElogContext">
insert into ${tableName} (id, uuid, log_date, tenant_key, modulename, functionName, operatetypename,
log_operator, operatorname, targetid, targetname, interfacename, operatetype,
operatedesc,
params, clientIp, groupnamelabel, redoservice, redocontext, cancelservice,
cancelcontext, device, groupid,
belongMainId, requestUrl, requestUri, totalRunTime, mainRunTime, log_result,
fromTerminal, resultDesc, old_content,
link_type, link_id, old_link_id, create_time, update_time, delete_type, creator
${cusColumns})
values (#{logContent.id}, #{logContent.uuid}, #{logContent.date},
#{logContent.tenant_key}, #{logContent.moduleName}, #{logContent.functionName},
#{logContent.operateTypeName}, #{logContent.logOperator}, #{logContent.operatorName},
#{logContent.logTargetid}
, #{logContent.targetName}, #{logContent.interfaceName}, #{logContent.operateType},
#{logContent.operatedesc},
#{logContent.paramsStr}, #{logContent.clientIp}, #{logContent.groupNameLabel},
#{logContent.redoService},
#{logContent.redoContextStr}, #{logContent.cancelService}, #{logContent.cancelContextStr},
#{logContent.device}, #{logContent.groupId},
#{logContent.belongMainId}, #{logContent.requestUrl}, #{logContent.requestUri},
#{logContent.totalRunTime}, #{logContent.mainRunTime}
, #{logContent.result}, #{logContent.fromTerminal}, #{logContent.resultDesc},
#{logContent.old_content}, #{logContent.link_type}
, #{logContent.link_id}, #{logContent.old_link_id}, #{logContent.create_time},
#{logContent.update_time}, #{logContent.delete_type}, #{logContent.logOperator}
${cusValus})
</insert>
<insert id="insertElogDetail">
insert into ${detailTableName} (id, mainid, uuid, tablename, fieldname, newvalue, oldvalue,
fielddesc, showorder, dataid, belongDataid, isDetail, tenant_key, creator,
newRealValue, oldRealValue, tableNameDesc,
tableNameLabelId, fieldNameLabelId, create_time, update_time
${cusColumns})
values (#{detailContext.id}, #{mainid}, #{detailContext.uuid}, #{detailContext.tableName},
#{detailContext.fieldName}, #{detailContext.newValue},
#{detailContext.oldValue}, #{detailContext.fieldDesc}, #{detailContext.showorder},
#{detailContext.dataid},
#{detailContext.belongDataid}, #{detailContext.isDetail}, #{detailContext.tenant_key},
#{detailContext.creator}, #{detailContext.newRealValue}
, #{detailContext.oldRealValue}, #{detailContext.tableNameDesc}, #{detailContext.tableNameLabelId},
#{detailContext.fieldNameLabelId}, #{detailContext.create_time}, #{detailContext.update_time}
${cusValus})
</insert>
<insert id="batchInsertDetail">
${sql}
</insert>
<select id="queryElogContextById" resultType="java.lang.Integer">
select 1
from ${tableName}
where id = #{id}
</select>
<insert id="insertElogDetailPrepared">
insert into ${tablename} (id, mainid, uuid, tablename, fieldname, newvalue, oldvalue,
fielddesc, showorder, dataid, belongDataid, isDetail, tenant_key,creator, newRealValue,
oldRealValue,tableNameDesc,
tableNameLabelId,fieldNameLabelId, create_time, update_time,delete_type)
values
<foreach collection="list" item="detailContext" separator=",">
( #{detailContext.id},#{mainid}, #{detailContext.uuid}, #{detailContext.tableName},
#{detailContext.fieldName}, #{detailContext.newValue},
#{detailContext.oldValue}, #{detailContext.fieldDesc}, #{detailContext.showorder}, #{detailContext.dataid},
#{detailContext.belongDataid}, #{detailContext.isDetail},
#{detailContext.tenant_key},#{detailContext.creator}, #{detailContext.newRealValue}
, #{detailContext.oldRealValue}, #{detailContext.tableNameDesc}, #{detailContext.tableNameLabelId},
#{detailContext.fieldNameLabelId}
, #{detailContext.create_time}, #{detailContext.update_time}, #{detailContext.delete_type})
</foreach>
</insert>
<insert id="insertElogDetailPrepared" databaseId="sqlserver">
<foreach collection="list" item="detailContext" separator=";">
insert into ${tablename} (id, mainid, uuid, tablename, fieldname, newvalue, oldvalue,
fielddesc, showorder, dataid, belongDataid, isDetail, tenant_key,creator, newRealValue,
oldRealValue,tableNameDesc,
tableNameLabelId,fieldNameLabelId, create_time, update_time,delete_type)
VALUES
(
#{detailContext.id},#{mainid}, #{detailContext.uuid}, #{detailContext.tableName},
#{detailContext.fieldName}, #{detailContext.newValue},
#{detailContext.oldValue}, #{detailContext.fieldDesc}, #{detailContext.showorder}, #{detailContext.dataid},
#{detailContext.belongDataid}, #{detailContext.isDetail},
#{detailContext.tenant_key},#{detailContext.creator}, #{detailContext.newRealValue}
, #{detailContext.oldRealValue}, #{detailContext.tableNameDesc}, #{detailContext.tableNameLabelId},
#{detailContext.fieldNameLabelId}
, #{detailContext.create_time}, #{detailContext.update_time}, #{detailContext.delete_type}
)
</foreach>
</insert>
<insert id="insertElogDetailPreparedHasCustonInfo">
insert into ${tablename} (id, mainid, uuid, tablename, fieldname, newvalue, oldvalue,
fielddesc, showorder, dataid, belongDataid, isDetail, tenant_key,creator, newRealValue,
oldRealValue,tableNameDesc,
tableNameLabelId,fieldNameLabelId, create_time, update_time
${cusColumns})
values
<foreach collection="list" item="detailContext" separator=",">
( #{detailContext.id},#{mainid}, #{detailContext.uuid}, #{detailContext.tableName},
#{detailContext.fieldName}, #{detailContext.newValue},
#{detailContext.oldValue}, #{detailContext.fieldDesc}, #{detailContext.showorder}, #{detailContext.dataid},
#{detailContext.belongDataid}, #{detailContext.isDetail},
#{detailContext.tenant_key},#{detailContext.creator}, #{detailContext.newRealValue}
, #{detailContext.oldRealValue}, #{detailContext.tableNameDesc}, #{detailContext.tableNameLabelId},
#{detailContext.fieldNameLabelId}
, #{detailContext.create_time}, #{detailContext.update_time}
${detailContext.cusValus})
</foreach>
</insert>
<update id="rollBackElogById">
update ${tableName}
set delete_type = 3
where id = #{id}
</update>
<update id="rollBackDetailElogByUUID">
update ${tableName}
set delete_type = 3
where mainid = #{mainid}
</update>
<insert id="insertElogDetailPrepared" databaseId="oracle">
insert into ${tablename} (id, mainid, uuid, tablename, fieldname, newvalue, oldvalue,
fielddesc, showorder, dataid, belongDataid, isDetail, tenant_key,creator, newRealValue,
oldRealValue,tableNameDesc,
tableNameLabelId,fieldNameLabelId, create_time, update_time,delete_type)
<foreach collection="list" item="detailContext" separator=" union all ">
SELECT #{detailContext.id},#{mainid}, #{detailContext.uuid}, #{detailContext.tableName},
#{detailContext.fieldName}, #{detailContext.newValue},
#{detailContext.oldValue}, #{detailContext.fieldDesc}, #{detailContext.showorder}, #{detailContext.dataid},
#{detailContext.belongDataid}, #{detailContext.isDetail},
#{detailContext.tenant_key},#{detailContext.creator}, #{detailContext.newRealValue}
, #{detailContext.oldRealValue}, #{detailContext.tableNameDesc}, #{detailContext.tableNameLabelId},
#{detailContext.fieldNameLabelId}
, #{detailContext.create_time}, #{detailContext.update_time}, #{detailContext.delete_type}
FROM DUAL
</foreach>
</insert>
<insert id="insertElogDetailPreparedHasCustonInfo" databaseId="oracle">
insert into ${tablename} (id, mainid, uuid, tablename, fieldname, newvalue, oldvalue,
fielddesc, showorder, dataid, belongDataid, isDetail, tenant_key,creator, newRealValue,
oldRealValue,tableNameDesc,
tableNameLabelId,fieldNameLabelId, create_time, update_time
${cusColumns})
<foreach collection="list" item="detailContext" separator=" union all ">
SELECT #{detailContext.id},#{mainid}, #{detailContext.uuid}, #{detailContext.tableName},
#{detailContext.fieldName}, #{detailContext.newValue},
#{detailContext.oldValue}, #{detailContext.fieldDesc}, #{detailContext.showorder}, #{detailContext.dataid},
#{detailContext.belongDataid}, #{detailContext.isDetail},
#{detailContext.tenant_key},#{detailContext.creator}, #{detailContext.newRealValue}
, #{detailContext.oldRealValue}, #{detailContext.tableNameDesc}, #{detailContext.tableNameLabelId},
#{detailContext.fieldNameLabelId}
, #{detailContext.create_time}, #{detailContext.update_time}
${detailContext.cusValus}
FROM DUAL
</foreach>
</insert>
</mapper>

@ -0,0 +1,219 @@
package com.engine.salary.mapper.elog;
import com.engine.salary.elog.entity.dto.LoggerContext;
import com.engine.salary.elog.entity.dto.ReadInfoEntity;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* @ClassName: LocalElogDao
* @Description
* @Author tanghj
* @Date 2021/2/24 9:35
*/
public interface LocalElogDaoMapper {
List<Map<String, Object>> queryCardElogList(@Param(value = "logContent") LoggerContext loggerContext,
@Param("limit") String limit,
@Param(value = "tableName") String tableName,
@Param(value = "conditionSql") String conditionSql);
List<Map> queryElogList(@Param(value = "page") Page page,
@Param(value = "logContent") LoggerContext loggerContext,
@Param("limit") String limit,
@Param(value = "tableName") String tableName,
@Param(value = "conditionSql") String conditionSql,
@Param(value = "columns") String columns);
List<Map> queryElogListPapi(@Param(value = "page") Page page,
@Param(value = "logContent") LoggerContext loggerContext,
@Param("limit") String limit,
@Param(value = "tableName") String tableName,
@Param(value = "conditionSql") String conditionSql,
@Param(value = "columns") String columns);
// @WeaDataPermission(mainDataTable = "#{mainDataTable}",
// permissionId = "#{permissionId}",
// permissionType = "#{permissionType}",
// mainDataTableAlias = "#{mainDataTableAlias}",
// primaryKey = "#{primaryKey}",
// permissionTargetId = "#{permissionTargetId}",
// permissionConfigSourceId = "#{permissionConfigSourceId}",
// permissionExcept = "true")
List<Map> queryElogList(@Param(value = "page") Page page, @Param(value = "logContent") LoggerContext loggerContext,
@Param("limit") String limit,
@Param(value = "tableName") String tableName,
@Param(value = "conditionSql") String conditionSql,
@Param(value = "mainDataTable") String mainDataTable,
@Param(value = "permissionId") String permissionId,
@Param(value = "permissionType") String permissionType,
@Param(value = "mainDataTableAlias") String mainDataTableAlias,
@Param(value = "primaryKey") String primaryKey,
@Param(value = "permissionTargetId") String permissionTargetId,
@Param(value = "permissionConfigSourceId") String permissionConfigSourceId,
@Param(value = "columns") String columns
);
// @WeaDataPermission(mainDataTable = "#{mainDataTable}",
// permissionId = "#{permissionId}",
// permissionType = "#{permissionType}",
// mainDataTableAlias = "#{mainDataTableAlias}",
// primaryKey = "#{primaryKey}",
// permissionExcept = "true")
List<Map> queryElogListPapi(@Param(value = "page") Page page, @Param(value = "logContent") LoggerContext loggerContext,
@Param("limit") String limit,
@Param(value = "tableName") String tableName,
@Param(value = "conditionSql") String conditionSql,
@Param(value = "mainDataTable") String mainDataTable,
@Param(value = "permissionId") String permissionId,
@Param(value = "permissionType") String permissionType,
@Param(value = "mainDataTableAlias") String mainDataTableAlias,
@Param(value = "primaryKey") String primaryKey,
@Param(value = "columns") String columns
);
List<Map> queryAllChanges(@Param(value = "tableName") String tableName, @Param("mainid") String mainid);
Map<String, Object> elogCount(@Param(value = "logContent") LoggerContext loggerContext,
@Param(value = "tableName") String tableName,
@Param(value = "conditionSql") String conditionSql);
Map<String, Object> elogCountPapi(@Param(value = "logContent") LoggerContext loggerContext,
@Param(value = "tableName") String tableName,
@Param(value = "conditionSql") String conditionSql);
// @WeaDataPermission(mainDataTable = "#{mainDataTable}",
// permissionId = "#{permissionId}",
// permissionType = "#{permissionType}",
// mainDataTableAlias = "#{mainDataTableAlias}",
// primaryKey = "#{primaryKey}",
// permissionTargetId = "#{permissionTargetId}",
// permissionConfigSourceId = "#{permissionConfigSourceId}",
// permissionExcept = "true")
Map<String, Object> elogCountByMorePermission(@Param(value = "logContent") LoggerContext loggerContext,
@Param(value = "tableName") String tableName,
@Param(value = "conditionSql") String conditionSql,
@Param(value = "mainDataTable") String mainDataTable,
@Param(value = "permissionId") String permissionId,
@Param(value = "permissionType") String permissionType,
@Param(value = "mainDataTableAlias") String mainDataTableAlias,
@Param(value = "primaryKey") String primaryKey,
@Param(value = "permissionTargetId") String permissionTargetId,
@Param(value = "permissionConfigSourceId") String permissionConfigSourceId);
// @WeaDataPermission(mainDataTable = "#{mainDataTable}",
// permissionId = "#{permissionId}",
// permissionType = "#{permissionType}",
// mainDataTableAlias = "#{mainDataTableAlias}",
// primaryKey = "#{primaryKey}",
// permissionTargetId = "#{permissionTargetId}",
// permissionConfigSourceId = "#{permissionConfigSourceId}",
// permissionCount = "count(*)",
// permissionExcept = "true")
Long elogCountOnlyNum(@Param(value = "logContent") LoggerContext loggerContext,
@Param(value = "tableName") String tableName,
@Param(value = "conditionSql") String conditionSql,
@Param(value = "mainDataTable") String mainDataTable,
@Param(value = "permissionId") String permissionId,
@Param(value = "permissionType") String permissionType,
@Param(value = "mainDataTableAlias") String mainDataTableAlias,
@Param(value = "primaryKey") String primaryKey,
@Param(value = "permissionTargetId") String permissionTargetId,
@Param(value = "permissionConfigSourceId") String permissionConfigSourceId);
// @WeaDataPermission(mainDataTable = "#{mainDataTable}",
// permissionId = "#{permissionId}",
// permissionType = "#{permissionType}",
// mainDataTableAlias = "#{mainDataTableAlias}",
// primaryKey = "#{primaryKey}",
// permissionExcept = "true")
Map<String, Object> elogCount(@Param(value = "logContent") LoggerContext loggerContext,
@Param(value = "tableName") String tableName,
@Param(value = "conditionSql") String conditionSql,
@Param(value = "mainDataTable") String mainDataTable,
@Param(value = "permissionId") String permissionId,
@Param(value = "permissionType") String permissionType,
@Param(value = "mainDataTableAlias") String mainDataTableAlias,
@Param(value = "primaryKey") String primaryKey);
// @WeaDataPermission(mainDataTable = "#{mainDataTable}",
// permissionId = "#{permissionId}",
// permissionType = "#{permissionType}",
// mainDataTableAlias = "#{mainDataTableAlias}",
// primaryKey = "#{primaryKey}",
// permissionExcept = "true")
Map<String, Object> elogCountPapi(@Param(value = "logContent") LoggerContext loggerContext,
@Param(value = "tableName") String tableName,
@Param(value = "conditionSql") String conditionSql,
@Param(value = "mainDataTable") String mainDataTable,
@Param(value = "permissionId") String permissionId,
@Param(value = "permissionType") String permissionType,
@Param(value = "mainDataTableAlias") String mainDataTableAlias,
@Param(value = "primaryKey") String primaryKey);
List<Map> queryDetailElogList(@Param(value = "logContent") LoggerContext loggerContext,
@Param("limit") String limit,
@Param(value = "tableName") String tableName,
@Param(value = "conditionSql") String conditionSql);
Map<String, Object> elogDetailCount(@Param(value = "logContent") LoggerContext loggerContext,
@Param(value = "tableName") String tableName,
@Param(value = "conditionSql") String conditionSql);
// List<SimpleEmployee> queryOperators(@Param(value = "tableName") String tableName,
// @Param(value = "targetId") String targetId,
// @Param(value = "operateType") String operateType);
List<ReadInfoEntity> queryReadInfoOperators(@Param(value = "tableName") String tableName,
@Param(value = "targetId") String targetId,
@Param(value = "operateType") String operateType,
@Param(value = "flag") Boolean flag);
List<ReadInfoEntity> queryReadInfoDateOperators(@Param(value = "tableName") String tableName,
@Param(value = "targetId") String targetId,
@Param(value = "operateType") String operateType,
@Param(value = "flag") Boolean flag,
@Param(value = "startDate") String startDate,
@Param(value = "endDate") String endDate);
List<Map> queryAllMainData(@Param(value = "tableName") String tableName, @Param("uuid") String uuid);
List<Map> queryAllMainChanges(@Param(value = "tableName") String tableName, @Param("mainid") String mainid);
List<Map> queryAllDetailChanges(@Param(value = "tableName") String tableName, @Param("mainid") String mainid);
Integer queryElogContextById(@Param(value = "id") Long id,
@Param(value = "tableName") String tableName);
List<Map> queryElogTraceInfo(@Param(value = "traceId") String traceId,
@Param(value = "tableName") String tableName,
@Param(value = "offset") Integer offset,
@Param(value = "pageSize") Integer pageSize);
int queryElogTraceInfoCount(@Param(value = "traceId") String traceId,
@Param(value = "tableName") String tableName);
List queryLogInfoByCustom(@Param(value = "tableName") String tableName,
@Param(value = "sql") String sql);
List queryAllChangesData(@Param("tableName") String tableName, @Param("mainid") String mainid);
List<ReadInfoEntity> queryTenantKeyOperators(@Param(value = "tableName") String tableName,
@Param(value = "tenantKey") String tenantKey,
@Param(value = "targetId") String targetId,
@Param(value = "operateType") String operateType,
@Param(value = "flag") Boolean flag);
List<Map> queryAllChangesDataPages(@Param("tableName") String tableName,
@Param("mainid") String mainid,
@Param(value = "page") Page page);
Integer queryAllChangesPageCounts(@Param("tableName") String tableName, @Param("mainid") String mainid);
}

@ -0,0 +1,412 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.engine.salary.mapper.elog.LocalElogDaoMapper">
<select id="queryElogList" resultType="java.util.Map">
select ${columns},DATE_FORMAT(log_date,"%Y-%m-%d %H:%i:%S") createdate from ${tableName}
where modulename = #{logContent.moduleName} and functionname = #{logContent.functionName}
and delete_type = 0
<if test="conditionSql != null">${conditionSql}</if>
order by log_date desc ,id desc
</select>
<select id="queryElogList" resultType="java.util.Map" databaseId="postgresql">
select ${columns},to_char(log_date::timestamp,'YYYY-MM-DD HH24:MI:SS') createdate from ${tableName}
where modulename = #{logContent.moduleName} and functionname = #{logContent.functionName}
<if test="conditionSql != null">${conditionSql}</if>
order by log_date desc ,id desc
</select>
<select id="queryElogList" resultType="java.util.Map" databaseId="oracle">
select d.*,to_char(d.log_date,'yyyy-mm-dd HH24:mi:ss') createdate from ${tableName} d
where modulename = #{logContent.moduleName} and functionname = #{logContent.functionName}
<if test="conditionSql != null">${conditionSql}</if>
order by d.log_date desc ,id desc
</select>
<select id="queryElogList" resultType="java.util.Map" databaseId="sqlserver">
select ${columns},convert(nvarchar(19),log_date,120) createdate from ${tableName}
where modulename = #{logContent.moduleName} and functionname = #{logContent.functionName}
<if test="conditionSql != null">${conditionSql}</if>
order by log_date desc ,id desc
</select>
<select id="queryElogListPapi" resultType="java.util.Map">
select ${columns},DATE_FORMAT(log_date,"%Y-%m-%d %H:%i:%S") createdate from ${tableName}
where modulename = #{logContent.moduleName} and functionname = #{logContent.functionName}
and delete_type = 0
<if test="conditionSql != null">${conditionSql}</if>
order by log_date desc ,id desc
</select>
<select id="queryElogListPapi" resultType="java.util.Map" databaseId="postgresql">
select ${columns},to_char(log_date::timestamp,'YYYY-MM-DD HH24:MI:SS') createdate from ${tableName}
where modulename = #{logContent.moduleName} and functionname = #{logContent.functionName}
<if test="conditionSql != null">${conditionSql}</if>
order by log_date desc ,id desc
</select>
<select id="queryElogListPapi" resultType="java.util.Map" databaseId="oracle">
select d.*,to_char(d.log_date,'yyyy-mm-dd HH24:mi:ss') createdate from ${tableName} d
where modulename = #{logContent.moduleName} and functionname = #{logContent.functionName}
<if test="conditionSql != null">${conditionSql}</if>
order by d.log_date desc ,id desc
</select>
<select id="queryElogListPapi" resultType="java.util.Map" databaseId="sqlserver">
select ${columns},convert(nvarchar(19),log_date,120) createdate from ${tableName}
where modulename = #{logContent.moduleName} and functionname = #{logContent.functionName}
<if test="conditionSql != null">${conditionSql}</if>
order by log_date desc ,id desc
</select>
<select id="queryCardElogList" resultType="java.util.Map">
select ${columns}, DATE_FORMAT(log_date,"%Y-%m-%d %H:%i:%S") createdate,
uuid from ${tableName}
where modulename = #{logContent.moduleName} and functionname = #{logContent.functionName}
<if test="conditionSql != null">#{conditionSql}</if>
order by log_date desc ,id desc
</select>
<select id="queryCardElogList" resultType="java.util.Map" databaseId="postgresql">
select ${columns}, to_char(log_date::timestamp,'YYYY-MM-DD HH24:MI:SS') createdate,
uuid from ${tableName}
where modulename = #{logContent.moduleName} and functionname = #{logContent.functionName}
<if test="conditionSql != null">#{conditionSql}</if>
order by log_date desc ,id desc
</select>
<select id="queryCardElogList" resultType="java.util.Map" databaseId="oracle">
select ${columns}, to_char(log_date,'yyyy-mm-dd HH24:mi:ss') createdate,
uuid from ${tableName}
where modulename = #{logContent.moduleName} and functionname = #{logContent.functionName}
<if test="conditionSql != null">#{conditionSql}</if>
order by log_date desc ,id desc
</select>
<select id="queryCardElogList" resultType="java.util.Map" databaseId="sqlserver">
select ${columns}, convert(nvarchar(19),log_date,120) createdate,
uuid from ${tableName}
where modulename = #{logContent.moduleName} and functionname = #{logContent.functionName}
<if test="conditionSql != null">#{conditionSql}</if>
order by log_date desc ,id desc
</select>
<select id="elogCountByMorePermission" resultType="java.util.Map">
select count(1) counts from ${tableName}
where modulename = #{logContent.moduleName} and functionname = #{logContent.functionName}
<if test="conditionSql != null">${conditionSql}</if>
</select>
<select id="elogCount" resultType="java.util.Map">
select count(1) counts from ${tableName}
where modulename = #{logContent.moduleName} and functionname = #{logContent.functionName}
<if test="logContent.operator != null and logContent.operator !=''">
and log_operator = #{logContent.operator}
</if>
<if test="conditionSql != null">${conditionSql}</if>
</select>
<select id="elogCountPapi" resultType="java.util.Map">
select count(1) counts from ${tableName}
where modulename = #{logContent.moduleName} and functionname = #{logContent.functionName}
and delete_type = 0
<if test="logContent.operator != null and logContent.operator !=''">
and log_operator = #{logContent.operator}
</if>
<if test="conditionSql != null">${conditionSql}</if>
</select>
<select id="queryDetailElogList" resultType="java.util.Map">
select *,DATE_FORMAT(create_time,"%Y-%m-%d %H:%i:%S") createdate from ${tableName}
where mainid = #{logContent.uuid}
<if test="conditionSql != null">#{conditionSql}</if>
order by log_date desc ,id desc
</select>
<select id="queryDetailElogList" resultType="java.util.Map" databaseId="postgresql">
select *,to_char(create_time::timestamp,'YYYY-MM-DD HH24:MI:SS') createdate from ${tableName}
where mainid = #{logContent.uuid}
<if test="conditionSql != null">#{conditionSql}</if>
order by log_date desc ,id desc
</select>
<select id="queryDetailElogList" resultType="java.util.Map" databaseId="oracle">
select *,to_char(create_time,'yyyy-mm-dd HH24:mi:ss') createdate from ${tableName}
where mainid = #{logContent.uuid}
<if test="conditionSql != null">#{conditionSql}</if>
order by log_date desc ,id desc
</select>
<select id="queryDetailElogList" resultType="java.util.Map" databaseId="sqlserver">
select *,convert(nvarchar(19),create_time,120) createdate from ${tableName}
where mainid = #{logContent.uuid}
<if test="conditionSql != null">#{conditionSql}</if>
order by log_date desc ,id desc
</select>
<select id="queryAllChanges" resultType="java.util.Map">
select *
from ${tableName}
where mainid = #{mainid}
</select>
<select id="queryAllMainData" resultType="java.util.Map">
select *
from ${tableName}
where uuid = #{uuid}
</select>
<select id="queryAllMainChanges" resultType="java.util.Map">
select *
from ${tableName}
where mainid = #{mainid}
and isdetail = '0'
</select>
<select id="queryAllDetailChanges" resultType="java.util.Map">
select *
from ${tableName}
where mainid = #{mainid}
and isdetail = '1'
</select>
<select id="elogDetailCount" resultType="java.util.Map">
select count(1) counts from ${tableName}
where mainid = #{logContent.uuid}
<if test="conditionSql != null">#{conditionSql}</if>
</select>
<!-- <select id="queryOperators" resultType="com.weaver.teams.domain.user.SimpleEmployee">-->
<!-- select log_operator id, max(log_date) updateTime-->
<!-- from ${tableName}-->
<!-- where targetid = #{targetId}-->
<!-- and operatetype = #{operateType}-->
<!-- group by log_operator-->
<!-- order by updateTime desc-->
<!-- </select>-->
<select id="queryReadInfoOperators" resultType="com.engine.salary.elog.entity.dto.ReadInfoEntity">
select log_operator employeeId, max(log_date) date
from ${tableName}
where targetid = #{targetId}
and operatetype = #{operateType}
group by log_operator
order by log_date desc
</select>
<select id="queryReadInfoOperators" resultType="com.engine.salary.elog.entity.dto.ReadInfoEntity" databaseId="postgresql">
select log_operator employeeId, max(log_date) date
from ${tableName}
where targetid = #{targetId}
and operatetype = #{operateType}
group by log_operator
order by date desc
</select>
<select id="queryReadInfoOperators" resultType="com.engine.salary.elog.entity.dto.ReadInfoEntity" databaseId="oracle">
select log_operator employeeId, max(log_date) "date"
from ${tableName}
where targetid = #{targetId}
and operatetype = #{operateType}
group by log_operator
order by "date" desc
</select>
<select id="queryReadInfoOperators" resultType="com.engine.salary.elog.entity.dto.ReadInfoEntity" databaseId="sqlserver">
select log_operator employeeId, max(log_date) "date"
from ${tableName}
where targetid = #{targetId}
and operatetype = #{operateType}
group by log_operator
order by "date" desc
</select>
<select id="queryReadInfoDateOperators" resultType="com.engine.salary.elog.entity.dto.ReadInfoEntity">
select log_operator employeeId, max(log_date) date from ${tableName} where targetid = #{targetId} and
operatetype = #{operateType}
<if test="startDate != null">
AND log_date <![CDATA[ >= ]]> #{startDate}
</if>
<if test="endDate != null">
AND log_date <![CDATA[ <= ]]> #{endDate}
</if>
group by log_operator order by log_date desc
</select>
<select id="queryReadInfoDateOperators" resultType="com.engine.salary.elog.entity.dto.ReadInfoEntity"
databaseId="postgresql">
select log_operator employeeId, max(log_date) date from ${tableName} where targetid = #{targetId} and
operatetype = #{operateType}
<if test="startDate != null">
AND log_date <![CDATA[ >= ]]> #{startDate}
</if>
<if test="endDate != null">
AND log_date <![CDATA[ <= ]]> #{endDate}
</if>
group by log_operator order by date desc
</select>
<select id="queryReadInfoDateOperators" resultType="com.engine.salary.elog.entity.dto.ReadInfoEntity" databaseId="oracle">
select log_operator employeeId, max(log_date) "date" from ${tableName} where targetid = #{targetId} and
operatetype = #{operateType}
<if test="startDate != null">
AND log_date <![CDATA[ >= ]]> TO_DATE(#{startDate}, 'SYYYY-MM-DD HH24:MI:SS')
</if>
<if test="endDate != null">
AND log_date <![CDATA[ <= ]]> TO_DATE(#{endDate}, 'SYYYY-MM-DD HH24:MI:SS')
</if>
group by log_operator order by "date" desc
</select>
<select id="queryReadInfoDateOperators" resultType="com.engine.salary.elog.entity.dto.ReadInfoEntity"
databaseId="sqlserver">
select log_operator employeeId, max(log_date) "date" from ${tableName} where targetid = #{targetId} and
operatetype = #{operateType}
<if test="startDate != null">
AND log_date <![CDATA[ >= ]]> #{startDate}
</if>
<if test="endDate != null">
AND log_date <![CDATA[ <= ]]> #{endDate}
</if>
group by log_operator order by "date" desc
</select>
<select id="queryElogContextById" resultType="java.lang.Integer">
select 1
from ${tableName}
where id = #{id}
</select>
<select id="queryElogTraceInfo" resultType="java.util.Map">
select operatorname,
targetname,
modulename,
operatetypename,
DATE_FORMAT(log_date, "%Y-%m-%d %H:%i:%S") createdate
from ${tableName}
where belongmainid = #{traceId}
order by log_date desc, id desc LIMIT #{offset}, #{pageSize}
</select>
<select id="queryElogTraceInfo" resultType="java.util.Map" databaseId="postgresql">
select operatorname,
targetname,
modulename,
operatetypename,
to_char(log_date::timestamp, 'YYYY-MM-DD HH24:MI:SS') createdate
from ${tableName}
where belongmainid = #{traceId}
order by log_date desc, id desc limit #{pageSize}
offset #{offset}
</select>
<select id="queryElogTraceInfo" resultType="java.util.Map" databaseId="oracle">
SELECT operatorname, targetname, modulename, operatetypename
FROM (SELECT TMP.*, ROWNUM ROW_ID
FROM (select t.*, to_char(log_date, 'yyyy-mm-dd HH24:mi:ss') createdate
from ${tableName} t
where belongmainid = #{traceId}
order by log_date desc, id desc) TMP
WHERE ROWNUM &lt;= (#{pageSize} + #{offset}))
WHERE ROW_ID &gt; #{offset}
</select>
<select id="queryElogTraceInfo" resultType="java.util.Map" databaseId="sqlserver">
select atmp.operatorname, atmp.targetname, atmp.modulename, atmp.operatetypename
from (select atmp.*, row_number() over(order by log_date desc ,id desc ) as rownumber
from (select top(#{pageSize}) atmp.*
from (select *, convert(nvarchar(19), log_date, 120) createdate
from ${tableName}
where belongmainid = #{traceId}) atmp
order by log_date desc, id desc) atmp) atmp
where rownumber &gt; #{offset}
order by log_date desc, id desc
</select>
<select id="queryElogTraceInfoCount" resultType="java.lang.Integer">
select count(id) id
from ${tableName}
where belongmainid = #{traceId}
</select>
<select id="queryLogInfoByCustom" resultType="java.util.Map">
select * from ${tableName}
<where>${sql}</where>
</select>
<select id="queryAllChangesData" resultType="java.util.Map">
select *
from ${tableName}
where mainid = #{mainid}
order by showorder asc, id asc
</select>
<select id="queryTenantKeyOperators" resultType="com.engine.salary.elog.entity.dto.ReadInfoEntity">
select log_operator employeeId, max(log_date) date
from ${tableName}
where tenant_key = #{tenantKey}
and targetid = #{targetId}
and operatetype = #{operateType}
group by log_operator
order by date desc
</select>
<select id="queryTenantKeyOperators" resultType="com.engine.salary.elog.entity.dto.ReadInfoEntity" databaseId="postgresql">
select log_operator employeeId, max(log_date) date
from ${tableName}
where tenant_key = #{tenantKey}
and targetid = #{targetId}
and operatetype = #{operateType}
group by log_operator
order by date desc
</select>
<select id="queryTenantKeyOperators" resultType="com.engine.salary.elog.entity.dto.ReadInfoEntity" databaseId="oracle">
select log_operator employeeId, max(log_date) "date"
from ${tableName}
where tenant_key = #{tenantKey}
and targetid = #{targetId}
and operatetype = #{operateType}
group by log_operator
order by "date" desc
</select>
<select id="queryTenantKeyOperators" resultType="com.engine.salary.elog.entity.dto.ReadInfoEntity" databaseId="sqlserver">
select log_operator employeeId, max(log_date) "date"
from ${tableName}
where tenant_key = #{tenantKey}
and targetid = #{targetId}
and operatetype = #{operateType}
group by log_operator
order by "date" desc
</select>
<select id="queryAllChangesDataPages" resultType="java.util.Map">
select *
from ${tableName}
where mainid = #{mainid}
order by showorder asc, id asc
</select>
<select id="queryAllChangesPageCounts" resultType="java.lang.Integer">
select count(*)
from ${tableName}
where mainid = #{mainid}
</select>
<select id="elogCountOnlyNum" resultType="java.lang.Long">
select count(*) from ${tableName}
where modulename = #{logContent.moduleName} and functionname = #{logContent.functionName}
and delete_type = 0
<if test="logContent.operator != null and logContent.operator !=''">
and log_operator = #{logContent.operator}
</if>
<if test="conditionSql != null">${conditionSql}</if>
</select>
</mapper>

@ -0,0 +1,8 @@
package com.engine.salary.mapper.elog;
import java.util.Map;
public interface QueryCurretValusMapper {
Map queryValues(String sql);
}

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.engine.salary.mapper.elog.QueryCurretValusMapper">
<select id="queryValues" resultType="java.util.Map">
${querySql} limit 1
</select>
</mapper>
Loading…
Cancel
Save