瀏覽代碼

统计指标28

trick9191 8 年之前
父節點
當前提交
9a611029d8

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

@ -81,7 +81,7 @@ public class SignDataFilter {
     *
     * @param signFamilies 签约列表
     * @param level2Key    二级维度的key
     *                       1:性别 2:年龄 3:分组 4:费用 5:健康服务分布 6:年龄 7:年龄疾病
     *                     1:性别 2:年龄 3:分组 4:费用 5:健康服务分布 6:年龄 7:年龄疾病
     * @param filterDate   过滤的是哪天的数据 yyyy-MM-dd
     * @return
     */
@ -94,9 +94,9 @@ public class SignDataFilter {
     *
     * @param signFamilies 签约列表
     * @param level2Key    二级维度的key
     *                       1:性别 2:年龄 3:分组 4:费用 5:健康服务分布 6:年龄 7:年龄疾病
     *                     1:性别 2:年龄 3:分组 4:费用 5:健康服务分布 6:年龄 7:年龄疾病
     * @param level3Key    三级维度的key
     *                      1.疾病
     *                     1.疾病
     * @param filterDate   过滤的是哪天的数据 yyyy-MM-dd
     * @return
     */
@ -109,9 +109,9 @@ public class SignDataFilter {
     *
     * @param signFamilies 签约列表
     * @param level2Key    二级维度的key
     *                       1:性别 2:年龄 3:分组 4:费用 5:健康服务分布 6:年龄 7:年龄疾病
     *                     1:性别 2:年龄 3:分组 4:费用 5:健康服务分布 6:年龄 7:年龄疾病
     * @param level3Key    三级维度的key
     *                      1.疾病
     *                     1.疾病
     * @param filterDate   过滤的是哪天的数据 yyyy-MM-dd
     * @return
     */
@ -300,7 +300,8 @@ public class SignDataFilter {
    /**
     * 得到二级维度的key
     *1:性别 2:年龄 3:分组 4:费用 5:健康服务分布 6:年龄 7:年龄疾病
     * 1:性别 2:年龄 3:分组 4:费用 5:健康服务分布 6:年龄 7:年龄疾病
     *
     * @param level2Key
     * @return
     */
@ -588,34 +589,34 @@ public class SignDataFilter {
                errorCount++;
                continue;
            }
            Long adminId=signFamily.getAdminTeamCode();
            Long adminId = signFamily.getAdminTeamCode();
            //医生团队列表
            List<Long> adminTeamList=new ArrayList<>();
            if(adminId == null||adminId<=0) {
            List<Long> adminTeamList = new ArrayList<>();
            if (adminId == null || adminId <= 0) {
                //如果团队是空 把数目给待签约的医生 可能是健康管理师也可以能是全科
                if(!StringUtils.isEmpty(signFamily.getDoctor())) {
                if (!StringUtils.isEmpty(signFamily.getDoctor())) {
                    //找出全科医生所在的团队
                    String sqlD="select DISTINCT team_id from wlyy_admin_team_member w where w.doctor_code='"+signFamily.getDoctor()+"'";
                    adminTeamList= jdbcTemplate.queryForList(sqlD,Long.class);
                    if(adminTeamList==null&&adminTeamList.size()==0){
                        errorModels.add(ErrorModel.newEM(signFamily.getCode(),ErrorModel.sign_adminTeam_null));
                        isAll=false;
                    String sqlD = "select DISTINCT team_id from wlyy_admin_team_member w where w.doctor_code='" + signFamily.getDoctor() + "'";
                    adminTeamList = jdbcTemplate.queryForList(sqlD, Long.class);
                    if (adminTeamList == null && adminTeamList.size() == 0) {
                        errorModels.add(ErrorModel.newEM(signFamily.getCode(), ErrorModel.sign_adminTeam_null));
                        isAll = false;
                        errorCount++;
                        continue;
                    }
                }else if(!StringUtils.isEmpty(signFamily.getDoctorHealth())){
                } else if (!StringUtils.isEmpty(signFamily.getDoctorHealth())) {
                    //找出健康管理师所在的团队
                    String sqlD="select DISTINCT team_id from wlyy_admin_team_member w where w.doctor_code='"+signFamily.getDoctorHealth()+"'  ";
                    adminTeamList= jdbcTemplate.queryForList(sqlD,Long.class);
                    if(adminTeamList==null&&adminTeamList.size()==0){
                        errorModels.add(ErrorModel.newEM(signFamily.getCode(),ErrorModel.sign_adminTeam_null));
                        isAll=false;
                    String sqlD = "select DISTINCT team_id from wlyy_admin_team_member w where w.doctor_code='" + signFamily.getDoctorHealth() + "'  ";
                    adminTeamList = jdbcTemplate.queryForList(sqlD, Long.class);
                    if (adminTeamList == null && adminTeamList.size() == 0) {
                        errorModels.add(ErrorModel.newEM(signFamily.getCode(), ErrorModel.sign_adminTeam_null));
                        isAll = false;
                        errorCount++;
                        continue;
                    }
                }else{
                    errorModels.add(ErrorModel.newEM(signFamily.getCode(),ErrorModel.sign_adminTeam_null));
                    isAll=false;
                } else {
                    errorModels.add(ErrorModel.newEM(signFamily.getCode(), ErrorModel.sign_adminTeam_null));
                    isAll = false;
                    errorCount++;
                    continue;
                }
@ -625,18 +626,18 @@ public class SignDataFilter {
            String returnLevel3Key = getLevel3Key(level3Key, signFamily);
            if (StringUtils.isEmpty(returnLevel2Key)) {
                //没有二级维度
                for(int teamNum=0;teamNum<adminTeamList.size();teamNum++){
                for (int teamNum = 0; teamNum < adminTeamList.size(); teamNum++) {
                    ETLModel etlModel = new ETLModel();
                    etlModel.setHospital(orgCodeTemp);
                    etlModel.setTown(hospital.getTown());
                    etlModel.setCity(Constant.city);
                    etlModel.setAdminTeam(adminTeamList.get(teamNum)+"");
                    etlModel.setAdminTeam(adminTeamList.get(teamNum) + "");
                    etlModelList.add(etlModel);
                }
            } else {
                String[] level2Keys = returnLevel2Key.split(",");
                for (int j = 0; j < level2Keys.length; j++) {
                    for(int teamNum=0;teamNum<adminTeamList.size();teamNum++) {
                    for (int teamNum = 0; teamNum < adminTeamList.size(); teamNum++) {
                        ETLModel etlModel = new ETLModel();
                        etlModel.setLevel2Key(level2Keys[j]);
                        etlModel.setLevel3Key(returnLevel3Key);

+ 4 - 4
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/model/FilterModel.java

@ -21,14 +21,14 @@ public class FilterModel {
        this.etlModelList = etlModelList;
    }
    public static FilterModel getFiltrerMode(LogModel logModel, List<ETLModel> etlModelList,Boolean isError){
        return new FilterModel(logModel,etlModelList,isError);
    }
    public LogModel getLogModel() {
        return logModel;
    }
    public static FilterModel getFiltrerMode(LogModel logModel, List<ETLModel> etlModelList,Boolean isError){
        return new FilterModel(logModel,etlModelList,isError);
    }
    public void setLogModel(LogModel logModel) {
        this.logModel = logModel;
    }

+ 140 - 24
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/CurrentDayAllQuotaJob.java

@ -37,6 +37,7 @@ import org.springframework.context.annotation.Scope;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.support.nativejdbc.OracleJdbc4NativeJdbcExtractor;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
@ -158,30 +159,31 @@ public class CurrentDayAllQuotaJob implements Job {
        //抽取數據
        List<SignFamily> signFamilies= SpringUtil.getBean(DBExtract.class).extractByPage(SignFamily.class,sql,sqlCount,true);
        computequota_1(sql,signFamilies,null); //统计今天的签约
        computequota_2(); //统计今天的解约
        computequota_3(); //统计今天的健康咨询量
        computequota_4(); //统计今天的随访量
        computequota_5(); //统计今天的健康指导
        computequota_6(sql,signFamilies,null); //统计今天的签约患者性别
        computequota_7(sql,signFamilies,null);//统计今天的签约患者分组
        computequota_8(sql,signFamilies,null);//统计今天的签约患者年龄
        computequota_9();//统计今天的待签约
        computequota_10();//统计今天的改签
        computequota_12(sql,signFamilies,null);//统计今天的签约下按年龄分组后再
        computequota_13(sql,signFamilies,null);//统计今天的签约量
        computequota_16_1(sql,signFamilies,null);//统计今天的签约数的扣费钱 1
        computequota_15(sql,signFamilies,null);//统计今天的健康分布统计
        computequota_16_0(sql,signFamilies,null);//统计今天的签约数的未扣费 0
        computequota_17(sql,signFamilies,null);//统计今天的年龄疾病
        computequota_20();//统计今天的已经签约患者绑定设备
        computequota_21();//统计今天的已经签约微信关注人数
        computequota_22();//未回复的咨询量
        computequota_23();//及时回复的咨询量
        computequota_24();//及时回复的咨询量时间分布
        computequota_25();//统计质询量总数
        computequota_26();//统计未缴费签约总数
        computequota_27();//统计代预约量
//        computequota_1(sql,signFamilies,null); //统计今天的签约
//        computequota_2(); //统计今天的解约
//        computequota_3(); //统计今天的健康咨询量
//        computequota_4(); //统计今天的随访量
//        computequota_5(); //统计今天的健康指导
//        computequota_6(sql,signFamilies,null); //统计今天的签约患者性别
//        computequota_7(sql,signFamilies,null);//统计今天的签约患者分组
//        computequota_8(sql,signFamilies,null);//统计今天的签约患者年龄
//        computequota_9();//统计今天的待签约
//        computequota_10();//统计今天的改签
//        computequota_12(sql,signFamilies,null);//统计今天的签约下按年龄分组后再
//        computequota_13(sql,signFamilies,null);//统计今天的签约量
//        computequota_16_1(sql,signFamilies,null);//统计今天的签约数的扣费钱 1
//        computequota_15(sql,signFamilies,null);//统计今天的健康分布统计
//        computequota_16_0(sql,signFamilies,null);//统计今天的签约数的未扣费 0
//        computequota_17(sql,signFamilies,null);//统计今天的年龄疾病
//        computequota_20();//统计今天的已经签约患者绑定设备
//        computequota_21();//统计今天的已经签约微信关注人数
//        computequota_22();//未回复的咨询量
//        computequota_23();//及时回复的咨询量
//        computequota_24();//及时回复的咨询量时间分布
//        computequota_25();//统计质询量总数
//        computequota_26();//统计未缴费签约总数
//        computequota_27();//统计代预约量
        computequota_28();//统计平均值
        quartzJobLog.setJobContent(allContent.toString());
        quartzJobLog.setJobName("实时统计");
@ -965,6 +967,120 @@ public class CurrentDayAllQuotaJob implements Job {
        allContent.append("-----------27----------");
    }
    /**
     * SQL统计平均值存储redis
     * 统计市,区,机构,团队医生满意度
     */
    private void  computequota_28(){
        //获取市,区统计结果
        List<Map<String,Object>> m1 = getCityTowms();
        JSONObject json1 = new JSONObject();
        json1.put("data",m1);
        redisTemplate.opsForValue().set("quota:28:4:"+Constant.city+":3:"+RedisStorage.timeKey,json1.toString());
        //获取市,机构统计结果
        List<Map<String,Object>> m2 = getCityHoss();
        JSONObject json2 = new JSONObject();
        json2.put("data",m2);
        redisTemplate.opsForValue().set("quota:28:4:"+Constant.city+":2:"+RedisStorage.timeKey,json2.toString());
        //统计区级低下所有机构
        if(m1!=null&&m1.size()>0){
            for(Map<String,Object> m:m1){
                String town =(String)m.get("code");
                List<Map<String,Object>> m3 = getTownHoss(town);
                JSONObject json3 = new JSONObject();
                json3.put("data",m3);
                redisTemplate.opsForValue().set("quota:28:3:"+town+":2:"+RedisStorage.timeKey,json3.toString());
            }
        }
        //得到所有机构
        List<Map<String,Object>> allHs = getAllHoss();
        //得到所有团队统计结果
        List<Map<String,Object>> allTs =getAllHosTeams();
        //将团队按机构分组,分别存储
        if(allHs!=null&&allHs.size()>0){
            for(Map<String,Object> h : allHs){
                String code = (String)h.get("code");
                List<Map<String,Object>> hosTeams = new ArrayList<>();
                Iterator<Map<String,Object>> it = allTs.iterator();
                while(it.hasNext()){
                    Map<String,Object> x = it.next();
                    String hospital = (String)x.get("hospital");
                    if(code.equals(hospital)){
                        hosTeams.add(x);
                        it.remove();
                    }
                }
                JSONObject json = new JSONObject();
                json.put("data",hosTeams);
                redisTemplate.opsForValue().set("quota:28:2:"+code+":1:"+RedisStorage.timeKey,json.toString());
            }
        }
    }
    public List<Map<String,Object>> getCityTowms(){
        List<Map<String,Object>> map = jdbcTemplate.queryForList(getAvgSqlByCode("city_town_SQL"));
        return map;
    }
    public List<Map<String,Object>> getCityHoss(){
        List<Map<String,Object>> map = jdbcTemplate.queryForList(getAvgSqlByCode("city_hos_SQL"));
        return map;
    }
    public List<Map<String,Object>> getTownHoss(String townCode){
        List<Map<String,Object>> map = jdbcTemplate.queryForList(getAvgSqlByCode("town_hos_SQL"),new Object[]{townCode});
        return map;
    }
    public List<Map<String,Object>> getAllHosTeams(){
        List<Map<String,Object>> map = jdbcTemplate.queryForList(getAvgSqlByCode("team_SQL"));
        return map;
    }
    public List<Map<String,Object>> getAllHoss(){
        List<Map<String,Object>> map = jdbcTemplate.queryForList(getAvgSqlByCode("All_hos_SQL"));
        return map;
    }
    public String getAvgSqlByCode(String code){
        if("city_town_SQL".equals(code)){
            //统计市级各区
            String city_town_SQL ="SELECT t.code,t.`name` ,ifnull(ROUND(AVG(s.score),1),0) as avgCount " +
                    " FROM wlyy_doctor d " +
                    " RIGHT JOIN dm_town t on t.code=d.town " +
                    " LEFT JOIN wlyy_evaluate_score s ON d.code = s.doctor " +
                    " WHERE t.city='"+Constant.city+"' GROUP BY d.town order by avgCount DESC ";
            return city_town_SQL;
        }else if("city_hos_SQL".equals(code)){
            //统计市级各社区
            String city_hos_SQL ="SELECT  t.code,t.`name`,ifnull(ROUND(AVG(s.score),1),0) as avgCount " +
                    " FROM wlyy_doctor d " +
                    " RIGHT JOIN dm_hospital t on t.code = d.hospital " +
                    " LEFT JOIN wlyy_evaluate_score s ON d.code = s.doctor " +
                    " WHERE t.city='"+Constant.city+"' GROUP BY d.hospital order by avgCount DESC ";
            return city_hos_SQL;
        }else if("town_hos_SQL".equals(code)){
            //统计区级各社区
            String town_hos_SQL ="SELECT  t.code,t.`name`,ifnull(ROUND(AVG(s.score),1),0) as avgCount " +
                    " FROM wlyy_doctor d " +
                    " RIGHT JOIN dm_hospital t on t.code = d.hospital " +
                    " LEFT JOIN wlyy_evaluate_score s ON d.code = s.doctor " +
                    " WHERE t.town= ? GROUP BY d.hospital order by avgCount DESC ";
            return town_hos_SQL;
        }else if("team_SQL".equals(code)){
            //查找所有团队
            String team_SQL ="SELECT  t.id,t.`name` ,d.hospital,ifnull(ROUND(AVG(s.score),1),0) as avgCount " +
                    " FROM wlyy_doctor d " +
                    " RIGHT JOIN wlyy_admin_team t on t.leader_code = d.code " +
                    " LEFT JOIN wlyy_evaluate_score s ON d.code = s.doctor " +
                    " GROUP BY t.id order by avgCount DESC ";
            return team_SQL;
        }else if("All_hos_SQL".equals(code)){
            //查找所有机构
            String All_hos_SQL = "SELECT t.code FROM dm_hospital t where t.city ='"+Constant.city+"'";
            return All_hos_SQL;
        }
    return "";
    }
    public static String getDayString(Integer size) {
        Date date = new Date();//取时间