Commit e1c5a93f by fudahua

下载字段校验时间字段校验

parent 3dd90ade
package com.gic.cloud.data.hook.service; package com.gic.cloud.data.hook.service;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.ctrip.framework.apollo.Config; import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.ConfigService; import com.ctrip.framework.apollo.ConfigService;
import com.gic.cloud.data.hook.api.entity.FlatQueryCondition;
import com.gic.cloud.data.hook.api.entity.FlatQueryFieldType;
import com.gic.cloud.data.hook.service.entity.TimeCheckPojo;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.concurrent.BasicThreadFactory; import org.apache.commons.lang3.concurrent.BasicThreadFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import java.util.ArrayList; import java.util.*;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@Component @Component
public class FilterFieldUtils { public class FilterFieldUtils {
private static Logger logger= LoggerFactory.getLogger(FilterFieldUtils.class);
/** 脱敏字段 */ /** 脱敏字段 */
public static List<String> FILTERS_PHONE_ONLY = Arrays.asList("mobile", "phone", "enterprise_name", "phone_number", "receive_phone_number", "use_phone_number", "friend_phone_num","from_phone_num"); public static List<String> FILTERS_PHONE_ONLY = Arrays.asList("mobile", "phone", "enterprise_name", "phone_number", "receive_phone_number", "use_phone_number", "friend_phone_num","from_phone_num");
...@@ -58,4 +68,68 @@ public class FilterFieldUtils { ...@@ -58,4 +68,68 @@ public class FilterFieldUtils {
} }
}, 5, 5, TimeUnit.SECONDS); }, 5, 5, TimeUnit.SECONDS);
} }
private static ThreadLocal<Map<String,TimeCheckPojo>> TIMECHECK_THREADLOCAL=new ThreadLocal<>();
/**
* 初始化 时间校验
* @param queryConditions
*/
public static void timeFieldCheckInit(List<FlatQueryCondition> queryConditions) {
TIMECHECK_THREADLOCAL.remove();
HashMap<String,TimeCheckPojo> retMap=new HashMap<>();
if (CollectionUtils.isEmpty(queryConditions)) {
return;
}
for (FlatQueryCondition queryCondition : queryConditions) {
// 如果存在主过滤器的值,视为过滤器生效
if (StringUtils.isNotBlank(queryCondition.getMainFilter())
&&queryCondition.getFieldType().equals(FlatQueryFieldType.DATE)) {
String startDate = queryCondition.getMainFilter() + "";
String overDate = queryCondition.getExtendFilter() + "";
DateTime start = DateUtil.parse(startDate);
DateTime end = DateUtil.parse(overDate);
TimeCheckPojo timeCheckPojo=new TimeCheckPojo();
timeCheckPojo.setEndStr(overDate);
timeCheckPojo.setStartStr(startDate);
timeCheckPojo.setEndDate(end);
timeCheckPojo.setStartDate(start);
retMap.put(queryCondition.getFieldName(),timeCheckPojo);
}
}
logger.info("开始----:{}",JSONObject.toJSONString(retMap));
TIMECHECK_THREADLOCAL.set(retMap);
}
/**
* 校验时间
* @param key
* @param time
* @return
*/
public static void checkTime(String key,String time,Object orgObj){
Map<String, TimeCheckPojo> checkPojoMap = TIMECHECK_THREADLOCAL.get();
if (checkPojoMap == null) {
return;
}
TimeCheckPojo timeCheckPojo = checkPojoMap.get(key);
if (timeCheckPojo == null) {
return ;
}
DateTime parse = DateUtil.parse(time);
if(parse.isAfter(timeCheckPojo.getStartDate())&&parse.isBefore(timeCheckPojo.getEndDate())){
return ;
}
logger.info("key:{},time:{}---{},,orgTime:{}",key,time,orgObj, JSONObject.toJSON(timeCheckPojo));
}
/**
* 是否校验
*/
public static void removeTimeCheck(){
logger.info("结束----");
TIMECHECK_THREADLOCAL.remove();
}
} }
...@@ -185,7 +185,9 @@ public class CsvResultSetHelper implements ResultSetHelper { ...@@ -185,7 +185,9 @@ public class CsvResultSetHelper implements ResultSetHelper {
int columnType = resultSet.getMetaData().getColumnType(i + 1); int columnType = resultSet.getMetaData().getColumnType(i + 1);
switch (columnType) { switch (columnType) {
case Types.TIMESTAMP: case Types.TIMESTAMP:
result.add(resultSet.getTimestamp(i+1) != null ? datetimeFormatter.format(resultSet.getTimestamp(i+1)) : ""); String time = resultSet.getTimestamp(i + 1) != null ? datetimeFormatter.format(resultSet.getTimestamp(i + 1)) : "";
result.add(time);
FilterFieldUtils.checkTime(columnName,time,resultSet.getObject(i+1));
break; break;
case Types.DATE: case Types.DATE:
//result[i] = resultSet.getTimestamp(columnName) != null ? dateFormatter.format(resultSet.getTimestamp(columnName)) : ""; //result[i] = resultSet.getTimestamp(columnName) != null ? dateFormatter.format(resultSet.getTimestamp(columnName)) : "";
......
package com.gic.cloud.data.hook.service.entity;
import cn.hutool.core.date.DateTime;
import java.io.Serializable;
public class TimeCheckPojo implements Serializable {
private String startStr;
private String endStr;
private DateTime startDate;
private DateTime endDate;
public String getStartStr() {
return startStr;
}
public void setStartStr(String startStr) {
this.startStr = startStr;
}
public String getEndStr() {
return endStr;
}
public void setEndStr(String endStr) {
this.endStr = endStr;
}
public DateTime getStartDate() {
return startDate;
}
public void setStartDate(DateTime startDate) {
this.startDate = startDate;
}
public DateTime getEndDate() {
return endDate;
}
public void setEndDate(DateTime endDate) {
this.endDate = endDate;
}
}
...@@ -15,6 +15,7 @@ import com.gic.cloud.data.hook.service.dao.FlatQueryTableDao; ...@@ -15,6 +15,7 @@ import com.gic.cloud.data.hook.service.dao.FlatQueryTableDao;
import com.gic.cloud.data.hook.service.entity.CsvDataFilterMode; import com.gic.cloud.data.hook.service.entity.CsvDataFilterMode;
import com.gic.cloud.data.hook.service.entity.CsvResultSetHelper; import com.gic.cloud.data.hook.service.entity.CsvResultSetHelper;
import com.gic.dubbo.entity.ProviderLocalTag;
import com.gic.qcloud.BucketNameEnum; import com.gic.qcloud.BucketNameEnum;
import com.gic.qcloud.FileUploadUtil; import com.gic.qcloud.FileUploadUtil;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
...@@ -30,6 +31,8 @@ import org.apache.poi.ss.usermodel.Row; ...@@ -30,6 +31,8 @@ import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook; import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.datanucleus.store.rdbms.datasource.dbcp.SQLNestedException; import org.datanucleus.store.rdbms.datasource.dbcp.SQLNestedException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -56,6 +59,8 @@ import java.util.zip.ZipOutputStream; ...@@ -56,6 +59,8 @@ import java.util.zip.ZipOutputStream;
*/ */
public class FlatQueryResultServiceImpl implements IFlatQueryResultService { public class FlatQueryResultServiceImpl implements IFlatQueryResultService {
private static Logger logger= LoggerFactory.getLogger(FlatQueryResultServiceImpl.class);
/** 日志类 */ /** 日志类 */
private static LogPak log = new LogPak(FlatQueryResultServiceImpl.class); private static LogPak log = new LogPak(FlatQueryResultServiceImpl.class);
...@@ -564,6 +569,8 @@ public class FlatQueryResultServiceImpl implements IFlatQueryResultService { ...@@ -564,6 +569,8 @@ public class FlatQueryResultServiceImpl implements IFlatQueryResultService {
downloadService.scheduleAtFixedRate(new Runnable() { downloadService.scheduleAtFixedRate(new Runnable() {
@Override @Override
public void run() { public void run() {
ProviderLocalTag providerLocalTag = ProviderLocalTag.tag.get();
providerLocalTag.traceId = UUID.randomUUID().toString();
Connection connection = null; Connection connection = null;
try{ try{
if (taskConditions != null && taskConditions.size() > 0) { if (taskConditions != null && taskConditions.size() > 0) {
...@@ -623,6 +630,8 @@ public class FlatQueryResultServiceImpl implements IFlatQueryResultService { ...@@ -623,6 +630,8 @@ public class FlatQueryResultServiceImpl implements IFlatQueryResultService {
bigDataDownloadService.scheduleAtFixedRate(new Runnable() { bigDataDownloadService.scheduleAtFixedRate(new Runnable() {
@Override @Override
public void run() { public void run() {
ProviderLocalTag providerLocalTag = ProviderLocalTag.tag.get();
providerLocalTag.traceId = UUID.randomUUID().toString();
Connection connection = null; Connection connection = null;
try{ try{
if (bigTaskConditions != null && bigTaskConditions.size() > 0) { if (bigTaskConditions != null && bigTaskConditions.size() > 0) {
...@@ -647,6 +656,7 @@ public class FlatQueryResultServiceImpl implements IFlatQueryResultService { ...@@ -647,6 +656,7 @@ public class FlatQueryResultServiceImpl implements IFlatQueryResultService {
bigTaskRunningMap.remove(condition.getTaskId()); bigTaskRunningMap.remove(condition.getTaskId());
} // 没有任务则忽略 } // 没有任务则忽略
}catch (Exception e){ }catch (Exception e){
logger.info("下载异常:{}",e);
log.debug("自助指标下载异常", e.getMessage()); log.debug("自助指标下载异常", e.getMessage());
e.printStackTrace(); e.printStackTrace();
} finally { } finally {
...@@ -672,6 +682,9 @@ public class FlatQueryResultServiceImpl implements IFlatQueryResultService { ...@@ -672,6 +682,9 @@ public class FlatQueryResultServiceImpl implements IFlatQueryResultService {
@Override @Override
public void run() { public void run() {
Connection connection = null; Connection connection = null;
ProviderLocalTag providerLocalTag = ProviderLocalTag.tag.get();
providerLocalTag.traceId = UUID.randomUUID().toString();
try{ try{
if (taskConditions != null && taskConditions.size() > 0) { if (taskConditions != null && taskConditions.size() > 0) {
FlatQueryTaskCondition condition = null; FlatQueryTaskCondition condition = null;
...@@ -718,6 +731,9 @@ public class FlatQueryResultServiceImpl implements IFlatQueryResultService { ...@@ -718,6 +731,9 @@ public class FlatQueryResultServiceImpl implements IFlatQueryResultService {
task.setStatus(DownloadTaskStatus.BUILDING); task.setStatus(DownloadTaskStatus.BUILDING);
DownloadTaskServiceImpl.getInstance().updateDownloadTask(task); DownloadTaskServiceImpl.getInstance().updateDownloadTask(task);
log.debug("runDownloadTask.run", "自助指标下载任务执行:" + task.getId()); log.debug("runDownloadTask.run", "自助指标下载任务执行:" + task.getId());
//初始化校验
FilterFieldUtils.timeFieldCheckInit(condition.getConditions());
String fullQuery = buildFlatQuerySQL( String fullQuery = buildFlatQuerySQL(
false, // 下载用途 false, // 下载用途
condition.getTableId(), condition.getTableId(),
...@@ -834,6 +850,7 @@ public class FlatQueryResultServiceImpl implements IFlatQueryResultService { ...@@ -834,6 +850,7 @@ public class FlatQueryResultServiceImpl implements IFlatQueryResultService {
DownloadTaskServiceImpl.getInstance().updateDownloadTask(task); DownloadTaskServiceImpl.getInstance().updateDownloadTask(task);
} catch (Exception ex) { } catch (Exception ex) {
logger.info(task.getId()+" 下载异常异常:{}",ex);
ex.printStackTrace(); ex.printStackTrace();
// 标记任务异常 // 标记任务异常
task.setStatus(DownloadTaskStatus.ERROR); task.setStatus(DownloadTaskStatus.ERROR);
...@@ -845,6 +862,8 @@ public class FlatQueryResultServiceImpl implements IFlatQueryResultService { ...@@ -845,6 +862,8 @@ public class FlatQueryResultServiceImpl implements IFlatQueryResultService {
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
} }
// 移除校验
FilterFieldUtils.removeTimeCheck();
} }
} // IF OVER } // IF OVER
......
...@@ -19,6 +19,8 @@ import com.gic.enterprise.api.dto.StoreWidgetDTO; ...@@ -19,6 +19,8 @@ import com.gic.enterprise.api.dto.StoreWidgetDTO;
import com.gic.enterprise.api.service.EnterpriseService; import com.gic.enterprise.api.service.EnterpriseService;
import com.gic.enterprise.api.service.StoreWidgetService; import com.gic.enterprise.api.service.StoreWidgetService;
import com.gic.web.common.utils.SessionContextUtils; import com.gic.web.common.utils.SessionContextUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
...@@ -39,6 +41,8 @@ import java.util.List; ...@@ -39,6 +41,8 @@ import java.util.List;
@Controller @Controller
public class FlatQueryController { public class FlatQueryController {
private static Logger logger= LoggerFactory.getLogger(FlatQueryController.class);
/** 脱敏字段 */ /** 脱敏字段 */
public static final List<String> FILTERS_PHONE_ONLY = Arrays.asList("mobile", "phone", "enterprise_name", "phone_number", "receive_phone_number", "use_phone_number", "friend_phone_num","from_phone_num"); public static final List<String> FILTERS_PHONE_ONLY = Arrays.asList("mobile", "phone", "enterprise_name", "phone_number", "receive_phone_number", "use_phone_number", "friend_phone_num","from_phone_num");
...@@ -145,8 +149,8 @@ public class FlatQueryController { ...@@ -145,8 +149,8 @@ public class FlatQueryController {
*/ */
@RequestMapping("/flat-query") @RequestMapping("/flat-query")
public FlatQueryResult doFlatQuery(@RequestBody FlatQueryExecuteRequest executeRequest, HttpServletRequest request, HttpServletResponse response) { public FlatQueryResult doFlatQuery(@RequestBody FlatQueryExecuteRequest executeRequest, HttpServletRequest request, HttpServletResponse response) {
System.out.println("doFlatQuery:" + executeRequest.getTableId()); logger.info("doFlatQuery:" + executeRequest.getTableId());
System.out.println("doFlatQuery:" + executeRequest.getQueryConditions().size()); logger.info("doFlatQuery:" + executeRequest.getQueryConditions().size());
String enterpriseId = SessionContextUtils.getLoginUserEnterpriseId(); String enterpriseId = SessionContextUtils.getLoginUserEnterpriseId();
EnterpriseSettingDTO setting = this.enterpriseService.getEnterpriseSettingByEnterpriseId(enterpriseId); EnterpriseSettingDTO setting = this.enterpriseService.getEnterpriseSettingByEnterpriseId(enterpriseId);
int dataPermission = 0; int dataPermission = 0;
...@@ -154,7 +158,7 @@ public class FlatQueryController { ...@@ -154,7 +158,7 @@ public class FlatQueryController {
dataPermission = setting.getDataPermission(); dataPermission = setting.getDataPermission();
} }
for (FlatQueryCondition condition : executeRequest.getQueryConditions()) { for (FlatQueryCondition condition : executeRequest.getQueryConditions()) {
System.out.println(condition.getFieldName() + " " + condition.getFieldType()); logger.info(condition.getFieldName() + " " + condition.getFieldType());
} }
AuthorizedUser loginUser = SessionContextUtils.getLoginUser(); AuthorizedUser loginUser = SessionContextUtils.getLoginUser();
DhSearchLogDTO dto = new DhSearchLogDTO(); DhSearchLogDTO dto = new DhSearchLogDTO();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment