|
@ -2,12 +2,25 @@ package com.yihu.wlyy.statistics.service;
|
|
|
|
|
|
import com.yihu.wlyy.entity.statistics.WlyyQuotaResult;
|
|
|
import com.yihu.wlyy.statistics.dao.WlyyQuotaResultDao;
|
|
|
import com.yihu.wlyy.statistics.etl.save.es.ElasticFactory;
|
|
|
import com.yihu.wlyy.statistics.etl.save.es.ElastricSearchSave;
|
|
|
import com.yihu.wlyy.statistics.util.DateUtil;
|
|
|
import com.yihu.wlyy.statistics.vo.SaveModel;
|
|
|
import io.searchbox.client.JestClient;
|
|
|
import io.searchbox.core.*;
|
|
|
import org.elasticsearch.index.query.BoolQueryBuilder;
|
|
|
import org.elasticsearch.index.query.QueryBuilders;
|
|
|
import org.elasticsearch.search.builder.SearchSourceBuilder;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.util.StringUtils;
|
|
|
|
|
|
import java.text.ParseException;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Calendar;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
|
|
|
/**
|
|
@ -15,8 +28,12 @@ import java.util.List;
|
|
|
*/
|
|
|
@Service
|
|
|
public class ExtractDataService {
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
private ElasticFactory elasticFactory;
|
|
|
@Value("${es.type}")
|
|
|
private String esType;
|
|
|
@Value("${es.index}")
|
|
|
private String esIndex;
|
|
|
@Autowired
|
|
|
private WlyyQuotaResultDao wlyyQuotaResultDao;
|
|
|
@Autowired
|
|
@ -24,10 +41,131 @@ public class ExtractDataService {
|
|
|
|
|
|
public void extractOneDate(String date) {
|
|
|
List<WlyyQuotaResult> quotaResults = wlyyQuotaResultDao.findByDate(date);
|
|
|
save2es(quotaResults, date, null);
|
|
|
}
|
|
|
|
|
|
|
|
|
public void extractOneDateWithId(String date, String quotaId) {
|
|
|
List<WlyyQuotaResult> quotaResults = wlyyQuotaResultDao.findByDateAndId(date, quotaId);
|
|
|
save2es(quotaResults, date, quotaId);
|
|
|
}
|
|
|
|
|
|
public void extractDate2Date(String start, String end) throws Exception {
|
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
Date startDate = sdf.parse(start);
|
|
|
Date endDate = sdf.parse(end);
|
|
|
if (startDate.after(endDate)) {
|
|
|
throw new Exception("日期参数错误");
|
|
|
}
|
|
|
int day = daysBetween(startDate, endDate);
|
|
|
for (int i = 0; i < day + 1; i++) {
|
|
|
System.out.println(getYesterday(i, startDate));
|
|
|
extractOneDate(getYesterday(i, startDate));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public void extractDate2DateWithId(String start, String end, String quotaId) throws Exception {
|
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
Date startDate = sdf.parse(start);
|
|
|
Date endDate = sdf.parse(end);
|
|
|
if (startDate.after(endDate)) {
|
|
|
throw new Exception("日期参数错误");
|
|
|
}
|
|
|
int day = daysBetween(startDate, endDate);
|
|
|
for (int i = 0; i < day + 1; i++) {
|
|
|
extractOneDateWithId(getYesterday(i, startDate), quotaId);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private String getYesterday(Integer day, Date startDate) {
|
|
|
Calendar cal = Calendar.getInstance();
|
|
|
cal.setTime(startDate);
|
|
|
cal.add(Calendar.DAY_OF_MONTH, day);
|
|
|
String yesterday = new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
|
|
|
return yesterday;
|
|
|
}
|
|
|
|
|
|
private int daysBetween(Date smdate, Date bdate) throws ParseException {
|
|
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
smdate = sdf.parse(sdf.format(smdate));
|
|
|
bdate = sdf.parse(sdf.format(bdate));
|
|
|
Calendar cal = Calendar.getInstance();
|
|
|
cal.setTime(smdate);
|
|
|
long time1 = cal.getTimeInMillis();
|
|
|
cal.setTime(bdate);
|
|
|
long time2 = cal.getTimeInMillis();
|
|
|
long between_days = (time2 - time1) / (1000 * 3600 * 24);
|
|
|
|
|
|
return Integer.parseInt(String.valueOf(between_days));
|
|
|
}
|
|
|
|
|
|
private void deleteData(Date quotaDate, String quotaCode) {
|
|
|
try {
|
|
|
JestClient jestClient = elasticFactory.getJestClient();
|
|
|
//先根据条件查找出来
|
|
|
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
|
|
|
searchSourceBuilder.query(
|
|
|
new BoolQueryBuilder()
|
|
|
.must(QueryBuilders.matchQuery("quotaCode", quotaCode))
|
|
|
.must(QueryBuilders.matchQuery("quotaDate", quotaDate))
|
|
|
).size(50000);//一次取10000条
|
|
|
|
|
|
Search search = new Search.Builder(searchSourceBuilder.toString()).addIndex(esIndex).addType(esType)
|
|
|
.build();
|
|
|
SearchResult result = jestClient.execute(search);
|
|
|
List<SaveModel> saveModels = result.getSourceAsObjectList(SaveModel.class);
|
|
|
|
|
|
//根据id批量删除
|
|
|
Bulk.Builder bulk = new Bulk.Builder().defaultIndex(esIndex).defaultType(esType);
|
|
|
for (SaveModel obj : saveModels) {
|
|
|
Delete index = new Delete.Builder(obj.getId()).build();
|
|
|
bulk.addAction(index);
|
|
|
}
|
|
|
BulkResult br = jestClient.execute(bulk.build());
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private void deleteData(Date quotaDate) {
|
|
|
try {
|
|
|
JestClient jestClient = elasticFactory.getJestClient();
|
|
|
//先根据条件查找出来
|
|
|
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
|
|
|
searchSourceBuilder.query(
|
|
|
new BoolQueryBuilder()
|
|
|
.must(QueryBuilders.matchQuery("quotaDate", quotaDate))
|
|
|
).size(100000);//一次取10000条
|
|
|
|
|
|
Search search = new Search.Builder(searchSourceBuilder.toString()).addIndex(esIndex).addType(esType)
|
|
|
.build();
|
|
|
SearchResult result = jestClient.execute(search);
|
|
|
List<SaveModel> saveModels = result.getSourceAsObjectList(SaveModel.class);
|
|
|
|
|
|
//根据id批量删除
|
|
|
Bulk.Builder bulk = new Bulk.Builder().defaultIndex(esIndex).defaultType(esType);
|
|
|
for (SaveModel obj : saveModels) {
|
|
|
Delete index = new Delete.Builder(obj.getId()).build();
|
|
|
bulk.addAction(index);
|
|
|
}
|
|
|
BulkResult br = jestClient.execute(bulk.build());
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private void save2es(List<WlyyQuotaResult> quotaResults, String quotaCode, String quotaDate) {
|
|
|
List<SaveModel> saveModel = new ArrayList<>();
|
|
|
if (quotaResults != null && quotaResults.size() > 0) {
|
|
|
//查询ES是否有这天的数据有就删除
|
|
|
if (StringUtils.isEmpty(quotaCode)) {
|
|
|
deleteData(DateUtil.strToDate(quotaDate, "yyyy-MM-dd"));
|
|
|
} else {
|
|
|
deleteData(DateUtil.strToDate(quotaDate, "yyyy-MM-dd"), quotaCode);
|
|
|
}
|
|
|
//
|
|
|
quotaResults.stream().forEach(one -> {
|
|
|
SaveModel saveModelTemp = new SaveModel();
|
|
|
|
|
@ -50,37 +188,71 @@ public class ExtractDataService {
|
|
|
saveModelTemp.setSlaveKey2Name(one.getLevel3TypeName());
|
|
|
if (
|
|
|
"1".equals(one.getQuatoCode()) ||
|
|
|
"2".equals(one.getQuatoCode()) ||
|
|
|
"6".equals(one.getQuatoCode())||
|
|
|
"7".equals(one.getQuatoCode())||
|
|
|
"8".equals(one.getQuatoCode())||
|
|
|
"9".equals(one.getQuatoCode())
|
|
|
){
|
|
|
saveModelTemp.setTimeLevel("2");
|
|
|
"2".equals(one.getQuatoCode()) ||
|
|
|
"6".equals(one.getQuatoCode()) ||
|
|
|
"7".equals(one.getQuatoCode()) ||
|
|
|
"8".equals(one.getQuatoCode()) ||
|
|
|
"9".equals(one.getQuatoCode()) ||
|
|
|
"10".equals(one.getQuatoCode()) ||
|
|
|
"12".equals(one.getQuatoCode()) ||
|
|
|
"13".equals(one.getQuatoCode()) ||
|
|
|
"14".equals(one.getQuatoCode()) ||
|
|
|
"15".equals(one.getQuatoCode()) ||
|
|
|
"16".equals(one.getQuatoCode()) ||
|
|
|
"17".equals(one.getQuatoCode()) ||
|
|
|
"20".equals(one.getQuatoCode()) ||
|
|
|
"21".equals(one.getQuatoCode()) ||
|
|
|
"26".equals(one.getQuatoCode()) ||
|
|
|
"29".equals(one.getQuatoCode()) ||
|
|
|
"30".equals(one.getQuatoCode()) ||
|
|
|
"31".equals(one.getQuatoCode()) ||
|
|
|
"32".equals(one.getQuatoCode()) ||
|
|
|
"33".equals(one.getQuatoCode()) ||
|
|
|
"34".equals(one.getQuatoCode()) ||
|
|
|
"35".equals(one.getQuatoCode()) ||
|
|
|
"36".equals(one.getQuatoCode()) ||
|
|
|
"37".equals(one.getQuatoCode()) ||
|
|
|
"38".equals(one.getQuatoCode()) ||
|
|
|
"39".equals(one.getQuatoCode()) ||
|
|
|
"40".equals(one.getQuatoCode()) ||
|
|
|
"41".equals(one.getQuatoCode()) ||
|
|
|
"42".equals(one.getQuatoCode()) ||
|
|
|
"43".equals(one.getQuatoCode()) ||
|
|
|
"44".equals(one.getQuatoCode()) ||
|
|
|
"45".equals(one.getQuatoCode()) ||
|
|
|
"46".equals(one.getQuatoCode()) ||
|
|
|
"47".equals(one.getQuatoCode()) ||
|
|
|
"48".equals(one.getQuatoCode()) ||
|
|
|
"49".equals(one.getQuatoCode()) ||
|
|
|
"50".equals(one.getQuatoCode()) ||
|
|
|
"51".equals(one.getQuatoCode()) ||
|
|
|
"52".equals(one.getQuatoCode()) ||
|
|
|
"53".equals(one.getQuatoCode()) ||
|
|
|
"54".equals(one.getQuatoCode()) ||
|
|
|
"55".equals(one.getQuatoCode()) ||
|
|
|
"56".equals(one.getQuatoCode()) ||
|
|
|
"57".equals(one.getQuatoCode())
|
|
|
) {
|
|
|
saveModelTemp.setTimeLevel("2");//到达量
|
|
|
}
|
|
|
if (
|
|
|
"3".equals(one.getQuatoCode()) ||
|
|
|
"4".equals(one.getQuatoCode()) ||
|
|
|
"5".equals(one.getQuatoCode())
|
|
|
){
|
|
|
saveModelTemp.setTimeLevel("2");
|
|
|
"4".equals(one.getQuatoCode()) ||
|
|
|
"5".equals(one.getQuatoCode()) ||
|
|
|
"22".equals(one.getQuatoCode()) ||
|
|
|
"23".equals(one.getQuatoCode()) ||
|
|
|
"24".equals(one.getQuatoCode()) ||
|
|
|
"25".equals(one.getQuatoCode()) ||
|
|
|
"27".equals(one.getQuatoCode())
|
|
|
) {
|
|
|
saveModelTemp.setTimeLevel("1");//增量
|
|
|
}
|
|
|
saveModelTemp.setAreaLevel("5");
|
|
|
});
|
|
|
}
|
|
|
}
|
|
|
|
|
|
public void extractOneDateWithId(String date, String quotaId) {
|
|
|
|
|
|
wlyyQuotaResultDao.findByDateAndId(date, quotaId);
|
|
|
|
|
|
}
|
|
|
|
|
|
public void extractDate2Date(String startDate, String endDate) {
|
|
|
|
|
|
}
|
|
|
|
|
|
public void extractDate2DateWithId(String startDate, String endDate, String quotaId) {
|
|
|
|
|
|
saveModel.add(saveModelTemp);
|
|
|
});
|
|
|
elastricSearchSave.save(saveModel);
|
|
|
}
|
|
|
}
|
|
|
}
|