Browse Source

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

huangwenjie 7 years ago
parent
commit
67bf22cde0

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

@ -57,6 +57,7 @@ public class StatisticsESService {
    private SystemDictService systemDictService;
    private SystemDictService systemDictService;
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    SimpleDateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXX");
    /**
    /**
     * 获取上次统计时间
     * 获取上次统计时间
     *
     *
@ -1927,4 +1928,192 @@ public class StatisticsESService {
        return null;
        return null;
    }
    }
    public JSONObject getRenewAnalysis(String switchIndex, String switchIndexReson, String signIn, String signOut, String level, String code) throws Exception{
        JSONObject jo = new JSONObject();
        //获取统计的最新事件
        String quotaDate = elasticsearchUtil.getQuotaTime();
        //获取转签人数
        int switchNum = getLevel1NumForRedis(switchIndex, level, code, quotaDate);
        //获取转签分布
        JSONArray switchJO = getLevel2JsonObjectForRedis(switchIndexReson, level, code, quotaDate);
        //获取签入人数
        int inNum = getLevel1NumForRedis(signIn, level, code, quotaDate);
        //获取签出人数
        int outNum = getLevel1NumForRedis(signOut, level, code, quotaDate);
        int changeTeam = getLevel1NumForRedis("31", level, code, quotaDate);//夸团队的数目
        int changeHospital = getLevel1NumForRedis("32", level, code, quotaDate);//夸社区的数目
        int changeTown = getLevel1NumForRedis("33", level, code, quotaDate);//夸社区的数目
        int allChangeCount = changeTeam + changeHospital + changeTown; //跨团队,跨社区 跨区的分母
        jo.put("inNum", inNum);//今年的签入量
        jo.put("outNum", outNum);//今年的签出量
        jo.put("thisYearSwithch", switchNum);//今年的转签量
        jo.put("switchHealth", switchJO);//今年的服务分布
        String changeTeamNum = getRangeNoLast(changeTeam, allChangeCount, 2);//跨团队转签率
        String changeHospNum = getRangeNoLast(changeHospital, allChangeCount, 2);//跨社区转签率
        String changeTownNum = "";
        //保留两位小数
        DecimalFormat df = new DecimalFormat("######0.00");
        if (changeTown == 0) {
            changeTownNum = "0";
        } else {
            changeTownNum = df.format(100 - Double.valueOf(changeTeamNum) - Double.valueOf(changeHospNum)) + "";//跨区转签率,解决算出来可能不是100%的问题 用扣的
        }
        jo.put("switchTeam", changeTeamNum + "%");//今年的转签量
        jo.put("switchHospital", changeHospNum + "%");//今年的转签量
        jo.put("switchTown", changeTownNum + "%");//今年的转签量
        return jo;
    }
    /**
     * 通用的方法 获取一级维度的数据
     *
     * @param index
     * @param level
     * @param code
     * @param timeKey
     * @return
     */
    private int getLevel1NumForRedis(String index, String level, String code, String timeKey) throws Exception{
        SaveModel saveModel = elasticsearchUtil.findOneDateQuotaLevel0(timeKey,code,Integer.parseInt(level),index,"2");
        return saveModel.getResult2();
    }
    /**
     * 通用的方法 获取二级维度的数据列表
     *
     * @param index
     * @param level
     * @param code
     * @param timeKey
     * @return
     */
    private JSONArray getLevel2JsonObjectForRedis(String index, String level, String code, String timeKey) throws Exception{
        List<SaveModel> list = elasticsearchUtil.findOneDateQuotaLevel1(timeKey,code,Integer.parseInt(level),index,"2");
//        JSONObject jo = new JSONObject();
        JSONArray switchJo = new JSONArray();
        list.stream().forEach(one->{
            Map<String,Object> map = new HashMap<>();
            map.put("date",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(one.getQuotaDate()));
            if (SaveModel.teamLevel.equals(level)) {
                map.put("code",one.getTeam());
                map.put("name",one.getTeamName());
            } else if (SaveModel.OrgLevel.equals(level)) {
                map.put("code",one.getHospital());
                map.put("name",one.getHospitalName());
            } else if (SaveModel.townLevel.equals(level)) {
                map.put("code",one.getTown());
                map.put("name",one.getTownName());
            } else if (SaveModel.cityLevel.equals(level)) {
                map.put("code",one.getCity());
                map.put("name",one.getCityName());
            }
            map.put("num",one.getResult2());
            switchJo.put(map);
        });
        return switchJo;
    }
    public String getRangeNoLast(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;
    }
    /**
     * 查询某个级别的某个指标到达量(单条记录)
     *
     * @param date
     * @param area
     * @param level
     * @return
     * @throws Exception
     */
    public JSONObject getLowLevelTotalSingle2(String date, String area, int level) throws Exception {
//        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        //获取微信关注的未交费
//        Map<String, Object> expenseStatus0 = getByIndexSingle(date, area, level, "49",dateFormat);
        SaveModel expenseStatus0 = elasticsearchUtil.findOneDateQuotaLevel0(date,area,level,"49","2");
        //获取微信关注的已交费
//        Map<String, Object> expenseStatus1 = getByIndexSingle(date, area, level, "50",dateFormat);
        SaveModel expenseStatus1 = elasticsearchUtil.findOneDateQuotaLevel0(date,area,level,"50","2");
        //获取已缴费的签约数
//        Map<String, Object> expenseStatus1Sigjn = getByIndexSingle(date, area, level, "1",dateFormat);
        SaveModel expenseStatus1Sigjn = elasticsearchUtil.findOneDateQuotaLevel0(date,area,level,"1","2");
        JSONObject jsonObject = new JSONObject();
        if (SaveModel.teamLevel.equals(level)) {
            jsonObject.put("name", expenseStatus1Sigjn.getTeamName());
        } else if (SaveModel.OrgLevel.equals(level)) {
            jsonObject.put("name", expenseStatus1Sigjn.getHospitalName());
        } else if (SaveModel.townLevel.equals(level)) {
            jsonObject.put("name", expenseStatus1Sigjn.getTownName());
        } else if (SaveModel.cityLevel.equals(level)) {
            jsonObject.put("name", expenseStatus1Sigjn.getCityName());
        }
        jsonObject.put("code", area);
        Long  weChatAmount0 =  Long.valueOf(expenseStatus0.getResult2().toString());
        Long  weChatAmount1 =  Long.valueOf(expenseStatus1.getResult2().toString());
        Long  signAccount =  Long.valueOf(expenseStatus1Sigjn.getResult2().toString());
        jsonObject.put("weChatAmount0", weChatAmount0);//微信关注未交费数
        jsonObject.put("weChatAmount1", weChatAmount1);//微信关注已交费数
        jsonObject.put("bindRate", getRangeDouuble(weChatAmount1.intValue(), signAccount.intValue(), 2));//微信关注率
        return jsonObject;
    }
    /**
     * 获取某个指标某一天某一level的值 到达量(单条记录)
     *
     * @param date
     * @param area
     * @param level
     * @param index
     * @param dateFormat
     * @return
     * @throws Exception
     */
    private Map<String,Object> getByIndexSingle(String date, String area, int level, String index, SimpleDateFormat dateFormat) throws Exception {
        Map<String,Object> map =null;
        if (date.compareTo(dateFormat.format(new Date())) >= 0) {
            map = getTodayLowLevelTotalSingle(date, area, level, index);
        }
        return map;
    }
    /**
     * 获取今天某个区域一级指标的下级统计(单条记录)
     *
     * @param area
     * @param level
     * @param index
     * @return
     */
    public Map<String, Object> getTodayLowLevelTotalSingle(String date, String area, int level, String index) throws Exception {
        Map<String, Object> data = new HashMap<>();
        String redisData = "";
        try {
//            redisData = redisTemplate.opsForValue().get("quota:" + index + ":" + level + ":" + area  + ":" + getQuotaTimeStamp());
        } catch (Exception e) {
            redisData = "";
        }
        if (!org.springframework.util.StringUtils.isEmpty(redisData)) {
            JSONObject json = new JSONObject(redisData);
            data.put("code", String.valueOf(json.get("code")));
            data.put("name", String.valueOf(json.get("name")));
            data.put("amount",String.valueOf(json.get("num")));
        } else {
            Calendar today = Calendar.getInstance();
            today.add(Calendar.DATE, -1);
            String preDate = new SimpleDateFormat("yyyy-MM-dd").format(today.getTime());
//            data = getTodayBeforeLowLevelTotalSingle(preDate, area, level, index);
        }
        return data;
    }
}
}

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

@ -243,10 +243,10 @@ public class ElasticsearchUtil {
            }
            }
        }
        }
        if (StringUtils.isNotEmpty(endDate)) {
        if (StringUtils.isNotEmpty(endDate)) {
            if(startDate.length()>10){
                startDate = changeTime(endDate);
            if(endDate.length()>10){
                endDate = changeTime(endDate);
            }else{
            }else{
                startDate = changeDate(endDate);
                endDate = changeDate(endDate);
            }
            }
        }
        }
        StringBuffer sql = new StringBuffer();
        StringBuffer sql = new StringBuffer();
@ -334,10 +334,10 @@ public class ElasticsearchUtil {
            }
            }
        }
        }
        if (StringUtils.isNotEmpty(endDate)) {
        if (StringUtils.isNotEmpty(endDate)) {
            if(startDate.length()>10){
                startDate = changeTime(endDate);
            if(endDate.length()>10){
                endDate = changeTime(endDate);
            }else{
            }else{
                startDate = changeDate(endDate);
                endDate = changeDate(endDate);
            }
            }
        }
        }
        StringBuffer sql = new StringBuffer();
        StringBuffer sql = new StringBuffer();
@ -425,10 +425,10 @@ public class ElasticsearchUtil {
            }
            }
        }
        }
        if (StringUtils.isNotEmpty(endDate)) {
        if (StringUtils.isNotEmpty(endDate)) {
            if(startDate.length()>10){
                startDate = changeTime(endDate);
            if(endDate.length()>10){
                endDate = changeTime(endDate);
            }else{
            }else{
                startDate = changeDate(endDate);
                endDate = changeDate(endDate);
            }
            }
        }
        }
        StringBuffer sql = new StringBuffer();
        StringBuffer sql = new StringBuffer();

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

@ -7,6 +7,7 @@ import com.yihu.wlyy.util.Constant;
import com.yihu.wlyy.util.ValueComparator;
import com.yihu.wlyy.util.ValueComparator;
import com.yihu.wlyy.web.BaseController;
import com.yihu.wlyy.web.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONObject;
@ -1386,7 +1387,116 @@ public class EsStatisticsController extends BaseController {
            @RequestParam(required = false) String lowCode) {
            @RequestParam(required = false) String lowCode) {
        try {
        try {
            return write(200, "查询成功", "data", statisticsService.getRenewPercentAndChangePercent(index,level, code, year,lowCode));
            return write(200, "查询成功", "data", statisticsESService.getRenewPercentAndChangePercent(index,level, code, year,lowCode));
        } catch (Exception e) {
            error(e);
            return error(-1, "查询失败");
        }
    }
    /**
     * 获取转签人数,转签原因分析,转签分布
     * 前端:签约数据分析,团队转签详情
     *
     * @param level 等级  4 市  3区  2社区 1团队
     * @param code  市 默认是厦门市 350200  区 就是区的code  社区就是社区的code 团队就是团队的code
     * @return
     */
    @RequestMapping(value = "/getRenewAnalysis", method = RequestMethod.GET)
    @ResponseBody
    public String getRenewAnalysis(
            @RequestParam(required = true) String level,
            @RequestParam(required = true) String code) {
        try {
            String switchIndex = "";
            String switchIndexReson = "";
            String signIn = "";
            String signOut = "";
            if ("1".equals(level)) {
                //团队的转签人数
                switchIndex = "35";
                //团队的转签原因
                switchIndexReson = "30";
                //团队的签入
                signIn = "34";
                //团队的签出
                signOut = "35";
            } else if ("2".equals(level)) {
                //社区的转签人数
                switchIndex = "35";
                //社区的转签原因
                switchIndexReson = "30";
                //社区的签入
                signIn = "38";
                //社区的签出
                signOut = "39";
            } else {
                //区和市的转签人数
                switchIndex = "35";
                //区和市的转签原因
                switchIndexReson = "30";
                //区和市的签入
                signIn = "40";
                //区和市的签出
                signOut = "41";
            }
            return write(200, "查询成功", "data", statisticsESService.getRenewAnalysis(switchIndex, switchIndexReson, signIn, signOut, level, code));
        } catch (Exception e) {
            error(e);
            return error(-1, "查询失败");
        }
    }
    /**
     * 去年的签约量,续签量和续签率 列表
     *
     * @param index    42,43,44 (52,53,54 服务类型维度)
     * @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,高血压4,糖尿病5)
     * @return
     */
    @RequestMapping("/lowlevel_all_sign_renew")
    @ResponseBody
    public String getIndexLowLevelTotalSignAndRenew(
            @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, statisticsAllService.getLevelTwoLowLevelTotalSignAndRenew(area, level, index, sort, lowLevel, year,lowCode));
            return write(200, "查询成功", "data", result);
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "查询失败");
        }
    }
    @RequestMapping("/getLevelTotalSingle")
    @ResponseBody
    public String getLevelTotalSingle(@ApiParam(name="date", value="日期标识") @RequestParam(required = true)String date,
                                      @ApiParam(name="area", value="区域code") @RequestParam(required = true)String area,
                                      @ApiParam(name="level", value="级别") @RequestParam(required = true)int level){
        try{
            return write(200, "查询成功", "data", statisticsESService.getLowLevelTotalSingle2(date,area,level));
        } catch (Exception e) {
        } catch (Exception e) {
            error(e);
            error(e);
            return error(-1, "查询失败");
            return error(-1, "查询失败");

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

@ -1518,6 +1518,7 @@ public class StatisticsController extends BaseController {
     */
     */
    @RequestMapping(value = "/getRenewAnalysis", method = RequestMethod.GET)
    @RequestMapping(value = "/getRenewAnalysis", method = RequestMethod.GET)
    @ResponseBody
    @ResponseBody
    @Deprecated
    public String getRenewAnalysis(
    public String getRenewAnalysis(
            @RequestParam(required = true) String level,
            @RequestParam(required = true) String level,
            @RequestParam(required = true) String code) {
            @RequestParam(required = true) String code) {
@ -1636,6 +1637,7 @@ public class StatisticsController extends BaseController {
    @RequestMapping("/getLevelTotalSingle")
    @RequestMapping("/getLevelTotalSingle")
    @ResponseBody
    @ResponseBody
    @Deprecated
    public String getLevelTotalSingle(@ApiParam(name="date", value="日期标识") @RequestParam(required = true)String date,
    public String getLevelTotalSingle(@ApiParam(name="date", value="日期标识") @RequestParam(required = true)String date,
                                      @ApiParam(name="area", value="区域code") @RequestParam(required = true)String area,
                                      @ApiParam(name="area", value="区域code") @RequestParam(required = true)String area,
                                      @ApiParam(name="level", value="级别") @RequestParam(required = true)int level){
                                      @ApiParam(name="level", value="级别") @RequestParam(required = true)int level){