Browse Source

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

chenweida 8 năm trước cách đây
mục cha
commit
270e789bfd

+ 10 - 0
src/main/java/com/yihu/wlyy/entity/consult/ConsultTeam.java

@ -39,6 +39,16 @@ public class ConsultTeam extends IdEntity {
	private Integer patientRead;    // 患者未读数量
	private Date czrq;              // 咨询时间
	private String del;             // 作废标识,1正常,0作废
	private Long adminTeamId;//行政团队ID
	@Column(name = "admin_team_code")
	public Long getAdminTeamId() {
		return adminTeamId;
	}
	public void setAdminTeamId(Long adminTeamId) {
		this.adminTeamId = adminTeamId;
	}
	public String getConsult() {
		return consult;

+ 66 - 36
src/main/java/com/yihu/wlyy/job/ChangeSignJob.java

@ -1,5 +1,6 @@
package com.yihu.wlyy.job;
import com.yihu.wlyy.entity.doctor.team.admin.AdminTeam;
import com.yihu.wlyy.entity.organization.Hospital;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.doctor.profile.Doctor;
@ -7,6 +8,7 @@ import com.yihu.wlyy.entity.job.QuartzJobLog;
import com.yihu.wlyy.entity.patient.SignFamily;
import com.yihu.wlyy.entity.statistics.WlyyQuotaResult;
import com.yihu.wlyy.repository.address.TownDao;
import com.yihu.wlyy.repository.doctor.DoctorAdminTeamDao;
import com.yihu.wlyy.repository.doctor.DoctorDao;
import com.yihu.wlyy.repository.job.QuartzJobLogDao;
import com.yihu.wlyy.repository.organization.HospitalDao;
@ -49,6 +51,8 @@ public class ChangeSignJob implements Job {
    private TownDao townDao;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    String yesterday;
    String now;
@ -81,10 +85,10 @@ public class ChangeSignJob implements Job {
        quartzJobLog.setJobName(wlyyJobConfig.getJobName());
        //查找出系统全部的全科医生
        List<Doctor> doctors = doctorDao.findAllQKDoctot();
        Map<String, Doctor> doctorsMap = new HashMap<String, Doctor>();
        for (Doctor doctor : doctors) {
            doctorsMap.put(doctor.getCode(), doctor);
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
        Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
        for (AdminTeam adminTeam : adminTeams) {
            adminTeamMap.put(adminTeam.getId()+"", adminTeam);
        }
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospital2();
@ -103,42 +107,55 @@ public class ChangeSignJob implements Job {
        Map<String, Long> tjTownMap = new HashMap<String, Long>();//区级的统计map key 是区行政区划350200
        Map<String, Long> tjOrgMap = new HashMap<String, Long>();//机构的统计map key 是机构的code
        Map<String, Long> tjQkdoctorMap = new HashMap<String, Long>();//团队级的统计map 目前没有团队 先用全科医生统一  key doctorCode
        Long cityCount = 0L;
        Map<String, Long> tjAdminTeamMap = new HashMap<String, Long>();//团队级的统计map 目前没有团队 先用全科医生统一  key doctorCode
        Long cityCount = 0L; //统计到市的数目
        Long townCount = 0L; //统计到所有区的数目
        Long orgCount = 0L;//统计到所有机构的数目
        Long qkCount = 0L;//统计到所有全科医生的数目
        boolean isAll=true;//是否统计失败
        StringBuffer errorContent=new StringBuffer();
        //统计有已改簽的
        String orgCodeTemp="";
        for (SignFamily signFamily : signFamilys) {
            String doctorCode = signFamily.getDoctor();//得到已改簽中全科医生的code
            //统计团队
            compute(tjQkdoctorMap, doctorCode);
            //判断医生属于哪个机构
            Doctor doctor = doctorsMap.get(doctorCode);
            String orgCode = doctor.getHospital();
            //统计机构
            String orgCode = signFamily.getHospital();
            String orgCodeTemp="";
            if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                //统计站
                 orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
                compute(tjOrgMap, orgCodeTemp);
                //站
                orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
            }else{
                //统计社区
                //社区
                orgCodeTemp=orgCode;
                compute(tjOrgMap, orgCode);
            }
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) continue;
            if(hospital == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据异常");
                isAll=false;
                continue;
            }
            AdminTeam adminTeam=adminTeamMap.get(signFamily.getAdminTeamId()+"");
            if(adminTeam == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据异常");
                isAll=false;
                continue;
            }
            //统计市 ---------------start--------------
            cityCount++;
            //统计区 ---------------start--------------
            String townCode = hospital.getTown();
            //统计区
            compute(tjTownMap, townCode);
            //统计市
            cityCount++;
            townCount++;
            //统计机构---------------start--------------
            compute(tjOrgMap, orgCodeTemp);
            orgCount++;
            //统计团队 ---------------start--------------
            String adminTeamId = signFamily.getAdminTeamId()+"";
            compute(tjAdminTeamMap, adminTeamId);
            qkCount++;
        }
        //保存统计的结果
        //保存全科医生的已改簽统计
        //保存全科医生的改签统计
        for (Map.Entry<String, Doctor> entry : doctorsMap.entrySet()) {
            Doctor doctor = doctorsMap.get(entry.getKey());//得到全科医生
            orgCodeTemp=getOrg(doctor.getHospital());
        for (Map.Entry<String, AdminTeam> entry : adminTeamMap.entrySet()) {
            AdminTeam adminTeam = adminTeamMap.get(entry.getKey());//得到全科医生
            String orgCodeTemp=getOrg(adminTeam.getOrgCode());
            Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到全科医生的机构
            if(hospital == null) continue;
            String city=Constant.city;
@ -151,12 +168,12 @@ public class ChangeSignJob implements Job {
                org=hospital.getCode().substring(0,hospital.getCode().length()-2)+"00";
            }
            String orgName=hospital.getName();
            String doctorCode=doctor.getCode();
            String doctorName=doctor.getName();
            String doctorJob=doctor.getJob();
            String doctorCode=adminTeam.getId()+"";
            String doctorName=adminTeam.getName();
            String doctorJob="";
            String level="1";
            String key=doctor.getCode();
            save(tjQkdoctorMap, key, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level);
            String key=adminTeam.getId()+"";
            save(tjAdminTeamMap, key, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level);
        }
        //保存机构的改签统计
        for (Map.Entry<String, Hospital> entry : hospitalsMap.entrySet()) {
@ -212,11 +229,24 @@ public class ChangeSignJob implements Job {
        }
        quartzJobLog.setJobEndTime(new Date());
        quartzJobLog.setJobContent("统计"+getYesterday()+" 的已改簽数据完成 ,得到改签数目:"+signFamilys.size());
        quartzJobLog.setJobType("1");
        quartzJobLog.setJobContent(saveContent(signFamilys,qkCount,orgCount,townCount,cityCount,isAll,errorContent));
        quartzJobLog.setJobType(isAll?"1":"0");
        quartzJobLogDao.save(quartzJobLog);
    }
    private String saveContent(List<SignFamily> signFamilys, Long qkCount, Long orgCount, Long townCount, Long cityCount, boolean isAll, StringBuffer errorContent) {
        StringBuffer string=new StringBuffer("统计"+getYesterday()+" 的已改簽数据完成 ,数据库查询到改签数目:"+signFamilys.size());
        string.append(",统计到市的数据总数:"+cityCount);
        string.append(",统计到区的数据总数:"+townCount);
        string.append(",统计到机构的数据总数:"+orgCount);
        string.append(",统计到团队的数据总数:"+qkCount);
        string.append(",是否统计成功:"+isAll);
        if(!isAll){
            string.append(",失败原因:"+errorContent);
        }
        return string.toString();
    }
    /**
     * 统计规则
     * @param tjQkdoctorMap

+ 27 - 3
src/main/java/com/yihu/wlyy/job/Constant.java

@ -38,9 +38,9 @@ public class Constant {
    public static String level_age_6="6";
    public static String level_age_1_name="0~6";
    public static String level_age_2_name="7~18";
    public static String level_age_3_name="18~30";
    public static String level_age_4_name="30~50";
    public static String level_age_5_name="50~65";
    public static String level_age_3_name="19~30";
    public static String level_age_4_name="31~50";
    public static String level_age_5_name="51~65";
    public static String level_age_6_name=">65";
@ -68,6 +68,30 @@ public class Constant {
    public static String level_disease_3_name="糖尿病和高血压";
    public static String level_disease_4_name="健康人群";
    public static String getLevelGroupName(String key){
        switch (key){
            case "1":{
                return level_group_1_name;
            }
            case "2":{
                return level_group_2_name;
            }
            case "3":{
                return level_group_3_name;
            }
            case "4":{
                return level_group_4_name;
            }
            case "5":{
                return level_group_5_name;
            }
            case "100":{
                return level_group_100_name;
            }
        }
        return "";
    }
    public static String getLevelAgeName(String key){
        switch (key){
            case "1":{

+ 68 - 34
src/main/java/com/yihu/wlyy/job/ConsultJob.java

@ -1,13 +1,16 @@
package com.yihu.wlyy.job;
import com.yihu.wlyy.entity.doctor.team.admin.AdminTeam;
import com.yihu.wlyy.entity.organization.Hospital;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.consult.ConsultTeam;
import com.yihu.wlyy.entity.doctor.profile.Doctor;
import com.yihu.wlyy.entity.job.QuartzJobLog;
import com.yihu.wlyy.entity.patient.SignFamily;
import com.yihu.wlyy.entity.statistics.WlyyQuotaResult;
import com.yihu.wlyy.repository.address.TownDao;
import com.yihu.wlyy.repository.consult.ConsultTeamDao;
import com.yihu.wlyy.repository.doctor.DoctorAdminTeamDao;
import com.yihu.wlyy.repository.doctor.DoctorDao;
import com.yihu.wlyy.repository.job.QuartzJobLogDao;
import com.yihu.wlyy.repository.organization.HospitalDao;
@ -49,6 +52,8 @@ public class ConsultJob implements Job {
    private ConsultTeamDao consultTeamDao;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    String yesterday;
    String now;
@ -76,12 +81,11 @@ public class ConsultJob implements Job {
        quartzJobLog.setJobStartTime(new Date());
        quartzJobLog.setJobId(wlyyJobConfig.getId());
        quartzJobLog.setJobName(wlyyJobConfig.getJobName());
        //查找出系统全部的健康医生
        List<Doctor> doctors = doctorDao.findAllZKDoctot();
        Map<String, Doctor> doctorsMap = new HashMap<String, Doctor>();
        for (Doctor doctor : doctors) {
            doctorsMap.put(doctor.getCode(), doctor);
        //找出全部的团队
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
        Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
        for (AdminTeam adminTeam : adminTeams) {
            adminTeamMap.put(adminTeam.getId()+"", adminTeam);
        }
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospital2();
@ -100,44 +104,60 @@ public class ConsultJob implements Job {
        Map<String, Long> tjTownMap = new HashMap<String, Long>();//区级的统计map key 是区行政区划350200
        Map<String, Long> tjOrgMap = new HashMap<String, Long>();//机构的统计map key 是机构的code
        Map<String, Long> tjQkdoctorMap = new HashMap<String, Long>();//团队级的统计map 目前没有团队 先用全科医生统一  key doctorCode
        Long cityCount = 0L;
        Map<String, Long> tjAdminTeamMap = new HashMap<String, Long>();//团队级的统计map 目前没有团队 先用全科医生统一  key doctorCode
        Long cityCount = 0L; //统计到市的数目
        Long townCount = 0L; //统计到所有区的数目
        Long orgCount = 0L;//统计到所有机构的数目
        Long jkCount = 0L;//统计到所有健康医生的数目
        boolean isAll=true;//是否统计失败
        StringBuffer errorContent=new StringBuffer();
        //统计有咨询的
        String orgCodeTemp="";
        for (ConsultTeam consultTeam : consultTeams) {
            String doctorCode = consultTeam.getDoctor();//得到咨询中健康医生的code
            //统计团队
            compute(tjQkdoctorMap, doctorCode);
            //判断医生属于哪个机构
            Doctor doctor = doctorsMap.get(doctorCode);
            if(doctor==null){
            String teamCode = consultTeam.getAdminTeamId()+"";//行政的团队的id
            AdminTeam adminTeam=adminTeamMap.get(teamCode);
            if(adminTeam == null) {
                errorContent.append("咨询Id:"+consultTeam.getId()+",咨询的团队为空或者不存在");
                isAll=false;
                continue;
            }
            String orgCode = doctor.getHospital();
            String orgCode = adminTeam.getOrgCode();
            String orgCodeTemp="";
            //统计机构
            if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                //统计站
                 orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
                compute(tjOrgMap, orgCodeTemp);
                orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
            }else{
                //统计社区
                orgCodeTemp=orgCode;
                compute(tjOrgMap, orgCode);
            }
            //统计区 ---------------start--------------
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) continue;
            if(hospital == null) {
                errorContent.append("咨询Id:"+consultTeam.getId()+",咨询的健康医生(doctor字段)的所属机构(wlyy_doctor表中的hospital字段)为空或者所属的机构数据有问题");
                isAll=false;
                continue;
            }
            //统计市 ---------------start--------------
            cityCount++;
            //统计区 ---------------start--------------
            String townCode = hospital.getTown();
            //统计区
            compute(tjTownMap, townCode);
            //统计市
            cityCount++;
            townCount++;
            //统计机构 ---------------start--------------
            compute(tjOrgMap, orgCodeTemp);
            orgCount++;
            //统计团队 ---------------start--------------
            compute(tjAdminTeamMap, teamCode);
            jkCount++;
        }
        //保存统计的结果
        //保存全科医生的咨询统计
        for (Map.Entry<String, Doctor> entry : doctorsMap.entrySet()) {
            Doctor doctor = doctorsMap.get(entry.getKey());//得到健康管理师
            orgCodeTemp=getOrg(doctor.getHospital());
        for (Map.Entry<String, AdminTeam> entry : adminTeamMap.entrySet()) {
            AdminTeam adminTeam = adminTeamMap.get(entry.getKey());//得到团队
            String orgCodeTemp=getOrg(adminTeam.getOrgCode());
            Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到全科医生的机构
            if(hospital == null) continue;
            String city=Constant.city;
@ -150,12 +170,12 @@ public class ConsultJob implements Job {
                org=hospital.getCode().substring(0,hospital.getCode().length()-2)+"00";
            }
            String orgName=hospital.getName();
            String doctorCode=doctor.getCode();
            String doctorName=doctor.getName();
            String doctorJob=doctor.getJob();
            String doctorCode=adminTeam.getId()+"";
            String doctorName=adminTeam.getName();
            String doctorJob="";
            String level="1";
            String key=doctor.getCode();
            save(tjQkdoctorMap, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level, key);
            String key=adminTeam.getId()+"";
            save(tjAdminTeamMap, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level, key);
        }
        //保存机构的咨询统计
        for (Map.Entry<String, Hospital> entry : hospitalsMap.entrySet()) {
@ -211,8 +231,8 @@ public class ConsultJob implements Job {
        }
        quartzJobLog.setJobEndTime(new Date());
        quartzJobLog.setJobContent("统计"+getYesterday()+" 的咨询数据完成  ,得到咨詢数目:"+consultTeams.size());
        quartzJobLog.setJobType("1");
        quartzJobLog.setJobContent(saveContent(consultTeams,jkCount,orgCount,townCount,cityCount,isAll,errorContent));
        quartzJobLog.setJobType(isAll?"1":"0");
        quartzJobLogDao.save(quartzJobLog);
    }
@ -276,6 +296,20 @@ public class ConsultJob implements Job {
            return org;
        }
    }
    private String saveContent(List<ConsultTeam> consultTeams, Long qkCount, Long orgCount, Long townCount, Long cityCount, boolean isAll, StringBuffer errorContent) {
        StringBuffer string=new StringBuffer("统计"+getYesterday()+" 的咨询数据完成 ,数据库查询到咨询数目:"+consultTeams.size());
        string.append(",统计到市的数据总数:"+cityCount);
        string.append(",统计到区的数据总数:"+townCount);
        string.append(",统计到机构的数据总数:"+orgCount);
        string.append(",统计到团队的数据总数:"+qkCount);
        string.append(",是否统计成功:"+isAll);
        if(!isAll){
            string.append(",失败原因:"+errorContent);
        }
        return string.toString();
    }
    public String getYesterday() {
        return yesterday;
    }

+ 170 - 74
src/main/java/com/yihu/wlyy/job/CurrentDayAllQuotaJob.java

@ -1,5 +1,6 @@
package com.yihu.wlyy.job;
import com.yihu.wlyy.entity.doctor.team.admin.AdminTeam;
import com.yihu.wlyy.entity.organization.Hospital;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.consult.ConsultTeam;
@ -11,6 +12,7 @@ import com.yihu.wlyy.entity.patient.PatientHealthGuidance;
import com.yihu.wlyy.entity.patient.SignFamily;
import com.yihu.wlyy.repository.address.TownDao;
import com.yihu.wlyy.repository.consult.ConsultTeamDao;
import com.yihu.wlyy.repository.doctor.DoctorAdminTeamDao;
import com.yihu.wlyy.repository.doctor.DoctorDao;
import com.yihu.wlyy.repository.doctor.DoctorPatientGroupInfoDao;
import com.yihu.wlyy.repository.job.QuartzJobLogDao;
@ -62,6 +64,8 @@ public class CurrentDayAllQuotaJob implements Job {
    private PatientDao patientDao;
    @Autowired
    private QuartzJobLogDao quartzJobLogDao;//执行日志Dao
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    private org.apache.tomcat.jdbc.pool.DataSource fvdataSource = new org.apache.tomcat.jdbc.pool.DataSource();//随访数据源
@ -72,10 +76,12 @@ public class CurrentDayAllQuotaJob implements Job {
    List<Hospital> hospitals = null;//系统全部的机构
    List<Doctor> qkdoctors = null;//系统全部的全科医生
    List<Doctor> jkglsdoctors = null;//系统全部的健康管理师
    List<AdminTeam> adminTeams=null;//系统全部的团队
    Map<String, Hospital> hospitalsMap = new HashMap<String, Hospital>();
    Map<String, Doctor> jkglsdoctorsMap = new HashMap<String, Doctor>();
    Map<String, Doctor> qkdoctorsMap = new HashMap<String, Doctor>();
    Map<String, Town> townsMap = new HashMap<String, Town>();
    Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
    @Override
    public void execute(JobExecutionContext context)
            throws JobExecutionException {
@ -104,6 +110,12 @@ public class CurrentDayAllQuotaJob implements Job {
            for (Town town : towns) {
                townsMap.put(town.getCode(), town);
            }
            //查找出系统全部的全科医生
            adminTeams=doctorAdminTeamDao.findAllTeam();
            for (AdminTeam adminTeam : adminTeams) {
                adminTeamMap.put(adminTeam.getId()+"", adminTeam);
            }
            //计算指标
            computequota();
        }catch (Exception e){
@ -115,19 +127,20 @@ public class CurrentDayAllQuotaJob implements Job {
    private void computequota() throws Exception {
        QuartzJobLog quartzJobLog =new QuartzJobLog();
        quartzJobLog.setJobStartTime(new Date());
        computequota_1(); //统计今天的签约
        computequota_2(); //统计今天的解约
        computequota_3(); //统计今天的健康咨询量
        computequota_4(); //统计今天的随访量
        computequota_5(); //统计今天的健康指导
        computequota_6(); //统计今天的签约患者性别
        computequota_7();//统计今天的签约患者分组
        computequota_8();//统计今天的签约患者年龄
        computequota_9();//统计今天的待签约
        computequota_10();//统计今天的改签
        computequota_12();//统计今天的签约下按年龄分组后再
        quartzJobLog.setJobContent("开始实时统计查询");
        StringBuffer errorContent=new StringBuffer();
        computequota_1(errorContent); //统计今天的签约
        computequota_2(errorContent); //统计今天的解约
        computequota_3(errorContent); //统计今天的健康咨询量
        computequota_4(errorContent); //统计今天的随访量
        computequota_5(errorContent); //统计今天的健康指导
        computequota_6(errorContent); //统计今天的签约患者性别
        computequota_7(errorContent);//统计今天的签约患者分组
        computequota_8(errorContent);//统计今天的签约患者年龄
        computequota_9(errorContent);//统计今天的待签约
        computequota_10(errorContent);//统计今天的改签
        computequota_12(errorContent);//统计今天的签约下按年龄分组后再
        quartzJobLog.setJobContent(errorContent.toString());
        quartzJobLog.setJobName("实时统计");
        quartzJobLog.setJobId("11");
        quartzJobLog.setJobType("1");
@ -135,7 +148,8 @@ public class CurrentDayAllQuotaJob implements Job {
        quartzJobLogDao.save(quartzJobLog);
    }
    private void computequota_12() throws Exception{
    private void computequota_12(StringBuffer errorContent) throws Exception{
        errorContent.append("computequota_12---start,");
        String now = getDayString(0);
        String tomorrow = getDayString(1);
        //找出今天的签约信息 yesterday,now
@ -153,6 +167,7 @@ public class CurrentDayAllQuotaJob implements Job {
        }
        //找出今天的签约信息
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterday(now, tomorrow);
        errorContent.append("截止时间:"+now+"-"+DateUtil.dateToStrLong(new Date())+",数据库查询的签约数是:"+signFamilys.size()+",错误:");
        //数组里面第一个是健康人群 第二个是慢病人群 第三个是65岁以上人群
        Map<String, Map<String, Map>> cityAgeMap = new HashMap<String, Map<String, Map>>();//key是市行政代码 目前只有厦门市
        Map<String,Map> temp =new HashMap<String,Map>();
@ -163,7 +178,10 @@ public class CurrentDayAllQuotaJob implements Job {
        //统计有签约的
        for (SignFamily signFamily : signFamilys) {
            Hospital hospital = hospitalsMap.get(getOrg(signFamily.getHospital()));//得到患者签约的机构
            if(hospital == null) continue;
            if(hospital == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据异常。");
                continue;
            }
            String town = hospital.getTown();
            int age = IdCardUtil.getAgeForIdcard(signFamily.getIdcard());//根据card解析年龄
            String ageCode = getAgeCode(age);//得到年龄的code
@ -303,6 +321,7 @@ public class CurrentDayAllQuotaJob implements Job {
                }
            }
        }
        errorContent.append("computequota_12---end!!");
    }
    private void compute(Map<String, Map<String, Map>> rootMap, String rootKey, String ageCode, String diseaseType) {
        if (rootMap.containsKey(rootKey)) {
@ -333,30 +352,36 @@ public class CurrentDayAllQuotaJob implements Job {
            rootMap.put(rootKey, groupMapTemp2);
        }
    }
    private void computequota_1() {
    private void computequota_1(StringBuffer errorContent) {
        errorContent.append("computequota_1---start,");
        //签约需要的统计map
        Map<String, JSONObject> tjCityMap = new HashMap<>();//区级的统计map key 是区行政区划350200
        Map<String, JSONObject> tjTownMap = new HashMap<String, JSONObject>();//区级的统计map key 是区行政区划350200
        Map<String, JSONObject> tjOrgMap = new HashMap<String, JSONObject>();//机构的统计map key 是机构的code
        Map<String, JSONObject> tjQkdoctorMap = new HashMap<String, JSONObject>();//团队级的统计map 目前没有团队 先用全科医生统一  key doctorCode
        Map<String, JSONObject> tjAdminTeamMap = new HashMap<String, JSONObject>();//团队级的统计map 目前没有团队 先用全科医生统一  key doctorCode
        initMap(tjCityMap, tjTownMap, tjOrgMap, tjQkdoctorMap, null);
        initMap(tjCityMap, tjTownMap, tjOrgMap, null, null,tjAdminTeamMap);
        //找出今天的签约信息 yesterday,now
        String now = getDayString(0);
        String tomorrow = getDayString(1);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterday(now, tomorrow);
        errorContent.append("截止时间:"+now+"-"+DateUtil.dateToStrLong(new Date())+",数据库查询的签约数是:"+signFamilys.size()+",错误:");
        //统计有签约的
        for (SignFamily signFamily : signFamilys) {
            String hospitalCode=getOrg(signFamily.getHospital());
            Hospital hospital=hospitalsMap.get(hospitalCode);
            if(hospital == null) continue;
            AdminTeam adminTeam=adminTeamMap.get(signFamily.getAdminTeamId()+"");
            //统计机构
            //判断是中心还是服务站 服务站的话添加到中心去
            if(hospital == null) continue;
            if(hospital == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据异常。");
                continue;
            }
            if(adminTeam == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的adminTeam数据异常。");
                continue;
            }
            JSONObject orgjo=tjOrgMap.get(getOrg(hospital.getCode()));
            if(orgjo==null){
                System.out.println(new JSONObject(hospital).toString());
@ -372,7 +397,7 @@ public class CurrentDayAllQuotaJob implements Job {
            townjo.put("num",((int)townjo.get("num"))+1);
            //统计全科医生
            JSONObject qkjo=tjQkdoctorMap.get(signFamily.getDoctor());
            JSONObject qkjo=tjAdminTeamMap.get(signFamily.getAdminTeamId()+"");
            if(qkjo!=null){
                qkjo.put("num",((int)qkjo.get("num"))+1);
            }
@ -392,12 +417,13 @@ public class CurrentDayAllQuotaJob implements Job {
            redisTemplate.opsForValue().set(new StringBuffer("quota:1:2:"+entry.getKey()).toString(), entry.getValue().toString());
        }
        //保存全科医生
        for(Map.Entry<String,JSONObject> entry:tjQkdoctorMap.entrySet()){
        for(Map.Entry<String,JSONObject> entry:tjAdminTeamMap.entrySet()){
            redisTemplate.opsForValue().set(new StringBuffer("quota:1:1:"+entry.getKey()).toString(), entry.getValue().toString());
        }
        errorContent.append("computequota_1---end!!!");
    }
    private void initMap(Map<String, JSONObject> tjCityMap, Map<String, JSONObject> tjTownMap, Map<String, JSONObject> tjOrgMap, Map<String, JSONObject> tjQkdoctorMap, Map<String, JSONObject> tjJKdoctorMap) {
    private void initMap(Map<String, JSONObject> tjCityMap, Map<String, JSONObject> tjTownMap, Map<String, JSONObject> tjOrgMap, Map<String, JSONObject> tjQkdoctorMap, Map<String, JSONObject> tjJKdoctorMap, Map<String, JSONObject> tjAdminTeamMap) {
        JSONObject jo=new JSONObject();
        jo.put("name", Constant.cityName);
        jo.put("num",0);
@ -434,28 +460,46 @@ public class CurrentDayAllQuotaJob implements Job {
                tjJKdoctorMap.put(doctor.getCode(),jo);
            }
        }
    }
        if(tjAdminTeamMap!=null){
            for(AdminTeam adminTeam:adminTeams){
                jo=new JSONObject();
                jo.put("name",adminTeam.getName());
                jo.put("num",0);
                jo.put("date", DateUtil.dateToStrLong(new Date()));
                tjAdminTeamMap.put(adminTeam.getId()+"",jo);
            }
        }
    private void computequota_2() {
    }
    private void computequota_2(StringBuffer errorContent) {
        errorContent.append("computequota_2---start,");
        //签约需要的统计map
        Map<String, JSONObject> tjCityMap = new HashMap<>();//区级的统计map key 是区行政区划350200
        Map<String, JSONObject> tjTownMap = new HashMap<String, JSONObject>();//区级的统计map key 是区行政区划350200
        Map<String, JSONObject> tjOrgMap = new HashMap<String, JSONObject>();//机构的统计map key 是机构的code
        Map<String, JSONObject> tjQkdoctorMap = new HashMap<String, JSONObject>();//团队级的统计map 目前没有团队 先用全科医生统一  key doctorCode
        Map<String, JSONObject> tjAdminTeamMap = new HashMap<String, JSONObject>();//团队级的统计map 目前没有团队 先用全科医生统一  key doctorCode
        initMap(tjCityMap, tjTownMap, tjOrgMap, tjQkdoctorMap, null);
        initMap(tjCityMap, tjTownMap, tjOrgMap, null, null,tjAdminTeamMap);
        String now = getDayString(0);
        String tomorrow = getDayString(1);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingUnSignYesterday(now, tomorrow);
        errorContent.append("截止时间:"+now+"-"+DateUtil.dateToStrLong(new Date())+",数据库查询的解约数是:"+signFamilys.size()+",错误:");
        //统计有签约的
        for (SignFamily signFamily : signFamilys) {
            String hospitalCode=getOrg(signFamily.getHospital());
            Hospital hospital=hospitalsMap.get(hospitalCode);
            if(hospital == null) continue;
            AdminTeam adminTeam=adminTeamMap.get(signFamily.getAdminTeamId()+"");
            if(hospital == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据异常。");
                continue;
            }
            if(adminTeam == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的adminTeam数据异常。");
                continue;
            }
            //统计机构
            //判断是中心还是服务站 服务站的话添加到中心去
            JSONObject orgjo=tjOrgMap.get(getOrg(hospital.getCode()));
@ -470,7 +514,7 @@ public class CurrentDayAllQuotaJob implements Job {
            JSONObject townjo=tjTownMap.get(hospital.getTown());
            townjo.put("num",((int)townjo.get("num"))+1);
            //统计全科医生
            JSONObject qkjo=tjQkdoctorMap.get(signFamily.getDoctor());
            JSONObject qkjo=tjAdminTeamMap.get(signFamily.getAdminTeamId()+"");
            if(qkjo!=null){
                qkjo.put("num",((int)qkjo.get("num"))+1);
            }
@ -490,33 +534,42 @@ public class CurrentDayAllQuotaJob implements Job {
            redisTemplate.opsForValue().set(new StringBuffer("quota:2:2:"+entry.getKey()).toString(), entry.getValue().toString());
        }
        //保存全科医生
        for(Map.Entry<String,JSONObject> entry:tjQkdoctorMap.entrySet()){
        for(Map.Entry<String,JSONObject> entry:tjAdminTeamMap.entrySet()){
            redisTemplate.opsForValue().set(new StringBuffer("quota:2:1:"+entry.getKey()).toString(), entry.getValue().toString());
        }
        errorContent.append("computequota_2---end!!!");
    }
    private void computequota_3() {
    private void computequota_3(StringBuffer errorContent) {
        errorContent.append("computequota_3---start,");
        //签约需要的统计map
        Map<String, JSONObject> tjCityMap = new HashMap<>();//区级的统计map key 是区行政区划350200
        Map<String, JSONObject> tjTownMap = new HashMap<String, JSONObject>();//区级的统计map key 是区行政区划350200
        Map<String, JSONObject> tjOrgMap = new HashMap<String, JSONObject>();//机构的统计map key 是机构的code
        Map<String, JSONObject> tjJkdoctorMap = new HashMap<String, JSONObject>();//全部的健康管理师
        Map<String, JSONObject> tjAdminTeamMap = new HashMap<String, JSONObject>();//全部的健康管理师
        initMap(tjCityMap, tjTownMap, tjOrgMap, null, tjJkdoctorMap);
        initMap(tjCityMap, tjTownMap, tjOrgMap, null, null,tjAdminTeamMap);
        String now = getDayString(0);
        String tomorrow = getDayString(1);
        List<ConsultTeam> consultTeams = consultTeamDao.findByCzrqyYesterday(now,tomorrow);
        errorContent.append("截止时间:"+now+"-"+DateUtil.dateToStrLong(new Date())+",数据库查询的咨询数是:"+consultTeams.size()+",错误:");
        //统计
        for (ConsultTeam consultTeam : consultTeams) {
            String doctorCode=consultTeam.getDoctor();
            Doctor doctor=jkglsdoctorsMap.get(doctorCode);//得到健康管理师
            if(doctor==null){
            AdminTeam adminTeam=adminTeamMap.get(consultTeam.getAdminTeamId()+"");
            if(adminTeam == null) {
                errorContent.append("咨询id:"+consultTeam.getId()+",咨询表中的团队数据有误。");
                continue;
            }
            //统计机构
            JSONObject orgjo=tjOrgMap.get(getOrg(doctor.getHospital()));
            if(orgjo==null){
            JSONObject orgjo=tjOrgMap.get(getOrg(adminTeam.getOrgCode()));
            if(orgjo == null) {
                errorContent.append("咨询id:"+consultTeam.getId()+",咨询表中的团队所属的机构数据有误。");
                continue;
            }
            Hospital hospital=hospitalsMap.get(getOrg(adminTeam.getOrgCode()));
            if(hospital == null) {
                errorContent.append("咨询id:"+consultTeam.getId()+",咨询表中的团队所属的机构数据有误。");
                continue;
            }
            orgjo.put("num",((int)orgjo.get("num"))+1);
@ -524,11 +577,11 @@ public class CurrentDayAllQuotaJob implements Job {
            JSONObject cityjo=tjCityMap.get(Constant.city);
            cityjo.put("num",((int)cityjo.get("num"))+1);
            //统计区
            JSONObject townjo=tjTownMap.get(doctor.getTown());
            JSONObject townjo=tjTownMap.get(hospital.getTown());
            townjo.put("num",((int)townjo.get("num"))+1);
            //统计全科医生
            JSONObject qkjo=tjJkdoctorMap.get(doctor.getCode());
            JSONObject qkjo=tjAdminTeamMap.get(consultTeam.getAdminTeamId()+"");
            if(qkjo!=null){
                qkjo.put("num",((int)qkjo.get("num"))+1);
            }
@ -548,30 +601,35 @@ public class CurrentDayAllQuotaJob implements Job {
            redisTemplate.opsForValue().set(new StringBuffer("quota:3:2:"+entry.getKey()).toString(), entry.getValue().toString());
        }
        //保存全科医生
        for(Map.Entry<String,JSONObject> entry:tjJkdoctorMap.entrySet()){
        for(Map.Entry<String,JSONObject> entry:tjAdminTeamMap.entrySet()){
            redisTemplate.opsForValue().set(new StringBuffer("quota:3:1:"+entry.getKey()).toString(), entry.getValue().toString());
        }
        errorContent.append("computequota_3---end!!!");
    }
    private void computequota_4() {
    private void computequota_4(StringBuffer errorContent) {
        errorContent.append("computequota_4---start,");
        Map<String, JSONObject> tjCityMap = new HashMap<>();//区级的统计map key 是区行政区划350200
        Map<String, JSONObject> tjTownMap = new HashMap<String, JSONObject>();//区级的统计map key 是区行政区划350200
        Map<String, JSONObject> tjOrgMap = new HashMap<String, JSONObject>();//机构的统计map key 是机构的code
        Map<String, JSONObject> tjJkdoctorMap = new HashMap<String, JSONObject>();//全部的健康管理师
        initMap(tjCityMap, tjTownMap, tjOrgMap, null, tjJkdoctorMap);
        initMap(tjCityMap, tjTownMap, tjOrgMap, null, tjJkdoctorMap,null);
        //找出今天的随访信息
        List<Map<String,Object>> plans = getFvYesterday();
        errorContent.append("截止时间:"+DateUtil.dateToStrLong(new Date())+",数据库查询的随访数是:"+plans.size()+",错误:");
        //统计有随访的
        for (Map<String,Object> plan : plans) {
            String doctorCode = (String) plan.get("doctor_uid");//得到随访中健康医生的code
            Doctor doctor=jkglsdoctorsMap.get(doctorCode);//得到健康管理师
            if(doctor==null){
            if(doctor == null) {
                errorContent.append("随访id:"+plan.get("id")+",随访医生字段doctor_uid数据有误。");
                continue;
            }
            //统计机构
            JSONObject orgjo=tjOrgMap.get(getOrg(doctor.getHospital()));
            if(orgjo==null){
                errorContent.append("随访id:"+plan.get("id")+",随访医生字段doctor_uid对应的doctor表中的hospital字段有误。");
                continue;
            }
            orgjo.put("num",((int)orgjo.get("num"))+1);
@ -605,33 +663,43 @@ public class CurrentDayAllQuotaJob implements Job {
        for(Map.Entry<String,JSONObject> entry:tjJkdoctorMap.entrySet()){
            redisTemplate.opsForValue().set(new StringBuffer("quota:4:1:"+entry.getKey()).toString(), entry.getValue().toString());
        }
        errorContent.append("computequota_4---end!!");
    }
    private void computequota_5() {
    private void computequota_5(StringBuffer errorContent) {
        errorContent.append("computequota_5---start,");
        Map<String, JSONObject> tjCityMap = new HashMap<>();//区级的统计map key 是区行政区划350200
        Map<String, JSONObject> tjTownMap = new HashMap<String, JSONObject>();//区级的统计map key 是区行政区划350200
        Map<String, JSONObject> tjOrgMap = new HashMap<String, JSONObject>();//机构的统计map key 是机构的code
        Map<String, JSONObject> tjQkdoctorMap = new HashMap<String, JSONObject>();//团队级的统计map 目前没有团队 先用全科医生统一  key doctorCode
        Map<String, JSONObject> tjJkdoctorMap = new HashMap<String, JSONObject>();//全部的健康管理师
        Map<String, JSONObject> tjAdminTeamMap = new HashMap<String, JSONObject>();//全部的健康管理师
        initMap(tjCityMap, tjTownMap, tjOrgMap, tjQkdoctorMap, tjJkdoctorMap);
        initMap(tjCityMap, tjTownMap, tjOrgMap, null, null,tjAdminTeamMap);
        //找出今天的健康指导信息
        String now = getDayString(0);
        String tomorrow = getDayString(1);
        List<PatientHealthGuidance> patientHealthGuidances = patientHealthGuidanceDao.findByCzrqyYesterday(now,tomorrow);
        errorContent.append("截止时间:"+now+"-"+DateUtil.dateToStrLong(new Date())+",数据库查询的健康指導数是:"+patientHealthGuidances.size()+",错误:");
        for (PatientHealthGuidance patientHealthGuidance: patientHealthGuidances) {
            String doctorCode =patientHealthGuidance.getDoctor();
            Doctor doctor=jkglsdoctorsMap.get(doctorCode);//得到健康管理师
            SignFamily signFamily= signFamilyDao.findSignByPatient(patientHealthGuidance.getPatient(),2);//得到患者签约的行政团队
            if(doctor==null){
                doctor=qkdoctorsMap.get(doctorCode);//得到全科医生
                if(doctor==null){
                    errorContent.append("健康指導id:"+patientHealthGuidance.getId()+",找不到对应的医生信息。");
                    continue;
                }
            }
            if(signFamily == null) {
                errorContent.append("健康指導id:"+patientHealthGuidance.getId()+",患者签约不存在或者已经过期。");
                continue;
            }
            //统计机构
            JSONObject orgjo=tjOrgMap.get(getOrg(doctor.getHospital()));
            if(orgjo==null){
                errorContent.append("健康指導id:"+patientHealthGuidance.getId()+",医生表中对应的hospital字段有误。");
                continue;
            }
            //统计市
@ -640,10 +708,10 @@ public class CurrentDayAllQuotaJob implements Job {
            //统计区
            JSONObject townjo=tjTownMap.get(doctor.getTown());
            townjo.put("num",((int)townjo.get("num"))+1);
            //统计机构
            orgjo.put("num",((int)orgjo.get("num"))+1);
            //统计全科医生
            JSONObject qkjo=tjQkdoctorMap.get(doctor.getCode());
            JSONObject qkjo=tjAdminTeamMap.get(signFamily.getAdminTeamId()+"");
            if(qkjo!=null){
                qkjo.put("num",((int)qkjo.get("num"))+1);
            }
@ -662,15 +730,18 @@ public class CurrentDayAllQuotaJob implements Job {
            redisTemplate.opsForValue().set(new StringBuffer("quota:5:2:"+entry.getKey()).toString(), entry.getValue().toString());
        }
        //保存全科医生
        for(Map.Entry<String,JSONObject> entry:tjQkdoctorMap.entrySet()){
        for(Map.Entry<String,JSONObject> entry:tjAdminTeamMap.entrySet()){
            redisTemplate.opsForValue().set(new StringBuffer("quota:5:1:"+entry.getKey()).toString(), entry.getValue().toString());
        }
        errorContent.append("computequota_5---end!!");
    }
    private void computequota_6() throws Exception {
    private void computequota_6(StringBuffer errorContent) throws Exception {
        errorContent.append("computequota_6---start,");
        String now = getDayString(0);
        String tomorrow = getDayString(1);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterday(now, tomorrow);
        errorContent.append("截止时间:"+now+"-"+DateUtil.dateToStrLong(new Date())+",数据库查询的签约数是:"+signFamilys.size()+",错误:");
        //统计有签约的
        Map<String, Map<String, Long>> citySexMap = new HashMap<String, Map<String, Long>>();//key是市行政代码 目前只有厦门市
        citySexMap.put(Constant.city,new HashMap<String, Long>());
@ -679,7 +750,10 @@ public class CurrentDayAllQuotaJob implements Job {
        for (SignFamily signFamily : signFamilys) {
            String idcard = signFamily.getIdcard();//得到签约中患者的身份证号
            Hospital hospital = hospitalsMap.get(getOrg(signFamily.getHospital()));//得到患者签约的机构
            if(hospital==null){
            //统计机构
            //判断是中心还是服务站 服务站的话添加到中心去
            if(hospital == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据异常。");
                continue;
            }
            String town = hospital.getTown();//得到患者签约的机构的区号
@ -823,13 +897,16 @@ public class CurrentDayAllQuotaJob implements Job {
            redisTemplate.opsForValue().set(new StringBuffer("quota:6:2:3:"+hospitalEntry.getKey()).toString(),jsonObject.toString());
        }
        errorContent.append("computequota_6---end!!");
    }
    private void computequota_7() {
    private void computequota_7(StringBuffer errorContent) {
        errorContent.append("computequota_7---start,");
        String now = getDayString(0);
        String tomorrow = getDayString(1);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterday(now, tomorrow);
        errorContent.append("截止时间:"+now+"-"+DateUtil.dateToStrLong(new Date())+",数据库查询的签约数是:"+signFamilys.size()+",错误:");
        //查找出系统全部的患者
        List<Patient> patients = patientDao.findAllSignPatient();
        Map<String, Patient> patientsMap = new HashMap<String, Patient>();
@ -853,7 +930,8 @@ public class CurrentDayAllQuotaJob implements Job {
            String patient=signFamily.getPatient();
            String group = groupMap.get(patient);//得到该签约病人的所在分组 1 普通 2 慢病 3是 65岁以上人群
            Hospital hospital = hospitalsMap.get(getOrg(signFamily.getHospital()));//得到患者签约的机构
            if(hospital==null){
            if(hospital == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据异常。");
                continue;
            }
            String town = hospital.getTown();
@ -1178,9 +1256,12 @@ public class CurrentDayAllQuotaJob implements Job {
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:2:100:"+hospitalEntry.getKey()).toString(),jsonObject.toString());
        }
        errorContent.append("computequota_7---end!!");
    }
    private void computequota_8()throws Exception {
    private void computequota_8(StringBuffer errorContent)throws Exception {
        errorContent.append("computequota_8---end,");
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospital2();
        Map<String, Hospital> hospitalsMap = new HashMap<String, Hospital>();
@ -1197,6 +1278,7 @@ public class CurrentDayAllQuotaJob implements Job {
        String now = getDayString(0);
        String tomorrow = getDayString(1);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterday(now,tomorrow);
        errorContent.append("截止时间:"+now+"-"+DateUtil.dateToStrLong(new Date())+",数据库查询的签约数是:"+signFamilys.size()+",错误:");
        //数组里面第一个是健康人群 第二个是慢病人群 第三个是65岁以上人群
        Map<String, Map<String, Long>> cityAgeMap = new HashMap<String, Map<String, Long>>();//key是市行政代码 目前只有厦门市
        cityAgeMap.put(Constant.city,new HashMap<String, Long>());
@ -1206,7 +1288,8 @@ public class CurrentDayAllQuotaJob implements Job {
        //统计有签约的
        for (SignFamily signFamily : signFamilys) {
            Hospital hospital = hospitalsMap.get(getOrg(signFamily.getHospital()));//得到患者签约的机构
            if(hospital==null){
            if(hospital == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据异常。");
                continue;
            }
            String town = hospital.getTown();
@ -1439,25 +1522,30 @@ public class CurrentDayAllQuotaJob implements Job {
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:8:2:6:"+entry.getKey()).toString(),jsonObject.toString());
        }
        errorContent.append("computequota_8---end!!");
    }
    private void computequota_9() {
    private void computequota_9(StringBuffer errorContent) {
        errorContent.append("computequota_9---start,");
        Map<String, JSONObject> tjCityMap = new HashMap<>();//区级的统计map key 是区行政区划350200
        Map<String, JSONObject> tjTownMap = new HashMap<String, JSONObject>();//区级的统计map key 是区行政区划350200
        Map<String, JSONObject> tjOrgMap = new HashMap<String, JSONObject>();//机构的统计map key 是机构的code
        Map<String, JSONObject> tjQkdoctorMap = new HashMap<String, JSONObject>();//团队级的统计map 目前没有团队 先用全科医生统一  key doctorCode
        Map<String, JSONObject> tjAdminTeamMap = new HashMap<String, JSONObject>();//团队级的统计map 目前没有团队 先用全科医生统一  key doctorCode
        initMap(tjCityMap, tjTownMap, tjOrgMap, tjQkdoctorMap, null);
        initMap(tjCityMap, tjTownMap, tjOrgMap, null, null,tjAdminTeamMap);
        String now = getDayString(0);
        String tomorrow = getDayString(1);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingWaitSignYesterday(now, tomorrow);
        errorContent.append("截止时间:"+now+"-"+DateUtil.dateToStrLong(new Date())+",数据库查询的签约数是:"+signFamilys.size()+",错误:");
        //统计有签约的
        for (SignFamily signFamily : signFamilys) {
            String hospitalCode=getOrg(signFamily.getHospital());
            Hospital hospital=hospitalsMap.get(hospitalCode);
            if(hospital == null) continue;
            if(hospital == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据异常。");
                continue;
            }
            //统计机构
            //判断是中心还是服务站 服务站的话添加到中心去
            JSONObject orgjo=tjOrgMap.get(getOrg(hospital.getCode()));
@ -1473,7 +1561,7 @@ public class CurrentDayAllQuotaJob implements Job {
            townjo.put("num",((int)townjo.get("num"))+1);
            //统计全科医生
            JSONObject qkjo=tjQkdoctorMap.get(signFamily.getDoctor());
            JSONObject qkjo=tjAdminTeamMap.get(signFamily.getAdminTeamId()+"");
            if(qkjo!=null){
                qkjo.put("num",((int)qkjo.get("num"))+1);
            }
@ -1492,27 +1580,33 @@ public class CurrentDayAllQuotaJob implements Job {
            redisTemplate.opsForValue().set(new StringBuffer("quota:9:2:"+entry.getKey()).toString(), entry.getValue().toString());
        }
        //保存全科医生
        for(Map.Entry<String,JSONObject> entry:tjQkdoctorMap.entrySet()){
        for(Map.Entry<String,JSONObject> entry:tjAdminTeamMap.entrySet()){
            redisTemplate.opsForValue().set(new StringBuffer("quota:9:1:"+entry.getKey()).toString(), entry.getValue().toString());
        }
        errorContent.append("computequota_9---end!!");
    }
    private void computequota_10() {
    private void computequota_10(StringBuffer errorContent) {
        errorContent.append("computequota_10---start,");
        Map<String, JSONObject> tjCityMap = new HashMap<>();//区级的统计map key 是区行政区划350200
        Map<String, JSONObject> tjTownMap = new HashMap<String, JSONObject>();//区级的统计map key 是区行政区划350200
        Map<String, JSONObject> tjOrgMap = new HashMap<String, JSONObject>();//机构的统计map key 是机构的code
        Map<String, JSONObject> tjQkdoctorMap = new HashMap<String, JSONObject>();//团队级的统计map 目前没有团队 先用全科医生统一  key doctorCode
        Map<String, JSONObject> tjAdminTeamMap = new HashMap<String, JSONObject>();//团队级的统计map 目前没有团队 先用全科医生统一  key doctorCode
        initMap(tjCityMap, tjTownMap, tjOrgMap, tjQkdoctorMap, null);
        initMap(tjCityMap, tjTownMap, tjOrgMap, null, null,tjAdminTeamMap);
        String now = getDayString(0);
        String tomorrow = getDayString(1);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingChaangeSignYesterday(now, tomorrow);
        errorContent.append("截止时间:"+now+"-"+DateUtil.dateToStrLong(new Date())+",数据库查询的签约数是:"+signFamilys.size()+",错误:");
        //统计有签约的
        for (SignFamily signFamily : signFamilys) {
            String hospitalCode=getOrg(signFamily.getHospital());
            Hospital hospital=hospitalsMap.get(hospitalCode);
            if(hospital == null) continue;
            if(hospital == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据异常。");
                continue;
            }
            //统计机构
            JSONObject orgjo=tjOrgMap.get(hospital.getCode());
            if(orgjo==null){
@ -1527,7 +1621,7 @@ public class CurrentDayAllQuotaJob implements Job {
            townjo.put("num",((int)townjo.get("num"))+1);
            //统计全科医生
            JSONObject qkjo=tjQkdoctorMap.get(signFamily.getDoctor());
            JSONObject qkjo=tjAdminTeamMap.get(signFamily.getAdminTeamId()+"");
            if(qkjo!=null){
                qkjo.put("num",((int)qkjo.get("num"))+1);
            }
@ -1546,9 +1640,10 @@ public class CurrentDayAllQuotaJob implements Job {
            redisTemplate.opsForValue().set(new StringBuffer("quota:10:2:"+entry.getKey()).toString(), entry.getValue().toString());
        }
        //保存全科医生
        for(Map.Entry<String,JSONObject> entry:tjQkdoctorMap.entrySet()){
        for(Map.Entry<String,JSONObject> entry:tjAdminTeamMap.entrySet()){
            redisTemplate.opsForValue().set(new StringBuffer("quota:10:1:"+entry.getKey()).toString(), entry.getValue().toString());
        }
        errorContent.append("computequota_10---end!!");
    }
    public Properties getSystemProperties() {
@ -1620,4 +1715,5 @@ public class CurrentDayAllQuotaJob implements Job {
            return org;
        }
    }
}

+ 40 - 9
src/main/java/com/yihu/wlyy/job/FollowUpJob.java

@ -4,6 +4,7 @@ import com.yihu.wlyy.entity.organization.Hospital;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.doctor.profile.Doctor;
import com.yihu.wlyy.entity.job.QuartzJobLog;
import com.yihu.wlyy.entity.patient.PatientHealthGuidance;
import com.yihu.wlyy.entity.statistics.WlyyQuotaResult;
import com.yihu.wlyy.repository.address.TownDao;
import com.yihu.wlyy.repository.doctor.DoctorDao;
@ -113,15 +114,29 @@ public class FollowUpJob implements Job {
        Map<String, Long> tjTownMap = new HashMap<String, Long>();//区级的统计map key 是区行政区划350200
        Map<String, Long> tjOrgMap = new HashMap<String, Long>();//机构的统计map key 是机构的code
        Map<String, Long> tjQkdoctorMap = new HashMap<String, Long>();//团队级的统计map 目前没有团队 先用全科医生统一  key doctorCode
        Long cityCount = 0L;
        Long cityCount = 0L; //统计到市的数目
        Long townCount = 0L; //统计到所有区的数目
        Long orgCount = 0L;//统计到所有机构的数目
        Long qkCount = 0L;//统计到所有全科医生的数目
        boolean isAll=true;//是否统计失败
        StringBuffer errorContent=new StringBuffer();
        //统计有随访的
        String orgCodeTemp="";
        for (Map<String,Object> plan : plans) {
            String doctorCode = (String) plan.get("doctor_uid");//得到随访中健康医生的code
            //统计团队
            //统计市 ------------------start ------------------
            cityCount++;
            //统计团队------------------start ------------------
            String doctorCode = (String) plan.get("doctor_uid");//得到随访中的全部医生的code
            compute(tjQkdoctorMap, doctorCode);
            qkCount++;
            //统计机构------------------start ------------------
            //判断医生属于哪个机构
            Doctor doctor = doctorsMap.get(doctorCode);
            if(doctor==null){
                errorContent.append("随访id:"+plan.get("id")+",随访的医生为空或者不存在");
                isAll=false;
                continue;
            }
            String orgCode = doctor.getHospital();
            //统计机构
            if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
@ -133,13 +148,18 @@ public class FollowUpJob implements Job {
                orgCodeTemp=orgCode;
                compute(tjOrgMap, orgCode);
            }
            orgCount++;
            //统计区------------------start ------------------
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) continue;
            if(hospital == null) {
                errorContent.append("随访id:"+plan.get("id")+",随访的医生所属的机构为空或者不存在");
                isAll=false;
                continue;
            }
            String townCode = hospital.getTown();
            //统计区
            compute(tjTownMap, townCode);
            //统计市
            cityCount++;
            townCount++;
        }
        //保存统计的结果
        //保存全科医生的随访统计
@ -219,11 +239,22 @@ public class FollowUpJob implements Job {
        }
        quartzJobLog.setJobEndTime(new Date());
        quartzJobLog.setJobContent("统计"+getYesterday()+" 的随访数据完成  ,得到隨訪数目:"+plans.size());
        quartzJobLog.setJobType("1");
        quartzJobLog.setJobContent(saveContent(plans,qkCount,orgCount,townCount,cityCount,isAll,errorContent));
        quartzJobLog.setJobType(isAll?"1":"0");
        quartzJobLogDao.save(quartzJobLog);
    }
    private String saveContent( List<Map<String,Object>> plans, Long qkCount, Long orgCount, Long townCount, Long cityCount, boolean isAll, StringBuffer errorContent) {
        StringBuffer string=new StringBuffer("统计"+getYesterday()+" 的随访完成 ,数据库查询到随访数目:"+plans.size());
        string.append(",统计到市的数据总数:"+cityCount);
        string.append(",统计到区的数据总数:"+townCount);
        string.append(",统计到机构的数据总数:"+orgCount);
        string.append(",统计到团队的数据总数:"+qkCount);
        string.append(",是否统计成功:"+isAll);
        if(!isAll){
            string.append(",失败原因:"+errorContent);
        }
        return string.toString();
    }
    /**
     * 统计方案
     * @param tjQkdoctorMap

+ 76 - 35
src/main/java/com/yihu/wlyy/job/HealthGuideJob.java

@ -1,16 +1,20 @@
package com.yihu.wlyy.job;
import com.yihu.wlyy.entity.doctor.team.admin.AdminTeam;
import com.yihu.wlyy.entity.organization.Hospital;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.doctor.profile.Doctor;
import com.yihu.wlyy.entity.job.QuartzJobLog;
import com.yihu.wlyy.entity.patient.PatientHealthGuidance;
import com.yihu.wlyy.entity.patient.SignFamily;
import com.yihu.wlyy.entity.statistics.WlyyQuotaResult;
import com.yihu.wlyy.repository.address.TownDao;
import com.yihu.wlyy.repository.doctor.DoctorAdminTeamDao;
import com.yihu.wlyy.repository.doctor.DoctorDao;
import com.yihu.wlyy.repository.job.QuartzJobLogDao;
import com.yihu.wlyy.repository.organization.HospitalDao;
import com.yihu.wlyy.repository.patient.PatientHealthGuidanceDao;
import com.yihu.wlyy.repository.patient.SignFamilyDao;
import com.yihu.wlyy.repository.statistics.WlyyQuotaResultDao;
import com.yihu.wlyy.web.quota.WlyyJobConfigVO;
import com.yihu.wlyy.web.quota.WlyyQuotaVO;
@ -38,7 +42,8 @@ public class HealthGuideJob implements Job {
    private WlyyQuotaResultDao wlyyQuotaResultDao;//指标结果Dao
    @Autowired
    private QuartzJobLogDao quartzJobLogDao;//执行日志Dao
    @Autowired
    private SignFamilyDao signFamilyDao;
    @Autowired
    private DoctorDao doctorDao;
    @Autowired
@ -49,6 +54,8 @@ public class HealthGuideJob implements Job {
    private PatientHealthGuidanceDao patientHealthGuidanceDao;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    String yesterday;
    String now;
@ -77,11 +84,11 @@ public class HealthGuideJob implements Job {
        quartzJobLog.setJobId(wlyyJobConfig.getId());
        quartzJobLog.setJobName(wlyyJobConfig.getJobName());
        //查找出系统全部的全科医生和健康管理师
        List<Doctor> doctors = doctorDao.findAllQKDoctotAndJKDoctor();
        Map<String, Doctor> doctorsMap = new HashMap<String, Doctor>();
        for (Doctor doctor : doctors) {
            doctorsMap.put(doctor.getCode(), doctor);
        //找出全部的团队
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
        Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
        for (AdminTeam adminTeam : adminTeams) {
            adminTeamMap.put(adminTeam.getId()+"", adminTeam);
        }
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospital2();
@ -100,44 +107,67 @@ public class HealthGuideJob implements Job {
        Map<String, Long> tjTownMap = new HashMap<String, Long>();//区级的统计map key 是区行政区划350200
        Map<String, Long> tjOrgMap = new HashMap<String, Long>();//机构的统计map key 是机构的code
        Map<String, Long> tjdoctorMap = new HashMap<String, Long>();//团队级的统计map 目前没有团队 先用医生和健康管理师统一  key doctorCode
        Long cityCount = 0L;
        Map<String, Long> tjAdminTeamMap = new HashMap<String, Long>();//团队级的统计map 目前没有团队 先用医生和健康管理师统一  key doctorCode
        Long cityCount = 0L; //统计到市的数目
        Long townCount = 0L; //统计到所有区的数目
        Long orgCount = 0L;//统计到所有机构的数目
        Long qkCount = 0L;//统计到所有全科医生的数目
        boolean isAll=true;//是否统计失败
        StringBuffer errorContent=new StringBuffer();
        //统计有健康指导的
        String orgCodeTemp="";
        for (PatientHealthGuidance patientHealthGuidance : patientHealthGuidances) {
            String doctorCode = patientHealthGuidance.getDoctor();//得到健康指导中健康医生的code
            //统计团队
            compute(tjdoctorMap, doctorCode);
            //判断医生属于哪个机构
            Doctor doctor = doctorsMap.get(doctorCode);
            if(doctor==null){
            String patient=patientHealthGuidance.getPatient();
            SignFamily signFamily= signFamilyDao.findByPatientAndType(patient,2);//只统计家庭签约
            if(signFamily == null) {
                errorContent.append("健康咨询id:"+patientHealthGuidance.getId()+",患者code:"+patient+",家庭签约不存在");
                isAll=false;
                continue;
            }
            String adminId=signFamily.getAdminTeamId()+"";//得到团队ID
            AdminTeam adminTeam = adminTeamMap.get(adminId);
            if(adminTeam==null){
                errorContent.append("健康咨询id:"+patientHealthGuidance.getId()+",签约code"+signFamily.getCode()+",咨询的家庭签约的团队为空或者不存在");
                isAll=false;
                continue;
            }
            String orgCode = doctor.getHospital();
            //统计机构
            String orgCode=signFamily.getHospital();//得到机构id
            String orgCodeTemp="";
            //统计机构 -----------------start---------------------
            if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                //统计站
                orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
                compute(tjOrgMap, orgCodeTemp);
            }else{
                //统计社区
                orgCodeTemp=orgCode;
                compute(tjOrgMap, orgCode);
            }
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) continue;
            if(hospital == null) {
                errorContent.append("健康咨询id:"+patientHealthGuidance.getId()+",健康咨询的医生所属的机构为空");
                isAll=false;
                continue;
            }
            //统计市 -----------------start---------------------
            cityCount++;
            //统计区 -----------------start---------------------
            String townCode = hospital.getTown();
            //统计区
            compute(tjTownMap, townCode);
            //统计市
            cityCount++;
            townCount++;
            //统计机构 -----------------start---------------------
            compute(tjOrgMap, orgCodeTemp);
            orgCount++;
            //统计团队 -----------------start---------------------
            compute(tjAdminTeamMap, adminId);
            qkCount++;
        }
        //保存统计的结果
        //保存全科医生和健康管理师的健康指导统计
        for (Map.Entry<String, Doctor> entry : doctorsMap.entrySet()) {
            Doctor doctor = doctorsMap.get(entry.getKey());//得到健康管理师
            orgCodeTemp=getOrg(doctor.getHospital());
        for (Map.Entry<String, AdminTeam> entry : adminTeamMap.entrySet()) {
            AdminTeam adminTeam = adminTeamMap.get(entry.getKey());//得到团队
            String orgCodeTemp=getOrg(adminTeam.getOrgCode());
            Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到全科医生的机构
            if(hospital == null) continue;
            String city=Constant.city;
@ -146,12 +176,12 @@ public class HealthGuideJob implements Job {
            String townName=hospital.getTownName();
            String org=hospital.getCode();
            String orgName=hospital.getName();
            String doctorCode=doctor.getCode();
            String doctorName=doctor.getName();
            String doctorJob=doctor.getJob();
            String doctorCode=adminTeam.getId()+"";
            String doctorName=adminTeam.getName();
            String doctorJob="";
            String level="1";
            String key=doctor.getCode();
            save(tjdoctorMap, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level, key);
            String key=adminTeam.getId()+"";
            save(tjAdminTeamMap, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level, key);
        }
        //保存机构的咨询统计
        for (Map.Entry<String, Hospital> entry : hospitalsMap.entrySet()) {
@ -207,11 +237,22 @@ public class HealthGuideJob implements Job {
        }
        quartzJobLog.setJobEndTime(new Date());
        quartzJobLog.setJobContent("统计" + getYesterday() + " 的健康指导数据完成  ,得到健康指导数目:"+patientHealthGuidances.size());
        quartzJobLog.setJobType("1");
        quartzJobLog.setJobContent(saveContent(patientHealthGuidances,qkCount,orgCount,townCount,cityCount,isAll,errorContent));
        quartzJobLog.setJobType(isAll?"1":"0");
        quartzJobLogDao.save(quartzJobLog);
    }
    private String saveContent(List<PatientHealthGuidance>  patientHealthGuidances, Long qkCount, Long orgCount, Long townCount, Long cityCount, boolean isAll, StringBuffer errorContent) {
        StringBuffer string=new StringBuffer("统计"+getYesterday()+" 的健康指导数据完成 ,数据库查询到健康指导数目:"+patientHealthGuidances.size());
        string.append(",统计到市的数据总数:"+cityCount);
        string.append(",统计到区的数据总数:"+townCount);
        string.append(",统计到机构的数据总数:"+orgCount);
        string.append(",统计到团队的数据总数:"+qkCount);
        string.append(",是否统计成功:"+isAll);
        if(!isAll){
            string.append(",失败原因:"+errorContent);
        }
        return string.toString();
    }
    /**
     * 统计方案
     * @param tjdoctorMap

+ 29 - 7
src/main/java/com/yihu/wlyy/job/SignAgeGroupDiseaseJob.java

@ -102,16 +102,25 @@ public class SignAgeGroupDiseaseJob implements Job {
            Map<String, Map<String, Map>> townAgeMap = new HashMap<String, Map<String, Map>>();//key是区行政代码
            Map<String, Map<String, Map>> orgAgeMap = new HashMap<String, Map<String, Map>>();//key是机构代码
            //统计有签约的
            String orgCodeTemp="";
            Long cityCount = 0L; //统计到市的数目
            Long townCount = 0L; //统计到所有区的数目
            Long orgCount = 0L;//统计到所有机构的数目
            Long qkCount = 0L;//统计到所有全科医生的数目
            boolean isAll=true;//是否统计失败
            StringBuffer errorContent=new StringBuffer();
            for (SignFamily signFamily : signFamilies) {
                orgCodeTemp=signFamily.getHospital();
                String orgCodeTemp=signFamily.getHospital();
                if(!"00".equals(orgCodeTemp.substring(orgCodeTemp.length()-2,orgCodeTemp.length()))){
                    //统计站
                    orgCodeTemp=orgCodeTemp.substring(0,orgCodeTemp.length()-2)+"00";
                }
                Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到患者签约的机构
                if(hospital == null) continue;
                if(hospital == null) {
                    errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据异常");
                    isAll=false;
                    continue;
                }
                String town = hospital.getTown();
                int age = IdCardUtil.getAgeForIdcard(signFamily.getIdcard());//根据card解析年龄
                String ageCode = getAgeCode(age);//得到年龄的code
@ -158,8 +167,10 @@ public class SignAgeGroupDiseaseJob implements Job {
                }
                //统计市
                compute(cityAgeMap, Constant.city, ageCode, diseaseType);
                cityCount++;
                //统计区
                compute(townAgeMap, town, ageCode, diseaseType);
                townCount++;
                //统计机构
                //统计站
                String orgCode=hospital.getCode();
@ -171,7 +182,7 @@ public class SignAgeGroupDiseaseJob implements Job {
                } else {
                    compute(orgAgeMap, hospital.getCode(), ageCode, diseaseType);
                }
                orgCount++;
            }
            //保存统计数据
            // 保存市的统计数据
@ -230,14 +241,25 @@ public class SignAgeGroupDiseaseJob implements Job {
                }
            }
            wlyyJobLog.setJobEndTime(new Date());
            wlyyJobLog.setJobContent("统计" + getYesterday() + " 的签约患者年龄数据完成,得到签约数目:"+signFamilies.size());
            wlyyJobLog.setJobType("1");
            wlyyJobLog.setJobContent(saveContent(signFamilies,qkCount,orgCount,townCount,cityCount,isAll,errorContent));
            wlyyJobLog.setJobType(isAll?"1":"0");
            quartzJobLogDao.save(wlyyJobLog);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    private String saveContent(List<SignFamily> signFamilys, Long qkCount, Long orgCount, Long townCount, Long cityCount, boolean isAll, StringBuffer errorContent) {
        StringBuffer string=new StringBuffer("统计"+getYesterday()+" 的待签约数据完成 ,数据库查询到待签约数目:"+signFamilys.size());
        string.append(",统计到市的数据总数:"+cityCount);
        string.append(",统计到区的数据总数:"+townCount);
        string.append(",统计到机构的数据总数:"+orgCount);
        string.append(",统计到团队的数据总数:"+qkCount);
        string.append(",是否统计成功:"+isAll);
        if(!isAll){
            string.append(",失败原因:"+errorContent);
        }
        return string.toString();
    }
    private void save(Map<String, Map> oneAgeMap, String key_2, String key_3, String city, String cityName, String town, String townName, String org, String orgName,String level) {
        WlyyQuotaResult wlyyQuotaResult = new WlyyQuotaResult();
        wlyyQuotaResult.setDel("1");

+ 271 - 889
src/main/java/com/yihu/wlyy/job/SignJob.java

@ -1,5 +1,6 @@
package com.yihu.wlyy.job;
import com.yihu.wlyy.entity.doctor.team.admin.AdminTeam;
import com.yihu.wlyy.entity.organization.Hospital;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.doctor.profile.Doctor;
@ -8,6 +9,7 @@ import com.yihu.wlyy.entity.job.QuartzJobLog;
import com.yihu.wlyy.entity.patient.SignFamily;
import com.yihu.wlyy.entity.statistics.WlyyQuotaResult;
import com.yihu.wlyy.repository.address.TownDao;
import com.yihu.wlyy.repository.doctor.DoctorAdminTeamDao;
import com.yihu.wlyy.repository.doctor.DoctorDao;
import com.yihu.wlyy.repository.doctor.DoctorPatientGroupInfoDao;
import com.yihu.wlyy.repository.job.QuartzJobLogDao;
@ -59,6 +61,8 @@ public class SignJob implements Job {
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    String yesterday;
    String now;
@ -138,21 +142,32 @@ public class SignJob implements Job {
            Map<String, Map<String, Long>> townSexMap = new HashMap<String, Map<String, Long>>();//key是区行政代码
            Map<String, Map<String, Long>> orgSexMap = new HashMap<String, Map<String, Long>>();//key是机构代码
            //统计有签约的
            Long cityCount = 0L; //统计到市的数目
            Long townCount = 0L; //统计到所有区的数目
            Long orgCount = 0L;//统计到所有机构的数目
            Long qkCount = 0L;//统计到所有全科医生的数目
            boolean isAll=true;//是否统计失败
            StringBuffer errorContent=new StringBuffer();
            for (SignFamily signFamily : signFamilys) {
                String idcard = signFamily.getIdcard();//得到签约中患者的身份证号
                String orgCodeTemp=getOrg(signFamily.getHospital());
                Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到患者签约的机构
                if(hospital == null)continue;
                if(hospital == null) {
                    errorContent.append("签约code:"+signFamily.getCode()+",签约的全科医生(doctor字段)的所属机构(wlyy_doctor表中的hospital字段)为空或者所属的机构数据有问题");
                    isAll=false;
                    continue;
                }
                String town = hospital.getTown();//得到患者签约的机构的区号
                String hospitalCode = hospital.getCode();//得到患者签约的机构号
                String sex = IdCardUtil.getSexForIdcard(idcard);//根据身份证得到性别
                //统计市 目前只统计厦门市 所以先写死 后期再改造
                compute_level2_1(citySexMap,Constant.city, sex);
                cityCount++;
                //统计区
                compute_level2_1(townSexMap,town, sex);
                townCount++;
                //统计机构
                //统计站
                String orgCode=hospital.getCode();
@ -164,7 +179,7 @@ public class SignJob implements Job {
                    //统计社区
                    compute_level2_1(orgSexMap,hospitalCode, sex);
                }
                orgCount++;
            }
            //保存统计数据
            //保存市统计数据
@ -216,8 +231,8 @@ public class SignJob implements Job {
               }
            }
            QuartzJobLog.setJobEndTime(new Date());
            QuartzJobLog.setJobContent("统计" + getYesterday() + " 的签约性别数据完成 ,得到签约数目:"+signFamilys.size());
            QuartzJobLog.setJobType("1");
            QuartzJobLog.setJobContent(saveContent(signFamilys,qkCount,orgCount,townCount,cityCount,isAll,errorContent));
            QuartzJobLog.setJobType(isAll?"1":"0");
            quartzJobLogDao.save(QuartzJobLog);
        } catch (Exception e) {
            e.printStackTrace();
@ -321,7 +336,12 @@ public class SignJob implements Job {
            //找出今天的签约信息
            List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterday(yesterday, now);
            Long cityCount = 0L; //统计到市的数目
            Long townCount = 0L; //统计到所有区的数目
            Long orgCount = 0L;//统计到所有机构的数目
            Long qkCount = 0L;//统计到所有全科医生的数目
            boolean isAll=true;//是否统计失败
            StringBuffer errorContent=new StringBuffer();
            //统计有签约的
            for (SignFamily signFamily : signFamilys) {
                String patient = signFamily.getPatient();
@ -335,57 +355,30 @@ public class SignJob implements Job {
                }
                Hospital hospital = hospitalsMap.get(getOrg(signFamily.getHospital()));//得到患者签约的机构
                if (hospital == null) {
                if(hospital == null) {
                    errorContent.append("签约code:"+signFamily.getCode()+",签约的全科医生(doctor字段)的所属机构(wlyy_doctor表中的hospital字段)为空或者所属的机构数据有问题");
                    isAll=false;
                    continue;
                }
                String town = hospital.getTown();
                //统计市  现在只有厦门市 默认先写死 后面再改
                if (cityGroupMap.containsKey(Constant.city)) {
                    Map<String, Long> groupMapTemp = cityGroupMap.get(Constant.city);
                    groupMapTemp.put(group, (groupMapTemp.get(group) == null ? 0l : groupMapTemp.get(group)) + 1);
                    cityGroupMap.put(Constant.city, groupMapTemp);
                } else {
                    Map<String, Long> groupMapTemp = new HashMap<String, Long>();
                    groupMapTemp.put(group, 1L);
                    cityGroupMap.put(Constant.city, groupMapTemp);
                }
                compute_level2_2(cityGroupMap, group,Constant.city);
                cityCount++;
                //统计区
                if (townGroupMap.containsKey(town)) {
                    Map<String, Long> groupMapTemp = townGroupMap.get(town);
                    groupMapTemp.put(group, (groupMapTemp.get(group) == null ? 0l : groupMapTemp.get(group)) + 1);
                    townGroupMap.put(town, groupMapTemp);
                } else {
                    Map<String, Long> groupMapTemp = new HashMap<String, Long>();
                    groupMapTemp.put(group, 1L);
                    townGroupMap.put(town, groupMapTemp);
                }
                compute_level2_2(townGroupMap, group,town);
                townCount++;
                //统计站
                String orgCode=hospital.getCode();
                if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                    //统计站
                    String orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
                    //统计机构
                    if (orgGroupMap.containsKey(orgCodeTemp)) {
                        Map<String, Long> groupMapTemp = orgGroupMap.get(orgCodeTemp);
                        groupMapTemp.put(group, (groupMapTemp.get(group) == null ? 0l : groupMapTemp.get(group)) + 1);
                        orgGroupMap.put(orgCodeTemp, groupMapTemp);
                    } else {
                        Map<String, Long> groupMapTemp = new HashMap<String, Long>();
                        groupMapTemp.put(group, 1L);
                        orgGroupMap.put(orgCodeTemp, groupMapTemp);
                    }
                   compute_level2_2(orgGroupMap, group,orgCodeTemp);
                } else {
                    //统计机构
                    if (orgGroupMap.containsKey(hospital.getCode())) {
                        Map<String, Long> groupMapTemp = orgGroupMap.get(hospital.getCode());
                        groupMapTemp.put(group, (groupMapTemp.get(group) == null ? 0l : groupMapTemp.get(group)) + 1);
                        orgGroupMap.put(hospital.getCode(), groupMapTemp);
                    } else {
                        Map<String, Long> groupMapTemp = new HashMap<String, Long>();
                        groupMapTemp.put(group, 1L);
                        orgGroupMap.put(hospital.getCode(), groupMapTemp);
                    }
                    compute_level2_2(orgGroupMap, group,hospital.getCode());
                }
                orgCount++;
                boolean hasGXY = false;//有高血压
                boolean hasTNB = false;//有糖尿病
                if ("2".equals(group)) {
@ -426,51 +419,20 @@ public class SignJob implements Job {
                    }else if(hasTNB){
                        group = 5 + "";//4高血压,5糖尿病
                    }
                    if (cityGroupMap.containsKey(Constant.city)) {
                        Map<String, Long> groupMapTemp = cityGroupMap.get(Constant.city);
                        groupMapTemp.put(group, (groupMapTemp.get(group) == null ? 0l : groupMapTemp.get(group)) + 1);
                        cityGroupMap.put(Constant.city, groupMapTemp);
                    } else {
                        Map<String, Long> groupMapTemp = new HashMap<String, Long>();
                        groupMapTemp.put(group, 1L);
                        cityGroupMap.put(Constant.city, groupMapTemp);
                    }
                    //统计市  现在只有厦门市 默认先写死 后面再改
                    compute_level2_2(cityGroupMap, group,Constant.city);
                    //统计区
                    if (townGroupMap.containsKey(town)) {
                        Map<String, Long> groupMapTemp = townGroupMap.get(town);
                        groupMapTemp.put(group, (groupMapTemp.get(group) == null ? 0l : groupMapTemp.get(group)) + 1);
                        townGroupMap.put(town, groupMapTemp);
                    } else {
                        Map<String, Long> groupMapTemp = new HashMap<String, Long>();
                        groupMapTemp.put(group, 1L);
                        townGroupMap.put(town, groupMapTemp);
                    }
                    //统计机构
                    compute_level2_2(townGroupMap, group,town);
                    //统计站
                    String org=hospital.getCode();
                    if (!"00".equals(org.substring(org.length()-2,org.length()))) {
                        String orgCodeTemp =org.substring(0,org.length()-2)+"00";
                    orgCode=hospital.getCode();
                    if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                        //统计站
                        String orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
                        //统计机构
                        if (orgGroupMap.containsKey(orgCodeTemp)) {
                            Map<String, Long> groupMapTemp = orgGroupMap.get(orgCodeTemp);
                            groupMapTemp.put(group, (groupMapTemp.get(group) == null ? 0l : groupMapTemp.get(group)) + 1);
                            orgGroupMap.put(orgCodeTemp, groupMapTemp);
                        } else {
                            Map<String, Long> groupMapTemp = new HashMap<String, Long>();
                            groupMapTemp.put(group, 1L);
                            orgGroupMap.put(orgCodeTemp, groupMapTemp);
                        }
                        compute_level2_2(orgGroupMap, group,orgCodeTemp);
                    } else {
                        //统计机构
                        if (orgGroupMap.containsKey(hospital.getCode())) {
                            Map<String, Long> groupMapTemp = orgGroupMap.get(hospital.getCode());
                            groupMapTemp.put(group, (groupMapTemp.get(group) == null ? 0l : groupMapTemp.get(group)) + 1);
                            orgGroupMap.put(hospital.getCode(), groupMapTemp);
                        } else {
                            Map<String, Long> groupMapTemp = new HashMap<String, Long>();
                            groupMapTemp.put(group, 1L);
                            orgGroupMap.put(hospital.getCode(), groupMapTemp);
                        }
                        compute_level2_2(orgGroupMap, group,hospital.getCode());
                    }
                }
@ -480,391 +442,100 @@ public class SignJob implements Job {
            //保存市的统计数据
            for (Map.Entry<String, Map<String, Long>> entry : cityGroupMap.entrySet()) {
                //保存健康人群
                WlyyQuotaResult wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(entry.getKey());
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("4");//市级
                wlyyQuotaResult.setLevel2Type(Constant.level_group_1);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_group_1_name);
                if (entry.getValue() != null && entry.getValue().containsKey(Constant.level_group_1)) {
                    wlyyQuotaResult.setResult(entry.getValue().get(Constant.level_group_1) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
                //保存慢病人群
                wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(entry.getKey());
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("4");//市级
                wlyyQuotaResult.setLevel2Type(Constant.level_group_2);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_group_2_name);
                if (entry.getValue() != null && entry.getValue().containsKey(Constant.level_group_2)) {
                    wlyyQuotaResult.setResult(entry.getValue().get(Constant.level_group_2) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
                //保存65岁以上人群
                wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(entry.getKey());
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("4");//市级
                wlyyQuotaResult.setLevel2Type(Constant.level_group_3);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_group_3_name);
                if (entry.getValue() != null && entry.getValue().containsKey(Constant.level_group_3)) {
                    wlyyQuotaResult.setResult(entry.getValue().get(Constant.level_group_3) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
                //保存高血压
                wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(entry.getKey());
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("4");//市级
                wlyyQuotaResult.setLevel2Type(Constant.level_group_4);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_group_4_name);
                if (entry.getValue() != null && entry.getValue().containsKey(Constant.level_group_4)) {
                    wlyyQuotaResult.setResult(entry.getValue().get(Constant.level_group_4) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
                //保存糖尿病
                wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(entry.getKey());
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("4");//市级
                wlyyQuotaResult.setLevel2Type(Constant.level_group_5);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_group_5_name);
                if (entry.getValue() != null && entry.getValue().containsKey(Constant.level_group_5)) {
                    wlyyQuotaResult.setResult(entry.getValue().get(Constant.level_group_5) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
                //保存糖尿病和高血压
                wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(entry.getKey());
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("4");//市级
                wlyyQuotaResult.setLevel2Type(Constant.level_group_100);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_group_100_name);
                if (entry.getValue() != null && entry.getValue().containsKey(Constant.level_group_100)) {
                    wlyyQuotaResult.setResult(entry.getValue().get(Constant.level_group_100) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                Map<String, Long> oneMap=entry.getValue();
                for(Map.Entry<String, Long> entryCh: oneMap.entrySet()){
                    String city=entry.getKey();
                    String cityName=Constant.cityName;
                    String town="";
                    String townName="";
                    String org="";
                    String orgName="";
                    String level="4";
                    String key=entryCh.getKey();
                    save_level2_2(oneMap, city, cityName, town, townName, org, orgName, level, key);
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
            }
            //保存区级
            //保存区的统计数据
            for (Map.Entry<String, Town> townEntry : townsMap.entrySet()) {
                //判断该区是否有统计数据
                Map<String, Long> oneTownGroupMap = townGroupMap.get(townEntry.getKey());//得到当个区的统计数据
                Town town = townEntry.getValue();//得到区级信息
                //保存健康人群
                WlyyQuotaResult wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(Constant.city);
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setTown(town.getCode());
                wlyyQuotaResult.setTownName(town.getName());
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("3");//区级
                wlyyQuotaResult.setLevel2Type(Constant.level_group_1);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_group_1_name);
                if (oneTownGroupMap != null && oneTownGroupMap.containsKey(Constant.level_group_1)) {
                    wlyyQuotaResult.setResult(oneTownGroupMap.get(Constant.level_group_1) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
                //保存慢病人群
                wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(Constant.city);
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setTown(town.getCode());
                wlyyQuotaResult.setTownName(town.getName());
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("3");//区级
                wlyyQuotaResult.setLevel2Type(Constant.level_group_2);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_group_2_name);
                if (oneTownGroupMap != null && oneTownGroupMap.containsKey(Constant.level_group_2)) {
                    wlyyQuotaResult.setResult(oneTownGroupMap.get(Constant.level_group_2) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
                //保存65岁以上人群
                wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(Constant.city);
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setTown(town.getCode());
                wlyyQuotaResult.setTownName(town.getName());
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("3");//区级
                wlyyQuotaResult.setLevel2Type(Constant.level_group_3);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_group_3_name);
                if (oneTownGroupMap != null && oneTownGroupMap.containsKey(Constant.level_group_3)) {
                    wlyyQuotaResult.setResult(oneTownGroupMap.get(Constant.level_group_3) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
                //保存高血压
                wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(Constant.city);
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setTown(town.getCode());
                wlyyQuotaResult.setTownName(town.getName());
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("3");//区级
                wlyyQuotaResult.setLevel2Type(Constant.level_group_4);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_group_4_name);
                if (oneTownGroupMap != null && oneTownGroupMap.containsKey(Constant.level_group_4)) {
                    wlyyQuotaResult.setResult(oneTownGroupMap.get(Constant.level_group_4) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
                //保存糖尿病
                wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(Constant.city);
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setTown(town.getCode());
                wlyyQuotaResult.setTownName(town.getName());
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("3");//区级
                wlyyQuotaResult.setLevel2Type(Constant.level_group_5);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_group_5_name);
                if (oneTownGroupMap != null && oneTownGroupMap.containsKey(Constant.level_group_5)) {
                    wlyyQuotaResult.setResult(oneTownGroupMap.get(Constant.level_group_5) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
                //保存糖尿病
                wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(Constant.city);
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setTown(town.getCode());
                wlyyQuotaResult.setTownName(town.getName());
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("3");//区级
                wlyyQuotaResult.setLevel2Type(Constant.level_group_100);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_group_100_name);
                if (oneTownGroupMap != null && oneTownGroupMap.containsKey(Constant.level_group_100)) {
                    wlyyQuotaResult.setResult(oneTownGroupMap.get(Constant.level_group_100) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                Town townObj = townEntry.getValue();//得到区级信息
                for(Map.Entry<String, Long> entryCh: oneTownGroupMap.entrySet()){
                    String city=entryCh.getKey();
                    String cityName=Constant.cityName;
                    String town=townObj.getCode();
                    String townName=townObj.getName();
                    String org="";
                    String orgName="";
                    String level="3";
                    String key=entryCh.getKey();
                    save_level2_2(oneTownGroupMap, city, cityName, town, townName, org, orgName, level, key);
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
            }
            //保存机构
            for (Map.Entry<String, Hospital> hospitalEntry : hospitalsMap.entrySet()) {
                //判断该机构是否有统计数据
                Map<String, Long> oneOrgGroupMap = orgGroupMap.get(hospitalEntry.getKey());//得到当个机构的统计数据
                Hospital hospital = hospitalEntry.getValue();//得到区级信息
                //保存健康人群
                WlyyQuotaResult wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(Constant.city);
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setTown(hospital.getTown());
                wlyyQuotaResult.setTownName(hospital.getTownName());
                wlyyQuotaResult.setOrgCode(hospital.getCode());
                wlyyQuotaResult.setOrgName(hospital.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("2");//机构级
                wlyyQuotaResult.setLevel2Type(Constant.level_group_1);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_group_1_name);
                if (oneOrgGroupMap != null && oneOrgGroupMap.containsKey(Constant.level_group_1)) {
                    wlyyQuotaResult.setResult(oneOrgGroupMap.get(Constant.level_group_1) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
                //保存慢病
                wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(Constant.city);
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setTown(hospital.getTown());
                wlyyQuotaResult.setTownName(hospital.getTownName());
                wlyyQuotaResult.setOrgCode(hospital.getCode());
                wlyyQuotaResult.setOrgName(hospital.getName());
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("2");//机构级
                wlyyQuotaResult.setLevel2Type(Constant.level_group_2);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_group_2_name);
                if (oneOrgGroupMap != null && oneOrgGroupMap.containsKey(Constant.level_group_2)) {
                    wlyyQuotaResult.setResult(oneOrgGroupMap.get(Constant.level_group_2) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
                //保存65岁以上人群
                wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(Constant.city);
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setTown(hospital.getTown());
                wlyyQuotaResult.setTownName(hospital.getTownName());
                wlyyQuotaResult.setOrgCode(hospital.getCode());
                wlyyQuotaResult.setOrgName(hospital.getName());
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("2");//机构级
                wlyyQuotaResult.setLevel2Type(Constant.level_group_3);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_group_3_name);
                if (oneOrgGroupMap != null && oneOrgGroupMap.containsKey(Constant.level_group_3)) {
                    wlyyQuotaResult.setResult(oneOrgGroupMap.get(Constant.level_group_3) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
                //保存高血压
                wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(Constant.city);
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setTown(hospital.getTown());
                wlyyQuotaResult.setTownName(hospital.getTownName());
                wlyyQuotaResult.setOrgCode(hospital.getCode());
                wlyyQuotaResult.setOrgName(hospital.getName());
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("2");//机构级
                wlyyQuotaResult.setLevel2Type(Constant.level_group_4);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_group_4_name);
                if (oneOrgGroupMap != null && oneOrgGroupMap.containsKey(Constant.level_group_4)) {
                    wlyyQuotaResult.setResult(oneOrgGroupMap.get(Constant.level_group_4) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
                //保存糖尿病
                wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(Constant.city);
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setTown(hospital.getTown());
                wlyyQuotaResult.setTownName(hospital.getTownName());
                wlyyQuotaResult.setOrgCode(hospital.getCode());
                wlyyQuotaResult.setOrgName(hospital.getName());
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("2");//机构级
                wlyyQuotaResult.setLevel2Type(Constant.level_group_5);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_group_5_name);
                if (oneOrgGroupMap != null && oneOrgGroupMap.containsKey(Constant.level_group_5)) {
                    wlyyQuotaResult.setResult(oneOrgGroupMap.get(Constant.level_group_5) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
                //保存糖尿病和高血压
                wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(Constant.city);
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setTown(hospital.getTown());
                wlyyQuotaResult.setTownName(hospital.getTownName());
                wlyyQuotaResult.setOrgCode(hospital.getCode());
                wlyyQuotaResult.setOrgName(hospital.getName());
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("2");//机构级
                wlyyQuotaResult.setLevel2Type(Constant.level_group_100);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_group_100_name);
                if (oneOrgGroupMap != null && oneOrgGroupMap.containsKey(Constant.level_group_100)) {
                    wlyyQuotaResult.setResult(oneOrgGroupMap.get(Constant.level_group_100) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                for(Map.Entry<String, Long> entryCh: oneOrgGroupMap.entrySet()){
                    String city=entryCh.getKey();
                    String cityName=Constant.cityName;
                    String town=hospital.getTown();
                    String townName=hospital.getTownName();
                    String org=hospital.getCode();
                    String orgName=hospital.getName();
                    String level="2";
                    String key=entryCh.getKey();
                    save_level2_2(oneOrgGroupMap, city, cityName, town, townName, org, orgName, level, key);
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
            }
            QuartzJobLog.setJobEndTime(new Date());
            QuartzJobLog.setJobContent("统计" + getYesterday() + " 的签约病人分组数据完成 ,得到签约数目:"+signFamilys.size());
            QuartzJobLog.setJobType("1");
            QuartzJobLog.setJobContent(saveContent(signFamilys,qkCount,orgCount,townCount,cityCount,isAll,errorContent));
            QuartzJobLog.setJobType(isAll?"1":"0");
            quartzJobLogDao.save(QuartzJobLog);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    private void save_level2_2(Map<String, Long> oneMap, String city, String cityName, String town, String townName, String org, String orgName, String level, String key) {
        WlyyQuotaResult wlyyQuotaResult = new WlyyQuotaResult();
        wlyyQuotaResult.setDel("1");
        wlyyQuotaResult.setCity(city);
        wlyyQuotaResult.setCityName(cityName);
        wlyyQuotaResult.setTown(town);
        wlyyQuotaResult.setTownName(townName);
        wlyyQuotaResult.setOrgCode(org);
        wlyyQuotaResult.setOrgName(orgName);
        wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
        wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
        wlyyQuotaResult.setQuotaDate(getYesterday());
        wlyyQuotaResult.setCreateTime(new Date());
        wlyyQuotaResult.setLevel1Type(level);//市级
        wlyyQuotaResult.setLevel2Type(key);
        wlyyQuotaResult.setLevel2TypeName(Constant.getLevelGroupName(key));
        if (oneMap != null && oneMap.containsKey(key)) {
            wlyyQuotaResult.setResult(oneMap.get(key) + "");
        } else {
            wlyyQuotaResult.setResult("0");
        }
        wlyyQuotaResultDao.save(wlyyQuotaResult);
    }
    private void compute_level2_2(Map<String, Map<String, Long>> cityGroupMap, String group,String key) {
        if (cityGroupMap.containsKey(key)) {
            Map<String, Long> groupMapTemp = cityGroupMap.get(key);
            groupMapTemp.put(group, (groupMapTemp.get(group) == null ? 0l : groupMapTemp.get(group)) + 1);
            cityGroupMap.put(key, groupMapTemp);
        } else {
            Map<String, Long> groupMapTemp = new HashMap<String, Long>();
            groupMapTemp.put(group, 1L);
            cityGroupMap.put(key, groupMapTemp);
        }
    }
    /**
     * 机构维度患者年龄维度计算指标
     */
@ -897,452 +568,142 @@ public class SignJob implements Job {
            Map<String, Map<String, Long>> townAgeMap = new HashMap<String, Map<String, Long>>();//key是区行政代码
            Map<String, Map<String, Long>> orgAgeMap = new HashMap<String, Map<String, Long>>();//key是机构代码
            //统计有签约的
            Long cityCount = 0L; //统计到市的数目
            Long townCount = 0L; //统计到所有区的数目
            Long orgCount = 0L;//统计到所有机构的数目
            Long qkCount = 0L;//统计到所有全科医生的数目
            boolean isAll=true;//是否统计失败
            StringBuffer errorContent=new StringBuffer();
            //统计有签约的
           for (SignFamily signFamily : signFamilys) {
               String orgCodeTemp=getOrg(signFamily.getHospital());
                String orgCodeTemp=getOrg(signFamily.getHospital());
                Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到患者签约的机构
                if(hospital == null) continue;
               if(hospital == null) {
                   errorContent.append("签约code:"+signFamily.getCode()+",签约的全科医生(doctor字段)的所属机构(wlyy_doctor表中的hospital字段)为空或者所属的机构数据有问题");
                   isAll=false;
                   continue;
               }
                String town = hospital.getTown();
                int age = IdCardUtil.getAgeForIdcard(signFamily.getIdcard());//根据card解析年龄
                String ageCode = getAgeCode(age);//得到年龄的code
                //统计市
                if (cityAgeMap.containsKey(Constant.city)) {
                    Map<String, Long> groupMapTemp = cityAgeMap.get(Constant.city);
                    groupMapTemp.put(ageCode, (groupMapTemp.get(ageCode) == null ? 0l : groupMapTemp.get(ageCode)) + 1);
                    cityAgeMap.put(Constant.city, groupMapTemp);
                } else {
                    Map<String, Long> groupMapTemp = new HashMap<String, Long>();
                    groupMapTemp.put(ageCode, 1L);
                    cityAgeMap.put(Constant.city, groupMapTemp);
                }
                //统计区
                if (townAgeMap.containsKey(town)) {
                    Map<String, Long> groupMapTemp = townAgeMap.get(town);
                    groupMapTemp.put(ageCode, (groupMapTemp.get(ageCode) == null ? 0l : groupMapTemp.get(ageCode)) + 1);
                    townAgeMap.put(town, groupMapTemp);
                } else {
                    Map<String, Long> groupMapTemp = new HashMap<String, Long>();
                    groupMapTemp.put(ageCode, 1L);
                    townAgeMap.put(town, groupMapTemp);
                }
                //统计机构
               compute_level2_3(cityAgeMap, ageCode,Constant.city);
               cityCount++;
               //统计区
               compute_level2_3(townAgeMap, ageCode,town);
               townCount++;
                //统计站
                String orgCode=hospital.getCode();
                if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                    //统计站
                    orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
                    //统计机构
                    if (orgAgeMap.containsKey(orgCodeTemp)) {
                        Map<String, Long> groupMapTemp = orgAgeMap.get(orgCodeTemp);
                        groupMapTemp.put(ageCode, (groupMapTemp.get(ageCode) == null ? 0l : groupMapTemp.get(ageCode)) + 1);
                        orgAgeMap.put(orgCodeTemp, groupMapTemp);
                    } else {
                        Map<String, Long> groupMapTemp = new HashMap<String, Long>();
                        groupMapTemp.put(ageCode, 1L);
                        orgAgeMap.put(orgCodeTemp, groupMapTemp);
                    }
                    compute_level2_3(orgAgeMap, ageCode,orgCodeTemp);
                } else {
                    //统计机构
                    if (orgAgeMap.containsKey(hospital.getCode())) {
                        Map<String, Long> groupMapTemp = orgAgeMap.get(hospital.getCode());
                        groupMapTemp.put(ageCode, (groupMapTemp.get(ageCode) == null ? 0l : groupMapTemp.get(ageCode)) + 1);
                        orgAgeMap.put(hospital.getCode(), groupMapTemp);
                    } else {
                        Map<String, Long> groupMapTemp = new HashMap<String, Long>();
                        groupMapTemp.put(ageCode, 1L);
                        orgAgeMap.put(hospital.getCode(), groupMapTemp);
                    }
                    compute_level2_3(orgAgeMap, ageCode,hospital.getCode());
                }
               orgCount++;
            }
            //保存统计数据
            // 保存市的统计数据
            for (Map.Entry<String, Map<String, Long>> entry : cityAgeMap.entrySet()) {
                Map<String, Long> oneAgeMap = entry.getValue();
                //保存0~6
                WlyyQuotaResult wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(entry.getKey());
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("4");//市级
                wlyyQuotaResult.setLevel2Type(Constant.level_age_1);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_age_1_name);
                if (oneAgeMap != null && oneAgeMap.containsKey(Constant.level_age_1)) {
                    wlyyQuotaResult.setResult(entry.getValue().get(Constant.level_age_1) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
                //保存7~18
                wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(entry.getKey());
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("4");//市级
                wlyyQuotaResult.setLevel2Type(Constant.level_age_2);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_age_2_name);
                if (oneAgeMap != null && oneAgeMap.containsKey(Constant.level_age_2)) {
                    wlyyQuotaResult.setResult(entry.getValue().get(Constant.level_age_2) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
                //保存18~30
                wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(entry.getKey());
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("4");//市级
                wlyyQuotaResult.setLevel2Type(Constant.level_age_3);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_age_3_name);
                if (oneAgeMap != null && oneAgeMap.containsKey(Constant.level_age_3)) {
                    wlyyQuotaResult.setResult(entry.getValue().get(Constant.level_age_3) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
                //保存30~50
                wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(entry.getKey());
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("4");//市级
                wlyyQuotaResult.setLevel2Type(Constant.level_age_4);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_age_4_name);
                if (oneAgeMap != null && oneAgeMap.containsKey(Constant.level_age_4)) {
                    wlyyQuotaResult.setResult(entry.getValue().get(Constant.level_age_4) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
                //保存50~65
                wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(entry.getKey());
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("4");//市级
                wlyyQuotaResult.setLevel2Type(Constant.level_age_5);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_age_5_name);
                if (oneAgeMap != null && oneAgeMap.containsKey(Constant.level_age_5)) {
                    wlyyQuotaResult.setResult(entry.getValue().get(Constant.level_age_5) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
                //保存18~30
                wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(entry.getKey());
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("4");//市级
                wlyyQuotaResult.setLevel2Type(Constant.level_age_6);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_age_6_name);
                if (oneAgeMap != null && oneAgeMap.containsKey(Constant.level_age_6)) {
                    wlyyQuotaResult.setResult(entry.getValue().get(Constant.level_age_6) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                for(int i=1;i<7;i++){
                    String city=Constant.city;
                    String cityName=Constant.cityName;
                    String town="";
                    String townName="";
                    String org="";
                    String orgName="";
                    String level="4";
                    String key=i+"";
                    save_level2_3(oneAgeMap, city, cityName, town, townName, org, orgName, level, key);
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
            }
            //保存区级
            for (Map.Entry<String, Town> entry : townsMap.entrySet()) {
                //判断该区是否有统计数据
                Map<String, Long> oneAgeMap = townAgeMap.get(entry.getKey());//得到当个区的统计数据
                Town town = entry.getValue();//得到区级信息
                //保存0~6
                WlyyQuotaResult wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(entry.getKey());
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setTown(town.getCode());
                wlyyQuotaResult.setTownName(town.getName());
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("3");//区级
                wlyyQuotaResult.setLevel2Type(Constant.level_age_1);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_age_1_name);
                if (oneAgeMap != null && oneAgeMap.containsKey(Constant.level_age_1)) {
                    wlyyQuotaResult.setResult(oneAgeMap.get(Constant.level_age_1) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
                //保存7~18
                wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(entry.getKey());
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setTown(town.getCode());
                wlyyQuotaResult.setTownName(town.getName());
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("3");//区级
                wlyyQuotaResult.setLevel2Type(Constant.level_age_2);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_age_2_name);
                if (oneAgeMap != null && oneAgeMap.containsKey(Constant.level_age_2)) {
                    wlyyQuotaResult.setResult(oneAgeMap.get(Constant.level_age_2) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
                //保存18~30
                wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(entry.getKey());
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setTown(town.getCode());
                wlyyQuotaResult.setTownName(town.getName());
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("3");//区级
                wlyyQuotaResult.setLevel2Type(Constant.level_age_3);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_age_3_name);
                if (oneAgeMap != null && oneAgeMap.containsKey(Constant.level_age_3)) {
                    wlyyQuotaResult.setResult(oneAgeMap.get(Constant.level_age_3) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
                //保存30~50
                wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(entry.getKey());
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setTown(town.getCode());
                wlyyQuotaResult.setTownName(town.getName());
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("3");//区级
                wlyyQuotaResult.setLevel2Type(Constant.level_age_4);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_age_4_name);
                if (oneAgeMap != null && oneAgeMap.containsKey(Constant.level_age_4)) {
                    wlyyQuotaResult.setResult(oneAgeMap.get(Constant.level_age_4) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
                //保存50~65
                wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(entry.getKey());
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setTown(town.getCode());
                wlyyQuotaResult.setTownName(town.getName());
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("3");//区级
                wlyyQuotaResult.setLevel2Type(Constant.level_age_5);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_age_5_name);
                if (oneAgeMap != null && oneAgeMap.containsKey(Constant.level_age_5)) {
                    wlyyQuotaResult.setResult(oneAgeMap.get(Constant.level_age_5) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
                //保存18~30
                wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(entry.getKey());
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setTown(town.getCode());
                wlyyQuotaResult.setTownName(town.getName());
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("3");//区级
                wlyyQuotaResult.setLevel2Type(Constant.level_age_6);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_age_6_name);
                if (oneAgeMap != null && oneAgeMap.containsKey(Constant.level_age_6)) {
                    wlyyQuotaResult.setResult(oneAgeMap.get(Constant.level_age_6) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                Town townObj = entry.getValue();//得到区级信息
                for(int i=1;i<7;i++){
                    String city=Constant.city;
                    String cityName=Constant.cityName;
                    String town=townObj.getCode();
                    String townName=townObj.getName();
                    String org="";
                    String orgName="";
                    String level="3";
                    String key=i+"";
                    save_level2_3(oneAgeMap, city, cityName, town, townName, org, orgName, level, key);
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
            }
            //保存机构
            for (Map.Entry<String, Hospital> hospitalEntry : hospitalsMap.entrySet()) {
                //判断该机构是否有统计数据
                Map<String, Long> oneAgeMap = orgAgeMap.get(hospitalEntry.getKey());//得到当个机构的统计数据
                Hospital hospital = hospitalEntry.getValue();//得到区级信息
                //保存0~6
                WlyyQuotaResult wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(hospital.getCity());
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setTown(hospital.getTown());
                wlyyQuotaResult.setTownName(hospital.getTownName());
                wlyyQuotaResult.setOrgCode(hospital.getCode());
                wlyyQuotaResult.setOrgName(hospital.getName());
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("2");//区级
                wlyyQuotaResult.setLevel2Type(Constant.level_age_1);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_age_1_name);
                if (oneAgeMap != null && oneAgeMap.containsKey(Constant.level_age_1)) {
                    wlyyQuotaResult.setResult(oneAgeMap.get(Constant.level_age_1) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
                //保存7~18
                wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(hospital.getCity());
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setTown(hospital.getTown());
                wlyyQuotaResult.setTownName(hospital.getTownName());
                wlyyQuotaResult.setOrgCode(hospital.getCode());
                wlyyQuotaResult.setOrgName(hospital.getName());
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("2");//机构级
                wlyyQuotaResult.setLevel2Type(Constant.level_age_2);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_age_2_name);
                if (oneAgeMap != null && oneAgeMap.containsKey(Constant.level_age_2)) {
                    wlyyQuotaResult.setResult(oneAgeMap.get(Constant.level_age_2) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
                //保存18~30
                wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(hospital.getCity());
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setTown(hospital.getTown());
                wlyyQuotaResult.setTownName(hospital.getTownName());
                wlyyQuotaResult.setOrgCode(hospital.getCode());
                wlyyQuotaResult.setOrgName(hospital.getName());
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("2");//机构级
                wlyyQuotaResult.setLevel2Type(Constant.level_age_3);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_age_3_name);
                if (oneAgeMap != null && oneAgeMap.containsKey(Constant.level_age_3)) {
                    wlyyQuotaResult.setResult(oneAgeMap.get(Constant.level_age_3) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
                //保存30~50
                wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(hospital.getCity());
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setTown(hospital.getTown());
                wlyyQuotaResult.setTownName(hospital.getTownName());
                wlyyQuotaResult.setOrgCode(hospital.getCode());
                wlyyQuotaResult.setOrgName(hospital.getName());
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("2");//机构级
                wlyyQuotaResult.setLevel2Type(Constant.level_age_4);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_age_4_name);
                if (oneAgeMap != null && oneAgeMap.containsKey(Constant.level_age_4)) {
                    wlyyQuotaResult.setResult(oneAgeMap.get(Constant.level_age_4) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
                //保存50~65
                wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(hospital.getCity());
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setTown(hospital.getTown());
                wlyyQuotaResult.setTownName(hospital.getTownName());
                wlyyQuotaResult.setOrgCode(hospital.getCode());
                wlyyQuotaResult.setOrgName(hospital.getName());
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("2");//机构级
                wlyyQuotaResult.setLevel2Type(Constant.level_age_5);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_age_5_name);
                if (oneAgeMap != null && oneAgeMap.containsKey(Constant.level_age_5)) {
                    wlyyQuotaResult.setResult(oneAgeMap.get(Constant.level_age_5) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
                //保存18~30
                wlyyQuotaResult = new WlyyQuotaResult();
                wlyyQuotaResult.setDel("1");
                wlyyQuotaResult.setCity(hospital.getCity());
                wlyyQuotaResult.setCityName(Constant.cityName);
                wlyyQuotaResult.setTown(hospital.getTown());
                wlyyQuotaResult.setTownName(hospital.getTownName());
                wlyyQuotaResult.setOrgCode(hospital.getCode());
                wlyyQuotaResult.setOrgName(hospital.getName());
                wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
                wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
                wlyyQuotaResult.setQuotaDate(getYesterday());
                wlyyQuotaResult.setCreateTime(new Date());
                wlyyQuotaResult.setLevel1Type("2");//机构级
                wlyyQuotaResult.setLevel2Type(Constant.level_age_6);
                wlyyQuotaResult.setLevel2TypeName(Constant.level_age_6_name);
                if (oneAgeMap != null && oneAgeMap.containsKey(Constant.level_age_6)) {
                    wlyyQuotaResult.setResult(oneAgeMap.get(Constant.level_age_6) + "");
                } else {
                    wlyyQuotaResult.setResult("0");
                for(int i=1;i<7;i++){
                    String city=Constant.city;
                    String cityName=Constant.cityName;
                    String town=hospital.getTown();
                    String townName=hospital.getTownName();
                    String org=hospital.getCode();
                    String orgName=hospital.getName();
                    String level="2";
                    String key=i+"";
                    save_level2_3(oneAgeMap, city, cityName, town, townName, org, orgName, level, key);
                }
                wlyyQuotaResultDao.save(wlyyQuotaResult);
            }
            QuartzJobLog.setJobEndTime(new Date());
            QuartzJobLog.setJobContent("统计" + getYesterday() + " 的签约患者年龄数据完成 ,得到签约数目:"+signFamilys.size());
            QuartzJobLog.setJobType("1");
            QuartzJobLog.setJobContent(saveContent(signFamilys,qkCount,orgCount,townCount,cityCount,isAll,errorContent));
            QuartzJobLog.setJobType(isAll?"1":"0");
            quartzJobLogDao.save(QuartzJobLog);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    private void save_level2_3(Map<String, Long> oneAgeMap, String city, String cityName, String town, String townName, String org, String orgName, String level, String key) {
        WlyyQuotaResult wlyyQuotaResult = new WlyyQuotaResult();
        wlyyQuotaResult.setDel("1");
        wlyyQuotaResult.setCity(city);
        wlyyQuotaResult.setCityName(cityName);
        wlyyQuotaResult.setTown(town);
        wlyyQuotaResult.setTownName(townName);
        wlyyQuotaResult.setOrgCode(org);
        wlyyQuotaResult.setOrgName(orgName);
        wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
        wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
        wlyyQuotaResult.setQuotaDate(getYesterday());
        wlyyQuotaResult.setCreateTime(new Date());
        wlyyQuotaResult.setLevel1Type(level);//市级
        wlyyQuotaResult.setLevel2Type(key);
        wlyyQuotaResult.setLevel2TypeName(Constant.getLevelAgeName(key));
        if (oneAgeMap != null && oneAgeMap.containsKey(key)) {
            wlyyQuotaResult.setResult(oneAgeMap.get(key) + "");
        } else {
            wlyyQuotaResult.setResult("0");
        }
        wlyyQuotaResultDao.save(wlyyQuotaResult);
    }
    private void compute_level2_3(Map<String, Map<String, Long>> cityAgeMap, String ageCode,String key) {
        if (cityAgeMap.containsKey(key)) {
            Map<String, Long> groupMapTemp = cityAgeMap.get(key);
            groupMapTemp.put(ageCode, (groupMapTemp.get(ageCode) == null ? 0l : groupMapTemp.get(ageCode)) + 1);
            cityAgeMap.put(key, groupMapTemp);
        } else {
            Map<String, Long> groupMapTemp = new HashMap<String, Long>();
            groupMapTemp.put(ageCode, 1L);
            cityAgeMap.put(key, groupMapTemp);
        }
    }
    /**
     * 机构维度计算指标
     */
@ -1357,10 +718,10 @@ public class SignJob implements Job {
        QuartzJobLog.setJobName(wlyyJobConfig.getJobName());
        //查找出系统全部的全科医生
        List<Doctor> doctors = doctorDao.findAllQKDoctot();
        Map<String, Doctor> doctorsMap = new HashMap<String, Doctor>();
        for (Doctor doctor : doctors) {
            doctorsMap.put(doctor.getCode(), doctor);
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
        Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
        for (AdminTeam adminTeam : adminTeams) {
            adminTeamMap.put(adminTeam.getId()+"", adminTeam);
        }
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospitalzxFWZ();
@ -1379,45 +740,55 @@ public class SignJob implements Job {
        Map<String, Long> tjTownMap = new HashMap<String, Long>();//区级的统计map key 是区行政区划350200
        Map<String, Long> tjOrgMap = new HashMap<String, Long>();//机构的统计map key 是机构的code
        Map<String, Long> tjQkdoctorMap = new HashMap<String, Long>();//团队级的统计map 目前没有团队 先用全科医生统一  key doctorCode
        Long cityCount = 0L;
        Map<String, Long> tjAdminTeamMap = new HashMap<String, Long>();//团队级的统计map 目前没有团队 先用全科医生统一  key doctorCode
        Long cityCount = 0L; //统计到市的数目
        Long townCount = 0L; //统计到所有区的数目
        Long orgCount = 0L;//统计到所有机构的数目
        Long qkCount = 0L;//统计到所有全科医生的数目
        boolean isAll=true;//是否统计失败
        StringBuffer errorContent=new StringBuffer();
        //统计有签约的
        String orgCodeTemp="";
        for (SignFamily signFamily : signFamilys) {
            String doctorCode = signFamily.getDoctor();//得到签约中全科医生的code
            //统计团队
            compute_level1(tjQkdoctorMap, doctorCode);
            //判断医生属于哪个机构
            Doctor doctor = doctorsMap.get(doctorCode);
            if (doctor == null) {
                continue;
            }
            String orgCode = doctor.getHospital();
            //统计机构
            //统计站
            String orgCode = signFamily.getHospital();
            String orgCodeTemp="";
            if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                //统计站
                //站
                orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
                compute_level1(tjOrgMap, orgCodeTemp);
            } else {
                //统计社区
                compute_level1(tjOrgMap, orgCode);
            }else{
                //社区
                orgCodeTemp=orgCode;
            }
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) continue;
            if(hospital == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据异常");
                isAll=false;
                continue;
            }
            AdminTeam adminTeam=adminTeamMap.get(signFamily.getAdminTeamId()+"");
            if(adminTeam == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据异常");
                isAll=false;
                continue;
            }
            //统计市 ---------------start--------------
            cityCount++;
            //统计区 ---------------start--------------
            String townCode = hospital.getTown();
            //统计区
            compute_level1(tjTownMap, townCode);
            //统计市
            cityCount++;
            townCount++;
            //统计机构---------------start--------------
            compute_level1(tjOrgMap, orgCodeTemp);
            orgCount++;
            //统计团队 ---------------start--------------
            String adminTeamId = signFamily.getAdminTeamId()+"";
            compute_level1(tjAdminTeamMap, adminTeamId);
            qkCount++;
        }
        //保存统计的结果
        //保存全科医生的签约统计
        for (Map.Entry<String, Doctor> entry : doctorsMap.entrySet()) {
            Doctor doctor = doctorsMap.get(entry.getKey());//得到全科医生
            orgCodeTemp=getOrg(doctor.getHospital());
        for (Map.Entry<String, AdminTeam> entry : adminTeamMap.entrySet()) {
            AdminTeam adminTeam = adminTeamMap.get(entry.getKey());//得到全科医生
            String orgCodeTemp=getOrg(adminTeam.getOrgCode());
            Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到全科医生的机构
            if(hospital == null) continue;
            String city=Constant.city;
@ -1430,12 +801,12 @@ public class SignJob implements Job {
                org=hospital.getCode().substring(0,hospital.getCode().length()-2)+"00";
            }
            String orgName=hospital.getName();
            String doctorCode=doctor.getCode();
            String doctorName=doctor.getName();
            String doctorJob=doctor.getJob();
            String doctorCode=adminTeam.getId()+"";
            String doctorName=adminTeam.getName();
            String doctorJob="";
            String level="1";
            String key=doctor.getCode();
            save_level1(tjQkdoctorMap, key, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level);
            String key=adminTeam.getId()+"";
            save_level1(tjAdminTeamMap, key, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level);
        }
        //保存机构的签约统计
        for (Map.Entry<String, Hospital> entry : hospitalsMap.entrySet()) {
@ -1491,8 +862,8 @@ public class SignJob implements Job {
        }
        QuartzJobLog.setJobEndTime(new Date());
        QuartzJobLog.setJobContent("统计" + getYesterday() + " 的签约数据完成 ,得到签约数目:"+signFamilys.size());
        QuartzJobLog.setJobType("1");
        QuartzJobLog.setJobContent(saveContent(signFamilys,qkCount,orgCount,townCount,cityCount,isAll,errorContent));
        QuartzJobLog.setJobType(isAll?"1":"0");
        quartzJobLogDao.save(QuartzJobLog);
    }
    /**
@ -1584,7 +955,18 @@ public class SignJob implements Job {
            return org;
        }
    }
    public static void main(String[] args) {
        getDayString(0);
    private String saveContent(List<SignFamily> signFamilys, Long qkCount, Long orgCount, Long townCount, Long cityCount, boolean isAll, StringBuffer errorContent) {
        StringBuffer string=new StringBuffer("统计"+getYesterday()+" 的待签约数据完成 ,数据库查询到待签约数目:"+signFamilys.size());
        string.append(",统计到市的数据总数:"+cityCount);
        string.append(",统计到区的数据总数:"+townCount);
        string.append(",统计到机构的数据总数:"+orgCount);
        string.append(",统计到团队的数据总数:"+qkCount);
        string.append(",是否统计成功:"+isAll);
        if(!isAll){
            string.append(",失败原因:"+errorContent);
        }
        return string.toString();
    }
}

+ 66 - 34
src/main/java/com/yihu/wlyy/job/UnSignJob.java

@ -1,5 +1,6 @@
package com.yihu.wlyy.job;
import com.yihu.wlyy.entity.doctor.team.admin.AdminTeam;
import com.yihu.wlyy.entity.organization.Hospital;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.doctor.profile.Doctor;
@ -7,6 +8,7 @@ import com.yihu.wlyy.entity.job.QuartzJobLog;
import com.yihu.wlyy.entity.patient.SignFamily;
import com.yihu.wlyy.entity.statistics.WlyyQuotaResult;
import com.yihu.wlyy.repository.address.TownDao;
import com.yihu.wlyy.repository.doctor.DoctorAdminTeamDao;
import com.yihu.wlyy.repository.doctor.DoctorDao;
import com.yihu.wlyy.repository.job.QuartzJobLogDao;
import com.yihu.wlyy.repository.organization.HospitalDao;
@ -49,6 +51,8 @@ public class UnSignJob implements Job {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    String yesterday;
    String now;
    @Override
@ -80,10 +84,10 @@ public class UnSignJob implements Job {
        quartzJobLog.setJobName(wlyyJobConfig.getJobName());
        //查找出系统全部的全科医生
        List<Doctor> doctors = doctorDao.findAllQKDoctot();
        Map<String, Doctor> doctorsMap = new HashMap<String, Doctor>();
        for (Doctor doctor : doctors) {
            doctorsMap.put(doctor.getCode(), doctor);
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
        Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
        for (AdminTeam adminTeam : adminTeams) {
            adminTeamMap.put(adminTeam.getId()+"", adminTeam);
        }
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospital2();
@ -102,40 +106,55 @@ public class UnSignJob implements Job {
        Map<String, Long> tjTownMap = new HashMap<String, Long>();//区级的统计map key 是区行政区划350200
        Map<String, Long> tjOrgMap = new HashMap<String, Long>();//机构的统计map key 是机构的code
        Map<String, Long> tjQkdoctorMap = new HashMap<String, Long>();//团队级的统计map 目前没有团队 先用全科医生统一  key doctorCode
        Long cityCount = 0L;
        Map<String, Long> tjAdminTeamMap = new HashMap<String, Long>();//团队级的统计map 目前没有团队 先用全科医生统一  key doctorCode
        Long cityCount = 0L; //统计到市的数目
        Long townCount = 0L; //统计到所有区的数目
        Long orgCount = 0L;//统计到所有机构的数目
        Long qkCount = 0L;//统计到所有全科医生的数目
        boolean isAll=true;//是否统计失败
        StringBuffer errorContent=new StringBuffer();
        //统计有解约的
        String orgCodeTemp="";
        for (SignFamily signFamily : signFamilys) {
            String doctorCode = signFamily.getDoctor();//得到解约中全科医生的code
            //统计团队
            compute(tjQkdoctorMap, doctorCode);
            //判断医生属于哪个机构
            Doctor doctor = doctorsMap.get(doctorCode);
            String orgCode = doctor.getHospital();
            //统计机构
            String orgCode = signFamily.getHospital();
            String orgCodeTemp="";
            if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                //统计站
                 orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
                compute(tjOrgMap, orgCodeTemp);
                //站
                orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
            }else{
                //统计社区
                //社区
                orgCodeTemp=orgCode;
                compute(tjOrgMap, orgCode);
            }
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) continue;
            if(hospital == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据异常");
                isAll=false;
                continue;
            }
            AdminTeam adminTeam=adminTeamMap.get(signFamily.getAdminTeamId()+"");
            if(adminTeam == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据异常");
                isAll=false;
                continue;
            }
            //统计市 ---------------start--------------
            cityCount++;
            //统计区 ---------------start--------------
            String townCode = hospital.getTown();
            //统计区
            compute(tjTownMap, townCode);
            //统计市
            cityCount++;
            townCount++;
            //统计机构---------------start--------------
            compute(tjOrgMap, orgCodeTemp);
            orgCount++;
            //统计团队 ---------------start--------------
            String adminTeamId = signFamily.getAdminTeamId()+"";
            compute(tjAdminTeamMap, adminTeamId);
            qkCount++;
        }
        //保存统计的结果
        //保存全科医生的解约统计
        for (Map.Entry<String, Doctor> entry : doctorsMap.entrySet()) {
            Doctor doctor = doctorsMap.get(entry.getKey());//得到全科医生
            orgCodeTemp=getOrg(doctor.getHospital());
        for (Map.Entry<String, AdminTeam> entry : adminTeamMap.entrySet()) {
            AdminTeam adminTeam = adminTeamMap.get(entry.getKey());//得到全科医生
            String orgCodeTemp=getOrg(adminTeam.getOrgCode());
            Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到全科医生的机构
            if(hospital == null) continue;
            String city=Constant.city;
@ -148,12 +167,12 @@ public class UnSignJob implements Job {
                org=hospital.getCode().substring(0,hospital.getCode().length()-2)+"00";
            }
            String orgName=hospital.getName();
            String doctorCode=doctor.getCode();
            String doctorName=doctor.getName();
            String doctorJob=doctor.getJob();
            String doctorCode=adminTeam.getId()+"";
            String doctorName=adminTeam.getName();
            String doctorJob="";
            String level="1";
            String key=doctor.getCode();
            save(tjQkdoctorMap, key, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level);
            String key=adminTeam.getId()+"";
            save(tjAdminTeamMap, key, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level);
        }
        //保存机构的解约统计
        for (Map.Entry<String, Hospital> entry : hospitalsMap.entrySet()) {
@ -209,8 +228,8 @@ public class UnSignJob implements Job {
        }
        quartzJobLog.setJobEndTime(new Date());
        quartzJobLog.setJobContent("统计"+getYesterday()+" 的解约数据完成 ,得到解约数目:"+signFamilys.size());
        quartzJobLog.setJobType("1");
        quartzJobLog.setJobContent(saveContent(signFamilys,qkCount,orgCount,townCount,cityCount,isAll,errorContent));
        quartzJobLog.setJobType(isAll?"1":"0");
        quartzJobLogDao.save(quartzJobLog);
    }
@ -257,4 +276,17 @@ public class UnSignJob implements Job {
    public String getYesterday() {
        return yesterday;
    }
    private String saveContent(List<SignFamily> signFamilys, Long qkCount, Long orgCount, Long townCount, Long cityCount, boolean isAll, StringBuffer errorContent) {
        StringBuffer string=new StringBuffer("统计"+getYesterday()+" 的解约数据完成 ,数据库查询到解约数目:"+signFamilys.size());
        string.append(",统计到市的数据总数:"+cityCount);
        string.append(",统计到区的数据总数:"+townCount);
        string.append(",统计到机构的数据总数:"+orgCount);
        string.append(",统计到团队的数据总数:"+qkCount);
        string.append(",是否统计成功:"+isAll);
        if(!isAll){
            string.append(",失败原因:"+errorContent);
        }
        return string.toString();
    }
}

+ 65 - 36
src/main/java/com/yihu/wlyy/job/WaitSignJob.java

@ -1,5 +1,6 @@
package com.yihu.wlyy.job;
import com.yihu.wlyy.entity.doctor.team.admin.AdminTeam;
import com.yihu.wlyy.entity.organization.Hospital;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.doctor.profile.Doctor;
@ -7,6 +8,7 @@ import com.yihu.wlyy.entity.job.QuartzJobLog;
import com.yihu.wlyy.entity.patient.SignFamily;
import com.yihu.wlyy.entity.statistics.WlyyQuotaResult;
import com.yihu.wlyy.repository.address.TownDao;
import com.yihu.wlyy.repository.doctor.DoctorAdminTeamDao;
import com.yihu.wlyy.repository.doctor.DoctorDao;
import com.yihu.wlyy.repository.job.QuartzJobLogDao;
import com.yihu.wlyy.repository.organization.HospitalDao;
@ -51,6 +53,8 @@ public class WaitSignJob implements Job {
    String yesterday;
    String now;
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    @Override
    public void execute(JobExecutionContext context)
            throws JobExecutionException {
@ -79,10 +83,10 @@ public class WaitSignJob implements Job {
        quartzJobLog.setJobName(wlyyJobConfig.getJobName());
        //查找出系统全部的全科医生
        List<Doctor> doctors = doctorDao.findAllQKDoctot();
        Map<String, Doctor> doctorsMap = new HashMap<String, Doctor>();
        for (Doctor doctor : doctors) {
            doctorsMap.put(doctor.getCode(), doctor);
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
        Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
        for (AdminTeam adminTeam : adminTeams) {
            adminTeamMap.put(adminTeam.getId()+"", adminTeam);
        }
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospital2();
@ -101,43 +105,55 @@ public class WaitSignJob implements Job {
        Map<String, Long> tjTownMap = new HashMap<String, Long>();//区级的统计map key 是区行政区划350200
        Map<String, Long> tjOrgMap = new HashMap<String, Long>();//机构的统计map key 是机构的code
        Map<String, Long> tjQkdoctorMap = new HashMap<String, Long>();//团队级的统计map 目前没有团队 先用全科医生统一  key doctorCode
        Long cityCount = 0L;
        Map<String, Long> tjAdminTeamMap = new HashMap<String, Long>();//团队级的统计map 目前没有团队 先用全科医生统一  key doctorCode
        Long cityCount = 0L; //统计到市的数目
        Long townCount = 0L; //统计到所有区的数目
        Long orgCount = 0L;//统计到所有机构的数目
        Long qkCount = 0L;//统计到所有全科医生的数目
        boolean isAll=true;//是否统计失败
        StringBuffer errorContent=new StringBuffer();
        //统计有待签约的
        String orgCodeTemp="";
        for (SignFamily signFamily : signFamilys) {
            String doctorCode = signFamily.getDoctor();//得到待签约中全科医生的code
            //统计团队
            compute(tjQkdoctorMap, doctorCode);
            //判断医生属于哪个机构
            Doctor doctor = doctorsMap.get(doctorCode);
            if(doctor==null){
                continue;
            }
            String orgCode = doctor.getHospital();
            //统计机构
            String orgCode = signFamily.getHospital();
            String orgCodeTemp="";
            if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                //统计站
                //站
                orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
                compute(tjOrgMap, orgCodeTemp);
            }else{
                //统计社区
                //社区
                orgCodeTemp=orgCode;
                compute(tjOrgMap, orgCode);
            }
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) continue;
            if(hospital == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据异常");
                isAll=false;
                continue;
            }
            AdminTeam adminTeam=adminTeamMap.get(signFamily.getAdminTeamId()+"");
            if(adminTeam == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据异常");
                isAll=false;
                continue;
            }
            //统计市 ---------------start--------------
            cityCount++;
            //统计区 ---------------start--------------
            String townCode = hospital.getTown();
            //统计区
            compute(tjTownMap, townCode);
            //统计市
            cityCount++;
            townCount++;
            //统计机构---------------start--------------
            compute(tjOrgMap, orgCodeTemp);
            orgCount++;
            //统计团队 ---------------start--------------
            String adminTeamId = signFamily.getAdminTeamId()+"";
            compute(tjAdminTeamMap, adminTeamId);
            qkCount++;
        }
        //保存统计的结果
        //保存全科医生的待签约统计
        for (Map.Entry<String, Doctor> entry : doctorsMap.entrySet()) {
            Doctor doctor = doctorsMap.get(entry.getKey());//得到全科医生
            orgCodeTemp=getOrg(doctor.getHospital());
        for (Map.Entry<String, AdminTeam> entry : adminTeamMap.entrySet()) {
            AdminTeam adminTeam = adminTeamMap.get(entry.getKey());//得到全科医生
            String orgCodeTemp=getOrg(adminTeam.getOrgCode());
            Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到全科医生的机构
            if(hospital == null) continue;
            String city=Constant.city;
@ -150,12 +166,12 @@ public class WaitSignJob implements Job {
                org=hospital.getCode().substring(0,hospital.getCode().length()-2)+"00";
            }
            String orgName=hospital.getName();
            String doctorCode=doctor.getCode();
            String doctorName=doctor.getName();
            String doctorJob=doctor.getJob();
            String doctorCode=adminTeam.getId()+"";
            String doctorName=adminTeam.getName();
            String doctorJob="";
            String level="1";
            String key=doctor.getCode();
            save(tjQkdoctorMap, key, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level);
            String key=adminTeam.getId()+"";
            save(tjAdminTeamMap, key, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level);
        }
        //保存机构的待签约统计
        for (Map.Entry<String, Hospital> entry : hospitalsMap.entrySet()) {
@ -211,8 +227,8 @@ public class WaitSignJob implements Job {
        }
        quartzJobLog.setJobEndTime(new Date());
        quartzJobLog.setJobContent("统计"+getYesterday()+" 的待签约数据完成 ,得到待签约数目:"+signFamilys.size());
        quartzJobLog.setJobType("1");
        quartzJobLog.setJobContent(saveContent(signFamilys,qkCount,orgCount,townCount,cityCount,isAll,errorContent));
        quartzJobLog.setJobType(isAll?"1":"0");
        quartzJobLogDao.save(quartzJobLog);
    }
@ -258,4 +274,17 @@ public class WaitSignJob implements Job {
    public String getYesterday() {
        return yesterday;
    }
    private String saveContent(List<SignFamily> signFamilys, Long qkCount, Long orgCount, Long townCount, Long cityCount, boolean isAll, StringBuffer errorContent) {
        StringBuffer string=new StringBuffer("统计"+getYesterday()+" 的待签约数据完成 ,数据库查询到待签约数目:"+signFamilys.size());
        string.append(",统计到市的数据总数:"+cityCount);
        string.append(",统计到区的数据总数:"+townCount);
        string.append(",统计到机构的数据总数:"+orgCount);
        string.append(",统计到团队的数据总数:"+qkCount);
        string.append(",是否统计成功:"+isAll);
        if(!isAll){
            string.append(",失败原因:"+errorContent);
        }
        return string.toString();
    }
}

+ 2 - 0
src/main/java/com/yihu/wlyy/repository/doctor/DoctorAdminTeamDao.java

@ -71,4 +71,6 @@ public interface DoctorAdminTeamDao extends
    Long findIdByLeaderCode(@Param("leaderCode") String leaderCode);
    @Query(" from AdminTeam t")
    List<AdminTeam> findAllTeam();
}

+ 3 - 0
src/main/java/com/yihu/wlyy/repository/patient/SignFamilyDao.java

@ -274,4 +274,7 @@ public interface SignFamilyDao extends PagingAndSortingRepository<SignFamily, Lo
	// 查询患者已生效的家庭签约
	@Query("select a from SignFamily a where a.patient = ?1 and a.type = 2 and a.status = 0")
	SignFamily findSigningByPatient(String patient);
	//找出家庭签约中 团队是空的值
	@Query("select a from SignFamily a where a.type = 2 and a.status = 1 and a.adminTeamId is null")
	List<SignFamily> findBySignTypeAndTeamCode();
}

+ 2 - 0
src/main/java/com/yihu/wlyy/service/app/consult/ConsultTeamService.java

@ -460,6 +460,7 @@ public class ConsultTeamService extends ConsultService {
            DoctorTeamMember doctorTeamMember = doctorTeamDoctor.findDoctorSanshi2ByTeam(doctorTeam.getCode(), 3);
            // 设置家庭医生
            ct.setDoctor(doctorTeamMember.getMemberCode());
            ct.setAdminTeamId(sc.getAdminTeamId());
        } else if (ct.getType() == 2) {
            // 咨询家庭医生
            SignFamily sf = signFamilyDao.findByjiatingPatient(patient);
@ -474,6 +475,7 @@ public class ConsultTeamService extends ConsultService {
            DoctorTeamMember doctorTeamMember = doctorTeamDoctor.findDoctorJiating2ByTeam(doctorTeam.getCode(), 3);
            // 设置家庭医生
            ct.setDoctor(doctorTeamMember.getMemberCode());
            ct.setAdminTeamId(sf.getAdminTeamId());
        }
        // 设置患者信息
        ct.setPatient(patient);

+ 0 - 133
src/main/java/com/yihu/wlyy/service/app/sign/FamilyContractService.java

@ -1649,137 +1649,4 @@ public class FamilyContractService extends BaseService {
        }
        return true;
    }
    /**
     * 分配健管师
     *
     * @param patient 患者code
     * @param healthDoctor 健康管理师code
     * @return
     */
    public JSONObject updateSignInfo(String patient,String healthDoctor,String expensesType){
        JSONObject result = new JSONObject();
        Doctor doctor = doctorDao.findByCode(healthDoctor);
        SignFamily signFamily = signFamilyDao.findByjiatingPatientYes(patient);
        if(signFamily == null){
            result.put("status",-1);
            result.put("msg","居民不存在家庭签约");
        }
        if(doctor == null){
            result.put("status",-2);
            result.put("msg","医生不存在");
        }
        if(StringUtils.isNotEmpty(healthDoctor)) {
            if (StringUtils.isNotEmpty(signFamily.getDoctorHealth())) {
                // 取消原有健康管理师的家庭签约分组,并新增分组
                List<DoctorPatientGroupInfo> groups = doctorPatientGroupInfoDao.findGroupInfoByPatientAndDoctor(signFamily.getDoctorHealth(), patient);
                if (groups != null) {
                    List<DoctorPatientGroupInfo> newGroups = new ArrayList<>();
                    for (DoctorPatientGroupInfo group : groups) {
                        if (group.getGroup().equals("1") || group.getGroup().equals("2") || group.getGroup().equals("3")) {
                            DoctorPatientGroupInfo newGroup = new DoctorPatientGroupInfo();
                            newGroup.setDoctor(doctor.getCode());
                            newGroup.setCzrq(new Date());
                            newGroup.setGroup(group.getGroup());
                            newGroup.setPatient(patient);
                            newGroup.setSignType("2");
                            newGroup.setStatus(1);
                            newGroup.setPname(group.getPname());
                            newGroups.add(newGroup);
                        }
                        group.setStatus(0);
                        group.setCzrq(new Date());
                    }
                    if (newGroups.size() > 0) {
                        doctorPatientGroupInfoDao.save(newGroups);
                    }
                    // 更新团队信息
                    if (StringUtils.isNotEmpty(signFamily.getTeamCode())) {
                        DoctorTeamMember teamMember = doctorTeamDoctor.findMemberByTeamAndCode(signFamily.getTeamCode(), signFamily.getDoctorHealth());
                        if (teamMember != null) {
                            teamMember.setDel("0");
                            teamMember.setCzrq(new Date());
                        }
                        DoctorTeamMember newTeamMember = new DoctorTeamMember();
                        newTeamMember.setCode(getCode());
                        newTeamMember.setMemberCode(doctor.getCode());
                        newTeamMember.setName(doctor.getName());
                        newTeamMember.setTeam(signFamily.getTeamCode());
                        newTeamMember.setDel("1");
                        newTeamMember.setSignType("2");
                        newTeamMember.setType(3);
                        newTeamMember.setCzrq(new Date());
                        doctorTeamDoctor.save(newTeamMember);
                    }
                }
            } else {
                // 新增分组
                List<DoctorPatientGroupInfo> groups = doctorPatientGroupInfoDao.findGroupInfoByPatientAndDoctor(signFamily.getDoctor(), patient);
                if (groups != null) {
                    List<DoctorPatientGroupInfo> newGroups = new ArrayList<>();
                    for (DoctorPatientGroupInfo group : groups) {
                        if (group.getGroup().equals("1") || group.getGroup().equals("2") || group.getGroup().equals("3")) {
                            DoctorPatientGroupInfo newGroup = new DoctorPatientGroupInfo();
                            newGroup.setDoctor(doctor.getCode());
                            newGroup.setCzrq(new Date());
                            newGroup.setGroup(group.getGroup());
                            newGroup.setPatient(patient);
                            newGroup.setSignType("2");
                            newGroup.setStatus(1);
                            newGroup.setPname(group.getPname());
                            newGroups.add(newGroup);
                        }
                    }
                    if (newGroups.size() > 0) {
                        doctorPatientGroupInfoDao.save(newGroups);
                    }
                    // 新增团队信息
                    if (StringUtils.isNotEmpty(signFamily.getTeamCode())) {
                        DoctorTeamMember newTeamMember = new DoctorTeamMember();
                        newTeamMember.setCode(getCode());
                        newTeamMember.setMemberCode(doctor.getCode());
                        newTeamMember.setName(doctor.getName());
                        newTeamMember.setTeam(signFamily.getTeamCode());
                        newTeamMember.setDel("1");
                        newTeamMember.setSignType("2");
                        newTeamMember.setType(3);
                        newTeamMember.setCzrq(new Date());
                        doctorTeamDoctor.save(newTeamMember);
                    }
                }
            }
            signFamily.setDoctorHealth(doctor.getCode());
            signFamily.setDoctorHealthName(doctor.getName());
            signFamily.setCzrq(new Date());
        }
        if(StringUtils.isNotEmpty(expensesType)){
            if (StringUtils.isNotEmpty(signFamily.getMedicalInsuranceNum())) {
                result.put("status", -3);
                result.put("msg","数据已上传社保,不能修改补贴类型");
            }else{
                signFamily.setExpensesType(expensesType);
            }
        }
        result.put("status",1);
        result.put("msg","更新成功");
        return result;
    }
}

+ 38 - 0
src/main/java/com/yihu/wlyy/web/data/DataHandlingController.java

@ -0,0 +1,38 @@
package com.yihu.wlyy.web.data;
import com.yihu.wlyy.entity.organization.HospitalDept;
import com.yihu.wlyy.service.app.sign.FamilyContractService;
import com.yihu.wlyy.web.BaseController;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
/**
 * Created by Administrator on 2016.10.08.
 * 历史数据处理控制器
 */
@Controller
@RequestMapping(value = "/dataHandling")
public class DataHandlingController extends BaseController {
    @Autowired
    private FamilyContractService familyContractService;
    /**
     * 生成签约表中的行政团队的code
     */
    @RequestMapping(value = "produceSignTeamCode")
    @ResponseBody
    public String produceSignTeamCode() {
        try {
            return write(200, familyContractService.produceSignTeamCode());
        } catch (Exception e) {
            error(e);
            return error(-1, e.getMessage());
        }
    }
}