Browse Source

bug修改

chenweida 7 years ago
parent
commit
e804c5037c

+ 2 - 1
patient-co/patient-co-statistics-es/src/main/java/com/yihu/wlyy/statistics/config/SwaggerConfig.java

@ -42,7 +42,8 @@ public class SwaggerConfig extends WebMvcConfigurerAdapter {
                .select()
                .paths(or(
                        regex("/job/.*"),
                        regex("/quotaQuery/.*")
                        regex("/quotaQuery/.*"),
                        regex("/extractDataToEs/.*")
                ))
                .build()
                .apiInfo(publicApiInfo());

+ 1 - 1
patient-co/patient-co-statistics-es/src/main/java/com/yihu/wlyy/statistics/controller/ExtractDataController.java

@ -18,7 +18,7 @@ import java.util.List;
 */
@RestController
@RequestMapping("/extractData")
@RequestMapping("/extractDataToEs")
@Api(description = "抽取mysql数据到es")
public class ExtractDataController extends BaseController {
    @Autowired

+ 199 - 27
patient-co/patient-co-statistics-es/src/main/java/com/yihu/wlyy/statistics/service/ExtractDataService.java

@ -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);
        }
    }
}