浏览代码

Merge branch 'dev' of liuwenbin/patient-co-management into dev

chenweida 7 年之前
父节点
当前提交
2d1fabe52a

+ 575 - 66
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/statisticsES/StatisticsESService.java

@ -2,8 +2,11 @@ package com.yihu.wlyy.service.app.statisticsES;
import com.yihu.wlyy.config.es.ElasticFactory;
import com.yihu.wlyy.entity.patient.prescription.PrescriptionDispensaryCode;
import com.yihu.wlyy.entity.statistics.PopulationBase;
import com.yihu.wlyy.util.Constant;
import com.yihu.wlyy.util.DateUtil;
import com.yihu.wlyy.util.ElasticsearchUtil;
import com.yihu.wlyy.util.IdcardInfoExtractor;
import com.yihu.wlyy.web.quota.vo.SaveModel;
import io.searchbox.client.JestClient;
import io.searchbox.core.Bulk;
@ -13,13 +16,13 @@ import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.*;
/**
 * Created by ${liuwenbin} on 2017/9/14.
@ -31,6 +34,8 @@ public class StatisticsESService {
    private ElasticsearchUtil elasticsearchUtil;
    @Autowired
    private ElasticFactory elasticFactory;
    @Autowired
    JdbcTemplate jdbcTemplate;
    /**
     * 获取上次统计时间
@ -69,104 +74,354 @@ public class StatisticsESService {
    }
    /**
     * 获取时间范围内按间隔统计指标增量
     * 获取所有指标的增量、到达量
     * 备注:原来接口的一级指标对应现在的
     *
     * @param startDate 起始时间
     * @param endDate   结束时间
     * @param interval  时间间隔
     * @param area      区域或机构代码
     * @param level     级别
     * @param index     指标
     * @param endDate
     * @param area
     * @param level
     * @param index
     * @return
     */
    public JSONArray getDateIncrementDetail(String startDate, String endDate, int interval, String area, String level, String index, String level2_type) throws Exception {
        if (interval == 1) {
            return dateStatistics(startDate, endDate, area, level, index, level2_type);
        } else if (interval == 2) {
//            return weekStatistics(startDate, endDate, area, level, index, level2_type);
        } else if (interval == 3) {
//            return monthStatistics(startDate, endDate, area, level, index, level2_type);
    public List findOneDateQuotaLevel0(String startDate,String endDate, String area, int level, String index,String timeLevel,String interval,String lowLevel) throws Exception {
        StringBuffer sql = new StringBuffer();
        StringBuffer groupBy = new StringBuffer();
        if (SaveModel.teamLevel.equals(level+"")) {
            sql.append("select team,teamName,sum(result1) result1, sum(result2) result2 from wlyy_quota_test where team='" + area + "'");
            groupBy.append("  group by team,teamName");
        } else if (SaveModel.OrgLevel.equals(level+"")) {
            sql.append("select hospital,hospitalName,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where hospital='" + area + "'");
            groupBy.append("  group by hospital");
        } else if (SaveModel.townLevel.equals(level+"")) {
            sql.append("select town,townName,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where town='" + area + "'");
            groupBy.append("  group by town,townName");
        } else if (SaveModel.cityLevel.equals(level+"")) {
            sql.append("select city,cityName,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where city='" + area + "'");
            groupBy.append("  group by city,cityName");
        }
        sql.append(" and quotaCode='"+index+"'  ");
        sql.append(" and timeLevel='"+timeLevel+"'  ");
        sql.append(" and areaLevel='5'");
        if(StringUtils.isNotEmpty(startDate)){
            sql.append(" and quotaDate>='" + startDate + "'");
        }
        if(StringUtils.isNotEmpty(endDate)){
            sql.append(" and quotaDate<='" + endDate + "'");
        }
        if(StringUtils.isNotEmpty(lowLevel)){
        return new JSONArray();
            if (SaveModel.teamLevel.equals(lowLevel)) {
                sql.append(" and team='" + area + "'");
            } else if (SaveModel.OrgLevel.equals(lowLevel)) {
                sql.append(" and hospital='" + area + "'");
            } else if (SaveModel.townLevel.equals(lowLevel)) {
                sql.append(" and town='" + area + "'");
            } else if (SaveModel.cityLevel.equals(lowLevel)) {
                sql.append(" and city='" + area + "'");
            }
        }
        //根据时间维度分组
        if(StringUtils.isNotEmpty(interval)){
            if (SaveModel.interval_month.equals(interval)) {
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='month') ");
            } else if (SaveModel.interval_week.equals(interval)) {
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='week') ");
            } else if (SaveModel.interval_day.equals(interval)) {
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='1d') ");
            }
        }
        sql.append(groupBy);
        return elasticsearchUtil.excute(sql.toString(),SaveModel.class,"","");
    }
    /**
     * 按日统计
     * 获取一级指标的增量、到达量
     * 备注:原接口的二级指标对应现在的一级指标
     *
     * @param startDate
     * @param endDate
     * @param area
     * @param level
     * @param index
     * @return
     */
    private JSONArray dateStatistics(String startDate, String endDate, String area, String level, String index, String level2_type) {
//        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
//        // 起始日期
//        Calendar start = Calendar.getInstance();
//        start.setTime(DateUtil.strToDate(startDate, DateUtil.YYYY_MM_DD));
//        //结束日期
//        Calendar end = Calendar.getInstance();
//        end.setTime(DateUtil.strToDate(endDate, DateUtil.YYYY_MM_DD));
//        // 日期集合
//        List<Calendar> days = new ArrayList<>();
//        days.add(start);
//        boolean flag = true;
//        if (startDate.compareTo(endDate) == 0) {
//            flag = false;
//        }
//         计算统计日期
//        while (flag) {
//            Calendar next = Calendar.getInstance();
//            next.setTime(days.get(days.size() - 1).getTime());
//            next.add(Calendar.DATE, 1);
//            if (df.format(next.getTime()).compareTo(endDate) < 0) {
//                days.add(next);
//            } else {
//                days.add(end);
//                flag = false;
//            }
//        }
        startDate = changeDate(startDate);
        endDate = changeDate(endDate);
    public List findOneDateQuotaLevel1(String startDate,String endDate, String area, int level, String index,String timeLevel,String slaveKey1,String interval,String lowLevel ) throws Exception{
        StringBuffer sql = new StringBuffer();
        StringBuffer groupBy = new StringBuffer();
        if (SaveModel.teamLevel.equals(level)) {
            sql.append("select team,teamName,slaveKey1,slaveKey1Name,result1,result2 from wlyy_quota_test where team='" + area + "'");
        if (SaveModel.teamLevel.equals(level+"")) {
            sql.append("select team,teamName,slaveKey1,slaveKey1Name,sum(result1) result1, sum(result2) result2 from wlyy_quota_test where team='" + area + "'");
            groupBy.append("  group by team,teamName,slaveKey1,slaveKey1Name");
        } else if (SaveModel.OrgLevel.equals(level)) {
        } else if (SaveModel.OrgLevel.equals(level+"")) {
            sql.append("select hospital,hospitalName,slaveKey1,slaveKey1Name,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where hospital='" + area + "'");
            groupBy.append("  group by hospital,hospitalName,slaveKey1,slaveKey1Name");
        } else if (SaveModel.townLevel.equals(level)) {
        } else if (SaveModel.townLevel.equals(level+"")) {
            sql.append("select town,townName,slaveKey1,slaveKey1Name,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where town='" + area + "'");
            groupBy.append("  group by town,townName,slaveKey1,slaveKey1Name");
        } else if (SaveModel.cityLevel.equals(level)) {
        } else if (SaveModel.cityLevel.equals(level+"")) {
            sql.append("select city,cityName,slaveKey1,slaveKey1Name,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where city='" + area + "'");
            groupBy.append("  group by city,cityName,slaveKey1,slaveKey1Name");
        }
        sql.append(" and quotaCode='"+index+"'  ");
        sql.append(" and timeLevel='"+timeLevel+"'  ");
        sql.append(" and areaLevel='5'");
        if(StringUtils.isNotEmpty(startDate)){
            sql.append(" and quotaDate>='" + startDate + "'");
        }
        if(StringUtils.isNotEmpty(endDate)){
            sql.append(" and quotaDate<='" + endDate + "'");
        }
        if(StringUtils.isNotEmpty(slaveKey1)){
            sql.append(" and slaveKey1='"+slaveKey1+"'  ");
        }
        if(StringUtils.isNotEmpty(lowLevel)){
            if (SaveModel.teamLevel.equals(lowLevel)) {
                sql.append(" and team='" + area + "'");
            } else if (SaveModel.OrgLevel.equals(lowLevel)) {
                sql.append(" and hospital='" + area + "'");
            } else if (SaveModel.townLevel.equals(lowLevel)) {
                sql.append(" and town='" + area + "'");
            } else if (SaveModel.cityLevel.equals(lowLevel)) {
                sql.append(" and city='" + area + "'");
            }
        }
        //根据时间维度分组
        if(StringUtils.isNotEmpty(interval)){
            if (SaveModel.interval_month.equals(interval)) {
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='month') ");
            } else if (SaveModel.interval_week.equals(interval)) {
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='week') ");
            } else if (SaveModel.interval_day.equals(interval)) {
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='1d') ");
            }
        }
        sql.append(groupBy);
        return elasticsearchUtil.excute(sql.toString(),SaveModel.class,"","");
    }
    /**
     * 获取二级指标的增量、到达量
     * 备注:原接口的三级指标对应现在的二级指标
     *
     * @param endDate
     * @param area
     * @param level
     * @param index
     * @return
     */
    public List findOneDateQuotaLevel2(String startDate,String endDate, String area, int level, String index,String timeLevel,String slaveKey1,String slaveKey2,String interval,String lowLevel){
        //时间格式转换  yyyy-MM-dd转成 2017-07-17T00:00:00+0800
        endDate = changeDate(endDate);
        StringBuffer sql = new StringBuffer();
        StringBuffer groupBy = new StringBuffer();
        if (SaveModel.teamLevel.equals(level+"")) {
            sql.append("select team,teamName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,result1,result2 from wlyy_quota_test where team='" + area + "'");
            groupBy.append("  group by team,teamName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name");
        } else if (SaveModel.OrgLevel.equals(level+"")) {
            sql.append("select hospital,hospitalName,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where hospital='" + area + "'");
            groupBy.append("  group by hospital,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,hospitalName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name");
        } else if (SaveModel.townLevel.equals(level+"")) {
            sql.append("select town,townName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where town='" + area + "'");
            groupBy.append("  group by town,townName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name");
        } else if (SaveModel.cityLevel.equals(level+"")) {
            sql.append("select city,cityName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where city='" + area + "'");
            groupBy.append("  group by city,cityName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name");
        }
        sql.append(" and quotaCode='" + index + "'  ");
        sql.append(" and timeLevel='1'  ");
        sql.append(" and areaLevel='"+level+"'");
        sql.append(" and quotaDate>='" + startDate + "'");
        sql.append(" and quotaDate<='" + endDate + "'");
        if(StringUtils.isNotBlank(level2_type)){
            sql.append(" and slaveKey2='"+level2_type+"'");
            groupBy.append(",slaveKey2,slaveKey2Name");
        sql.append(" and timeLevel='"+timeLevel+"'  ");
        sql.append(" and areaLevel='5'");
        if(StringUtils.isNotEmpty(startDate)){
            sql.append(" and quotaDate>='" + startDate + "'");
        }
        if(StringUtils.isNotEmpty(endDate)){
            sql.append(" and quotaDate<='" + endDate + "'");
        }
        if(StringUtils.isNotBlank(slaveKey1)){
            sql.append(" and slaveKey1='"+slaveKey1+"'");
        }
        if(StringUtils.isNotBlank(slaveKey2)){
            sql.append(" and slaveKey2='"+slaveKey2+"'");
        }
        if(StringUtils.isNotEmpty(lowLevel)){
            if (SaveModel.teamLevel.equals(lowLevel)) {
                sql.append(" and team='" + area + "'");
            } else if (SaveModel.OrgLevel.equals(lowLevel)) {
                sql.append(" and hospital='" + area + "'");
            } else if (SaveModel.townLevel.equals(lowLevel)) {
                sql.append(" and town='" + area + "'");
            } else if (SaveModel.cityLevel.equals(lowLevel)) {
                sql.append(" and city='" + area + "'");
            }
        }
        //根据时间维度分组
        if(StringUtils.isNotEmpty(interval)){
            if (SaveModel.interval_month.equals(interval)) {
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='month') ");
            } else if (SaveModel.interval_week.equals(interval)) {
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='week') ");
            } else if (SaveModel.interval_day.equals(interval)) {
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='1d') ");
            }
        }
        sql.append(groupBy);
        List<SaveModel> list =elasticsearchUtil.excute(sql.toString(),SaveModel.class,"","");
        return elasticsearchUtil.excute(sql.toString(),SaveModel.class,"","");
    }
//    /**
//     * 查询某一天父level下的子level 例如 查询市下面的团队,或者区下面的团队
//     *
//     * @param index      指标code
//     * @param area           机构code或者团队code或者town code或者city code
//     * @param timeLevel      1增量 2到达量
//     * @param level      父arealevel
//     * @param lowLevel 子arealevel
//     * @return
//     */
//    public List<SaveModel> findOneDateQuotaByChllevel(String startDate,
//                                                      String endDate,
//                                                      String index,
//                                                      String area,
//                                                      String timeLevel,
//                                                      String level,
//                                                      String lowLevel) {
//
//        //时间格式转换  yyyy-MM-dd转成 2017-07-17T00:00:00+0800
//        startDate = changeDate(startDate);
//        endDate = changeDate(endDate);
//
//        StringBuffer sql = new StringBuffer();
//        StringBuffer groupBy = new StringBuffer();
//        //根据 childAreaLevel   group by
//        if (SaveModel.teamLevel.equals(level)) {
//            sql.append("select team,teamName,result1,result2 from wlyy_quota_test where  ");
//            groupBy.append(" group by team,teamName");
//        } else if (SaveModel.OrgLevel.equals(level)) {
//            sql.append("select hospital,hospitalName,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where  ");
//            groupBy.append(" group by hospital,hospitalName");
//        } else if (SaveModel.townLevel.equals(level)) {
//            sql.append("select town,townName,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where ");
//            groupBy.append(" group by town,townName");
//        } else if (SaveModel.cityLevel.equals(level)) {
//            sql.append("select city,cityName,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where  ");
//            groupBy.append(" group by city,cityName");
//        }
//
//        sql.append("  quotaCode='" + index + "'  ");
//        sql.append(" and timeLevel='" + timeLevel + "'  ");
//        sql.append(" and areaLevel='5'");
//        if(StringUtils.isNotEmpty(startDate)){
//            sql.append(" and quotaDate>='" + startDate + "'");
//        }
//        if(StringUtils.isNotEmpty(endDate)){
//            sql.append(" and quotaDate<='" + endDate + "'");
//        }
//        //查询code
//        if (SaveModel.teamLevel.equals(lowLevel)) {
//            sql.append(" and team='" + area + "'");
//        } else if (SaveModel.OrgLevel.equals(lowLevel)) {
//            sql.append(" and hospital='" + area + "'");
//        } else if (SaveModel.townLevel.equals(lowLevel)) {
//            sql.append(" and town='" + area + "'");
//        } else if (SaveModel.cityLevel.equals(lowLevel)) {
//            sql.append(" and city='" + area + "'");
//        }
//        sql.append(groupBy);
//        return elasticsearchUtil.excute(sql.toString(),SaveModel.class,"","");
//    }
    /**
     * 获取时间范围内按间隔统计指标增量
     *
     * @param startDate 起始时间
     * @param endDate   结束时间
     * @param interval  时间间隔
     * @param area      区域或机构代码
     * @param level     级别
     * @param index     指标
     * @return
     */
    public JSONArray getDateIncrementDetail(String startDate, String endDate, String interval, String area, int level, String index, String level2_type) throws Exception {
        List<SaveModel>  list = findOneDateQuotaLevel1(startDate,endDate,area,level,index,"1",level2_type,interval,null);
        List<JSONObject> result = new ArrayList<>();
        for (SaveModel saveModel:list){
            JSONObject range = new JSONObject();
            range.put("range", saveModel.getQuotaDate());
            range.put("amount", saveModel.getResult1());
            range.put("range", DateUtil.dateToStr(saveModel.getQuotaDate(),"yyyy-MM-dd HH:mm:ss"));
            range.put("amount", saveModel.getResult2());
            result.add(range);
        }
        return new JSONArray(result);
    }
//    /**
//     * 按日统计
//     *
//     * @param startDate
//     * @param endDate
//     * @param area
//     * @param level
//     * @param index
//     * @return
//     */
//    private JSONArray dateStatistics(String startDate, String endDate, String area, int level, String index, String level2_type,String interval) {
//
//        startDate = changeDate(startDate);
//        endDate = changeDate(endDate);
//        StringBuffer sql = new StringBuffer();
//        StringBuffer groupBy = new StringBuffer();
//        if (SaveModel.teamLevel.equals(level+"")) {
//            sql.append("select team,teamName,slaveKey1,slaveKey1Name,sum(result1) result1, sum(result2) result2 from wlyy_quota_test where team='" + area + "'");
//            groupBy.append("  group by team,teamName,slaveKey1,slaveKey1Name");
//        } else if (SaveModel.OrgLevel.equals(level+"")) {
//            sql.append("select hospital,hospitalName,slaveKey1,slaveKey1Name,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where hospital='" + area + "'");
//            groupBy.append("  group by hospital,hospitalName,slaveKey1,slaveKey1Name");
//        } else if (SaveModel.townLevel.equals(level+"")) {
//            sql.append("select town,townName,slaveKey1,slaveKey1Name,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where town='" + area + "'");
//            groupBy.append("  group by town,townName,slaveKey1,slaveKey1Name");
//        } else if (SaveModel.cityLevel.equals(level+"")) {
//            sql.append("select city,cityName,slaveKey1,slaveKey1Name,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where city='" + area + "'");
//            groupBy.append("  group by city,cityName,slaveKey1,slaveKey1Name");
//        }
//        sql.append(" and quotaCode='" + index + "'  ");
//        sql.append(" and timeLevel='1'  ");
//        sql.append(" and areaLevel='5'");
//        sql.append(" and quotaDate>='" + startDate + "'");
//        sql.append(" and quotaDate<='" + endDate + "'");
//        if(StringUtils.isNotBlank(level2_type)){
//            sql.append(" and slaveKey2='"+level2_type+"'");
//            groupBy.append(",slaveKey2,slaveKey2Name");
//        }
//        //根据时间维度分组
//        if (SaveModel.interval_month.equals(interval)) {
//            groupBy.append(" ,date_histogram(field='quotaDate','interval'='month') ");
//        } else if (SaveModel.interval_week.equals(interval)) {
//            groupBy.append(" ,date_histogram(field='quotaDate','interval'='week') ");
//        } else if (SaveModel.interval_day.equals(interval)) {
//            groupBy.append(" ,date_histogram(field='quotaDate','interval'='1d') ");
//        }
//        sql.append(groupBy);
//        List<SaveModel> list =elasticsearchUtil.excute(sql.toString(),SaveModel.class,"","");
//        List<JSONObject> result = new ArrayList<>();
//        for (SaveModel saveModel:list){
//            JSONObject range = new JSONObject();
//            range.put("range", DateUtil.dateToStr(saveModel.getQuotaDate(),"yyyy-MM-dd HH:mm:ss"));
//            range.put("amount", saveModel.getResult2());
//            result.add(range);
//        }
//        return new JSONArray(result);
//    }
    /**
     * 时间格式转换  yyyy-MM-dd转成 2017-07-17T00:00:00+0800
@ -177,4 +432,258 @@ public class StatisticsESService {
        return quotaDate + "T00:00:00+0800";
    }
    /**
     * 查询截止某个日期累计量
     *
     * @param endDate     截止日期
     * @param area        区域或机构代码
     * @param level       级别
     * @param level2_type level2_type的类型
     * @return
     */
    public long getTotalAmount(String startDate, String endDate, String area, int level, String index, String level2_type)  throws Exception {
        startDate = changeDate(startDate);
        endDate = changeDate(endDate);
        List<SaveModel>  list = findOneDateQuotaLevel1(startDate,endDate,area,level,index,"1",level2_type,null,null);
        if(list.size()>0){
            return list.get(0).getResult2();
        }
        return 0L;
    }
    /**
     * 查询截止某个日期某个区域后机构各下级指标累计情况
     *
     * @param endDate 截止日期
     * @param area    区域或机构代码
     * @param level   级别
     * @return
     */
    public JSONArray getLowLevelTotalDetail(String endDate, String area, int level, String index, int sort, String lowLevel, String level2_type, String year) throws Exception {
        String startDate = "";
        //如果year有值 就按照年度来查询 即2017年 就是大于2017-06-30
        if (!org.springframework.util.StringUtils.isEmpty(year)) {
            startDate = year + "-06-30' ";
        }
        //时间格式转换  yyyy-MM-dd转成 2017-07-17T00:00:00+0800
        if(StringUtils.isNotEmpty(startDate)){
            startDate = changeDate(startDate);
        }
        endDate = changeDate(endDate);
        String levelTemp = level+"";
        if(StringUtils.isNotEmpty(lowLevel)){
            levelTemp = lowLevel;
        }
        List<SaveModel>  list = findOneDateQuotaLevel1(startDate,endDate,area,level,index,"1",level2_type,null,lowLevel);
        if (org.springframework.util.StringUtils.isEmpty(year)) {
            year = Constant.getNowYear();
        }
        List<Map<String, Object>> resultList = new ArrayList<>();
        PopulationBase populationBase = getPopulationBase(area,year);
        DecimalFormat df = new DecimalFormat("0.0000");
        for (SaveModel saveModel:list) {
            Map<String, Object> map = new HashMap<>();
            if (SaveModel.OrgLevel.equals(levelTemp)) {
                map.put("code",saveModel.getHospital());
                map.put("name",saveModel.getHospitalName());
            } else if (SaveModel.townLevel.equals(levelTemp)) {
                map.put("code",saveModel.getTown());
                map.put("name",saveModel.getTownName());
            } else if (SaveModel.cityLevel.equals(levelTemp)) {
                map.put("code",saveModel.getCity());
                map.put("name",saveModel.getCityName());
            } else if (SaveModel.teamLevel.equals(level+"")) {
                map.put("code",saveModel.getTeam());
                map.put("name",saveModel.getCityName());
            }
            map.put("amount",saveModel.getResult2());
            map.put("rate",df.format((saveModel.getResult2() * 1.0000) / populationBase.getNum() * 100));
            map.put("rateString",saveModel.getResult2()+"/"+populationBase.getNum());
            resultList.add(map);
        }
        Collections.sort(resultList, new Comparator<Map<String, Object>>() {
            public int compare(Map<String, Object> o1, Map<String, Object> o2) {
                int map1value = (int) o1.get("amount");
                int map2value = (int) o2.get("amount");
                if (map1value - map2value > 0) {
                    return sort == 1 ? -1 : 1;
                } else if (map1value - map2value < 0) {
                    return sort == 1 ? 1 : -1;
                } else {
                    return 0;
                }
            }
        });
        return new JSONArray(resultList);
    }
    public JSONArray getIndexLevelTwototal(String endDate, String area, int level, String index) throws Exception{
//        List<SaveModel> list =findOneDateQuotaLevel2(endDate, area, level, index,"1","");
        List<SaveModel> list = findOneDateQuotaLevel1(endDate,endDate,area,level,index,"1",null,null,null);
        List<Map<String, Object>> resultList = new ArrayList<>();
        DecimalFormat df = new DecimalFormat("0.0000");
        long total = 0;
        for (SaveModel saveModel:list) {
            Map<String, Object> map = new HashMap<>();
            if (SaveModel.OrgLevel.equals(level+"")) {
                map.put("code",saveModel.getHospital());
                map.put("name",saveModel.getHospitalName());
            } else if (SaveModel.townLevel.equals(level+"")) {
                map.put("code",saveModel.getTown());
                map.put("name",saveModel.getTownName());
            } else if (SaveModel.cityLevel.equals(level+"")) {
                map.put("code",saveModel.getCity());
                map.put("name",saveModel.getCityName());
            } else if (SaveModel.teamLevel.equals(level+"")) {
                map.put("code",saveModel.getTeam());
                map.put("name",saveModel.getCityName());
            }
//            map.put("amount",saveModel.getResult2());
//            map.put("rate",df.format((saveModel.getResult2() * 1.0000) / populationBase.getNum() * 100));
//            map.put("rateString",saveModel.getResult2()+"/"+populationBase.getNum());
            map.put("amount", saveModel.getResult2());
            if (index.equals("7")) {
                // 分组指标总数算法
                String code = saveModel.getSlaveKey2();
                if (code.equals("0") || code.equals("1") || code.equals("2") || code.equals("3") || code.equals("7")) {
                    total += saveModel.getResult2();
                }
            } else if (index.equals("16")) {
                String code = saveModel.getSlaveKey2();
                if (!code.equals("2")) {
                    total += saveModel.getResult2();
                }
            } else {
                total += saveModel.getResult2();
            }
            resultList.add(map);
        }
        if (!index.equals("8")) {
            if (index.equals("36")) {
                //如果是查询36的指标 那么除数是签约总数
                List<SaveModel> list2 =findOneDateQuotaLevel1(endDate,endDate, area, level, "1","2",null,null,null);
                Integer num=0;
                if(list2.size()>0){
                    num = list2.get(0).getResult2();
                }else{
                    throw new Exception("param num error");
                }
                for (Map<String, Object> map:resultList) {
                    double rateG = (total > 0 ? ((long) map.get("amount")) * 1.0000 / num * 100 : 0);
                    map.put("rate", df.format(rateG));
                    map.put("rateString", ((long) map.get("amount")) + "/" + num);
                }
            }else{
                for (Map<String, Object> map:resultList) {
                    double rateG = (total > 0 ? ((long) map.get("amount")) * 1.0000 / total * 100 : 0);
                    map.put("rate", df.format(rateG));
                    map.put("rateString", ((int) map.get("amount")) + "/" + total);
                }
            }
        }
        if (index.equals("6") && resultList.size() > 0) {
            int i = 0;
            boolean flag = false;
            for (; i < resultList.size(); i++) {
                if (resultList.get(i).get("code") != null && String.valueOf(resultList.get(i).get("code")).equals("3")
                        && String.valueOf(resultList.get(i).get("amount")).equals("0")) {
                    flag = true;
                    break;
                }
            }
            if (flag) {
                resultList.remove(i);
            }
        }
        return new JSONArray(resultList);
    }
    public PopulationBase getPopulationBase(String code, String year) {
        String sql = "select * from wlyy_people_num where code=? and year=? ";
        List<PopulationBase> peopleNum = jdbcTemplate.query(sql, new BeanPropertyRowMapper(PopulationBase.class), code, year);
        if (peopleNum != null && peopleNum.size() > 0) {
            return peopleNum.get(0);
        } else {
            return null;
        }
    }
    /**
     * 获取一级指标达到量
     *
     * @param endDate 截止日期
     * @param area    区域
     * @param index   指标
     * @param level   级别
     * @return
     */
    public long getIndexTotal(String endDate, String area, int level, String index,String timeLevel) throws Exception{
        endDate = changeDate(endDate);
//        List<SaveModel> list =findOneDateQuotaLevel1("",endDate, area, level, index,timeLevel,null,null);
        List<SaveModel> list =findOneDateQuotaLevel0(endDate,endDate, area, level, index,timeLevel,null,null);
//        List<SaveModel> list =elasticsearchUtil.excute(sql.toString(),SaveModel.class,"","");
        if(list.size()>0){
            return list.get(0).getResult2();
        }
        return 0;
    }
    /**
     * 获取缴费
     *
     * @param endDate 截止日期
     * @param area    区域
     * @param level   级别
     * @return
     */
    public long getWeiJiaoFei(String endDate, String area, int level) {
//        List<SaveModel> list = findOneDateQuotaLevel2(endDate,area,level,"16","2","0");
//        if(list.size()>0){
//            return list.get(0).getResult2();
//        }
        return 0;
    }
    public JSONObject getRenewPercent(String level, String area, String year) {
        String renewIndex = "";
        if ("1".equals(level)) {
            //团队的续签量
            renewIndex = "42";
        } else if ("2".equals(level)) {
            //社区的续签量
            renewIndex = "43";
        } else if ("3".equals(level)) {
            //区的续签量
            renewIndex = "44";
        } else {
            //市的续签量
            renewIndex = "29";
        }
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date today = new Date();
        String todayString = simpleDateFormat.format(today);
        todayString = changeDate(todayString);
//        List<SaveModel> list = findOneDateQuotaLevel1(todayString,area,Integer.parseInt(level),renewIndex,"2",null,null);
        return null;
    }
}

+ 14 - 7
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/util/ElasticsearchUtil.java

@ -59,9 +59,15 @@ public class ElasticsearchUtil {
                requestBuilder = queryAction.explain();
            }
            SearchResponse response = (SearchResponse) requestBuilder.get();
            ObjectResult temp = new ObjectResultsExtractor(true, true, true).extractResults(response.getHits(), true);
            Object queryResult = null;
            if(sql.toUpperCase().indexOf("GROUP")!=-1||sql.toUpperCase().indexOf("SUM")!=-1){
                queryResult = response.getAggregations();
            }else{
                queryResult = response.getHits();
            }
            ObjectResult temp = new ObjectResultsExtractor(true, true, true).extractResults(queryResult, true);
            List<String> heads = temp.getHeaders();
            temp.getLines().stream().forEach(one -> {
            temp.getLines().forEach(one -> {
                Object saveModel = null;
                try {
                    saveModel = clazz.newInstance();
@ -75,11 +81,12 @@ public class ElasticsearchUtil {
                        if(heads.get(i).startsWith("_")){
                            continue;
                        }
                        if (heads.get(i).contains("date_histogram")) {
                            key = "setQuotaDate";
                            value = DateUtil.strToDate(String.valueOf(value), "yyyy-MM-dd HH:mm:ss");
                        } else {
                            key = "set" + UpFirstStr(heads.get(i));
                        key = "set" + UpFirstStr(heads.get(i));
                        if (heads.get(i).contains("quotaDate")||heads.get(i).contains("createTime")||heads.get(i).contains("date_histogram")) {
                            if(heads.get(i).contains("date_histogram")){
                                key = "setQuotaDate";
                            }
                            value = DateUtil.strToDate(String.valueOf(value).replace("T00:00:00+0800"," 00:00:00"), "yyyy-MM-dd HH:mm:ss");
                        }
                        if (value instanceof String) {

+ 22 - 9
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/statistic/StatisticsController.java

@ -34,8 +34,8 @@ public class StatisticsController extends BaseController {
    @Autowired
    StatisticsService statisticsService;
    @Autowired
    StatisticsESService statisticsESService;
//    @Autowired
//    StatisticsESService statisticsESService;
    @Autowired
    StatisticsAllService statisticsAllService;
@ -71,20 +71,19 @@ public class StatisticsController extends BaseController {
    @ResponseBody
    public String indexInterval(@RequestParam(required = true) String startDate,
                                @RequestParam(required = true) String endDate,
                                @RequestParam(required = true) int interval,
                                @RequestParam(required = true) String interval,
                                @RequestParam(required = true) String area,
                                @RequestParam(required = true) String level,
                                @RequestParam(required = true) int level,
                                @RequestParam(required = true) String index,
                                @RequestParam(required = false) String level2_type) {
        String tag = "";
        try {
            String[] indexes = index.split(",");
            JSONObject result = new JSONObject();
            if (index != null) {
                for (String idx : indexes) {
                    result.put("index_" + idx, statisticsESService.getDateIncrementDetail(startDate, endDate, interval, area, level, idx, level2_type));
//                    result.put("index_" + idx, statisticsService.getDateIncrementDetail(startDate, endDate, interval, area, Integer.parseInt(level), idx, level2_type));
//                    result.put("index_" + idx, statisticsESService.getDateIncrementDetail(startDate, endDate, interval, area, level, idx, level2_type));
                    result.put("index_" + idx, statisticsService.getDateIncrementDetail(startDate, endDate, Integer.parseInt(interval), area, level, idx, level2_type));
                }
            }
@ -118,6 +117,7 @@ public class StatisticsController extends BaseController {
            JSONObject result = new JSONObject();
            for (String idx : indexes) {
//                result.put("index_" + idx, statisticsESService.getDateIncrementDetail(startDate, endDate, "", area, level, idx, ""));
                result.put("index_" + idx, statisticsService.getIntervalIncrement(startDate, endDate, area, level, idx));
            }
@ -154,6 +154,7 @@ public class StatisticsController extends BaseController {
            for (String idx : indexes) {
                result.put("index_" + idx, statisticsService.getTotalAmount(startDate, endDate, area, level, idx, level2_type));
//                result.put("index_" + idx, statisticsESService.getTotalAmount(startDate, endDate, area, level, idx, level2_type));
            }
            return write(200, "查询成功", "data", result);
@ -227,6 +228,7 @@ public class StatisticsController extends BaseController {
            for (String idx : indexes) {
                result.put("index_" + idx, statisticsService.getLowLevelTotalDetail(endDate, area, level, idx, sort, lowLevel, level2_type, year));
//                result.put("index_" + idx, statisticsESService.getLowLevelTotalDetail(endDate, area, level, idx, sort, lowLevel, level2_type, year));
            }
            return write(200, "查询成功", "data", result);
@ -261,9 +263,15 @@ public class StatisticsController extends BaseController {
            JSONArray returnJa = new JSONArray();
            List<JSONArray> jsonArrays = new ArrayList<>();
            JSONArray jsonArray1 = statisticsService.getLowLevelTotalDetail(endDate, area, level, indexes[0], sort, lowLevel, null, year);
            jsonArrays.add(jsonArray1);
            /**新版统计代码start**/
//            JSONArray jsonArray1 = statisticsESService.getLowLevelTotalDetail(endDate, area, level, indexes[0], sort, lowLevel, null, year);
//            jsonArrays.add(jsonArray1);
//            JSONArray jsonArray2 = statisticsESService.getLowLevelTotalDetail(endDate, area, level, indexes[1], sort, lowLevel, null, year);
//            jsonArrays.add(jsonArray2);
            /**新版统计代码end**/
            /**旧版统计代码start**/
            JSONArray jsonArray2 = null;
            if (Constant.getNowYearByDate(endDate).equals(year)) {
                jsonArray2 = statisticsService.getLowLevelIncrementDetail(endDate, endDate, area, level, indexes[1], sort, lowLevel);
@ -272,6 +280,7 @@ public class StatisticsController extends BaseController {
                jsonArray2 = statisticsService.getLowLevelIncrementDetail(date, date, area, level, indexes[1], sort, lowLevel);
            }
            jsonArrays.add(jsonArray2);
            /**旧版统计代码end**/
            //遍历合并2个指标中key值一样的
            if (jsonArrays.get(1).length() == 0) {
@ -354,6 +363,7 @@ public class StatisticsController extends BaseController {
            JSONObject result = new JSONObject();
            for (String idx : indexes) {
                result.put("index_" + idx, statisticsAllService.getIndexLevelTwototal(endDate, area, level, idx));
//                result.put("index_" + idx, statisticsESService.getIndexLevelTwototal(endDate, area, level, idx));
            }
            return write(200, "查询成功", "data", result);
        } catch (Exception e) {
@ -395,6 +405,9 @@ public class StatisticsController extends BaseController {
                JSONObject signRate = statisticsAllService.getSignRate(endDate, area, level,year);
                JSONObject signTaskRate = statisticsAllService.getSignTaskRate(endDate, area, level,year);
//                long sign = statisticsESService.getIndexTotal(endDate, area, level, "13","2");
//                long weiJf = statisticsESService.getWeiJiaoFei(endDate, area, level);
//                JSONObject jo = statisticsESService.getRenewPercent(level + "", area, Constant.getNowYear());
                result.put("sign", sign);
                result.put("expenses", weiJf);