Sfoglia il codice sorgente

Merge branch 'dev' of liubing/wlyy2.0 into dev

liubing 3 anni fa
parent
commit
88f4214494

+ 155 - 1
business/es-service/src/main/java/com/yihu/jw/es/util/ElasticsearchUtil.java

@ -23,6 +23,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import java.lang.reflect.Field;
@ -48,6 +49,8 @@ public class ElasticsearchUtil {
    private ElasticFactory elasticFactory;
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Value("${es.type.Statistics}")
    private String esType;
    @Value("${es.index.Statistics}")
@ -296,6 +299,12 @@ public class ElasticsearchUtil {
     */
        public List findDateQuotaLevel0(String startDate, String endDate, String area, int level, String index, String timeLevel, String interval, String lowLevel) throws Exception {
        String areaLevel="6";
        String sqlArea = " select area_level from wlyy_job_config_new where id='"+index+"' ";
        List<String> areaLevels = jdbcTemplate.queryForList(sqlArea,String.class);
        if (areaLevels.size()>0){
            areaLevel = areaLevels.get(0);
        }
        //时间格式转换  yyyy-MM-dd转成 2017-07-17T00:00:00+0800
        if (StringUtils.isNotEmpty(startDate)) {
            if (startDate.length() > 10) {
@ -352,7 +361,7 @@ public class ElasticsearchUtil {
//        sql.append(" quotaCode='" + index + "'  ");
        sql.append(" quotaCode in(" + index + ")  ");
        sql.append(" and timeLevel='" + timeLevel + "'  ");
        sql.append(" and areaLevel='6'");
        sql.append(" and areaLevel='"+areaLevel+"'");
        if (StringUtils.isNotEmpty(startDate)) {
            sql.append(" and quotaDate>='" + startDate + "'");
        }
@ -1063,6 +1072,135 @@ public class ElasticsearchUtil {
        return excute(sql.toString(), SaveModel.class, "", "");
    }
    /**
     * 多维度指标查寻(可控纬度与分组)
     * @param startDate
     * @param endDate
     * @param area
     * @param level
     * @param index
     * @param timeLevel
     * @param interval
     * @param lowLevel
     * @param groupKey
     * @param slaveKeys
     * @return
     */
    public List findDateQuotaLevels(String startDate, String endDate, String area, int level, String index, String timeLevel,String interval, String lowLevel,String groupKey,String ...slaveKeys) {
        String areaLevel="6";
        String sqlArea = " select area_level from wlyy_job_config_new where id='"+index+"' ";
        List<String> areaLevels = jdbcTemplate.queryForList(sqlArea,String.class);
        if (areaLevels.size()>0){
            areaLevel = areaLevels.get(0);
        }
        //时间格式转换  yyyy-MM-dd转成 2017-07-17T00:00:00+0800
        if (StringUtils.isNotEmpty(startDate)) {
            if (startDate.length() > 10) {
                startDate = changeTime(startDate);
            } else {
                startDate = changeDate(startDate);
            }
        }
        if (StringUtils.isNotEmpty(endDate)) {
            if (endDate.length() > 10) {
                endDate = changeTime(endDate);
            } else {
                endDate = changeDate(endDate);
            }
        }
        StringBuffer sql = new StringBuffer();
        StringBuffer groupBy = new StringBuffer();
        String low_level = level + "";
        if (StringUtils.isNotEmpty(lowLevel)) {
            low_level = lowLevel;
        }
        String[] groupKeys = groupKey.split(",");
        StringBuffer selectKeys = new StringBuffer();
        StringBuffer groupStr = new StringBuffer();
        int i=1;
        for (String slaveKeyTmp:slaveKeys){
            selectKeys.append(" slaveKey").append(i).append(" as slaveKey").append(i).append(",slaveKey").append(i).append("Name as slaveKey").append(i).append("Name, ");
            i++;
        }
        for (String groupKeyTmp:groupKeys){
            groupStr.append(",slaveKey"+groupKeyTmp+",slaveKey"+groupKeyTmp+"Name");
        }
        if (SaveModel.doctorLevel.equals(low_level)) {
            sql.append("select doctor as doctor,doctorName as doctorName,"+selectKeys.toString()+"sum(result1) as result1,sum(result2) as result2 from " + esIndex + " where ");
            groupBy.append("  group by doctor,doctorName").append(groupStr.toString());
        }else if (SaveModel.deptLevel.equals(low_level)) {
            sql.append("select dept as dept,deptName as deptName,"+selectKeys.toString()+"sum(result1) as result1,sum(result2) as result2 from " + esIndex + " where ");
            groupBy.append("  group by dept,deptName").append(groupStr.toString());
        } else if (SaveModel.OrgLevel.equals(low_level)) {
            sql.append("select hospital as hospital,hospitalName as hospitalName,"+selectKeys.toString()+"sum(result1) as result1,sum(result2) as result2 from " + esIndex + " where ");
            groupBy.append("  group by hospital,hospitalName").append(groupStr.toString());
        } else if (SaveModel.townLevel.equals(low_level)) {
            sql.append("select town as town,townName as townName,"+selectKeys.toString()+"sum(result1) as result1,sum(result2) as result2 from " + esIndex + " where ");
            groupBy.append("  group by town,townName").append(groupStr.toString());
        } else if (SaveModel.cityLevel.equals(low_level)) {
            sql.append("select city as city,cityName as cityName,"+selectKeys.toString()+"sum(result1) as result1,sum(result2) as result2 from " + esIndex + " where ");
            groupBy.append("  group by city,cityName").append(groupStr.toString());
        }
        if (StringUtils.isNotEmpty(area)) {
            if (SaveModel.doctorLevel.equals(level + "")) {
                sql.append(" doctor='" + area + "'");
            }else if (SaveModel.deptLevel.equals(level + "")) {
                sql.append(" dept='" + area + "'");
            } else if (SaveModel.OrgLevel.equals(level + "")) {
                sql.append(" hospital='" + area + "'");
            } else if (SaveModel.townLevel.equals(level + "")) {
                sql.append(" town='" + area + "'");
            } else if (SaveModel.cityLevel.equals(level + "")) {
                sql.append(" city='" + area + "'");
            }
            sql.append(" and ");
        }
        sql.append(" quotaCode in(" + index + ")  ");
        sql.append(" and timeLevel='" + timeLevel + "'  ");
        sql.append(" and areaLevel='"+areaLevel+"'");
        if (StringUtils.isNotEmpty(startDate)) {
            sql.append(" and quotaDate>='" + startDate + "'");
        }
        if (StringUtils.isNotEmpty(endDate)) {
            sql.append(" and quotaDate<='" + endDate + "'");
        }
        i=1;
        for (String slaveKeyTmp:slaveKeys){
            if (StringUtils.isNotBlank(slaveKeyTmp)){
                String[] str = slaveKeyTmp.split(",");
                StringBuffer buffer = new StringBuffer();
                for (int j=0;j<str.length;j++){
                    buffer.append("'"+str[j]+"',");
                }
                buffer.deleteCharAt(buffer.length()-1);
                sql.append(" and slaveKey").append(i).append(" in (" + buffer + ")");
            }
            i++;
        }
        //根据时间维度分组
        if (StringUtils.isNotEmpty(interval)) {
            if (SaveModel.interval_month.equals(interval)) {
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='month','time_zone'='+08:00','alias'='quotaDate') ");
            } else if (SaveModel.interval_week.equals(interval)) {
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='week','time_zone'='+08:00','alias'='quotaDate') ");
            } else if (SaveModel.interval_day.equals(interval)) {
                groupBy.append(" ,date_histogram(field='quotaDate','interval'='1d','time_zone'='+08:00','alias'='quotaDate') ");
            }
        }
        sql.append(groupBy);
        logger.info("sql :" + sql.toString());
        return excute(sql.toString(), SaveModel.class, "", "");
    }
    /**
     * 二级指标查询
     */
@ -1770,6 +1908,14 @@ public class ElasticsearchUtil {
        return (SaveModel) list.get(0);
    }
    /**
     * 多维度指标查询 可控制key与group
     */
    public  SaveModel findOneDateQuotaLevels(String startDate, String endDate, String area, int level, String index, String timelevel,String groupKey,String ...slaveKeys) throws Exception {
        List list = findDateQuotaLevels(startDate, endDate, area, level, index, timelevel,null, null,groupKey,slaveKeys);
        return (SaveModel) list.get(0);
    }
    /**
     * 1级维度
     * 查询某一天某一个所有1级维度下的指标 例如某个机构下的所有维度的患者列表
@ -1786,6 +1932,14 @@ public class ElasticsearchUtil {
        return list;
    }
    /**
     * 多维度指标查询 可控制key与group
     */
    public  List<SaveModel> findDateQuotaLevelList(String startDate, String endDate, String area, int level, String index, String timelevel,String groupKey,String ...slaveKeys) throws Exception {
        List list = findDateQuotaLevels(startDate, endDate, area, level, index, timelevel,null, null,groupKey,slaveKeys);
        return list;
    }
    /**
     * 1级维度
     * 查询某一天某一个所有1级维度下的指标 例如某个机构下的所有维度的患者列表

+ 31 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/statistics/StatisticsEndpoint.java

@ -269,7 +269,7 @@ public class StatisticsEndpoint extends EnvelopRestEndpoint {
    }
    @GetMapping(value = "getSecurityOrderList")
    @ApiOperation("管理端安防监护--使用管理")
    @ApiOperation("管理端安防监护--安防动态")
    public PageEnvelop getSecurityOrderList(@RequestParam(required = false) String area,
                                            @RequestParam(required = false) String status,
                                            @RequestParam(required = false) String svrDesc,
@ -283,4 +283,34 @@ public class StatisticsEndpoint extends EnvelopRestEndpoint {
        }
    }
    @GetMapping(value = "statisticsSecurityWarnInfo")
    @ApiOperation(value = "管理端安防监护--预警分析")
    public ObjEnvelop statisticsOrderServer(
            @RequestParam(required = true) String endDate,
            @RequestParam(required = true) String area,
            @RequestParam(required = true) Integer level,
            @RequestParam(required = true) String index) {
        try {
            JSONObject result = statisticsService.statisticsSecurityWarnInfo(endDate,area,level,index);
            return success(result);
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "statisticsSecurityTrend")
    @ApiOperation(value = "管理端安防监护--安防工单累计趋势折线")
    public ListEnvelop statisticsSecurityTrend(
            @RequestParam(required = true) String startDate,
            @RequestParam(required = true) String endDate,
            @RequestParam(required = true) String area,
            @RequestParam(required = true) Integer level,
            @RequestParam(required = true) String index) {
        try {
            return ListEnvelop.getSuccess("查询成功",statisticsService.statisticsSecurityTrend(startDate,endDate,area,level,index)) ;
        } catch (Exception e) {
            return failedListEnvelopException2(e);
        }
    }
}

+ 96 - 11
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/statistics/StatisticsService.java

@ -39,6 +39,7 @@ import org.springframework.stereotype.Service;
import javax.persistence.criteria.CriteriaBuilder;
import java.awt.print.Pageable;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@ -692,6 +693,30 @@ public class StatisticsService {
            //能力评估 从签约时服务标签取
            res.put("levelList",capacityAssessment(null,null,null));
            //居民健康标签
            List<SaveModel> list = elasticsearchUtil.findDateAllQuotaLevel1(endDate,endDate,area,level,"47",SaveModel.timeLevel_DDL,null,null,"2");
            JSONArray labelArr = new JSONArray();
            Long total = 0l;
            for(int i=0;i<list.size();i++){
                SaveModel saveModel = list.get(i);
                JSONObject json = new JSONObject();
                if (saveModel.getResult2().longValue()==0&&StringUtils.isBlank(saveModel.getSlaveKey1())){
                    continue;
                }
                if ("0".equals(saveModel.getSlaveKey1())){//去除60岁以下老人
                    continue;
                }
                json.put("num",saveModel.getResult2().longValue());
                json.put("code",saveModel.getSlaveKey1());
                json.put("name",saveModel.getSlaveKey1Name());
                total+=saveModel.getResult2().longValue();
                labelArr.add(json);
            }
            JSONObject arrTmp = new JSONObject();
            arrTmp.put("patientLabelTotal",total);
            arrTmp.put("patientLabelList",labelArr);
            res.put("patientLabelStatistic",arrTmp);
            //年龄分布 50
//            ageList = elasticsearchUtil.findDateAllQuotaLevel1(endDate, endDate, area, level, "50", SaveModel.timeLevel_DDL,null,null,"2");
            List<SaveModel>  ageList = elasticsearchUtil.findDateAllQuotaLevel1(endDate,endDate,area,level,"50",SaveModel.timeLevel_DDL,null,null,"2");
@ -1038,18 +1063,17 @@ public class StatisticsService {
            SaveModel saveModelAdd = elasticsearchUtil.findOneDateQuotaLevel0(start, endDate, area, level, "46", SaveModel.timeLevel_ZL,areaLevel);
            res.put("index_"+46+"_add",saveModelAdd.getResult2().longValue());
        }
        String sql = "SELECT dict_code code from wlyy_hospital_sys_dict WHERE dict_name = 'security_server_dict'";//46指标一级纬度
        List<String> dictCodes = jdbcTemplate.queryForList(sql,String.class);
        JSONArray addDetail = new JSONArray();
        for (String dictCode:dictCodes){
            if(StringUtils.isNotBlank(type)){
                //周/月 增量
                String start = statisticsUtilService.calStart(endDate,type);
                SaveModel saveModelAdd = elasticsearchUtil.findOneDateQuotaLevel1(start,endDate, area,level, "46", SaveModel.timeLevel_ZL, dictCode,areaLevel);
        if(StringUtils.isNotBlank(type)){
            //周/月 增量
            String start = statisticsUtilService.calStart(endDate,type);
            List<SaveModel> saveModelAdds = elasticsearchUtil.findDateQuotaLevelList(start,endDate, area,level, "46", SaveModel.timeLevel_ZL, "3",null,null,null);
            for (SaveModel saveModelTmp:saveModelAdds){
                JSONObject json = new JSONObject();
                json.put("num",saveModelAdd.getResult2().longValue());
                json.put("code",saveModelAdd.getSlaveKey1());
                json.put("name",saveModelAdd.getSlaveKey1Name());
                json.put("num",saveModelTmp.getResult2().longValue());
                json.put("code",saveModelTmp.getSlaveKey3());
                json.put("name",saveModelTmp.getSlaveKey3Name());
                addDetail.add(json);
            }
        }
@ -1109,7 +1133,7 @@ public class StatisticsService {
        result.put("deviceAll",total);//物联率分母总数 设备总数(包括库存)
        result.put("lost",lost);//失联数
        result.put("notLost",use);//物联数  被人绑定了就是物联
        result.put("notLost",use);//失联数分母总数  发出的设备数
        result.put("deviceAll2",use);//失联数分母总数  发出的设备数
        result.put("iotRange",commonUtil.getRange(use,total));
        result.put("LostRange",commonUtil.getRange(lost,use));
        return result;
@ -1189,6 +1213,67 @@ public class StatisticsService {
        return PageEnvelop.getSuccessListWithPage("success",result,page,pageSize,count);
    }
    public JSONObject statisticsSecurityWarnInfo(String endDate,String area,Integer level,String index) throws Exception {
        JSONObject res = new JSONObject();
        String[] indexes = index.split(",");
        for(String ind:indexes){
            String areaLevel="6";
            String sql = " select area_level from wlyy_job_config_new where id='"+ind+"' ";
            List<String> areaLevels = jdbcTemplate.queryForList(sql,String.class);
            if (areaLevels.size()>0){
                areaLevel = areaLevels.get(0);
            }
            JSONArray jsonArray = new JSONArray();
            long total = 0l;
            //总量
            List<SaveModel> list = elasticsearchUtil.findDateAllQuotaLevel1(endDate,endDate,area,level,ind,SaveModel.timeLevel_DDL,null,null,areaLevel);
            for(int i=0;i<list.size();i++){
                SaveModel saveModel = list.get(i);
                JSONObject json = new JSONObject();
                if (saveModel.getResult2().longValue()==0&&StringUtils.isBlank(saveModel.getSlaveKey1())){
                    continue;
                }
                if ("0".equals(saveModel.getSlaveKey1())){
                    continue;
                }
                json.put("num",saveModel.getResult2().longValue());
                json.put("code",saveModel.getSlaveKey1());
                json.put("name",saveModel.getSlaveKey1Name());
                total+=saveModel.getResult2().longValue();
                jsonArray.add(json);
            }
            res.put("index_"+ind+"_total",total);
            res.put("index_"+ind,jsonArray);
            if("46".equals(ind)){
                //安防响应 误报警+完成
                SaveModel saveModel = elasticsearchUtil.findOneDateQuotaLevel2NoSlaveKey1(endDate,area,level,"46","2","-2",areaLevel);
                long finish = saveModel.getResult2().longValue();
                saveModel = elasticsearchUtil.findOneDateQuotaLevel2NoSlaveKey1(endDate,area,level,"46","2","0",areaLevel);
                finish += saveModel.getResult2().longValue();
                res.put("index_"+46+"_finish",finish);
                //安防误报警
                saveModel = elasticsearchUtil.findOneDateQuotaLevel2NoSlaveKey1(endDate,area,level,"46","2","-2",areaLevel);
                res.put("index_"+46+"_error",saveModel.getResult2().longValue());
            }
        }
        //误报警率分析
        return res;
    }
    public JSONArray statisticsSecurityTrend(String startDate,String endDate,String area,Integer level,String index) throws Exception {
        //安防总数
        List<SaveModel> saveModels = elasticsearchUtil.findDateQuotaLevel0(startDate,endDate,area,level,index,SaveModel.timeLevel_ZL,SaveModel.interval_day,null);
        JSONArray jsonArray = new JSONArray();
        for (SaveModel tmp:saveModels){
            JSONObject jsonTmp = new JSONObject();
            jsonTmp.put("count",tmp.getResult2().longValue());
            jsonTmp.put("timeDay",DateUtil.dateToStr(tmp.getQuotaDate(),DateUtil.YYYY_MM_DD));
            jsonTmp.put("time",DateUtil.dateToStr(tmp.getQuotaDate(),DateUtil.yyyy_MM_dd_HH_mm_ss));
            jsonArray.add(jsonTmp);
        }
        return jsonArray;
    }
    /**
     * 计算开始时间
     * @param endDate