1973 lines
92 KiB
Java
1973 lines
92 KiB
Java
|
|
package com.engine.salary.elog.service.impl;
|
|||
|
|
|
|||
|
|
import cn.hutool.core.date.DateUtil;
|
|||
|
|
import com.alibaba.fastjson.JSON;
|
|||
|
|
import com.alibaba.fastjson.JSONArray;
|
|||
|
|
import com.alibaba.fastjson.JSONObject;
|
|||
|
|
import com.engine.salary.elog.dto.ElogBean;
|
|||
|
|
import com.engine.salary.elog.dto.FilterConditionDto;
|
|||
|
|
import com.engine.salary.elog.dto.LoggerContext;
|
|||
|
|
import com.engine.salary.elog.dto.ShowColumsDto;
|
|||
|
|
import com.engine.salary.elog.service.ILoggerTableService;
|
|||
|
|
import com.engine.salary.elog.util.ElogServiceUtils;
|
|||
|
|
import com.engine.salary.elog.util.ElogSeviceUtils;
|
|||
|
|
import com.engine.salary.mapper.elog.LocalElogDaoMapper;
|
|||
|
|
import com.weaver.common.batch.consts.FileType;
|
|||
|
|
import com.weaver.common.batch.consts.HandlerFileMethod;
|
|||
|
|
import com.weaver.common.batch.entity.BatchDocumentMessage;
|
|||
|
|
import com.weaver.common.batch.entity.BatchFile;
|
|||
|
|
import com.weaver.common.batch.entity.ExcelSheet;
|
|||
|
|
import com.weaver.common.batch.sender.BatchExportSender;
|
|||
|
|
import com.weaver.common.cache.tablecache.impl.ComInfoCache;
|
|||
|
|
import com.weaver.common.component.table.WeaTable;
|
|||
|
|
import com.weaver.common.component.table.column.WeaTableColumn;
|
|||
|
|
import com.weaver.common.component.table.page.Page;
|
|||
|
|
import com.weaver.common.distribution.genid.IdGenerator;
|
|||
|
|
import com.weaver.common.elog.annotation.HandleElog;
|
|||
|
|
import com.weaver.common.elog.annotation.OperateType;
|
|||
|
|
import com.weaver.common.elog.annotation.handle.ElogMethodHandler;
|
|||
|
|
import com.weaver.common.elog.annotation.handle.MethodHandler;
|
|||
|
|
import com.weaver.common.elog.consts.ElogEsTableConsts;
|
|||
|
|
import com.weaver.common.elog.dao.QueryCommonTabeMapper;
|
|||
|
|
import com.weaver.common.elog.dto.*;
|
|||
|
|
import com.weaver.common.elog.enums.ElogConsts;
|
|||
|
|
import com.weaver.common.elog.service.ApplicationContextProvider;
|
|||
|
|
import com.weaver.common.elog.service.ElogHandleService;
|
|||
|
|
import com.weaver.common.elog.util.*;
|
|||
|
|
import com.weaver.common.hrm.cache.HrmAvatarComInfo;
|
|||
|
|
import com.weaver.common.hrm.cache.HrmEmployeeComInfo;
|
|||
|
|
import com.weaver.common.hrm.domain.organization.HrmConditionResultType;
|
|||
|
|
import com.weaver.common.hrm.domain.organization.HrmOrgEmpCondition;
|
|||
|
|
import com.weaver.common.hrm.entity.employee.HrmEmployee;
|
|||
|
|
import com.weaver.common.hrm.service.HrmCommonEmployeeService;
|
|||
|
|
import com.weaver.common.hrm.util.HrmCommonUtil;
|
|||
|
|
import com.weaver.common.hrm.util.HrmI18nUtil;
|
|||
|
|
import com.weaver.common.i18n.label.SystemEnv;
|
|||
|
|
import com.weaver.common.i18n.tool.config.date.format.DateRangeTransformer;
|
|||
|
|
import com.weaver.common.i18n.tool.util.I18nUtil;
|
|||
|
|
import com.weaver.common.mybatis.baseConfig.WeaDatabaseIdProvider;
|
|||
|
|
import com.weaver.common.mybatis.util.DatabaseUtil;
|
|||
|
|
import com.weaver.common.security.util.SecurityUtil;
|
|||
|
|
import com.weaver.framework.rpc.context.impl.TenantRpcContext;
|
|||
|
|
import com.weaver.teams.security.context.UserContext;
|
|||
|
|
import com.weaver.teams.security.user.User;
|
|||
|
|
import org.apache.commons.collections.CollectionUtils;
|
|||
|
|
import org.apache.commons.lang3.StringUtils;
|
|||
|
|
import org.elasticsearch.action.admin.indices.get.GetIndexRequest;
|
|||
|
|
import org.elasticsearch.action.search.SearchRequest;
|
|||
|
|
import org.elasticsearch.action.search.SearchResponse;
|
|||
|
|
import org.elasticsearch.client.RequestOptions;
|
|||
|
|
import org.elasticsearch.client.RestHighLevelClient;
|
|||
|
|
import org.elasticsearch.client.indices.CreateIndexRequest;
|
|||
|
|
import org.elasticsearch.index.query.QueryBuilders;
|
|||
|
|
import org.elasticsearch.search.SearchHit;
|
|||
|
|
import org.elasticsearch.search.SearchHits;
|
|||
|
|
import org.elasticsearch.search.builder.SearchSourceBuilder;
|
|||
|
|
import org.elasticsearch.xcontent.XContentType;
|
|||
|
|
import org.slf4j.Logger;
|
|||
|
|
import org.slf4j.LoggerFactory;
|
|||
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|||
|
|
import org.springframework.core.annotation.AnnotationUtils;
|
|||
|
|
|
|||
|
|
import javax.annotation.Resource;
|
|||
|
|
import javax.servlet.http.HttpServletRequest;
|
|||
|
|
import java.io.IOException;
|
|||
|
|
import java.util.*;
|
|||
|
|
import java.util.stream.Collectors;
|
|||
|
|
|
|||
|
|
import static com.weaver.common.elog.consts.LogConstants.MAPPING_TEMPLATE;
|
|||
|
|
|
|||
|
|
public class LoggerTableService implements ILoggerTableService {
|
|||
|
|
|
|||
|
|
private static final Logger logger = LoggerFactory.getLogger(LoggerTableService.class);
|
|||
|
|
|
|||
|
|
@Autowired
|
|||
|
|
private LocalElogDaoMapper localElogDaoMapper;
|
|||
|
|
|
|||
|
|
@Autowired
|
|||
|
|
private ComInfoCache comInfoCache;
|
|||
|
|
|
|||
|
|
@Autowired
|
|||
|
|
private HrmCommonUtil hrmCommonUtil;
|
|||
|
|
|
|||
|
|
@Autowired
|
|||
|
|
private QueryCommonTabeMapper queryCommonTabeMapper;
|
|||
|
|
|
|||
|
|
@Autowired
|
|||
|
|
private RestHighLevelClient restHighLevelClient;
|
|||
|
|
|
|||
|
|
@Resource
|
|||
|
|
private BatchExportSender batchExportSender;
|
|||
|
|
|
|||
|
|
|
|||
|
|
@Resource
|
|||
|
|
private DateRangeTransformer dateRangeTransformer;
|
|||
|
|
|
|||
|
|
@Autowired
|
|||
|
|
private HrmCommonEmployeeService hrmCommonEmployeeService;
|
|||
|
|
|
|||
|
|
|
|||
|
|
private static final String databaseId = DatabaseUtil.getDatabaseId();
|
|||
|
|
|
|||
|
|
@Override
|
|||
|
|
public WeaTable queryLogs(String data) {
|
|||
|
|
//解析数据
|
|||
|
|
ElogBean elogBean = ElogServiceUtils.getElogBean(data);
|
|||
|
|
// columIndex统一转为小写
|
|||
|
|
Optional.ofNullable(elogBean.getShowColumns())
|
|||
|
|
.ifPresent(list -> {
|
|||
|
|
list.forEach(x -> {
|
|||
|
|
if (StringUtils.isNotBlank(x.getColumIndex())) {
|
|||
|
|
x.setColumIndex(x.getColumIndex().toLowerCase());
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
List<ShowColumsDto> showColums = elogBean.getShowColumns();
|
|||
|
|
String module = elogBean.getModule();
|
|||
|
|
String function = elogBean.getFunction();
|
|||
|
|
String searchMap = elogBean.getSearchMap();
|
|||
|
|
String pageSize = elogBean.getPageSize();
|
|||
|
|
String pageNum = elogBean.getPageNum();
|
|||
|
|
String downloadSize = elogBean.getDownloadSize();
|
|||
|
|
List<FilterConditionDto> filterConditionDtos = elogBean.getFilterConditionDtos();
|
|||
|
|
String transMethod = elogBean.getTransMethod();
|
|||
|
|
Map authParamsJson = elogBean.getAuthParamsJson();
|
|||
|
|
|
|||
|
|
//获取 context 数据
|
|||
|
|
LoggerContext context = new LoggerContext();
|
|||
|
|
context.setModuleName(module);
|
|||
|
|
context.setFunctionName(function);
|
|||
|
|
context.setTenant_key(getTenantKey());
|
|||
|
|
// context.setOperator(getEmployeeId());
|
|||
|
|
//获取主表
|
|||
|
|
String tableName = ElogSeviceUtils.getTableName(module, function);
|
|||
|
|
//获取weaTable
|
|||
|
|
WeaTable weaTable = new WeaTable();
|
|||
|
|
List<String> recordColumns = getWeaColumns(data, showColums, module, function, weaTable);
|
|||
|
|
//获取条件sql
|
|||
|
|
String searchMapsql = getSearchMapSql(searchMap, module, function,elogBean.getShowColumns());
|
|||
|
|
String sb = getQueryCondition(filterConditionDtos);
|
|||
|
|
sb = searchMapsql.concat(sb);
|
|||
|
|
//处理数据权限
|
|||
|
|
Map res = getCustomAuthSql(transMethod, authParamsJson, "auth");
|
|||
|
|
if (!res.isEmpty()) {
|
|||
|
|
Object flag = res.get("flag");
|
|||
|
|
if (flag != null && flag instanceof Boolean) {
|
|||
|
|
boolean f = (boolean) flag;
|
|||
|
|
if (!f) {
|
|||
|
|
weaTable.setCustomParameters(res);
|
|||
|
|
return weaTable;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
String customSql = getCustomSql(transMethod, sb, "before");
|
|||
|
|
//处理数据权限(前缀)
|
|||
|
|
Map hashMap = addPermissionHandler(transMethod);
|
|||
|
|
logger.info("查询条件sql:{}", customSql);
|
|||
|
|
//处理数据权限(对接权限sql)
|
|||
|
|
PermissionParams permissionParams = getPermissionParams(hashMap);
|
|||
|
|
String permissionId = permissionParams.getPermissionId();
|
|||
|
|
String permissionType = permissionParams.getPermissionType();
|
|||
|
|
String mainDataTable = permissionParams.getMainDataTable();
|
|||
|
|
String mainDataTableAlias = permissionParams.getMainDataTableAlias();
|
|||
|
|
String primaryKey = permissionParams.getPrimaryKey();
|
|||
|
|
String permissionTargetId = permissionParams.getPermissionTargetId();
|
|||
|
|
String permissionConfigSourceId = permissionParams.getPermissionConfigSourceId();
|
|||
|
|
|
|||
|
|
|
|||
|
|
// 设置操作菜单
|
|||
|
|
//weaTable.getOperates().add(new WeaTableOperate("查看", 1));
|
|||
|
|
|
|||
|
|
// 分页
|
|||
|
|
//Page<Map> page = ElogSeviceUtils.getPage();
|
|||
|
|
Page page = null;
|
|||
|
|
if (StringUtils.isEmpty(downloadSize)) {
|
|||
|
|
page = new Page(ElogSeviceUtils.getIntValue(pageNum, 1), ElogSeviceUtils.getIntValue(pageSize, 10));
|
|||
|
|
} else {
|
|||
|
|
int pagesize = ElogSeviceUtils.getIntValue(downloadSize, 5000);
|
|||
|
|
page = new Page(1, pagesize);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
String columns = getshowColumsStr(showColums);
|
|||
|
|
|
|||
|
|
Map<String, Object> countMap = new HashMap<>();
|
|||
|
|
Long countNum = 0l;
|
|||
|
|
|
|||
|
|
//最终查询前
|
|||
|
|
List<ElogHandleService> interceptChain = ApplicationContextProvider.getServiceBean(ElogHandleService.class)
|
|||
|
|
.stream().filter(Objects::nonNull)
|
|||
|
|
.filter(x -> x instanceof ElogHandleService)
|
|||
|
|
.map(x -> (ElogHandleService) x)
|
|||
|
|
.collect(Collectors.toList());
|
|||
|
|
|
|||
|
|
if (CollectionUtils.isNotEmpty(interceptChain)) {
|
|||
|
|
for (ElogHandleService handleService : interceptChain) {
|
|||
|
|
Class<? extends ElogHandleService> itemClass = handleService.getClass();
|
|||
|
|
HandleElog annotation = itemClass.getAnnotation(HandleElog.class);
|
|||
|
|
if(Objects.isNull(annotation)){
|
|||
|
|
annotation = AnnotationUtils.findAnnotation(itemClass, HandleElog.class);
|
|||
|
|
}
|
|||
|
|
if(Objects.nonNull(annotation)){
|
|||
|
|
if(module.equalsIgnoreCase(annotation.modulename())){
|
|||
|
|
String employeeId = getUserId();
|
|||
|
|
long id = StringUtils.isEmpty(employeeId) ? -1 : Long.parseLong(employeeId);
|
|||
|
|
ElogHandleDto elogHandleDto = new ElogHandleDto(module,function,context.getTenant_key(),id,customSql,filterConditionDtos);
|
|||
|
|
boolean preQuery = handleService.preQuery(elogHandleDto);
|
|||
|
|
customSql = elogHandleDto.getSql();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 查询
|
|||
|
|
List<Map> list = new ArrayList<>();
|
|||
|
|
if (StringUtils.isNotEmpty(permissionId) || StringUtils.isNotEmpty(permissionType) || StringUtils.isNotEmpty(mainDataTableAlias) || StringUtils.isNotEmpty(mainDataTable) || StringUtils.isNotEmpty(permissionTargetId) || StringUtils.isNotEmpty(permissionConfigSourceId)) {
|
|||
|
|
list = localElogDaoMapper.queryElogList(page, context, null, tableName, customSql, mainDataTable, permissionId, permissionType, mainDataTableAlias, primaryKey,permissionTargetId,permissionConfigSourceId,"*");
|
|||
|
|
countNum = localElogDaoMapper.elogCountOnlyNum(context, tableName, customSql, mainDataTable, permissionId, permissionType, mainDataTableAlias, primaryKey,permissionTargetId,permissionConfigSourceId);
|
|||
|
|
} else {
|
|||
|
|
list = localElogDaoMapper.queryElogList(page, context, null, tableName, customSql,"*");
|
|||
|
|
countMap = localElogDaoMapper.elogCount(context, tableName, customSql);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
String databaseId = WeaDatabaseIdProvider.databaseId;
|
|||
|
|
if ("st".equals(databaseId)) {
|
|||
|
|
//st数据库 date类型特殊处理
|
|||
|
|
list.forEach(map -> {
|
|||
|
|
map.forEach((k, v) -> {
|
|||
|
|
if (v instanceof Date) {
|
|||
|
|
map.put(k, DateUtil.format((Date) v, "yyyy-MM-dd HH:mm:ss"));
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
String propertiesValue = module + "." + function + ".es";
|
|||
|
|
String value = ApplicationContextProvider.getPropertiesValue(propertiesValue);
|
|||
|
|
logger.info("propertiesValue:{},value:{}", propertiesValue,value);
|
|||
|
|
if (StringUtils.isNotEmpty(value) && !value.equalsIgnoreCase("${" + propertiesValue + "}")) {
|
|||
|
|
//if判断通过说明走了自定义ES存储es
|
|||
|
|
String[] fields = getESfields(value);
|
|||
|
|
if (fields != null && fields.length > 0) {
|
|||
|
|
for (Map map : list) {
|
|||
|
|
String logDate = map.get("log_date").toString();
|
|||
|
|
logger.info("logDate:{}" ,logDate);
|
|||
|
|
String esDate = logDate.substring(0, 10);
|
|||
|
|
//先判断表存不存在,不存在创建
|
|||
|
|
if (checkEsTableIsExist(esDate)) {
|
|||
|
|
// 根据id通过es查询大字段(params)然后赋值
|
|||
|
|
SearchRequest searchRequest = new SearchRequest(getElogESTableName(true,esDate));
|
|||
|
|
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
|
|||
|
|
// 只获取指定字段
|
|||
|
|
searchSourceBuilder.fetchSource(fields, null);
|
|||
|
|
// 根据id匹配
|
|||
|
|
searchSourceBuilder.query(QueryBuilders.termQuery("id",map.get("id").toString()));
|
|||
|
|
searchRequest.source(searchSourceBuilder);
|
|||
|
|
|
|||
|
|
SearchResponse searchResponse = null;
|
|||
|
|
try {
|
|||
|
|
searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
|
|||
|
|
} catch (IOException e) {
|
|||
|
|
logger.info("查询ES出现异常:{}",e.getMessage());
|
|||
|
|
}
|
|||
|
|
SearchHits hits = searchResponse.getHits();
|
|||
|
|
SearchHit[] searchHits = hits.getHits();
|
|||
|
|
if (searchHits != null && searchHits.length > 0) {
|
|||
|
|
// 根据id匹配唯一,所以直接取第一个
|
|||
|
|
Map<String, Object> sourceAsMap = searchHits[0].getSourceAsMap();
|
|||
|
|
if (Objects.nonNull(sourceAsMap) && sourceAsMap.size() > 0) {
|
|||
|
|
logger.info("ES查出来的sourceAsMap:{}",JSON.toJSONString(sourceAsMap));
|
|||
|
|
map.putAll(sourceAsMap);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//处理转换其他数据库类型值
|
|||
|
|
list = ElogSeviceSwitchUtils.getSwitchDatabaseData(list);
|
|||
|
|
//处理用户信息Data
|
|||
|
|
|
|||
|
|
// 大小写转换
|
|||
|
|
ElogSeviceSwitchUtils.changKey2Lower(list);
|
|||
|
|
|
|||
|
|
transSwitchDataInfo(list,recordColumns);
|
|||
|
|
//转换多语言
|
|||
|
|
//ElogSeviceSwitchUtils.switchValues(list, recordColumns, true);
|
|||
|
|
//ElogSeviceSwitchUtils.switchChangeValues(list);
|
|||
|
|
logger.info("开始执行转换方法");
|
|||
|
|
if (Util.isNotEmpty(transMethod)) {
|
|||
|
|
logger.info("转换方法:{}", transMethod);
|
|||
|
|
// 消费到消息,通过MethodHandler调用对应的方法
|
|||
|
|
MethodHandler methodHandler = ElogMethodHandler.loadMethodHandler(transMethod);
|
|||
|
|
if (methodHandler != null) {
|
|||
|
|
try {
|
|||
|
|
logger.info("执行方法前的数据:{}", JSON.toJSONString(list));
|
|||
|
|
methodHandler.execute(list);
|
|||
|
|
logger.info("执行方法后的数据:{}", JSON.toJSONString(list));
|
|||
|
|
} catch (Exception e) {
|
|||
|
|
logger.error("转换出错:" + e);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
page.setTotal(ElogSeviceUtils.getLongValue(countMap.get("counts") + "", 0));
|
|||
|
|
page.setRecords(switchString(list));
|
|||
|
|
if (!countNum.equals(0l)) {
|
|||
|
|
//countNum不为0 则覆盖
|
|||
|
|
page.setTotal(countNum);
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
// 处理后的数据
|
|||
|
|
// weaTable.setDisplayData(DataTransform.userProcessData(page.getRecords()));
|
|||
|
|
|
|||
|
|
// 处理操作菜单权限
|
|||
|
|
//weaTable.setOperatesPermission(DataTransform.userOperatesPermission(page.getRecords()));
|
|||
|
|
|
|||
|
|
// 处理选择框权限
|
|||
|
|
//weaTable.setCheckBoxPermission(DataTransform.userCheckBoxPermission(page.getRecords()));
|
|||
|
|
|
|||
|
|
// 存放结果集
|
|||
|
|
weaTable.setPage(page);
|
|||
|
|
return weaTable;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@Override
|
|||
|
|
public WeaTable queryLogsPapi(String data, HttpServletRequest request) {
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@Override
|
|||
|
|
public List getDetailChangesPapi(String module, String function, String mainid, String transMethod, HttpServletRequest request) {
|
|||
|
|
return null;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
private String getshowColumsStr(List<ShowColumsDto> showColums) {
|
|||
|
|
StringBuffer sb = new StringBuffer();
|
|||
|
|
sb.append("id,uuid,targetid,params,operatetype,link_id,link_type,");
|
|||
|
|
for (ShowColumsDto showColum : showColums) {
|
|||
|
|
String columIndex = showColum.getColumIndex();
|
|||
|
|
if ("date".equalsIgnoreCase(columIndex) || "createdate".equalsIgnoreCase(columIndex)){
|
|||
|
|
columIndex = "log_date";
|
|||
|
|
}else if ("operator".equalsIgnoreCase(columIndex)){
|
|||
|
|
columIndex = "log_operator";
|
|||
|
|
}else if ("modulenamespan".equalsIgnoreCase(columIndex)){
|
|||
|
|
columIndex = "modulename";
|
|||
|
|
} else if ("functionnameespan".equalsIgnoreCase(columIndex)){
|
|||
|
|
columIndex = "functionname";
|
|||
|
|
} else if ("avatar".equals(columIndex)) {
|
|||
|
|
continue;
|
|||
|
|
}
|
|||
|
|
sb.append(columIndex).append(",");
|
|||
|
|
}
|
|||
|
|
String substring = sb.toString().substring(0, sb.toString().length() - 1);
|
|||
|
|
return substring;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private PermissionParams getPermissionParams(Map hashMap) {
|
|||
|
|
PermissionParams permissionParams = new PermissionParams();
|
|||
|
|
String permissionId = getPermissionStr(hashMap, "permissionId");
|
|||
|
|
String permissionType = getPermissionStr(hashMap, "permissionType");
|
|||
|
|
String mainDataTableAlias = getPermissionStr(hashMap, "mainDataTableAlias");
|
|||
|
|
String mainDataTable = getPermissionStr(hashMap, "mainDataTable");
|
|||
|
|
String primaryKey = getPermissionStr(hashMap, "primaryKey");
|
|||
|
|
String permissionTargetId = getPermissionStr(hashMap, "permissionTargetId");
|
|||
|
|
String permissionConfigSourceId = getPermissionStr(hashMap, "permissionConfigSourceId");
|
|||
|
|
|
|||
|
|
permissionParams.setPermissionId(permissionId);
|
|||
|
|
permissionParams.setPermissionType(permissionType);
|
|||
|
|
permissionParams.setMainDataTableAlias(mainDataTableAlias);
|
|||
|
|
permissionParams.setMainDataTable(mainDataTable);
|
|||
|
|
permissionParams.setPrimaryKey(primaryKey);
|
|||
|
|
permissionParams.setPermissionTargetId(permissionTargetId);
|
|||
|
|
permissionParams.setPermissionConfigSourceId(permissionConfigSourceId);
|
|||
|
|
|
|||
|
|
return permissionParams;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private List<String> getWeaColumns(String data, List<ShowColumsDto> showColums, String module, String function, WeaTable weaTable) {
|
|||
|
|
// 每一个Table的唯一标识
|
|||
|
|
weaTable.setPageUid(IdGenerator.generate() + "");
|
|||
|
|
// 表头
|
|||
|
|
//weaTable.getColumns().add(new WeaTableColumn("id","id", true));
|
|||
|
|
List<String> recordColumns = new ArrayList<>();
|
|||
|
|
if (showColums != null && showColums.size() > 0) {
|
|||
|
|
for (ShowColumsDto showColum : showColums) {
|
|||
|
|
if (showColum.isTransfLanguage()) {
|
|||
|
|
recordColumns.add(showColum.getColumIndex());
|
|||
|
|
}
|
|||
|
|
if (StringUtils.isNotBlank(showColum.getAliasColumName())) {
|
|||
|
|
WeaTableColumn weaTableColumn = new WeaTableColumn(showColum.getAliasColumName(), showColum.getColumIndex(), getColumnsWidth(showColum), "", showColum.isHide());
|
|||
|
|
if (showColum.isNewLine()) {
|
|||
|
|
weaTableColumn.setNewLine(showColum.isNewLine());
|
|||
|
|
}
|
|||
|
|
weaTable.getColumns().add(weaTableColumn);
|
|||
|
|
} else if (StringUtils.isNotBlank(showColum.getColumName())) {
|
|||
|
|
WeaTableColumn weaTableColumn = new WeaTableColumn(FieldNameMap.getMainFieldNameMap(data, function, showColum.getColumName()), showColum.getColumIndex(), getColumnsWidth(showColum), "", showColum.isHide());
|
|||
|
|
if (showColum.isNewLine()) {
|
|||
|
|
weaTableColumn.setNewLine(showColum.isNewLine());
|
|||
|
|
}
|
|||
|
|
weaTable.getColumns().add(weaTableColumn);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
weaTable.getColumns().add(new WeaTableColumn(FieldNameMap.getMainFieldNameMap(module, function, "moduleName"), "modulenamespan", "5%"));
|
|||
|
|
weaTable.getColumns().add(new WeaTableColumn(FieldNameMap.getMainFieldNameMap(module, function, "functionName"), "functionnamespan", "5%"));
|
|||
|
|
weaTable.getColumns().add(new WeaTableColumn(FieldNameMap.getMainFieldNameMap(module, function, "clientIp"), "clientip", "5%"));
|
|||
|
|
weaTable.getColumns().add(new WeaTableColumn(FieldNameMap.getMainFieldNameMap(module, function, "operateTypeName"), "operatetypename", "5%"));
|
|||
|
|
weaTable.getColumns().add(new WeaTableColumn(FieldNameMap.getMainFieldNameMap(module, function, "targetName"), "targetname", "5%"));
|
|||
|
|
weaTable.getColumns().add(new WeaTableColumn(FieldNameMap.getMainFieldNameMap(module, function, "date"), "createdate", "5%"));
|
|||
|
|
weaTable.getColumns().add(new WeaTableColumn(FieldNameMap.getMainFieldNameMap(module, function, "operatorName"), "operatorname", "5%"));
|
|||
|
|
}
|
|||
|
|
return recordColumns;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private String getTargetid(List<FilterConditionDto> filterConditionDtos) {
|
|||
|
|
if (!filterConditionDtos.isEmpty()) {
|
|||
|
|
for (FilterConditionDto filterConditionDto : filterConditionDtos) {
|
|||
|
|
if ("targetid".equalsIgnoreCase(filterConditionDto.getColumIndex())) {
|
|||
|
|
return filterConditionDto.getValue();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return "";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private String getPermissionStr(Map hashMap, String str) {
|
|||
|
|
if (hashMap != null && hashMap.size() > 0) {
|
|||
|
|
Object obj = hashMap.get(str);
|
|||
|
|
if (obj != null) {
|
|||
|
|
return obj.toString();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return "";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 处理数据权限
|
|||
|
|
*
|
|||
|
|
* @param transMethod
|
|||
|
|
* @return
|
|||
|
|
*/
|
|||
|
|
private Map addPermissionHandler(String transMethod) {
|
|||
|
|
Map<String, String> hashMap = new HashMap();
|
|||
|
|
hashMap.put("permissionId", "");
|
|||
|
|
hashMap.put("permissionType", "");
|
|||
|
|
hashMap.put("mainDataTableAlias", "");
|
|||
|
|
hashMap.put("mainDataTable", "");
|
|||
|
|
hashMap.put("primaryKey", "");
|
|||
|
|
hashMap.put("permissionTargetId", "");
|
|||
|
|
hashMap.put("permissionConfigSourceId", "");
|
|||
|
|
|
|||
|
|
MethodHandler beforeMethodHandler = ElogMethodHandler.loadMethodHandler("permission" + transMethod);
|
|||
|
|
if (beforeMethodHandler != null) {
|
|||
|
|
try {
|
|||
|
|
Object execute = beforeMethodHandler.execute(hashMap);
|
|||
|
|
if (execute != null) {
|
|||
|
|
if (execute instanceof Map) {
|
|||
|
|
return (Map) execute;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
} catch (Exception e) {
|
|||
|
|
logger.error("转换出错:" + e);
|
|||
|
|
throw new RuntimeException(e.getMessage());
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return hashMap;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private Map getCustomAuthSql(String transMethod, Map params, String prefix) {
|
|||
|
|
MethodHandler beforeMethodHandler = ElogMethodHandler.loadMethodHandler(prefix + transMethod);
|
|||
|
|
Map<String, Object> hashMap = new HashMap<>();
|
|||
|
|
if (beforeMethodHandler != null) {
|
|||
|
|
try {
|
|||
|
|
hashMap.put("flag", true);
|
|||
|
|
hashMap.put("msg", "");
|
|||
|
|
hashMap.putAll(params);
|
|||
|
|
Object execute = beforeMethodHandler.execute(hashMap);
|
|||
|
|
if (execute != null && execute instanceof Map) {
|
|||
|
|
Map map = (Map) execute;
|
|||
|
|
return map;
|
|||
|
|
}
|
|||
|
|
} catch (Exception e) {
|
|||
|
|
logger.error("转换出错:" + e);
|
|||
|
|
throw new RuntimeException(e.getMessage());
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return hashMap;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
private String getCustomSql(String transMethod, String sql, String prefix) {
|
|||
|
|
MethodHandler beforeMethodHandler = ElogMethodHandler.loadMethodHandler(prefix + transMethod);
|
|||
|
|
boolean flag = false;
|
|||
|
|
if (beforeMethodHandler != null) {
|
|||
|
|
try {
|
|||
|
|
String subSql = "";
|
|||
|
|
if (sql.length() > 5) {
|
|||
|
|
flag = true;
|
|||
|
|
subSql = sql.substring(5, sql.length());
|
|||
|
|
}
|
|||
|
|
Object execute = beforeMethodHandler.execute(subSql);
|
|||
|
|
if (execute != null) {
|
|||
|
|
if (execute instanceof String) {
|
|||
|
|
StringBuffer sb = null;
|
|||
|
|
if(execute.toString().length()==0){
|
|||
|
|
sb = new StringBuffer();
|
|||
|
|
} else if (flag || execute.toString().length() > 0) {
|
|||
|
|
sb = new StringBuffer(" and ");
|
|||
|
|
} else {
|
|||
|
|
sb = new StringBuffer();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
sb.append(execute.toString());
|
|||
|
|
return sb.toString();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
} catch (Exception e) {
|
|||
|
|
logger.error("转换出错:" + e);
|
|||
|
|
throw new RuntimeException(e.getMessage());
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return sql;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void transUserInfo(List<Map> list) {
|
|||
|
|
List<Object> operators = new ArrayList<>();
|
|||
|
|
if (list != null && list.size() > 0) {
|
|||
|
|
for (Map map : list) {
|
|||
|
|
//避免暴露内网地址
|
|||
|
|
map.remove("requesturl");
|
|||
|
|
|
|||
|
|
Object operator = map.get("operator");
|
|||
|
|
if (operator != null && StringUtils.isNotBlank(operator.toString())) {
|
|||
|
|
operators.add(ElogSeviceUtils.getLongValue(operator.toString()));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
List<HrmEmployeeComInfo> cacheList = comInfoCache.getCacheList(HrmEmployeeComInfo.class, operators);
|
|||
|
|
Map<Long, ElogHrmSimpleEmployeeInfo> infoHashMap = new HashMap<>();
|
|||
|
|
if (cacheList != null && cacheList.size() > 0) {
|
|||
|
|
for (HrmEmployeeComInfo hrmEmployeeComInfo : cacheList) {
|
|||
|
|
HrmAvatarComInfo hrmAvatarComInfo = (HrmAvatarComInfo) comInfoCache.getCacheById(HrmAvatarComInfo.class, hrmEmployeeComInfo.getAvatar());
|
|||
|
|
ElogHrmSimpleEmployeeInfo info = new ElogHrmSimpleEmployeeInfo();
|
|||
|
|
if (hrmAvatarComInfo != null) {
|
|||
|
|
info.setAvatarP3Id(hrmAvatarComInfo.getP3());
|
|||
|
|
}
|
|||
|
|
info.setId(hrmEmployeeComInfo.getId());
|
|||
|
|
info.setUserName(hrmEmployeeComInfo.getUsername());
|
|||
|
|
infoHashMap.put(hrmEmployeeComInfo.getId(), info);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (list != null && list.size() > 0) {
|
|||
|
|
for (Map map : list) {
|
|||
|
|
Object operator = map.get("operator");
|
|||
|
|
if (map.get("params") != null && map.get("params").toString().startsWith("H4s")) {
|
|||
|
|
map.put("params", ElogSeviceUtils.uncompress(map.get("params").toString()));
|
|||
|
|
}
|
|||
|
|
map.put("dboperatorname", Util.null2String(map.get("operatorname")));
|
|||
|
|
if (operator != null && StringUtils.isNotBlank(operator.toString())) {
|
|||
|
|
Map<Long, String> i18nOperatorMap = new HashMap<>();
|
|||
|
|
ElogHrmSimpleEmployeeInfo hrmEmployeeComInfo = infoHashMap.get(Long.parseLong(operator.toString()));
|
|||
|
|
if (hrmEmployeeComInfo != null) {
|
|||
|
|
//获取最新的人员名称并进行多语言转换
|
|||
|
|
i18nOperatorMap.put(Long.parseLong(operator.toString()),hrmEmployeeComInfo.getUserName());
|
|||
|
|
Map<Long, String> parseI18nOperator = HrmI18nUtil.batchCovertEmployee(i18nOperatorMap, map.get("tenant_key").toString());
|
|||
|
|
map.put("operatorname", parseI18nOperator.get(Long.parseLong(operator.toString())));
|
|||
|
|
|
|||
|
|
// if (StringUtils.isNotEmpty(hrmEmployeeComInfo.getUserName())) {
|
|||
|
|
// map.put("operatorname", hrmEmployeeComInfo.getUserName());
|
|||
|
|
// }
|
|||
|
|
if (hrmEmployeeComInfo.getAvatarP3Id() != null) {
|
|||
|
|
map.put("avatar", hrmEmployeeComInfo.getAvatarP3Id());
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void transSwitchDataInfo(List<Map> list, List<String> recordColumns) {
|
|||
|
|
List<Object> operators = new ArrayList<>();
|
|||
|
|
if (list != null && list.size() > 0) {
|
|||
|
|
for (Map map : list) {
|
|||
|
|
//避免暴露内网地址
|
|||
|
|
map.remove("requesturl");
|
|||
|
|
|
|||
|
|
map.put("dboperatorname", Util.null2String(map.get("operatorname")));
|
|||
|
|
ElogSeviceSwitchUtils.switchDatabaseField(map);
|
|||
|
|
Object operator = map.get("operator");
|
|||
|
|
if (operator != null && StringUtils.isNotBlank(operator.toString())) {
|
|||
|
|
operators.add(ElogSeviceUtils.getLongValue(operator.toString()));
|
|||
|
|
}
|
|||
|
|
if (map.get("PARAMS") != null) {
|
|||
|
|
map.put("params", JSONObject.toJSON(map.get("PARAMS")));
|
|||
|
|
} else if (map.get("params") != null) {
|
|||
|
|
map.put("params", JSONObject.toJSON(map.get("params")));
|
|||
|
|
}
|
|||
|
|
for (String recordColumn : recordColumns) {
|
|||
|
|
Object val = map.get(recordColumn);
|
|||
|
|
if (val != null) {
|
|||
|
|
map.put(recordColumn, ElogSeviceSwitchUtils.transfi18Method(val.toString()));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
Object modulename = map.get("modulename");
|
|||
|
|
if (modulename != null) {
|
|||
|
|
map.put("modulenamespan", ElogSeviceSwitchUtils.getModuleName(modulename.toString()));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
List<HrmEmployeeComInfo> cacheList = comInfoCache.getCacheList(HrmEmployeeComInfo.class, operators);
|
|||
|
|
Map<Long, ElogHrmSimpleEmployeeInfo> infoHashMap = new HashMap<>();
|
|||
|
|
if (cacheList != null && cacheList.size() > 0) {
|
|||
|
|
for (HrmEmployeeComInfo hrmEmployeeComInfo : cacheList) {
|
|||
|
|
ElogHrmSimpleEmployeeInfo info = new ElogHrmSimpleEmployeeInfo();
|
|||
|
|
info.setId(hrmEmployeeComInfo.getId());
|
|||
|
|
info.setUserName(hrmEmployeeComInfo.getUsername());
|
|||
|
|
infoHashMap.put(hrmEmployeeComInfo.getId(), info);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (list != null && list.size() > 0) {
|
|||
|
|
for (Map map : list) {
|
|||
|
|
Object operator = map.get("operator");
|
|||
|
|
if (map.get("params") != null && map.get("params").toString().startsWith("H4s")) {
|
|||
|
|
map.put("params", ElogSeviceUtils.uncompress(map.get("params").toString()));
|
|||
|
|
map.put("params",SecurityUtil.encodeForHtml(map.get("params").toString(), true));
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
//获取最新的人员名称并进行多语言转换
|
|||
|
|
if (operator != null && StringUtils.isNotBlank(operator.toString())) {
|
|||
|
|
Map<Long, String> i18nOperatorMap = new HashMap<>();
|
|||
|
|
ElogHrmSimpleEmployeeInfo hrmEmployeeComInfo = infoHashMap.get(Long.parseLong(operator.toString()));
|
|||
|
|
if (hrmEmployeeComInfo != null && StringUtils.isNotEmpty(hrmEmployeeComInfo.getUserName())) {
|
|||
|
|
i18nOperatorMap.put(Long.parseLong(operator.toString()),hrmEmployeeComInfo.getUserName());
|
|||
|
|
Map<Long, String> parseI18nOperator = HrmI18nUtil.batchCovertEmployee(i18nOperatorMap, map.get("tenant_key").toString());
|
|||
|
|
map.put("operatorname", parseI18nOperator.get(Long.parseLong(operator.toString())));
|
|||
|
|
// map.put("operatorname", hrmEmployeeComInfo.getUserName());
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 查询头像相关信息
|
|||
|
|
*
|
|||
|
|
* @param id
|
|||
|
|
* @return
|
|||
|
|
*/
|
|||
|
|
// private String queryAvatarInfo(long id) {
|
|||
|
|
// Map avatarInfoMap = queryAvatarInfoMapper.queryAvatarInfo(id);
|
|||
|
|
// if (avatarInfoMap != null) {
|
|||
|
|
// if (avatarInfoMap.get("p3") != null) {
|
|||
|
|
// return avatarInfoMap.get("p3").toString();
|
|||
|
|
// }
|
|||
|
|
// }
|
|||
|
|
// return "";
|
|||
|
|
// }
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 获取宽度
|
|||
|
|
*
|
|||
|
|
* @param showColum
|
|||
|
|
* @return
|
|||
|
|
*/
|
|||
|
|
private String getColumnsWidth(ShowColumsDto showColum) {
|
|||
|
|
if (StringUtils.isBlank(showColum.getWidth())) {
|
|||
|
|
return "5%";
|
|||
|
|
} else {
|
|||
|
|
return showColum.getWidth();
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private String getTenantKey() {
|
|||
|
|
User currentUser = UserContext.getCurrentUser();
|
|||
|
|
if (currentUser != null) {
|
|||
|
|
return currentUser.getTenantKey();
|
|||
|
|
} else {
|
|||
|
|
String tenantKey = TenantRpcContext.getTenantKey();
|
|||
|
|
if (StringUtils.isNotBlank(tenantKey)) {
|
|||
|
|
return tenantKey;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return "";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private String getEmployeeId() {
|
|||
|
|
|
|||
|
|
User currentUser = UserContext.getCurrentUser();
|
|||
|
|
if (currentUser != null&&!currentUser.isAdmin()) {
|
|||
|
|
String employeeId = TenantRpcContext.getEmployeeId();
|
|||
|
|
return StringUtils.isNotBlank(employeeId) ? employeeId : "";
|
|||
|
|
}
|
|||
|
|
return "";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private String getUserId(){
|
|||
|
|
User currentUser = UserContext.getCurrentUser();
|
|||
|
|
if (currentUser != null) {
|
|||
|
|
return currentUser.getEmployeeId().toString();
|
|||
|
|
}
|
|||
|
|
String employeeId = TenantRpcContext.getEmployeeId();
|
|||
|
|
return StringUtils.isNotBlank(employeeId) ? employeeId : "";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 拼接搜索条件
|
|||
|
|
*
|
|||
|
|
* @param searchMap
|
|||
|
|
* @param module
|
|||
|
|
* @param function
|
|||
|
|
* @return
|
|||
|
|
*/
|
|||
|
|
private String getSearchMapSql(String searchMap, String module, String function, List<ShowColumsDto> showColumns) {
|
|||
|
|
StringBuffer sb = new StringBuffer();
|
|||
|
|
Map map = JSON.parseObject(searchMap);
|
|||
|
|
if (map == null) return sb.toString();
|
|||
|
|
Iterator<Map.Entry<String, Object>> iterators = map.entrySet().iterator();
|
|||
|
|
while (iterators.hasNext()) {
|
|||
|
|
Map.Entry<String, Object> next = iterators.next();
|
|||
|
|
String key = next.getKey();
|
|||
|
|
SecurityUtil.sqlCheck(key);
|
|||
|
|
if ("date".equals(key) || "createdate".equals(key)) {
|
|||
|
|
Object date = next.getValue();
|
|||
|
|
if (date != null) {
|
|||
|
|
if (StringUtils.isNotBlank(date.toString())) {
|
|||
|
|
List dates = (List) date;
|
|||
|
|
if (dates != null && dates.size() == 2) {
|
|||
|
|
Object startDate = dates.get(0);
|
|||
|
|
Object endDate = dates.get(1);
|
|||
|
|
startDate = ElogSeviceUtils.checkValSql(startDate.toString());
|
|||
|
|
endDate = ElogSeviceUtils.checkValSql(endDate.toString());
|
|||
|
|
if (StringUtils.isNotBlank(startDate.toString()) && StringUtils.isNotBlank(endDate.toString())) {
|
|||
|
|
startDate = startDate.toString().replaceAll("'", "''");
|
|||
|
|
endDate = endDate.toString().replaceAll("'", "''");
|
|||
|
|
String dateRangeAfter = dateRangeTransformer.getDateRangeAfter(startDate.toString());
|
|||
|
|
String dateRangeBefore = dateRangeTransformer.getDateRangeBefore(endDate.toString());
|
|||
|
|
sb.append(" and log_date ").append(" between ").append(getSwithDatabaseDate(dateRangeAfter)).append(" and ").append(getSwithDatabaseDate(dateRangeBefore)).append(" ");
|
|||
|
|
} else if (StringUtils.isNotBlank(startDate.toString())) {
|
|||
|
|
String dateRangeAfter = dateRangeTransformer.getDateRangeAfter(startDate.toString());
|
|||
|
|
sb.append(" and log_date ").append(" >= ").append(getSwithDatabaseDate(dateRangeAfter)).append(" ");
|
|||
|
|
} else if (StringUtils.isNotBlank(endDate.toString())) {
|
|||
|
|
String dateRangeBefore = dateRangeTransformer.getDateRangeBefore(endDate.toString());
|
|||
|
|
sb.append(" and log_date ").append(" <= ").append(getSwithDatabaseDate(dateRangeBefore)).append(" ");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
} else if ("operator".equals(next.getKey())) {
|
|||
|
|
Object operator = next.getValue();
|
|||
|
|
if (operator != null) {
|
|||
|
|
if (StringUtils.isNotBlank(operator.toString())) {
|
|||
|
|
operator = ElogSeviceUtils.checkValSql(operator.toString());
|
|||
|
|
operator = operator.toString().replaceAll("'", "''");
|
|||
|
|
if (StringUtils.isNumeric(operator.toString()) && operator.toString().length() > 15 ) {
|
|||
|
|
sb.append(" and log_operator = ").append(operator.toString()).append(" ");
|
|||
|
|
} else {
|
|||
|
|
List<HrmEmployee> likeNameHrmEmployeeList = hrmCommonEmployeeService.queryEmpsByCondidtion(
|
|||
|
|
new HrmOrgEmpCondition().setNameLikeList(Arrays.asList(operator.toString())).setTenantKey(getTenantKey()),
|
|||
|
|
HrmConditionResultType.BEAN.name());
|
|||
|
|
if (likeNameHrmEmployeeList != null && likeNameHrmEmployeeList.size() > 0) {
|
|||
|
|
List<Long> ids = likeNameHrmEmployeeList.stream().map(HrmEmployee::getId).collect(Collectors.toList());
|
|||
|
|
if (ids != null && ids.size() > 0) {
|
|||
|
|
sb.append(" and ( operatorname like '%").append(operator.toString()).append("%' ")
|
|||
|
|
.append(" or log_operator in (").append(StringUtils.join(ids, ",")).append(")) ");
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
sb.append(" and operatorname like '%").append(operator.toString()).append("%' ");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
} else if ("modulename".equals(next.getKey())) {
|
|||
|
|
Object moduleName = next.getValue();
|
|||
|
|
if (moduleName != null) {
|
|||
|
|
moduleName = moduleName.toString().replaceAll("'", "''");
|
|||
|
|
if (StringUtils.isNotBlank(moduleName.toString())) {
|
|||
|
|
moduleName = ElogSeviceUtils.checkValSql(moduleName.toString());
|
|||
|
|
//sb.append(" and modulename = '").append(moduleName.toString()).append("' ");
|
|||
|
|
StringBuffer stringBuffer = new StringBuffer();
|
|||
|
|
if (isEnglish(moduleName.toString())) {
|
|||
|
|
Map<String, Integer> moduleMap = ElogSeviceSwitchUtils.moduleMap;
|
|||
|
|
Iterator<Map.Entry<String, Integer>> iterator = moduleMap.entrySet().iterator();
|
|||
|
|
while (iterator.hasNext()) {
|
|||
|
|
Map.Entry<String, Integer> nextObj = iterator.next();
|
|||
|
|
if (nextObj.getKey().contains(moduleName.toString())) {
|
|||
|
|
stringBuffer.append("'").append(nextObj.getKey()).append("',");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
} else {
|
|||
|
|
Map<String, Integer> moduleMap = ElogSeviceSwitchUtils.moduleMap;
|
|||
|
|
Iterator<Map.Entry<String, Integer>> iterator = moduleMap.entrySet().iterator();
|
|||
|
|
while (iterator.hasNext()) {
|
|||
|
|
Map.Entry<String, Integer> nextObj = iterator.next();
|
|||
|
|
String val = ElogSeviceSwitchUtils.getModuleName(nextObj.getValue() + "");
|
|||
|
|
if (val.contains(moduleName.toString())) {
|
|||
|
|
stringBuffer.append("'").append(nextObj.getKey()).append("',");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
String str = "";
|
|||
|
|
if (stringBuffer.toString().length() > 0) {
|
|||
|
|
str = stringBuffer.substring(0, stringBuffer.length() - 1);
|
|||
|
|
String inVals = str.toString().replaceAll("''", "'");
|
|||
|
|
sb.append(" and modulename in (").append(inVals).append(") ");
|
|||
|
|
} else {
|
|||
|
|
sb.append(" and modulename = '").append(moduleName.toString()).append("' ");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
} else if (databaseId.equalsIgnoreCase(ElogConsts.POSTGRESQL) && "targetid".equalsIgnoreCase(next.getKey())){
|
|||
|
|
//兼容PG环境int类型不支持模糊搜索的问题
|
|||
|
|
String value = next.getValue().toString().replaceAll("'", "''");
|
|||
|
|
value = ElogSeviceUtils.checkValSql(value.toString());
|
|||
|
|
if (value.startsWith("_")) {
|
|||
|
|
value = value.replace("_", "\\_");
|
|||
|
|
}
|
|||
|
|
//将类型转为varchar再进行查询
|
|||
|
|
sb.append(" and ").append("cast(").append(key).append(" as VARCHAR(255) )").append(" like '%").append(value).append("%' ");
|
|||
|
|
} else {
|
|||
|
|
|
|||
|
|
if (next.getValue() != null && StringUtils.isNotBlank(key) && StringUtils.isNotBlank(next.getValue().toString())) {
|
|||
|
|
String value = next.getValue().toString().replaceAll("'", "''");
|
|||
|
|
value = ElogSeviceUtils.checkValSql(value.toString());
|
|||
|
|
StringBuilder stringBuffer = new StringBuilder();
|
|||
|
|
if (isLikeSearch(showColumns, key)) {
|
|||
|
|
String logSearchSql = I18nUtil.getLogSearchSql(ElogSeviceUtils.getTableName(module, function), key, value);
|
|||
|
|
String sql = logSearchSql.replaceAll("%_", "%\\\\_");
|
|||
|
|
try {
|
|||
|
|
logger.error("执行多语言sql:{}",sql);
|
|||
|
|
List<Map> maps = queryCommonTabeMapper.queryLabelIds(sql);
|
|||
|
|
if (maps != null && maps.size() > 0) {
|
|||
|
|
for (Map map1 : maps) {
|
|||
|
|
Object indexid = map1.get(key);
|
|||
|
|
if (indexid == null || StringUtils.isEmpty(indexid.toString())) {
|
|||
|
|
indexid = map1.get(key.toLowerCase());
|
|||
|
|
}
|
|||
|
|
if (indexid != null && StringUtils.isNotEmpty(indexid.toString())) {
|
|||
|
|
String val = indexid.toString().replace("'", "''");
|
|||
|
|
if (ElogSeviceUtils.checkIsNumber(map.get(key))) {
|
|||
|
|
val = "-"+val;
|
|||
|
|
value = "-"+value;
|
|||
|
|
}
|
|||
|
|
stringBuffer.append("'").append(val).append("',");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
} catch (Exception e) {
|
|||
|
|
logger.error("i18查询sql报错:{}",e.getMessage(),e);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
String str = "";
|
|||
|
|
if (stringBuffer.toString().length() > 0) {
|
|||
|
|
str = stringBuffer.substring(0, stringBuffer.length() - 1);
|
|||
|
|
if (value.startsWith("_")) {
|
|||
|
|
value = value.replace("_", "\\_");
|
|||
|
|
}
|
|||
|
|
sb.append(" and (").append(key).append(" like '%").append(value).append("%' ");
|
|||
|
|
//String inVals = str.toString().replaceAll("''", "'");
|
|||
|
|
if (str.startsWith("_")) {
|
|||
|
|
str = str.replace("_", "\\_");
|
|||
|
|
}
|
|||
|
|
if ("operatetypename".equals(key)) {
|
|||
|
|
String s = ElogSeviceUtils.checkValSql(next.getValue().toString());
|
|||
|
|
sb.append(matchOperatetype(s));
|
|||
|
|
}
|
|||
|
|
sb.append(" or ").append(key).append(" in (").append(str).append(")) ");
|
|||
|
|
} else {
|
|||
|
|
if ("operatetypename".equals(key)) {
|
|||
|
|
sb.append(" and (").append(key).append(" like '%").append(value).append("%' ");
|
|||
|
|
String s = ElogSeviceUtils.checkValSql(next.getValue().toString());
|
|||
|
|
sb.append(matchOperatetype(s)).append(")");
|
|||
|
|
} else {
|
|||
|
|
if (value.startsWith("_")) {
|
|||
|
|
value = value.replace("_", "\\_");
|
|||
|
|
}
|
|||
|
|
sb.append(" and ").append(key).append(" like '%").append(value).append("%' ");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return sb.toString();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 是否模糊搜索
|
|||
|
|
* @param showColumns
|
|||
|
|
* @param key
|
|||
|
|
* @return
|
|||
|
|
*/
|
|||
|
|
private boolean isLikeSearch(List<ShowColumsDto> showColumns, String key) {
|
|||
|
|
for (ShowColumsDto showColumn : showColumns) {
|
|||
|
|
if (key.equalsIgnoreCase(showColumn.getColumIndex()) && showColumn.isTransfLanguage()) {
|
|||
|
|
return true;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private String getSwithDatabaseDate(String date) {
|
|||
|
|
SecurityUtil.ecodeForSql(date);
|
|||
|
|
if (ElogConsts.ORACLE.equals(DatabaseUtil.getDatabaseId())) {
|
|||
|
|
return " to_date('"+date+"','yyyy-mm-dd hh24:mi:ss') ";
|
|||
|
|
} else if (ElogConsts.POSTGRESQL.equals(DatabaseUtil.getDatabaseId())) {
|
|||
|
|
return " to_timestamp('"+date+"', 'YYYY-MM-DD HH24:MI:SS') ";
|
|||
|
|
} else if (ElogConsts.SQLSERVER.equals(DatabaseUtil.getDatabaseId())) {
|
|||
|
|
return " convert(nvarchar(19),'"+date+"',120) ";
|
|||
|
|
} else {
|
|||
|
|
return " DATE_FORMAT('"+date+"','%Y-%m-%d %H:%i:%s') ";
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public String matchOperatetype(String str) {
|
|||
|
|
if (ElogSeviceUtils.currentLanguage() != 8) {
|
|||
|
|
return "";
|
|||
|
|
}
|
|||
|
|
List<String> list = new ArrayList();
|
|||
|
|
list.add(OperateType.add);
|
|||
|
|
list.add(OperateType.update);
|
|||
|
|
list.add(OperateType.view);
|
|||
|
|
list.add(OperateType.delete);
|
|||
|
|
|
|||
|
|
StringBuffer sb = new StringBuffer();
|
|||
|
|
for (String o : list) {
|
|||
|
|
if (o.toLowerCase().contains(str.toLowerCase())) {
|
|||
|
|
sb.append("'").append(o).append("',");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if ("new".toLowerCase().contains(str.toLowerCase())) {
|
|||
|
|
sb.append("'add',");
|
|||
|
|
}
|
|||
|
|
String sql = "";
|
|||
|
|
if (sb.length() > 0) {
|
|||
|
|
sql = sb.toString().substring(0, sb.length() - 1);
|
|||
|
|
sql = "or operatetype in (" + sql + ")";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return sql;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
public static boolean isEnglish(String charaString) {
|
|||
|
|
return charaString.matches("^[a-zA-Z]*");
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 获取搜索条件
|
|||
|
|
*
|
|||
|
|
* @param filterConditionDtos
|
|||
|
|
* @return
|
|||
|
|
*/
|
|||
|
|
private String getQueryCondition(List<FilterConditionDto> filterConditionDtos) {
|
|||
|
|
StringBuffer sb = new StringBuffer();
|
|||
|
|
if (filterConditionDtos != null && filterConditionDtos.size() > 0) {
|
|||
|
|
for (FilterConditionDto filterConditionDto : filterConditionDtos) {
|
|||
|
|
if (StringUtils.isNotBlank(filterConditionDto.getColumIndex())) {
|
|||
|
|
sb.append(getsql(filterConditionDto));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return sb.toString();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 拼接sql
|
|||
|
|
*
|
|||
|
|
* @param filterConditionDto
|
|||
|
|
* @return
|
|||
|
|
*/
|
|||
|
|
private String getsql(FilterConditionDto filterConditionDto) {
|
|||
|
|
StringBuffer sb = new StringBuffer();
|
|||
|
|
/* if (StringUtils.isNotBlank(filterConditionDto.getSql())) {
|
|||
|
|
sb.append(" ").append(filterConditionDto.getSql()).append(" ");
|
|||
|
|
return sb.toString();
|
|||
|
|
}*/
|
|||
|
|
SecurityUtil.sqlCheck(filterConditionDto.getColumIndex());
|
|||
|
|
filterConditionDto.setConnectCondition(ElogSeviceUtils.checkConditionSql(filterConditionDto.getConnectCondition()));
|
|||
|
|
filterConditionDto.setType(ElogSeviceUtils.checkTypeSql(filterConditionDto.getType()));
|
|||
|
|
filterConditionDto.setValue(ElogSeviceUtils.checkValSql(filterConditionDto.getValue()));
|
|||
|
|
switchDatabaseFieldIndex(filterConditionDto);
|
|||
|
|
if ("LIKE".equalsIgnoreCase(filterConditionDto.getType())) {
|
|||
|
|
if (filterConditionDto.getLike() != null) {
|
|||
|
|
sb.append(" ").
|
|||
|
|
append(getConnectCondition(filterConditionDto.getConnectCondition())).
|
|||
|
|
append(" ").
|
|||
|
|
append(filterConditionDto.getColumIndex()).
|
|||
|
|
append(" ").
|
|||
|
|
append(getQueryType(filterConditionDto.getType())).
|
|||
|
|
append(" '").
|
|||
|
|
append(filterConditionDto.getLike().getPrefix() != null ? filterConditionDto.getLike().getPrefix() : "").
|
|||
|
|
append(filterConditionDto.getValue()).
|
|||
|
|
append(filterConditionDto.getLike().getSuffix() != null ? filterConditionDto.getLike().getSuffix() : "").
|
|||
|
|
append("' ");
|
|||
|
|
}
|
|||
|
|
} else if ("IN".equalsIgnoreCase(filterConditionDto.getType())) {
|
|||
|
|
String[] split = filterConditionDto.getValue().split("\",\"");
|
|||
|
|
if (split.length > 0) {
|
|||
|
|
StringBuffer str = new StringBuffer("(");
|
|||
|
|
String value = "";
|
|||
|
|
if ("targetid".equals(filterConditionDto.getColumIndex()) || "log_operator".equals(filterConditionDto.getColumIndex())) {
|
|||
|
|
List<String> list = JSONArray.parseArray(filterConditionDto.getValue(), String.class);
|
|||
|
|
for (String s : list) {
|
|||
|
|
str.append(s).append(",");
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
List<String> list = JSONArray.parseArray(filterConditionDto.getValue(), String.class);
|
|||
|
|
for (String s : list) {
|
|||
|
|
str.append("'").append(s).append("',");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
value = str.toString().substring(0, str.length() - 1);
|
|||
|
|
value += ")";
|
|||
|
|
switchDatabaseFieldIndex(filterConditionDto);
|
|||
|
|
sb.append(" ").
|
|||
|
|
append(getConnectCondition(filterConditionDto.getConnectCondition())).
|
|||
|
|
append(" ").
|
|||
|
|
append(filterConditionDto.getColumIndex()).
|
|||
|
|
append(" ").
|
|||
|
|
append(getQueryType(filterConditionDto.getType())).
|
|||
|
|
append(value).
|
|||
|
|
append(" ");
|
|||
|
|
|
|||
|
|
} else if (split.length == 0) {
|
|||
|
|
sb.append(" ").
|
|||
|
|
append(getConnectCondition(filterConditionDto.getConnectCondition())).
|
|||
|
|
append(" ").
|
|||
|
|
append(filterConditionDto.getColumIndex()).
|
|||
|
|
append(" ").
|
|||
|
|
append(getQueryType(filterConditionDto.getType())).
|
|||
|
|
append(" ('").
|
|||
|
|
append(filterConditionDto.getValue()).
|
|||
|
|
append("') ");
|
|||
|
|
}
|
|||
|
|
} else if ("IS NULL".equalsIgnoreCase(filterConditionDto.getType()) || "IS NOT NULL".equalsIgnoreCase(filterConditionDto.getType())) {
|
|||
|
|
sb.append(" ").
|
|||
|
|
append(getConnectCondition(filterConditionDto.getConnectCondition())).
|
|||
|
|
append(" ").
|
|||
|
|
append(filterConditionDto.getColumIndex()).
|
|||
|
|
append(" ").
|
|||
|
|
append(getQueryType(filterConditionDto.getType())).
|
|||
|
|
append(" ");
|
|||
|
|
} else if ("BETWEEN".equalsIgnoreCase(filterConditionDto.getType())) {
|
|||
|
|
String[] split = filterConditionDto.getValue().split("\",\"");
|
|||
|
|
StringBuffer stringBuffer = new StringBuffer();
|
|||
|
|
if (split.length > 0) {
|
|||
|
|
List<String> list = JSONArray.parseArray(filterConditionDto.getValue(), String.class);
|
|||
|
|
String str = "";
|
|||
|
|
for (String s : list) {
|
|||
|
|
stringBuffer.append(" '").append(s).append("' AND");
|
|||
|
|
}
|
|||
|
|
str = stringBuffer.toString().substring(0, stringBuffer.length() - 3);
|
|||
|
|
sb.append(" ").
|
|||
|
|
append(getConnectCondition(filterConditionDto.getConnectCondition())).
|
|||
|
|
append(" ").
|
|||
|
|
append(filterConditionDto.getColumIndex()).
|
|||
|
|
append(" ").
|
|||
|
|
append(getQueryType(filterConditionDto.getType())).
|
|||
|
|
append(str).
|
|||
|
|
append(" ");
|
|||
|
|
} else if (split.length == 0) {
|
|||
|
|
sb.append(" ").
|
|||
|
|
append(getConnectCondition(filterConditionDto.getConnectCondition())).
|
|||
|
|
append(" ").
|
|||
|
|
append(filterConditionDto.getColumIndex()).
|
|||
|
|
append(" ").
|
|||
|
|
append(getQueryType(filterConditionDto.getType())).
|
|||
|
|
append(" '").
|
|||
|
|
append(filterConditionDto.getValue()).
|
|||
|
|
append("' ");
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
if ("targetid".equals(filterConditionDto.getColumIndex()) || "log_operator".equals(filterConditionDto.getColumIndex())) {
|
|||
|
|
if (StringUtils.isNotBlank(filterConditionDto.getValue())) {
|
|||
|
|
sb.append(" ").
|
|||
|
|
append(getConnectCondition(filterConditionDto.getConnectCondition())).
|
|||
|
|
append(" ").
|
|||
|
|
append(filterConditionDto.getColumIndex()).
|
|||
|
|
append(" ").
|
|||
|
|
append(getQueryType(filterConditionDto.getType())).
|
|||
|
|
append(" ").
|
|||
|
|
append(filterConditionDto.getValue()).
|
|||
|
|
append(" ");
|
|||
|
|
} else {
|
|||
|
|
sb.append(" ").
|
|||
|
|
append(getConnectCondition(filterConditionDto.getConnectCondition())).
|
|||
|
|
append(" ").
|
|||
|
|
append(filterConditionDto.getColumIndex()).
|
|||
|
|
append(" ").
|
|||
|
|
append(getQueryType(filterConditionDto.getType())).
|
|||
|
|
append(" ").
|
|||
|
|
append(-1).
|
|||
|
|
append(" ");
|
|||
|
|
}
|
|||
|
|
} else {
|
|||
|
|
sb.append(" ").
|
|||
|
|
append(getConnectCondition(filterConditionDto.getConnectCondition())).
|
|||
|
|
append(" ").
|
|||
|
|
append(filterConditionDto.getColumIndex()).
|
|||
|
|
append(" ").
|
|||
|
|
append(getQueryType(filterConditionDto.getType())).
|
|||
|
|
append(" '").
|
|||
|
|
append(filterConditionDto.getValue()).
|
|||
|
|
append("' ");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
return sb.toString();
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private void switchDatabaseFieldIndex(FilterConditionDto filterConditionDto) {
|
|||
|
|
if ("operator".equalsIgnoreCase(filterConditionDto.getColumIndex())) {
|
|||
|
|
filterConditionDto.setColumIndex("log_operator");
|
|||
|
|
} else if ("date".equalsIgnoreCase(filterConditionDto.getColumIndex())) {
|
|||
|
|
filterConditionDto.setColumIndex("log_date");
|
|||
|
|
} else if ("result".equalsIgnoreCase(filterConditionDto.getColumIndex())) {
|
|||
|
|
filterConditionDto.setColumIndex("log_result");
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 获取查询类型
|
|||
|
|
*
|
|||
|
|
* @param type
|
|||
|
|
* @return
|
|||
|
|
*/
|
|||
|
|
private String getQueryType(String type) {
|
|||
|
|
//如果不填默认是=
|
|||
|
|
if (StringUtils.isBlank(type)) {
|
|||
|
|
return " = ";
|
|||
|
|
}
|
|||
|
|
return type;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 获取连接条件
|
|||
|
|
*
|
|||
|
|
* @param connectCondition
|
|||
|
|
* @return
|
|||
|
|
*/
|
|||
|
|
private String getConnectCondition(String connectCondition) {
|
|||
|
|
//如果不填默认是AND
|
|||
|
|
if (StringUtils.isBlank(connectCondition)) {
|
|||
|
|
return " AND ";
|
|||
|
|
}
|
|||
|
|
return connectCondition;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@Override
|
|||
|
|
public List<Map<String, Object>> getDetailChanges(String module, String function, String mainid, String detailTransMethod) {
|
|||
|
|
List<Map<String, Object>> list = getDetailChangesMethod(module, function, mainid, detailTransMethod, null);
|
|||
|
|
return list;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 明细分页查询
|
|||
|
|
* @param module
|
|||
|
|
* @param function
|
|||
|
|
* @param mainid
|
|||
|
|
* @param detailTransMethod
|
|||
|
|
* @param current
|
|||
|
|
* @param pageSize
|
|||
|
|
* @return
|
|||
|
|
*/
|
|||
|
|
@Override
|
|||
|
|
public WeaTable getDetailChangePages(String module, String function, String mainid, String detailTransMethod, String current, String pageSize) {
|
|||
|
|
|
|||
|
|
Integer pageNum = Util.getIntValue(current, 1);
|
|||
|
|
Integer size = Util.getIntValue(pageSize, 10);
|
|||
|
|
Page page = new Page(pageNum,size);
|
|||
|
|
|
|||
|
|
List<Map<String, Object>> list = getDetailChangesMethod(module, function, mainid, null, page);
|
|||
|
|
|
|||
|
|
//查询分页总数
|
|||
|
|
String tableName = ElogSeviceUtils.getTableName(module, function, true);
|
|||
|
|
Integer total = localElogDaoMapper.queryAllChangesPageCounts(tableName, mainid);
|
|||
|
|
page.setTotal(total);
|
|||
|
|
WeaTable weaTable =new WeaTable();
|
|||
|
|
weaTable.setColumns(getDetailColumns(list));
|
|||
|
|
weaTable.setPage(page);
|
|||
|
|
weaTable.setData(list);
|
|||
|
|
|
|||
|
|
if (Util.isNotEmpty(detailTransMethod)) {
|
|||
|
|
// 消费到消息,通过MethodHandler调用对应的方法
|
|||
|
|
MethodHandler methodHandler = ElogMethodHandler.loadMethodHandler(detailTransMethod);
|
|||
|
|
if (methodHandler != null) {
|
|||
|
|
try {
|
|||
|
|
methodHandler.execute(weaTable);
|
|||
|
|
} catch (Exception e) {
|
|||
|
|
logger.error("转换出错:" + e);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return weaTable;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private List<WeaTableColumn> getDetailColumns(List<Map<String, Object>> list) {
|
|||
|
|
|
|||
|
|
List<WeaTableColumn> columns = new ArrayList<>();
|
|||
|
|
if (Util.isNotEmpty(list)) {
|
|||
|
|
List<Map> detailcontexts= (List<Map>) list.get(0).get("detailcontexts");
|
|||
|
|
if (Util.isNotEmpty(detailcontexts)) {
|
|||
|
|
for (Map map : detailcontexts) {
|
|||
|
|
WeaTableColumn weaTableColumn = new WeaTableColumn();
|
|||
|
|
// 列表属性名
|
|||
|
|
weaTableColumn.setDataIndex((String) map.get("fieldname"));
|
|||
|
|
//显示名称 多语言转换 fieldnamelabelid
|
|||
|
|
weaTableColumn.setTitle((String) map.get("fieldname"));
|
|||
|
|
columns.add(weaTableColumn);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return columns;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public List<Map<String, Object>> getDetailChangesMethod(String module, String function, String mainid, String detailTransMethod,Page page) {
|
|||
|
|
|
|||
|
|
List list = new ArrayList<>();
|
|||
|
|
String tableName = ElogSeviceUtils.getTableName(module, function, true);
|
|||
|
|
String maintableName = ElogSeviceUtils.getTableName(module, function, false);
|
|||
|
|
List<Map> maps = localElogDaoMapper.queryAllMainData(maintableName, mainid);
|
|||
|
|
|
|||
|
|
for (Map map : maps) {
|
|||
|
|
|
|||
|
|
if (map.get("params") != null && ElogConsts.ES.equalsIgnoreCase(map.get("params").toString())) {
|
|||
|
|
|
|||
|
|
String logDate = map.get("log_date").toString();
|
|||
|
|
logger.info("logDate:{}" ,logDate);
|
|||
|
|
String esDate = logDate.substring(0, 10);
|
|||
|
|
//先判断表存不存在,不存在创建
|
|||
|
|
if (checkEsTableIsExist(esDate)) {
|
|||
|
|
// 根据id通过es查询大字段(params)然后赋值
|
|||
|
|
SearchRequest searchRequest = new SearchRequest(getElogESTableName(true,esDate));
|
|||
|
|
|
|||
|
|
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
|
|||
|
|
// 只获取指定字段
|
|||
|
|
String[] fields = {"params"};
|
|||
|
|
searchSourceBuilder.fetchSource(fields, null);
|
|||
|
|
// 根据id匹配
|
|||
|
|
searchSourceBuilder.query(QueryBuilders.termQuery("id",map.get("id").toString()));
|
|||
|
|
searchRequest.source(searchSourceBuilder);
|
|||
|
|
|
|||
|
|
SearchResponse searchResponse = null;
|
|||
|
|
try {
|
|||
|
|
searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
|
|||
|
|
} catch (IOException e) {
|
|||
|
|
logger.info("查询ES出现异常:{}",e.getMessage());
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
SearchHits hits = searchResponse.getHits();
|
|||
|
|
SearchHit[] searchHits = hits.getHits();
|
|||
|
|
if (searchHits != null && searchHits.length > 0) {
|
|||
|
|
// 根据id匹配唯一,所以直接取第一个
|
|||
|
|
Map<String, Object> sourceAsMap = searchHits[0].getSourceAsMap();
|
|||
|
|
if (Objects.nonNull(sourceAsMap) && Objects.nonNull(sourceAsMap.get("params")) && StringUtils.isNotEmpty(sourceAsMap.get("params").toString())) {
|
|||
|
|
logger.info("ES查出来的params:{}",sourceAsMap.get("params"));
|
|||
|
|
map.put("params",sourceAsMap.get("params"));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
if (map.get("params") != null && map.get("params").toString().startsWith("H4s")) {
|
|||
|
|
map.put("params", ElogSeviceUtils.uncompress(map.get("params").toString()));
|
|||
|
|
map.put("params",SecurityUtil.encodeForHtml(map.get("params").toString(), true));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
maps = ElogSeviceSwitchUtils.getSwitchDatabaseData(maps);
|
|||
|
|
ElogSeviceSwitchUtils.changKey2Lower(maps);
|
|||
|
|
List<Map> allChangesData = new ArrayList<>();
|
|||
|
|
//如果有分页数据则走分页方法
|
|||
|
|
if (Objects.nonNull(page) ) {
|
|||
|
|
// Integer offset = (pageNum - 1) * size;
|
|||
|
|
//分页查询明细数据
|
|||
|
|
allChangesData = localElogDaoMapper.queryAllChangesDataPages(tableName, mainid, page);
|
|||
|
|
} else {
|
|||
|
|
//没有被则不分页
|
|||
|
|
allChangesData = localElogDaoMapper.queryAllChangesData(tableName, mainid);
|
|||
|
|
}
|
|||
|
|
ElogSeviceSwitchUtils.changKey2Lower(allChangesData);
|
|||
|
|
allChangesData = ElogSeviceSwitchUtils.getSwitchDatabaseData(allChangesData);
|
|||
|
|
List<Map> mainlist = new ArrayList<>();
|
|||
|
|
List<Map> detaillist = new ArrayList<>();
|
|||
|
|
if (allChangesData != null && allChangesData.size() > 0) {
|
|||
|
|
for (Map allChangesDatum : allChangesData) {
|
|||
|
|
Object o = allChangesDatum.get("isdetail");
|
|||
|
|
if (o != null) {
|
|||
|
|
if ("0".equals(o.toString())) {
|
|||
|
|
mainlist.add(allChangesDatum);
|
|||
|
|
} else {
|
|||
|
|
detaillist.add(allChangesDatum);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
// List<Map> mainlist = localElogDaoMapper.queryAllMainChanges(tableName, mainid);
|
|||
|
|
// List<Map> detaillist = localElogDaoMapper.queryAllDetailChanges(tableName, mainid);
|
|||
|
|
//List<Map> moduleInfo = queryCommonTabeMapper.queryModuleNameInfo(module);
|
|||
|
|
List<Map> moduleInfo = new ArrayList<>();
|
|||
|
|
processDetailInfo(mainlist, detaillist, moduleInfo);
|
|||
|
|
Map<String, Object> map = ElogSeviceSwitchUtils.switchChangeValue(mainlist, maps);
|
|||
|
|
Map<String, Object> detailMap = ElogSeviceSwitchUtils.switchDetailChangeValue(detaillist);
|
|||
|
|
map.putAll(detailMap);
|
|||
|
|
if (maps != null && maps.size() > 0) {
|
|||
|
|
Map maininfoMap = maps.get(0);
|
|||
|
|
String operatetypename = (String)maininfoMap.get("operatetypename");
|
|||
|
|
String targetname = (String)maininfoMap.get("targetname");
|
|||
|
|
//长度大于1避免部分模块为1,2,3这类的操作类型
|
|||
|
|
if (StringUtils.isNumeric(operatetypename) && operatetypename.length() > 1 && operatetypename.length() < 10) {
|
|||
|
|
String transfOperatetypename = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(operatetypename), operatetypename);
|
|||
|
|
maininfoMap.put("operatetypename",transfOperatetypename);
|
|||
|
|
}
|
|||
|
|
if (StringUtils.isNumeric(targetname) && targetname.length() > 1 && targetname.length() < 10) {
|
|||
|
|
String transfTargetname = ElogSeviceSwitchUtils.transfLanguageLableid(Long.parseLong(targetname), targetname);
|
|||
|
|
maininfoMap.put("targetname",transfTargetname);
|
|||
|
|
}
|
|||
|
|
map.put("maininfo",maininfoMap);
|
|||
|
|
|
|||
|
|
map.put("detailtitle", "");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
list.add(map);
|
|||
|
|
if (Util.isNotEmpty(detailTransMethod)) {
|
|||
|
|
// 消费到消息,通过MethodHandler调用对应的方法
|
|||
|
|
MethodHandler methodHandler = ElogMethodHandler.loadMethodHandler(detailTransMethod);
|
|||
|
|
if (methodHandler != null) {
|
|||
|
|
try {
|
|||
|
|
methodHandler.execute(list);
|
|||
|
|
} catch (Exception e) {
|
|||
|
|
logger.error("转换出错:" + e);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//List transfLanguageData = ElogSeviceSwitchUtils.transfLanguageData(list);
|
|||
|
|
return list;
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 处理修改详情转多语言(主表和明细表)
|
|||
|
|
*
|
|||
|
|
* @param mainlist
|
|||
|
|
* @param detaillist
|
|||
|
|
* @param commonTableInfo
|
|||
|
|
* @return
|
|||
|
|
*/
|
|||
|
|
private void processDetailInfo(List<Map> mainlist, List<Map> detaillist, List<Map> commonTableInfo) {
|
|||
|
|
Map<String, Object> tablenameMap = new HashMap<>();
|
|||
|
|
Map<String, Object> fieldnameMap = new HashMap<>();
|
|||
|
|
Map<String, Object> valueMap = new HashMap<>();
|
|||
|
|
|
|||
|
|
if (commonTableInfo != null && commonTableInfo.size() > 0) {
|
|||
|
|
for (Map commonTableInfoMap : commonTableInfo) {
|
|||
|
|
JSONObject commonTableInfoMapJs = JSONObject.parseObject(JSONObject.toJSONString(commonTableInfoMap));
|
|||
|
|
String tablename = commonTableInfoMapJs.getString("table_name");
|
|||
|
|
String tablename_labelid = commonTableInfoMapJs.getString("tablename_labelid");
|
|||
|
|
String fieldname = commonTableInfoMapJs.getString("field_name");
|
|||
|
|
String fieldname_labelid = commonTableInfoMapJs.getString("fieldname_labelid");
|
|||
|
|
String values_kvpairs = commonTableInfoMapJs.getString("values_kvpairs");
|
|||
|
|
fieldnameMap.put(fieldname, fieldname_labelid);
|
|||
|
|
if (StringUtils.isNotBlank(fieldname) && StringUtils.isNotBlank(values_kvpairs)) {
|
|||
|
|
JSONObject jsonObject = JSONObject.parseObject(values_kvpairs);
|
|||
|
|
valueMap.put(fieldname, jsonObject);
|
|||
|
|
}
|
|||
|
|
Object tablenameObj = tablenameMap.get(tablename);
|
|||
|
|
if (tablenameObj == null) {
|
|||
|
|
tablenameMap.put(tablename, tablename_labelid);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
if (mainlist != null && mainlist.size() > 0 && fieldnameMap.size() > 0 && valueMap.size() > 0) {
|
|||
|
|
for (Map mainlistMap : mainlist) {
|
|||
|
|
JSONObject mainMapJs = JSONObject.parseObject(JSONObject.toJSONString(mainlistMap));
|
|||
|
|
String fielddesc = mainMapJs.getString("fielddesc");
|
|||
|
|
String oldvalue = mainMapJs.getString("oldvalue");
|
|||
|
|
String newvalue = mainMapJs.getString("newvalue");
|
|||
|
|
if (fieldnameMap.get(fielddesc) != null) {
|
|||
|
|
mainlistMap.put("fielddesc", ElogSeviceSwitchUtils.transfLanguageLableid(ElogSeviceUtils.getLongValue(fieldnameMap.get(fielddesc).toString()), fieldnameMap.get(fielddesc).toString()));
|
|||
|
|
}
|
|||
|
|
if (valueMap.get(fielddesc) != null) {
|
|||
|
|
JSONObject jsonObject = JSONObject.parseObject(valueMap.get(fielddesc).toString());
|
|||
|
|
String oldvalueStr = jsonObject.getString(oldvalue);
|
|||
|
|
String newvalueStr = jsonObject.getString(newvalue);
|
|||
|
|
if (StringUtils.isNotBlank(oldvalueStr)) {
|
|||
|
|
mainlistMap.put("oldvalue", ElogSeviceSwitchUtils.transfLanguageLableid(ElogSeviceUtils.getLongValue(oldvalueStr), oldvalue));
|
|||
|
|
}
|
|||
|
|
if (StringUtils.isNotBlank(newvalueStr)) {
|
|||
|
|
mainlistMap.put("newvalue", ElogSeviceSwitchUtils.transfLanguageLableid(ElogSeviceUtils.getLongValue(newvalueStr), newvalue));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (detaillist != null && detaillist.size() > 0 && fieldnameMap.size() > 0 && valueMap.size() > 0) {
|
|||
|
|
for (Map detaillistMap : detaillist) {
|
|||
|
|
JSONObject mainMapJs = JSONObject.parseObject(JSONObject.toJSONString(detaillistMap));
|
|||
|
|
String tablename = mainMapJs.getString("tablename");
|
|||
|
|
String fielddesc = mainMapJs.getString("fielddesc");
|
|||
|
|
String oldvalue = mainMapJs.getString("oldvalue");
|
|||
|
|
String newvalue = mainMapJs.getString("newvalue");
|
|||
|
|
if (tablenameMap.get(tablename) != null) {
|
|||
|
|
detaillistMap.put("tablename", ElogSeviceSwitchUtils.transfLanguageLableid(ElogSeviceUtils.getLongValue(tablenameMap.get(tablename).toString()), tablenameMap.get(tablename).toString()));
|
|||
|
|
}
|
|||
|
|
if (fieldnameMap.get(fielddesc) != null) {
|
|||
|
|
detaillistMap.put("fielddesc", ElogSeviceSwitchUtils.transfLanguageLableid(ElogSeviceUtils.getLongValue(fieldnameMap.get(fielddesc).toString()), fieldnameMap.get(fielddesc).toString()));
|
|||
|
|
}
|
|||
|
|
if (valueMap.get(fielddesc) != null) {
|
|||
|
|
JSONObject jsonObject = JSONObject.parseObject(valueMap.get(fielddesc).toString());
|
|||
|
|
String oldvalueStr = jsonObject.getString(oldvalue);
|
|||
|
|
String newvalueStr = jsonObject.getString(newvalue);
|
|||
|
|
if (StringUtils.isNotBlank(oldvalueStr)) {
|
|||
|
|
detaillistMap.put("oldvalue", ElogSeviceSwitchUtils.transfLanguageLableid(ElogSeviceUtils.getLongValue(oldvalueStr), oldvalue));
|
|||
|
|
}
|
|||
|
|
if (StringUtils.isNotBlank(newvalueStr)) {
|
|||
|
|
detaillistMap.put("newvalue", ElogSeviceSwitchUtils.transfLanguageLableid(ElogSeviceUtils.getLongValue(newvalueStr), newvalue));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@Override
|
|||
|
|
public List queryLogList(String module, String function, String current, String pageSize, String condition) {
|
|||
|
|
LoggerContext context = new LoggerContext();
|
|||
|
|
context.setModuleName(module);
|
|||
|
|
context.setFunctionName(function);
|
|||
|
|
int pagenum = Util.getIntValue(current, 1) - 1;
|
|||
|
|
int size = Util.getIntValue(pageSize, 10);
|
|||
|
|
int start = pagenum * size;
|
|||
|
|
int end = start + size;
|
|||
|
|
Page<Map> page = new Page(pagenum, size);
|
|||
|
|
String limit = " limit " + start + "," + (end - start);
|
|||
|
|
|
|||
|
|
String tableName = ElogSeviceUtils.getTableName(module, function);
|
|||
|
|
List<Map> list = localElogDaoMapper.queryElogList(page, context, null, tableName, null,"*");
|
|||
|
|
list = ElogSeviceSwitchUtils.getSwitchDatabaseData(list);
|
|||
|
|
return switchString(list);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@Override
|
|||
|
|
public List queryCardLogList(String data) {
|
|||
|
|
JSONObject map = JSONObject.parseObject(data);
|
|||
|
|
String module = "";
|
|||
|
|
String function = "";
|
|||
|
|
String pageNum = "";
|
|||
|
|
String pageSize = "";
|
|||
|
|
String dataset = "";
|
|||
|
|
String searchMap = "";
|
|||
|
|
String sColum = "";
|
|||
|
|
String fColum = "";
|
|||
|
|
String transMethod = null;
|
|||
|
|
List<ShowColumsDto> showColums = new ArrayList<>();
|
|||
|
|
List<FilterConditionDto> filterConditionDtos = new ArrayList<>();
|
|||
|
|
String authParams = "";
|
|||
|
|
Map jsonObject = new HashMap();
|
|||
|
|
if (map != null) {
|
|||
|
|
module = map.getString("module");
|
|||
|
|
function = map.getString("function");
|
|||
|
|
pageNum = map.getString("pageNum");
|
|||
|
|
pageSize = map.getString("pageSize");
|
|||
|
|
//dataset = map.get("dataset").toString();
|
|||
|
|
searchMap = map.getString("searchMap");
|
|||
|
|
sColum = map.getString("showColums");
|
|||
|
|
showColums = JSONArray.parseArray(sColum, ShowColumsDto.class);
|
|||
|
|
fColum = map.getString("filterConditions");
|
|||
|
|
transMethod = map.getString("transMethod");
|
|||
|
|
filterConditionDtos = JSONArray.parseArray(fColum, FilterConditionDto.class);
|
|||
|
|
authParams = map.getString("authParams");
|
|||
|
|
jsonObject = JSONObject.parseObject(authParams);
|
|||
|
|
}
|
|||
|
|
LoggerContext context = new LoggerContext();
|
|||
|
|
context.setModuleName(module);
|
|||
|
|
context.setFunctionName(function);
|
|||
|
|
context.setTenant_key(getTenantKey().toLowerCase());
|
|||
|
|
// 分页
|
|||
|
|
//Page<Map> pages = ElogSeviceUtils.getPage();
|
|||
|
|
String sb = getQueryCondition(filterConditionDtos);
|
|||
|
|
logger.info("elog查询条件拼接sql:{}", sb);
|
|||
|
|
// 消费到消息,通过MethodHandler调用对应的方法
|
|||
|
|
//String targetid = getTargetid(filterConditionDtos);
|
|||
|
|
Map customAuthMap = getCustomAuthSql(transMethod, jsonObject, "auth");
|
|||
|
|
if (!customAuthMap.isEmpty()) {
|
|||
|
|
Object flag = customAuthMap.get("flag");
|
|||
|
|
if (flag != null && flag instanceof Boolean) {
|
|||
|
|
boolean f = (boolean) flag;
|
|||
|
|
if (!f) {
|
|||
|
|
List<Map> list = new ArrayList<>();
|
|||
|
|
list.add(customAuthMap);
|
|||
|
|
return list;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
String customSql = getCustomSql(transMethod, sb, "before");
|
|||
|
|
|
|||
|
|
Page pages = new Page(ElogSeviceUtils.getIntValue(pageNum, 1), ElogSeviceUtils.getIntValue(pageSize, 10));
|
|||
|
|
int page = Util.getIntValue(pages.getCurrent() + "", 1) - 1;
|
|||
|
|
int size = Util.getIntValue(pages.getSize() + "", 10);
|
|||
|
|
int start = page * size;
|
|||
|
|
int end = start + size;
|
|||
|
|
String limit = " limit " + start + "," + (end - start);
|
|||
|
|
String tableName = ElogSeviceUtils.getTableName(module, function);
|
|||
|
|
long l = System.currentTimeMillis();
|
|||
|
|
Map hashMap = addPermissionHandler(transMethod);
|
|||
|
|
String permissionId = "";
|
|||
|
|
String permissionType = "";
|
|||
|
|
String mainDataTableAlias = "";
|
|||
|
|
String mainDataTable = "";
|
|||
|
|
String primaryKey = "";
|
|||
|
|
String permissionTargetId = "";
|
|||
|
|
String permissionConfigSourceId = "";
|
|||
|
|
|
|||
|
|
permissionId = getPermissionStr(hashMap, "permissionId");
|
|||
|
|
permissionType = getPermissionStr(hashMap, "permissionType");
|
|||
|
|
mainDataTableAlias = getPermissionStr(hashMap, "mainDataTableAlias");
|
|||
|
|
mainDataTable = getPermissionStr(hashMap, "mainDataTable");
|
|||
|
|
primaryKey = getPermissionStr(hashMap, "primaryKey");
|
|||
|
|
permissionTargetId = getPermissionStr(hashMap, "permissionTargetId");
|
|||
|
|
permissionConfigSourceId = getPermissionStr(hashMap, "permissionConfigSourceId");
|
|||
|
|
|
|||
|
|
//String columns = getshowColumsStr(showColums);
|
|||
|
|
List<Map> list = new ArrayList<>();
|
|||
|
|
Map<String, Object> countMap = new HashMap<>();
|
|||
|
|
if (StringUtils.isNotEmpty(permissionId) || StringUtils.isNotEmpty(permissionType) || StringUtils.isNotEmpty(mainDataTableAlias) || StringUtils.isNotEmpty(mainDataTable) || StringUtils.isNotEmpty(permissionTargetId) || StringUtils.isNotEmpty(permissionConfigSourceId)) {
|
|||
|
|
list = localElogDaoMapper.queryElogList(pages, context, null, tableName, customSql, mainDataTable, permissionId, permissionType, mainDataTableAlias, primaryKey,permissionTargetId,permissionConfigSourceId,"*");
|
|||
|
|
countMap = localElogDaoMapper.elogCountByMorePermission(context, tableName, customSql, mainDataTable, permissionId, permissionType, mainDataTableAlias, primaryKey, permissionTargetId,permissionConfigSourceId);
|
|||
|
|
} else {
|
|||
|
|
list = localElogDaoMapper.queryElogList(pages, context, null, tableName, customSql,"*");
|
|||
|
|
long l1 = System.currentTimeMillis();
|
|||
|
|
logger.info("elog查询列表耗时:{}", (l1 - l));
|
|||
|
|
countMap = localElogDaoMapper.elogCount(context, tableName, customSql);
|
|||
|
|
long l2 = System.currentTimeMillis();
|
|||
|
|
logger.info("elog查询总数耗时:{}", (l2 - l1));
|
|||
|
|
}
|
|||
|
|
list = ElogSeviceSwitchUtils.getSwitchDatabaseData(list);
|
|||
|
|
|
|||
|
|
if (list != null && list.size() > 0) {
|
|||
|
|
//if ("1".equals(pageNum)){
|
|||
|
|
list.get(0).put("total", ElogSeviceUtils.getLongValue(countMap.get("counts") + "", 0));
|
|||
|
|
//}
|
|||
|
|
}
|
|||
|
|
transUserInfo(list);
|
|||
|
|
long l3 = System.currentTimeMillis();
|
|||
|
|
//System.out.println("elog查询名称和头像耗时:{}"+ (l3-l2));
|
|||
|
|
transfLanguageData(list, showColums);
|
|||
|
|
if (Util.isNotEmpty(transMethod)) {
|
|||
|
|
// 消费到消息,通过MethodHandler调用对应的方法
|
|||
|
|
MethodHandler methodHandler = ElogMethodHandler.loadMethodHandler(transMethod);
|
|||
|
|
if (methodHandler != null) {
|
|||
|
|
try {
|
|||
|
|
methodHandler.execute(list);
|
|||
|
|
} catch (Exception e) {
|
|||
|
|
logger.error("转换出错:" + e);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
long l4 = System.currentTimeMillis();
|
|||
|
|
logger.info("elog查询转换耗时:{}", (l4 - l3));
|
|||
|
|
List res = switchString(list);
|
|||
|
|
logger.info("elog查询总耗时:{}", (l4 - l));
|
|||
|
|
return res;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 转换数据成多语言,结合前端转
|
|||
|
|
*
|
|||
|
|
* @param lists
|
|||
|
|
* @param showColums
|
|||
|
|
*/
|
|||
|
|
public static List transfLanguageData(List<Map> lists, List<ShowColumsDto> showColums) {
|
|||
|
|
if (lists != null && lists.size() > 0) {
|
|||
|
|
for (Map map : lists) {
|
|||
|
|
if (map != null) {
|
|||
|
|
Iterator<Map.Entry<String, Object>> iterator = map.entrySet().iterator();
|
|||
|
|
while (iterator.hasNext()) {
|
|||
|
|
Map.Entry<String, Object> entry = iterator.next();
|
|||
|
|
for (ShowColumsDto showColum : showColums) {
|
|||
|
|
if (StringUtils.isNotBlank(showColum.getColumIndex()) && showColum.isTransfLanguage() && entry.getKey().equals(showColum.getColumIndex()) && !Objects.isNull(entry.getValue()) && StringUtils.isNumeric(entry.getValue().toString())) {
|
|||
|
|
if (entry.getValue() instanceof Integer || entry.getValue() instanceof Long || entry.getValue() instanceof String) {
|
|||
|
|
map.put(entry.getKey(), ElogSeviceSwitchUtils.transfLanguageLableid(ElogSeviceUtils.getLongValue(entry.getValue().toString()), entry.getValue().toString()));
|
|||
|
|
} else {
|
|||
|
|
//map.put(entry.getKey(), ElogSeviceSwitchUtils.handlerBaseDataMethod(entry.getValue().toString()));
|
|||
|
|
map.put(entry.getKey(), entry.getValue());
|
|||
|
|
}
|
|||
|
|
} else if (StringUtils.isNotBlank(showColum.getColumIndex()) && showColum.isTransfLanguage() && entry.getKey().equals(showColum.getColumIndex()) && !Objects.isNull(entry.getValue())) {
|
|||
|
|
//read view add edit update delete
|
|||
|
|
if ("add".equals(entry.getValue().toString()) || "创建".equals(entry.getValue().toString())) {
|
|||
|
|
map.put(entry.getKey(), SystemEnv.getHtmlLabelName(63252, "新增"));
|
|||
|
|
} else if ("read".equals(entry.getValue().toString()) || "view".equals(entry.getValue().toString()) || "查看".equals(entry.getValue().toString())) {
|
|||
|
|
map.put(entry.getKey(), SystemEnv.getHtmlLabelName(55172, "查看"));
|
|||
|
|
} else if ("edit".equals(entry.getValue().toString()) || "update".equals(entry.getValue().toString()) || "更新".equals(entry.getValue().toString())) {
|
|||
|
|
map.put(entry.getKey(), SystemEnv.getHtmlLabelName(63253, "修改"));
|
|||
|
|
} else if ("delete".equals(entry.getValue().toString()) || "删除".equals(entry.getValue().toString()) ) {
|
|||
|
|
map.put(entry.getKey(), SystemEnv.getHtmlLabelName(63254, "删除"));
|
|||
|
|
} else if (entry.getValue().toString().contains("取消关联标签 ")) {
|
|||
|
|
String val = entry.getValue().toString().replace("取消关联标签 ", SystemEnv.getHtmlLabelName(83237, "取消关联标签 ") + " ");
|
|||
|
|
map.put(entry.getKey(), val);
|
|||
|
|
} else if (entry.getValue().toString().contains("关联标签 ")) {
|
|||
|
|
String val = entry.getValue().toString().replace("关联标签 ", SystemEnv.getHtmlLabelName(83236, "关联标签 ") + " ");
|
|||
|
|
map.put(entry.getKey(), val);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return lists;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
@Override
|
|||
|
|
public Map countLog(String module, String function) {
|
|||
|
|
LoggerContext context = new LoggerContext();
|
|||
|
|
context.setModuleName(module);
|
|||
|
|
context.setFunctionName(function);
|
|||
|
|
context.setTenant_key(getTenantKey());
|
|||
|
|
String tableName = ElogSeviceUtils.getTableName(module, function);
|
|||
|
|
return localElogDaoMapper.elogCount(context, tableName, null);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@Override
|
|||
|
|
public List queryDetailLogList(String module, String function, String current, String pageSize, String condition, String mainId) {
|
|||
|
|
LoggerContext context = new LoggerContext();
|
|||
|
|
context.setModuleName(module);
|
|||
|
|
context.setFunctionName(function);
|
|||
|
|
context.setTenant_key(getTenantKey());
|
|||
|
|
context.setUuid(mainId);
|
|||
|
|
int page = Util.getIntValue(current, 1) - 1;
|
|||
|
|
int size = Util.getIntValue(pageSize, 10);
|
|||
|
|
int start = page * size;
|
|||
|
|
int end = start + size;
|
|||
|
|
String limit = " limit " + start + "," + (end - start);
|
|||
|
|
// 还需要支持下查询
|
|||
|
|
String tableName = ElogSeviceUtils.getTableName(module, function, true);
|
|||
|
|
List<Map> list = localElogDaoMapper.queryDetailElogList(context, limit, tableName, null);
|
|||
|
|
list = ElogSeviceSwitchUtils.getSwitchDatabaseData(list);
|
|||
|
|
return switchString(list);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@Override
|
|||
|
|
public Map countDestailLog(String module, String function, String mainId) {
|
|||
|
|
LoggerContext context = new LoggerContext();
|
|||
|
|
context.setModuleName(module);
|
|||
|
|
context.setFunctionName(function);
|
|||
|
|
context.setTenant_key(getTenantKey());
|
|||
|
|
context.setUuid(mainId);
|
|||
|
|
String tableName = ElogSeviceUtils.getTableName(module, function, true);
|
|||
|
|
return localElogDaoMapper.elogDetailCount(context, tableName, null);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@Override
|
|||
|
|
public WeaTable queryElogTraceInfo(String traceId, String module, String function, Integer currentPage, Integer pageSize, String traceTransMethod) {
|
|||
|
|
WeaTable weaTable = new WeaTable();
|
|||
|
|
if (StringUtils.isNotEmpty(traceId)) {
|
|||
|
|
String tableName = ElogSeviceUtils.getTableName(module, function);
|
|||
|
|
Integer offset = (currentPage - 1) * pageSize;
|
|||
|
|
List<Map> list = localElogDaoMapper.queryElogTraceInfo(traceId, tableName, offset, pageSize);
|
|||
|
|
for (Map map : list) {
|
|||
|
|
if (map.get("modulename") != null) {
|
|||
|
|
map.put("modulenamespan", ElogSeviceSwitchUtils.getModuleName(map.get("modulename").toString()));
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
//list = ElogSeviceSwitchUtils.getSwitchDatabaseData(list);
|
|||
|
|
int count = localElogDaoMapper.queryElogTraceInfoCount(traceId, tableName);
|
|||
|
|
weaTable.setTotal(count);
|
|||
|
|
Page page = new Page();
|
|||
|
|
page.setTotal(count);
|
|||
|
|
page.setSize(pageSize);
|
|||
|
|
page.setCurrent(currentPage);
|
|||
|
|
weaTable.setPage(page);
|
|||
|
|
if (Util.isNotEmpty(traceTransMethod)) {
|
|||
|
|
// 消费到消息,通过MethodHandler调用对应的方法
|
|||
|
|
MethodHandler methodHandler = ElogMethodHandler.loadMethodHandler(traceTransMethod);
|
|||
|
|
if (methodHandler != null) {
|
|||
|
|
try {
|
|||
|
|
methodHandler.execute(list);
|
|||
|
|
} catch (Exception e) {
|
|||
|
|
logger.error("转换出错:" + e);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
weaTable.setData(list);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return weaTable;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@Override
|
|||
|
|
public List queryLogInfoByCustom(String module, String function, String field, String value, boolean isDetail) {
|
|||
|
|
List list = new ArrayList();
|
|||
|
|
String tableName = ElogSeviceUtils.getTableName(module, function, isDetail);
|
|||
|
|
if (StringUtils.isNotBlank(field) && StringUtils.isNotBlank(value)) {
|
|||
|
|
StringBuffer sql = new StringBuffer();
|
|||
|
|
sql.append(field).append(" = '").append(value).append("' ");
|
|||
|
|
|
|||
|
|
list = localElogDaoMapper.queryLogInfoByCustom(tableName, sql.toString());
|
|||
|
|
}
|
|||
|
|
return list;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
@Override
|
|||
|
|
public List queryLogInfoByCustom(String module, String function, String field, String value) {
|
|||
|
|
return queryLogInfoByCustom(module, function, field, value, false);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public 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;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
@Override
|
|||
|
|
public BatchDocumentMessage downloadLog(String data) {
|
|||
|
|
JSONObject jsonObject = JSONObject.parseObject(data);
|
|||
|
|
String module = jsonObject.getString("downloadmodule");
|
|||
|
|
String function = jsonObject.getString("function");
|
|||
|
|
String serviceName = jsonObject.getString("serviceName");
|
|||
|
|
String fileName = jsonObject.getString("fileName");
|
|||
|
|
String passWord = jsonObject.getString("passWord");
|
|||
|
|
|
|||
|
|
if (StringUtils.isEmpty(fileName)) {
|
|||
|
|
fileName = SystemEnv.getHtmlLabelName(191432,"日志记录");
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
BatchDocumentMessage batchDocumentMessage = new BatchDocumentMessage();
|
|||
|
|
WeaTable weaTable = queryLogs(data);
|
|||
|
|
List<WeaTableColumn> columns = weaTable.getColumns();
|
|||
|
|
List<Map> headers = new ArrayList<>();
|
|||
|
|
if (columns != null && !columns.isEmpty()) {
|
|||
|
|
for (WeaTableColumn column : columns) {
|
|||
|
|
Map<String, String> header = new HashMap<>();
|
|||
|
|
header.put("key", column.getDataIndex());
|
|||
|
|
header.put("name", column.getTitle());
|
|||
|
|
headers.add(header);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
List<Map<String, Object>> dataList = weaTable.getData();
|
|||
|
|
List<Map<String, Object>> maps = new ArrayList<>();
|
|||
|
|
if (dataList != null && !dataList.isEmpty()) {
|
|||
|
|
dataList.stream().forEach(m -> {
|
|||
|
|
Map<String, Object> map = new HashMap<>();
|
|||
|
|
headers.stream().forEach(h -> {
|
|||
|
|
map.put(h.get("key").toString(), m.get(h.get("key")));
|
|||
|
|
});
|
|||
|
|
maps.add(map);
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//必传--业务id
|
|||
|
|
batchDocumentMessage.setBizId(IdGenerator.generate() + "");
|
|||
|
|
//必传-处理名称
|
|||
|
|
batchDocumentMessage.setHandlerName("ebatchdemo");
|
|||
|
|
//必传-服务名称
|
|||
|
|
batchDocumentMessage.setServiceName(serviceName);
|
|||
|
|
//必传-数据类型
|
|||
|
|
batchDocumentMessage.setDataType(fileName);
|
|||
|
|
//任务id
|
|||
|
|
batchDocumentMessage.setBatchTaskId(IdGenerator.generate());
|
|||
|
|
//必传-模块
|
|||
|
|
batchDocumentMessage.setModule(module); //com.weaver.teams.domain.EntityType 中的module(没有的话需要找温明刚维护下)
|
|||
|
|
//必传-功能
|
|||
|
|
batchDocumentMessage.setFunction(function);
|
|||
|
|
//必传-eteamsid
|
|||
|
|
batchDocumentMessage.setEteamsId(TenantRpcContext.getEteamsId());
|
|||
|
|
|
|||
|
|
//非必传
|
|||
|
|
if (StringUtils.isNotBlank(passWord)) {
|
|||
|
|
batchDocumentMessage.setPassword(passWord);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//必传
|
|||
|
|
BatchFile batchFile = new BatchFile();
|
|||
|
|
batchFile.setName(fileName);
|
|||
|
|
//必传
|
|||
|
|
batchFile.setFileType(FileType.EXCEL);
|
|||
|
|
//必传
|
|||
|
|
batchFile.setHandlerFileMethod(HandlerFileMethod.HANDLER_EXCEL_WITH_DATA);
|
|||
|
|
batchFile.setTemplateId(1l);
|
|||
|
|
List<ExcelSheet> excelSheets = new ArrayList<>();
|
|||
|
|
ExcelSheet excelSheet = new ExcelSheet();
|
|||
|
|
|
|||
|
|
excelSheet.setHeader(headers);
|
|||
|
|
excelSheet.setData(maps);
|
|||
|
|
excelSheet.setName(fileName);
|
|||
|
|
excelSheets.add(excelSheet);
|
|||
|
|
batchFile.setExcelSheets(excelSheets);
|
|||
|
|
batchDocumentMessage.setBatchFile(batchFile);
|
|||
|
|
batchDocumentMessage.setChunk(false);//不分片
|
|||
|
|
batchExportSender.sendBatchExport(batchDocumentMessage);
|
|||
|
|
|
|||
|
|
return batchDocumentMessage;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public Boolean checkEsTableIsExist(String date) {
|
|||
|
|
try {
|
|||
|
|
String esMainIndex = getElogESTableName(true, date);
|
|||
|
|
//先检查表是否存在 不存在则创建
|
|||
|
|
boolean existsLog = isExistsIndex(esMainIndex);
|
|||
|
|
return existsLog;
|
|||
|
|
} catch (Exception e) {
|
|||
|
|
logger.info("创建相关ES表失败:{}", e.getMessage(), e);
|
|||
|
|
}
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 判断一个索引是否存在
|
|||
|
|
*
|
|||
|
|
* @param indexName
|
|||
|
|
* @return
|
|||
|
|
*/
|
|||
|
|
public boolean isExistsIndex(String indexName) {
|
|||
|
|
GetIndexRequest request = new GetIndexRequest();
|
|||
|
|
try {
|
|||
|
|
boolean exists = restHighLevelClient.indices().exists(request.indices(indexName), RequestOptions.DEFAULT);
|
|||
|
|
return exists;
|
|||
|
|
} catch (Exception e) {
|
|||
|
|
logger.info("判断索引是否存在出现异常:{}", e.getMessage());
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
return false;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* 创建主表语句
|
|||
|
|
*
|
|||
|
|
* @throws IOException
|
|||
|
|
*/
|
|||
|
|
private void createLogIndex(String esMainIndex) {
|
|||
|
|
// 1.创建Request对象
|
|||
|
|
CreateIndexRequest request = new CreateIndexRequest(esMainIndex);
|
|||
|
|
// 2.准备请求的参数:DSL语句
|
|||
|
|
request.source(MAPPING_TEMPLATE, XContentType.JSON);
|
|||
|
|
// 3.发送请求
|
|||
|
|
try {
|
|||
|
|
restHighLevelClient.indices().create(request, RequestOptions.DEFAULT);
|
|||
|
|
} catch (IOException e) {
|
|||
|
|
logger.info("创建ES主表失败:{}", e.getMessage());
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private String getElogESTableName(boolean flag, String date) {
|
|||
|
|
String currentDate = "";
|
|||
|
|
if (StringUtils.isEmpty(date)) {
|
|||
|
|
currentDate = DateUtils.getCurrentDate().replaceAll("-", "");
|
|||
|
|
} else {
|
|||
|
|
currentDate = date.replaceAll("-", "");
|
|||
|
|
}
|
|||
|
|
return getEsMainIndex(flag, currentDate);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private String getEsMainIndex(boolean flag, String date) {
|
|||
|
|
if (flag) {
|
|||
|
|
return ElogEsTableConsts.ELOG_CENTER_LOGS_ES + date;
|
|||
|
|
}
|
|||
|
|
return ElogEsTableConsts.ELOG_CENTER_LOGSDETAIL_ES + date;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private 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;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
}
|