瀏覽代碼

merge code

Sand 8 年之前
父節點
當前提交
2356c8ec8e
共有 32 個文件被更改,包括 1924 次插入1447 次删除
  1. 10 0
      src/main/java/com/yihu/wlyy/entity/consult/ConsultTeam.java
  2. 3 0
      src/main/java/com/yihu/wlyy/interceptors/PatientInterceptor.java
  3. 68 35
      src/main/java/com/yihu/wlyy/job/ChangeSignJob.java
  4. 27 3
      src/main/java/com/yihu/wlyy/job/Constant.java
  5. 70 33
      src/main/java/com/yihu/wlyy/job/ConsultJob.java
  6. 279 150
      src/main/java/com/yihu/wlyy/job/CurrentDayAllQuotaJob.java
  7. 42 8
      src/main/java/com/yihu/wlyy/job/FollowUpJob.java
  8. 78 38
      src/main/java/com/yihu/wlyy/job/HealthGuideJob.java
  9. 29 6
      src/main/java/com/yihu/wlyy/job/SignAgeGroupDiseaseJob.java
  10. 277 885
      src/main/java/com/yihu/wlyy/job/SignJob.java
  11. 68 33
      src/main/java/com/yihu/wlyy/job/UnSignJob.java
  12. 67 35
      src/main/java/com/yihu/wlyy/job/WaitSignJob.java
  13. 14 6
      src/main/java/com/yihu/wlyy/repository/consult/ConsultTeamDao.java
  14. 6 0
      src/main/java/com/yihu/wlyy/repository/doctor/DoctorAdminTeamDao.java
  15. 8 2
      src/main/java/com/yihu/wlyy/repository/doctor/DoctorDao.java
  16. 3 0
      src/main/java/com/yihu/wlyy/repository/doctor/DoctorPatientGroupInfoDao.java
  17. 5 3
      src/main/java/com/yihu/wlyy/repository/doctor/DoctorTeamDao.java
  18. 3 0
      src/main/java/com/yihu/wlyy/repository/patient/SignFamilyDao.java
  19. 4 0
      src/main/java/com/yihu/wlyy/service/app/consult/ConsultTeamService.java
  20. 224 177
      src/main/java/com/yihu/wlyy/service/app/message/MessageService.java
  21. 180 6
      src/main/java/com/yihu/wlyy/service/app/sign/FamilyContractService.java
  22. 4 2
      src/main/java/com/yihu/wlyy/service/app/talk/TalkGroupService.java
  23. 1 0
      src/main/java/com/yihu/wlyy/service/app/team/DrHealthTeamService.java
  24. 14 0
      src/main/java/com/yihu/wlyy/service/common/account/DoctorService.java
  25. 12 4
      src/main/java/com/yihu/wlyy/util/IdCardUtil.java
  26. 140 0
      src/main/java/com/yihu/wlyy/web/common/util/ManagerUtilController.java
  27. 182 0
      src/main/java/com/yihu/wlyy/web/common/util/WlyySerivceController.java
  28. 38 0
      src/main/java/com/yihu/wlyy/web/data/DataHandlingController.java
  29. 6 4
      src/main/java/com/yihu/wlyy/web/doctor/consult/DoctorConsultController.java
  30. 53 14
      src/main/java/com/yihu/wlyy/web/doctor/sign/DoctorFamilyContractController.java
  31. 4 0
      src/main/java/com/yihu/wlyy/web/doctor/team/SignTeamController.java
  32. 5 3
      src/main/resources/system.properties

+ 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 Integer patientRead;    // 患者未读数量
	private Date czrq;              // 咨询时间
	private Date czrq;              // 咨询时间
	private String del;             // 作废标识,1正常,0作废
	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() {
	public String getConsult() {
		return consult;
		return consult;

+ 3 - 0
src/main/java/com/yihu/wlyy/interceptors/PatientInterceptor.java

@ -25,6 +25,9 @@ public class PatientInterceptor extends BaseInterceptor {
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
		boolean flag = true;
		boolean flag = true;
		try {
		try {
			if(request.getRequestURI().contains("/patient/hosptail/getHositalByTownCode")){
				return true;
			}
			response.setCharacterEncoding("UTF-8");
			response.setCharacterEncoding("UTF-8");
			JSONObject json = getAgent(request);
			JSONObject json = getAgent(request);
			if (json == null) {
			if (json == null) {

+ 68 - 35
src/main/java/com/yihu/wlyy/job/ChangeSignJob.java

@ -1,5 +1,6 @@
package com.yihu.wlyy.job;
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.organization.Hospital;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.doctor.profile.Doctor;
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.patient.SignFamily;
import com.yihu.wlyy.entity.statistics.WlyyQuotaResult;
import com.yihu.wlyy.entity.statistics.WlyyQuotaResult;
import com.yihu.wlyy.repository.address.TownDao;
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.DoctorDao;
import com.yihu.wlyy.repository.job.QuartzJobLogDao;
import com.yihu.wlyy.repository.job.QuartzJobLogDao;
import com.yihu.wlyy.repository.organization.HospitalDao;
import com.yihu.wlyy.repository.organization.HospitalDao;
@ -49,6 +51,8 @@ public class ChangeSignJob implements Job {
    private TownDao townDao;
    private TownDao townDao;
    @Autowired
    @Autowired
    private JdbcTemplate jdbcTemplate;
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    String yesterday;
    String yesterday;
    String now;
    String now;
@ -81,10 +85,10 @@ public class ChangeSignJob implements Job {
        quartzJobLog.setJobName(wlyyJobConfig.getJobName());
        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();
        List<Hospital> hospitals = hospitalDao.findHospital2();
@ -103,42 +107,57 @@ public class ChangeSignJob implements Job {
        Map<String, Long> tjTownMap = new HashMap<String, Long>();//区级的统计map key 是区行政区划350200
        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> 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) {
        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()))){
            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{
            }else{
                //统计社区
                //社区
                orgCodeTemp=orgCode;
                orgCodeTemp=orgCode;
                compute(tjOrgMap, orgCode);
            }
            }
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            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();
            String townCode = hospital.getTown();
            //统计区
            compute(tjTownMap, townCode);
            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);//得到全科医生的机构
            Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到全科医生的机构
            if(hospital == null) continue;
            String city=Constant.city;
            String city=Constant.city;
            String cityName=Constant.cityName;
            String cityName=Constant.cityName;
            String town=hospital.getTown();
            String town=hospital.getTown();
@ -149,16 +168,17 @@ public class ChangeSignJob implements Job {
                org=hospital.getCode().substring(0,hospital.getCode().length()-2)+"00";
                org=hospital.getCode().substring(0,hospital.getCode().length()-2)+"00";
            }
            }
            String orgName=hospital.getName();
            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 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()) {
        for (Map.Entry<String, Hospital> entry : hospitalsMap.entrySet()) {
            Hospital hospital = hospitalsMap.get(entry.getKey());//得到全科医生
            Hospital hospital = hospitalsMap.get(entry.getKey());//得到全科医生
            if(hospital == null) continue;
            String city=Constant.city;
            String city=Constant.city;
            String cityName=Constant.cityName;
            String cityName=Constant.cityName;
            String town=hospital.getTown();
            String town=hospital.getTown();
@ -209,11 +229,24 @@ public class ChangeSignJob implements Job {
        }
        }
        quartzJobLog.setJobEndTime(new Date());
        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);
        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
     * @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_6="6";
    public static String level_age_1_name="0~6";
    public static String level_age_1_name="0~6";
    public static String level_age_2_name="7~18";
    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";
    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_3_name="糖尿病和高血压";
    public static String level_disease_4_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){
    public static String getLevelAgeName(String key){
        switch (key){
        switch (key){
            case "1":{
            case "1":{

+ 70 - 33
src/main/java/com/yihu/wlyy/job/ConsultJob.java

@ -1,13 +1,16 @@
package com.yihu.wlyy.job;
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.organization.Hospital;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.consult.ConsultTeam;
import com.yihu.wlyy.entity.consult.ConsultTeam;
import com.yihu.wlyy.entity.doctor.profile.Doctor;
import com.yihu.wlyy.entity.doctor.profile.Doctor;
import com.yihu.wlyy.entity.job.QuartzJobLog;
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.entity.statistics.WlyyQuotaResult;
import com.yihu.wlyy.repository.address.TownDao;
import com.yihu.wlyy.repository.address.TownDao;
import com.yihu.wlyy.repository.consult.ConsultTeamDao;
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.DoctorDao;
import com.yihu.wlyy.repository.job.QuartzJobLogDao;
import com.yihu.wlyy.repository.job.QuartzJobLogDao;
import com.yihu.wlyy.repository.organization.HospitalDao;
import com.yihu.wlyy.repository.organization.HospitalDao;
@ -49,6 +52,8 @@ public class ConsultJob implements Job {
    private ConsultTeamDao consultTeamDao;
    private ConsultTeamDao consultTeamDao;
    @Autowired
    @Autowired
    private JdbcTemplate jdbcTemplate;
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    String yesterday;
    String yesterday;
    String now;
    String now;
@ -76,12 +81,11 @@ public class ConsultJob implements Job {
        quartzJobLog.setJobStartTime(new Date());
        quartzJobLog.setJobStartTime(new Date());
        quartzJobLog.setJobId(wlyyJobConfig.getId());
        quartzJobLog.setJobId(wlyyJobConfig.getId());
        quartzJobLog.setJobName(wlyyJobConfig.getJobName());
        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();
        List<Hospital> hospitals = hospitalDao.findHospital2();
@ -100,44 +104,62 @@ public class ConsultJob implements Job {
        Map<String, Long> tjTownMap = new HashMap<String, Long>();//区级的统计map key 是区行政区划350200
        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> 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) {
        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;
                continue;
            }
            }
            String orgCode = doctor.getHospital();
            String orgCode = adminTeam.getOrgCode();
            String orgCodeTemp="";
            //统计机构
            //统计机构
            if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
            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{
            }else{
                //统计社区
                //统计社区
                orgCodeTemp=orgCode;
                orgCodeTemp=orgCode;
                compute(tjOrgMap, orgCode);
            }
            }
            //统计区 ---------------start--------------
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) {
                errorContent.append("咨询Id:"+consultTeam.getId()+",咨询的健康医生(doctor字段)的所属机构(wlyy_doctor表中的hospital字段)为空或者所属的机构数据有问题");
                isAll=false;
                continue;
            }
            //统计市 ---------------start--------------
            cityCount++;
            //统计区 ---------------start--------------
            String townCode = hospital.getTown();
            String townCode = hospital.getTown();
            //统计区
            compute(tjTownMap, townCode);
            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);//得到全科医生的机构
            Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到全科医生的机构
            if(hospital == null) continue;
            String city=Constant.city;
            String city=Constant.city;
            String cityName=Constant.cityName;
            String cityName=Constant.cityName;
            String town=hospital.getTown();
            String town=hospital.getTown();
@ -148,16 +170,17 @@ public class ConsultJob implements Job {
                org=hospital.getCode().substring(0,hospital.getCode().length()-2)+"00";
                org=hospital.getCode().substring(0,hospital.getCode().length()-2)+"00";
            }
            }
            String orgName=hospital.getName();
            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 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()) {
        for (Map.Entry<String, Hospital> entry : hospitalsMap.entrySet()) {
            Hospital hospital = hospitalsMap.get(entry.getKey());
            Hospital hospital = hospitalsMap.get(entry.getKey());
            if(hospital == null) continue;
            String city=Constant.city;
            String city=Constant.city;
            String cityName=Constant.cityName;
            String cityName=Constant.cityName;
            String town=hospital.getTown();
            String town=hospital.getTown();
@ -208,8 +231,8 @@ public class ConsultJob implements Job {
        }
        }
        quartzJobLog.setJobEndTime(new Date());
        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);
        quartzJobLogDao.save(quartzJobLog);
    }
    }
@ -273,6 +296,20 @@ public class ConsultJob implements Job {
            return org;
            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() {
    public String getYesterday() {
        return yesterday;
        return yesterday;
    }
    }

+ 279 - 150
src/main/java/com/yihu/wlyy/job/CurrentDayAllQuotaJob.java

@ -1,5 +1,6 @@
package com.yihu.wlyy.job;
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.organization.Hospital;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.consult.ConsultTeam;
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.entity.patient.SignFamily;
import com.yihu.wlyy.repository.address.TownDao;
import com.yihu.wlyy.repository.address.TownDao;
import com.yihu.wlyy.repository.consult.ConsultTeamDao;
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.DoctorDao;
import com.yihu.wlyy.repository.doctor.DoctorPatientGroupInfoDao;
import com.yihu.wlyy.repository.doctor.DoctorPatientGroupInfoDao;
import com.yihu.wlyy.repository.job.QuartzJobLogDao;
import com.yihu.wlyy.repository.job.QuartzJobLogDao;
@ -62,6 +64,8 @@ public class CurrentDayAllQuotaJob implements Job {
    private PatientDao patientDao;
    private PatientDao patientDao;
    @Autowired
    @Autowired
    private QuartzJobLogDao quartzJobLogDao;//执行日志Dao
    private QuartzJobLogDao quartzJobLogDao;//执行日志Dao
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    private org.apache.tomcat.jdbc.pool.DataSource fvdataSource = new org.apache.tomcat.jdbc.pool.DataSource();//随访数据源
    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<Hospital> hospitals = null;//系统全部的机构
    List<Doctor> qkdoctors = null;//系统全部的全科医生
    List<Doctor> qkdoctors = null;//系统全部的全科医生
    List<Doctor> jkglsdoctors = null;//系统全部的健康管理师
    List<Doctor> jkglsdoctors = null;//系统全部的健康管理师
    List<AdminTeam> adminTeams=null;//系统全部的团队
    Map<String, Hospital> hospitalsMap = new HashMap<String, Hospital>();
    Map<String, Hospital> hospitalsMap = new HashMap<String, Hospital>();
    Map<String, Doctor> jkglsdoctorsMap = new HashMap<String, Doctor>();
    Map<String, Doctor> jkglsdoctorsMap = new HashMap<String, Doctor>();
    Map<String, Doctor> qkdoctorsMap = new HashMap<String, Doctor>();
    Map<String, Doctor> qkdoctorsMap = new HashMap<String, Doctor>();
    Map<String, Town> townsMap = new HashMap<String, Town>();
    Map<String, Town> townsMap = new HashMap<String, Town>();
    Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
    @Override
    @Override
    public void execute(JobExecutionContext context)
    public void execute(JobExecutionContext context)
            throws JobExecutionException {
            throws JobExecutionException {
@ -104,6 +110,12 @@ public class CurrentDayAllQuotaJob implements Job {
            for (Town town : towns) {
            for (Town town : towns) {
                townsMap.put(town.getCode(), town);
                townsMap.put(town.getCode(), town);
            }
            }
            //查找出系统全部的全科医生
            adminTeams=doctorAdminTeamDao.findAllTeam();
            for (AdminTeam adminTeam : adminTeams) {
                adminTeamMap.put(adminTeam.getId()+"", adminTeam);
            }
            //计算指标
            //计算指标
            computequota();
            computequota();
        }catch (Exception e){
        }catch (Exception e){
@ -115,19 +127,20 @@ public class CurrentDayAllQuotaJob implements Job {
    private void computequota() throws Exception {
    private void computequota() throws Exception {
        QuartzJobLog quartzJobLog =new QuartzJobLog();
        QuartzJobLog quartzJobLog =new QuartzJobLog();
        quartzJobLog.setJobStartTime(new Date());
        quartzJobLog.setJobStartTime(new Date());
        StringBuffer errorContent=new StringBuffer();
        computequota_1(); //统计今天的签约
        computequota_2(); //统计今天的解约
        computequota_3(); //统计今天的健康咨询量
        computequota_4(); //统计今天的随访量
        computequota_5(); //统计今天的健康指导
        computequota_6(); //统计今天的签约患者性别
        computequota_7();//统计今天的签约患者分组
        computequota_8();//统计今天的签约患者年龄
        computequota_9();//统计今天的待签约
        computequota_10();//统计今天的改签
        computequota_12();//统计今天的签约下按年龄分组后再
        quartzJobLog.setJobContent("开始实时统计查询");
        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.setJobName("实时统计");
        quartzJobLog.setJobId("11");
        quartzJobLog.setJobId("11");
        quartzJobLog.setJobType("1");
        quartzJobLog.setJobType("1");
@ -135,7 +148,8 @@ public class CurrentDayAllQuotaJob implements Job {
        quartzJobLogDao.save(quartzJobLog);
        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 now = getDayString(0);
        String tomorrow = getDayString(1);
        String tomorrow = getDayString(1);
        //找出今天的签约信息 yesterday,now
        //找出今天的签约信息 yesterday,now
@ -153,6 +167,7 @@ public class CurrentDayAllQuotaJob implements Job {
        }
        }
        //找出今天的签约信息
        //找出今天的签约信息
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterday(now, tomorrow);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterday(now, tomorrow);
        errorContent.append("截止时间:"+now+"-"+DateUtil.dateToStrLong(new Date())+",数据库查询的签约数是:"+signFamilys.size()+",错误:");
        //数组里面第一个是健康人群 第二个是慢病人群 第三个是65岁以上人群
        //数组里面第一个是健康人群 第二个是慢病人群 第三个是65岁以上人群
        Map<String, Map<String, Map>> cityAgeMap = new HashMap<String, Map<String, Map>>();//key是市行政代码 目前只有厦门市
        Map<String, Map<String, Map>> cityAgeMap = new HashMap<String, Map<String, Map>>();//key是市行政代码 目前只有厦门市
        Map<String,Map> temp =new HashMap<String,Map>();
        Map<String,Map> temp =new HashMap<String,Map>();
@ -162,46 +177,55 @@ public class CurrentDayAllQuotaJob implements Job {
        Map<String, Map<String, Map>> orgAgeMap = new HashMap<String, Map<String, Map>>();//key是机构代码
        Map<String, Map<String, Map>> orgAgeMap = new HashMap<String, Map<String, Map>>();//key是机构代码
        //统计有签约的
        //统计有签约的
        for (SignFamily signFamily : signFamilys) {
        for (SignFamily signFamily : signFamilys) {
            Hospital hospital = hospitalsMap.get(signFamily.getHospital());//得到患者签约的机构
            Hospital hospital = hospitalsMap.get(getOrg(signFamily.getHospital()));//得到患者签约的机构
            if(hospital == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据异常。");
                continue;
            }
            String town = hospital.getTown();
            String town = hospital.getTown();
            int age = IdCardUtil.getAgeForIdcard(signFamily.getIdcard());//根据card解析年龄
            int age = IdCardUtil.getAgeForIdcard(signFamily.getIdcard());//根据card解析年龄
            String ageCode = getAgeCode(age);//得到年龄的code
            String ageCode = getAgeCode(age);//得到年龄的code
            boolean hasGXY = false;//有高血压
            boolean hasGXY = false;//有高血压
            boolean hasTNB = false;//有糖尿病
            boolean hasTNB = false;//有糖尿病
            //如果是慢病的 统计高血压的 糖尿病  1高血压,2糖尿病  糖尿病和高血压是100
            //如果是慢病的 统计高血压的 糖尿病  1高血压,2糖尿病  糖尿病和高血压是3
            String diseaseType="";
            String diseaseType="";
            String jsonString = redisTemplate.opsForValue().get("disease:" + signFamily.getPatient());
            String jsonString = redisTemplate.opsForValue().get("disease:" + signFamily.getPatient());
            if (StringUtils.isEmpty(jsonString)) {
            if (StringUtils.isEmpty(jsonString)) {
                continue;
            }
            //排除数据 只留下高血压和糖尿病
            List<JSONObject> jsonObjects = new ArrayList<JSONObject>();
            JSONArray redisValues = new JSONArray(jsonString);
            for (Object obj : redisValues) {
                JSONObject redisValue = new JSONObject(obj);
                if(!redisValue.has("signType")){
                    continue;
                }
                //排除掉三师签约
                if ("1".equals(redisValue.get("signType").toString())) {
                    continue;
                }
                String disease = redisValue.get("disease").toString();
                if (Integer.valueOf(disease).equals("1")) {
                    jsonObjects.add(redisValue);
                    hasGXY = true;//设置有高血压
                    diseaseType="1";
                }
                if (Integer.valueOf(disease).equals("2")) {
                    jsonObjects.add(redisValue);
                    hasTNB = true;//设置有糖尿病
                    diseaseType="2";
                diseaseType="4";//健康人群
            }else{
                //排除数据 只留下高血压和糖尿病
                List<JSONObject> jsonObjects = new ArrayList<JSONObject>();
                JSONArray redisValues = new JSONArray(jsonString);
                if(redisValues.length()>0){
                    for (Object obj : redisValues) {
                        JSONObject redisValue =  (JSONObject)(obj);
                        if(!redisValue.has("signType")){
                            continue;
                        }
                        //排除掉三师签约
                        if ("1".equals(redisValue.getString("signType"))) {
                            continue;
                        }
                        String disease = redisValue.getString("disease");
                        if (("1").equals(disease)) {
                            jsonObjects.add(redisValue);
                            hasGXY = true;//设置有高血压
                            diseaseType="1";
                        }
                        if (("2").equals(disease)) {
                            jsonObjects.add(redisValue);
                            hasTNB = true;//设置有糖尿病
                            diseaseType="2";
                        }
                    }
                    if(hasGXY&&hasTNB){
                        diseaseType="3";
                    }
                }else{
                    diseaseType="4";
                }
                }
            }
            }
            if(hasGXY&&hasTNB){
                diseaseType="100";
            }
            //统计市
            //统计市
            compute(cityAgeMap, Constant.city, ageCode, diseaseType);
            compute(cityAgeMap, Constant.city, ageCode, diseaseType);
            //统计区
            //统计区
@ -222,7 +246,7 @@ public class CurrentDayAllQuotaJob implements Job {
        for (Map.Entry<String, Map<String, Map>> entry : cityAgeMap.entrySet()) {
        for (Map.Entry<String, Map<String, Map>> entry : cityAgeMap.entrySet()) {
            Map<String, Map> oneAgeMap = entry.getValue();
            Map<String, Map> oneAgeMap = entry.getValue();
            for(int i=1;i<7;i++){
            for(int i=1;i<7;i++){
                for(int j=1;j<4;j++){
                for(int j=1;j<5;j++){
                    String key_2=i+"";
                    String key_2=i+"";
                    String key_3=j+"";
                    String key_3=j+"";
                    String name=Constant.cityName;
                    String name=Constant.cityName;
@ -230,7 +254,7 @@ public class CurrentDayAllQuotaJob implements Job {
                    if (oneAgeMap != null && oneAgeMap.containsKey(key_2)) {
                    if (oneAgeMap != null && oneAgeMap.containsKey(key_2)) {
                        Map<String,Long> key3Map=oneAgeMap.get(key_2);
                        Map<String,Long> key3Map=oneAgeMap.get(key_2);
                        if(key3Map!=null&&key3Map.containsKey(key_3)){
                        if(key3Map!=null&&key3Map.containsKey(key_3)){
                            jsonObject.put("num",entry.getValue().get((key3Map.get(key_3) + "")));
                            jsonObject.put("num",key3Map.get(key_3) + "");
                        }else{
                        }else{
                            jsonObject.put("num",0);
                            jsonObject.put("num",0);
                        }
                        }
@ -249,7 +273,7 @@ public class CurrentDayAllQuotaJob implements Job {
            Map<String, Map> oneAgeMap = townAgeMap.get(entry.getKey());//得到当个区的统计数据
            Map<String, Map> oneAgeMap = townAgeMap.get(entry.getKey());//得到当个区的统计数据
            Town townObj = entry.getValue();//得到区级信息
            Town townObj = entry.getValue();//得到区级信息
            for(int i=1;i<7;i++){
            for(int i=1;i<7;i++){
                for(int j=1;j<4;j++){
                for(int j=1;j<5;j++){
                    String key_2=i+"";
                    String key_2=i+"";
                    String key_3=j+"";
                    String key_3=j+"";
                    String name=townObj.getName();
                    String name=townObj.getName();
@ -276,7 +300,7 @@ public class CurrentDayAllQuotaJob implements Job {
            Map<String, Map> oneAgeMap = orgAgeMap.get(entry.getKey());//得到当个机构的统计数据
            Map<String, Map> oneAgeMap = orgAgeMap.get(entry.getKey());//得到当个机构的统计数据
            Hospital hospital = entry.getValue();//得到机构信息
            Hospital hospital = entry.getValue();//得到机构信息
            for(int i=1;i<7;i++){
            for(int i=1;i<7;i++){
                for(int j=1;j<4;j++){
                for(int j=1;j<5;j++){
                    String key_2=i+"";
                    String key_2=i+"";
                    String key_3=j+"";
                    String key_3=j+"";
                    String name=hospital.getName();
                    String name=hospital.getName();
@ -297,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) {
    private void compute(Map<String, Map<String, Map>> rootMap, String rootKey, String ageCode, String diseaseType) {
        if (rootMap.containsKey(rootKey)) {
        if (rootMap.containsKey(rootKey)) {
@ -327,42 +352,52 @@ public class CurrentDayAllQuotaJob implements Job {
            rootMap.put(rootKey, groupMapTemp2);
            rootMap.put(rootKey, groupMapTemp2);
        }
        }
    }
    }
    private void computequota_1() {
    private void computequota_1(StringBuffer errorContent) {
        errorContent.append("computequota_1---start,");
        //签约需要的统计map
        //签约需要的统计map
        Map<String, JSONObject> tjCityMap = new HashMap<>();//区级的统计map key 是区行政区划350200
        Map<String, JSONObject> tjCityMap = new HashMap<>();//区级的统计map key 是区行政区划350200
        Map<String, JSONObject> tjTownMap = new HashMap<String, JSONObject>();//区级的统计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> 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
        //找出今天的签约信息 yesterday,now
        String now = getDayString(0);
        String now = getDayString(0);
        String tomorrow = getDayString(1);
        String tomorrow = getDayString(1);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterday(now, tomorrow);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterday(now, tomorrow);
        errorContent.append("截止时间:"+now+"-"+DateUtil.dateToStrLong(new Date())+",数据库查询的签约数是:"+signFamilys.size()+",错误:");
        //统计有签约的
        //统计有签约的
        for (SignFamily signFamily : signFamilys) {
        for (SignFamily signFamily : signFamilys) {
            String hospitalCode=signFamily.getHospital();
            String hospitalCode=getOrg(signFamily.getHospital());
            Hospital hospital=hospitalsMap.get(hospitalCode);
            Hospital hospital=hospitalsMap.get(hospitalCode);
            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()));
            if(orgjo==null){
                System.out.println(new JSONObject(hospital).toString());
                continue;
            }
            orgjo.put("num",((int)orgjo.get("num"))+1);
            //统计市
            //统计市
            JSONObject cityjo=tjCityMap.get(Constant.city);
            JSONObject cityjo=tjCityMap.get(Constant.city);
            cityjo.put("num",((int)cityjo.get("num"))+1);
            cityjo.put("num",((int)cityjo.get("num"))+1);
            //统计区
            //统计区
            JSONObject townjo=tjTownMap.get(hospital.getTown());
            JSONObject townjo=tjTownMap.get(hospital.getTown());
            townjo.put("num",((int)townjo.get("num"))+1);
            townjo.put("num",((int)townjo.get("num"))+1);
            //统计机构
            //判断是中心还是服务站 服务站的话添加到中心去
            if(!"00".equals(hospital.getCode().substring(8))){
                String orgCodeTemp=hospital.getCode().substring(0,8)+"00";
                JSONObject  orgjo=tjOrgMap.get(orgCodeTemp);
                orgjo.put("num",((int)orgjo.get("num"))+1);
            }else{
                JSONObject orgjo=tjOrgMap.get(hospital.getCode());
                orgjo.put("num",((int)orgjo.get("num"))+1);
            }
            //统计全科医生
            //统计全科医生
            JSONObject qkjo=tjQkdoctorMap.get(signFamily.getDoctor());
            JSONObject qkjo=tjAdminTeamMap.get(signFamily.getAdminTeamId()+"");
            if(qkjo!=null){
            if(qkjo!=null){
                qkjo.put("num",((int)qkjo.get("num"))+1);
                qkjo.put("num",((int)qkjo.get("num"))+1);
            }
            }
@ -382,12 +417,13 @@ public class CurrentDayAllQuotaJob implements Job {
            redisTemplate.opsForValue().set(new StringBuffer("quota:1:2:"+entry.getKey()).toString(), entry.getValue().toString());
            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());
            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();
        JSONObject jo=new JSONObject();
        jo.put("name", Constant.cityName);
        jo.put("name", Constant.cityName);
        jo.put("num",0);
        jo.put("num",0);
@ -424,45 +460,61 @@ public class CurrentDayAllQuotaJob implements Job {
                tjJKdoctorMap.put(doctor.getCode(),jo);
                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
        Map<String, JSONObject> tjCityMap = new HashMap<>();//区级的统计map key 是区行政区划350200
        Map<String, JSONObject> tjCityMap = new HashMap<>();//区级的统计map key 是区行政区划350200
        Map<String, JSONObject> tjTownMap = new HashMap<String, JSONObject>();//区级的统计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> 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 now = getDayString(0);
        String tomorrow = getDayString(1);
        String tomorrow = getDayString(1);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingUnSignYesterday(now, tomorrow);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingUnSignYesterday(now, tomorrow);
        errorContent.append("截止时间:"+now+"-"+DateUtil.dateToStrLong(new Date())+",数据库查询的解约数是:"+signFamilys.size()+",错误:");
        //统计有签约的
        //统计有签约的
        for (SignFamily signFamily : signFamilys) {
        for (SignFamily signFamily : signFamilys) {
            String hospitalCode=signFamily.getHospital();
            String hospitalCode=getOrg(signFamily.getHospital());
            Hospital hospital=hospitalsMap.get(hospitalCode);
            Hospital hospital=hospitalsMap.get(hospitalCode);
            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()));
            if(orgjo==null){
                continue;
            }
            orgjo.put("num",((int)orgjo.get("num"))+1);
            //统计市
            //统计市
            JSONObject cityjo=tjCityMap.get(Constant.city);
            JSONObject cityjo=tjCityMap.get(Constant.city);
            cityjo.put("num",((int)cityjo.get("num"))+1);
            cityjo.put("num",((int)cityjo.get("num"))+1);
            //统计区
            //统计区
            JSONObject townjo=tjTownMap.get(hospital.getTown());
            JSONObject townjo=tjTownMap.get(hospital.getTown());
            townjo.put("num",((int)townjo.get("num"))+1);
            townjo.put("num",((int)townjo.get("num"))+1);
            //统计机构
            //判断是中心还是服务站 服务站的话添加到中心去
            if(!"00".equals(hospital.getCode().substring(8))){
                String orgCodeTemp=hospital.getCode().substring(0,8)+"00";
                JSONObject  orgjo=tjOrgMap.get(orgCodeTemp);
                orgjo.put("num",((int)orgjo.get("num"))+1);
            }else{
                JSONObject orgjo=tjOrgMap.get(hospital.getCode());
                orgjo.put("num",((int)orgjo.get("num"))+1);
            }
            //统计全科医生
            //统计全科医生
            JSONObject qkjo=tjQkdoctorMap.get(signFamily.getDoctor());
            JSONObject qkjo=tjAdminTeamMap.get(signFamily.getAdminTeamId()+"");
            if(qkjo!=null){
            if(qkjo!=null){
                qkjo.put("num",((int)qkjo.get("num"))+1);
                qkjo.put("num",((int)qkjo.get("num"))+1);
            }
            }
@ -482,41 +534,54 @@ public class CurrentDayAllQuotaJob implements Job {
            redisTemplate.opsForValue().set(new StringBuffer("quota:2:2:"+entry.getKey()).toString(), entry.getValue().toString());
            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());
            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
        Map<String, JSONObject> tjCityMap = new HashMap<>();//区级的统计map key 是区行政区划350200
        Map<String, JSONObject> tjCityMap = new HashMap<>();//区级的统计map key 是区行政区划350200
        Map<String, JSONObject> tjTownMap = new HashMap<String, JSONObject>();//区级的统计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> 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 now = getDayString(0);
        String tomorrow = getDayString(1);
        String tomorrow = getDayString(1);
        List<ConsultTeam> consultTeams = consultTeamDao.findByCzrqyYesterday(now,tomorrow);
        List<ConsultTeam> consultTeams = consultTeamDao.findByCzrqyYesterday(now,tomorrow);
        errorContent.append("截止时间:"+now+"-"+DateUtil.dateToStrLong(new Date())+",数据库查询的咨询数是:"+consultTeams.size()+",错误:");
        //统计
        //统计
        for (ConsultTeam consultTeam : consultTeams) {
        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(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;
                continue;
            }
            }
            orgjo.put("num",((int)orgjo.get("num"))+1);
            //统计市
            //统计市
            JSONObject cityjo=tjCityMap.get(Constant.city);
            JSONObject cityjo=tjCityMap.get(Constant.city);
            cityjo.put("num",((int)cityjo.get("num"))+1);
            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);
            townjo.put("num",((int)townjo.get("num"))+1);
            //统计机构
            JSONObject orgjo=tjOrgMap.get(doctor.getHospital());
            orgjo.put("num",((int)orgjo.get("num"))+1);
            //统计全科医生
            //统计全科医生
            JSONObject qkjo=tjJkdoctorMap.get(doctor.getCode());
            JSONObject qkjo=tjAdminTeamMap.get(consultTeam.getAdminTeamId()+"");
            if(qkjo!=null){
            if(qkjo!=null){
                qkjo.put("num",((int)qkjo.get("num"))+1);
                qkjo.put("num",((int)qkjo.get("num"))+1);
            }
            }
@ -536,36 +601,45 @@ public class CurrentDayAllQuotaJob implements Job {
            redisTemplate.opsForValue().set(new StringBuffer("quota:3:2:"+entry.getKey()).toString(), entry.getValue().toString());
            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());
            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> tjCityMap = new HashMap<>();//区级的统计map key 是区行政区划350200
        Map<String, JSONObject> tjTownMap = new HashMap<String, JSONObject>();//区级的统计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> tjOrgMap = new HashMap<String, JSONObject>();//机构的统计map key 是机构的code
        Map<String, JSONObject> tjJkdoctorMap = new HashMap<String, JSONObject>();//全部的健康管理师
        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();
        List<Map<String,Object>> plans = getFvYesterday();
        errorContent.append("截止时间:"+DateUtil.dateToStrLong(new Date())+",数据库查询的随访数是:"+plans.size()+",错误:");
        //统计有随访的
        //统计有随访的
        for (Map<String,Object> plan : plans) {
        for (Map<String,Object> plan : plans) {
            String doctorCode = (String) plan.get("doctor_uid");//得到随访中健康医生的code
            String doctorCode = (String) plan.get("doctor_uid");//得到随访中健康医生的code
            Doctor doctor=jkglsdoctorsMap.get(doctorCode);//得到健康管理师
            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;
                continue;
            }
            }
            orgjo.put("num",((int)orgjo.get("num"))+1);
            //统计市
            //统计市
            JSONObject cityjo=tjCityMap.get(Constant.city);
            JSONObject cityjo=tjCityMap.get(Constant.city);
            cityjo.put("num",((int)cityjo.get("num"))+1);
            cityjo.put("num",((int)cityjo.get("num"))+1);
            //统计区
            //统计区
            JSONObject townjo=tjTownMap.get(doctor.getTown());
            JSONObject townjo=tjTownMap.get(doctor.getTown());
            townjo.put("num",((int)townjo.get("num"))+1);
            townjo.put("num",((int)townjo.get("num"))+1);
            //统计机构
            JSONObject orgjo=tjOrgMap.get(doctor.getHospital());
            orgjo.put("num",((int)orgjo.get("num"))+1);
            //统计全科医生
            //统计全科医生
            JSONObject qkjo=tjJkdoctorMap.get(doctor.getCode());
            JSONObject qkjo=tjJkdoctorMap.get(doctor.getCode());
            if(qkjo!=null){
            if(qkjo!=null){
@ -589,30 +663,45 @@ public class CurrentDayAllQuotaJob implements Job {
        for(Map.Entry<String,JSONObject> entry:tjJkdoctorMap.entrySet()){
        for(Map.Entry<String,JSONObject> entry:tjJkdoctorMap.entrySet()){
            redisTemplate.opsForValue().set(new StringBuffer("quota:4:1:"+entry.getKey()).toString(), entry.getValue().toString());
            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> tjCityMap = new HashMap<>();//区级的统计map key 是区行政区划350200
        Map<String, JSONObject> tjTownMap = new HashMap<String, JSONObject>();//区级的统计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> 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 now = getDayString(0);
        String tomorrow = getDayString(1);
        String tomorrow = getDayString(1);
        List<PatientHealthGuidance> patientHealthGuidances = patientHealthGuidanceDao.findByCzrqyYesterday(now,tomorrow);
        List<PatientHealthGuidance> patientHealthGuidances = patientHealthGuidanceDao.findByCzrqyYesterday(now,tomorrow);
        errorContent.append("截止时间:"+now+"-"+DateUtil.dateToStrLong(new Date())+",数据库查询的健康指導数是:"+patientHealthGuidances.size()+",错误:");
        for (PatientHealthGuidance patientHealthGuidance: patientHealthGuidances) {
        for (PatientHealthGuidance patientHealthGuidance: patientHealthGuidances) {
            String doctorCode =patientHealthGuidance.getDoctor();
            String doctorCode =patientHealthGuidance.getDoctor();
            Doctor doctor=jkglsdoctorsMap.get(doctorCode);//得到健康管理师
            Doctor doctor=jkglsdoctorsMap.get(doctorCode);//得到健康管理师
            SignFamily signFamily= signFamilyDao.findSignByPatient(patientHealthGuidance.getPatient(),2);//得到患者签约的行政团队
            if(doctor==null){
            if(doctor==null){
                doctor=qkdoctorsMap.get(doctorCode);//得到全科医生
                doctor=qkdoctorsMap.get(doctorCode);//得到全科医生
                if(doctor==null){
                if(doctor==null){
                    errorContent.append("健康指導id:"+patientHealthGuidance.getId()+",找不到对应的医生信息。");
                    continue;
                    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;
            }
            //统计市
            //统计市
            JSONObject cityjo=tjCityMap.get(Constant.city);
            JSONObject cityjo=tjCityMap.get(Constant.city);
            cityjo.put("num",((int)cityjo.get("num"))+1);
            cityjo.put("num",((int)cityjo.get("num"))+1);
@ -620,10 +709,9 @@ public class CurrentDayAllQuotaJob implements Job {
            JSONObject townjo=tjTownMap.get(doctor.getTown());
            JSONObject townjo=tjTownMap.get(doctor.getTown());
            townjo.put("num",((int)townjo.get("num"))+1);
            townjo.put("num",((int)townjo.get("num"))+1);
            //统计机构
            //统计机构
            JSONObject orgjo=tjOrgMap.get(doctor.getHospital());
            orgjo.put("num",((int)orgjo.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){
            if(qkjo!=null){
                qkjo.put("num",((int)qkjo.get("num"))+1);
                qkjo.put("num",((int)qkjo.get("num"))+1);
            }
            }
@ -642,15 +730,18 @@ public class CurrentDayAllQuotaJob implements Job {
            redisTemplate.opsForValue().set(new StringBuffer("quota:5:2:"+entry.getKey()).toString(), entry.getValue().toString());
            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());
            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 now = getDayString(0);
        String tomorrow = getDayString(1);
        String tomorrow = getDayString(1);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterday(now, tomorrow);
        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是市行政代码 目前只有厦门市
        Map<String, Map<String, Long>> citySexMap = new HashMap<String, Map<String, Long>>();//key是市行政代码 目前只有厦门市
        citySexMap.put(Constant.city,new HashMap<String, Long>());
        citySexMap.put(Constant.city,new HashMap<String, Long>());
@ -658,8 +749,11 @@ public class CurrentDayAllQuotaJob implements Job {
        Map<String, Map<String, Long>> orgSexMap = new HashMap<String, Map<String, Long>>();//key是机构代码
        Map<String, Map<String, Long>> orgSexMap = new HashMap<String, Map<String, Long>>();//key是机构代码
        for (SignFamily signFamily : signFamilys) {
        for (SignFamily signFamily : signFamilys) {
            String idcard = signFamily.getIdcard();//得到签约中患者的身份证号
            String idcard = signFamily.getIdcard();//得到签约中患者的身份证号
            Hospital hospital = hospitalsMap.get(signFamily.getHospital());//得到患者签约的机构
            if(hospital==null){
            Hospital hospital = hospitalsMap.get(getOrg(signFamily.getHospital()));//得到患者签约的机构
            //统计机构
            //判断是中心还是服务站 服务站的话添加到中心去
            if(hospital == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据异常。");
                continue;
                continue;
            }
            }
            String town = hospital.getTown();//得到患者签约的机构的区号
            String town = hospital.getTown();//得到患者签约的机构的区号
@ -803,13 +897,16 @@ public class CurrentDayAllQuotaJob implements Job {
            redisTemplate.opsForValue().set(new StringBuffer("quota:6:2:3:"+hospitalEntry.getKey()).toString(),jsonObject.toString());
            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 now = getDayString(0);
        String tomorrow = getDayString(1);
        String tomorrow = getDayString(1);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterday(now, tomorrow);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterday(now, tomorrow);
        errorContent.append("截止时间:"+now+"-"+DateUtil.dateToStrLong(new Date())+",数据库查询的签约数是:"+signFamilys.size()+",错误:");
        //查找出系统全部的患者
        //查找出系统全部的患者
        List<Patient> patients = patientDao.findAllSignPatient();
        List<Patient> patients = patientDao.findAllSignPatient();
        Map<String, Patient> patientsMap = new HashMap<String, Patient>();
        Map<String, Patient> patientsMap = new HashMap<String, Patient>();
@ -832,8 +929,9 @@ public class CurrentDayAllQuotaJob implements Job {
        for (SignFamily signFamily : signFamilys) {
        for (SignFamily signFamily : signFamilys) {
            String patient=signFamily.getPatient();
            String patient=signFamily.getPatient();
            String group = groupMap.get(patient);//得到该签约病人的所在分组 1 普通 2 慢病 3是 65岁以上人群
            String group = groupMap.get(patient);//得到该签约病人的所在分组 1 普通 2 慢病 3是 65岁以上人群
            Hospital hospital = hospitalsMap.get(signFamily.getHospital());//得到患者签约的机构
            if(hospital==null){
            Hospital hospital = hospitalsMap.get(getOrg(signFamily.getHospital()));//得到患者签约的机构
            if(hospital == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据异常。");
                continue;
                continue;
            }
            }
            String town = hospital.getTown();
            String town = hospital.getTown();
@ -879,20 +977,20 @@ public class CurrentDayAllQuotaJob implements Job {
                List<JSONObject> jsonObjects = new ArrayList<JSONObject>();
                List<JSONObject> jsonObjects = new ArrayList<JSONObject>();
                JSONArray redisValues = new JSONArray(jsonString);
                JSONArray redisValues = new JSONArray(jsonString);
                for (Object obj : redisValues) {
                for (Object obj : redisValues) {
                    JSONObject redisValue = new JSONObject(obj);
                    JSONObject redisValue = (JSONObject)(obj);
                    if(!redisValue.has("signType")){
                    if(!redisValue.has("signType")){
                        continue;
                        continue;
                    }
                    }
                    //排除掉三师签约
                    //排除掉三师签约
                    if ("1".equals(redisValue.get("signType").toString())) {
                    if ("1".equals(redisValue.getString("signType"))) {
                        continue;
                        continue;
                    }
                    }
                    String disease = redisValue.get("disease").toString();
                    if (Integer.valueOf(disease).equals("1")) {
                    String disease = redisValue.getString("disease");
                    if ("1".equals(disease)) {
                        jsonObjects.add(redisValue);
                        jsonObjects.add(redisValue);
                        hasGXY = true;//设置有高血压
                        hasGXY = true;//设置有高血压
                    }
                    }
                    if (Integer.valueOf(disease).equals("2")) {
                    if ("2".equals(disease)) {
                        jsonObjects.add(redisValue);
                        jsonObjects.add(redisValue);
                        hasTNB = true;//设置有糖尿病
                        hasTNB = true;//设置有糖尿病
                    }
                    }
@ -926,8 +1024,9 @@ public class CurrentDayAllQuotaJob implements Job {
                }
                }
                //统计机构
                //统计机构
                //统计站
                //统计站
                if (!"00".equals(hospital.getCode().substring(8))) {
                    String orgCodeTemp = hospital.getCode().substring(0, 8) + "00";
                String org=hospital.getCode();
                if (!"00".equals(org.substring(org.length()-2,org.length()))) {
                    String orgCodeTemp =org.substring(0,org.length()-2)+"00";
                    //统计机构
                    //统计机构
                    if (orgGroupMap.containsKey(orgCodeTemp)) {
                    if (orgGroupMap.containsKey(orgCodeTemp)) {
                        Map<String, Long> groupMapTemp = orgGroupMap.get(orgCodeTemp);
                        Map<String, Long> groupMapTemp = orgGroupMap.get(orgCodeTemp);
@ -1092,6 +1191,7 @@ public class CurrentDayAllQuotaJob implements Job {
        for (Map.Entry<String, Hospital> hospitalEntry : hospitalsMap.entrySet()) {
        for (Map.Entry<String, Hospital> hospitalEntry : hospitalsMap.entrySet()) {
            //保存健康人群
            //保存健康人群
            Hospital hospital=hospitalsMap.get(hospitalEntry.getKey());
            Hospital hospital=hospitalsMap.get(hospitalEntry.getKey());
            if(hospital == null) continue;
            JSONObject jsonObject=new JSONObject();
            JSONObject jsonObject=new JSONObject();
            Map<String, Long> oneOrg= orgGroupMap.get(hospitalEntry.getKey());
            Map<String, Long> oneOrg= orgGroupMap.get(hospitalEntry.getKey());
@ -1156,9 +1256,12 @@ public class CurrentDayAllQuotaJob implements Job {
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:2:100:"+hospitalEntry.getKey()).toString(),jsonObject.toString());
            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();
        List<Hospital> hospitals = hospitalDao.findHospital2();
        Map<String, Hospital> hospitalsMap = new HashMap<String, Hospital>();
        Map<String, Hospital> hospitalsMap = new HashMap<String, Hospital>();
@ -1175,6 +1278,7 @@ public class CurrentDayAllQuotaJob implements Job {
        String now = getDayString(0);
        String now = getDayString(0);
        String tomorrow = getDayString(1);
        String tomorrow = getDayString(1);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterday(now,tomorrow);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterday(now,tomorrow);
        errorContent.append("截止时间:"+now+"-"+DateUtil.dateToStrLong(new Date())+",数据库查询的签约数是:"+signFamilys.size()+",错误:");
        //数组里面第一个是健康人群 第二个是慢病人群 第三个是65岁以上人群
        //数组里面第一个是健康人群 第二个是慢病人群 第三个是65岁以上人群
        Map<String, Map<String, Long>> cityAgeMap = new HashMap<String, Map<String, Long>>();//key是市行政代码 目前只有厦门市
        Map<String, Map<String, Long>> cityAgeMap = new HashMap<String, Map<String, Long>>();//key是市行政代码 目前只有厦门市
        cityAgeMap.put(Constant.city,new HashMap<String, Long>());
        cityAgeMap.put(Constant.city,new HashMap<String, Long>());
@ -1183,8 +1287,9 @@ public class CurrentDayAllQuotaJob implements Job {
        Map<String, Map<String, Long>> orgAgeMap = new HashMap<String, Map<String, Long>>();//key是机构代码
        Map<String, Map<String, Long>> orgAgeMap = new HashMap<String, Map<String, Long>>();//key是机构代码
        //统计有签约的
        //统计有签约的
        for (SignFamily signFamily : signFamilys) {
        for (SignFamily signFamily : signFamilys) {
            Hospital hospital = hospitalsMap.get(signFamily.getHospital());//得到患者签约的机构
            if(hospital==null){
            Hospital hospital = hospitalsMap.get(getOrg(signFamily.getHospital()));//得到患者签约的机构
            if(hospital == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据异常。");
                continue;
                continue;
            }
            }
            String town = hospital.getTown();
            String town = hospital.getTown();
@ -1395,7 +1500,7 @@ public class CurrentDayAllQuotaJob implements Job {
            }
            }
            jsonObject.put("name",hospital.getName());
            jsonObject.put("name",hospital.getName());
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:8:2:4"+entry.getKey()).toString(),jsonObject.toString());
            redisTemplate.opsForValue().set(new StringBuffer("quota:8:2:4:"+entry.getKey()).toString(),jsonObject.toString());
            //保存50~65
            //保存50~65
            jsonObject=new JSONObject();
            jsonObject=new JSONObject();
            if (oneAgeMap!=null&&oneAgeMap.containsKey(Constant.level_age_5)) {
            if (oneAgeMap!=null&&oneAgeMap.containsKey(Constant.level_age_5)) {
@ -1417,42 +1522,46 @@ public class CurrentDayAllQuotaJob implements Job {
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:8:2:6:"+entry.getKey()).toString(),jsonObject.toString());
            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> tjCityMap = new HashMap<>();//区级的统计map key 是区行政区划350200
        Map<String, JSONObject> tjTownMap = new HashMap<String, JSONObject>();//区级的统计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> 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 now = getDayString(0);
        String tomorrow = getDayString(1);
        String tomorrow = getDayString(1);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingWaitSignYesterday(now, tomorrow);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingWaitSignYesterday(now, tomorrow);
        errorContent.append("截止时间:"+now+"-"+DateUtil.dateToStrLong(new Date())+",数据库查询的签约数是:"+signFamilys.size()+",错误:");
        //统计有签约的
        //统计有签约的
        for (SignFamily signFamily : signFamilys) {
        for (SignFamily signFamily : signFamilys) {
            String hospitalCode=signFamily.getHospital();
            String hospitalCode=getOrg(signFamily.getHospital());
            Hospital hospital=hospitalsMap.get(hospitalCode);
            Hospital hospital=hospitalsMap.get(hospitalCode);
            if(hospital == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据异常。");
                continue;
            }
            //统计机构
            //判断是中心还是服务站 服务站的话添加到中心去
            JSONObject orgjo=tjOrgMap.get(getOrg(hospital.getCode()));
            if(orgjo==null){
                continue;
            }
            orgjo.put("num",((int)orgjo.get("num"))+1);
            //统计市
            //统计市
            JSONObject cityjo=tjCityMap.get(Constant.city);
            JSONObject cityjo=tjCityMap.get(Constant.city);
            cityjo.put("num",((int)cityjo.get("num"))+1);
            cityjo.put("num",((int)cityjo.get("num"))+1);
            //统计区
            //统计区
            JSONObject townjo=tjTownMap.get(hospital.getTown());
            JSONObject townjo=tjTownMap.get(hospital.getTown());
            townjo.put("num",((int)townjo.get("num"))+1);
            townjo.put("num",((int)townjo.get("num"))+1);
            //统计机构
            //判断是中心还是服务站 服务站的话添加到中心去
            if(!"00".equals(hospital.getCode().substring(8))){
                String orgCodeTemp=hospital.getCode().substring(0,8)+"00";
                JSONObject  orgjo=tjOrgMap.get(orgCodeTemp);
                orgjo.put("num",((int)orgjo.get("num"))+1);
            }else{
                JSONObject orgjo=tjOrgMap.get(hospital.getCode());
                orgjo.put("num",((int)orgjo.get("num"))+1);
            }
            //统计全科医生
            //统计全科医生
            JSONObject qkjo=tjQkdoctorMap.get(signFamily.getDoctor());
            JSONObject qkjo=tjAdminTeamMap.get(signFamily.getAdminTeamId()+"");
            if(qkjo!=null){
            if(qkjo!=null){
                qkjo.put("num",((int)qkjo.get("num"))+1);
                qkjo.put("num",((int)qkjo.get("num"))+1);
            }
            }
@ -1471,37 +1580,48 @@ public class CurrentDayAllQuotaJob implements Job {
            redisTemplate.opsForValue().set(new StringBuffer("quota:9:2:"+entry.getKey()).toString(), entry.getValue().toString());
            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());
            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> tjCityMap = new HashMap<>();//区级的统计map key 是区行政区划350200
        Map<String, JSONObject> tjTownMap = new HashMap<String, JSONObject>();//区级的统计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> 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 now = getDayString(0);
        String tomorrow = getDayString(1);
        String tomorrow = getDayString(1);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingChaangeSignYesterday(now, tomorrow);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingChaangeSignYesterday(now, tomorrow);
        errorContent.append("截止时间:"+now+"-"+DateUtil.dateToStrLong(new Date())+",数据库查询的签约数是:"+signFamilys.size()+",错误:");
        //统计有签约的
        //统计有签约的
        for (SignFamily signFamily : signFamilys) {
        for (SignFamily signFamily : signFamilys) {
            String hospitalCode=signFamily.getHospital();
            String hospitalCode=getOrg(signFamily.getHospital());
            Hospital hospital=hospitalsMap.get(hospitalCode);
            Hospital hospital=hospitalsMap.get(hospitalCode);
            if(hospital == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据异常。");
                continue;
            }
            //统计机构
            JSONObject orgjo=tjOrgMap.get(hospital.getCode());
            if(orgjo==null){
                continue;
            }
            orgjo.put("num",((int)orgjo.get("num"))+1);
            //统计市
            //统计市
            JSONObject cityjo=tjCityMap.get(Constant.city);
            JSONObject cityjo=tjCityMap.get(Constant.city);
            cityjo.put("num",((int)cityjo.get("num"))+1);
            cityjo.put("num",((int)cityjo.get("num"))+1);
            //统计区
            //统计区
            JSONObject townjo=tjTownMap.get(hospital.getTown());
            JSONObject townjo=tjTownMap.get(hospital.getTown());
            townjo.put("num",((int)townjo.get("num"))+1);
            townjo.put("num",((int)townjo.get("num"))+1);
            //统计机构
            JSONObject orgjo=tjOrgMap.get(hospital.getCode());
            orgjo.put("num",((int)orgjo.get("num"))+1);
            //统计全科医生
            //统计全科医生
            JSONObject qkjo=tjQkdoctorMap.get(signFamily.getDoctor());
            JSONObject qkjo=tjAdminTeamMap.get(signFamily.getAdminTeamId()+"");
            if(qkjo!=null){
            if(qkjo!=null){
                qkjo.put("num",((int)qkjo.get("num"))+1);
                qkjo.put("num",((int)qkjo.get("num"))+1);
            }
            }
@ -1520,9 +1640,10 @@ public class CurrentDayAllQuotaJob implements Job {
            redisTemplate.opsForValue().set(new StringBuffer("quota:10:2:"+entry.getKey()).toString(), entry.getValue().toString());
            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());
            redisTemplate.opsForValue().set(new StringBuffer("quota:10:1:"+entry.getKey()).toString(), entry.getValue().toString());
        }
        }
        errorContent.append("computequota_10---end!!");
    }
    }
    public Properties getSystemProperties() {
    public Properties getSystemProperties() {
@ -1586,5 +1707,13 @@ public class CurrentDayAllQuotaJob implements Job {
            return Constant.level_age_6;
            return Constant.level_age_6;
        }
        }
    }
    }
    private String getOrg(String org){
        //if(!"00".equals(org.substring(org.length()-2,org.length()))){
        if(org.length() == 10 && !org.endsWith("00")){
            return org.substring(0,org.length()-2)+"00";
        }else{
            return org;
        }
    }
}
}

+ 42 - 8
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.address.Town;
import com.yihu.wlyy.entity.doctor.profile.Doctor;
import com.yihu.wlyy.entity.doctor.profile.Doctor;
import com.yihu.wlyy.entity.job.QuartzJobLog;
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.entity.statistics.WlyyQuotaResult;
import com.yihu.wlyy.repository.address.TownDao;
import com.yihu.wlyy.repository.address.TownDao;
import com.yihu.wlyy.repository.doctor.DoctorDao;
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> tjTownMap = new HashMap<String, Long>();//区级的统计map key 是区行政区划350200
        Map<String, Long> tjOrgMap = new HashMap<String, Long>();//机构的统计map key 是机构的code
        Map<String, Long> tjOrgMap = new HashMap<String, Long>();//机构的统计map key 是机构的code
        Map<String, Long> tjQkdoctorMap = new HashMap<String, Long>();//团队级的统计map 目前没有团队 先用全科医生统一  key doctorCode
        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="";
        String orgCodeTemp="";
        for (Map<String,Object> plan : plans) {
        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);
            compute(tjQkdoctorMap, doctorCode);
            qkCount++;
            //统计机构------------------start ------------------
            //判断医生属于哪个机构
            //判断医生属于哪个机构
            Doctor doctor = doctorsMap.get(doctorCode);
            Doctor doctor = doctorsMap.get(doctorCode);
            if(doctor==null){
                errorContent.append("随访id:"+plan.get("id")+",随访的医生为空或者不存在");
                isAll=false;
                continue;
            }
            String orgCode = doctor.getHospital();
            String orgCode = doctor.getHospital();
            //统计机构
            //统计机构
            if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
            if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
@ -133,12 +148,18 @@ public class FollowUpJob implements Job {
                orgCodeTemp=orgCode;
                orgCodeTemp=orgCode;
                compute(tjOrgMap, orgCode);
                compute(tjOrgMap, orgCode);
            }
            }
            orgCount++;
            //统计区------------------start ------------------
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) {
                errorContent.append("随访id:"+plan.get("id")+",随访的医生所属的机构为空或者不存在");
                isAll=false;
                continue;
            }
            String townCode = hospital.getTown();
            String townCode = hospital.getTown();
            //统计区
            //统计区
            compute(tjTownMap, townCode);
            compute(tjTownMap, townCode);
            //统计市
            cityCount++;
            townCount++;
        }
        }
        //保存统计的结果
        //保存统计的结果
        //保存全科医生的随访统计
        //保存全科医生的随访统计
@ -146,6 +167,7 @@ public class FollowUpJob implements Job {
            Doctor doctor = doctorsMap.get(entry.getKey());//得到健康管理师
            Doctor doctor = doctorsMap.get(entry.getKey());//得到健康管理师
            orgCodeTemp=getOrg(doctor.getHospital());
            orgCodeTemp=getOrg(doctor.getHospital());
            Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到全科医生的机构
            Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到全科医生的机构
            if(hospital == null) continue;
            String city=Constant.city;
            String city=Constant.city;
            String cityName=Constant.cityName;
            String cityName=Constant.cityName;
            String town=hospital.getTown();
            String town=hospital.getTown();
@ -166,6 +188,7 @@ public class FollowUpJob implements Job {
        //保存机构的随访统计
        //保存机构的随访统计
        for (Map.Entry<String, Hospital> entry : hospitalsMap.entrySet()) {
        for (Map.Entry<String, Hospital> entry : hospitalsMap.entrySet()) {
            Hospital hospital = hospitalsMap.get(entry.getKey());
            Hospital hospital = hospitalsMap.get(entry.getKey());
            if(hospital == null) continue;
            String city=Constant.city;
            String city=Constant.city;
            String cityName=Constant.cityName;
            String cityName=Constant.cityName;
            String town=hospital.getTown();
            String town=hospital.getTown();
@ -216,11 +239,22 @@ public class FollowUpJob implements Job {
        }
        }
        quartzJobLog.setJobEndTime(new Date());
        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);
        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
     * @param tjQkdoctorMap

+ 78 - 38
src/main/java/com/yihu/wlyy/job/HealthGuideJob.java

@ -1,16 +1,20 @@
package com.yihu.wlyy.job;
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.organization.Hospital;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.doctor.profile.Doctor;
import com.yihu.wlyy.entity.doctor.profile.Doctor;
import com.yihu.wlyy.entity.job.QuartzJobLog;
import com.yihu.wlyy.entity.job.QuartzJobLog;
import com.yihu.wlyy.entity.patient.PatientHealthGuidance;
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.entity.statistics.WlyyQuotaResult;
import com.yihu.wlyy.repository.address.TownDao;
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.DoctorDao;
import com.yihu.wlyy.repository.job.QuartzJobLogDao;
import com.yihu.wlyy.repository.job.QuartzJobLogDao;
import com.yihu.wlyy.repository.organization.HospitalDao;
import com.yihu.wlyy.repository.organization.HospitalDao;
import com.yihu.wlyy.repository.patient.PatientHealthGuidanceDao;
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.repository.statistics.WlyyQuotaResultDao;
import com.yihu.wlyy.web.quota.WlyyJobConfigVO;
import com.yihu.wlyy.web.quota.WlyyJobConfigVO;
import com.yihu.wlyy.web.quota.WlyyQuotaVO;
import com.yihu.wlyy.web.quota.WlyyQuotaVO;
@ -38,7 +42,8 @@ public class HealthGuideJob implements Job {
    private WlyyQuotaResultDao wlyyQuotaResultDao;//指标结果Dao
    private WlyyQuotaResultDao wlyyQuotaResultDao;//指标结果Dao
    @Autowired
    @Autowired
    private QuartzJobLogDao quartzJobLogDao;//执行日志Dao
    private QuartzJobLogDao quartzJobLogDao;//执行日志Dao
    @Autowired
    private SignFamilyDao signFamilyDao;
    @Autowired
    @Autowired
    private DoctorDao doctorDao;
    private DoctorDao doctorDao;
    @Autowired
    @Autowired
@ -49,6 +54,8 @@ public class HealthGuideJob implements Job {
    private PatientHealthGuidanceDao patientHealthGuidanceDao;
    private PatientHealthGuidanceDao patientHealthGuidanceDao;
    @Autowired
    @Autowired
    private JdbcTemplate jdbcTemplate;
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    String yesterday;
    String yesterday;
    String now;
    String now;
@ -77,11 +84,11 @@ public class HealthGuideJob implements Job {
        quartzJobLog.setJobId(wlyyJobConfig.getId());
        quartzJobLog.setJobId(wlyyJobConfig.getId());
        quartzJobLog.setJobName(wlyyJobConfig.getJobName());
        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();
        List<Hospital> hospitals = hospitalDao.findHospital2();
@ -100,64 +107,86 @@ public class HealthGuideJob implements Job {
        Map<String, Long> tjTownMap = new HashMap<String, Long>();//区级的统计map key 是区行政区划350200
        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> 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) {
        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;
                continue;
            }
            }
            String orgCode = doctor.getHospital();
            //统计机构
            String orgCode=signFamily.getHospital();//得到机构id
            String orgCodeTemp="";
            //统计机构 -----------------start---------------------
            if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
            if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                //统计站
                //统计站
                orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
                orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
                compute(tjOrgMap, orgCodeTemp);
            }else{
            }else{
                //统计社区
                //统计社区
                orgCodeTemp=orgCode;
                orgCodeTemp=orgCode;
                compute(tjOrgMap, orgCode);
            }
            }
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) {
                errorContent.append("健康咨询id:"+patientHealthGuidance.getId()+",健康咨询的医生所属的机构为空");
                isAll=false;
                continue;
            }
            //统计市 -----------------start---------------------
            cityCount++;
            //统计区 -----------------start---------------------
            String townCode = hospital.getTown();
            String townCode = hospital.getTown();
            //统计区
            compute(tjTownMap, townCode);
            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);//得到全科医生的机构
            Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到全科医生的机构
            if(hospital == null) continue;
            String city=Constant.city;
            String city=Constant.city;
            String cityName=Constant.cityName;
            String cityName=Constant.cityName;
            String town=hospital.getTown();
            String town=hospital.getTown();
            String townName=hospital.getTownName();
            String townName=hospital.getTownName();
            String org=hospital.getCode();
            String org=hospital.getCode();
            if(!"00".equals(hospital.getCode().substring(hospital.getCode().length()-2,hospital.getCode().length()))){
                //统计站
                org=hospital.getCode().substring(0,hospital.getCode().length()-2)+"00";
            }
            String orgName=hospital.getName();
            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 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()) {
        for (Map.Entry<String, Hospital> entry : hospitalsMap.entrySet()) {
            Hospital hospital = hospitalsMap.get(entry.getKey());
            Hospital hospital = hospitalsMap.get(entry.getKey());
            if(hospital == null) continue;
            String city=Constant.city;
            String city=Constant.city;
            String cityName=Constant.cityName;
            String cityName=Constant.cityName;
            String town=hospital.getTown();
            String town=hospital.getTown();
@ -208,11 +237,22 @@ public class HealthGuideJob implements Job {
        }
        }
        quartzJobLog.setJobEndTime(new Date());
        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);
        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
     * @param tjdoctorMap

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

@ -102,15 +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>> townAgeMap = new HashMap<String, Map<String, Map>>();//key是区行政代码
            Map<String, Map<String, Map>> orgAgeMap = 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) {
            for (SignFamily signFamily : signFamilies) {
                orgCodeTemp=signFamily.getHospital();
                String orgCodeTemp=signFamily.getHospital();
                if(!"00".equals(orgCodeTemp.substring(orgCodeTemp.length()-2,orgCodeTemp.length()))){
                if(!"00".equals(orgCodeTemp.substring(orgCodeTemp.length()-2,orgCodeTemp.length()))){
                    //统计站
                    //统计站
                    orgCodeTemp=orgCodeTemp.substring(0,orgCodeTemp.length()-2)+"00";
                    orgCodeTemp=orgCodeTemp.substring(0,orgCodeTemp.length()-2)+"00";
                }
                }
                Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到患者签约的机构
                Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到患者签约的机构
                if(hospital == null) {
                    errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据异常");
                    isAll=false;
                    continue;
                }
                String town = hospital.getTown();
                String town = hospital.getTown();
                int age = IdCardUtil.getAgeForIdcard(signFamily.getIdcard());//根据card解析年龄
                int age = IdCardUtil.getAgeForIdcard(signFamily.getIdcard());//根据card解析年龄
                String ageCode = getAgeCode(age);//得到年龄的code
                String ageCode = getAgeCode(age);//得到年龄的code
@ -157,8 +167,10 @@ public class SignAgeGroupDiseaseJob implements Job {
                }
                }
                //统计市
                //统计市
                compute(cityAgeMap, Constant.city, ageCode, diseaseType);
                compute(cityAgeMap, Constant.city, ageCode, diseaseType);
                cityCount++;
                //统计区
                //统计区
                compute(townAgeMap, town, ageCode, diseaseType);
                compute(townAgeMap, town, ageCode, diseaseType);
                townCount++;
                //统计机构
                //统计机构
                //统计站
                //统计站
                String orgCode=hospital.getCode();
                String orgCode=hospital.getCode();
@ -170,7 +182,7 @@ public class SignAgeGroupDiseaseJob implements Job {
                } else {
                } else {
                    compute(orgAgeMap, hospital.getCode(), ageCode, diseaseType);
                    compute(orgAgeMap, hospital.getCode(), ageCode, diseaseType);
                }
                }
                orgCount++;
            }
            }
            //保存统计数据
            //保存统计数据
            // 保存市的统计数据
            // 保存市的统计数据
@ -229,14 +241,25 @@ public class SignAgeGroupDiseaseJob implements Job {
                }
                }
            }
            }
            wlyyJobLog.setJobEndTime(new Date());
            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);
            quartzJobLogDao.save(wlyyJobLog);
        } catch (Exception e) {
        } catch (Exception e) {
            e.printStackTrace();
            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) {
    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 wlyyQuotaResult = new WlyyQuotaResult();
        wlyyQuotaResult.setDel("1");
        wlyyQuotaResult.setDel("1");

+ 277 - 885
src/main/java/com/yihu/wlyy/job/SignJob.java

@ -1,5 +1,6 @@
package com.yihu.wlyy.job;
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.organization.Hospital;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.doctor.profile.Doctor;
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.patient.SignFamily;
import com.yihu.wlyy.entity.statistics.WlyyQuotaResult;
import com.yihu.wlyy.entity.statistics.WlyyQuotaResult;
import com.yihu.wlyy.repository.address.TownDao;
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.DoctorDao;
import com.yihu.wlyy.repository.doctor.DoctorPatientGroupInfoDao;
import com.yihu.wlyy.repository.doctor.DoctorPatientGroupInfoDao;
import com.yihu.wlyy.repository.job.QuartzJobLogDao;
import com.yihu.wlyy.repository.job.QuartzJobLogDao;
@ -59,6 +61,8 @@ public class SignJob implements Job {
    private JdbcTemplate jdbcTemplate;
    private JdbcTemplate jdbcTemplate;
    @Autowired
    @Autowired
    private StringRedisTemplate redisTemplate;
    private StringRedisTemplate redisTemplate;
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    String yesterday;
    String yesterday;
    String now;
    String now;
@ -138,17 +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>> townSexMap = new HashMap<String, Map<String, Long>>();//key是区行政代码
            Map<String, Map<String, Long>> orgSexMap = 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) {
            for (SignFamily signFamily : signFamilys) {
                String idcard = signFamily.getIdcard();//得到签约中患者的身份证号
                String idcard = signFamily.getIdcard();//得到签约中患者的身份证号
                String orgCodeTemp=getOrg(signFamily.getHospital());
                String orgCodeTemp=getOrg(signFamily.getHospital());
                Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到患者签约的机构
                Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到患者签约的机构
                if(hospital == null) {
                    errorContent.append("签约code:"+signFamily.getCode()+",签约的全科医生(doctor字段)的所属机构(wlyy_doctor表中的hospital字段)为空或者所属的机构数据有问题");
                    isAll=false;
                    continue;
                }
                String town = hospital.getTown();//得到患者签约的机构的区号
                String town = hospital.getTown();//得到患者签约的机构的区号
                String hospitalCode = hospital.getCode();//得到患者签约的机构号
                String hospitalCode = hospital.getCode();//得到患者签约的机构号
                String sex = IdCardUtil.getSexForIdcard(idcard);//根据身份证得到性别
                String sex = IdCardUtil.getSexForIdcard(idcard);//根据身份证得到性别
                //统计市 目前只统计厦门市 所以先写死 后期再改造
                //统计市 目前只统计厦门市 所以先写死 后期再改造
                compute_level2_1(citySexMap,Constant.city, sex);
                compute_level2_1(citySexMap,Constant.city, sex);
                cityCount++;
                //统计区
                //统计区
                compute_level2_1(townSexMap,town, sex);
                compute_level2_1(townSexMap,town, sex);
                townCount++;
                //统计机构
                //统计机构
                //统计站
                //统计站
                String orgCode=hospital.getCode();
                String orgCode=hospital.getCode();
@ -160,7 +179,7 @@ public class SignJob implements Job {
                    //统计社区
                    //统计社区
                    compute_level2_1(orgSexMap,hospitalCode, sex);
                    compute_level2_1(orgSexMap,hospitalCode, sex);
                }
                }
                orgCount++;
            }
            }
            //保存统计数据
            //保存统计数据
            //保存市统计数据
            //保存市统计数据
@ -173,7 +192,7 @@ public class SignJob implements Job {
                    String townName="";
                    String townName="";
                    String org="";
                    String org="";
                    String orgName="";
                    String orgName="";
                    String level="3";
                    String level="4";
                    save_level2_1(entry.getValue(), key, city, cityName, town, townName, org, orgName, level);
                    save_level2_1(entry.getValue(), key, city, cityName, town, townName, org, orgName, level);
                }
                }
            }
            }
@ -212,8 +231,8 @@ public class SignJob implements Job {
               }
               }
            }
            }
            QuartzJobLog.setJobEndTime(new Date());
            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);
            quartzJobLogDao.save(QuartzJobLog);
        } catch (Exception e) {
        } catch (Exception e) {
            e.printStackTrace();
            e.printStackTrace();
@ -317,7 +336,12 @@ public class SignJob implements Job {
            //找出今天的签约信息
            //找出今天的签约信息
            List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterday(yesterday, now);
            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) {
            for (SignFamily signFamily : signFamilys) {
                String patient = signFamily.getPatient();
                String patient = signFamily.getPatient();
@ -330,58 +354,31 @@ public class SignJob implements Job {
                    group="1";
                    group="1";
                }
                }
                Hospital hospital = hospitalsMap.get(signFamily.getHospital());//得到患者签约的机构
                if (hospital == null) {
                Hospital hospital = hospitalsMap.get(getOrg(signFamily.getHospital()));//得到患者签约的机构
                if(hospital == null) {
                    errorContent.append("签约code:"+signFamily.getCode()+",签约的全科医生(doctor字段)的所属机构(wlyy_doctor表中的hospital字段)为空或者所属的机构数据有问题");
                    isAll=false;
                    continue;
                    continue;
                }
                }
                String town = hospital.getTown();
                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();
                String orgCode=hospital.getCode();
                if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                    //统计站
                    //统计站
                    String orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
                    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 {
                } 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 hasGXY = false;//有高血压
                boolean hasTNB = false;//有糖尿病
                boolean hasTNB = false;//有糖尿病
                if ("2".equals(group)) {
                if ("2".equals(group)) {
@ -422,50 +419,20 @@ public class SignJob implements Job {
                    }else if(hasTNB){
                    }else if(hasTNB){
                        group = 5 + "";//4高血压,5糖尿病
                        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);
                    //统计站
                    //统计站
                    if (!"00".equals(hospital.getCode().substring(8))) {
                        String orgCodeTemp = hospital.getCode().substring(0, 8) + "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 {
                    } 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());
                    }
                    }
                }
                }
@ -475,391 +442,100 @@ public class SignJob implements Job {
            //保存市的统计数据
            //保存市的统计数据
            for (Map.Entry<String, Map<String, Long>> entry : cityGroupMap.entrySet()) {
            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()) {
            for (Map.Entry<String, Town> townEntry : townsMap.entrySet()) {
                //判断该区是否有统计数据
                //判断该区是否有统计数据
                Map<String, Long> oneTownGroupMap = townGroupMap.get(townEntry.getKey());//得到当个区的统计数据
                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()) {
            for (Map.Entry<String, Hospital> hospitalEntry : hospitalsMap.entrySet()) {
                //判断该机构是否有统计数据
                //判断该机构是否有统计数据
                Map<String, Long> oneOrgGroupMap = orgGroupMap.get(hospitalEntry.getKey());//得到当个机构的统计数据
                Map<String, Long> oneOrgGroupMap = orgGroupMap.get(hospitalEntry.getKey());//得到当个机构的统计数据
                Hospital hospital = hospitalEntry.getValue();//得到区级信息
                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.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);
            quartzJobLogDao.save(QuartzJobLog);
        } catch (Exception e) {
        } catch (Exception e) {
            e.printStackTrace();
            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);
        }
    }
    /**
    /**
     * 机构维度患者年龄维度计算指标
     * 机构维度患者年龄维度计算指标
     */
     */
@ -892,451 +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>> townAgeMap = new HashMap<String, Map<String, Long>>();//key是区行政代码
            Map<String, Map<String, Long>> orgAgeMap = 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) {
           for (SignFamily signFamily : signFamilys) {
               String orgCodeTemp=getOrg(signFamily.getHospital());
                String orgCodeTemp=getOrg(signFamily.getHospital());
                Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到患者签约的机构
                Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到患者签约的机构
               if(hospital == null) {
                   errorContent.append("签约code:"+signFamily.getCode()+",签约的全科医生(doctor字段)的所属机构(wlyy_doctor表中的hospital字段)为空或者所属的机构数据有问题");
                   isAll=false;
                   continue;
               }
                String town = hospital.getTown();
                String town = hospital.getTown();
                int age = IdCardUtil.getAgeForIdcard(signFamily.getIdcard());//根据card解析年龄
                int age = IdCardUtil.getAgeForIdcard(signFamily.getIdcard());//根据card解析年龄
                String ageCode = getAgeCode(age);//得到年龄的code
                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();
                String orgCode=hospital.getCode();
                if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                    //统计站
                    //统计站
                    orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
                    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 {
                } 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()) {
            for (Map.Entry<String, Map<String, Long>> entry : cityAgeMap.entrySet()) {
                Map<String, Long> oneAgeMap = entry.getValue();
                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()) {
            for (Map.Entry<String, Town> entry : townsMap.entrySet()) {
                //判断该区是否有统计数据
                //判断该区是否有统计数据
                Map<String, Long> oneAgeMap = townAgeMap.get(entry.getKey());//得到当个区的统计数据
                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()) {
            for (Map.Entry<String, Hospital> hospitalEntry : hospitalsMap.entrySet()) {
                //判断该机构是否有统计数据
                //判断该机构是否有统计数据
                Map<String, Long> oneAgeMap = orgAgeMap.get(hospitalEntry.getKey());//得到当个机构的统计数据
                Map<String, Long> oneAgeMap = orgAgeMap.get(hospitalEntry.getKey());//得到当个机构的统计数据
                Hospital hospital = hospitalEntry.getValue();//得到区级信息
                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.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);
            quartzJobLogDao.save(QuartzJobLog);
        } catch (Exception e) {
        } catch (Exception e) {
            e.printStackTrace();
            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);
        }
    }
    /**
    /**
     * 机构维度计算指标
     * 机构维度计算指标
     */
     */
@ -1351,10 +718,10 @@ public class SignJob implements Job {
        QuartzJobLog.setJobName(wlyyJobConfig.getJobName());
        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();
        List<Hospital> hospitals = hospitalDao.findHospitalzxFWZ();
@ -1373,45 +740,57 @@ public class SignJob implements Job {
        Map<String, Long> tjTownMap = new HashMap<String, Long>();//区级的统计map key 是区行政区划350200
        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> 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) {
        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()))){
            if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                //统计站
                //站
                orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
                orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
                compute_level1(tjOrgMap, orgCodeTemp);
            } else {
                //统计社区
                compute_level1(tjOrgMap, orgCode);
            }else{
                //社区
                orgCodeTemp=orgCode;
                orgCodeTemp=orgCode;
            }
            }
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            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();
            String townCode = hospital.getTown();
            //统计区
            compute_level1(tjTownMap, townCode);
            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);//得到全科医生的机构
            Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到全科医生的机构
            if(hospital == null) continue;
            String city=Constant.city;
            String city=Constant.city;
            String cityName=Constant.cityName;
            String cityName=Constant.cityName;
            String town=hospital.getTown();
            String town=hospital.getTown();
@ -1422,16 +801,17 @@ public class SignJob implements Job {
                org=hospital.getCode().substring(0,hospital.getCode().length()-2)+"00";
                org=hospital.getCode().substring(0,hospital.getCode().length()-2)+"00";
            }
            }
            String orgName=hospital.getName();
            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 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()) {
        for (Map.Entry<String, Hospital> entry : hospitalsMap.entrySet()) {
            Hospital hospital = hospitalsMap.get(entry.getKey());//得到全科医生
            Hospital hospital = hospitalsMap.get(entry.getKey());//得到全科医生
            if(hospital == null) continue;
            String city=Constant.city;
            String city=Constant.city;
            String cityName=Constant.cityName;
            String cityName=Constant.cityName;
            String town=hospital.getTown();
            String town=hospital.getTown();
@ -1482,8 +862,8 @@ public class SignJob implements Job {
        }
        }
        QuartzJobLog.setJobEndTime(new Date());
        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);
        quartzJobLogDao.save(QuartzJobLog);
    }
    }
    /**
    /**
@ -1568,13 +948,25 @@ public class SignJob implements Job {
        return dateString;
        return dateString;
    }
    }
    private String getOrg(String org){
    private String getOrg(String org){
        if(!"00".equals(org.substring(org.length()-2,org.length()))){
        //if(!"00".equals(org.substring(org.length()-2,org.length()))){
        if(org.length() == 10 && !org.endsWith("00")){
            return org.substring(0,org.length()-2)+"00";
            return org.substring(0,org.length()-2)+"00";
        }else{
        }else{
            return org;
            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();
    }
    }
}
}

+ 68 - 33
src/main/java/com/yihu/wlyy/job/UnSignJob.java

@ -1,5 +1,6 @@
package com.yihu.wlyy.job;
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.organization.Hospital;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.doctor.profile.Doctor;
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.patient.SignFamily;
import com.yihu.wlyy.entity.statistics.WlyyQuotaResult;
import com.yihu.wlyy.entity.statistics.WlyyQuotaResult;
import com.yihu.wlyy.repository.address.TownDao;
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.DoctorDao;
import com.yihu.wlyy.repository.job.QuartzJobLogDao;
import com.yihu.wlyy.repository.job.QuartzJobLogDao;
import com.yihu.wlyy.repository.organization.HospitalDao;
import com.yihu.wlyy.repository.organization.HospitalDao;
@ -49,6 +51,8 @@ public class UnSignJob implements Job {
    @Autowired
    @Autowired
    private JdbcTemplate jdbcTemplate;
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    String yesterday;
    String yesterday;
    String now;
    String now;
    @Override
    @Override
@ -80,10 +84,10 @@ public class UnSignJob implements Job {
        quartzJobLog.setJobName(wlyyJobConfig.getJobName());
        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();
        List<Hospital> hospitals = hospitalDao.findHospital2();
@ -102,40 +106,57 @@ public class UnSignJob implements Job {
        Map<String, Long> tjTownMap = new HashMap<String, Long>();//区级的统计map key 是区行政区划350200
        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> 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) {
        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()))){
            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{
            }else{
                //统计社区
                //社区
                orgCodeTemp=orgCode;
                orgCodeTemp=orgCode;
                compute(tjOrgMap, orgCode);
            }
            }
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            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();
            String townCode = hospital.getTown();
            //统计区
            compute(tjTownMap, townCode);
            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);//得到全科医生的机构
            Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到全科医生的机构
            if(hospital == null) continue;
            String city=Constant.city;
            String city=Constant.city;
            String cityName=Constant.cityName;
            String cityName=Constant.cityName;
            String town=hospital.getTown();
            String town=hospital.getTown();
@ -146,16 +167,17 @@ public class UnSignJob implements Job {
                org=hospital.getCode().substring(0,hospital.getCode().length()-2)+"00";
                org=hospital.getCode().substring(0,hospital.getCode().length()-2)+"00";
            }
            }
            String orgName=hospital.getName();
            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 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()) {
        for (Map.Entry<String, Hospital> entry : hospitalsMap.entrySet()) {
            Hospital hospital = hospitalsMap.get(entry.getKey());//得到全科医生
            Hospital hospital = hospitalsMap.get(entry.getKey());//得到全科医生
            if(hospital == null) continue;
            String city=Constant.city;
            String city=Constant.city;
            String cityName=Constant.cityName;
            String cityName=Constant.cityName;
            String town=hospital.getTown();
            String town=hospital.getTown();
@ -206,8 +228,8 @@ public class UnSignJob implements Job {
        }
        }
        quartzJobLog.setJobEndTime(new Date());
        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);
        quartzJobLogDao.save(quartzJobLog);
    }
    }
@ -254,4 +276,17 @@ public class UnSignJob implements Job {
    public String getYesterday() {
    public String getYesterday() {
        return yesterday;
        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();
    }
}
}

+ 67 - 35
src/main/java/com/yihu/wlyy/job/WaitSignJob.java

@ -1,5 +1,6 @@
package com.yihu.wlyy.job;
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.organization.Hospital;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.doctor.profile.Doctor;
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.patient.SignFamily;
import com.yihu.wlyy.entity.statistics.WlyyQuotaResult;
import com.yihu.wlyy.entity.statistics.WlyyQuotaResult;
import com.yihu.wlyy.repository.address.TownDao;
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.DoctorDao;
import com.yihu.wlyy.repository.job.QuartzJobLogDao;
import com.yihu.wlyy.repository.job.QuartzJobLogDao;
import com.yihu.wlyy.repository.organization.HospitalDao;
import com.yihu.wlyy.repository.organization.HospitalDao;
@ -51,6 +53,8 @@ public class WaitSignJob implements Job {
    String yesterday;
    String yesterday;
    String now;
    String now;
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    @Override
    @Override
    public void execute(JobExecutionContext context)
    public void execute(JobExecutionContext context)
            throws JobExecutionException {
            throws JobExecutionException {
@ -79,10 +83,10 @@ public class WaitSignJob implements Job {
        quartzJobLog.setJobName(wlyyJobConfig.getJobName());
        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();
        List<Hospital> hospitals = hospitalDao.findHospital2();
@ -101,43 +105,57 @@ public class WaitSignJob implements Job {
        Map<String, Long> tjTownMap = new HashMap<String, Long>();//区级的统计map key 是区行政区划350200
        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> 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) {
        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()))){
            if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                //统计站
                //站
                orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
                orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
                compute(tjOrgMap, orgCodeTemp);
            }else{
            }else{
                //统计社区
                //社区
                orgCodeTemp=orgCode;
                orgCodeTemp=orgCode;
                compute(tjOrgMap, orgCode);
            }
            }
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            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();
            String townCode = hospital.getTown();
            //统计区
            compute(tjTownMap, townCode);
            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);//得到全科医生的机构
            Hospital hospital = hospitalsMap.get(orgCodeTemp);//得到全科医生的机构
            if(hospital == null) continue;
            String city=Constant.city;
            String city=Constant.city;
            String cityName=Constant.cityName;
            String cityName=Constant.cityName;
            String town=hospital.getTown();
            String town=hospital.getTown();
@ -148,16 +166,17 @@ public class WaitSignJob implements Job {
                org=hospital.getCode().substring(0,hospital.getCode().length()-2)+"00";
                org=hospital.getCode().substring(0,hospital.getCode().length()-2)+"00";
            }
            }
            String orgName=hospital.getName();
            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 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()) {
        for (Map.Entry<String, Hospital> entry : hospitalsMap.entrySet()) {
            Hospital hospital = hospitalsMap.get(entry.getKey());//得到全科医生
            Hospital hospital = hospitalsMap.get(entry.getKey());//得到全科医生
            if(hospital == null) continue;
            String city=Constant.city;
            String city=Constant.city;
            String cityName=Constant.cityName;
            String cityName=Constant.cityName;
            String town=hospital.getTown();
            String town=hospital.getTown();
@ -208,8 +227,8 @@ public class WaitSignJob implements Job {
        }
        }
        quartzJobLog.setJobEndTime(new Date());
        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);
        quartzJobLogDao.save(quartzJobLog);
    }
    }
@ -255,4 +274,17 @@ public class WaitSignJob implements Job {
    public String getYesterday() {
    public String getYesterday() {
        return yesterday;
        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();
    }
}
}

+ 14 - 6
src/main/java/com/yihu/wlyy/repository/consult/ConsultTeamDao.java

@ -138,13 +138,21 @@ public interface ConsultTeamDao extends PagingAndSortingRepository<ConsultTeam,
	int updateComment(String commentContent, double commentStar, String consult);
	int updateComment(String commentContent, double commentStar, String consult);
	// 查询医生所有未读的消息总数
	// 查询医生所有未读的消息总数
	@Query("SELECT SUM(a.doctorRead) FROM ConsultTeam a, ConsultTeamDoctor b WHERE a.consult = b.consult AND b.to = ?1 AND a.del = '1' AND a.status = 0")
	@Query("SELECT SUM(a.doctorRead) FROM ConsultTeam a, ConsultTeamDoctor b WHERE a.consult = b.consult AND b.to = ?1 AND a.del = '1' AND a.status = 0 AND a.type <> 6")
	int amountAllDoctorUnread(String doctor);
	int amountAllDoctorUnread(String doctor);
	// 查询医生所有未读的消息总数
	// 查询医生所有未读的消息总数
	@Query("SELECT a.name,b.czrq FROM ConsultTeam a, ConsultTeamDoctor b WHERE a.consult = b.consult AND b.to = ?1 AND a.del = '1' AND a.status = 0 order by b.czrq desc")
	@Query("SELECT SUM(a.doctorRead) FROM ConsultTeam a, ConsultTeamDoctor b WHERE a.consult = b.consult AND b.to = ?1 AND a.del = '1' AND a.status = 0 AND a.type = 6")
	int amountAlFamouslDoctorUnread(String doctor);
	// 查询医生所有未读的消息总数
	@Query("SELECT a.name,b.czrq FROM ConsultTeam a, ConsultTeamDoctor b WHERE a.consult = b.consult AND b.to = ?1 AND a.del = '1' AND a.status = 0 AND a.type <> 6 order by b.czrq desc")
	Page<Object> AllDoctorUnreadLast(String doctor,Pageable pageRequest);
	Page<Object> AllDoctorUnreadLast(String doctor,Pageable pageRequest);
	// 查询医生所有未读的消息总数
	@Query("SELECT a.name,b.czrq FROM ConsultTeam a, ConsultTeamDoctor b WHERE a.consult = b.consult AND b.to = ?1 AND a.del = '1' AND a.status = 0 AND a.type = 6 order by b.czrq desc")
	Page<Object> AllDoctorFamousUnreadLast(String doctor,Pageable pageRequest);
	// 查询带未读数量的所有健康咨询列表
	// 查询带未读数量的所有健康咨询列表
	@Query("SELECT a FROM ConsultTeam a, ConsultTeamDoctor b WHERE a.consult = b.consult AND b.to = ?1 AND a.status = 0 and a.type< 3")
	@Query("SELECT a FROM ConsultTeam a, ConsultTeamDoctor b WHERE a.consult = b.consult AND b.to = ?1 AND a.status = 0 and a.type< 3")
	Page<ConsultTeam> findListByUnreadDoctor(String doctor, Pageable pageRequest);
	Page<ConsultTeam> findListByUnreadDoctor(String doctor, Pageable pageRequest);
@ -187,19 +195,19 @@ public interface ConsultTeamDao extends PagingAndSortingRepository<ConsultTeam,
	ConsultTeam findByParientCodeAndSignTypeAndDoctor(String patientCode, String doctor, int s);
	ConsultTeam findByParientCodeAndSignTypeAndDoctor(String patientCode, String doctor, int s);
	//名医咨询 -全部 带symptoms 未处理、未回复
	//名医咨询 -全部 带symptoms 未处理、未回复
	@Query("select a from ConsultTeam a, ConsultTeamDoctor b where a.consult = b.consult and a.type=6 and b.to = ?1 and a.id < ?2 and a.symptoms like ?3 and a.status = 0 and (a.doctorRead > 0 or b.reply != 1) and a.del = '1' and b.del = '1'")
	@Query("select a from ConsultTeam a, ConsultTeamDoctor b where a.consult = b.consult and a.type=6 and b.to = ?1 and a.id < ?2 and a.symptoms like ?3 and a.status = 0 and (a.doctorRead > 0 or b.reply <> 1) and a.del = '1' and b.del = '1'")
	Page<ConsultTeam> findFamousDoctorUnReplyReadList(String uid, long id,String title, Pageable pageRequest);
	Page<ConsultTeam> findFamousDoctorUnReplyReadList(String uid, long id,String title, Pageable pageRequest);
	//名医咨询 -全部 带symptoms 处理、未回复
	//名医咨询 -全部 带symptoms 处理、未回复
	@Query("select a from ConsultTeam a, ConsultTeamDoctor b where a.consult = b.consult and a.type=6 and b.to = ?1 and a.symptoms like ?2 and a.status = 0 and (a.doctorRead > 0 or b.reply != 1) and a.del = '1' and b.del = '1'")
	@Query("select a from ConsultTeam a, ConsultTeamDoctor b where a.consult = b.consult and a.type=6 and b.to = ?1 and a.symptoms like ?2 and a.status = 0 and (a.doctorRead > 0 or b.reply <> 1) and a.del = '1' and b.del = '1'")
	Page<ConsultTeam> findFamousDoctorUnReplyReadList(String uid,String title, Pageable pageRequest);
	Page<ConsultTeam> findFamousDoctorUnReplyReadList(String uid,String title, Pageable pageRequest);
	//名医咨询 -全部 处理、未回复
	//名医咨询 -全部 处理、未回复
	@Query("select a from ConsultTeam a, ConsultTeamDoctor b where a.consult = b.consult and a.type=6 and b.to = ?1 and a.id < ?2 and a.status = 0 and (a.doctorRead > 0 or b.reply != 1) and a.del = '1' and b.del = '1'")
	@Query("select a from ConsultTeam a, ConsultTeamDoctor b where a.consult = b.consult and a.type=6 and b.to = ?1 and a.id < ?2 and a.status = 0 and (a.doctorRead > 0 or b.reply <> 1) and a.del = '1' and b.del = '1'")
	Page<ConsultTeam> findFamousDoctorUnReplyReadNoTitleList(String uid, long id, Pageable pageRequest);
	Page<ConsultTeam> findFamousDoctorUnReplyReadNoTitleList(String uid, long id, Pageable pageRequest);
	//名医咨询 -全部
	//名医咨询 -全部
	@Query("select a from ConsultTeam a, ConsultTeamDoctor b where a.consult = b.consult and a.type=6 and b.to = ?1 and a.status = 0 and (a.doctorRead > 0 or b.reply != 1) and a.del = '1' and b.del = '1'")
	@Query("select a from ConsultTeam a, ConsultTeamDoctor b where a.consult = b.consult and a.type=6 and b.to = ?1 and a.status = 0 and (a.doctorRead > 0 or b.reply <> 1) and a.del = '1' and b.del = '1'")
	Page<ConsultTeam> findFamousDoctorUnReplyReadNoTitleList(String uid, Pageable pageRequest);
	Page<ConsultTeam> findFamousDoctorUnReplyReadNoTitleList(String uid, Pageable pageRequest);
	//名医咨询 -全部 带symptoms 进行中
	//名医咨询 -全部 带symptoms 进行中

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

@ -9,6 +9,8 @@ import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.data.repository.query.Param;
import java.util.List;
/**
/**
 * 行政团队DAO。
 * 行政团队DAO。
 *
 *
@ -72,4 +74,8 @@ public interface DoctorAdminTeamDao extends
     */
     */
    @Query("SELECT t.id from AdminTeam t WHERE t.leaderCode = :leaderCode")
    @Query("SELECT t.id from AdminTeam t WHERE t.leaderCode = :leaderCode")
    Long findIdByLeaderCode(@Param("leaderCode") String leaderCode);
    Long findIdByLeaderCode(@Param("leaderCode") String leaderCode);
    @Query(" FROM AdminTeam t")
    List<AdminTeam> findAllTeam();
}
}

+ 8 - 2
src/main/java/com/yihu/wlyy/repository/doctor/DoctorDao.java

@ -120,9 +120,15 @@ public interface DoctorDao extends PagingAndSortingRepository<Doctor, Long>, Jpa
    List<Doctor> findByIsFamous(Integer isFamous);
    List<Doctor> findByIsFamous(Integer isFamous);
    @Query("select p from Doctor p ,DoctorFamousConsultTimesRemain w where p.code=w.doctor and p.isFamous=1 and w.consultDate = ?1 and p.name like ?2 order by w.timesRemain desc")
    @Query("select p from Doctor p ,DoctorFamousConsultTimesRemain w where p.code=w.doctor and p.isFamous=1 and w.consultDate = ?1 and p.name like ?2 and w.timesRemain > 0 order by w.timesRemain desc")
    Page<Doctor> famousDoctorList(String date, String name, Pageable pageRequest);
    Page<Doctor> famousDoctorList(String date, String name, Pageable pageRequest);
    @Query("select p from Doctor p ,DoctorFamousConsultTimesRemain w where p.code=w.doctor and p.isFamous=1 and w.consultDate = ?1 order by w.timesRemain desc")
    @Query("select p from Doctor p ,DoctorFamousConsultTimesRemain w where p.code=w.doctor and p.isFamous=1 and w.consultDate = ?1  and w.timesRemain > 0  order by w.timesRemain desc")
    Page<Doctor> famousDoctorList(String date, Pageable pageRequest);
    Page<Doctor> famousDoctorList(String date, Pageable pageRequest);
    @Query("select p from Doctor p where p.isFamous=1 and p.name like ?1 ")
    Page<Doctor> doctorFamousDoctorList(String name, Pageable pageRequest);
    @Query("select p from Doctor p where p.isFamous=1 ")
    Page<Doctor> doctorFamousDoctorList(Pageable pageRequest);
}
}

+ 3 - 0
src/main/java/com/yihu/wlyy/repository/doctor/DoctorPatientGroupInfoDao.java

@ -24,6 +24,9 @@ public interface DoctorPatientGroupInfoDao extends PagingAndSortingRepository<Do
	@Query("select p from DoctorPatientGroupInfo p where p.doctor = ?1 and p.patient = ?2")
	@Query("select p from DoctorPatientGroupInfo p where p.doctor = ?1 and p.patient = ?2")
	DoctorPatientGroupInfo findGroupInfoByPatient(String doctor, String patient);
	DoctorPatientGroupInfo findGroupInfoByPatient(String doctor, String patient);
	@Query("select p from DoctorPatientGroupInfo p where p.doctor = ?1 and p.patient = ?2 and p.status = 1 and p.signType = '2'")
	List<DoctorPatientGroupInfo> findGroupInfoByPatientAndDoctor(String doctor, String patient);
	// 删除分组时将原来分组患者移动到other分组
	// 删除分组时将原来分组患者移动到other分组
	@Modifying
	@Modifying
	@Query("update DoctorPatientGroupInfo a set a.group = 'other' where a.group = ?1")
	@Query("update DoctorPatientGroupInfo a set a.group = 'other' where a.group = ?1")

+ 5 - 3
src/main/java/com/yihu/wlyy/repository/doctor/DoctorTeamDao.java

@ -13,14 +13,16 @@ JpaSpecificationExecutor<DoctorTeam> {
	DoctorTeam findByCode(String code);
	DoctorTeam findByCode(String code);
	@Query("select dt from DoctorTeam dt,DoctorTeamMember dtm  where dt.code=dtm.team and dt.del=1 and dtm.del=1 and dtm.memberCode= ?1 and dtm.type= 5 and dtm.signType='2'")
	//@Query("select dt from DoctorTeam dt,DoctorTeamMember dtm  where dt.code=dtm.team and dt.del=1 and dtm.del=1 and dtm.memberCode= ?1 and dtm.type= 5 and dtm.signType='2'")
	@Query("select dtt from DoctorTeam dtt where dtt.id = (select max(dt.id) from DoctorTeam dt,DoctorTeamMember dtm  where dt.code=dtm.team and dt.del=1 and dtm.del=1 and dtm.memberCode= ?1 and dtm.type= 5 and dtm.signType='2')")
	DoctorTeam findByParientCode(String parientCode);
	DoctorTeam findByParientCode(String parientCode);
	@Query("select dt from DoctorTeam dt,DoctorTeamMember dtm  where dt.code=dtm.team and dt.del=1 and dtm.del=1 and dtm.memberCode= ?1 and dtm.type= 5 and dtm.signType='1'")
	@Query("select dt from DoctorTeam dt,DoctorTeamMember dtm  where dt.code=dtm.team and dt.del=1 and dtm.del=1 and dtm.memberCode= ?1 and dtm.type= 5 and dtm.signType='1'")
	DoctorTeam findBySanshiParientCode(String parientCode);
	DoctorTeam findBySanshiParientCode(String parientCode);
	@Query("select dt from DoctorTeam dt,DoctorTeamMember dtm  where dt.code=dtm.team and dt.del=1 and dtm.del=1 and dtm.memberCode= ?1 and dtm.type= 5 and dtm.signType=?2")
	DoctorTeam findByParientCodeAndSignType(String parientCode,String type);
	//@Query("select dt from DoctorTeam dt,DoctorTeamMember dtm  where dt.code=dtm.team and dt.del=1 and dtm.del=1 and dtm.memberCode= ?1 and dtm.type= 5 and dtm.signType=?2 order by dtm.id limit 1")
	@Query("select dtt from DoctorTeam dtt where dtt.id = (select max(dt.id) from DoctorTeam dt,DoctorTeamMember dtm  where dt.code=dtm.team and dt.del=1 and dtm.del=1 and dtm.memberCode= ?1 and dtm.type= 5 and dtm.signType=?2)")
	DoctorTeam findByParientCodeAndSignType(String parientCode, String type);
	@Modifying
	@Modifying
	@Query("update DoctorTeam a set a.del =0  where a.code = ?1 and signType='2'")
	@Query("update DoctorTeam a set a.del =0  where a.code = ?1 and signType='2'")

+ 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")
	@Query("select a from SignFamily a where a.patient = ?1 and a.type = 2 and a.status = 0")
	SignFamily findSigningByPatient(String patient);
	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();
}
}

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

@ -154,6 +154,8 @@ public class ConsultTeamService extends ConsultService {
    private Page<ConsultTeam> findByDoctorType8(String uid,long id,int pagesize,String title){
    private Page<ConsultTeam> findByDoctorType8(String uid,long id,int pagesize,String title){
        Sort sort = new Sort(Direction.DESC, "id");
        Sort sort = new Sort(Direction.DESC, "id");
        sort.and(new Sort(Direction.DESC, "czrq"));
        sort.and(new Sort(Direction.DESC, "doctorRead"));
        // 分页信息
        // 分页信息
        PageRequest pageRequest = new PageRequest(0, pagesize, sort);
        PageRequest pageRequest = new PageRequest(0, pagesize, sort);
        if (StringUtils.isNoneEmpty(title)) {
        if (StringUtils.isNoneEmpty(title)) {
@ -458,6 +460,7 @@ public class ConsultTeamService extends ConsultService {
            DoctorTeamMember doctorTeamMember = doctorTeamDoctor.findDoctorSanshi2ByTeam(doctorTeam.getCode(), 3);
            DoctorTeamMember doctorTeamMember = doctorTeamDoctor.findDoctorSanshi2ByTeam(doctorTeam.getCode(), 3);
            // 设置家庭医生
            // 设置家庭医生
            ct.setDoctor(doctorTeamMember.getMemberCode());
            ct.setDoctor(doctorTeamMember.getMemberCode());
            ct.setAdminTeamId(sc.getAdminTeamId());
        } else if (ct.getType() == 2) {
        } else if (ct.getType() == 2) {
            // 咨询家庭医生
            // 咨询家庭医生
            SignFamily sf = signFamilyDao.findByjiatingPatient(patient);
            SignFamily sf = signFamilyDao.findByjiatingPatient(patient);
@ -472,6 +475,7 @@ public class ConsultTeamService extends ConsultService {
            DoctorTeamMember doctorTeamMember = doctorTeamDoctor.findDoctorJiating2ByTeam(doctorTeam.getCode(), 3);
            DoctorTeamMember doctorTeamMember = doctorTeamDoctor.findDoctorJiating2ByTeam(doctorTeam.getCode(), 3);
            // 设置家庭医生
            // 设置家庭医生
            ct.setDoctor(doctorTeamMember.getMemberCode());
            ct.setDoctor(doctorTeamMember.getMemberCode());
            ct.setAdminTeamId(sf.getAdminTeamId());
        }
        }
        // 设置患者信息
        // 设置患者信息
        ct.setPatient(patient);
        ct.setPatient(patient);

+ 224 - 177
src/main/java/com/yihu/wlyy/service/app/message/MessageService.java

@ -28,188 +28,235 @@ import com.yihu.wlyy.service.BaseService;
/**
/**
 * 消息业务处理类
 * 消息业务处理类
 * @author George
 *
 *
 * @author George
 */
 */
@Component
@Component
@Transactional(rollbackOn = Exception.class)
@Transactional(rollbackOn = Exception.class)
public class MessageService extends BaseService {
public class MessageService extends BaseService {
	@Autowired
	private ConsultTeamDao consultTeamDao;
	@Autowired
	private MessageDao messageDao;
	/**
	 * 汇总查询医生的消息总数
	 * @param doctor
	 * @return
	 */
	public JSONObject findDoctorAllMessageAmount(String doctor) {
		// 三师咨询未读消息总数
		int consult = 0;
		try {
			consult = consultTeamDao.amountAllDoctorUnread(doctor);
		} catch (Exception e) {
		}
		// 签约未读消息总数
		int sign = messageDao.amountUnreadByReceiver(doctor);
		// 体征指标未读消息总数
		int healthIndex = messageDao.amountUnreadHealthByReceiver(doctor);
		JSONObject json = new JSONObject();
		json.put("consultTeam", consult);
		json.put("sign", sign);
		json.put("healthIndex", healthIndex);
		return json;
	}
	/**
	 * 查询医生未读消息和最后消息
	 *
	 * @param doctor
	 * @return
	 */
	public JSONObject findDoctorAllMessage(String doctor){
		// 三师咨询未读消息总数
		int consult = 0;
		JSONObject consultJson =  new JSONObject();
		try {
			consult = consultTeamDao.amountAllDoctorUnread(doctor);
		} catch (Exception e) {
		}
		consultJson.put("amount",consult);
		if(consult > 0){
			PageRequest pageRequest = new PageRequest(0,1);
			Page<Object> msgs = consultTeamDao.AllDoctorUnreadLast(doctor,pageRequest);
			if(msgs != null && msgs.getSize() > 0){
				for(Object msg : msgs){
					Object[] msgArray = (Object[])msg;
					JSONObject msgJson = new JSONObject();
					msgJson.put("msg",msgArray[0].toString() + "向您发来一个咨询");
					msgJson.put("msgTime",msgArray[1] != null? DateUtil.dateToStr((Date) msgArray[1],DateUtil.YYYY_MM_DD):"");
					consultJson.put("lastMessage",msgJson);
				}
			}
		}
		// 签约未读消息总数
		int sign = messageDao.amountUnreadByReceiver(doctor);
		JSONObject signJson =  new JSONObject();
		signJson.put("amount",sign);
		if(sign > 0){
			PageRequest pageRequest = new PageRequest(0,1);
			Page<Message> msgs = messageDao.amountUnreadLastByReceiver(doctor,pageRequest);
			if(msgs != null && msgs.getSize() > 0){
				for(Message msg : msgs){
					JSONObject msgJson = new JSONObject();
					if(msg.getSignStatus().equals("4")){
						msgJson.put("msg", msg.getSenderName() + "申请与您解除家庭签约");
					}else{
						msgJson.put("msg", msg.getSenderName() + "申请与您签约家庭医生");
					}
					msgJson.put("msgTime",msg.getCzrq() != null? DateUtil.dateToStr(msg.getCzrq(),DateUtil.YYYY_MM_DD):"");
					signJson.put("lastMessage",msgJson);
				}
			}
		}
		// 体征指标未读消息总数
		int healthIndex = messageDao.amountUnreadHealthByReceiver(doctor);
		JSONObject indexJson =  new JSONObject();
		indexJson.put("amount",healthIndex);
		if(sign > 0){
			PageRequest pageRequest = new PageRequest(0,1);
			Page<Message> msgs = messageDao.amountUnreadHealthLastByReceiver(doctor,pageRequest);
			if(msgs != null && msgs.getSize() > 0){
				for(Message msg : msgs){
					JSONObject msgJson = new JSONObject();
					msgJson.put("msg",msg.getContent());
					msgJson.put("msgTime",msg.getCzrq() != null? DateUtil.dateToStr(msg.getCzrq(),DateUtil.YYYY_MM_DD):"");
					indexJson.put("lastMessage",msgJson);
				}
			}
		}
		JSONObject json = new JSONObject();
		json.put("consult", consultJson);
		json.put("sign", signJson);
		json.put("healthIndex", indexJson);
		return json;
	}
	/**
	 * 查询健康咨询列表
	 * @param doctor 医生标识
	 * @param id
	 * @param pagesize 分页大小
	 * @return
	 */
	public Page<ConsultTeam> findConsultListByDoctor(String doctor, long id, int pagesize) {
		if (pagesize <= 0) {
			pagesize = 10;
		}
		// 排序
		Sort sort = new Sort(Direction.DESC, "id");
		// 分页信息
		PageRequest pageRequest = new PageRequest(0, pagesize, sort);
			//健康咨询
		if (id > 0) {
			return consultTeamDao.findListByUnreadDoctor(doctor, id, pageRequest);
		} else {
			return consultTeamDao.findListByUnreadDoctor(doctor, pageRequest);
		}
	}
	/**
	 * 查询体征消息列表
	 * @param doctor 医生标识
	 * @param id
	 * @param pagesize 分页大小
	 * @return
	 */
	public Page<Message> findHealthListByDoctor(String doctor, long id, int pagesize, String isRead) {
		if (pagesize <= 0) {
			pagesize = 10;
		}
		// 排序
		Sort sort = new Sort(Direction.DESC, "id");
		// 分页信息
		PageRequest pageRequest = new PageRequest(0, pagesize, sort);
		// 设置查询条件
		Map<String, SearchFilter> filters = new HashMap<String, SearchFilter>();
		filters.put("receiver", new SearchFilter("receiver", Operator.EQ, doctor));
		filters.put("type", new SearchFilter("type", Operator.EQ, "2"));
		if (id > 0) {
			filters.put("id", new SearchFilter("id", Operator.LT, id));
		}
		if (StringUtils.isNoneEmpty(isRead)) {
			filters.put("read", new SearchFilter("read", Operator.EQ, Integer.parseInt(isRead)));
		}
		Specification<Message> spec = DynamicSpecifications.bySearchFilter(filters.values(), Message.class);
		return messageDao.findAll(spec, pageRequest);
	}
	/**
	 * 更新体征消息为已读
	 * @param msgid
	 */
	public int readHealth(long msgid) {
		return messageDao.read(msgid);
	}
	/**
	 * 根据参数查询指定的消息
	 * @return
	 */
	public Message findMessage(String sender, String receiver, String signStatus) {
		return messageDao.findByParams(sender, receiver, signStatus);
	}
    @Autowired
    private ConsultTeamDao consultTeamDao;
    @Autowired
    private MessageDao messageDao;
    /**
     * 汇总查询医生的消息总数
     *
     * @param doctor
     * @return
     */
    public JSONObject findDoctorAllMessageAmount(String doctor) {
        // 三师咨询未读消息总数
        int consult = 0;
        try {
            consult = consultTeamDao.amountAllDoctorUnread(doctor);
        } catch (Exception e) {
        }
        // 签约未读消息总数
        int sign = messageDao.amountUnreadByReceiver(doctor);
        // 体征指标未读消息总数
        int healthIndex = messageDao.amountUnreadHealthByReceiver(doctor);
        JSONObject json = new JSONObject();
        json.put("consultTeam", consult);
        json.put("sign", sign);
        json.put("healthIndex", healthIndex);
        return json;
    }
    /**
     * 查询医生未读消息和最后消息
     *
     * @param doctor
     * @return
     */
    public JSONObject findDoctorAllMessage(String doctor) {
        // 三师咨询未读消息总数
        int consult = 0;
        JSONObject consultJson = new JSONObject();
        try {
            consult = consultTeamDao.amountAllDoctorUnread(doctor);
        } catch (Exception e) {
        }
        consultJson.put("amount", consult);
        if (consult > 0) {
            PageRequest pageRequest = new PageRequest(0, 1);
            Page<Object> msgs = consultTeamDao.AllDoctorUnreadLast(doctor, pageRequest);
            if (msgs != null && msgs.getSize() > 0) {
                for (Object msg : msgs) {
                    Object[] msgArray = (Object[]) msg;
                    JSONObject msgJson = new JSONObject();
                    msgJson.put("msg", msgArray[0].toString() + "向您发来一个咨询");
                    if (msgArray[1] != null) {
                        if (DateUtil.dateToStr(new Date(), DateUtil.YYYY_MM_DD).equals(DateUtil.dateToStr((Date) msgArray[1], DateUtil.YYYY_MM_DD))) {
                            msgJson.put("msgTime", DateUtil.dateToStr((Date) msgArray[1], DateUtil.HH_MM));
                        } else {
                            msgJson.put("msgTime", DateUtil.dateToStr((Date) msgArray[1], DateUtil.YYYY_MM_DD_HH_MM));
                        }
                    } else {
                        msgJson.put("msgTime", "");
                    }
                    consultJson.put("lastMessage", msgJson);
                }
            }
        }
        int famousConsult = 0;
        JSONObject famousJson = new JSONObject();
        try {
            famousConsult = consultTeamDao.amountAlFamouslDoctorUnread(doctor);
        } catch (Exception e) {
        }
        famousJson.put("amount", famousConsult);
        if (famousConsult > 0) {
            PageRequest pageRequest = new PageRequest(0, 1);
            Page<Object> msgs = consultTeamDao.AllDoctorFamousUnreadLast(doctor, pageRequest);
            if (msgs != null && msgs.getSize() > 0) {
                for (Object msg : msgs) {
                    Object[] msgArray = (Object[]) msg;
                    JSONObject msgJson = new JSONObject();
                    msgJson.put("msg", msgArray[0].toString() + "向您发来一个咨询");
                    if (msgArray[1] != null) {
                        if (DateUtil.dateToStr(new Date(), DateUtil.YYYY_MM_DD).equals(DateUtil.dateToStr((Date) msgArray[1], DateUtil.YYYY_MM_DD))) {
                            msgJson.put("msgTime", DateUtil.dateToStr((Date) msgArray[1], DateUtil.HH_MM));
                        } else {
                            msgJson.put("msgTime", DateUtil.dateToStr((Date) msgArray[1], DateUtil.YYYY_MM_DD_HH_MM));
                        }
                    } else {
                        msgJson.put("msgTime", "");
                    }
                    famousJson.put("lastMessage", msgJson);
                }
            }
        }
        // 签约未读消息总数
        int sign = messageDao.amountUnreadByReceiver(doctor);
        JSONObject signJson = new JSONObject();
        signJson.put("amount", sign);
        if (sign > 0) {
            PageRequest pageRequest = new PageRequest(0, 1);
            Page<Message> msgs = messageDao.amountUnreadLastByReceiver(doctor, pageRequest);
            if (msgs != null && msgs.getSize() > 0) {
                for (Message msg : msgs) {
                    JSONObject msgJson = new JSONObject();
                    if (msg.getSignStatus().equals("4")) {
                        msgJson.put("msg", msg.getSenderName() + "申请与您解除家庭签约");
                    } else {
                        msgJson.put("msg", msg.getSenderName() + "申请与您签约家庭医生");
                    }
                    msgJson.put("msgTime", msg.getCzrq() != null ? DateUtil.dateToStr(msg.getCzrq(), DateUtil.YYYY_MM_DD) : "");
                    signJson.put("lastMessage", msgJson);
                }
            }
        }
        // 体征指标未读消息总数
        int healthIndex = messageDao.amountUnreadHealthByReceiver(doctor);
        JSONObject indexJson = new JSONObject();
        indexJson.put("amount", healthIndex);
        if (sign > 0) {
            PageRequest pageRequest = new PageRequest(0, 1);
            Page<Message> msgs = messageDao.amountUnreadHealthLastByReceiver(doctor, pageRequest);
            if (msgs != null && msgs.getSize() > 0) {
                for (Message msg : msgs) {
                    JSONObject msgJson = new JSONObject();
                    msgJson.put("msg", msg.getContent());
                    msgJson.put("msgTime", msg.getCzrq() != null ? DateUtil.dateToStr(msg.getCzrq(), DateUtil.YYYY_MM_DD) : "");
                    indexJson.put("lastMessage", msgJson);
                }
            }
        }
        JSONObject json = new JSONObject();
        json.put("consult", consultJson);
        json.put("famousConsult", famousJson);
        json.put("sign", signJson);
        json.put("healthIndex", indexJson);
        return json;
    }
    /**
     * 查询健康咨询列表
     *
     * @param doctor   医生标识
     * @param id
     * @param pagesize 分页大小
     * @return
     */
    public Page<ConsultTeam> findConsultListByDoctor(String doctor, long id, int pagesize) {
        if (pagesize <= 0) {
            pagesize = 10;
        }
        // 排序
        Sort sort = new Sort(Direction.DESC, "id");
        // 分页信息
        PageRequest pageRequest = new PageRequest(0, pagesize, sort);
        //健康咨询
        if (id > 0) {
            return consultTeamDao.findListByUnreadDoctor(doctor, id, pageRequest);
        } else {
            return consultTeamDao.findListByUnreadDoctor(doctor, pageRequest);
        }
    }
    /**
     * 查询体征消息列表
     *
     * @param doctor   医生标识
     * @param id
     * @param pagesize 分页大小
     * @return
     */
    public Page<Message> findHealthListByDoctor(String doctor, long id, int pagesize, String isRead) {
        if (pagesize <= 0) {
            pagesize = 10;
        }
        // 排序
        Sort sort = new Sort(Direction.DESC, "id");
        // 分页信息
        PageRequest pageRequest = new PageRequest(0, pagesize, sort);
        // 设置查询条件
        Map<String, SearchFilter> filters = new HashMap<String, SearchFilter>();
        filters.put("receiver", new SearchFilter("receiver", Operator.EQ, doctor));
        filters.put("type", new SearchFilter("type", Operator.EQ, "2"));
        if (id > 0) {
            filters.put("id", new SearchFilter("id", Operator.LT, id));
        }
        if (StringUtils.isNoneEmpty(isRead)) {
            filters.put("read", new SearchFilter("read", Operator.EQ, Integer.parseInt(isRead)));
        }
        Specification<Message> spec = DynamicSpecifications.bySearchFilter(filters.values(), Message.class);
        return messageDao.findAll(spec, pageRequest);
    }
    /**
     * 更新体征消息为已读
     *
     * @param msgid
     */
    public int readHealth(long msgid) {
        return messageDao.read(msgid);
    }
    /**
     * 根据参数查询指定的消息
     *
     * @return
     */
    public Message findMessage(String sender, String receiver, String signStatus) {
        return messageDao.findByParams(sender, receiver, signStatus);
    }
}
}

+ 180 - 6
src/main/java/com/yihu/wlyy/service/app/sign/FamilyContractService.java

@ -97,8 +97,8 @@ public class FamilyContractService extends BaseService {
    @Autowired
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    private DoctorAdminTeamDao doctorAdminTeamDao;
    public SignFamily findSignFamilyByCode(String code){
       return signFamilyDao.findByCodeAndType(code,2);
    public SignFamily findSignFamilyByCode(String code) {
        return signFamilyDao.findByCodeAndType(code, 2);
    }
    }
    public SignFamily findByPatientByType(String patient, int type) {
    public SignFamily findByPatientByType(String patient, int type) {
@ -665,7 +665,7 @@ public class FamilyContractService extends BaseService {
        sf.setDoctor(doctor);
        sf.setDoctor(doctor);
        sf.setDoctorName(doctorName);
        sf.setDoctorName(doctorName);
        sf.setDoctorHealth(doctorHealth);
        sf.setDoctorHealth(doctorHealth);
        sf.setExpensesType(expenses);
        sf.setExpensesType(StringUtils.isEmpty(expenses) ? "01" : expenses);
        sf.setFamilyCode(createSignCode(doctor, hospital));
        sf.setFamilyCode(createSignCode(doctor, hospital));
        sf.setDoctorHealthName(doctorHealthName);
        sf.setDoctorHealthName(doctorHealthName);
        sf.setEmerMobile(emerMobile);
        sf.setEmerMobile(emerMobile);
@ -981,7 +981,7 @@ public class FamilyContractService extends BaseService {
            // 更新签约日期
            // 更新签约日期
            sf.setBegin(DateUtil.getNowDateShort());
            sf.setBegin(DateUtil.getNowDateShort());
            sf.setSignType("1");//患者发起签约
            sf.setSignType("1");//患者发起签约
            sf.setExpensesType(expenses);//收费类别
            sf.setExpensesType(StringUtils.isEmpty(expenses) ? "01" : expenses);//收费类别
            sf.setEnd(DateUtil.strToDateShort(DateUtil.getNextYear(DateUtil.getNowDateShort(), 1)));
            sf.setEnd(DateUtil.strToDateShort(DateUtil.getNextYear(DateUtil.getNowDateShort(), 1)));
            //设置签约人  患者发起的签约 默认签约人是全科医生
            //设置签约人  患者发起的签约 默认签约人是全科医生
            sf.setSignDoctorCode(sf.getDoctor());
            sf.setSignDoctorCode(sf.getDoctor());
@ -1308,8 +1308,10 @@ public class FamilyContractService extends BaseService {
            pagesize = 10;
            pagesize = 10;
        }
        }
        // 排序
        // 排序
        Sort sort = new Sort(Direction.DESC, "over");
        sort.and(new Sort(Direction.DESC,"read"));
        Sort sort = new Sort(Direction.DESC, "czrq");
//        sort.and(new Sort(Direction.DESC,"read"));
//        sort.and(new Sort(Direction.DESC,"czrq"));
        // 分页信息
        // 分页信息
        PageRequest pageRequest = new PageRequest(0, pagesize, sort);
        PageRequest pageRequest = new PageRequest(0, pagesize, sort);
        // 设置查询条件
        // 设置查询条件
@ -1638,4 +1640,176 @@ public class FamilyContractService extends BaseService {
            return false;
            return false;
        }
        }
    }
    }
    public boolean updateSignStatus(String patientCard) {
        // 判断患者有没有家庭签约
        SignFamily sf = signFamilyDao.findByPatientStatus(patientCard, 0);
        if (sf != null) {
            sf.setStatus(-5);
        }
        return true;
    }
    public String produceSignTeamCode() {
        StringBuffer sf = new StringBuffer();
        StringBuffer sf1 = new StringBuffer();
        Long size = 0L;
        //找出家庭签约中团队code是空的
        List<SignFamily> signFamilys = signFamilyDao.findBySignTypeAndTeamCode();
        sf.append("家庭签约中团队code是空的数据数:" + signFamilys.size());
        for (SignFamily signFamily : signFamilys) {
            //得到签约中的全科医生的团队
            String doctorCode = signFamily.getDoctor();
            Long id = doctorAdminTeamDao.findIdByLeaderCode(doctorCode);
            if (id != null && id > 0) {
                size++;
                signFamily.setAdminTeamId(id);
            } else {
                sf1.append(",找不到医生所属的团队,医生code:" + doctorCode);
            }
        }
        sf.append(",填充团队的签约数据数:" + size);
        sf.append(sf1);
        return sf.toString();
    }
    /**
     * 分配健管师
     *
     * @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", "居民不存在家庭签约");
            return result;
        }
        if (doctor == null) {
            result.put("status", -2);
            result.put("msg", "医生不存在");
            return result;
        }
        // 健管师更新
        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", "数据已上传社保,不能修改补贴类型");
                return result;
            } else {
                signFamily.setExpensesType(expensesType);
            }
        }
        result.put("status", 1);
        result.put("msg", "更新成功");
        return result;
    }
}
}

+ 4 - 2
src/main/java/com/yihu/wlyy/service/app/talk/TalkGroupService.java

@ -36,7 +36,7 @@ public class TalkGroupService extends BaseService {
    DiscussionGroupDao discussionGroupDao;
    DiscussionGroupDao discussionGroupDao;
    @Autowired
    @Autowired
    // 讨论组成员DAO
    // 讨论组成员DAO
            DiscussionGroupMemberDao discussionGroupMemberDao;
    DiscussionGroupMemberDao discussionGroupMemberDao;
    @Autowired
    @Autowired
    JdbcTemplate jdbcTemplate;
    JdbcTemplate jdbcTemplate;
    @Autowired
    @Autowired
@ -343,7 +343,8 @@ public class TalkGroupService extends BaseService {
        String url = SystemConf.getInstance().getSystemProperties().getProperty("im_list_get")
        String url = SystemConf.getInstance().getSystemProperties().getProperty("im_list_get")
                + "statistic/getchatlist.im";
                + "statistic/getchatlist.im";
        String json = HttpUtil.sendGet(url, "uid=" + doctor);
        String json = HttpUtil.sendGet(url, "uid=" + doctor);
        if(!StringUtils.isEmpty(json)) {
        if(!StringUtils.isEmpty(json) && json.trim().startsWith("[") && json.trim().endsWith("]")) {
            System.out.println("one-to-one:" + json);
            result = new JSONArray(json);
            result = new JSONArray(json);
        }
        }
@ -374,6 +375,7 @@ public class TalkGroupService extends BaseService {
                    objRe.put("lastContent",obj.get("last_content") != null?new String(obj.getString("last_content").getBytes(),"utf-8"):"");
                    objRe.put("lastContent",obj.get("last_content") != null?new String(obj.getString("last_content").getBytes(),"utf-8"):"");
                    objRe.put("newMsgCount",obj.getInt("new_msg_count"));
                    objRe.put("newMsgCount",obj.getInt("new_msg_count"));
                    objRe.put("lastMsgTime",obj.get("timestamp") != null ? DateUtil.dateToStr(new Date(obj.getLong("timestamp")),DateUtil.YYYY_MM_DD_HH_MM):"");
                    objRe.put("lastMsgTime",obj.get("timestamp") != null ? DateUtil.dateToStr(new Date(obj.getLong("timestamp")),DateUtil.YYYY_MM_DD_HH_MM):"");
                    objRe.put("lastMsgTimeLong",obj.getLong("timestamp"));
                    resultArray.put(objRe);
                    resultArray.put(objRe);
                }
                }

+ 1 - 0
src/main/java/com/yihu/wlyy/service/app/team/DrHealthTeamService.java

@ -245,6 +245,7 @@ public class DrHealthTeamService extends BaseService {
    }
    }
    public List<Doctor> findJiatingTeamDoctors(String parientCode) {
    public List<Doctor> findJiatingTeamDoctors(String parientCode) {
		System.out.println("DrHealthTeamService findJiatingTeamDoctors"+parientCode);
        //查看当前的患者所在的家庭团队
        //查看当前的患者所在的家庭团队
        DoctorTeam doctorTeam = doctorTeamDao.findByParientCode(parientCode);
        DoctorTeam doctorTeam = doctorTeamDao.findByParientCode(parientCode);
        //查看家庭团队里面的医生
        //查看家庭团队里面的医生

+ 14 - 0
src/main/java/com/yihu/wlyy/service/common/account/DoctorService.java

@ -90,4 +90,18 @@ public class DoctorService extends TokenService {
			return doctorDao.famousDoctorList(sdf.format(new Date()), pageRequest);
			return doctorDao.famousDoctorList(sdf.format(new Date()), pageRequest);
		}
		}
	}
	}
	public Page<Doctor> getDoctorFamousDoctorList(String name, int page, int pagesize) {
		// 分页信息
		Pageable pageRequest = new PageRequest(page-1, pagesize);
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
		if (StringUtils.isNoneEmpty(name)) {
			name="%"+name+"%";
			return doctorDao.doctorFamousDoctorList(name, pageRequest);
		}else{
			return doctorDao.doctorFamousDoctorList(pageRequest);
		}
	}
}
}

+ 12 - 4
src/main/java/com/yihu/wlyy/util/IdCardUtil.java

@ -25,16 +25,24 @@ public class IdCardUtil {
        String sex = Constant.level_sex_3;
        String sex = Constant.level_sex_3;
        if (CardCode.length() == 18) {
        if (CardCode.length() == 18) {
            if (Integer.parseInt(CardCode.substring(16).substring(0, 1)) % 2 == 0) {// 判断性别
            if (Integer.parseInt(CardCode.substring(16).substring(0, 1)) % 2 == 0) {// 判断性别
                sex =  Constant.level_sex_2;
            } else {
                // modifid by lyr 2016-09-29
               // sex =  Constant.level_sex_2;
                sex =  Constant.level_sex_1;
                sex =  Constant.level_sex_1;
                // modifid by lyr 2016-09-29
            } else {
                // modifid by lyr 2016-09-29
               // sex =  Constant.level_sex_1;
                sex =  Constant.level_sex_2;
                // modifid by lyr 2016-09-29
            }
            }
        } else if (CardCode.length() == 15) {
        } else if (CardCode.length() == 15) {
            String usex = CardCode.substring(14, 15);// 用户的性别
            String usex = CardCode.substring(14, 15);// 用户的性别
            if (Integer.parseInt(usex) % 2 == 0) {
            if (Integer.parseInt(usex) % 2 == 0) {
                sex = Constant.level_sex_2;
            } else {
                // sex =  Constant.level_sex_2;
                sex =  Constant.level_sex_1;
                sex =  Constant.level_sex_1;
            } else {
                // sex =  Constant.level_sex_1;
                sex =  Constant.level_sex_2;
            }
            }
        }
        }
        return sex;
        return sex;

+ 140 - 0
src/main/java/com/yihu/wlyy/web/common/util/ManagerUtilController.java

@ -0,0 +1,140 @@
package com.yihu.wlyy.web.common.util;
import com.yihu.wlyy.job.QuartzHelper;
import com.yihu.wlyy.job.consult.FamousConsultTimesJob;
import com.yihu.wlyy.service.app.disease.PatientDiseaseService;
import com.yihu.wlyy.service.app.scheduling.DoctorWorkTimeService;
import com.yihu.wlyy.service.app.statistics.StatisticsService;
import com.yihu.wlyy.web.BaseController;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.hash.HashMapper;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
/**
 * Created by lyr on 2016/09/13.
 */
@RestController
@RequestMapping(value = "/manage_util")
@Api(description = "管理工具及后台任务控制")
public class ManagerUtilController extends BaseController {
    @Autowired
    PatientDiseaseService diseaseService;
    @Autowired
    StringRedisTemplate redisTemplate;
    @Autowired
    QuartzHelper quartzHelper;
    @Autowired
    DoctorWorkTimeService workTimeService;
    @Autowired
    StatisticsService statisticsService;
    /*********************************************患者疾病相关******************************************/
    /**
     * 更新到redis
     *
     * @return
     */
    @RequestMapping(value = "/disease/to_redis")
    public String updateToRedid() {
        try {
            diseaseService.updateToRedis();
            return write(200, "更新成功");
        } catch (Exception e) {
            return error(-1, "更新失败");
        }
    }
    /**
     * 更新到疾病表
     *
     * @return
     */
    @RequestMapping(value = "/disease/to_disease")
    public String updateToDisease() {
        try {
            diseaseService.updateToDisease();
            return write(200, "更新成功");
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "更新失败");
        }
    }
    /**
     * 查询患者redis疾病
     *
     * @param patient
     * @return
     */
    @RequestMapping(value = "/disease/patient")
    public String getDiseaseFromRedis(String patient) {
        try {
            return write(200, "查询成功", "data", redisTemplate.opsForValue().get("disease:" + patient));
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "查询失败");
        }
    }
    /***********************************************名医咨询相关****************************************/
    /**
     * 开始名医咨询剩余次数统计任务
     *
     * @return
     */
    @RequestMapping(value = "/famous_doctor/start_job")
    public String startConsultTimesJob() {
        try {
            if (!quartzHelper.isExistJob("famous-doctor-times")) {
                quartzHelper.addJob(FamousConsultTimesJob.class, "0 0 0 * * ?", "famous-doctor-times", new HashMap<String, Object>());
                return write(200, "启动成功");
            } else {
                return write(200, "任务已存在");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "启动失败");
        }
    }
    /**
     * 名医咨询剩余次数手动更新
     *
     * @return
     */
    @RequestMapping(value = "/famous_doctor/times_update")
    public String famousConsultTimeUpdate() {
        try {
            workTimeService.consultTimesRemain(new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
            return write(200, "更新成功");
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "更新失败");
        }
    }
    /*********************************************统计相关*******************************************/
    /**
     * 更新人口数据到redis
     *
     * @return
     */
    @RequestMapping(value = "/people_num_to_redis")
    public String peopleNumToRedis() {
        try {
            statisticsService.peopleNumToRedis();
            return write(200, "更新成功");
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "更新失败");
        }
    }
}

+ 182 - 0
src/main/java/com/yihu/wlyy/web/common/util/WlyySerivceController.java

@ -0,0 +1,182 @@
package com.yihu.wlyy.web.common.util;
import com.yihu.wlyy.util.HttpUtil;
import com.yihu.wlyy.util.SystemConf;
import com.yihu.wlyy.web.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
 * Created by lyr on 2016/9/29.
 */
@RestController
@RequestMapping(value = "/wlyy_service")
@Api(description = "卫计委签约接口调试")
public class WlyySerivceController extends BaseController{
    /**
     * 检查是否签约
     *
     * @param idcard
     * @return
     */
    @RequestMapping(value = "/third/sign/CheckSignFamily",method = RequestMethod.POST)
    @ApiOperation("检查是否签约")
    public String checkSignFamily(@RequestParam("idcard") String idcard){
        try{
            String checkUrl = SystemConf.getInstance().getSystemProperties().getProperty("sign_check_upload");
            String jsonString = HttpUtil.sendPost(checkUrl + "/third/sign/CheckSignFamily?idcard=" + idcard, "");
            if(StringUtils.isEmpty(jsonString)){
                return write(-1,"调用失败");
            }else{
                return write(200,"调用成功","data",jsonString);
            }
        }catch (Exception e){
            e.printStackTrace();
            return error(-1,"调用失败");
        }
    }
    /**
     * 上传签约数据
     *
     * @param code
     * @return
     */
    @RequestMapping(value = "/third/sign/UploadSignFamily",method = RequestMethod.POST)
    @ApiOperation("上传签约数据")
    public String uploadSignFamily(@RequestParam("code")String code){
        try{
            String checkUrl = SystemConf.getInstance().getSystemProperties().getProperty("sign_check_upload");
            String jsonString = HttpUtil.sendPost(checkUrl + "/third/sign/UploadSignFamily?code=" + code, "");
            if(StringUtils.isEmpty(jsonString)){
                return write(-1,"调用失败");
            }else{
                return write(200,"调用成功","data",jsonString);
            }
        }catch (Exception e){
            e.printStackTrace();
            return error(-1,"调用失败");
        }
    }
    /**
     * 初次采集签约接口
     *
     * @param start_time
     * @return
     */
    @RequestMapping(value = "/third/sign/LoadAllSignFamily",method = RequestMethod.POST)
    @ApiOperation("初次采集签约接口")
    public String loadAllSignFamily(@RequestParam("start_time")String start_time){
        try{
            String checkUrl = SystemConf.getInstance().getSystemProperties().getProperty("sign_check_upload");
            String jsonString = HttpUtil.sendPost(checkUrl + "/third/sign/LoadAllSignFamily?start_time=" + start_time, "");
            if(StringUtils.isEmpty(jsonString)){
                return write(-1,"调用失败");
            }else{
                return write(200,"调用成功","data",jsonString);
            }
        }catch (Exception e){
            e.printStackTrace();
            return error(-1,"调用失败");
        }
    }
    /**
     * 单条采集签约接口
     *
     * @param idcard
     * @return
     */
    @RequestMapping(value = "/third/sign/LoadSignFamily",method = RequestMethod.POST)
    @ApiOperation("单条采集签约接口")
    public String loadSingleSignFamily(@RequestParam("idcard")String idcard){
        try{
            String checkUrl = SystemConf.getInstance().getSystemProperties().getProperty("sign_check_upload");
            String jsonString = HttpUtil.sendPost(checkUrl + "/third/sign/LoadSignFamily?idcard=" + idcard, "");
            if(StringUtils.isEmpty(jsonString)){
                return write(-1,"调用失败");
            }else{
                return write(200,"调用成功","data",jsonString);
            }
        }catch (Exception e){
            e.printStackTrace();
            return error(-1,"调用失败");
        }
    }
    /**
     * 时间范围采集签约接口
     *
     * @param start_time
     * @param end_time
     * @return
     */
    @RequestMapping(value = "/third/sign/LoadSignFamilyBatch",method = RequestMethod.POST)
    @ApiOperation("时间范围采集签约接口")
    public String loadSignFamilyBatch(@RequestParam("start_time")String start_time,@RequestParam("end_time")String end_time){
        try{
            String checkUrl = SystemConf.getInstance().getSystemProperties().getProperty("sign_check_upload");
            String jsonString = HttpUtil.sendPost(checkUrl + "/third/sign/LoadSignFamilyBatch?start_time=" + start_time + "&end_time=" + end_time, "");
            if(StringUtils.isEmpty(jsonString)){
                return write(-1,"调用失败");
            }else{
                return write(200,"调用成功","data",jsonString);
            }
        }catch (Exception e){
            e.printStackTrace();
            return error(-1,"调用失败");
        }
    }
    /**
     * 补上传签约接口
     *
     * @return
     */
    @RequestMapping(value = "/third/sign/ReUploadSignFamily",method = RequestMethod.POST)
    public String reuploadSignFamily(){
        try{
            String checkUrl = SystemConf.getInstance().getSystemProperties().getProperty("sign_check_upload");
            String jsonString = HttpUtil.sendPost(checkUrl + "/third/sign/ReUploadSignFamily", "");
            if(StringUtils.isEmpty(jsonString)){
                return write(-1,"调用失败");
            }else{
                return write(200,"调用成功","data",jsonString);
            }
        }catch (Exception e){
            e.printStackTrace();
            return error(-1,"调用失败");
        }
    }
    /**
     * 补更新签约接口
     *
     * @return
     */
    @RequestMapping(value = "/third/sign/ReUpdateSignFamily",method = RequestMethod.POST)
    public String reupdateSignFamily(){
        try{
            String checkUrl = SystemConf.getInstance().getSystemProperties().getProperty("sign_check_upload");
            String jsonString = HttpUtil.sendPost(checkUrl + "/third/sign/ReUpdateSignFamily", "");
            if(StringUtils.isEmpty(jsonString)){
                return write(-1,"调用失败");
            }else{
                return write(200,"调用成功","data",jsonString);
            }
        }catch (Exception e){
            e.printStackTrace();
            return error(-1,"调用失败");
        }
    }
}

+ 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());
        }
    }
}

+ 6 - 4
src/main/java/com/yihu/wlyy/web/doctor/consult/DoctorConsultController.java

@ -124,15 +124,19 @@ public class DoctorConsultController extends WeixinBaseController {
			int pagesize) {
			int pagesize) {
		try {
		try {
			JSONArray array = new JSONArray();
			JSONArray array = new JSONArray();
			Page<Doctor>list = doctorService.famousDoctorList(name, page, pagesize);
			Page<Doctor> list = doctorService.getDoctorFamousDoctorList(name, page, pagesize);
			if (list != null) {
			if (list != null) {
				for (Doctor doctor : list) {
				for (Doctor doctor : list) {
					if (doctor == null) {
					if (doctor == null) {
						continue;
						continue;
					}
					}
					// 过滤掉自己
					if(doctor.getCode().equals(getUID())){
						continue;
					}
					// 判断名医是否在工作
					// 判断名医是否在工作
					JSONObject isWorking = doctorWorkTimeService.isFamousDoctorWorking(doctor.getCode());
					JSONObject isWorking = doctorWorkTimeService.isDoctorWorking(doctor.getCode());
					if(isWorking == null || !isWorking.getString("status").equals("1")){
					if(isWorking == null || !isWorking.getString("status").equals("1")){
						continue;
						continue;
@ -162,8 +166,6 @@ public class DoctorConsultController extends WeixinBaseController {
					json.put("introduce", doctor.getIntroduce());
					json.put("introduce", doctor.getIntroduce());
					// 专长
					// 专长
					json.put("expertise", doctor.getExpertise());
					json.put("expertise", doctor.getExpertise());
					// 剩余咨询次数
					json.put("num", doctorWorkTimeService.getDoctorConsultTimesRemain(doctor.getCode()));
					array.put(json);
					array.put(json);
				}
				}
			}
			}

+ 53 - 14
src/main/java/com/yihu/wlyy/web/doctor/sign/DoctorFamilyContractController.java

@ -5,6 +5,7 @@ import java.util.Map;
import com.yihu.wlyy.entity.message.Message;
import com.yihu.wlyy.entity.message.Message;
import com.yihu.wlyy.service.app.account.PatientInfoService;
import com.yihu.wlyy.service.app.account.PatientInfoService;
import com.yihu.wlyy.service.app.message.MessageService;
import com.yihu.wlyy.util.*;
import com.yihu.wlyy.util.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.Api;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.StringUtils;
@ -46,6 +47,8 @@ public class DoctorFamilyContractController extends WeixinBaseController {
    PatientInfoService patientInfoService;
    PatientInfoService patientInfoService;
    @Autowired
    @Autowired
    StringRedisTemplate redisTemplate;
    StringRedisTemplate redisTemplate;
    @Autowired
    MessageService messageService;
    /**
    /**
     * 医生签约患者列表查询接口
     * 医生签约患者列表查询接口
@ -284,11 +287,13 @@ public class DoctorFamilyContractController extends WeixinBaseController {
                        JSONObject jsonData = checkJson.getJSONObject("data");
                        JSONObject jsonData = checkJson.getJSONObject("data");
                        if (jsonData.getString("status").equals("1")) {
                        if (jsonData.getString("status").equals("1")) {
                            return error(-1, "此身份证号已签约");
                            messageService.readHealth(msgid);
                            familyContractService.updateSignStatus(patientIDcard);
                            return error(-1, "该居民已在基卫平台签约,无需重复在移动端申请");
                        }
                        }
                    }
                    }
                }
                }
            }catch (Exception e){
            } catch (Exception e) {
                e.printStackTrace();
                e.printStackTrace();
            }
            }
@ -391,7 +396,7 @@ public class DoctorFamilyContractController extends WeixinBaseController {
                    // 消息内容
                    // 消息内容
                    json.put("message", msg.getContent());
                    json.put("message", msg.getContent());
                    // 签约code
                    // 签约code
                    json.put("signCode", StringUtils.isEmpty(msg.getData())?"":msg.getData());
                    json.put("signCode", StringUtils.isEmpty(msg.getData()) ? "" : msg.getData());
                    // 消息类型
                    // 消息类型
                    json.put("type", msg.getType());
                    json.put("type", msg.getType());
                    // 发送人标识
                    // 发送人标识
@ -490,12 +495,12 @@ public class DoctorFamilyContractController extends WeixinBaseController {
                        if (jsonData.getString("status").equals("1")) {
                        if (jsonData.getString("status").equals("1")) {
                            result.put("signStatus", "2");
                            result.put("signStatus", "2");
                            result.put("msg", "病人已申请过家庭签约!");
                            result.put("msg", "该居民已在基卫平台签约,无需重复在移动端申请!");
                            return write(200, "查询成功!", "data", result);
                            return write(200, "查询成功!", "data", result);
                        }
                        }
                    }
                    }
                }
                }
            }catch (Exception e){
            } catch (Exception e) {
                e.printStackTrace();
                e.printStackTrace();
            }
            }
@ -658,21 +663,55 @@ public class DoctorFamilyContractController extends WeixinBaseController {
     */
     */
    @RequestMapping(value = "/family_sign")
    @RequestMapping(value = "/family_sign")
    @ResponseBody
    @ResponseBody
    public String getSignFamily(String code){
        try{
            if(StringUtils.isEmpty(code)){
                return error(-1,"参数不能为空");
    public String getSignFamily(String code) {
        try {
            if (StringUtils.isEmpty(code)) {
                return error(-1, "参数不能为空");
            }
            }
            SignFamily signFamily = familyContractService.findSignFamilyByCode(code);
            SignFamily signFamily = familyContractService.findSignFamilyByCode(code);
            if(signFamily == null){
                return error(-1,"签约数据不存在");
            if (signFamily == null) {
                return error(-1, "签约数据不存在");
            }
            }
            return write(200,"查询成功","data",new JSONObject(signFamily));
        }catch (Exception e){
            return write(200, "查询成功", "data", new JSONObject(signFamily));
        } catch (Exception e) {
            e.printStackTrace();
            e.printStackTrace();
            return error(-1,"查询失败");
            return error(-1, "查询失败");
        }
    }
    /**
     * 签约信息变更
     *
     * @param patient      患者code
     * @param healthDoctor 健康管理师code
     * @param expensesType 补贴类型
     * @return
     */
    @RequestMapping(value = "/sign_info_update")
    @ResponseBody
    public String updateSignInfo(String patient, @RequestParam(required = false) String healthDoctor
            , @RequestParam(required = false) String expensesType) {
        try {
            if (StringUtils.isEmpty(patient)) {
                return error(-1, "患者不能为空");
            }
            if (StringUtils.isEmpty(healthDoctor) && StringUtils.isEmpty(expensesType)) {
                return error(-1, "参数healthDoctor和expensesType不能同时为空");
            }
            JSONObject result = familyContractService.updateSignInfo(patient, healthDoctor, expensesType);
            if (result.getInt("status") != 1) {
                return error(-1, result.getString("msg"));
            }
            return write(200, "更新成功");
        } catch (Exception e) {
            e.printStackTrace();
            return error(-1, "更新失败");
        }
        }
    }
    }
}
}

+ 4 - 0
src/main/java/com/yihu/wlyy/web/doctor/team/SignTeamController.java

@ -102,6 +102,10 @@ public class SignTeamController extends BaseController {
                json.put("introduce", temp.getIntroduce());
                json.put("introduce", temp.getIntroduce());
                // 二维码地址
                // 二维码地址
                json.put("qrcode", temp.getQrcode());
                json.put("qrcode", temp.getQrcode());
                // 手机号
                json.put("mobile", temp.getMobile());
                // 级别
                json.put("level", temp.getLevel());
                return write(200, "医生信息查询成功!", "data", json);
                return write(200, "医生信息查询成功!", "data", json);
            } else {
            } else {
                return error(-1, "医生信息查询失败!");
                return error(-1, "医生信息查询失败!");

+ 5 - 3
src/main/resources/system.properties

@ -78,7 +78,10 @@ im_list_get=http://172.19.103.76:3000/
##是否签约检查和签约数据上传
##是否签约检查和签约数据上传
#sign_check_upload=http://172.19.103.85:8011/wlyy_service
#sign_check_upload=http://172.19.103.85:8011/wlyy_service
##im一对一列表获取
##im一对一列表获取
#im_list_get=http://172.13.103.88:3000/
#im_list_get=http://172.19.103.88:3000/
#----------------正式环境卫计委签约调用接口地址-------------------#
#sign_check_upload=http://59.61.92.90:8072/wlyy_service
im_group_server=http://120.41.252.108:3031/group/sendgroupmsg.im
im_group_server=http://120.41.252.108:3031/group/sendgroupmsg.im
msg_push_server=http://120.41.252.108:3031/push/sendmsg.im
msg_push_server=http://120.41.252.108:3031/push/sendmsg.im
@ -173,5 +176,4 @@ guahao_url = http://www.xmsmjk.com/UrpNetService/ReservationNet.asmx
guahao_namespace = http://www.zysoft.com.cn/
guahao_namespace = http://www.zysoft.com.cn/
# 基卫对接服务地址
# 基卫对接服务地址
jw_url = http://localhost:8011/
jw_url = http://localhost:8011/