Преглед изворни кода

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

hzp пре 7 година
родитељ
комит
a6a087d9ac

+ 7 - 7
patient-co-statistics/pom.xml

@ -376,7 +376,7 @@
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <version>${version.spring-boot}</version>
            <!--<scope>provided</scope>-->
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.json</groupId>
@ -404,12 +404,12 @@
    <build>
        <plugins>
            <!--打成war包需要的配置-->
            <!--<plugin>-->
            <!--<artifactId>maven-war-plugin</artifactId>-->
            <!--<configuration>-->
            <!--<failOnMissingWebXml>false</failOnMissingWebXml>-->
            <!--</configuration>-->
            <!--</plugin>-->
            <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>

+ 6 - 6
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/config/war/ServletInitializer.java

@ -7,9 +7,9 @@ import org.springframework.boot.context.web.SpringBootServletInitializer;
/**
 * Created by Administrator on 2016.10.14.
 */
//public class ServletInitializer extends SpringBootServletInitializer {
//    @Override
//    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
//        return application.sources(Application.class);
//    }
//}
public class ServletInitializer extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }
}

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

@ -12,32 +12,25 @@ import com.yihu.wlyy.statistics.model.consult.ConsultTeam;
import com.yihu.wlyy.statistics.model.consult.ConsultTeamDto;
import com.yihu.wlyy.statistics.model.hosptial.Hospital;
import com.yihu.wlyy.statistics.model.job.QuartzJobLog;
import com.yihu.wlyy.statistics.model.label.SignPatientLabelInfo;
import com.yihu.wlyy.statistics.model.patient.Patient;
import com.yihu.wlyy.statistics.model.patient.PatientHealthGuidance;
import com.yihu.wlyy.statistics.model.patient.PatientReservation;
import com.yihu.wlyy.statistics.model.signfamily.SignFamily;
import com.yihu.wlyy.statistics.model.system.Town;
import com.yihu.wlyy.statistics.model.team.AdminTeam;
import com.yihu.wlyy.statistics.util.DateUtil;
import com.yihu.wlyy.statistics.util.IdCardUtil;
import com.yihu.wlyy.statistics.util.JsonUtil;
import com.yihu.wlyy.statistics.util.SpringUtil;
import org.apache.commons.collections.map.HashedMap;
import org.json.JSONArray;
import org.json.JSONObject;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
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;
@ -77,27 +70,27 @@ public class CurrentDayAllQuotaJob implements Job {
    List<Town> towns = null;//厦门市全部的区
    List<Hospital> hospitals = null;//系统全部的机构
    List<AdminTeam> adminTeams=null;//系统全部的团队
    List<AdminTeam> adminTeams = null;//系统全部的团队
    Map<String, Hospital> hospitalsMap = new HashMap<String, Hospital>();
    Map<String, Town> townsMap = new HashMap<String, Town>();
    Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
    private String now = getDayString(-1)+ Constant.quota_date_last;
    private String now = getDayString(-1) + Constant.quota_date_last;
    private String tomorrow = getDayString(1);
    private StringBuffer allContent=new StringBuffer();//日志内容
    private StringBuffer allContent = new StringBuffer();//日志内容
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Value("${redis.quota.current.expire}")
    String currentExpire="2";
    String currentExpire = "2";
    //im库的jdbcTemplate
    private JdbcTemplate imjdbcTemplate;
    @Resource(name="imData")
    @Resource(name = "imData")
    private DataSource dataSource;
    @Override
@ -114,7 +107,7 @@ public class CurrentDayAllQuotaJob implements Job {
            towns = townDao.findByCityCode(Constant.city); //查找出厦门市全部的区
            hospitals = hospitalDao.findHospitalzxFWZ(); //查找出系统全部的机构
            adminTeams=doctorAdminTeamDao.findAllTeam();//查找出系统全部的全科医生
            adminTeams = doctorAdminTeamDao.findAllTeam();//查找出系统全部的全科医生
            for (Hospital hospital : hospitals) {
                hospitalsMap.put(hospital.getCode(), hospital);
            }
@ -122,7 +115,7 @@ public class CurrentDayAllQuotaJob implements Job {
                townsMap.put(town.getCode(), town);
            }
            for (AdminTeam adminTeam : adminTeams) {
                adminTeamMap.put(adminTeam.getId()+"", adminTeam);
                adminTeamMap.put(adminTeam.getId() + "", adminTeam);
            }
            //清空缓存
            CachePool.cleanAllCache();
@ -130,16 +123,15 @@ public class CurrentDayAllQuotaJob implements Job {
            computequota();
        }catch (Exception e){
        } catch (Exception e) {
            //延迟上一次key的生命周期
            if(CachePool.getKeys()!=null&&CachePool.getKeys().size()>0){
                for (String key :CachePool.getKeys()){
            if (CachePool.getKeys() != null && CachePool.getKeys().size() > 0) {
                for (String key : CachePool.getKeys()) {
                    redisTemplate.expire(key, Integer.valueOf(currentExpire), TimeUnit.HOURS);//2小时过期
                }
            }
            //如果出錯立即重新執行
            JobExecutionException e2 =new JobExecutionException(e);
            JobExecutionException e2 = new JobExecutionException(e);
            e2.setRefireImmediately(true);
            e.printStackTrace();
        }
@ -148,32 +140,32 @@ public class CurrentDayAllQuotaJob implements Job {
    //统计
    private void computequota() throws Exception {
        RedisStorage.timeKey=new Date().getTime()+"";
        RedisStorage.timeKey = new Date().getTime() + "";
        QuartzJobLog quartzJobLog =new QuartzJobLog();
        QuartzJobLog quartzJobLog = new QuartzJobLog();
        quartzJobLog.setJobStartTime(new Date());
        allContent=new StringBuffer();
        allContent = new StringBuffer();
        //找出今天的签约信息 yesterday,now
        String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status,patient from wlyy_sign_family a where  a.type =2 and status in (1,2) and  a.expenses_time< '"+tomorrow+"' and a.expenses_status=1 ";
        String sqlCount=" select count(id) from wlyy_sign_family a where  a.type =2 and status in (1,2) and  a.expenses_time< '"+tomorrow+"' and a.expenses_status=1 ";
        String sql = " select id,code,idcard,hospital,admin_team_code,expenses_status,patient from wlyy_sign_family a where  a.type =2 and status in (1,2) and  a.expenses_time< '" + tomorrow + "' and a.expenses_status=1 ";
        String sqlCount = " select count(id) from wlyy_sign_family a where  a.type =2 and status in (1,2) and  a.expenses_time< '" + tomorrow + "' and a.expenses_status=1 ";
        //抽取數據
        List<SignFamily> signFamilies= SpringUtil.getBean(DBExtract.class).extractByPage(SignFamily.class,sql,sqlCount,true);
        computequota_1(sql,signFamilies,null); //统计今天的签约
        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_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);//统计今天的签约数的扣费钱
        computequota_15(sql,signFamilies,null);//统计今天的健康分布统计
        computequota_17(sql,signFamilies,null);//统计今天的年龄疾病
        computequota_12(sql, signFamilies, null);//统计今天的签约下按年龄分组后再
        computequota_13(sql, signFamilies, null);//统计今天的签约量
        computequota_16_1(sql, signFamilies, null);//统计今天的签约数的扣费钱
        computequota_15(sql, signFamilies, null);//统计今天的健康分布统计
        computequota_17(sql, signFamilies, null);//统计今天的年龄疾病
        computequota_20();//统计今天的已经签约患者绑定设备
        computequota_21();//统计今天的已经签约微信关注人数
        computequota_22();//未回复的咨询量
@ -193,141 +185,190 @@ public class CurrentDayAllQuotaJob implements Job {
        initCurrentExpire();//初始化生命周期
        for (String key :RedisStorage.keys){
        for (String key : RedisStorage.keys) {
            redisTemplate.expire(key, Integer.valueOf(currentExpire), TimeUnit.HOURS);//2小时过期
        }
        CachePool.addKeys(RedisStorage.keys);//缓存key
        RedisStorage.keys.clear();//清空Key
        //更新统计时间
        redisTemplate.opsForValue().set("quota:date",DateUtil.dateToStrLong(new Date()));
        redisTemplate.opsForValue().set("quota:date", DateUtil.dateToStrLong(new Date()));
        //更新时间key
        redisTemplate.opsForValue().set("quota:timeKey",RedisStorage.timeKey);
        redisTemplate.opsForValue().set("quota:timeKey", RedisStorage.timeKey);
    }
    private void computequota_22() {
        String quotaId="22";
        try{
        String quotaId = "22";
        try {
            //查找Im库中的所有的医生ID
            List<String> consultIdMaps = getConsultIdsByIm();
            StringBuffer sb=new StringBuffer("");
            for(int i=0;i<consultIdMaps.size();i++){
            List<ConsultTeam> consultTeams = new ArrayList<>();
            StringBuffer sb = new StringBuffer("");
            for (int i = 0; i < consultIdMaps.size(); i++) {
                sb.append(consultIdMaps.get(i));
                if(i<(consultIdMaps.size()-1)){
                if (i < (consultIdMaps.size() - 1)) {
                    sb.append(",");
                }
                if ((1+1) % 100 == 0) {
                    //每隔100统计一次
                    String sql = "select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '" + tomorrow + "' and a.consult in (" + sb.toString() + ")";
                    //抽取數據
                    List<ConsultTeam> consultTeamsTemp = SpringUtil.getBean(DBExtract.class).extract(ConsultTeam.class, sql);
                    consultTeams.addAll(consultTeamsTemp);
                    sb = new StringBuffer();//重置 in条件
                } else {
                    //判断是不是最后的一段
                    if (consultIdMaps.size() == (i+1)) {
                        String sql = "select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '" + tomorrow + "' and a.consult in (" + sb.toString() + ")";
                        //抽取數據
                        List<ConsultTeam> consultTeamsTemp = SpringUtil.getBean(DBExtract.class).extract(ConsultTeam.class, sql);
                        consultTeams.addAll(consultTeamsTemp);
                    }
                }
            }
            String sql = "";
            if (consultIdMaps.size() > 0) {
                sql = " select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '" + tomorrow + "' and a.consult in (" + sb.toString() + ")";
            } else {
                sql = " select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '" + tomorrow + "' and a.consult ='noRey' ";
            }
            String sql="";
            //找出今天的咨询信息
            if(consultIdMaps.size()>0){
                sql="select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '"+tomorrow+"' and a.consult in ("+sb.toString()+")";
            }else{
                sql="select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '"+tomorrow+ "' and a.consult ='noRey' ";
            } //抽取數據
            List<ConsultTeam> consultTeams= SpringUtil.getBean(DBExtract.class).extract(ConsultTeam.class,sql);
            System.out.println("consultTeams num:"+consultTeams.size());
            System.out.println("consultTeams num:" + consultTeams.size());
            //過濾數據
            FilterModel etlModels= consultDataFilter.filter(consultTeams,sql,null);
            FilterModel etlModels = consultDataFilter.filter(consultTeams, sql, null);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>> returnDatas = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //保存数据
            SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas,null,quotaId);
            SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas, null, quotaId);
            allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
            allContent.append("统计失败:"+e.getMessage());
            allContent.append("统计失败:" + e.getMessage());
        }
        allContent.append("----------22-----------");
    }
    private void computequota_23() {
        String quotaId="23";
        try{
        String quotaId = "23";
        try {
            //查找Im库中的所有的医生ID
            List<String> consultIdMaps = getConsultIdsByIm23();
            StringBuffer sb=new StringBuffer("");
            for(int i=0;i<consultIdMaps.size();i++){
            StringBuffer sb = new StringBuffer("");
            List<ConsultTeam> consultTeams = new ArrayList<>();
            for (int i = 0; i < consultIdMaps.size(); i++) {
                sb.append(consultIdMaps.get(i));
                if(i<(consultIdMaps.size()-1)){
                if (i < (consultIdMaps.size() - 1)) {
                    sb.append(",");
                }
                if ((1+1) % 100 == 0) {
                    //每隔100统计一次
                    String sql = "select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '" + tomorrow + "' and a.consult in (" + sb.toString() + ")";
                    //抽取數據
                    List<ConsultTeam> consultTeamsTemp = SpringUtil.getBean(DBExtract.class).extract(ConsultTeam.class, sql);
                    consultTeams.addAll(consultTeamsTemp);
                    sb = new StringBuffer();//重置 in条件
                } else {
                    //判断是不是最后的一段
                    if (consultIdMaps.size() == (i+1)) {
                        String sql = "select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '" + tomorrow + "' and a.consult in (" + sb.toString() + ")";
                        //抽取數據
                        List<ConsultTeam> consultTeamsTemp = SpringUtil.getBean(DBExtract.class).extract(ConsultTeam.class, sql);
                        consultTeams.addAll(consultTeamsTemp);
                    }
                }
            }
            String sql="";
            String sql = "";
            //找出今天的咨询信息
            if(consultIdMaps.size()>0){
                sql="select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '"+tomorrow+"' and a.consult in ("+sb.toString()+")";
            }else{
                sql="select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '"+tomorrow+ "' and a.consult ='Rey' ";
            } //抽取數據
            List<ConsultTeam> consultTeams= SpringUtil.getBean(DBExtract.class).extract(ConsultTeam.class,sql);
            if (consultIdMaps.size() > 0) {
                sql = "select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '" + tomorrow + "' and a.consult in (" + sb.toString() + ")";
            } else {
                sql = "select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '" + tomorrow + "' and a.consult ='Rey' ";
            }
            System.out.println("consultTeams num:"+consultTeams.size());
            System.out.println("consultTeams num:" + consultTeams.size());
            //過濾數據
            FilterModel etlModels= consultDataFilter.filter(consultTeams,sql,null);
            FilterModel etlModels = consultDataFilter.filter(consultTeams, sql, null);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>> returnDatas = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //保存数据
            SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas,null,quotaId);
            SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas, null, quotaId);
            allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
            allContent.append("统计失败:"+e.getMessage());
            allContent.append("统计失败:" + e.getMessage());
        }
        allContent.append("----------23-----------");
    }
    private void computequota_24() {
        String quotaId="24";
        try{
        String quotaId = "24";
        try {
            //查找Im库中的所有的医生ID
            List<Map<String, Object>>  ims = getConsultIdsByIm24();
            List<Map<String, Object>> ims = getConsultIdsByIm24();
            List<ConsultTeam> consultTeams = new ArrayList<>();
            //得到医生的id
            List<String> consultIdMaps=new ArrayList<>();
            List<String> consultIdMaps = new ArrayList<>();
            ims.stream().forEach(map -> {
                if (map.containsKey("consultId")) {
                    consultIdMaps.add(String.valueOf("'"+map.get("consultId")+"'"));
                    consultIdMaps.add(String.valueOf("'" + map.get("consultId") + "'"));
                }
            });
            StringBuffer sb=new StringBuffer("");
            for(int i=0;i<consultIdMaps.size();i++){
            StringBuffer sb = new StringBuffer("");
            for (int i = 0; i < consultIdMaps.size(); i++) {
                sb.append(consultIdMaps.get(i));
                if(i<(consultIdMaps.size()-1)){
                if (i < (consultIdMaps.size() - 1)) {
                    sb.append(",");
                }
                if ((1+1) % 100 == 0) {
                    //每隔100统计一次
                    String sql = "select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '" + tomorrow + "' and a.consult in (" + sb.toString() + ")";
                    //抽取數據
                    List<ConsultTeam> consultTeamsTemp = SpringUtil.getBean(DBExtract.class).extract(ConsultTeam.class, sql);
                    consultTeams.addAll(consultTeamsTemp);
                    sb = new StringBuffer();//重置 in条件
                } else {
                    //判断是不是最后的一段
                    if (consultIdMaps.size() == (i+1)) {
                        String sql = "select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '" + tomorrow + "' and a.consult in (" + sb.toString() + ")";
                        //抽取數據
                        List<ConsultTeam> consultTeamsTemp = SpringUtil.getBean(DBExtract.class).extract(ConsultTeam.class, sql);
                        consultTeams.addAll(consultTeamsTemp);
                    }
                }
            }
            String sql="";
            String sql = "";
            //找出今天的咨询信息
            if(consultIdMaps.size()>0){
                sql="select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '"+tomorrow+"' and a.consult in ("+sb.toString()+")";
            }else{
                sql="select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '"+tomorrow+ "' and a.consult ='Rey' ";
            if (consultIdMaps.size() > 0) {
                sql = "select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '" + tomorrow + "' and a.consult in (" + sb.toString() + ")";
            } else {
                sql = "select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '" + tomorrow + "' and a.consult ='Rey' ";
            } //抽取數據
            List<ConsultTeam> consultTeams= SpringUtil.getBean(DBExtract.class).extract(ConsultTeam.class,sql);
            List<ConsultTeamDto> consultTeamDtos = getConsultTeams(ims,consultTeams);
            System.out.println("consultTeamDtos num:"+consultTeamDtos.size());
            List<ConsultTeamDto> consultTeamDtos = getConsultTeams(ims, consultTeams);
            System.out.println("consultTeamDtos num:" + consultTeamDtos.size());
            //過濾數據
            FilterModel etlModels= consultDataFilter.filter2(consultTeamDtos,sql,null,ConsultDataFilter.level2ReplyTime);
            FilterModel etlModels = consultDataFilter.filter2(consultTeamDtos, sql, null, ConsultDataFilter.level2ReplyTime);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>> returnDatas = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //统计数据 二级维度
            List<Map<String, Map<String, List<ETLModel>>>> level2Data= SpringUtil.getBean(Level2Role.class).elt(returnDatas);
            List<Map<String, Map<String, List<ETLModel>>>> level2Data = SpringUtil.getBean(Level2Role.class).elt(returnDatas);
            //保存数据
            SpringUtil.getBean(RedisStorage.class).saveByLevel2(level2Data,null,quotaId,5,8);
            SpringUtil.getBean(RedisStorage.class).saveByLevel2(level2Data, null, quotaId, 5, 8);
            allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
            allContent.append("统计失败:"+e.getMessage());
            allContent.append("统计失败:" + e.getMessage());
        }
        allContent.append("----------24----------");
    }
    /**
     * 找出 im中的所有未回复的topic
     *
@ -345,20 +386,20 @@ public class CurrentDayAllQuotaJob implements Job {
                " AND t.session_id = p.session_id " +
                " AND t.session_id = s.id " +
                " AND s.type = 1 " +
                " AND t.status <>10 "+
                " AND t.status <>10 " +
                " AND t.`reply`=0 " +
                " AND t.create_time< '" + tomorrow + "'";
        List<Map<String, Object>> ims = imjdbcTemplate.queryForList(sql);
        //得到医生的id
        List<String> ids=new ArrayList<>();
        List<String> ids = new ArrayList<>();
        ims.stream().forEach(map -> {
            if (map.containsKey("consultId")) {
                ids.add(String.valueOf("'"+map.get("consultId")+"'"));
                ids.add(String.valueOf("'" + map.get("consultId") + "'"));
            }
        });
        System.out.println("22 ims 实时:" +ims.size());
        System.out.println("22 实时sql:" +sql);
        System.out.println("22 ids 实时:" +ids.size());
        System.out.println("22 ims 实时:" + ims.size());
        System.out.println("22 实时sql:" + sql);
        System.out.println("22 ids 实时:" + ids.size());
        return ids;
    }
@ -380,19 +421,19 @@ public class CurrentDayAllQuotaJob implements Job {
                " AND t.session_id = s.id " +
                " AND s.business_type=2 " +
                " AND t.`reply`=1 " +
                " AND TIMESTAMPDIFF(SECOND ,t.create_time ,t.reply_time) <86400 AND TIMESTAMPDIFF(SECOND ,t.create_time,t.reply_time) >0 "+
                " AND TIMESTAMPDIFF(SECOND ,t.create_time ,t.reply_time) <86400 AND TIMESTAMPDIFF(SECOND ,t.create_time,t.reply_time) >0 " +
                " AND t.create_time< '" + tomorrow + "'";
        List<Map<String, Object>> ims = imjdbcTemplate.queryForList(sql);
        //得到医生的id
        List<String> ids=new ArrayList<>();
        List<String> ids = new ArrayList<>();
        ims.stream().forEach(map -> {
            if (map.containsKey("consultId")) {
                ids.add(String.valueOf("'"+map.get("consultId")+"'"));
                ids.add(String.valueOf("'" + map.get("consultId") + "'"));
            }
        });
        System.out.println("23 ims 实时:" +ims.size());
        System.out.println("23 实时sql:" +sql);
        System.out.println("23 ids 实时:" +ids.size());
        System.out.println("23 ims 实时:" + ims.size());
        System.out.println("23 实时sql:" + sql);
        System.out.println("23 ids 实时:" + ids.size());
        return ids;
    }
@ -401,7 +442,7 @@ public class CurrentDayAllQuotaJob implements Job {
     *
     * @return
     */
    public List<Map<String, Object>>  getConsultIdsByIm24() {
    public List<Map<String, Object>> getConsultIdsByIm24() {
        String sql = "SELECT  DISTINCT t.id consultId ,t.reply_time replyTime" +
                " FROM " +
                " topics t, " +
@ -414,31 +455,31 @@ public class CurrentDayAllQuotaJob implements Job {
                " AND t.session_id = s.id " +
                " AND s.business_type=2 " +
                " AND t.`reply`=1 " +
                " AND TIMESTAMPDIFF(SECOND ,t.create_time,t.reply_time) <86400 AND TIMESTAMPDIFF(SECOND ,t.create_time,t.reply_time) >0 "+
                " AND TIMESTAMPDIFF(SECOND ,t.create_time,t.reply_time) <86400 AND TIMESTAMPDIFF(SECOND ,t.create_time,t.reply_time) >0 " +
                " AND t.create_time< '" + tomorrow + "'";
        List<Map<String, Object>> ims = imjdbcTemplate.queryForList(sql);
        return ims;
    }
    public List<ConsultTeamDto> getConsultTeams(List<Map<String, Object>> ims, List<ConsultTeam> consultTeams){
    public List<ConsultTeamDto> getConsultTeams(List<Map<String, Object>> ims, List<ConsultTeam> consultTeams) {
        List<ConsultTeamDto> rs = new ArrayList<>();
        if(consultTeams!=null&&consultTeams.size()>0&&ims!=null&&ims.size()>0){
        if (consultTeams != null && consultTeams.size() > 0 && ims != null && ims.size() > 0) {
            //將List转换为Map,减小循环层级
            Map<String,Object> mapList = new HashedMap();
            for(Map<String, Object> m : ims){
                mapList.put(m.get("consultId").toString(),m);
            Map<String, Object> mapList = new HashedMap();
            for (Map<String, Object> m : ims) {
                mapList.put(m.get("consultId").toString(), m);
            }
            //合并结果集
            for(ConsultTeam consultTeam :consultTeams){
            for (ConsultTeam consultTeam : consultTeams) {
                ConsultTeamDto con = new ConsultTeamDto();
                String key = consultTeam.getConsult();
                Map<String, Object> ms = (Map<String, Object>)mapList.get(key);
                Map<String, Object> ms = (Map<String, Object>) mapList.get(key);
                con.setConsult(key);
                con.setId(consultTeam.getId());
                con.setAdminTeamCode(consultTeam.getAdminTeamCode());
                con.setReplyTime((Date)ms.get("replyTime"));
                con.setReplyTime((Date) ms.get("replyTime"));
                rs.add(con);
            }
            return rs;
@ -446,10 +487,11 @@ public class CurrentDayAllQuotaJob implements Job {
        return rs;
    }
    private void computequota_21() {
        try{
        try {
            //找出今天的签约信息 yesterday,now
            String sql=" SELECT " +
            String sql = " SELECT " +
                    "  sf. CODE, " +
                    "  sf.idcard, " +
                    "  sf.hospital, " +
@ -462,26 +504,26 @@ public class CurrentDayAllQuotaJob implements Job {
                    " AND sf.type = 2 " +
                    " AND sf. STATUS IN (1, 2) " +
                    " AND p.openid is not null  " +
                    " AND p.openid_time <'" +tomorrow+"' ";
                    " AND p.openid_time <'" + tomorrow + "' ";
            //抽取數據
            List<SignFamily> signFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
            List<SignFamily> signFamilies = SpringUtil.getBean(DBExtract.class).extract(SignFamily.class, sql);
            //清洗數據
            FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,sql,"now");
            FilterModel etlModels = SpringUtil.getBean(SignDataFilter.class).filter(signFamilies, sql, "now");
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>> returnDatas = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //保存数据
            SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas,null,"21");
            SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas, null, "21");
            allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
            allContent.append("统计失败:"+e.getMessage());
            allContent.append("统计失败:" + e.getMessage());
        }
        allContent.append("-----------21----------");
    }
    private void computequota_20() {
        try{
            String sql=" SELECT " +
        try {
            String sql = " SELECT " +
                    "  sf. CODE, " +
                    "  sf.idcard, " +
                    "  sf.hospital, " +
@ -494,192 +536,193 @@ public class CurrentDayAllQuotaJob implements Job {
                    " AND sf.type = 2 " +
                    " AND pd.del=0 " +
                    " AND sf. STATUS IN (1, 2) " +
                    " AND pd.czrq <' "+tomorrow+"' ";
                    " AND pd.czrq <' " + tomorrow + "' ";
            //抽取數據
            List<SignFamily> signFamilies=  SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
            List<SignFamily> signFamilies = SpringUtil.getBean(DBExtract.class).extract(SignFamily.class, sql);
            //清洗數據
            FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,sql,"now");
            FilterModel etlModels = SpringUtil.getBean(SignDataFilter.class).filter(signFamilies, sql, "now");
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>> returnDatas = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //保存数据
            SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas,null,"20");
            SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas, null, "20");
            allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
            allContent.append("统计失败:"+e.getMessage());
            allContent.append("统计失败:" + e.getMessage());
        }
        allContent.append("-----------20----------");
    }
    private void initCurrentExpire() {
        try{
            if(StringUtils.isEmpty(currentExpire)){
                currentExpire="2";//默认是2小时
        try {
            if (StringUtils.isEmpty(currentExpire)) {
                currentExpire = "2";//默认是2小时
            }
            if(!org.apache.commons.lang.StringUtils.isNumeric(currentExpire)){
                currentExpire="2";//默认是2小时
            }else{
                Integer cout =Integer.valueOf(currentExpire);
                if(cout<=0){
                    currentExpire="2";//默认是2小时
            if (!org.apache.commons.lang.StringUtils.isNumeric(currentExpire)) {
                currentExpire = "2";//默认是2小时
            } else {
                Integer cout = Integer.valueOf(currentExpire);
                if (cout <= 0) {
                    currentExpire = "2";//默认是2小时
                }
            }
        }catch (Exception e){
            currentExpire="2";//默认是2小时
        } catch (Exception e) {
            currentExpire = "2";//默认是2小时
        }
    }
    private void computequota_17(String sql, List<SignFamily> signFamilies, Object o) {
        String quotaId="17";
        try{
        String quotaId = "17";
        try {
            //清洗數據
            FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,SignDataFilter.level2AgeDisease,sql,null);
            FilterModel etlModels = SpringUtil.getBean(SignDataFilter.class).filter(signFamilies, SignDataFilter.level2AgeDisease, sql, null);
            //统计数据 1级维度
            List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>> returnDatas = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //统计数据 二级维度
            List<Map<String, Map<String, List<ETLModel>>>>  level2Data= SpringUtil.getBean(Level2Role.class).elt(returnDatas);
            List<Map<String, Map<String, List<ETLModel>>>> level2Data = SpringUtil.getBean(Level2Role.class).elt(returnDatas);
            //保存数据 1 表示:从1开始循环 6表示:循环6次 3表示 2级维度是 3
            SpringUtil.getBean(RedisStorage.class).saveByLevel2(level2Data,null,quotaId,3,7,1);
            SpringUtil.getBean(RedisStorage.class).saveByLevel2(level2Data, null, quotaId, 3, 7, 1);
            allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
            allContent.append("统计失败:"+e.getMessage());
            allContent.append("统计失败:" + e.getMessage());
        }
        allContent.append("-----------17----------");
    }
    private void computequota_16_1(String sql,List<SignFamily> signFamilies_1,List<SignFamily> deleteSignFamilies) {
        String quotaId="16";
        try{
            sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and (expenses_status !=1 or expenses_status is null) and status in (1,2) and    a.apply_date< '"+tomorrow+"' ";
            String sqlCount=" select count(id) from wlyy_sign_family a where  a.type =2 and (expenses_status !=1 or expenses_status is null) and status in (1,2) and  a.apply_date< '"+tomorrow+"' ";
            List<SignFamily> signFamilies_2= SpringUtil.getBean(DBExtract.class).extractByPage(SignFamily.class,sql,sqlCount,true);
    private void computequota_16_1(String sql, List<SignFamily> signFamilies_1, List<SignFamily> deleteSignFamilies) {
        String quotaId = "16";
        try {
            sql = " select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and (expenses_status !=1 or expenses_status is null) and status in (1,2) and    a.apply_date< '" + tomorrow + "' ";
            String sqlCount = " select count(id) from wlyy_sign_family a where  a.type =2 and (expenses_status !=1 or expenses_status is null) and status in (1,2) and  a.apply_date< '" + tomorrow + "' ";
            List<SignFamily> signFamilies_2 = SpringUtil.getBean(DBExtract.class).extractByPage(SignFamily.class, sql, sqlCount, true);
            signFamilies_2.addAll(signFamilies_1);
            //清洗數據
            FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies_2, SignDataFilter.level2Expenses,sql,null);
            FilterModel etlModels = SpringUtil.getBean(SignDataFilter.class).filter(signFamilies_2, SignDataFilter.level2Expenses, sql, null);
            //统计数据 一级维度
            List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>> returnDatas = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //统计数据 二级维度
            List<Map<String, Map<String, List<ETLModel>>>> level2Data= SpringUtil.getBean(Level2Role.class).elt(returnDatas);
            List<Map<String, Map<String, List<ETLModel>>>> level2Data = SpringUtil.getBean(Level2Role.class).elt(returnDatas);
            //保存redis
            SpringUtil.getBean(RedisStorage.class).saveByLevel2(level2Data,null,quotaId,2,6,0);
            SpringUtil.getBean(RedisStorage.class).saveByLevel2(level2Data, null, quotaId, 2, 6, 0);
            allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
            allContent.append("统计失败:"+e.getMessage());
            allContent.append("统计失败:" + e.getMessage());
        }
        allContent.append("-----------16-1----------");
    }
    private void computequota_13(String sql,List<SignFamily> signFamilies,List<SignFamily> deleteSignFamilies) {
    private void computequota_13(String sql, List<SignFamily> signFamilies, List<SignFamily> deleteSignFamilies) {
        //找出今天的签约信息 yesterday,now
        try{
           //抽取數據 分页抽取
           //List<SignFamily> signFamilies= SpringUtil.getBean(DBExtract.class).extractByPage(SignFamily.class,sql,sqlCount,true);
           //清洗數據
           FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,sql,null);
           //统计数据
           List<Map<String, List<ETLModel>>>  returnData= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
        try {
            //抽取數據 分页抽取
            //List<SignFamily> signFamilies= SpringUtil.getBean(DBExtract.class).extractByPage(SignFamily.class,sql,sqlCount,true);
            //清洗數據
            FilterModel etlModels = SpringUtil.getBean(SignDataFilter.class).filter(signFamilies, sql, null);
            //统计数据
            List<Map<String, List<ETLModel>>> returnData = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //保存数据
             SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnData,null,"13");
            SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnData, null, "13");
            allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
            allContent.append("统计失败:"+e.getMessage());
            allContent.append("统计失败:" + e.getMessage());
        }
        allContent.append("-----------13----------");
    }
    private void computequota_16_0(String sql,List<SignFamily> signFamilies_1,List<SignFamily> deleteSignFamilies) {
        String quotaId="16";
    private void computequota_16_0(String sql, List<SignFamily> signFamilies_1, List<SignFamily> deleteSignFamilies) {
        String quotaId = "16";
        //找出今天的签约信息
        try{
        try {
            //抽取第二种条件的语句 找出未缴费的
            sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and (expenses_status =0 or expenses_status is null) and    a.apply_date< '"+tomorrow+"' ";
            String sqlCount=" select count(id) from wlyy_sign_family a where  a.type =2 and (expenses_status =0 or expenses_status is null)  and  a.apply_date< '"+tomorrow+"' ";
            List<SignFamily> signFamilies_2= SpringUtil.getBean(DBExtract.class).extractByPage(SignFamily.class,sql,sqlCount,true);
             //清洗數據
            FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies_2, SignDataFilter.level2Expenses,sql,null);
            sql = " select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and (expenses_status =0 or expenses_status is null) and    a.apply_date< '" + tomorrow + "' ";
            String sqlCount = " select count(id) from wlyy_sign_family a where  a.type =2 and (expenses_status =0 or expenses_status is null)  and  a.apply_date< '" + tomorrow + "' ";
            List<SignFamily> signFamilies_2 = SpringUtil.getBean(DBExtract.class).extractByPage(SignFamily.class, sql, sqlCount, true);
            //清洗數據
            FilterModel etlModels = SpringUtil.getBean(SignDataFilter.class).filter(signFamilies_2, SignDataFilter.level2Expenses, sql, null);
            //统计数据
            //统计数据 一级维度
            List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>> returnDatas = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //统计数据 二级维度
            List<Map<String, Map<String, List<ETLModel>>>> level2Data= SpringUtil.getBean(Level2Role.class).elt(returnDatas);
            List<Map<String, Map<String, List<ETLModel>>>> level2Data = SpringUtil.getBean(Level2Role.class).elt(returnDatas);
            //保存数据
            SpringUtil.getBean(RedisStorage.class).saveByLevel2(level2Data,null,quotaId,2,6,0);
            SpringUtil.getBean(RedisStorage.class).saveByLevel2(level2Data, null, quotaId, 2, 6, 0);
            allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
            allContent.append("统计失败:"+e.getMessage());
            allContent.append("统计失败:" + e.getMessage());
        }
        allContent.append("-----------16-0----------");
    }
    private void computequota_15(String sql,List<SignFamily> signFamilies,List<SignFamily> deleteSignFamilies) {
        String quotaId="15";
    private void computequota_15(String sql, List<SignFamily> signFamilies, List<SignFamily> deleteSignFamilies) {
        String quotaId = "15";
        //找出今天的签约信息
        //String sql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and  a.expenses_time>= '"+now+"' and  a.expenses_time< '"+tomorrow+"' and a.expenses_status=1 ";
       try{
           //抽取數據
          // List<SignFamily> signFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
           //清洗數據
           FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies, SignDataFilter.level2Health,sql,null);
           //统计数据 一级维度
           List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
           //统计数据 二级维度
           List<Map<String, Map<String, List<ETLModel>>>> patientSexRoleData= SpringUtil.getBean(Level2Role.class).elt(returnDatas);
        try {
            //抽取數據
            // List<SignFamily> signFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
            //清洗數據
            FilterModel etlModels = SpringUtil.getBean(SignDataFilter.class).filter(signFamilies, SignDataFilter.level2Health, sql, null);
            //统计数据 一级维度
            List<Map<String, List<ETLModel>>> returnDatas = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //统计数据 二级维度
            List<Map<String, Map<String, List<ETLModel>>>> patientSexRoleData = SpringUtil.getBean(Level2Role.class).elt(returnDatas);
            //保存数据
             SpringUtil.getBean(RedisStorage.class).saveByLevel2(patientSexRoleData,null,quotaId,4,5,0);
           allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        }catch (Exception e){
            SpringUtil.getBean(RedisStorage.class).saveByLevel2(patientSexRoleData, null, quotaId, 4, 5, 0);
            allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        } catch (Exception e) {
            e.printStackTrace();
           allContent.append("统计失败:"+e.getMessage());
            allContent.append("统计失败:" + e.getMessage());
        }
        allContent.append("-----------15----------");
    }
    private void computequota_12(String sql,List<SignFamily> signFamilies,List<SignFamily> deleteSignFamilies) throws Exception{
        String quotaId="12";
    private void computequota_12(String sql, List<SignFamily> signFamilies, List<SignFamily> deleteSignFamilies) throws Exception {
        String quotaId = "12";
        //找出今天的签约信息
        //String sql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and  a.expenses_time>= '"+now+"' and  a.expenses_time< '"+tomorrow+"' and a.expenses_status=1 ";
        //String deleteSql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and  a.czrq>= '"+now+"' and  a.czrq< '"+tomorrow+"' and a.expenses_status=3  ";
        try{
             //抽取數據
           // List<SignFamily> signFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
        try {
            //抽取數據
            // List<SignFamily> signFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
            //清洗數據
            FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,SignDataFilter.level2Age,SignDataFilter.level3Disease,sql,null);
            FilterModel etlModels = SpringUtil.getBean(SignDataFilter.class).filter(signFamilies, SignDataFilter.level2Age, SignDataFilter.level3Disease, sql, null);
            //统计数据 一级维度
            List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>> returnDatas = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //统计数据 二级维度
            List<Map<String, Map<String, List<ETLModel>>>> patientSexRoleData= SpringUtil.getBean(Level2Role.class).elt(returnDatas);
            List<Map<String, Map<String, List<ETLModel>>>> patientSexRoleData = SpringUtil.getBean(Level2Role.class).elt(returnDatas);
            //统计数据 三级维度
            List<Map<String, Map<String, Map<String, List<ETLModel>>>>> returnD= SpringUtil.getBean(Level3Role.class).elt(patientSexRoleData);
            List<Map<String, Map<String, Map<String, List<ETLModel>>>>> returnD = SpringUtil.getBean(Level3Role.class).elt(patientSexRoleData);
            //保存数据
             SpringUtil.getBean(RedisStorage.class).saveByLevel3(returnD,null,quotaId,6,4,2,1,1,1);
        }catch (Exception e){
            SpringUtil.getBean(RedisStorage.class).saveByLevel3(returnD, null, quotaId, 6, 4, 2, 1, 1, 1);
        } catch (Exception e) {
        }
        allContent.append("-----------12----------");
    }
    private void compute(Map<String, Map<String, Map>> rootMap, String rootKey, String ageCode, String diseaseType) {
        if (rootMap.containsKey(rootKey)) {
            //得到市下面的所有的年龄map
            Map<String, Map> groupMapTemp = rootMap.get(rootKey);
            if(groupMapTemp.containsKey(ageCode)){
            if (groupMapTemp.containsKey(ageCode)) {
                //得到这个年龄下的患者map
                Map<String,Long> mape= groupMapTemp.get(ageCode);
                if(mape.containsKey(diseaseType)){
                    mape.put(diseaseType,mape.get(diseaseType)+1L);
                }else{
                    mape.put(diseaseType,1L);
                Map<String, Long> mape = groupMapTemp.get(ageCode);
                if (mape.containsKey(diseaseType)) {
                    mape.put(diseaseType, mape.get(diseaseType) + 1L);
                } else {
                    mape.put(diseaseType, 1L);
                }
            }else{
            } else {
                //新增疾病的统计map
                Map<String, Long> groupMapTemp1 = new HashMap<String, Long>();
                groupMapTemp1.put(diseaseType, 1L);
                groupMapTemp.put(ageCode,groupMapTemp1);
                groupMapTemp.put(ageCode, groupMapTemp1);
            }
        } else {
            //没有就新建统计数据  新增疾病的统计map
@ -687,75 +730,76 @@ public class CurrentDayAllQuotaJob implements Job {
            groupMapTemp.put(diseaseType, 1L);
            //把统计疾病的map放入对应的年龄组map中
            Map<String, Map> groupMapTemp2 = new HashMap<String, Map>();
            groupMapTemp2.put(ageCode,groupMapTemp);
            groupMapTemp2.put(ageCode, groupMapTemp);
            //把年龄组map放入市的map里面
            rootMap.put(rootKey, groupMapTemp2);
        }
    }
    private void computequota_1(String sql,List<SignFamily> signFamilies,List<SignFamily> deleteSignFamilies) {
        try{
    private void computequota_1(String sql, List<SignFamily> signFamilies, List<SignFamily> deleteSignFamilies) {
        try {
            //清洗數據
            FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,sql,"now");
            FilterModel etlModels = SpringUtil.getBean(SignDataFilter.class).filter(signFamilies, sql, "now");
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>> returnDatas = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //保存数据
             SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas,null,"1");
            SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas, null, "1");
            allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
            allContent.append("统计失败:"+e.getMessage());
            allContent.append("统计失败:" + e.getMessage());
        }
        allContent.append("-----------1----------");
    }
    private void computequota_2() {
        String quotaId="2";
        try{
        String quotaId = "2";
        try {
            //找出今天的解约信息
            String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and a.status in(-3,-4) and  a.apply_unsign_date< '"+tomorrow+"' ";
            String sql = " select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and a.status in(-3,-4) and  a.apply_unsign_date< '" + tomorrow + "' ";
            //抽取數據
            List<SignFamily> signFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
            List<SignFamily> signFamilies = SpringUtil.getBean(DBExtract.class).extract(SignFamily.class, sql);
            //清洗數據
            FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,sql);
            FilterModel etlModels = SpringUtil.getBean(SignDataFilter.class).filter(signFamilies, sql);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>> returnDatas = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //保存数据
             SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas,null,quotaId);
            SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas, null, quotaId);
            allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
            allContent.append("统计失败:"+e.getMessage());
            allContent.append("统计失败:" + e.getMessage());
        }
         allContent.append("----------2-----------");
        allContent.append("----------2-----------");
    }
    private void computequota_3() {
        String quotaId="3";
        try{
        String quotaId = "3";
        try {
            //找出今天的咨询信息
            String sql=" select * from wlyy_consult_team a where  a.czrq>= '"+now+"'and a.czrq< '"+tomorrow+"'";
            String sql = " select * from wlyy_consult_team a where  a.czrq>= '" + now + "'and a.czrq< '" + tomorrow + "'";
            //抽取數據
            List<ConsultTeam> consultTeams= SpringUtil.getBean(DBExtract.class).extract(ConsultTeam.class,sql);
            List<ConsultTeam> consultTeams = SpringUtil.getBean(DBExtract.class).extract(ConsultTeam.class, sql);
            //過濾數據
            FilterModel etlModels= consultDataFilter.filter(consultTeams,sql,null);
            FilterModel etlModels = consultDataFilter.filter(consultTeams, sql, null);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>> returnDatas = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //保存数据
             SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas,null,quotaId);
            SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas, null, quotaId);
            allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
            allContent.append("统计失败:"+e.getMessage());
            allContent.append("统计失败:" + e.getMessage());
        }
         allContent.append("----------3-----------");
        allContent.append("----------3-----------");
    }
    private void computequota_4() {
        String quotaId="4";
        try{
        String quotaId = "4";
        try {
            //找出今天的随访信息
            String sql=" select * from wlyy_followup a where  a.status=1 and  a.followup_plan_date< '"+tomorrow+"' and a.followup_plan_date>= '"+now+"' ";
            String sql = " select * from wlyy_followup a where  a.status=1 and  a.followup_plan_date< '" + tomorrow + "' and a.followup_plan_date>= '" + now + "' ";
            //找出今天的随访信息
            List<Map<String, Object>> plans = jdbcTemplate.queryForList(sql);
@ -764,204 +808,207 @@ public class CurrentDayAllQuotaJob implements Job {
            // 统计数据
            List<Map<String, List<ETLModel>>> returnDatas = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //保存数据
             SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas,null,quotaId);
            SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas, null, quotaId);
            allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
            allContent.append("统计失败:"+e.getMessage());
        }allContent.append("-----------4----------");
            allContent.append("统计失败:" + e.getMessage());
        }
        allContent.append("-----------4----------");
    }
    private void computequota_5() {
        String quotaId="5";
        String quotaId = "5";
        String sql="SELECT * FROM wlyy_patient_health_guidance a WHERE a.create_time< '"+tomorrow+"' and a.create_time>= '"+now+"'";
        try{
        String sql = "SELECT * FROM wlyy_patient_health_guidance a WHERE a.create_time< '" + tomorrow + "' and a.create_time>= '" + now + "'";
        try {
            //抽取數據
            List<PatientHealthGuidance> consultTeams= SpringUtil.getBean(DBExtract.class).extract(PatientHealthGuidance.class,sql);
            List<PatientHealthGuidance> consultTeams = SpringUtil.getBean(DBExtract.class).extract(PatientHealthGuidance.class, sql);
            //過濾數據
            FilterModel etlModels= healthGuideDataFilter.filter(consultTeams,sql,null);
            FilterModel etlModels = healthGuideDataFilter.filter(consultTeams, sql, null);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>> returnDatas = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //保存数据
             SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas,null,quotaId);
            SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas, null, quotaId);
            allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
            allContent.append("统计失败:"+e.getMessage());
            allContent.append("统计失败:" + e.getMessage());
        }
        allContent.append("-----------5----------");
    }
    private void computequota_6(String sql,List<SignFamily> signFamilies,List<SignFamily> deleteSignFamilies) throws Exception {
        String quotaId="6";
    private void computequota_6(String sql, List<SignFamily> signFamilies, List<SignFamily> deleteSignFamilies) throws Exception {
        String quotaId = "6";
        //找出今天的签约信息
      //  String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and  a.expenses_time>= '"+now+"' and  a.expenses_time< '"+tomorrow+"' and a.expenses_status=1 ";
       try{
           //抽取數據
           //List<SignFamily> signFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
           //清洗數據
           FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,SignDataFilter.level2Sex,sql,null);
           //统计数据 1级维度
           List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
           //统计数据 二级维度
           List<Map<String, Map<String, List<ETLModel>>>>  level2Data= SpringUtil.getBean(Level2Role.class).elt(returnDatas);;
        //  String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and  a.expenses_time>= '"+now+"' and  a.expenses_time< '"+tomorrow+"' and a.expenses_status=1 ";
        try {
            //抽取數據
            //List<SignFamily> signFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
            //清洗數據
            FilterModel etlModels = SpringUtil.getBean(SignDataFilter.class).filter(signFamilies, SignDataFilter.level2Sex, sql, null);
            //统计数据 1级维度
            List<Map<String, List<ETLModel>>> returnDatas = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //统计数据 二级维度
            List<Map<String, Map<String, List<ETLModel>>>> level2Data = SpringUtil.getBean(Level2Role.class).elt(returnDatas);
            ;
            //保存数据
            SpringUtil.getBean(RedisStorage.class).saveByLevel2(level2Data,null,quotaId,3,1);
           allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        }catch (Exception e){
            SpringUtil.getBean(RedisStorage.class).saveByLevel2(level2Data, null, quotaId, 3, 1);
            allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        } catch (Exception e) {
            e.printStackTrace();
           allContent.append("统计失败:"+e.getMessage());
            allContent.append("统计失败:" + e.getMessage());
        }
        allContent.append("-----------6----------");
    }
    private void computequota_7(String sql,List<SignFamily> signFamilies,List<SignFamily> deleteSignFamilies) {
        String quotaId="7";
        try{
          //  String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and  a.expenses_time>= '"+now+"' and  a.expenses_time< '"+tomorrow+"' and a.expenses_status=1 ";
    private void computequota_7(String sql, List<SignFamily> signFamilies, List<SignFamily> deleteSignFamilies) {
        String quotaId = "7";
        try {
            //  String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and  a.expenses_time>= '"+now+"' and  a.expenses_time< '"+tomorrow+"' and a.expenses_status=1 ";
            //抽取數據
            //List<SignFamily> signFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
            //清洗數據
            FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,SignDataFilter.level2Group,sql,null);
            FilterModel etlModels = SpringUtil.getBean(SignDataFilter.class).filter(signFamilies, SignDataFilter.level2Group, sql, null);
            //统计数据 1级维度
            List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>> returnDatas = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //统计数据 二级维度
            List<Map<String, Map<String, List<ETLModel>>>>  level2Data= SpringUtil.getBean(Level2Role.class).elt(returnDatas);
            List<Map<String, Map<String, List<ETLModel>>>> level2Data = SpringUtil.getBean(Level2Role.class).elt(returnDatas);
            //保存数据 1 表示:从1开始循环 6表示:循环6次 3表示 2级维度是 3
             SpringUtil.getBean(RedisStorage.class).saveByLevel2(level2Data,null,quotaId,7,3,-1);
            SpringUtil.getBean(RedisStorage.class).saveByLevel2(level2Data, null, quotaId, 7, 3, -1);
            allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
            allContent.append("统计失败:"+e.getMessage());
            allContent.append("统计失败:" + e.getMessage());
        }
        allContent.append("----------7-----------");
    }
    private void computequota_8(String sql,List<SignFamily> signFamilies,List<SignFamily> deleteSignFamilies)throws Exception {
        String quotaId="8";
        try{
    private void computequota_8(String sql, List<SignFamily> signFamilies, List<SignFamily> deleteSignFamilies) throws Exception {
        String quotaId = "8";
        try {
            //找出今天的签约信息
           // String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2  and  a.expenses_time>= '"+now+"' and  a.expenses_time< '"+tomorrow+"' and a.expenses_status=1 ";
            // String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2  and  a.expenses_time>= '"+now+"' and  a.expenses_time< '"+tomorrow+"' and a.expenses_status=1 ";
            //抽取數據
           // List<SignFamily> signFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
            // List<SignFamily> signFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
            //清洗數據
            FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,SignDataFilter.level2Age,sql,null);
            FilterModel etlModels = SpringUtil.getBean(SignDataFilter.class).filter(signFamilies, SignDataFilter.level2Age, sql, null);
            //统计数据 1级维度
            List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>> returnDatas = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //统计数据 二级维度
            List<Map<String, Map<String, List<ETLModel>>>>  level2Data= SpringUtil.getBean(Level2Role.class).elt(returnDatas);;
            List<Map<String, Map<String, List<ETLModel>>>> level2Data = SpringUtil.getBean(Level2Role.class).elt(returnDatas);
            ;
            //保存数据
             SpringUtil.getBean(RedisStorage.class).saveByLevel2(level2Data,null,quotaId,6,2);
            SpringUtil.getBean(RedisStorage.class).saveByLevel2(level2Data, null, quotaId, 6, 2);
            allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
            allContent.append("统计失败:"+e.getMessage());
            allContent.append("统计失败:" + e.getMessage());
        }
        allContent.append("----------8-----------");
    }
    private void computequota_9() {
        String quotaId="9";
        String quotaId = "9";
        //找出今天的待签约信息
        String sql=" select id,code,idcard,hospital,admin_team_code,doctor,doctor_health from wlyy_sign_family a where   a.type =2  and a.status=0 and  a.patient_apply_date< '"+tomorrow+"'  ";
        try{
        String sql = " select id,code,idcard,hospital,admin_team_code,doctor,doctor_health from wlyy_sign_family a where   a.type =2  and a.status=0 and  a.patient_apply_date< '" + tomorrow + "'  ";
        try {
            //抽取數據
            List<SignFamily> signFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
            List<SignFamily> signFamilies = SpringUtil.getBean(DBExtract.class).extract(SignFamily.class, sql);
            //清洗數據
            FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filterNoTeam(signFamilies,null,null,sql,"now");
            FilterModel etlModels = SpringUtil.getBean(SignDataFilter.class).filterNoTeam(signFamilies, null, null, sql, "now");
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>> returnDatas = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //保存数据
             SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas,null,quotaId);
            SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas, null, quotaId);
            allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
            allContent.append("统计失败:"+e.getMessage());
            allContent.append("统计失败:" + e.getMessage());
        }
         allContent.append("----------9-----------");
        allContent.append("----------9-----------");
    }
    private void computequota_10() {
        String quotaId="10";
       try{
        String quotaId = "10";
        try {
            //找出今天的已改簽信息
            String sql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and a.status =100 and   a.patient_apply_date< '"+tomorrow+"' and a.expenses_status=1 ";
            String sql = " select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and a.status =100 and   a.patient_apply_date< '" + tomorrow + "' and a.expenses_status=1 ";
            //抽取數據
            List<SignFamily> signFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
            List<SignFamily> signFamilies = SpringUtil.getBean(DBExtract.class).extract(SignFamily.class, sql);
            //清洗數據
            FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,sql,null);
            FilterModel etlModels = SpringUtil.getBean(SignDataFilter.class).filter(signFamilies, sql, null);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>> returnDatas = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //保存数据
             SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas,null,quotaId);
           allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        }catch (Exception e){
            SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas, null, quotaId);
            allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        } catch (Exception e) {
            e.printStackTrace();
           allContent.append("统计失败:"+e.getMessage());
            allContent.append("统计失败:" + e.getMessage());
        }
        allContent.append("-----------10----------");
    }
    private void computequota_25() {
        String quotaId="25";
        try{
        String quotaId = "25";
        try {
            //找出总的咨询信息
            String sql=" select * from wlyy_consult_team a where a.czrq< '"+tomorrow+"'";
            String sql = " select * from wlyy_consult_team a where a.czrq< '" + tomorrow + "'";
            //抽取數據
            List<ConsultTeam> consultTeams= SpringUtil.getBean(DBExtract.class).extract(ConsultTeam.class,sql);
            List<ConsultTeam> consultTeams = SpringUtil.getBean(DBExtract.class).extract(ConsultTeam.class, sql);
            //過濾數據
            FilterModel etlModels= consultDataFilter.filter(consultTeams,sql,null);
            FilterModel etlModels = consultDataFilter.filter(consultTeams, sql, null);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>> returnDatas = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //保存数据
            SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas,null,quotaId);
            SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas, null, quotaId);
            allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
            allContent.append("统计失败:"+e.getMessage());
            allContent.append("统计失败:" + e.getMessage());
        }
        allContent.append("----------25-----------");
    }
    private void computequota_26() {
        String quotaId="26";
        try{
        String quotaId = "26";
        try {
            //找出今天统计未缴费签约总数
            String sql="select code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and  a.status>0  and  a.apply_date< '"+tomorrow+"' and a.expenses_status=0 ";
            String sql = "select code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and  a.status>0  and  a.apply_date< '" + tomorrow + "' and a.expenses_status=0 ";
            //抽取數據
            List<SignFamily> signFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
            List<SignFamily> signFamilies = SpringUtil.getBean(DBExtract.class).extract(SignFamily.class, sql);
            //清洗數據
            FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,sql,null);
            FilterModel etlModels = SpringUtil.getBean(SignDataFilter.class).filter(signFamilies, sql, null);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>> returnDatas = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //保存数据
            SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas,null,quotaId);
            SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas, null, quotaId);
            allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
            allContent.append("统计失败:"+e.getMessage());
            allContent.append("统计失败:" + e.getMessage());
        }
        allContent.append("-----------26----------");
    }
    private void computequota_27() {
        String quotaId="27";
        String quotaId = "27";
        String sql="select w.id,w.patient from  wlyy_patient_reservation w,wlyy_doctor d where w.doctor = d.code and  w.doctor is not null and w.dname is not null and w.czrq< '"+tomorrow+"' and w.czrq>= '"+now+"'";
        try{
        String sql = "select w.id,w.patient from  wlyy_patient_reservation w,wlyy_doctor d where w.doctor = d.code and  w.doctor is not null and w.dname is not null and w.czrq< '" + tomorrow + "' and w.czrq>= '" + now + "'";
        try {
            //抽取數據
            List<PatientReservation> patientReservations = SpringUtil.getBean(DBExtract.class).extract(PatientReservation.class,sql);
            List<PatientReservation> patientReservations = SpringUtil.getBean(DBExtract.class).extract(PatientReservation.class, sql);
            //過濾數據
            FilterModel etlModels= agentAppointmentFilter.filter(patientReservations,sql,null);
            FilterModel etlModels = agentAppointmentFilter.filter(patientReservations, sql, null);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            List<Map<String, List<ETLModel>>> returnDatas = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //保存数据
            SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas,null,quotaId);
            SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas, null, quotaId);
            allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        }catch (Exception e){
        } catch (Exception e) {
            e.printStackTrace();
            allContent.append("统计失败:"+e.getMessage());
            allContent.append("统计失败:" + e.getMessage());
        }
        allContent.append("-----------27----------");
    }
@ -970,124 +1017,128 @@ public class CurrentDayAllQuotaJob implements Job {
     * SQL统计平均值存储redis
     * 统计市,区,机构,团队医生满意度
     */
    private void  computequota_28(){
    private void computequota_28() {
        //获取市,区统计结果
        List<Map<String,Object>> m1 = getCityTowms();
        List<Map<String, Object>> m1 = getCityTowms();
        JSONObject json1 = new JSONObject();
        json1.put("data",m1);
        String key = "quota:28:4:"+Constant.city+":3:"+RedisStorage.timeKey;
        redisTemplate.opsForValue().set(key,json1.toString());
        json1.put("data", m1);
        String key = "quota:28:4:" + Constant.city + ":3:" + RedisStorage.timeKey;
        redisTemplate.opsForValue().set(key, json1.toString());
        RedisStorage.keys.add(key);
        //获取市,机构统计结果
        List<Map<String,Object>> m2 = getCityHoss();
        List<Map<String, Object>> m2 = getCityHoss();
        JSONObject json2 = new JSONObject();
        json2.put("data",m2);
        String key1 = "quota:28:4:"+Constant.city+":2:"+RedisStorage.timeKey;
        redisTemplate.opsForValue().set(key1,json2.toString());
        json2.put("data", m2);
        String key1 = "quota:28:4:" + Constant.city + ":2:" + RedisStorage.timeKey;
        redisTemplate.opsForValue().set(key1, json2.toString());
        RedisStorage.keys.add(key1);
        //统计区级低下所有机构
        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);
        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);
                String key2 ="quota:28:3:"+town+":2:"+RedisStorage.timeKey;
                redisTemplate.opsForValue().set(key2,json3.toString());
                json3.put("data", m3);
                String key2 = "quota:28:3:" + town + ":2:" + RedisStorage.timeKey;
                redisTemplate.opsForValue().set(key2, json3.toString());
                RedisStorage.keys.add(key2);
            }
        }
        //得到所有机构
        List<Map<String,Object>> allHs = getAllHoss();
        List<Map<String, Object>> allHs = getAllHoss();
        //得到所有团队统计结果
        List<Map<String,Object>> allTs =getAllHosTeams();
        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)){
        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);
                String k = "quota:28:2:"+code+":1:"+RedisStorage.timeKey;
                redisTemplate.opsForValue().set(k,json.toString());
                json.put("data", hosTeams);
                String k = "quota:28:2:" + code + ":1:" + RedisStorage.timeKey;
                redisTemplate.opsForValue().set(k, json.toString());
                RedisStorage.keys.add(k);
            }
        }
    }
    public List<Map<String,Object>> getCityTowms(){
        List<Map<String,Object>> map = jdbcTemplate.queryForList(getAvgSqlByCode("city_town_SQL"));
    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"));
    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});
    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"));
    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"));
    public List<Map<String, Object>> getAllHoss() {
        List<Map<String, Object>> map = jdbcTemplate.queryForList(getAvgSqlByCode("All_hos_SQL"));
        return map;
    }
    public String getAvgSqlByCode(String code){
    public String getAvgSqlByCode(String code) {
        if("city_town_SQL".equals(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 " +
            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 ";
                    " WHERE t.city='" + Constant.city + "' GROUP BY d.town order by avgCount DESC ";
            return city_town_SQL;
        }else if("city_hos_SQL".equals(code)){
        } 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 " +
            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.level = 2 AND t.del='1' AND t.city='"+Constant.city+"' AND LENGTH(t.code)<=10 GROUP BY left(t.code,8) order by avgCount DESC ";
                    " WHERE t.level = 2 AND t.del='1' AND t.city='" + Constant.city + "' AND LENGTH(t.code)<=10 GROUP BY left(t.code,8) order by avgCount DESC ";
            return city_hos_SQL;
        }else if("town_hos_SQL".equals(code)){
        } 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 " +
            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.level = 2 AND t.del='1' AND t.town= ? AND LENGTH(t.code)<=10 GROUP BY left(t.code,8) order by avgCount DESC ";
            return town_hos_SQL;
        }else if("team_SQL".equals(code)){
        } 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 " +
            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 " +
                    " WHERE LENGTH(d.hospital)<=10 "+
                    " WHERE LENGTH(d.hospital)<=10 " +
                    " GROUP BY t.id,left(d.hospital,8) order by avgCount DESC ";
            return team_SQL;
        }else if("All_hos_SQL".equals(code)){
        } else if ("All_hos_SQL".equals(code)) {
            //查找所有机构
            String All_hos_SQL = "SELECT t.code FROM dm_hospital t where t.level = 2 AND t.del='1' AND LENGTH(t.code)<=10 AND t.city ='"+Constant.city+"' GROUP BY left(t.code,8) ";
            String All_hos_SQL = "SELECT t.code FROM dm_hospital t where t.level = 2 AND t.del='1' AND LENGTH(t.code)<=10 AND t.city ='" + Constant.city + "' GROUP BY left(t.code,8) ";
            return All_hos_SQL;
        }
    return "";
        return "";
    }
    public static String getDayString(Integer size) {
@ -1103,6 +1154,7 @@ public class CurrentDayAllQuotaJob implements Job {
    /**
     * 根据年龄得到对应的code
     *
     * @param age
     * @return
     */
@ -1122,16 +1174,16 @@ public class CurrentDayAllQuotaJob implements Job {
        }
    }
    private String saveContent(String id,Integer size, Long qkCount, Long orgCount, Long townCount, Long cityCount, boolean isAll, StringBuffer errorContent,Long errorCount) {
        StringBuffer string=new StringBuffer("统计 quotaid:"+id+" 的数据完成 ,数据库查询到签约数目:"+size);
        string.append(",过滤的脏数据数目:"+errorCount);
        string.append(",统计到市的数据总数:"+cityCount);
        string.append(",统计到区的数据总数:"+townCount);
        string.append(",统计到机构的数据总数:"+orgCount);
        string.append(",统计到团队的数据总数:"+qkCount);
        string.append(",是否统计成功:"+isAll);
        if(!isAll){
            string.append(",失败原因:"+errorContent);
    private String saveContent(String id, Integer size, Long qkCount, Long orgCount, Long townCount, Long cityCount, boolean isAll, StringBuffer errorContent, Long errorCount) {
        StringBuffer string = new StringBuffer("统计 quotaid:" + id + " 的数据完成 ,数据库查询到签约数目:" + size);
        string.append(",过滤的脏数据数目:" + errorCount);
        string.append(",统计到市的数据总数:" + cityCount);
        string.append(",统计到区的数据总数:" + townCount);
        string.append(",统计到机构的数据总数:" + orgCount);
        string.append(",统计到团队的数据总数:" + qkCount);
        string.append(",是否统计成功:" + isAll);
        if (!isAll) {
            string.append(",失败原因:" + errorContent);
        }
        return string.toString();
    }

+ 32 - 18
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/NoReyConsultJob.java

@ -53,7 +53,7 @@ public class NoReyConsultJob implements Job {
    //im库的jdbcTemplate
    private JdbcTemplate imjdbcTemplate;
    @Resource(name="imData")
    @Resource(name = "imData")
    private DataSource dataSource;
    String yesterday;
@ -88,7 +88,6 @@ public class NoReyConsultJob implements Job {
    private void computequota() {
        try {
            jdbcTemplate.execute("delete from wlyy_quota_result where quota_date='" + yesterday + "' and quato_code='" + 22 + "'");
            //新建任务日志对象
            QuartzJobLog quartzJobLog = new QuartzJobLog();
            quartzJobLog.setJobStartTime(new Date());
@ -96,22 +95,37 @@ public class NoReyConsultJob implements Job {
            quartzJobLog.setJobName(wlyyJobConfig.getJobName());
            //查找Im库中的所有的医生ID
            List<String> consultIdMaps = getConsultIdsByIm();
            StringBuffer sb=new StringBuffer("");
            for(int i=0;i<consultIdMaps.size();i++){
            List<ConsultTeam> consultTeams = new ArrayList<>();
            StringBuffer sb = new StringBuffer("");
            for (int i = 0; i < consultIdMaps.size(); i++) {
                sb.append(consultIdMaps.get(i));
                if(i<(consultIdMaps.size()-1)){
                if (i < (consultIdMaps.size() - 1)) {
                    sb.append(",");
                }
                if ((1+1) % 100 == 0) {
                    //每隔100统计一次
                    String sql = " select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '" + yesterday + Constant.quota_date_last + "' and a.consult in (" + sb.toString() + ")";
                    //抽取數據
                    List<ConsultTeam> consultTeamsTemp = dbExtract.extract(ConsultTeam.class, sql);
                    consultTeams.addAll(consultTeamsTemp);
                    sb = new StringBuffer();//重置 in条件
                }else{
                    //判断是不是最后的一段
                    if(consultIdMaps.size()==(i+1)){
                        String sql = " select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '" + yesterday + Constant.quota_date_last + "' and a.consult in (" + sb.toString() + ")";
                        //抽取數據
                        List<ConsultTeam> consultTeamsTemp = dbExtract.extract(ConsultTeam.class, sql);
                        consultTeams.addAll(consultTeamsTemp);
                    }
                }
            }
            String sql ="";
            if(consultIdMaps.size()>0){
                sql = " select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '" + yesterday + Constant.quota_date_last + "' and a.consult in ("+sb.toString()+")";
            }else{
            String sql = "";
            if (consultIdMaps.size() > 0) {
                sql = " select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '" + yesterday + Constant.quota_date_last + "' and a.consult in (" + sb.toString() + ")";
            } else {
                sql = " select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '" + yesterday + Constant.quota_date_last + "' and a.consult ='noRey' ";
            } //抽取數據
            List<ConsultTeam> consultTeams = dbExtract.extract(ConsultTeam.class, sql);
            System.out.println("consultTeams num"+consultTeams.size());
            }
            //過濾數據
            FilterModel etlModels = consultDataFilter.filter(consultTeams, sql, yesterday);
            //统计数据
@ -129,7 +143,6 @@ public class NoReyConsultJob implements Job {
        }
    }
    public String getYesterday() {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DATE, -1);
@ -140,6 +153,7 @@ public class NoReyConsultJob implements Job {
    /**
     * 找出 im中的所有未回复的topic
     * 名医有算 求助没有
     *
     * @return
     */
    public List<String> getConsultIdsByIm() {
@ -154,7 +168,7 @@ public class NoReyConsultJob implements Job {
                " AND t.session_id = p.session_id " +
                " AND t.session_id = s.id " +
                " AND s.type = 1 " +
                " AND t.status <>10 "+
                " AND t.status <>10 " +
                " AND t.`reply`=0 " +
                " AND t.create_time< '" + yesterday + Constant.quota_date_last + "'";
        List<Map<String, Object>> ims = imjdbcTemplate.queryForList(sql);
@ -162,12 +176,12 @@ public class NoReyConsultJob implements Job {
        List<String> ids = new ArrayList<>();
        ims.stream().forEach(map -> {
            if (map.containsKey("consultId")) {
                ids.add("'"+ String.valueOf(map.get("consultId"))+"'");
                ids.add("'" + String.valueOf(map.get("consultId")) + "'");
            }
        });
        System.out.println("ims num:"+ims.size());
        System.out.println("sql:"+sql);
        System.out.println("ids num:"+ids.size());
        System.out.println("ims num:" + ims.size());
        System.out.println("sql:" + sql);
        System.out.println("ids num:" + ids.size());
        return ids;
    }
}

+ 19 - 1
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/ReyConsultJob.java

@ -97,11 +97,29 @@ public class ReyConsultJob implements Job {
            //查找Im库中的所有的医生ID
            List<String> consultIdMaps = getConsultIdsByIm();
            StringBuffer sb=new StringBuffer("");
            List<ConsultTeam> consultTeams = new ArrayList<>();
            for(int i=0;i<consultIdMaps.size();i++){
                sb.append(consultIdMaps.get(i));
                if(i<(consultIdMaps.size()-1)){
                    sb.append(",");
                }
                if ((1+1) % 100 == 0) {
                    //每隔100统计一次
                    String sql = " select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '" + yesterday + Constant.quota_date_last + "' and a.consult in (" + sb.toString() + ")";
                    //抽取數據
                    List<ConsultTeam> consultTeamsTemp = dbExtract.extract(ConsultTeam.class, sql);
                    consultTeams.addAll(consultTeamsTemp);
                    sb = new StringBuffer();//重置 in条件
                }else{
                    //判断是不是最后的剩下一端不能被100整除的
                    if(consultIdMaps.size()==(i+1)){
                        String sql = " select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '" + yesterday + Constant.quota_date_last + "' and a.consult in (" + sb.toString() + ")";
                        //抽取數據
                        List<ConsultTeam> consultTeamsTemp = dbExtract.extract(ConsultTeam.class, sql);
                        consultTeams.addAll(consultTeamsTemp);
                    }
                }
            }
            String sql ="";
@ -110,7 +128,7 @@ public class ReyConsultJob implements Job {
            }else{
                sql = " select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '" + yesterday + Constant.quota_date_last + "' and a.consult ='noRey' ";
            } //抽取數據
            List<ConsultTeam> consultTeams = dbExtract.extract(ConsultTeam.class, sql);
            System.out.println("consultTeams num"+consultTeams.size());
            //過濾數據
            FilterModel etlModels = consultDataFilter.filter(consultTeams, sql, yesterday);

+ 20 - 2
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/ReyTimeConsultJob.java

@ -109,11 +109,29 @@ public class ReyTimeConsultJob implements Job {
                }
            });
            StringBuffer sb=new StringBuffer("");
            List<ConsultTeam> consultTeams = new ArrayList<>();
            for(int i=0;i<consultIdMaps.size();i++){
                sb.append(consultIdMaps.get(i));
                if(i<(consultIdMaps.size()-1)){
                    sb.append(",");
                }
                if ((1+1) % 100 == 0) {
                    //每隔100统计一次
                    String sql = " select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '" + yesterday + Constant.quota_date_last + "' and a.consult in (" + sb.toString() + ")";
                    //抽取數據
                    List<ConsultTeam> consultTeamsTemp = dbExtract.extract(ConsultTeam.class, sql);
                    consultTeams.addAll(consultTeamsTemp);
                    sb = new StringBuffer();//重置 in条件
                }else{
                    //判断是不是最后的剩下一端不能被100整除的
                    if(consultIdMaps.size()==(i+1)){
                        String sql = " select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '" + yesterday + Constant.quota_date_last + "' and a.consult in (" + sb.toString() + ")";
                        //抽取數據
                        List<ConsultTeam> consultTeamsTemp = dbExtract.extract(ConsultTeam.class, sql);
                        consultTeams.addAll(consultTeamsTemp);
                    }
                }
            }
            String sql ="";
@ -121,8 +139,8 @@ public class ReyTimeConsultJob implements Job {
                sql = " select admin_team_code,id,consult from wlyy_consult_team a, where  a.czrq< '" + yesterday + Constant.quota_date_last + "' and a.consult in ("+sb.toString()+")";
            }else{
                sql = " select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '" + yesterday + Constant.quota_date_last + "' and a.consult ='noRey' ";
            } //抽取數據
            List<ConsultTeam> consultTeams = dbExtract.extract(ConsultTeam.class, sql);
            }
            //将两个数据库的结果集合并,避免跨库查询
            List<ConsultTeamDto> consultTeamDtos = getConsultTeams(ims,consultTeams);