|
@ -1,10 +1,10 @@
|
|
|
package com.yihu.quota.service.job;
|
|
|
|
|
|
import com.google.gson.Gson;
|
|
|
import com.yihu.ehr.util.datetime.DateUtil;
|
|
|
import com.yihu.quota.contants.JobConstant;
|
|
|
import com.yihu.quota.kafka.Producer;
|
|
|
import com.yihu.quota.util.sql.DbKit;
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
import org.quartz.*;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
@ -14,7 +14,6 @@ import org.springframework.jdbc.core.JdbcTemplate;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
|
|
|
|
|
|
import java.util.Date;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
@ -36,6 +35,11 @@ import java.util.Map;
|
|
|
public class SingleTableJob implements Job {
|
|
|
static private Logger logger = LoggerFactory.getLogger(SingleTableJob.class);
|
|
|
|
|
|
/**
|
|
|
* 数据来源库
|
|
|
*/
|
|
|
protected String database;
|
|
|
|
|
|
/**
|
|
|
* 数据来源表
|
|
|
*/
|
|
@ -75,6 +79,16 @@ public class SingleTableJob implements Job {
|
|
|
*/
|
|
|
protected JobConstant.ExecType execType;
|
|
|
|
|
|
/**
|
|
|
* 查询列
|
|
|
*/
|
|
|
protected String searchColumn;
|
|
|
|
|
|
/**
|
|
|
* 数据集id
|
|
|
*/
|
|
|
protected String cubeId;
|
|
|
|
|
|
@Autowired
|
|
|
private Producer producer;
|
|
|
@Autowired
|
|
@ -87,11 +101,8 @@ public class SingleTableJob implements Job {
|
|
|
cleanData();
|
|
|
|
|
|
List<Map<String, Object>> list;
|
|
|
do {
|
|
|
list = fetch();
|
|
|
saveData(list);
|
|
|
|
|
|
} while (list != null && list.size() != 0);
|
|
|
list = fetch();
|
|
|
saveData(list);
|
|
|
}
|
|
|
|
|
|
private void prepare(JobExecutionContext jobExecutionContext) {
|
|
@ -99,6 +110,7 @@ public class SingleTableJob implements Job {
|
|
|
SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
|
|
|
JobDataMap jobDataMap = jobExecutionContext.getJobDetail().getJobDataMap();
|
|
|
|
|
|
database = jobDataMap.getString("database");
|
|
|
table = jobDataMap.getString("table");
|
|
|
primeKey = jobDataMap.getString("primeKey");
|
|
|
filterField = jobDataMap.getString("filterField");
|
|
@ -106,16 +118,22 @@ public class SingleTableJob implements Job {
|
|
|
size = jobDataMap.getString("size");
|
|
|
start = jobDataMap.getString("start");
|
|
|
end = jobDataMap.getString("end");
|
|
|
execType = JobConstant.ExecType.fromInt(jobDataMap.getIntValue("execType"));
|
|
|
searchColumn = jobDataMap.getString("searchColumn");
|
|
|
cubeId = jobDataMap.getString("cubeId");
|
|
|
}
|
|
|
|
|
|
private void cleanData() {
|
|
|
if (JobConstant.ExecType.Full.equals(execType)) {
|
|
|
Map<String, Object> dataMap = new HashMap<>(2);
|
|
|
dataMap.put("database", database);
|
|
|
dataMap.put("table", table);
|
|
|
dataMap.put("delAll", true);
|
|
|
dataMap.put("action", "delAll");
|
|
|
dataMap.put("cubeId", cubeId);
|
|
|
|
|
|
Gson gson = new Gson();
|
|
|
String jsonData = gson.toJson(dataMap);
|
|
|
logger.info("清除消息:{}",jsonData);
|
|
|
producer.sendMessage(Producer.sepTopic, jsonData);
|
|
|
}
|
|
|
}
|
|
@ -128,6 +146,7 @@ public class SingleTableJob implements Job {
|
|
|
|
|
|
list.forEach(item -> {
|
|
|
Map<String, Object> dataMap = new HashMap<>(item.size());
|
|
|
dataMap.put("database", database);
|
|
|
dataMap.put("table", table);
|
|
|
item.forEach((key, value) -> {
|
|
|
if (key.equals(primeKey)) {
|
|
@ -140,18 +159,55 @@ public class SingleTableJob implements Job {
|
|
|
|
|
|
Gson gson = new Gson();
|
|
|
String jsonData = gson.toJson(dataMap);
|
|
|
logger.info("保存消息:{}",jsonData);
|
|
|
producer.sendMessage(Producer.sepTopic, jsonData);
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
private List<Map<String, Object>> fetch() {
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
if (StringUtils.isNotEmpty(searchColumn)) {
|
|
|
sb.append("select ").append(primeKey).append(",").append(searchColumn).append(" from ").append(database).append(".").append(table);
|
|
|
} else {
|
|
|
sb.append("select * from ").append(database).append(".").append(table);
|
|
|
}
|
|
|
|
|
|
if (StringUtils.isNotEmpty(filterField) && (StringUtils.isNotEmpty(start) || StringUtils.isNotEmpty(end))) {
|
|
|
sb.append(" where ");
|
|
|
if ("number".equals(filterFieldType)) {
|
|
|
if (StringUtils.isNotEmpty(start) && StringUtils.isNotEmpty(end)) {
|
|
|
sb.append(filterField).append(">=").append(start).append(" and ").append(filterField).append("<=").append(end);
|
|
|
} else if (StringUtils.isNotEmpty(start) && StringUtils.isEmpty(end)) {
|
|
|
sb.append(filterField).append(">=").append(start);
|
|
|
} else if (StringUtils.isEmpty(start) && StringUtils.isNotEmpty(end)) {
|
|
|
sb.append(filterField).append("<=").append(end);
|
|
|
}
|
|
|
} else if ("date".equals(filterFieldType)) {
|
|
|
if (StringUtils.isNotEmpty(start) && StringUtils.isNotEmpty(end)) {
|
|
|
sb.append(filterField).append(">=").append(DbKit.use().getLongDate(start)).append(" and ")
|
|
|
.append(filterField).append("<=").append(DbKit.use().getLongDate(end));
|
|
|
} else if (StringUtils.isNotEmpty(start) && StringUtils.isEmpty(end)) {
|
|
|
sb.append(filterField).append(">=").append(DbKit.use().getLongDate(start));
|
|
|
} else if (StringUtils.isEmpty(start) && StringUtils.isNotEmpty(end)) {
|
|
|
sb.append(filterField).append("<=").append(DbKit.use().getLongDate(end));
|
|
|
}
|
|
|
} else {
|
|
|
logger.warn("不支持的过滤字段类型");
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
logger.info("sql={}",sb.toString());
|
|
|
return jdbcTemplate.queryForList(sb.toString());
|
|
|
}
|
|
|
|
|
|
|
|
|
/**
|
|
|
* TODO:没有设置数据库来源和数据库类型,当前使用默认数据库
|
|
|
*
|
|
|
* @return
|
|
|
*/
|
|
|
private List<Map<String, Object>> fetch() {
|
|
|
/*private List<Map<String, Object>> fetch() {
|
|
|
String sql = "";
|
|
|
if ("number".equals(filterFieldType)) {
|
|
|
Long lngTemp = Long.parseLong(start) + Long.parseLong(size);
|
|
@ -181,5 +237,5 @@ public class SingleTableJob implements Job {
|
|
|
}
|
|
|
|
|
|
return jdbcTemplate.queryForList(sql);
|
|
|
}
|
|
|
}*/
|
|
|
}
|