Просмотр исходного кода

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

yeshijie 7 лет назад
Родитель
Сommit
87c88cd8b9

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

@ -586,9 +586,9 @@ public class StatisticsESService {
     * @param level   级别
     * @return
     */
    public JSONObject getSignRate(String endDate, String area, int level, String year) throws Exception {
    public JSONObject getSignRate(String endDate, String area, int level, String year,String index) throws Exception {
        SaveModel saveModel = elasticsearchUtil.findOneDateQuotaLevel0(endDate, area, level, "1", "2");
        SaveModel saveModel = elasticsearchUtil.findOneDateQuotaLevel0(endDate, area, level, index, SaveModel.timeLevel_DDL);
        long signAmount = saveModel.getResult2().longValue();
        PopulationBase peopleNum = getPopulationBase(area, year);
        JSONObject json = new JSONObject();
@ -686,6 +686,73 @@ public class StatisticsESService {
        return json;
    }
    /**
     * 查询截止某个日期线上签约率
     * @author zhangdan 2017-11-27
     *
     * @param endDate
     * @param area
     * @param level
     * @param year
     * @param signAmount
     * @return
     * @throws Exception
     */
    public JSONObject getSignOnlineRate(String endDate, String area, int level, String year,long signAmount) throws Exception {
        if (endDate.compareTo(dateFormat.format(new Date())) >= 0) {
            endDate = elasticsearchUtil.getQuotaTime();
        }
        SaveModel saveModel = elasticsearchUtil.findOneDateQuotaLevel0(endDate, area, level, "72", "2");
        long signOnLineAmount = saveModel.getResult2().longValue();
        DecimalFormat df = new DecimalFormat("0.0000");
        JSONObject json = new JSONObject();
        json.put("rate", (signOnLineAmount>0 ? df.format((signOnLineAmount * 1.0000) / signAmount * 100):0));
        json.put("rateString", signOnLineAmount + "/" + signAmount);
        json.put("signOnline", signOnLineAmount);
        json.put("sign", signAmount);
        return json;
    }
    public JSONObject getGroupInfoOnline(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);
        List<SaveModel> onlineList = elasticsearchUtil.findDateQuotaLevel1(endDate, endDate, area, level, "17", "2", lowCode, null, null);
        long total = 0;
        long onlineTotal = 0;
        if (list.size() > 0) {
            total = list.get(0).getResult2().longValue();
        }
        if (onlineList.size() > 0) {
            onlineTotal = onlineList.get(0).getResult2().longValue();
        }
        int num = 0;
        PopulationBase peopleNum = getPopulationBase(area, year);
        if (peopleNum != null) {
            if (lowCode.equals("3")) {
                num = peopleNum.getSixFiveNum();
            } else if (lowCode.equals("1")) {
                num = peopleNum.getGxyNum();
            } else if (lowCode.equals("2")) {
                num = peopleNum.getTnbNum();
            }
        }
        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 signOnlineRate = new JSONObject();
        signOnlineRate.put("signOnline", onlineTotal);
        signOnlineRate.put("sign", total);
        signOnlineRate.put("rate", df.format((onlineTotal * 1.0000) / total * 100));
        signOnlineRate.put("rateString", onlineTotal + "/" + total);
        json.put("signOnlineRate", signOnlineRate);
        return json;
    }
    /**
     * 获取2个数的百分比
@ -1782,7 +1849,7 @@ public class StatisticsESService {
                map.put("signRegulationNum", signRegulationNum);//调控量
                if (!low_level.equals("5")) {
                    String code = map.get("code").toString();
                    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));
@ -4173,5 +4240,205 @@ public class StatisticsESService {
        return resultJSON;
    }
    /**
     * 线上签约各个地区等级的到达量情况
     * @author zhangdan 2017-11-28
     *
     * @param date
     * @param area
     * @param level
     * @param index
     * @param sort
     * @param lowLevel
     * @param year
     * @return
     * @throws Exception
     */
    public JSONArray getLowLevelTotalOnlineTeamLeader(String date, String area, int level, String index, int sort, String lowLevel, String year,String lowCode) throws Exception {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        String low_level = String.valueOf(org.springframework.util.StringUtils.isEmpty(lowLevel) ? (level + 1) : lowLevel);
        List<Map<String, Object>> resultList = new ArrayList<>();
        if (date.compareTo(dateFormat.format(new Date())) >= 0) {
            date = elasticsearchUtil.getQuotaTime();
        }
        List<SaveModel> esModelList = null;
        List<SaveModel> totalModelList = null;
        if (StringUtils.isNotEmpty(lowCode)){
            esModelList = (List<SaveModel>) elasticsearchUtil.findListDateQuotaLevel1(date, area, level, index, SaveModel.timeLevel_DDL, low_level,lowCode);
            totalModelList = (List<SaveModel>) elasticsearchUtil.findListDateQuotaLevel1(date, area, level, "17", SaveModel.timeLevel_DDL, low_level,lowCode);
        }else{
            esModelList = (List<SaveModel>) elasticsearchUtil.findListDateQuotaLevel0(date, area, level, index, SaveModel.timeLevel_DDL, low_level);
            totalModelList = (List<SaveModel>) elasticsearchUtil.findListDateQuotaLevel0(date, area, level, "1", SaveModel.timeLevel_DDL, low_level);
        }
        if (esModelList != null && esModelList.size() > 0) {
            for (SaveModel one : esModelList) {
                Map<String, Object> maps = new HashMap<String, Object>();
                maps.put("amount", one.getResult2().intValue());
                if (low_level.equals("3") && one.getTown() != null) {
                    maps.put("code", one.getTown());
                    maps.put("name", one.getTownName());
                } else if (low_level.equals("4") && one.getHospital() != null) {
                    maps.put("code", one.getHospital());
                    maps.put("name", one.getHospitalName());
                } else if (low_level.equals("5") && one.getTeam() != null) {
                    maps.put("code", one.getTeam());
                    maps.put("name", one.getTeamName());
                }
                resultList.add(maps);
            }
        }
        // 结果为空时,自建结果集
        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 (!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());
                    }
                }*/
            }
            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) {
                    long map1value = (long) o1.get("amount");
                    long map2value = (long) o2.get("amount");
                    if (map1value - map2value > 0) {
                        return sort == 1 ? -1 : 1;
                    } else if (map1value - map2value < 0) {
                        return sort == 1 ? 1 : -1;
                    } else {
                        return 0;
                    }
                }
            });
            return new JSONArray(resultList);
        } else {
            return new JSONArray();
        }
    }
    public JSONObject getRenewPercentOnline(String index, Integer level, String area, String year, String lowCode) {
        JSONObject jo = new JSONObject();
        String renewOnlineIndex = "";//线上续签index
        String signIndex ="1";
        String renewIndex = index;//续签index.
        String date = year + "-06-30";
        try {
            if (level == 5) {
                //团队的线上续签
                if (StringUtils.isNoneBlank(lowCode)) {
                    //服务类型维度
                    renewOnlineIndex = "81";
                } else {
                    renewOnlineIndex = "77";
                }
            } else if (level == 4) {
                //社区的线上续签
                if (StringUtils.isNoneBlank(lowCode)) {
                    //服务类型维度
                    renewOnlineIndex = "80";
                } else {
                    renewOnlineIndex = "76";
                }
            } else if (level ==3){
                //区的线上续签
                if (StringUtils.isNoneBlank(lowCode)) {
                    //服务类型维度
                    renewOnlineIndex = "79";
                } else {
                    renewOnlineIndex = "75";
                }
            }else{
                //市的线上续签
                if (StringUtils.isNoneBlank(lowCode)) {
                    //服务类型维度
                    renewOnlineIndex = "78";
                } else {
                    renewOnlineIndex = "74";
                }
            }
            String timeKey = elasticsearchUtil.getQuotaTime();
            SaveModel renewSaveModel = new SaveModel();
            SaveModel signSaveModel = new SaveModel();
            SaveModel renewOnlineSaveMolde = new SaveModel();
            if (StringUtils.isNotBlank(lowCode)) {
                //续签量
                renewSaveModel = elasticsearchUtil.findOneDateQuotaLevel1(timeKey, area, level, renewIndex, SaveModel.timeLevel_DDL, lowCode);
                //线上续签量
                renewOnlineSaveMolde = elasticsearchUtil.findOneDateQuotaLevel1(timeKey,area,level,renewOnlineIndex,SaveModel.timeLevel_DDL,lowCode);
            } else {
                //续签量
                renewSaveModel = elasticsearchUtil.findOneDateQuotaLevel0(timeKey, area, level, renewIndex, SaveModel.timeLevel_DDL);
                renewOnlineSaveMolde = elasticsearchUtil.findOneDateQuotaLevel0(timeKey,area,level,renewOnlineIndex,SaveModel.timeLevel_DDL);
            }
            int renewNum = renewSaveModel.getResult2().intValue();
            int renewOnlineNum = renewOnlineSaveMolde.getResult2().intValue();
            //根据年度获取去年的签约数 签约指标是1
            if (StringUtils.isNoneBlank(lowCode)) {
                if ("3".equals(lowCode)) {
                    //老年人
                    lowCode = "3";
                } else if ("4".equals(lowCode)) {
                    //高血压
                    lowCode = "1";
                } else if ("5".equals(lowCode)) {
                    //糖尿病
                    lowCode = "2";
                }
                signIndex = "17";
                signSaveModel = elasticsearchUtil.findOneDateQuotaLevel1(date, area, level, signIndex, SaveModel.timeLevel_DDL, lowCode);
            } else {
                signSaveModel = elasticsearchUtil.findOneDateQuotaLevel0(date, area, level, signIndex, SaveModel.timeLevel_DDL);
            }
            //签约量
            int signNum = signSaveModel.getResult2().intValue();
            jo.put("yesterYearSign", signNum);//去年的签约量
            jo.put("thisYearRenew", renewNum);//今年的续签量
            jo.put("thisYearRenewOnline",renewOnlineNum);//今年的线上续签量
            jo.put("renewRange", getRange(renewNum, signNum, 2));//续签率  50.00%
            jo.put("renewRangeOnline", getRange(renewOnlineNum, renewNum, 2));//线上续签率  50.00%
        } catch (Exception e) {
            e.getMessage();
            jo.put("status", "0");
            jo.put("error", "查询失败" + e.getMessage());
            return jo;
        }
        return jo;
    }
}

+ 96 - 6
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/statistic/EsStatisticsController.java

@ -373,7 +373,6 @@ public class EsStatisticsController extends BaseController {
    /**
     * 获取签约率、签约完成率 续签率
     * t
     *
     * @param endDate 截止日期
     * @param area    区域
@ -405,10 +404,10 @@ public class EsStatisticsController extends BaseController {
//                JSONObject signRate = statisticsAllService.getSignRate(endDate, area, level,year);
//                JSONObject signTaskRate = statisticsAllService.getSignTaskRate(endDate, area, level,year);
                long sign = statisticsESService.getIndexTotal(endDate, area, level, "1", "2");
                long sign = statisticsESService.getIndexTotal(endDate, area, level, "1", SaveModel.timeLevel_DDL);
                long weiJf = statisticsESService.getWeiJiaoFei(endDate, area, level);
                JSONObject jo = statisticsESService.getRenewPercent(level + "", area, Constant.getNowYear());
                JSONObject signRate = statisticsESService.getSignRate(endDate, area, level, year);
                JSONObject signRate = statisticsESService.getSignRate(endDate, area, level, year,"1");
                JSONObject signTaskRate = statisticsESService.getSignTaskRate(endDate, area, level, year);
                result.put("sign", sign);
@ -520,7 +519,7 @@ public class EsStatisticsController extends BaseController {
     * @param date
     * @param area
     * @param level   level1_type等级 1:团队 2社区机构 3区级 4市级
     * @param index   quotoCode 18/19两率  2  3  4  5  7  9  10  13 17 20 21  28 29
     * @param index   quotoCode 18/19两率  2  3  4  5  7  9  10  13 17 20 21  28 29 72 73
     * @param sort    0:升序 1:降序
     * @param lowCode
     * @return
@ -552,7 +551,9 @@ public class EsStatisticsController extends BaseController {
                if (index.equals("17")) {
                    //sort=1&date=2017-07-13&level=4&index=17&area=350200&lowLevel=1&lowCode=3
                    result.put("index_" + index, statisticsESService.getLevelTwoLowLevelTotalTeamLeader(date, area, level, index, sort, lowLevel, lowCode, year));
                } else {
                }else if (index.equals("73")){
                    result.put("index_"+index, statisticsESService.getLowLevelTotalOnlineTeamLeader(date,area,level,index,sort,lowLevel,year,lowCode));
                } else{
                    result.put("index_" + index, statisticsESService.getLevelTwoLowLevelTotal(date, area, level, index, sort, lowLevel, lowCode, year));
                }
            } else {
@ -571,7 +572,9 @@ public class EsStatisticsController extends BaseController {
                        // sort=1&date=2017-07-13&level=4&index=13&area=350200&lowCode=
                        idx="1";
                        result.put("index_" + idx, statisticsESService.getLowLevelTotalTeamLeader(date, area, level, idx, sort, lowLevel, year));
                    } else {
                    }else if(idx.equals("72")){
                        result.put("index_"+idx, statisticsESService.getLowLevelTotalOnlineTeamLeader(date,area,level,idx,sort,lowLevel,year,""));
                    }else {
                        result.put("index_" + idx, statisticsESService.getLowLevelTotal(date, area, level, idx, sort, lowLevel, year));
                    }
                }
@ -1864,4 +1867,91 @@ public class EsStatisticsController extends BaseController {
    }
    /*=================================长处方分析end==============================================*/
    /*==================================版本1.4.1统计优化开始start=====================================*/
    /**
     * 获取签约率、签约完成率 续签率
     *
     * @param endDate 截止日期
     * @param area    区域
     * @param level   区域级别 4:城市 3:区 2:社区 1:团队
     * @return
     */
    @RequestMapping(value = "/sign_info_online")
    @ResponseBody
    public String getAreaSignInfoOnline(@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 {
            //新版与旧版统计适配
            level = elasticsearchUtil.changeLevel(level);
            JSONObject result = new JSONObject();
            //year没传默认是今年
            if (org.springframework.util.StringUtils.isEmpty(year)) {
                year = Constant.getNowYear();
            }
            if (StringUtils.isEmpty(lowCode)) {
                //总签约数量
                long sign = statisticsESService.getIndexTotal(endDate, area, level, "1", SaveModel.timeLevel_DDL);
                //总线上签约数量
                long signOnline = statisticsESService.getIndexTotal(endDate,area,level,"72",SaveModel.timeLevel_DDL);
                //总签约率
                JSONObject signRate = statisticsESService.getSignRate(endDate, area, level, year,"1");
                //线上签约率=线上签约人数/总签约量
                JSONObject signOnlineRate = statisticsESService.getSignOnlineRate(endDate,area,level,year,sign);
                //result.put("sign", sign);
                result.put("signOnline", signOnline);
                result.put("signRate", signRate);
                result.put("signOnlineRate", signOnlineRate);
            } else {
                //如果年度不是当前年度 就根据endDate 找到那个年度的最后一天的数据
                if (!Constant.getNowYear().equals(year)) {
                    endDate = (Integer.valueOf(year) + 1) + "-06-30";
                }
                result = statisticsESService.getGroupInfoOnline(endDate, lowCode, area, level, year);
            }
            return write(200, "查询成功", "data", result);
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "查询失败");
        }
    }
    /**
     * 获取 线上续签率和续签率
     * 前端:线上续签
     *
     * @param index 29,43,44 (51,53,54 服务类型维度)
     * @param level 等级  4 市  3区  2社区 1团队
     * @param code  市 默认是厦门市 350200  区 就是区的code  社区就是社区的code 团队就是团队的code.
     * @param year  年份 非比传
     * @param lowCode 服务类型维度code(老年人3,高血压1,糖尿病2)
     * @return
     */
    @RequestMapping(value = "/getRenewPercentOnline", method = RequestMethod.GET)
    @ResponseBody
    public String getRenewPercentOnline(
            @RequestParam(required = true) String index,//续签index
            @RequestParam(required = true) int level,
            @RequestParam(required = true) String code,
            @RequestParam(required = false) String year,
            @RequestParam(required = false) String lowCode) {
        try {
            //year没传默认是今年
            /*if (org.springframework.util.StringUtils.isEmpty(year)) {
                year = Constant.getNowYear();
            }*/
            return write(200,"查询成功!","data",statisticsESService.getRenewPercentOnline(index,elasticsearchUtil.changeLevel(level),code,year,lowCode));
        } catch (Exception e) {
            error(e);
            return error(-1, "查询失败");
        }
    }
    /*==================================版本1.4.1统计优化结束 end=====================================*/
}