Bläddra i källkod

Merge branch 'dev' of http://192.168.1.220:10080/Amoy/patient-co-management into dev

zd_123 7 år sedan
förälder
incheckning
015544dedc

+ 6 - 0
patient-co/patient-co-statistics-es/src/main/java/com/yihu/wlyy/statistics/job/business/CurrentMysqlToEsQuotaJob.java

@ -36,6 +36,7 @@ import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
@ -74,6 +75,8 @@ public class CurrentMysqlToEsQuotaJob implements Job {
    private String esIndex;
    @Autowired
    private QuartzJobConfigDao quartzJobConfigDao;
    @Autowired
    private StringRedisTemplate redisTemplate;
    public void execute(JobExecutionContext context)
@ -162,6 +165,9 @@ public class CurrentMysqlToEsQuotaJob implements Job {
                e.printStackTrace();
            }
        });
        //更新统计时间
        redisTemplate.opsForValue().set("quota:date", DateUtil.dateToStrLong(new Date()));
    }
    /**

+ 7 - 2
patient-co/patient-co-statistics-es/src/main/java/com/yihu/wlyy/statistics/util/ElasticsearchUtil.java

@ -330,8 +330,13 @@ public class ElasticsearchUtil {
                requestBuilder = queryAction.explain();
            }
            SearchResponse response = (SearchResponse) requestBuilder.get();
//            ObjectResult temp = new ObjectResultsExtractor(true, true, true).extractResults(response.getAggregations(), true);
            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 -> {
                try {

+ 21 - 21
patient-co/patient-co-statistics-es/src/main/resources/application.yml

@ -108,30 +108,30 @@ spring:
  profiles: test
  datasource:
#    primaryReadWrite:
#      url: jdbc:mysql://172.19.103.85/data_for_stats?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
#      username: linzhou
#      password: linzhou
#    primaryRead:
#      url: jdbc:mysql://172.19.103.85/data_for_stats?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
#      username: linzhou
#      password: linzhou
#    im: #im库
#      url: jdbc:mysql://172.17.110.160/im_new?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
#      username: linzhou
#      password: linzhou
    primaryReadWrite:
      url: jdbc:mysql://172.19.103.77/wlyy_quota?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
      username: root
      password: 123456
      url: jdbc:mysql://172.19.103.85/data_for_stats?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
      username: linzhou
      password: linzhou
    primaryRead:
      url: jdbc:mysql://172.19.103.77/wlyy_quota?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
      username: root
      password: 123456
      url: jdbc:mysql://172.19.103.85/data_for_stats?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
      username: linzhou
      password: linzhou
    im: #im库
      url: jdbc:mysql://172.19.103.77/wlyy_quota?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
      username: root
      password: 123456
      url: jdbc:mysql://172.17.110.160/im_new?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
      username: linzhou
      password: linzhou
#    primaryReadWrite:
#      url: jdbc:mysql://172.19.103.77/wlyy_quota?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
#      username: root
#      password: 123456
#    primaryRead:
#      url: jdbc:mysql://172.19.103.77/wlyy_quota?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
#      username: root
#      password: 123456
#    im: #im库
#      url: jdbc:mysql://172.19.103.77/wlyy_quota?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
#      username: root
#      password: 123456
  redis:
    host: 172.19.103.88 # Redis server host.

+ 3 - 5
patient-co/patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/dataFilter/SignDataFilter.java

@ -375,11 +375,9 @@ public class SignDataFilter {
    private String getAgeDisease(SignFamily signFamily) {
        //得到患者年龄
        StringBuffer returnLevel2KeyBuffer = new StringBuffer("0");
        int age = IdCardUtil.getAgeForIdcard(signFamily.getIdcard());
        if (0 == age) {
            errorModels.add(ErrorModel.newEM(signFamily.getCode(), ErrorModel.sign_idcard_error_age));
        }
        if (age >= 65) {
        //原来是身份证解析年龄,现在根据患者分组
        String group = cachePool.getPatientGroup(signFamily.getPatient());
        if ("3".equals(group)) {
            returnLevel2KeyBuffer.append(",3");
        }
        //疾病标签

+ 1 - 1
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/config/es/ElasticFactory.java

@ -37,7 +37,7 @@ public class ElasticFactory {
     * @param "http://localhost:9200"
     * @return
     */
    @PostConstruct
    //@PostConstruct
    public JestClient getJestClient() {
        synchronized (ElasticFactory.class) {
            if (factory == null) {

+ 3 - 3
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/prenatalInspector/PrenatalInspectorPreCardService.java

@ -190,10 +190,10 @@ public class PrenatalInspectorPreCardService extends BaseService {
                            JSONObject bedJson = JSONObject.parseObject(bedRecode);
                            JSONArray bedData = null;
                            if(bedJson.getInteger("status")==200){
                                bedData = json.getJSONObject("data").getJSONArray("DATA");
                                bedData = bedJson.getJSONObject("data").getJSONArray("DATA");
                            }
                            if(bedData!=null&&bedData.size()>0){
                                JSONObject exam = data.getJSONObject(data.size()-1);
                                JSONObject exam = bedData.getJSONObject(bedData.size()-1);
                                precontract_org_name = exam.getString("PRECONTRACT_ORG_NAME");
                            }
                        }catch (Exception e){
@ -275,7 +275,7 @@ public class PrenatalInspectorPreCardService extends BaseService {
                        }
                        //重新排序
                        if(rep.size()>0&&re.size()>0){
                        if(rep.size()>0){
                            for (int i=0;i<re.size();i++){
                                rep.add(re.getJSONObject(i));
                            }

+ 13 - 7
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/statistics/StatisticsAllService.java

@ -1101,7 +1101,7 @@ public class StatisticsAllService extends BaseService {
                JSONObject json = new JSONObject(redisData);
                data.put("code", String.valueOf(json.get("code")));
                data.put("name", String.valueOf(json.get("name")));
                data.put("amount", Long.valueOf(String.valueOf(json.get("num"))));
                data.put("amount",String.valueOf(json.get("num")));
        } else {
            Calendar today = Calendar.getInstance();
            today.add(Calendar.DATE, -1);
@ -2500,10 +2500,17 @@ public class StatisticsAllService extends BaseService {
        if (resultList != null) {
            DecimalFormat df = new DecimalFormat("0.0000");
            for (Map<String, Object> map : resultList) {
            Iterator iterator  = resultList.iterator();
            while (iterator.hasNext()){
                Map<String, Object> map  = (Map<String, Object>)iterator.next();
                Integer expenseStatus0amountNum = expenseStatus0.get(map.get("code").toString());
                Integer expenseStatus1amountNum = expenseStatus1.get(map.get("code").toString());
                Integer expenseStatus1SigjnNum = expenseStatus1Sigjn.get(map.get("code").toString());
                if(expenseStatus0amountNum==null||expenseStatus1amountNum==null||expenseStatus1SigjnNum==null){
                    iterator.remove();
                    continue;
                }
                if (expenseStatus0amountNum == null) {
                    expenseStatus0amountNum = 0;
                }
@ -2515,7 +2522,6 @@ public class StatisticsAllService extends BaseService {
                map.put("weChatAmount1", expenseStatus1amountNum);//微信关注已交费数
                map.put("signAccount", expenseStatus1SigjnNum);//签约已缴费的数目
                map.put("bindRate", getRangeDouuble(expenseStatus1amountNum, expenseStatus1SigjnNum, 2));//微信关注率
            }
            if ((level == 4 && "1".equals(lowLevel)) || (level == 2)) {
@ -2562,11 +2568,12 @@ public class StatisticsAllService extends BaseService {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("name", expenseStatus1Sigjn.get("name"));
        jsonObject.put("code", area);
        Long  weChatAmount0 =  (Long) expenseStatus0.get("amount");
        Long  weChatAmount1 =  (Long) expenseStatus1.get("amount");
        Long  weChatAmount0 =  Long.valueOf(expenseStatus0.get("amount").toString());
        Long  weChatAmount1 =  Long.valueOf(expenseStatus1.get("amount").toString());
        Long  signAccount =  Long.valueOf(expenseStatus1Sigjn.get("amount").toString());
        jsonObject.put("weChatAmount0", weChatAmount0);//微信关注未交费数
        jsonObject.put("weChatAmount1", weChatAmount1);//微信关注已交费数
        jsonObject.put("bindRate", getRangeDouuble(weChatAmount0.intValue(), weChatAmount1.intValue(), 2));//微信关注率
        jsonObject.put("bindRate", getRangeDouuble(weChatAmount1.intValue(), signAccount.intValue(), 2));//微信关注率
        return jsonObject;
    }
@ -2773,7 +2780,6 @@ public class StatisticsAllService extends BaseService {
//           查询当天以前的数据
            resultList = getLevelTwoTodayBeforeLowLevelTotal(date, area, level, index, sort, lowLevel, lowCode);
        }
        // 结果为空时,自建结果集
        if (resultList == null || resultList.size() < 1) {
            resultList = getLowLevelMapKey(level, low_level, area);

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

@ -1,8 +1,14 @@
package com.yihu.wlyy.service.app.statisticsES;
import com.yihu.wlyy.config.es.ElasticFactory;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.doctor.team.admin.AdminTeam;
import com.yihu.wlyy.entity.organization.Hospital;
import com.yihu.wlyy.entity.patient.prescription.PrescriptionDispensaryCode;
import com.yihu.wlyy.entity.statistics.PopulationBase;
import com.yihu.wlyy.repository.address.TownDao;
import com.yihu.wlyy.repository.doctor.DoctorAdminTeamDao;
import com.yihu.wlyy.repository.organization.HospitalDao;
import com.yihu.wlyy.util.Constant;
import com.yihu.wlyy.util.DateUtil;
import com.yihu.wlyy.util.ElasticsearchUtil;
@ -21,6 +27,7 @@ import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
@ -36,6 +43,12 @@ public class StatisticsESService {
    private ElasticFactory elasticFactory;
    @Autowired
    JdbcTemplate jdbcTemplate;
    @Autowired
    DoctorAdminTeamDao adminTeamDao;
    @Autowired
    HospitalDao hospitalDao;
    @Autowired
    TownDao townDao;
    /**
     * 获取上次统计时间
@ -73,208 +86,7 @@ public class StatisticsESService {
        return "";
    }
    /**
     * 获取所有指标的增量、到达量
     * 备注:原来接口的一级指标对应现在的
     *
     * @param endDate
     * @param area
     * @param level
     * @param index
     * @return
     */
    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)){
            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 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,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='"+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='"+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);
        return elasticsearchUtil.excute(sql.toString(),SaveModel.class,"","");
    }
//    /**
@ -352,17 +164,39 @@ public class StatisticsESService {
     * @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<SaveModel>  list = null;
        if(StringUtils.isNotEmpty(level2_type)) {
            list = elasticsearchUtil.findDateQuotaLevel1(startDate,endDate,area,level,index,"1",level2_type,interval,null);
        }else{
            list = elasticsearchUtil.findDateQuotaLevel0(startDate,endDate,area,level,index,"1",interval,null);
        }
        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("range", DateUtil.dateToStr(saveModel.getQuotaDate(),"yyyy-MM-dd"));
            range.put("amount", saveModel.getResult2());
            result.add(range);
        }
        return new JSONArray(result);
    }
    /**
     * 获取某个指标在某个期间的增长量
     *
     * @param startDate 起始时间
     * @param endDate   结束时间
     * @param area      区域或机构代码
     * @param level     级别
     * @return
     */
    public long getIntervalIncrement(String startDate, String endDate, String area, int level, String index) throws Exception {
        List<SaveModel>  list = elasticsearchUtil.findDateQuotaLevel0(startDate,endDate,area,level,index,"1",null,null);
        if(list.size()>0){
            return list.get(0).getResult2();
        }
        return 0;
    }
//    /**
//     * 按日统计
@ -423,14 +257,7 @@ public class StatisticsESService {
//    }
    /**
     * 时间格式转换  yyyy-MM-dd转成 2017-07-17T00:00:00+0800
     *
     * @param quotaDate
     */
    private String changeDate(String quotaDate) {
        return quotaDate + "T00:00:00+0800";
    }
    /**
     * 查询截止某个日期累计量
@ -443,10 +270,14 @@ public class StatisticsESService {
     */
    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 = null;
        if(StringUtils.isNotEmpty(level2_type)){
        List<SaveModel>  list = findOneDateQuotaLevel1(startDate,endDate,area,level,index,"1",level2_type,null,null);
            list = elasticsearchUtil.findDateQuotaLevel1(startDate,endDate,area,level,index,"1",level2_type,null,null);
        }else{
            list = elasticsearchUtil.findDateQuotaLevel0(startDate,endDate,area,level,index,"1",null,null);
        }
//        List<SaveModel>  list = findDateQuotaLevel1(startDate,endDate,area,level,index,"1",level2_type,null,null);
        if(list.size()>0){
            return list.get(0).getResult2();
        }
@ -469,16 +300,19 @@ public class StatisticsESService {
        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);
        List<SaveModel>  list = null;
//        if(StringUtils.isNotEmpty(level2_type)){
//
//            list = findDateQuotaLevel1(startDate,endDate,area,level,index,"1",level2_type,null,lowLevel);
//        }else{
//            list = findDateQuotaLevel0(startDate,endDate,area,level,index,"1",null,lowLevel);
//        }
        list = lowLevel(startDate,endDate,area,level, index,"1",lowLevel,level2_type);
//        List<SaveModel>  list = findDateQuotaLevel1(startDate,endDate,area,level,index,"1",level2_type,null,lowLevel);
        if (org.springframework.util.StringUtils.isEmpty(year)) {
            year = Constant.getNowYear();
        }
@ -523,33 +357,98 @@ public class StatisticsESService {
        return new JSONArray(resultList);
    }
    /**
     * 查询截止某个日期某个区域后机构各下级指标累计情况
     *
     * @param endDate 截止日期
     * @param area    区域或机构代码
     * @param level   级别
     * @return
     */
    public List lowLevel(String startDate,String endDate, String area, int level, String index,String timeLevel,String lowLevel,String slaveKey1){
        StringBuffer sql = new StringBuffer();
        StringBuffer groupBy = new StringBuffer();
        String lowLevelField = "";
        if(SaveModel.cityLevel.equals(level+"")){
            lowLevelField=SaveModel.townLevel;
        }else if(SaveModel.townLevel.equals(level+"")){
            lowLevelField=SaveModel.OrgLevel;
        }else if(SaveModel.OrgLevel.equals(level+"")){
            lowLevelField=SaveModel.teamLevel;
        }else{
            lowLevelField=SaveModel.teamLevel;
        }
        if (SaveModel.teamLevel.equals(lowLevelField)) {
            sql.append("select team,teamName,sum(result1) result1, sum(result2) result2 from wlyy_quota_test where ");
            groupBy.append("  group by team,teamName");
        } else if (SaveModel.OrgLevel.equals(lowLevelField)) {
            sql.append("select hospital,hospitalName,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where ");
            groupBy.append("  group by hospital");
        } else if (SaveModel.townLevel.equals(lowLevelField)) {
            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(lowLevelField)) {
            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 in("+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 + "'");
            }
        }
        sql.append(groupBy);
        return elasticsearchUtil.excute(sql.toString(),SaveModel.class,"","");
    }
    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<SaveModel> list = elasticsearchUtil.findDateQuotaLevel1(endDate,endDate,area,level,index,"2",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());
            }
//            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("code",saveModel.getSlaveKey1());
            map.put("name",saveModel.getSlaveKey1Name());
            map.put("amount", saveModel.getResult2());
            if (index.equals("7")) {
                // 分组指标总数算法
@ -571,7 +470,7 @@ public class StatisticsESService {
        if (!index.equals("8")) {
            if (index.equals("36")) {
                //如果是查询36的指标 那么除数是签约总数
                List<SaveModel> list2 =findOneDateQuotaLevel1(endDate,endDate, area, level, "1","2",null,null,null);
                List<SaveModel> list2 = elasticsearchUtil.findDateQuotaLevel1(endDate,endDate, area, level, "1","2",null,null,null);
                Integer num=0;
                if(list2.size()>0){
                    num = list2.get(0).getResult2();
@ -585,7 +484,7 @@ public class StatisticsESService {
                }
            }else{
                for (Map<String, Object> map:resultList) {
                    double rateG = (total > 0 ? ((long) map.get("amount")) * 1.0000 / total * 100 : 0);
                    double rateG = (total > 0 ? ((int) map.get("amount")) * 1.0000 / total * 100 : 0);
                    map.put("rate", df.format(rateG));
                    map.put("rateString", ((int) map.get("amount")) + "/" + total);
                }
@ -630,10 +529,9 @@ public class StatisticsESService {
     * @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 =findDateQuotaLevel1("",endDate, area, level, index,timeLevel,null,null);
        List<SaveModel> list = elasticsearchUtil.findDateQuotaLevel0(endDate,endDate, area, level, index,timeLevel,null,null);
//        List<SaveModel> list =elasticsearchUtil.excute(sql.toString(),SaveModel.class,"","");
        if(list.size()>0){
@ -650,17 +548,17 @@ public class StatisticsESService {
     * @param level   级别
     * @return
     */
    public long getWeiJiaoFei(String endDate, String area, int level) {
    public long getWeiJiaoFei(String endDate, String area, int level) throws Exception{
//        List<SaveModel> list = findOneDateQuotaLevel2(endDate,area,level,"16","2","0");
//        if(list.size()>0){
//            return list.get(0).getResult2();
//        }
        List<SaveModel> list = elasticsearchUtil.findDateQuotaLevel1(endDate,endDate,area,level,"16","2","0",null,null);
        if(list.size()>0){
            return list.get(0).getResult2();
        }
        return 0;
    }
    public JSONObject getRenewPercent(String level, String area, String year) {
    public JSONObject getRenewPercent(String level, String area, String year) throws Exception {
        String renewIndex = "";
        if ("1".equals(level)) {
@ -676,14 +574,396 @@ public class StatisticsESService {
            //市的续签量
            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);
        String timeKey = elasticsearchUtil.getQuotaTime();
        List<SaveModel> list = elasticsearchUtil.findDateQuotaLevel0(timeKey,timeKey,area,Integer.parseInt(level),renewIndex,"2",null,null);
        int renewNum = 0;
        if(list.size()>0){
            renewNum = list.get(0).getResult2();
        }
        //根据年度获取去年的签约数 签约指标是1
        String date = year + "-06-30";
        String index = "1";
        List<SaveModel> list2 = elasticsearchUtil.findDateQuotaLevel0(date,date,area,Integer.parseInt(level),index,"2",null,null);
        int signNum = 0;
        if (list2.size()>0) {
            signNum = list2.get(0).getResult2();
        }
        JSONObject jo = new JSONObject();
        jo.put("yesterYearSign", signNum);//去年的签约量
        jo.put("thisYearRenew", renewNum);//今年的续签量
        jo.put("renewRange", getRange(renewNum, signNum, 2));//续签率  50.00%
        return jo;
    }
    /**
     * 查询截止某个日期累计签约率
     *
     * @param endDate 截止日期
     * @param area    区域或机构代码
     * @param level   级别
     * @return
     */
    public JSONObject getSignRate(String endDate, String area, int level, String year) throws Exception {
        long signAmount = 0;
        List<SaveModel> list = elasticsearchUtil.findDateQuotaLevel0(endDate,endDate,area,level,"13","2",null,null);
        if(list.size()>0){
            signAmount = list.get(0).getResult2();
        }
        PopulationBase peopleNum = getPopulationBase(area, year);
        JSONObject json = new JSONObject();
        DecimalFormat df = new DecimalFormat("0.0000");
        if (peopleNum != null && peopleNum.getNum() > 0) {
            json.put("rate", df.format((signAmount * 1.0000) / peopleNum.getNum() * 100));
            json.put("rateString", signAmount + "/" + peopleNum.getNum());
            json.put("sign", signAmount);
            json.put("people", peopleNum.getNum());
        } else {
            json.put("rate", "0.0000");
            json.put("rateString", "0/0");
            json.put("sign", signAmount);
            json.put("people", 0);
        }
        return json;
    }
    /**
     * 查询截止某个日期签约完成率
     *
     * @param endDate 截止日期
     * @param area    区域或机构代码
     * @param level   级别
     * @return
     */
    public JSONObject getSignTaskRate(String endDate, String area, int level, String year) throws Exception {
        List<SaveModel> list = elasticsearchUtil.findDateQuotaLevel0(endDate,endDate,area,level,"13","2",null,null);
        long signAmount = 0;
        if(list.size()>0){
            signAmount = list.get(0).getResult2();
        }
        PopulationBase peopleNum = getPopulationBase(area, year);
        DecimalFormat df = new DecimalFormat("0.0000");
        JSONObject json = new JSONObject();
        if (peopleNum != null && peopleNum.getTaskNum() > 0) {
            json.put("rate", df.format((signAmount * 1.0000) / peopleNum.getTaskNum() * 100));
            json.put("rateString", signAmount + "/" + peopleNum.getTaskNum());
            json.put("sign", signAmount);
            json.put("people", peopleNum.getTaskNum());
        } else {
            json.put("rate", "0.0000");
            json.put("rateString", "0/0");
            json.put("sign", signAmount);
            json.put("people", 0);
        }
        return json;
    }
        return null;
    /**
     * 获取签约分组信息
     *
     * @param endDate
     * @param lowCode
     * @param area
     * @param level
     * @return
     */
    public JSONObject getGroupInfo(String endDate, String lowCode, String area, int level, String year) throws Exception {
        List<SaveModel> list = elasticsearchUtil.findDateQuotaLevel1(endDate,endDate,area,level,"17","2",lowCode,null,null);
        long total = 0;
        if(list.size()>0){
            total = list.get(0).getResult2();
        }
        int num = 0;
        int taskNum = 0;
        PopulationBase peopleNum = getPopulationBase(area, year);
        if (peopleNum != null) {
            if (lowCode.equals("3")) {
                num = peopleNum.getSixFiveNum();
                taskNum = peopleNum.getSixFiveTaskNum();
            } else if (lowCode.equals("1")) {
                num = peopleNum.getGxyNum();
                taskNum = peopleNum.getGxyTaskNum();
            } else if (lowCode.equals("2")) {
                num = peopleNum.getTnbNum();
                taskNum = peopleNum.getTnbTaskNum();
            }
        }
        JSONObject json = new JSONObject();
        DecimalFormat df = new DecimalFormat("0.0000");
        json.put("sign", total);
        JSONObject signRate = new JSONObject();
        signRate.put("sign", total);
        signRate.put("people", num);
        signRate.put("rate", df.format((total * 1.0000) / num * 100));
        signRate.put("rateString", total + "/" + num);
        json.put("signRate", signRate);
        JSONObject signTaskRate = new JSONObject();
        signTaskRate.put("sign", total);
        signTaskRate.put("people", taskNum);
        signTaskRate.put("rate", df.format((total * 1.0000) / taskNum * 100));
        signTaskRate.put("rateString", total + "/" + taskNum);
        json.put("signTaskRate", signTaskRate);
        return json;
    }
    /**
     * 获取2个数的百分比
     *
     * @param first
     * @param second
     * @param i
     * @return
     */
    public String getRange(int first, int second, int i) {
        if (second == 0 && first > 0) {
            return "100%";
        } else if (second == 0 && first == 0) {
            return "0%";
        }
        float size = (float) (first * 100) / second;
        DecimalFormat df = new DecimalFormat("0.00");//格式化小数,不足的补0
        String filesize = df.format(size);
        return filesize + "%";
    }
    /**
     * 统计65以上人群数据
     *
     * @param endDate
     * @param area
     * @param level
     * @return
     */
    public JSONArray getSixFiveStatistics(String endDate, String area, int level) throws Exception{
        List<SaveModel> list = elasticsearchUtil.findDateQuotaLevel2(endDate,endDate,area,level,"12","2","6",null,null,null);
        List<Map<String, Object>> resultList = new ArrayList<>();
        for (int i = 0; i < list.size(); i++) {
            Map<String, Object> data = new HashMap<>();
            data.put("code", list.get(i).getSlaveKey2());
            data.put("name", list.get(i).getSlaveKey2Name());
            data.put("amount",list.get(i).getResult2());
            resultList.add(data);
        }
        if (resultList == null || resultList.size() < 1) {
            resultList = new ArrayList<>();
            Map<String, Object> gxy = new HashMap<>();
            gxy.put("code", "1");
            gxy.put("name", "高血压");
            gxy.put("amount", Double.valueOf("0.0"));
            resultList.add(gxy);
            Map<String, Object> tnb = new HashMap<>();
            tnb.put("code", "2");
            tnb.put("name", "糖尿病");
            tnb.put("amount", Double.valueOf("0.0"));
            resultList.add(tnb);
            Map<String, Object> gxyTnb = new HashMap<>();
            gxyTnb.put("code", "3");
            gxyTnb.put("name", "高血压+糖尿病");
            gxyTnb.put("amount", Double.valueOf("0.0"));
            resultList.add(gxyTnb);
            Map<String, Object> jk = new HashMap<>();
            jk.put("code", "4");
            jk.put("name", "健康人群");
            jk.put("amount", Double.valueOf("0.0"));
            resultList.add(jk);
        }
        if (resultList != null) {
            for (Map<String, Object> map : resultList) {
                map.put("amount", map.get("amount") == null ? 0 : Math.round(Double.valueOf(map.get("amount").toString())));
            }
            // 65岁以上人群总数统计
            long sixFiveTotal = getSixFiveTotal(endDate, area, level);
            Map<String, Object> sixFive = new HashMap<>();
            sixFive.put("code", "0");
            sixFive.put("name", "总数");
            sixFive.put("amount", sixFiveTotal);
            resultList.add(sixFive);
            return new JSONArray(resultList);
        } else {
            return new JSONArray();
        }
    }
    /**
     * 获取65岁以上人群总数
     *
     * @param endDate
     * @param area
     * @param level
     * @return
     */
    public long getSixFiveTotal(String endDate, String area, int level) throws Exception{
        List<SaveModel> list = elasticsearchUtil.findDateQuotaLevel1(endDate,endDate,area,level,"8","2","6",null,null);
        if(list.size()>0){
            return list.get(0).getResult2();
        }
        return 0;
    }
    /**
     * 查询某个日期范围内的某个指标每天到达量
     *
     * @param startDate
     * @param endDate
     * @param interval
     * @param area
     * @param level
     * @param index
     * @return
     */
    public JSONObject getDateTotal(String startDate, String endDate, int interval, String area, int level, String index, String lowCode, String year) throws Exception {
        int taskNum = 0;
        JSONObject json = new JSONObject();
        if (level > 1 && org.springframework.util.StringUtils.isEmpty(lowCode)) {
            PopulationBase peopleNum = getPopulationBase(area, year);
            if (peopleNum != null) {
                taskNum = peopleNum.getTaskNum();
            }
        }
        if (!org.springframework.util.StringUtils.isEmpty(lowCode)) {
            PopulationBase peopleNum = getPopulationBase(area, year);
            if (peopleNum != null) {
                if (lowCode.equals("3")) {
                    taskNum = peopleNum.getSixFiveTaskNum();
                } else if (lowCode.equals("1")) {
                    taskNum = peopleNum.getGxyTaskNum();
                } else if (lowCode.equals("2")) {
                    taskNum = peopleNum.getTnbTaskNum();
                }
            }
        }
        json.put("taskNum", taskNum);
        List<SaveModel> list = null;
        if(StringUtils.isNotEmpty(lowCode)){
            //一级维度
            list = elasticsearchUtil.findDateQuotaLevel1(startDate,endDate,area,level,index,"2",lowCode,interval+"",null);
        }else{
            list = elasticsearchUtil.findDateQuotaLevel0(startDate,endDate,area,level,index,"2",interval+"",null);
        }
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
        List<JSONObject> result = new ArrayList<>();
        for (SaveModel saveModel:list) {
            JSONObject range = new JSONObject();
            range.put("range", df.format(saveModel.getQuotaDate()));
            range.put("amount", saveModel.getResult2());
            result.add(range);
        }
        json.put("data", new ArrayList<>(result));
        return json;
    }
    /**
     * 获取下级统计key
     *
     * @param level
     * @param lowLevel
     * @param area
     * @return
     */
    public List<Map<String, Object>> getLowLevelMapKey(int level, String lowLevel, String area) {
        List<Map<String, Object>> resultList = new ArrayList<>();
        if (lowLevel.equals("3")) {
            List<Town> towns = townDao.findByCityCode(area);
            if (towns != null) {
                for (Town town : towns) {
                    Map<String, Object> obj = new HashMap<>();
                    obj.put("code", town.getCode());
                    obj.put("name", town.getName());
                    obj.put("amount", "0");
                    resultList.add(obj);
                }
            }
        } else if (lowLevel.equals("2")) {
            List<Town> towns = new ArrayList<>();
            if (level == 4) {
                towns = townDao.findByCityCode(area);
            } else if (level == 3) {
                Town town = townDao.findByCode(area);
                if (town != null) {
                    towns.add(town);
                }
            }
            if (towns != null && towns.size() > 0) {
                for (Town town : towns) {
                    List<Hospital> hospitals = hospitalDao.findByTownCode(town.getCode());
                    for (Hospital hos : hospitals) {
                        if (hos.getCode().length() > 10) {
                            continue;
                        }
                        Map<String, Object> obj = new HashMap<>();
                        obj.put("code", hos.getCode());
                        obj.put("name", hos.getName());
                        obj.put("amount", "0");
                        resultList.add(obj);
                    }
                }
            }
        } else if (lowLevel.equals("1")) {
            List<Hospital> hospitals = new ArrayList<>();
            if (level == 4) {
                hospitals = hospitalDao.findByCity(area);
            } else if (level == 3) {
                hospitals = hospitalDao.findByTownCode(area);
            } else {
                Hospital hos = hospitalDao.findByCode(area);
                if (hos != null) {
                    hospitals.add(hos);
                }
            }
            if (hospitals != null && hospitals.size() > 0) {
                for (Hospital hos : hospitals) {
                    if (hos.getCode().length() > 10) {
                        continue;
                    }
                    List<AdminTeam> teams = adminTeamDao.findByOrgCode(hos.getCode());
                    for (AdminTeam team : teams) {
                        Map<String, Object> obj = new HashMap<>();
                        obj.put("code", String.valueOf(team.getId()));
                        obj.put("name", team.getName());
                        obj.put("amount", "0");
                        resultList.add(obj);
                    }
                }
            }
        }
        return resultList;
    }
    /**
     * 查询某个级别的某个指标到达量
     *
     * @param date
     * @param area
     * @param level
     * @param index
     * @param sort
     * @param lowLevel
     * @return
     * @throws Exception
     */
//    public JSONArray getLevelTwoLowLevelTotalTeamLeader(String date, String area, int level, String index, int sort, String lowLevel, String lowCode, String year) throws Exception {
//
//
//    }
}

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

@ -4,6 +4,8 @@ import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.expr.SQLQueryExpr;
import com.alibaba.druid.sql.parser.SQLExprParser;
import com.yihu.wlyy.config.es.ElasticFactory;
import com.yihu.wlyy.web.quota.vo.SaveModel;
import org.apache.commons.lang3.StringUtils;
import org.elasticsearch.action.search.SearchResponse;
import org.nlpcn.es4sql.domain.Select;
import org.nlpcn.es4sql.jdbc.ObjectResult;
@ -18,7 +20,9 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
@ -60,9 +64,9 @@ public class ElasticsearchUtil {
            }
            SearchResponse response = (SearchResponse) requestBuilder.get();
            Object queryResult = null;
            if(sql.toUpperCase().indexOf("GROUP")!=-1||sql.toUpperCase().indexOf("SUM")!=-1){
            if (sql.toUpperCase().indexOf("GROUP") != -1 || sql.toUpperCase().indexOf("SUM") != -1) {
                queryResult = response.getAggregations();
            }else{
            } else {
                queryResult = response.getHits();
            }
            ObjectResult temp = new ObjectResultsExtractor(true, true, true).extractResults(queryResult, true);
@ -78,15 +82,15 @@ public class ElasticsearchUtil {
                    try {
                        String key = null;
                        Object value = one.get(i);
                        if(heads.get(i).startsWith("_")){
                        if (heads.get(i).startsWith("_")) {
                            continue;
                        }
                        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")){
                        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");
                            value = DateUtil.strToDate(String.valueOf(value).replace("T00:00:00+0800", " 00:00:00"), "yyyy-MM-dd HH:mm:ss");
                        }
                        if (value instanceof String) {
@ -184,7 +188,7 @@ public class ElasticsearchUtil {
                    Object value = temp.getLines().get(0).get(i);
                    if (heads.get(i).contains("createTime")) {
                        key = "setCreateTime";
                        value = DateUtil.strToDate(String.valueOf(value).replace("+0800","").replace("T"," "), "yyyy-MM-dd HH:mm:ss");
                        value = DateUtil.strToDate(String.valueOf(value).replace("+0800", "").replace("T", " "), "yyyy-MM-dd HH:mm:ss");
                    } else {
                        key = "set" + UpFirstStr(heads.get(i));
                    }
@ -208,4 +212,438 @@ public class ElasticsearchUtil {
        }
        return null;
    }
    /**
     * 0级指标查询列表
     * 获取所有指标的增量、到达量
     * 备注:原来接口的一级指标对应现在的
     *
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @param area      区域code
     * @param level     等级
     * @param index     指标
     * @param timeLevel 1增量 2到达量
     * @param interval  1日 2周 3月
     * @param lowLevel  下一级区域等级
     * @return
     * @throws Exception
     */
    public List findDateQuotaLevel0(String startDate, String endDate, String area, int level, String index, String timeLevel, String interval, String lowLevel) throws Exception {
        //时间格式转换  yyyy-MM-dd转成 2017-07-17T00:00:00+0800
        if (StringUtils.isNotEmpty(startDate)) {
            startDate = changeDate(startDate);
        }
        if (StringUtils.isNotEmpty(endDate)) {
            endDate = changeDate(endDate);
        }
        StringBuffer sql = new StringBuffer();
        StringBuffer groupBy = new StringBuffer();
        String low_level = level + "";
        if (StringUtils.isNotEmpty(lowLevel)) {
            low_level = lowLevel;
        }
        if (SaveModel.teamLevel.equals(low_level)) {
            sql.append("select team,teamName,sum(result1) result1, sum(result2) result2 from wlyy_quota_test where 1=1 ");
            groupBy.append("  group by team,teamName");
        } else if (SaveModel.OrgLevel.equals(low_level)) {
            sql.append("select hospital,hospitalName,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where 1=1 ");
            groupBy.append("  group by hospital,hospitalName");
        } else if (SaveModel.townLevel.equals(low_level)) {
            sql.append("select town,townName,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where 1=1 ");
            groupBy.append("  group by town,townName");
        } else if (SaveModel.cityLevel.equals(low_level)) {
            sql.append("select city,cityName,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where 1=1 ");
            groupBy.append("  group by city,cityName");
        }
        if (SaveModel.teamLevel.equals(level + "")) {
            sql.append(" and team='" + area + "'");
        } else if (SaveModel.OrgLevel.equals(level + "")) {
            sql.append(" and hospital='" + area + "'");
        } else if (SaveModel.townLevel.equals(level + "")) {
            sql.append(" and town='" + area + "'");
        } else if (SaveModel.cityLevel.equals(level + "")) {
            sql.append(" and city='" + area + "'");
        }
        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(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 excute(sql.toString(), SaveModel.class, "", "");
    }
    /**
     * 一级指标查询列表
     * 获取一级指标的增量、到达量
     * 备注:原接口的二级指标对应现在的一级指标
     *
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @param area      区域code
     * @param level     等级
     * @param index     指标
     * @param timeLevel 1增量 2到达量
     * @param slaveKey1 一级维度
     * @param interval  1日 2周 3月
     * @param lowLevel  下个等级
     * @return
     * @throws Exception
     */
    public List findDateQuotaLevel1(String startDate, String endDate, String area, int level, String index, String timeLevel, String slaveKey1, String interval, String lowLevel) throws Exception {
        //时间格式转换  yyyy-MM-dd转成 2017-07-17T00:00:00+0800
        if (StringUtils.isNotEmpty(startDate)) {
            startDate = changeDate(startDate);
        }
        if (StringUtils.isNotEmpty(endDate)) {
            endDate = changeDate(endDate);
        }
        StringBuffer sql = new StringBuffer();
        StringBuffer groupBy = new StringBuffer();
        String low_level = level + "";
        if (StringUtils.isNotEmpty(lowLevel)) {
            low_level = lowLevel;
        }
        if (SaveModel.teamLevel.equals(low_level)) {
            sql.append("select team,teamName,slaveKey1,slaveKey1Name,sum(result1) result1, sum(result2) result2 from wlyy_quota_test where 1=1 ");
            groupBy.append("  group by team,teamName,slaveKey1,slaveKey1Name");
        } else if (SaveModel.OrgLevel.equals(low_level)) {
            sql.append("select hospital,hospitalName,slaveKey1,slaveKey1Name,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where 1=1 ");
            groupBy.append("  group by hospital,hospitalName,slaveKey1,slaveKey1Name");
        } else if (SaveModel.townLevel.equals(low_level)) {
            sql.append("select town,townName,slaveKey1,slaveKey1Name,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where 1=1 ");
            groupBy.append("  group by town,townName,slaveKey1,slaveKey1Name");
        } else if (SaveModel.cityLevel.equals(low_level)) {
            sql.append("select city,cityName,slaveKey1,slaveKey1Name,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where 1=1 ");
            groupBy.append("  group by city,cityName,slaveKey1,slaveKey1Name");
        }
        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(" 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(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 excute(sql.toString(), SaveModel.class, "", "");
    }
    /**
     * 二级指标查询列表
     * 获取二级指标的增量、到达量
     * 备注:原接口的三级指标对应现在的二级指标
     *
     * @param startDate 开始时间
     * @param endDate   结束时间
     * @param area      区域code
     * @param level     等级
     * @param index     指标
     * @param timeLevel 1增量 2到达量
     * @param slaveKey1 一级维度code
     * @param slaveKey2 二级维度code
     * @param interval  1日 2周 3月
     * @param lowLevel  下一等级
     * @return
     */
    public List findDateQuotaLevel2(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
        if (StringUtils.isNotEmpty(startDate)) {
            startDate = changeDate(startDate);
        }
        if (StringUtils.isNotEmpty(endDate)) {
            endDate = changeDate(endDate);
        }
        StringBuffer sql = new StringBuffer();
        StringBuffer groupBy = new StringBuffer();
        String low_level = level + "";
        if (StringUtils.isNotEmpty(lowLevel)) {
            low_level = lowLevel;
        }
        if (SaveModel.teamLevel.equals(low_level)) {
            sql.append("select team,teamName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,result1,result2 from wlyy_quota_test where 1=1 ");
            groupBy.append("  group by team,teamName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name");
        } else if (SaveModel.OrgLevel.equals(low_level)) {
            sql.append("select hospital,hospitalName,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where 1=1 ");
            groupBy.append("  group by hospital,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,hospitalName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name");
        } else if (SaveModel.townLevel.equals(low_level)) {
            sql.append("select town,townName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where 1=1 ");
            groupBy.append("  group by town,townName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name");
        } else if (SaveModel.cityLevel.equals(low_level)) {
            sql.append("select city,cityName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name,sum(result1) result1,sum(result2) result2 from wlyy_quota_test where 1=1 ");
            groupBy.append("  group by city,cityName,slaveKey1,slaveKey1Name,slaveKey2,slaveKey2Name");
        }
        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(" 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.isNotBlank(slaveKey1)) {
            sql.append(" and slaveKey1='" + slaveKey1 + "'");
        }
        if (StringUtils.isNotBlank(slaveKey2)) {
            sql.append(" and slaveKey2='" + slaveKey2 + "'");
        }
        //根据时间维度分组
        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 excute(sql.toString(), SaveModel.class, "", "");
    }
    /**
     * 时间格式转换  yyyy-MM-dd转成 2017-07-17T00:00:00+0800
     *
     * @param quotaDate
     */
    private String changeDate(String quotaDate) {
        return quotaDate + "T00:00:00+0800";
    }
    //获取最新更新的时间
    public String getQuotaTime() {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date today = new Date();
        String todayString = simpleDateFormat.format(today);
        todayString = changeDate(todayString);
        return todayString;
    }
    /**
     * 0级维度
     * 查询某一天某一个0级维度的指标
     *
     * @param quotaDate 时间 yyyy-mm-dd
     * @param area      code  厦门市 350200
     * @param level     等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index     指标code
     * @param timelevel // 1日 2年
     * @return
     */
    public SaveModel findOneDateQuotaLevel0(String quotaDate, String area, int level, String index, String timelevel) throws Exception {
        List list = findDateQuotaLevel0(quotaDate, quotaDate, area, level, index, timelevel, null, null);
        return (SaveModel) list.get(0);
    }
    /**
     * 1级维度
     * 查询某一天某一个1级维度的某个1级维度下的指标 例如查询65岁以上患者
     *
     * @param quotaDate 时间 yyyy-mm-dd
     * @param area      code  厦门市 350200
     * @param level     等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index     指标code
     * @param timelevel // 1日 2年
     * @param slaveKey1  一级维度的key
     * @return
     */
    public SaveModel findOneDateQuotaLevel1(String quotaDate, String area, int level, String index, String timelevel, String slaveKey1) throws Exception {
        List list = findDateQuotaLevel1(quotaDate, quotaDate, area, level, index, timelevel,slaveKey1, null, null);
        return (SaveModel) list.get(0);
    }
    /**
     * 2级维度
     * 查询某一天某一个2级维度的某个1级维度和2级维度下的指标  例如查询65岁以上的高血压患者
     *
     * @param quotaDate 时间 yyyy-mm-dd
     * @param area      code  厦门市 350200
     * @param level     等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index     指标code
     * @param timelevel // 1日 2年
     * @param slaveKey1  一级维度的key
     * @param slaveKey2  二级维度的key
     * @return
     */
    public SaveModel findOneDateQuotaLevel2(String quotaDate, String area, int level, String index, String timelevel, String slaveKey1, String slaveKey2) throws Exception {
        List list = findDateQuotaLevel2(quotaDate, quotaDate, area, level, index, timelevel,slaveKey1,slaveKey2, null, null);
        return (SaveModel) list.get(0);
    }
    /**
     * 折线图
     * 0级维度
     * 查询某个0级维度的指标折线图
     *
     * @param startDate 开始时间 yyyy-mm-dd  包含头
     * @param endDate 结束时间 yyyy-mm-dd  包含头
     * @param area   code  厦门市 350200 code 和level是对应的
     * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index  指标code
     * @param timelevel   1增量   2到达量(按照年度)
     * @param interval  1日 2周 3月 (按照日周月聚合)
     * @return
     * @throws Exception
     */
    public SaveModel findLineChartDateQuotaLevel0(String startDate,String endDate,  String area, int level, String index, String timelevel,String interval) throws Exception {
        List list = findDateQuotaLevel0(startDate, endDate, area, level, index, timelevel, interval, null);
        return (SaveModel) list.get(0);
    }
    /**
     * 折线图
     * 1级维度
     * 查询某个1级维度的某个1级维度下的折线图 例如查询65岁以上患者
     *
     * @param startDate 开始时间 yyyy-mm-dd  包含头
     * @param endDate 结束时间 yyyy-mm-dd  包含头
     * @param area   code  厦门市 350200 code 和level是对应的
     * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index  指标code
     * @param timelevel   1增量   2到达量(按照年度)
     * @param interval  1日 2周 3月 (按照日周月聚合)
     * @param slaveKey1  一级维度的key
     * @return
     */
    public SaveModel findLineChartDateQuotaLevel1(String startDate,String endDate,  String area, int level, String index, String timelevel,String interval, String slaveKey1) throws Exception {
        List list = findDateQuotaLevel1(startDate, endDate, area, level, index, timelevel,slaveKey1, interval, null);
        return (SaveModel) list.get(0);
    }
    /**
     * 折线图
     * 2级维度
     * 查询某个2级维度的某个1级维度和2级维度下的折线图  例如查询65岁以上的高血压患者
     *
     * @param startDate 开始时间 yyyy-mm-dd  包含头
     * @param endDate 结束时间 yyyy-mm-dd  包含头
     * @param area   code  厦门市 350200 code 和level是对应的
     * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index  指标code
     * @param timelevel   1增量   2到达量(按照年度)
     * @param interval  1日 2周 3月 (按照日周月聚合)
     * @param slaveKey1  一级维度的key
     * @param slaveKey2  二级维度的key
     * @return
     */
    public SaveModel findLineChartDateQuotaLevel2(String startDate,String endDate,  String area, int level, String index, String timelevel,String interval, String slaveKey1, String slaveKey2) throws Exception {
        List list = findDateQuotaLevel2(startDate, endDate, area, level, index, timelevel,slaveKey1,slaveKey2, interval, null);
        return (SaveModel) list.get(0);
    }
    /**
     *  列表
     * 0级维度
     * 查询某一天某个0级维度的指标列表
     *
     * @param quotaDate 时间 yyyy-mm-dd  包含头
     * @param area   code  厦门市 350200 code 和level是对应的
     * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index  指标code
     * @param timelevel   1增量   2到达量(按照年度)
     * @param lowLevel  下一级区域等级   1 省 2 市 3 区县 4 机构 5团队
     * @return
     * @throws Exception
     */
    public SaveModel findListDateQuotaLevel0(String quotaDate,  String area, int level, String index, String timelevel, String lowLevel) throws Exception {
        List list = findDateQuotaLevel0(quotaDate, quotaDate, area, level, index, timelevel, null, lowLevel);
        return (SaveModel) list.get(0);
    }
    /**
     * 列表
     * 1级维度
     * 查询某个1级维度的某个1级维度下的列表 例如查询65岁以上患者
     *
     * @param quotaDate 时间 yyyy-mm-dd  包含头
     * @param area   code  厦门市 350200 code 和level是对应的
     * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index  指标code
     * @param timelevel   1增量   2到达量(按照年度)
     * @param lowLevel  下一级区域等级   1 省 2 市 3 区县 4 机构 5团队
     * @param slaveKey1  一级维度的key
     * @return
     */
    public SaveModel findListDateQuotaLevel1(String quotaDate,  String area, int level, String index, String timelevel,String lowLevel, String slaveKey1) throws Exception {
        List list = findDateQuotaLevel1(quotaDate, quotaDate, area, level, index, timelevel,slaveKey1, null, lowLevel);
        return (SaveModel) list.get(0);
    }
    /**
     * 列表
     * 2级维度
     * 查询某个2级维度的某个1级维度和2级维度下的列表  例如查询65岁以上的高血压患者
     *
     * @param quotaDate 时间 yyyy-mm-dd  包含头
     * @param area   code  厦门市 350200 code 和level是对应的
     * @param level 等级 1 省 2 市 3 区县 4 机构 5团队
     * @param index  指标code
     * @param timelevel   1增量   2到达量(按照年度)
     * @param lowLevel  下一级区域等级   1 省 2 市 3 区县 4 机构 5团队
     * @param slaveKey1  一级维度的key
     * @param slaveKey2  二级维度的key
     * @return
     */
    public SaveModel findListDateQuotaLevel2(String quotaDate,  String area, int level, String index, String timelevel,String lowLevel, String slaveKey1, String slaveKey2) throws Exception {
        List list = findDateQuotaLevel2(quotaDate, quotaDate, area, level, index, timelevel,slaveKey1,slaveKey2, null, lowLevel);
        return (SaveModel) list.get(0);
    }
}

+ 1 - 1
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/patient/prenatalInspector/PrenatalInspectorContoller.java

@ -37,7 +37,7 @@ public class PrenatalInspectorContoller extends BaseController{
        try {
            PrenatalInspectorPreCard preCard = objectMapper.readValue(json,PrenatalInspectorPreCard.class);
            String code = preCardService.addPrenatalInspectorPreCard(preCard,getRepUID());
            String code = preCardService.addPrenatalInspectorPreCard(preCard,getUID());
            if("-1".equals(code)){
                return error(-1,"居民未签约,无法添加预建卡信息");
            }else if("-3".equals(code)){

+ 378 - 0
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/statistic/EsStatisticsController.java

@ -0,0 +1,378 @@
package com.yihu.wlyy.web.statistic;
import com.yihu.wlyy.service.app.statistics.StatisticsService;
import com.yihu.wlyy.service.app.statisticsES.StatisticsESService;
import com.yihu.wlyy.util.Constant;
import com.yihu.wlyy.web.BaseController;
import io.swagger.annotations.Api;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
/**
 * Created by chenweida on 2017/10/13.
 */
@Controller
@RequestMapping(value = "/esstatistics", produces = MediaType.APPLICATION_JSON_UTF8_VALUE,method = {RequestMethod.GET,RequestMethod.POST})
@Api(description = "ES统计查询")
public class EsStatisticsController extends BaseController {
    @Autowired
    StatisticsESService statisticsESService;
    @Autowired
    StatisticsService statisticsService;
    /**
     * 获取统计时间
     *
     * @return
     */
    @RequestMapping(value = "/time")
    @ResponseBody
    public String getStatisticsTime() {
        try {
            return write(200, "查询成功", "data", statisticsService.getStatisticsTime());
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "查询失败");
        }
    }
    /**
     * 指标按间隔统计  增量
     * 按年度统计是根据前端传的 startDate
     *
     * @param startDate 起始日期
     * @param endDate   结束时间
     * @param interval  时间间隔
     * @param area      区域或机构
     * @param level     级别
     * @param index     指标 3 4 5 27
     * @return
     */
    @RequestMapping(value = "/interval")
    @ResponseBody
    public String indexInterval(@RequestParam(required = true) String startDate,
                                @RequestParam(required = true) String endDate,
                                @RequestParam(required = true) String interval,
                                @RequestParam(required = true) String area,
                                @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, Integer.parseInt(interval), area, level, idx, level2_type));
                }
            }
            return write(200, "查询成功!", "data", result);
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, tag + "查询失败!");
        }
    }
    /**
     * 指标期间 增长量
     *
     * @param startDate
     * @param endDate
     * @param area
     * @param level
     * @param index
     * @return
     */
    @RequestMapping("/increment")
    @ResponseBody
    public String getIndexIncrement(@RequestParam(required = true) String startDate,
                                    @RequestParam(required = true) String endDate,
                                    @RequestParam(required = true) String area,
                                    @RequestParam(required = true) int level,
                                    @RequestParam(required = true) String index,
                                    @RequestParam(required = false) String year) {
        try {
            String[] indexes = index.split(",");
            JSONObject result = new JSONObject();
            for (String idx : indexes) {
//                result.put("index_" + idx, statisticsService.getIntervalIncrement(startDate, endDate, area, level, idx));
                result.put("index_" + idx, statisticsESService.getIntervalIncrement(startDate, endDate, area, level, idx));
            }
            return write(200, "查询成功", "data", result);
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "查询失败");
        }
    }
    /**
     * 指标截止日期累积量  增量的累加接口
     *
     * @param startDate   开始时间
     * @param endDate     结束时间 1
     * @param area        父code
     * @param level       等级  1 团队,2 机构,3 区,4 市
     * @param index       指标代码 3 4 5 27
     * @param level2_type 指标代码 例如性别 1 男 2 女  不传就返回男和女的总和
     * @return
     */
    @RequestMapping("/total")
    @ResponseBody
    public String getIndexTotal(
            @RequestParam(required = true) String startDate,
            @RequestParam(required = true) String endDate,
            @RequestParam(required = true) String area,
            @RequestParam(required = true) int level,
            @RequestParam(required = true) String index,
            @RequestParam(required = false) String level2_type) {
        try {
            String[] indexes = index.split(",");
            JSONObject result = new JSONObject();
            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);
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "查询失败");
        }
    }
    /**
     * 指标截止日期      增量
     * (如:待预约量)
     *
     * @param endDate     结束时间
     * @param area        父code
     * @param level       等级  1 团队,2 机构,3 区,4 市
     * @param index       指标代码
     * @param sort        排序 1倒叙 2是 正序
     * @param lowLevel
     * @param level2_type 指标代码 例如性别 1 男 2 女  不传就返回男和女的总和
     * @return
     */
    @RequestMapping("/lowlevel_total")
    @ResponseBody
    public String getIndexLowLevelTotal(@RequestParam(required = true) String endDate,
                                        @RequestParam(required = true) String area,
                                        @RequestParam(required = true) int level,
                                        @RequestParam(required = true) String index,
                                        @RequestParam(required = true) int sort,
                                        @RequestParam(required = false) String lowLevel,
                                        @RequestParam(required = false) String level2_type,
                                        @RequestParam(required = false) String year) {
        try {
            String[] indexes = index.split(",");
            JSONObject result = new JSONObject();
            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);
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "查询失败");
        }
    }
    /**
     * 指标截止日期累积量  增量
     * 根据2个ID合并指标
     *
     * @param endDate
     * @param area
     * @param level
     * @param index   3,22
     * @return
     */
    @RequestMapping("/lowlevel_total_mesh")
    @ResponseBody
    public String getIndexLowLevelTotalMesh(@RequestParam(required = true) String endDate, // 2007-10-02
                                            @RequestParam(required = true) String area,//区域 350205
                                            @RequestParam(required = true) int level,//等级
                                            @RequestParam(required = true) String index,//指标code
                                            @RequestParam(required = true) int sort,//1是倒叙 0是正序
                                            @RequestParam(required = false) String lowLevel,
                                            @RequestParam(required = false) String year) {
        try {
            String[] indexes = index.split(",");
            JSONObject result = new JSONObject();
            JSONArray jsonArray = statisticsESService.getLowLevelTotalDetail(endDate, area, level, index, sort, lowLevel, null, year);
            result.put("index_" + indexes[0], jsonArray);
            return write(200, "查询成功", "data", result);
        } catch (Exception e)
        {
            e.printStackTrace();
            return error(-1, "查询失败");
        }
    }
    /**
     * 指标期间      增长量
     * 如果是查找去年的 前端根据endDate来查看 2016年度 就传 2017-6-30
     *
     * @param endDate
     * @param area
     * @param level
     * @param index   6 7 8 15 16
     * @return
     */
    @RequestMapping("/leveltwo_increment")
    @ResponseBody
    public String getIndexLevelTwoIncrement(
            @RequestParam(required = true) String endDate,
            @RequestParam(required = true) String area,
            @RequestParam(required = true) int level,
            @RequestParam(required = true) String index) {
        try {
            String[] indexes = index.split(",");
            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) {
            e.printStackTrace();
            return error(-1, "查询失败");
        }
    }
    /**
     * 获取签约率、签约完成率 续签率
     * t
     *
     * @param endDate 截止日期
     * @param area    区域
     * @param level   区域级别 4:城市 3:区 2:社区 1:团队
     * @return
     */
    @RequestMapping(value = "/sign_info")
    @ResponseBody
    public String getAreaSignInfo(@RequestParam(required = true) String endDate,
                                  @RequestParam(required = true) String area,
                                  @RequestParam(required = true) int level,
                                  @RequestParam(required = false) String lowCode,
                                  @RequestParam(required = false) String year
    ) {
        try {
            JSONObject result = new JSONObject();
            //year没传默认是今年
            if(org.springframework.util.StringUtils.isEmpty(year)){
                year= Constant.getNowYear();
            }
            if (StringUtils.isEmpty(lowCode)) {
//                long sign = statisticsAllService.getIndexTotal(endDate, area, level, "13");
//                long weiJf = statisticsAllService.getWeiJiaoFei(endDate, area, level);
//                JSONObject jo = statisticsService.getRenewPercent(level + "", area, Constant.getNowYear());
//                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());
                JSONObject signRate = statisticsESService.getSignRate(endDate, area, level,year);
                JSONObject signTaskRate = statisticsESService.getSignTaskRate(endDate, area, level,year);
                result.put("sign", sign);
                result.put("expenses", weiJf);
                result.put("signRate", signRate);
                result.put("signTaskRate", signTaskRate);
                result.put("renew", jo.get("thisYearRenew") + "/" + jo.get("yesterYearSign"));//去年的签约量
                result.put("renewRange", jo.get("renewRange"));//续签率  50.00%
            } else {
                //如果年度不是当前年度 就根据endDate 找到那个年度的最后一天的数据
                if(!Constant.getNowYear().equals(year)){
                    endDate=(Integer.valueOf(year)+1)+"-06-30";
                }
//                result = statisticsAllService.getGroupInfo(endDate, lowCode, area, level,year);
                result = statisticsESService.getGroupInfo(endDate, lowCode, area, level,year);
            }
            return write(200, "查询成功", "data", result);
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "查询失败");
        }
    }
    /**
     * 获取三级指标增量  到达量
     *
     * @param startDate
     * @param endDate
     * @param area
     * @param level
     * @return
     */
    /**
     * 指标按间隔统计  到达量
     *
     * @param startDate 起始日期
     * @param endDate   结束时间
     * @param interval  时间间隔
     * @param area      区域或机构
     * @param level     级别
     * @param index     指标 除了增量的指标都会调用
     * @param lowCode   子维度
     * @param year      查询年份
     * @return
     */
    @RequestMapping(value = "/interval_total")
    @ResponseBody
    public String indexIntervalTotal(@RequestParam(required = true) String startDate,
                                     @RequestParam(required = true) String endDate,
                                     @RequestParam(required = true) int interval,
                                     @RequestParam(required = true) String area,
                                     @RequestParam(required = true) int level,
                                     @RequestParam(required = true) String index,
                                     @RequestParam(required = false) String lowCode,
                                     @RequestParam(required = false) String year) {
        try {
            String[] indexes = index.split(",");
            JSONObject result = new JSONObject();
            if (index != null) {
                for (String idx : indexes) {
                    if(org.springframework.util.StringUtils.isEmpty(year)){
                        year=Constant.getNowYear();
                    }
//                    JSONObject json = statisticsAllService.getDateTotal(startDate, endDate, interval, area, level, idx, lowCode,year);
                    JSONObject json = statisticsESService.getDateTotal(startDate, endDate, interval, area, level, idx, lowCode,year);
                    result.put("index_" + idx, json);
                }
            }
            return write(200, "查询成功!", "data", result);
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "查询失败!");
        }
    }
}

+ 12 - 2
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/statistic/StatisticsController.java

@ -46,6 +46,7 @@ public class StatisticsController extends BaseController {
     */
    @RequestMapping(value = "/time")
    @ResponseBody
    @Deprecated
    public String getStatisticsTime() {
        try {
            return write(200, "查询成功", "data", statisticsService.getStatisticsTime());
@ -69,6 +70,7 @@ public class StatisticsController extends BaseController {
     */
    @RequestMapping(value = "/interval")
    @ResponseBody
    @Deprecated
    public String indexInterval(@RequestParam(required = true) String startDate,
                                @RequestParam(required = true) String endDate,
                                @RequestParam(required = true) String interval,
@ -106,6 +108,7 @@ public class StatisticsController extends BaseController {
     */
    @RequestMapping("/increment")
    @ResponseBody
    @Deprecated
    public String getIndexIncrement(@RequestParam(required = true) String startDate,
                                    @RequestParam(required = true) String endDate,
                                    @RequestParam(required = true) String area,
@ -141,6 +144,7 @@ public class StatisticsController extends BaseController {
     */
    @RequestMapping("/total")
    @ResponseBody
    @Deprecated
    public String getIndexTotal(
            @RequestParam(required = true) String startDate,
            @RequestParam(required = true) String endDate,
@ -176,6 +180,7 @@ public class StatisticsController extends BaseController {
     */
    @RequestMapping("/lowlevel_increment")
    @ResponseBody
    @Deprecated
    public String getIndexLowLevelIncrement(@RequestParam(required = true) String startDate,
                                            @RequestParam(required = true) String endDate,
                                            @RequestParam(required = true) String area,
@ -214,6 +219,7 @@ public class StatisticsController extends BaseController {
     */
    @RequestMapping("/lowlevel_total")
    @ResponseBody
    @Deprecated
    public String getIndexLowLevelTotal(@RequestParam(required = true) String endDate,
                                        @RequestParam(required = true) String area,
                                        @RequestParam(required = true) int level,
@ -250,6 +256,7 @@ public class StatisticsController extends BaseController {
     */
    @RequestMapping("/lowlevel_total_mesh")
    @ResponseBody
    @Deprecated
    public String getIndexLowLevelTotalMesh(@RequestParam(required = true) String endDate, // 2007-10-02
                                            @RequestParam(required = true) String area,//区域 350205
                                            @RequestParam(required = true) int level,//等级
@ -264,8 +271,8 @@ public class StatisticsController extends BaseController {
            List<JSONArray> jsonArrays = new ArrayList<>();
            /**新版统计代码start**/
//            JSONArray jsonArray1 = statisticsESService.getLowLevelTotalDetail(endDate, area, level, indexes[0], sort, lowLevel, null, year);
//            jsonArrays.add(jsonArray1);
            JSONArray jsonArray1 = statisticsService.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**/
@ -353,6 +360,7 @@ public class StatisticsController extends BaseController {
     */
    @RequestMapping("/leveltwo_increment")
    @ResponseBody
    @Deprecated
    public String getIndexLevelTwoIncrement(
            @RequestParam(required = true) String endDate,
            @RequestParam(required = true) String area,
@ -384,6 +392,7 @@ public class StatisticsController extends BaseController {
     */
    @RequestMapping(value = "/sign_info")
    @ResponseBody
    @Deprecated
    public String getAreaSignInfo(@RequestParam(required = true) String endDate,
                                  @RequestParam(required = true) String area,
                                  @RequestParam(required = true) int level,
@ -471,6 +480,7 @@ public class StatisticsController extends BaseController {
     */
    @RequestMapping(value = "/interval_total")
    @ResponseBody
    @Deprecated
    public String indexIntervalTotal(@RequestParam(required = true) String startDate,
                                     @RequestParam(required = true) String endDate,
                                     @RequestParam(required = true) int interval,