Browse Source

新增es统计--线上续签和线上缴费情况

zd_123 7 years ago
parent
commit
a4c17c3b4c

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

@ -2711,10 +2711,10 @@ public class StatisticsESService {
        if (StringUtils.isEmpty(lowCode)) {
            //续签量
            renewSaveModels = elasticsearchUtil.findDateQuotaLevel0(timeKey, timeKey, area, level, index, "2", "", low_level);
            renewSaveModels = elasticsearchUtil.findDateQuotaLevel0(timeKey, timeKey, area, level, index, SaveModel.timeLevel_DDL, "", low_level);
        } else {
            //续签量
            renewSaveModels = elasticsearchUtil.findDateQuotaLevel1(timeKey,timeKey, area, level, index, "2", lowCode, "", low_level);
            renewSaveModels = elasticsearchUtil.findDateQuotaLevel1(timeKey,timeKey, area, level, index, SaveModel.timeLevel_DDL, lowCode, "", low_level);
        }
@ -2740,9 +2740,9 @@ public class StatisticsESService {
            //查询去年的签约转map
            List<SaveModel> yearsList = new ArrayList();
            if (StringUtils.isBlank(lowCode)) {
                yearsList = elasticsearchUtil.findDateQuotaLevel0(lastDate, lastDate, area, level, "1", "2", "", low_level);
                yearsList = elasticsearchUtil.findDateQuotaLevel0(lastDate, lastDate, area, level, "1", SaveModel.timeLevel_DDL, "", low_level);
            } else {
                yearsList = elasticsearchUtil.findDateQuotaLevel1(lastDate, lastDate, area, level, "17", "2", lowCode, "", low_level);
                yearsList = elasticsearchUtil.findDateQuotaLevel1(lastDate, lastDate, area, level, "17", SaveModel.timeLevel_DDL, lowCode, "", low_level);
            }
            Map<String, SaveModel> resultMap = new HashMap<>();
@ -4272,21 +4272,27 @@ public class StatisticsESService {
            totalModelList = (List<SaveModel>) elasticsearchUtil.findListDateQuotaLevel0(date, area, level, "1", SaveModel.timeLevel_DDL, low_level);
        }
        Map<String, Object> signOnlineMap = new HashMap<String, Object>();
        if (esModelList != null && esModelList.size() > 0) {
            for (SaveModel one : esModelList) {
                Map<String, Object> maps = new HashMap<String, Object>();
                maps.put("amount", one.getResult2().intValue());
                //signOnlineMap.put("amount", one.getResult2().intValue());
                /*if (low_level.equals("3") && one.getTown() != null) {
                    signOnlineMap.put("code", one.getTown());
                    signOnlineMap.put("name", one.getTownName());
                } else if (low_level.equals("4") && one.getHospital() != null) {
                    signOnlineMap.put("code", one.getHospital());
                    signOnlineMap.put("name", one.getHospitalName());
                } else if (low_level.equals("5") && one.getTeam() != null) {
                    signOnlineMap.put("code", one.getTeam());
                    signOnlineMap.put("name", one.getTeamName());
                }*/
                if (low_level.equals("3") && one.getTown() != null) {
                    maps.put("code", one.getTown());
                    maps.put("name", one.getTownName());
                    signOnlineMap.put(one.getTown(), one.getResult2().intValue());
                } else if (low_level.equals("4") && one.getHospital() != null) {
                    maps.put("code", one.getHospital());
                    maps.put("name", one.getHospitalName());
                    signOnlineMap.put(one.getHospital(), one.getResult2().intValue());
                } else if (low_level.equals("5") && one.getTeam() != null) {
                    maps.put("code", one.getTeam());
                    maps.put("name", one.getTeamName());
                    signOnlineMap.put(one.getTeam(), one.getResult2().intValue());
                }
                resultList.add(maps);
            }
        }
@ -4294,39 +4300,39 @@ public class StatisticsESService {
        if (resultList == null || resultList.size() < 1) {
            resultList = getLowLevelMapKey(level, low_level, area);
        }
        if (resultList != null) {
            DecimalFormat df = new DecimalFormat("0.0000");
            for (int i = 0; i < resultList.size(); i++) {
                Map<String, Object> map = resultList.get(i);
                long signOnline =Long.valueOf(String.valueOf(map.get("amount")));
                map.put("amount", map.get("amount") != null ? signOnline : 0L);
                for (SaveModel totalOne : totalModelList) {
                    if (low_level.equals("3") && String.valueOf(map.get("code")).equals(totalOne.getTown())) {
                        map.put("signAmount",totalOne.getResult2().longValue());
                        map.put("rate",df.format(signOnline*1.0/totalOne.getResult2().longValue()*1000));
                    } else if (low_level.equals("4") &&  String.valueOf(map.get("code")).equals(totalOne.getHospital())) {
                        map.put("signAmount",totalOne.getResult2().longValue());
                        map.put("rate",df.format(signOnline*1.0/totalOne.getResult2().longValue()*1000));
                    } else if (low_level.equals("5") && totalOne.getTeam() != null) {
                        map.put("signAmount",totalOne.getResult2().longValue());
                        map.put("rate",df.format(signOnline*1.0/totalOne.getResult2().longValue()*1000));
                    }
        if (resultList != null && resultList.size()>0) {
            //查询今年的线上续签转map
            Map<String, SaveModel> resultMap = new HashMap<>();
            totalModelList.stream().forEach(one->{
                if ("5".equals(low_level)) {
                    resultMap.put(one.getTeam(), one);
                } else if ("4".equals(low_level)) {
                    resultMap.put(one.getHospital(), one);
                } else if ("3".equals(low_level)) {
                    resultMap.put(one.getTown(), one);
                }
            });
                /*if (!low_level.equals("5")) {
                    String code = String.valueOf(map.get("code"));
                    PopulationBase peopleNum = getPopulationBase(code, year);
                    if (peopleNum != null) {
                        map.put("rate", df.format(((long) map.get("amount") * 1.0000) / peopleNum.getNum() * 100));
                        map.put("taskRate", df.format(((long) map.get("amount") * 1.0000) / peopleNum.getTaskNum() * 100));
                        map.put("targetRate", df.format(peopleNum.getTaskNum() * 1.0000 / peopleNum.getNum() * 100));
                        map.put("rateString", map.get("amount") + "/" + peopleNum.getNum());
                        map.put("taskRateString", map.get("amount") + "/" + peopleNum.getTaskNum());
                        map.put("targetRateString", peopleNum.getTaskNum() + "/" + peopleNum.getNum());
                        map.put("num", peopleNum.getNum());
                        map.put("task", peopleNum.getTaskNum());
            for (Map<String, Object> reMap : resultList) {
                reMap.put("amount", reMap.get("amount") != null ? Long.valueOf(reMap.get("amount").toString()) : 0L);
                Integer signNun = 0;
                Integer signOnlineNum = 0;
                //获取签约量
                if (resultMap != null && resultMap.size() > 0) {
                    SaveModel one = resultMap.get(reMap.get("code").toString());
                    if (one != null) {
                        signNun = one.getResult2().intValue();
                    }
                }*/
                }
                if (signOnlineMap != null && signOnlineMap.size() > 0) {
                    signOnlineNum = (Integer) signOnlineMap.get(String.valueOf(reMap.get("code")));
                    if (signOnlineNum == null) {
                        signOnlineNum = 0;
                    }
                }
                reMap.put("signNun", signNun);
                reMap.put("signOnlineNum", signOnlineNum);
                reMap.put("rate", getRange(signOnlineNum, signNun, 2));//线上签约率是 线上签约量/签约量
            }
            if ((level == 2 && "5".equals(lowLevel)) || (level == 4) || (level == 3 && "5".equals(lowLevel))) {
@ -4335,8 +4341,8 @@ public class StatisticsESService {
            Collections.sort(resultList, new Comparator<Map<String, Object>>() {
                public int compare(Map<String, Object> o1, Map<String, Object> o2) {
                    long map1value = (long) o1.get("amount");
                    long map2value = (long) o2.get("amount");
                    long map1value = (long) o1.get("signOnlineNum");
                    long map2value = (long) o2.get("signOnlineNum");
                    if (map1value - map2value > 0) {
                        return sort == 1 ? -1 : 1;
@ -4353,6 +4359,16 @@ public class StatisticsESService {
        }
    }
    /**
     * 线上续签率
     *
     * @param index
     * @param level
     * @param area
     * @param year
     * @param lowCode
     * @return
     */
    public JSONObject getRenewPercentOnline(String index, Integer level, String area, String year, String lowCode) {
        JSONObject jo = new JSONObject();
        String renewOnlineIndex = "";//线上续签index
@ -4441,4 +4457,271 @@ public class StatisticsESService {
        }
        return jo;
    }
    /**
     * 线上续签各等级地区的列表
     * @param area
     * @param level
     * @param index
     * @param sort
     * @param lowLevel
     * @param year
     * @param lowCode
     * @return
     * @throws Exception
     */
    public JSONArray getLevelTwoLowLevelTotalRenewOnline(String area, int level, String index, int sort, String lowLevel, String year, String lowCode) throws Exception {
        String timeKey = elasticsearchUtil.getQuotaTime();
        String low_level = String.valueOf(StringUtils.isEmpty(lowLevel) ? (level + 1) : lowLevel);
        String renewIndex = "";//续签指标
        if (level==3){//区
            if (StringUtils.isNotBlank(lowCode)){
                renewIndex="44";
            }else{
                renewIndex="54";
            }
        }
        if (level==4){//社区
            if (StringUtils.isNotBlank(lowCode)){
                renewIndex="43";
            }else{
                renewIndex="53";
            }
        }
        if (level==5){//团队
            if (StringUtils.isNotBlank(lowCode)){
                renewIndex="42";
            }else{
                renewIndex="52";
            }
        }
        List<Map<String, Object>> resultList = new ArrayList<>();//续签量
        Map<String, Integer> renewMap = new HashMap<>(); //续签的的列表转map
        List<SaveModel> renewSaveModels = new ArrayList<SaveModel>();
        List<SaveModel> renewOnlineList = new ArrayList<SaveModel>();
        if (StringUtils.isEmpty(lowCode)) {
            //续签量
            renewSaveModels = elasticsearchUtil.findDateQuotaLevel0(timeKey, timeKey, area, level, renewIndex, SaveModel.timeLevel_DDL, "", low_level);
            //线上续签量
            renewOnlineList = elasticsearchUtil.findDateQuotaLevel0(timeKey, timeKey, area, level, index, SaveModel.timeLevel_DDL, "", low_level);
        } else {
            //续签量
            renewSaveModels = elasticsearchUtil.findDateQuotaLevel1(timeKey,timeKey, area, level, renewIndex, SaveModel.timeLevel_DDL, lowCode, "", low_level);
            //线上续签量
            renewOnlineList = elasticsearchUtil.findDateQuotaLevel1(timeKey, timeKey, area, level, index, SaveModel.timeLevel_DDL, lowCode, "", low_level);
        }
        if (renewSaveModels != null && renewSaveModels.size() > 0) {
            for (SaveModel saveModel : renewSaveModels) {
                if ("3".equals(low_level) && saveModel.getTown() != null) {
                    renewMap.put(saveModel.getTown(), saveModel.getResult2().intValue());
                } else if ("4".equals(low_level) && saveModel.getHospital() != null) {
                    renewMap.put(saveModel.getHospital(), saveModel.getResult2().intValue());
                } else if ("5".equals(low_level) && saveModel.getTeam() != null) {
                    renewMap.put(saveModel.getTeam(), saveModel.getResult2().intValue());
                } else {
                    continue;
                }
            }
        }
        //自建结果集
        resultList = getLowLevelMapKey(level, low_level, area);
        if (resultList != null && resultList.size() > 0) {
            //查询今年的线上续签转map
            Map<String, SaveModel> resultMap = new HashMap<>();
            renewOnlineList.stream().forEach(one -> {
                if ("5".equals(low_level)) {
                    resultMap.put(one.getTeam(), one);
                } else if ("4".equals(low_level)) {
                    resultMap.put(one.getHospital(), one);
                } else if ("3".equals(low_level)) {
                    resultMap.put(one.getTown(), one);
                }
            });
            for (Map<String, Object> reMap : resultList) {
                reMap.put("amount", reMap.get("amount") != null ? Long.valueOf(reMap.get("amount").toString()) : 0L);
                int renewOnlineNum = 0;
                Integer renewNum = 0;
                //获取线上续签数量
                if (resultMap != null && resultMap.size() > 0) {
                    SaveModel one = resultMap.get(reMap.get("code").toString());
                    if (one != null) {
                        renewOnlineNum = one.getResult2().intValue();
                    }
                }
                if (renewMap != null && renewMap.size() > 0) {
                    renewNum = renewMap.get(reMap.get("code").toString());
                    if (renewNum == null) {
                        renewNum = 0;
                    }
                }
                reMap.put("renewNum", renewNum);
                reMap.put("renewOnlineNum", renewOnlineNum);
                reMap.put("rate", getRange(renewOnlineNum, renewNum, 2));//线上续签率是 线上续签量/续签量
            }
            if ((level == 2 && "5".equals(lowLevel)) || (level == 4) || (level == 3 && "5".equals(lowLevel))) {
                translateTeamLeaderName(resultList);
            }
            //对结果进行排序
            Collections.sort(resultList, new Comparator<Map<String, Object>>() {
                public int compare(Map<String, Object> o1, Map<String, Object> o2) {
                    int map1value = (int) o1.get("renewOnlineNum");
                    int map2value = (int) o2.get("renewOnlineNum");
                    if (map1value - map2value > 0) {
                        return sort == 1 ? -1 : 1;
                    } else if (map1value - map2value < 0) {
                        return sort == 1 ? 1 : -1;
                    } else {
                        return 0;
                    }
                }
            });
            return new JSONArray(resultList);
        } else {
            return new JSONArray();
        }
    }
    /**
     * 居民分析--线上和线下缴费
     * @param level
     * @param area
     * @param year
     * @return
     */
    public JSONObject getSignPayOnline(Integer level, String area, String year) {
        JSONObject jo = new JSONObject();
        String timeKey ="";
        try{
            if (StringUtils.isNotEmpty(year)) {
                if (Constant.getNowYear().equals(year)) {
                    timeKey = elasticsearchUtil.getQuotaTime();
                } else {
                    Integer coutYear = Integer.parseInt(year);
                    timeKey = coutYear + 1 + "-06-30";
                }
            }
            //获取已缴费的总人数
            SaveModel signSaveModel = elasticsearchUtil.findOneDateQuotaLevel0(timeKey,area,level,"1",SaveModel.timeLevel_DDL);
            //获取线上缴费的人数
            SaveModel signPayOnlineSaveModel = elasticsearchUtil.findOneDateQuotaLevel0(timeKey,area,level,"82",SaveModel.timeLevel_DDL);
            int signNum = signSaveModel.getResult2().intValue();
            int signPayOnlineNum = signPayOnlineSaveModel.getResult2().intValue();
            //线下缴费=已缴费的总人数-线上缴费
            int signPayUnderNum = signNum-signPayOnlineNum;
            jo.put("signPayOnlineNum", signPayOnlineNum);//线上缴费数量
            jo.put("signPayUnderNum", signPayUnderNum);//线下缴费数量
            jo.put("signPayOnlineRate", getRange(signPayOnlineNum, signNum, 2));//线上缴费率  50.00%
            jo.put("signPayUnderRate", getRange(signPayUnderNum, signNum, 2));//线下缴费率  50.00%
        } catch (Exception e) {
            e.getMessage();
            jo.put("status", "0");
            jo.put("error", "查询失败" + e.getMessage());
            return jo;
        }
        return jo;
    }
    public JSONArray getLowLevelSignPayOnline(String area, int level, String index, int sort, String lowLevel, String year) throws Exception {
        String timeKey = "";
        if (StringUtils.isNotEmpty(year)) {
            if (Constant.getNowYear().equals(year)) {
                timeKey = elasticsearchUtil.getQuotaTime();
            } else {
                Integer coutYear = Integer.parseInt(year);
                timeKey = coutYear + 1 + "-06-30";
            }
        }
        String low_level = String.valueOf(StringUtils.isEmpty(lowLevel) ? (level + 1) : lowLevel);
        List<Map<String, Object>> resultList = new ArrayList<>();
        Map<String, Integer> onlineMap = new HashMap<>();
        List<SaveModel> signList = new ArrayList<SaveModel>();
        List<SaveModel> signPayOnlineList = new ArrayList<SaveModel>();
        //总缴费人数
        signList = elasticsearchUtil.findDateQuotaLevel0(timeKey, timeKey, area, level, "1", SaveModel.timeLevel_DDL, "", low_level);
        //线上缴费人数
        signPayOnlineList = elasticsearchUtil.findDateQuotaLevel0(timeKey, timeKey, area, level, index, SaveModel.timeLevel_DDL, "", low_level);
        if (signPayOnlineList != null && signPayOnlineList.size() > 0) {
            for (SaveModel saveModel : signPayOnlineList) {
                if ("3".equals(low_level) && saveModel.getTown() != null) {
                    onlineMap.put(saveModel.getTown(), saveModel.getResult2().intValue());
                } else if ("4".equals(low_level) && saveModel.getHospital() != null) {
                    onlineMap.put(saveModel.getHospital(), saveModel.getResult2().intValue());
                } else if ("5".equals(low_level) && saveModel.getTeam() != null) {
                    onlineMap.put(saveModel.getTeam(), saveModel.getResult2().intValue());
                } else {
                    continue;
                }
            }
        }
        //自建结果集
        resultList = getLowLevelMapKey(level, low_level, area);
        if (resultList != null && resultList.size() > 0) {
            //查询今年的线上续签转map
            Map<String, SaveModel> resultMap = new HashMap<>();
            signList.stream().forEach(one -> {
                if ("5".equals(low_level)) {
                    resultMap.put(one.getTeam(), one);
                } else if ("4".equals(low_level)) {
                    resultMap.put(one.getHospital(), one);
                } else if ("3".equals(low_level)) {
                    resultMap.put(one.getTown(), one);
                }
            });
            for (Map<String, Object> reMap : resultList) {
                //reMap.put("amount", reMap.get("amount") != null ? Long.valueOf(reMap.get("amount").toString()) : 0L);
                int signNum = 0;
                Integer signPayOnlineNum = 0;
                //获取总缴费人数
                if (resultMap != null && resultMap.size() > 0) {
                    SaveModel one = resultMap.get(String.valueOf(reMap.get("code")));
                    if (one != null) {
                        signNum = one.getResult2().intValue();
                    }
                }
                //获取线上缴费人数
                if (onlineMap != null && onlineMap.size() > 0) {
                    signPayOnlineNum = onlineMap.get(String.valueOf(reMap.get("code")));
                    if (signPayOnlineNum == null) {
                        signPayOnlineNum = 0;
                    }
                }
                reMap.put("signNum", signNum);
                reMap.put("signPayOnlineNum", signPayOnlineNum);
            }
            if ((level == 2 && "5".equals(lowLevel)) || (level == 4) || (level == 3 && "5".equals(lowLevel))) {
                translateTeamLeaderName(resultList);
            }
            //对结果进行排序
            Collections.sort(resultList, new Comparator<Map<String, Object>>() {
                public int compare(Map<String, Object> o1, Map<String, Object> o2) {
                    int map1value = (int) o1.get("signPayOnlineNum");
                    int map2value = (int) o2.get("signPayOnlineNum");
                    if (map1value - map2value > 0) {
                        return sort == 1 ? -1 : 1;
                    } else if (map1value - map2value < 0) {
                        return sort == 1 ? 1 : -1;
                    } else {
                        return 0;
                    }
                }
            });
            return new JSONArray(resultList);
        } else {
            return new JSONArray();
        }
    }
}

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

@ -1953,5 +1953,116 @@ public class EsStatisticsController extends BaseController {
            return error(-1, "查询失败");
        }
    }
    /**
     * 今年的线上续签量,续签量和线上续签率 列表
     *
     * @param index    75,76,77 (79,80,81 服务类型维度)
     * @param area     每个层级大的code  例如湖里区 350206  xx社区 3502060100
     * @param level    level1_type等级 1:团队 2社区机构 3区级 4市级
     * @param sort     0:升序 1:降序
     * @param lowLevel 只有可能是 1,2,3,不传默认是level-1;
     * @param year     不管根据当前时间找年度
     * @param lowCode  如果是服务类型维度code(老年人3,高血压1,糖尿病2)
     * @return
     */
    @RequestMapping("/lowlevel_all_sign_renew_online")
    @ResponseBody
    public String lowlevel_all_sign_renew_online(
            @RequestParam(required = true) String index,
            @RequestParam(required = true) String area,
            @RequestParam(required = true) int level,
            @RequestParam(required = true) int sort,
            @RequestParam(required = false) String lowLevel,
            @RequestParam(required = false) String year,
            @RequestParam(required = false) String lowCode) {
        try {
            JSONObject result = new JSONObject();
            //如果年度是空,按当前时间计算是年度是属于那个年度
            if (org.springframework.util.StringUtils.isEmpty(year)) {
                year = Constant.getNowYear();
            }
            //lowLevel不传默认是 level-1
            if (org.springframework.util.StringUtils.isEmpty(lowLevel)) {
                lowLevel = level - 1 + "";
            }
            result.put("index_" + index, statisticsESService.getLevelTwoLowLevelTotalRenewOnline(area,elasticsearchUtil.changeLevel(level), index, sort, String.valueOf(elasticsearchUtil.changeLevel(Integer.valueOf(lowLevel))), year, lowCode));
            return write(200, "查询成功", "data", result);
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "查询失败");
        }
    }
    /**
     *获取线上和线下缴费的比例
     * @author zhangdan 2017-11-29
     * @param area
     * @param level
     * @param year
     * @return
     */
    @ApiOperation("获取线上缴费和线下缴费的比例")
    @RequestMapping("/signPayOnline")
    @ResponseBody
    public String signPayOnline(
            @RequestParam(required = true)String area,
            @RequestParam(required = true)int level,
            @RequestParam(required = true)String year){
        try{
            JSONObject result = new JSONObject();
            //如果年度是空,按当前时间计算是年度是属于那个年度
            if (org.springframework.util.StringUtils.isEmpty(year)) {
                year = Constant.getNowYear();
            }
            result.put("data" , statisticsESService.getSignPayOnline(elasticsearchUtil.changeLevel(level),area,year));
            return write(200, "查询成功", "data", result);
        }catch (Exception e) {
            e.printStackTrace();
            return error(-1, "查询失败");
        }
    }
    /**
     * 获取线上缴费的各个读取的列表
     * @author zhangdan 2017-11-29
     * @param index
     * @param area
     * @param level
     * @param sort
     * @param lowLevel
     * @param year
     * @return
     */
    @ApiOperation("获取线上缴费的各个地区的列表")
    @RequestMapping("/lowlevel_all_sign_pay_online")
    @ResponseBody
    public String lowlevel_all_sign_pay_online(
            @RequestParam(required = true) String index,
            @RequestParam(required = true) String area,
            @RequestParam(required = true) int level,
            @RequestParam(required = true) int sort,
            @RequestParam(required = false) String lowLevel,
            @RequestParam(required = false) String year){
        try {
            JSONObject result = new JSONObject();
            //如果年度是空,按当前时间计算是年度是属于那个年度
            if (org.springframework.util.StringUtils.isEmpty(year)) {
                year = Constant.getNowYear();
            }
            //lowLevel不传默认是 level-1
            if (StringUtils.isEmpty(lowLevel)) {
                lowLevel = level - 1 + "";
            }
            result.put("index_" + index, statisticsESService.getLowLevelSignPayOnline(area,elasticsearchUtil.changeLevel(level), index, sort, String.valueOf(elasticsearchUtil.changeLevel(Integer.valueOf(lowLevel))), year));
            return write(200, "查询成功", "data", result);
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "查询失败");
        }
    }
    /*==================================版本1.4.1统计优化结束 end=====================================*/
}