Browse Source

ETLbug修改

esb 8 years ago
parent
commit
45132a36ae

+ 1 - 1
src/main/java/com/yihu/wlyy/entity/patient/SignFamily.java

@ -49,7 +49,7 @@ public class SignFamily extends IdEntity {
	private String signType;//1 用户自己申请  2医生手工带签  3.医生发起邀请
	private String signType;//1 用户自己申请  2医生手工带签  3.医生发起邀请
	private String familyCode;//签约code
	private String familyCode;//签约code
	private Double expenses;//签约费用
	private Double expenses;//签约费用
	private String expensesStatus;//扣费状态
	private String expensesStatus;//扣费状态【0未扣费 1已扣费 2已退费】
	private String signSource;// 签约来源【1 社区签约 2 移动签约】
	private String signSource;// 签约来源【1 社区签约 2 移动签约】
	private String signDoctorCode;//簽約人code
	private String signDoctorCode;//簽約人code
	private String signDoctorName;//簽約人銘
	private String signDoctorName;//簽約人銘

+ 231 - 0
src/main/java/com/yihu/wlyy/job/AllSignExpenseStatusJob.java

@ -0,0 +1,231 @@
package com.yihu.wlyy.job;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.doctor.team.admin.AdminTeam;
import com.yihu.wlyy.entity.job.QuartzJobLog;
import com.yihu.wlyy.entity.organization.Hospital;
import com.yihu.wlyy.entity.patient.SignFamily;
import com.yihu.wlyy.job.elt.base.ETLModel;
import com.yihu.wlyy.job.elt.role.Level2Role;
import com.yihu.wlyy.job.elt.role.Level1Role;
import com.yihu.wlyy.job.elt.storage.DBStorage;
import com.yihu.wlyy.repository.address.TownDao;
import com.yihu.wlyy.repository.doctor.DoctorAdminTeamDao;
import com.yihu.wlyy.repository.job.QuartzJobLogDao;
import com.yihu.wlyy.repository.organization.HospitalDao;
import com.yihu.wlyy.repository.patient.SignFamilyDao;
import com.yihu.wlyy.web.quota.WlyyJobConfigVO;
import com.yihu.wlyy.web.quota.WlyyQuotaVO;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
import java.text.SimpleDateFormat;
import java.util.*;
/**
 * Created by Administrator on 2016.10.11.
 * 签约费用统计 到达量
 */
@Component
public class AllSignExpenseStatusJob implements Job{
    private WlyyQuotaVO wlyyQuota;//指标对象
    private WlyyJobConfigVO wlyyJobConfig;//配置对象
    @Autowired
    private QuartzJobLogDao quartzJobLogDao;//执行日志Dao
    @Autowired
    private SignFamilyDao signFamilyDao;
    @Autowired
    private HospitalDao hospitalDao;
    @Autowired
    private TownDao townDao;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    @Autowired
    private Level1Role levelRole;
    @Autowired
    private Level2Role level2Role;
    @Autowired
    private DBStorage dbStorage;
    String date; //起始时间
    public void execute(JobExecutionContext context)
            throws JobExecutionException {
        SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
        //初始化参数
        JobDataMap map = context.getJobDetail().getJobDataMap();
        wlyyQuota = (WlyyQuotaVO) map.get("quota");
        wlyyJobConfig = (WlyyJobConfigVO) map.get("jobConfig");
        date = StringUtils.isEmpty(map.get("yesterday")) ? SignJob.getDayString(-1) : map.get("yesterday").toString();
        //计算指标
        computequota();
    }
    /**
     * 计算指标
     */
    @Transactional
    private void computequota() {
        jdbcTemplate.execute("delete from wlyy_quota_result where quota_date='" + date + "' and quato_code='" + 13 + "'");
        //新建任务日志对象
        QuartzJobLog quartzJobLog = new QuartzJobLog();
        quartzJobLog.setJobStartTime(new Date());
        quartzJobLog.setJobId(wlyyJobConfig.getId());
        quartzJobLog.setJobName(wlyyJobConfig.getJobName());
        //查找出系统全部的全科医生
        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();
        Map<String, Hospital> hospitalsMap = new HashMap<String, Hospital>();
        for (Hospital hospital : hospitals) {
            hospitalsMap.put(hospital.getCode(), hospital);
        }
        //查找出厦门市全部的区
        List<Town> towns = townDao.findByCityCode(Constant.city);
        Map<String, Town> townsMap = new HashMap<String, Town>();
        for (Town town : towns) {
            townsMap.put(town.getCode(), town);
        }
        //找出今天的已改簽信息
        String dateTemp = date + " 17:30:00 ";
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterday(dateTemp);
        Long cityCount = new Long(0L); //统计到市的数目
        Long townCount = new Long(0L); //统计到所有区的数目
        Long orgCount = new Long(0L);//统计到所有机构的数目
        Long adminCount = new Long(0L);//统计到所有团队的数目
        Long errorCount = new Long(0L);//脏数据
        Boolean isAll = true;//是否统计失败
        StringBuffer errorContent = new StringBuffer();
        //统计有已改簽的
        List<ETLModel> etlModels = new ArrayList<ETLModel>();
        //数据过滤清洗出脏数据  -----------start
        for (SignFamily signFamily : signFamilys) {
            ETLModel etlModel = new ETLModel();
            etlModel.setLevel2Key(signFamily.getExpensesStatus());//设置二级维度的Key
            String orgCode = signFamily.getHospital();
            if (StringUtils.isEmpty(orgCode)) {
                errorContent.append("签约code:" + signFamily.getCode() + ",签约表中(wlyy_sign_family)中的hospital数据为空");
                isAll = false;
                errorCount++;
                continue;
            }
            String orgCodeTemp = "";
            if (!"00".equals(orgCode.substring(orgCode.length() - 2, orgCode.length()))) {
                //站
                orgCodeTemp = orgCode.substring(0, orgCode.length() - 2) + "00";
            } else {
                //社区
                orgCodeTemp = orgCode;
            }
            //判断社区有没有值
            Hospital hospital = hospitalsMap.get(orgCodeTemp);
            if (hospital == null) {
                errorContent.append("签约code:" + signFamily.getCode() + ",签约表中(wlyy_sign_family)中的hospital数据不存在");
                isAll = false;
                errorCount++;
                continue;
            }
            Long adminId = signFamily.getAdminTeamId();
            if (adminId == null || adminId <= 0) {
                errorContent.append("签约code:" + signFamily.getCode() + ",签约表中(wlyy_sign_family)中的Admin_Team_Id数据为空");
                isAll = false;
                errorCount++;
                continue;
            }
            AdminTeam adminTeam = adminTeamMap.get(signFamily.getAdminTeamId() + "");
            if (adminTeam == null) {
                errorContent.append("签约code:" + signFamily.getCode() + ",签约表中(wlyy_sign_family)中的Admin_Team_Id数据不存在");
                isAll = false;
                errorCount++;
                continue;
            }
            String idCard = signFamily.getIdcard();
            if (idCard == null || (idCard.length() != 18 && idCard.length() != 15)) {
                errorContent.append("签约code:" + signFamily.getCode() + ",签约表中(wlyy_sign_family)中的idCard数据异常");
                isAll = false;
                errorCount++;
                continue;
            }
            String town = hospital.getTown();
            if (StringUtils.isEmpty(town)) {
                errorContent.append("签约code:" + signFamily.getCode() + ",机构表的中的town为空");
                isAll = false;
                errorCount++;
                continue;
            }
            Town townObj = townsMap.get(town);
            if (townObj == null) {
                errorContent.append("签约code:" + signFamily.getCode() + ",机构表的中的town不存在");
                isAll = false;
                errorCount++;
                continue;
            }
            etlModel.setAdminTeam(adminTeam.getId() + "");
            etlModel.setHospital(orgCodeTemp);
            etlModel.setTown(hospital.getTown());
            etlModel.setCity(Constant.city);
            etlModel.setIdcard(signFamily.getIdcard());
            etlModels.add(etlModel);
            //统计数目+1
            cityCount++;
            townCount++;
            orgCount++;
            adminCount++;
        }
        //数据过滤清洗出脏数据  -----------end
        try {
            //统计数据
            List<Map<String, List<ETLModel>>> returnDatas = levelRole.elt(etlModels);
            List<Map<String, Map<String, List<ETLModel>>>>  level2Data= level2Role.elt(returnDatas);
            //保存数据
            dbStorage.saveByLevel2(level2Data,date,wlyyQuota,2,4,0);
        } catch (Exception e) {
            e.printStackTrace();
            errorContent.append("统计失败:" + e.getMessage());
        }
        //保存日志
        quartzJobLog.setJobEndTime(new Date());
        quartzJobLog.setJobContent(saveContent(signFamilys, adminCount, orgCount, townCount, cityCount, isAll, errorContent, errorCount));
        quartzJobLog.setJobType(isAll ? "1" : "0");
        quartzJobLogDao.save(quartzJobLog);
    }
    private String saveContent(List<SignFamily> signFamilys, Long qkCount, Long orgCount, Long townCount, Long cityCount, boolean isAll, StringBuffer errorContent, Long errorCount) {
        StringBuffer string = new StringBuffer("统计" + date + " 的簽約数据完成 ,数据库查询到簽約数据:" + signFamilys.size());
        string.append(",过滤的脏数据数目:" + errorCount);
        string.append(",统计到市的数据总数:" + cityCount);
        string.append(",统计到区的数据总数:" + townCount);
        string.append(",统计到机构的数据总数:" + orgCount);
        string.append(",统计到团队的数据总数:" + qkCount);
        string.append(",是否统计成功:" + isAll);
        if (!isAll) {
            string.append(",失败原因:" + errorContent);
        }
        return string.toString();
    }
    public String getYesterday() {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DATE, -1);
        String yesterday = new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
        return yesterday;
    }
}

+ 4 - 3
src/main/java/com/yihu/wlyy/job/AllSignJob.java

@ -6,7 +6,7 @@ import com.yihu.wlyy.entity.job.QuartzJobLog;
import com.yihu.wlyy.entity.organization.Hospital;
import com.yihu.wlyy.entity.organization.Hospital;
import com.yihu.wlyy.entity.patient.SignFamily;
import com.yihu.wlyy.entity.patient.SignFamily;
import com.yihu.wlyy.job.elt.base.ETLModel;
import com.yihu.wlyy.job.elt.base.ETLModel;
import com.yihu.wlyy.job.elt.role.LevelRole;
import com.yihu.wlyy.job.elt.role.Level1Role;
import com.yihu.wlyy.job.elt.storage.DBStorage;
import com.yihu.wlyy.job.elt.storage.DBStorage;
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.DoctorAdminTeamDao;
@ -31,6 +31,7 @@ import java.util.*;
/**
/**
 * Created by Administrator on 2016.10.10.
 * Created by Administrator on 2016.10.10.
 * 每天的签约到达量统计
 */
 */
@Component
@Component
public class AllSignJob implements Job {
public class AllSignJob implements Job {
@ -49,7 +50,7 @@ public class AllSignJob implements Job {
    @Autowired
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    private DoctorAdminTeamDao doctorAdminTeamDao;
    @Autowired
    @Autowired
    private LevelRole levelRole;
    private Level1Role levelRole;
    @Autowired
    @Autowired
    private DBStorage dbStorage;
    private DBStorage dbStorage;
@ -100,7 +101,7 @@ public class AllSignJob implements Job {
        }
        }
        //找出今天的已改簽信息
        //找出今天的已改簽信息
        String dateTemp=date+" 17:30:00 ";
        String dateTemp=date+" 17:30:00 ";
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterday(dateTemp);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterdayExpensesStatus(dateTemp);
        Long cityCount = new Long(0L); //统计到市的数目
        Long cityCount = new Long(0L); //统计到市的数目
        Long townCount = new Long(0L); //统计到所有区的数目
        Long townCount = new Long(0L); //统计到所有区的数目

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

@ -6,7 +6,7 @@ import com.yihu.wlyy.entity.address.Town;
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.patient.SignFamily;
import com.yihu.wlyy.job.elt.base.ETLModel;
import com.yihu.wlyy.job.elt.base.ETLModel;
import com.yihu.wlyy.job.elt.role.LevelRole;
import com.yihu.wlyy.job.elt.role.Level1Role;
import com.yihu.wlyy.job.elt.storage.DBStorage;
import com.yihu.wlyy.job.elt.storage.DBStorage;
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.DoctorAdminTeamDao;
@ -49,7 +49,7 @@ public class ChangeSignJob implements Job {
    @Autowired
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    private DoctorAdminTeamDao doctorAdminTeamDao;
    @Autowired
    @Autowired
    private LevelRole levelRole;
    private Level1Role levelRole;
    @Autowired
    @Autowired
    private DBStorage dbStorage;
    private DBStorage dbStorage;
@ -101,7 +101,7 @@ public class ChangeSignJob implements Job {
            townsMap.put(town.getCode(), town);
            townsMap.put(town.getCode(), town);
        }
        }
        //找出今天的已改簽信息
        //找出今天的已改簽信息
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingChaangeSignYesterday(yesterday,now);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingChaangeSignYesterdayExpensesStatus(yesterday,now);
        Long cityCount = new Long(0L); //统计到市的数目
        Long cityCount = new Long(0L); //统计到市的数目
        Long townCount = new Long(0L); //统计到所有区的数目
        Long townCount = new Long(0L); //统计到所有区的数目

+ 35 - 14
src/main/java/com/yihu/wlyy/job/Constant.java

@ -15,20 +15,6 @@ public class Constant {
    public static String level_sex_2_name="男";
    public static String level_sex_2_name="男";
    public static String level_sex_3_name="未知";
    public static String level_sex_3_name="未知";
    public static String getLevelSexName(String key){
        switch (key){
            case "1":{
                return level_sex_1_name;
            }
            case "2":{
                return level_sex_2_name;
            }
            case "3":{
                return level_sex_3_name;
            }
        }
        return "";
    }
    //二级维度的年龄
    //二级维度的年龄
    public static String level_age_1="1";
    public static String level_age_1="1";
    public static String level_age_2="2";
    public static String level_age_2="2";
@ -58,6 +44,13 @@ public class Constant {
    public static String level_group_5_name="糖尿病";
    public static String level_group_5_name="糖尿病";
    public static String level_group_6_name="糖尿病和高血压";
    public static String level_group_6_name="糖尿病和高血压";
    //二级维度签约扣费
    public static String level_expense_0="0";
    public static String level_expense_1="1";
    public static String level_expense_2="2";
    public static String level_expense_0_name="未扣费";
    public static String level_expense_1_name="已扣费";
    public static String level_expense_2_name="已退费";
    //三级维度的疾病
    //三级维度的疾病
    public static String level_disease_1="1";
    public static String level_disease_1="1";
    public static String level_disease_2="2";
    public static String level_disease_2="2";
@ -68,6 +61,34 @@ 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 getLevelExpenseName(String key){
        switch (key){
            case "1":{
                return level_expense_1_name;
            }
            case "2":{
                return level_expense_2_name;
            }
            case "0":{
                return level_expense_0_name;
            }
        }
        return "";
    }
    public static String getLevelSexName(String key){
        switch (key){
            case "1":{
                return level_sex_1_name;
            }
            case "2":{
                return level_sex_2_name;
            }
            case "3":{
                return level_sex_3_name;
            }
        }
        return "";
    }
    public static String getLevelGroupName(String key){
    public static String getLevelGroupName(String key){
        switch (key){
        switch (key){
            case "1":{
            case "1":{

+ 2 - 8
src/main/java/com/yihu/wlyy/job/ConsultJob.java

@ -4,21 +4,15 @@ 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.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.job.elt.base.ETLModel;
import com.yihu.wlyy.job.elt.base.ETLModel;
import com.yihu.wlyy.job.elt.role.LevelRole;
import com.yihu.wlyy.job.elt.role.Level1Role;
import com.yihu.wlyy.job.elt.storage.DBStorage;
import com.yihu.wlyy.job.elt.storage.DBStorage;
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.DoctorAdminTeamDao;
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.SignFamilyDao;
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;
import org.quartz.Job;
import org.quartz.Job;
@ -56,7 +50,7 @@ public class ConsultJob implements Job {
    @Autowired
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    private DoctorAdminTeamDao doctorAdminTeamDao;
    @Autowired
    @Autowired
    private LevelRole levelRole;
    private Level1Role levelRole;
    @Autowired
    @Autowired
    private DBStorage dbStorage;
    private DBStorage dbStorage;

+ 10 - 12
src/main/java/com/yihu/wlyy/job/CurrentDayAllQuotaJob.java

@ -4,18 +4,16 @@ 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.team.sign.DoctorPatientGroupInfo;
import com.yihu.wlyy.entity.doctor.team.sign.DoctorPatientGroupInfo;
import com.yihu.wlyy.entity.job.QuartzJobLog;
import com.yihu.wlyy.entity.job.QuartzJobLog;
import com.yihu.wlyy.entity.patient.Patient;
import com.yihu.wlyy.entity.patient.Patient;
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.patient.SignFamily;
import com.yihu.wlyy.job.elt.base.ETLModel;
import com.yihu.wlyy.job.elt.base.ETLModel;
import com.yihu.wlyy.job.elt.role.LevelRole;
import com.yihu.wlyy.job.elt.role.Level1Role;
import com.yihu.wlyy.job.elt.role.PatientAgeRole;
import com.yihu.wlyy.job.elt.role.PatientAgeRole;
import com.yihu.wlyy.job.elt.role.PatientGroupRole;
import com.yihu.wlyy.job.elt.role.PatientGroupRole;
import com.yihu.wlyy.job.elt.role.PatientSexRole;
import com.yihu.wlyy.job.elt.role.PatientSexRole;
import com.yihu.wlyy.job.elt.storage.DBStorage;
import com.yihu.wlyy.job.elt.storage.RedisStorage;
import com.yihu.wlyy.job.elt.storage.RedisStorage;
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;
@ -74,7 +72,7 @@ public class CurrentDayAllQuotaJob implements Job {
    @Autowired
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    private DoctorAdminTeamDao doctorAdminTeamDao;
    @Autowired
    @Autowired
    private LevelRole levelRole;
    private Level1Role levelRole;
    @Autowired
    @Autowired
    private PatientAgeRole patientAgeRole;
    private PatientAgeRole patientAgeRole;
    @Autowired
    @Autowired
@ -176,7 +174,7 @@ public class CurrentDayAllQuotaJob implements Job {
            townsMap.put(town.getCode(), town);
            townsMap.put(town.getCode(), town);
        }
        }
        //找出今天的签约信息
        //找出今天的签约信息
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterday(now, tomorrow);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterdayExpensesStatus(now, tomorrow);
        //数组里面第一个是健康人群 第二个是慢病人群 第三个是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>();
@ -432,7 +430,7 @@ public class CurrentDayAllQuotaJob implements Job {
    private void computequota_1() {
    private void computequota_1() {
        StringBuffer errorContent=new StringBuffer();
        StringBuffer errorContent=new StringBuffer();
        //找出今天的签约信息 yesterday,now
        //找出今天的签约信息 yesterday,now
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterday(now, tomorrow);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterdayExpensesStatus(now, tomorrow);
        Long cityCount = new Long(0L); //统计到市的数目
        Long cityCount = new Long(0L); //统计到市的数目
        Long townCount = new Long(0L); //统计到所有区的数目
        Long townCount = new Long(0L); //统计到所有区的数目
        Long orgCount =new Long(0L);//统计到所有机构的数目
        Long orgCount =new Long(0L);//统计到所有机构的数目
@ -534,7 +532,7 @@ public class CurrentDayAllQuotaJob implements Job {
        StringBuffer errorContent=new StringBuffer();
        StringBuffer errorContent=new StringBuffer();
        String quotaId="2";
        String quotaId="2";
        //找出今天的解约信息
        //找出今天的解约信息
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingUnSignYesterday(now,tomorrow);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterdayExpensesStatus(now,tomorrow);
        Long cityCount = new Long(0L); //统计到市的数目
        Long cityCount = new Long(0L); //统计到市的数目
        Long townCount = new Long(0L); //统计到所有区的数目
        Long townCount = new Long(0L); //统计到所有区的数目
@ -929,7 +927,7 @@ public class CurrentDayAllQuotaJob implements Job {
        StringBuffer errorContent=new StringBuffer();
        StringBuffer errorContent=new StringBuffer();
        String quotaId="6";
        String quotaId="6";
        //找出今天的签约信息
        //找出今天的签约信息
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterday(now, tomorrow);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterdayExpensesStatus(now, tomorrow);
        Long cityCount = new Long(0L); //统计到市的数目
        Long cityCount = new Long(0L); //统计到市的数目
        Long townCount = new Long(0L); //统计到所有区的数目
        Long townCount = new Long(0L); //统计到所有区的数目
@ -1033,7 +1031,7 @@ public class CurrentDayAllQuotaJob implements Job {
        String quotaId="7";
        String quotaId="7";
        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.findByJiatingSignYesterdayExpensesStatus(now, tomorrow);
        errorContent.append("截止时间:"+now+"-"+DateUtil.dateToStrLong(new Date())+",数据库查询的签约数是:"+signFamilys.size()+",错误:");
        errorContent.append("截止时间:"+now+"-"+DateUtil.dateToStrLong(new Date())+",数据库查询的签约数是:"+signFamilys.size()+",错误:");
        //查找出系统全部的患者
        //查找出系统全部的患者
        List<Patient> patients = patientDao.findAllSignPatient();
        List<Patient> patients = patientDao.findAllSignPatient();
@ -1459,7 +1457,7 @@ public class CurrentDayAllQuotaJob implements Job {
        StringBuffer errorContent=new StringBuffer();
        StringBuffer errorContent=new StringBuffer();
        String quotaId="8";
        String quotaId="8";
        //找出今天的签约信息
        //找出今天的签约信息
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterday(now, tomorrow);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterdayExpensesStatus(now, tomorrow);
        Long cityCount = new Long(0L); //统计到市的数目
        Long cityCount = new Long(0L); //统计到市的数目
        Long townCount = new Long(0L); //统计到所有区的数目
        Long townCount = new Long(0L); //统计到所有区的数目
        Long orgCount =new Long(0L);//统计到所有机构的数目
        Long orgCount =new Long(0L);//统计到所有机构的数目
@ -1560,7 +1558,7 @@ public class CurrentDayAllQuotaJob implements Job {
        StringBuffer errorContent=new StringBuffer();
        StringBuffer errorContent=new StringBuffer();
        String quotaId="9";
        String quotaId="9";
        //找出今天的待签约信息
        //找出今天的待签约信息
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingWaitSignYesterday(now,tomorrow);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingWaitSignYesterdayExpensesStatus(now,tomorrow);
        Long cityCount = new Long(0L); //统计到市的数目
        Long cityCount = new Long(0L); //统计到市的数目
        Long townCount = new Long(0L); //统计到所有区的数目
        Long townCount = new Long(0L); //统计到所有区的数目
@ -1680,7 +1678,7 @@ public class CurrentDayAllQuotaJob implements Job {
            townsMap.put(town.getCode(), town);
            townsMap.put(town.getCode(), town);
        }
        }
        //找出今天的已改簽信息
        //找出今天的已改簽信息
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingChaangeSignYesterday(now,tomorrow);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingChaangeSignYesterdayExpensesStatus(now,tomorrow);
        Long cityCount = new Long(0L); //统计到市的数目
        Long cityCount = new Long(0L); //统计到市的数目
        Long townCount = new Long(0L); //统计到所有区的数目
        Long townCount = new Long(0L); //统计到所有区的数目

+ 2 - 6
src/main/java/com/yihu/wlyy/job/FollowUpJob.java

@ -3,17 +3,14 @@ package com.yihu.wlyy.job;
import com.yihu.wlyy.entity.doctor.team.admin.AdminTeam;
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.job.QuartzJobLog;
import com.yihu.wlyy.entity.job.QuartzJobLog;
import com.yihu.wlyy.entity.patient.PatientHealthGuidance;
import com.yihu.wlyy.entity.patient.SignFamily;
import com.yihu.wlyy.entity.patient.SignFamily;
import com.yihu.wlyy.entity.statistics.WlyyQuotaResult;
import com.yihu.wlyy.entity.statistics.WlyyQuotaResult;
import com.yihu.wlyy.job.elt.base.ETLModel;
import com.yihu.wlyy.job.elt.base.ETLModel;
import com.yihu.wlyy.job.elt.role.LevelRole;
import com.yihu.wlyy.job.elt.role.Level1Role;
import com.yihu.wlyy.job.elt.storage.DBStorage;
import com.yihu.wlyy.job.elt.storage.DBStorage;
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.DoctorAdminTeamDao;
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.SignFamilyDao;
import com.yihu.wlyy.repository.patient.SignFamilyDao;
@ -33,7 +30,6 @@ import org.springframework.web.context.support.SpringBeanAutowiringSupport;
import java.io.IOException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.*;
/**
/**
@ -60,7 +56,7 @@ public class FollowUpJob implements Job {
    @Autowired
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    private DoctorAdminTeamDao doctorAdminTeamDao;
    @Autowired
    @Autowired
    private LevelRole levelRole;
    private Level1Role levelRole;
    @Autowired
    @Autowired
    private DBStorage dbStorage;
    private DBStorage dbStorage;
    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();//随访数据源

+ 2 - 5
src/main/java/com/yihu/wlyy/job/HealthGuideJob.java

@ -3,17 +3,14 @@ package com.yihu.wlyy.job;
import com.yihu.wlyy.entity.doctor.team.admin.AdminTeam;
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.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.patient.SignFamily;
import com.yihu.wlyy.entity.statistics.WlyyQuotaResult;
import com.yihu.wlyy.job.elt.base.ETLModel;
import com.yihu.wlyy.job.elt.base.ETLModel;
import com.yihu.wlyy.job.elt.role.LevelRole;
import com.yihu.wlyy.job.elt.role.Level1Role;
import com.yihu.wlyy.job.elt.storage.DBStorage;
import com.yihu.wlyy.job.elt.storage.DBStorage;
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.DoctorAdminTeamDao;
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;
@ -58,7 +55,7 @@ public class HealthGuideJob implements Job {
    @Autowired
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    private DoctorAdminTeamDao doctorAdminTeamDao;
    @Autowired
    @Autowired
    private LevelRole levelRole;
    private Level1Role levelRole;
    @Autowired
    @Autowired
    private DBStorage dbStorage;
    private DBStorage dbStorage;
    String yesterday;
    String yesterday;

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

@ -102,7 +102,7 @@ public class SignAgeGroupDiseaseJob implements Job {
                townsMap.put(town.getCode(), town);
                townsMap.put(town.getCode(), town);
            }
            }
            //找出今天的签约信息
            //找出今天的签约信息
            List<SignFamily> signFamilies = signFamilyDao.findByJiatingSignYesterday(yesterday, now);
            List<SignFamily> signFamilies = signFamilyDao.findByJiatingSignYesterdayExpensesStatus(yesterday, now);
            //数组里面第一个是健康人群 第二个是慢病人群 第三个是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>();

+ 6 - 17
src/main/java/com/yihu/wlyy/job/SignJob.java

@ -3,26 +3,23 @@ package com.yihu.wlyy.job;
import com.yihu.wlyy.entity.doctor.team.admin.AdminTeam;
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.team.sign.DoctorPatientGroupInfo;
import com.yihu.wlyy.entity.doctor.team.sign.DoctorPatientGroupInfo;
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.patient.SignFamily;
import com.yihu.wlyy.entity.statistics.WlyyQuotaResult;
import com.yihu.wlyy.entity.statistics.WlyyQuotaResult;
import com.yihu.wlyy.job.elt.base.ETLModel;
import com.yihu.wlyy.job.elt.base.ETLModel;
import com.yihu.wlyy.job.elt.role.LevelRole;
import com.yihu.wlyy.job.elt.role.Level1Role;
import com.yihu.wlyy.job.elt.role.PatientAgeRole;
import com.yihu.wlyy.job.elt.role.PatientAgeRole;
import com.yihu.wlyy.job.elt.role.PatientGroupRole;
import com.yihu.wlyy.job.elt.role.PatientGroupRole;
import com.yihu.wlyy.job.elt.role.PatientSexRole;
import com.yihu.wlyy.job.elt.role.PatientSexRole;
import com.yihu.wlyy.job.elt.storage.DBStorage;
import com.yihu.wlyy.job.elt.storage.DBStorage;
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.DoctorAdminTeamDao;
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;
import com.yihu.wlyy.repository.organization.HospitalDao;
import com.yihu.wlyy.repository.organization.HospitalDao;
import com.yihu.wlyy.repository.patient.SignFamilyDao;
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.util.IdCardUtil;
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;
import org.json.JSONArray;
import org.json.JSONArray;
@ -68,7 +65,7 @@ public class SignJob implements Job {
    @Autowired
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    private DoctorAdminTeamDao doctorAdminTeamDao;
    @Autowired
    @Autowired
    private LevelRole levelRole;
    private Level1Role levelRole;
    @Autowired
    @Autowired
    private PatientAgeRole patientAgeRole;
    private PatientAgeRole patientAgeRole;
    @Autowired
    @Autowired
@ -154,7 +151,7 @@ public class SignJob implements Job {
                townsMap.put(town.getCode(), town);
                townsMap.put(town.getCode(), town);
            }
            }
            //找出今天的签约信息
            //找出今天的签约信息
            List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterday(yesterday, now);
            List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterdayExpensesStatus(yesterday, now);
            Long cityCount = new Long(0L); //统计到市的数目
            Long cityCount = new Long(0L); //统计到市的数目
            Long townCount = new Long(0L); //统计到所有区的数目
            Long townCount = new Long(0L); //统计到所有区的数目
@ -311,7 +308,7 @@ public class SignJob implements Job {
            }
            }
            //找出今天的签约信息
            //找出今天的签约信息
            List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterday(yesterday, now);
            List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterdayExpensesStatus(yesterday, now);
            Long cityCount = 0L; //统计到市的数目
            Long cityCount = 0L; //统计到市的数目
            Long townCount = 0L; //统计到所有区的数目
            Long townCount = 0L; //统计到所有区的数目
            Long orgCount = 0L;//统计到所有机构的数目
            Long orgCount = 0L;//统计到所有机构的数目
@ -597,7 +594,7 @@ public class SignJob implements Job {
                townsMap.put(town.getCode(), town);
                townsMap.put(town.getCode(), town);
            }
            }
            //找出今天的签约信息
            //找出今天的签约信息
            List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterday(yesterday, now);
            List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterdayExpensesStatus(yesterday, now);
            Long cityCount = new Long(0L); //统计到市的数目
            Long cityCount = new Long(0L); //统计到市的数目
            Long townCount = new Long(0L); //统计到所有区的数目
            Long townCount = new Long(0L); //统计到所有区的数目
            Long orgCount =new Long(0L);//统计到所有机构的数目
            Long orgCount =new Long(0L);//统计到所有机构的数目
@ -732,7 +729,7 @@ public class SignJob implements Job {
            townsMap.put(town.getCode(), town);
            townsMap.put(town.getCode(), town);
        }
        }
        //找出今天的签约信息 yesterday,now
        //找出今天的签约信息 yesterday,now
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterday(yesterday, now);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterdayExpensesStatus(yesterday, now);
        Long cityCount = new Long(0L); //统计到市的数目
        Long cityCount = new Long(0L); //统计到市的数目
        Long townCount = new Long(0L); //统计到所有区的数目
        Long townCount = new Long(0L); //统计到所有区的数目
@ -849,14 +846,6 @@ public class SignJob implements Job {
        String dateString = formatter.format(date);
        String dateString = formatter.format(date);
        return dateString;
        return dateString;
    }
    }
    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;
        }
    }
    private String saveContent(List<SignFamily> signFamilys, Long qkCount, Long orgCount, Long townCount, Long cityCount, boolean isAll, StringBuffer errorContent,Long errorCount) {
    private String saveContent(List<SignFamily> signFamilys, Long qkCount, Long orgCount, Long townCount, Long cityCount, boolean isAll, StringBuffer errorContent,Long errorCount) {
        StringBuffer string=new StringBuffer("统计"+yesterday+" 的签约数据完成 ,数据库查询到签约数目:"+signFamilys.size());
        StringBuffer string=new StringBuffer("统计"+yesterday+" 的签约数据完成 ,数据库查询到签约数目:"+signFamilys.size());

+ 3 - 7
src/main/java/com/yihu/wlyy/job/UnSignJob.java

@ -3,20 +3,16 @@ package com.yihu.wlyy.job;
import com.yihu.wlyy.entity.doctor.team.admin.AdminTeam;
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.job.QuartzJobLog;
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.job.elt.base.ETLModel;
import com.yihu.wlyy.job.elt.base.ETLModel;
import com.yihu.wlyy.job.elt.role.LevelRole;
import com.yihu.wlyy.job.elt.role.Level1Role;
import com.yihu.wlyy.job.elt.storage.DBStorage;
import com.yihu.wlyy.job.elt.storage.DBStorage;
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.DoctorAdminTeamDao;
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.SignFamilyDao;
import com.yihu.wlyy.repository.patient.SignFamilyDao;
import com.yihu.wlyy.repository.statistics.WlyyQuotaResultDao;
import com.yihu.wlyy.web.quota.WlyyJobConfigVO;
import com.yihu.wlyy.web.quota.WlyyJobConfigVO;
import com.yihu.wlyy.web.quota.WlyyQuotaVO;
import com.yihu.wlyy.web.quota.WlyyQuotaVO;
import org.quartz.Job;
import org.quartz.Job;
@ -51,7 +47,7 @@ public class UnSignJob implements Job {
    @Autowired
    @Autowired
    private JdbcTemplate jdbcTemplate;
    private JdbcTemplate jdbcTemplate;
    @Autowired
    @Autowired
    private LevelRole levelRole;
    private Level1Role levelRole;
    @Autowired
    @Autowired
    private DBStorage dbStorage;
    private DBStorage dbStorage;
    @Autowired
    @Autowired
@ -106,7 +102,7 @@ public class UnSignJob implements Job {
            townsMap.put(town.getCode(), town);
            townsMap.put(town.getCode(), town);
        }
        }
        //找出今天的解约信息
        //找出今天的解约信息
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingUnSignYesterday(yesterday,now);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingUnSignYesterdayExpensesStatus(yesterday,now);
        Long cityCount = new Long(0L); //统计到市的数目
        Long cityCount = new Long(0L); //统计到市的数目
        Long townCount = new Long(0L); //统计到所有区的数目
        Long townCount = new Long(0L); //统计到所有区的数目

+ 3 - 7
src/main/java/com/yihu/wlyy/job/WaitSignJob.java

@ -3,20 +3,16 @@ package com.yihu.wlyy.job;
import com.yihu.wlyy.entity.doctor.team.admin.AdminTeam;
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.job.QuartzJobLog;
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.job.elt.base.ETLModel;
import com.yihu.wlyy.job.elt.base.ETLModel;
import com.yihu.wlyy.job.elt.role.LevelRole;
import com.yihu.wlyy.job.elt.role.Level1Role;
import com.yihu.wlyy.job.elt.storage.DBStorage;
import com.yihu.wlyy.job.elt.storage.DBStorage;
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.DoctorAdminTeamDao;
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.SignFamilyDao;
import com.yihu.wlyy.repository.patient.SignFamilyDao;
import com.yihu.wlyy.repository.statistics.WlyyQuotaResultDao;
import com.yihu.wlyy.web.quota.WlyyJobConfigVO;
import com.yihu.wlyy.web.quota.WlyyJobConfigVO;
import com.yihu.wlyy.web.quota.WlyyQuotaVO;
import com.yihu.wlyy.web.quota.WlyyQuotaVO;
import org.quartz.Job;
import org.quartz.Job;
@ -51,7 +47,7 @@ public class WaitSignJob implements Job {
    @Autowired
    @Autowired
    private JdbcTemplate jdbcTemplate;
    private JdbcTemplate jdbcTemplate;
    @Autowired
    @Autowired
    private LevelRole levelRole;
    private Level1Role levelRole;
    @Autowired
    @Autowired
    private DBStorage dbStorage;
    private DBStorage dbStorage;
@ -105,7 +101,7 @@ public class WaitSignJob implements Job {
            townsMap.put(town.getCode(), town);
            townsMap.put(town.getCode(), town);
        }
        }
        //找出今天的待签约信息
        //找出今天的待签约信息
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingWaitSignYesterday(yesterday,now);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingWaitSignYesterdayExpensesStatus(yesterday,now);
        Long cityCount = new Long(0L); //统计到市的数目
        Long cityCount = new Long(0L); //统计到市的数目
        Long townCount = new Long(0L); //统计到所有区的数目
        Long townCount = new Long(0L); //统计到所有区的数目

+ 26 - 0
src/main/java/com/yihu/wlyy/job/elt/base/ETLModel.java

@ -10,7 +10,17 @@ public class ETLModel {
    private String city;//城市代码 350200
    private String city;//城市代码 350200
    private String idcard;//患者身份证
    private String idcard;//患者身份证
    private String patientGroup;//患者分组
    private String patientGroup;//患者分组
    private String signExpensesStatus;//扣费状态 【0未扣费 1已扣费 2已退费】
    private String level2Key;//二级维度的key
    private String level3Key;//三级维度的key
    public String getLevel3Key() {
        return level3Key;
    }
    public void setLevel3Key(String level3Key) {
        this.level3Key = level3Key;
    }
    public String getAdminTeam() {
    public String getAdminTeam() {
        return adminTeam;
        return adminTeam;
@ -59,4 +69,20 @@ public class ETLModel {
    public void setPatientGroup(String patientGroup) {
    public void setPatientGroup(String patientGroup) {
        this.patientGroup = patientGroup;
        this.patientGroup = patientGroup;
    }
    }
    public String getSignExpensesStatus() {
        return signExpensesStatus;
    }
    public void setSignExpensesStatus(String signExpensesStatus) {
        this.signExpensesStatus = signExpensesStatus;
    }
    public String getLevel2Key() {
        return level2Key;
    }
    public void setLevel2Key(String level2Key) {
        this.level2Key = level2Key;
    }
}
}

+ 2 - 2
src/main/java/com/yihu/wlyy/job/elt/role/LevelRole.java

@ -21,11 +21,11 @@ import java.util.Map;
/**
/**
 * Created by Administrator on 2016.10.09.
 * Created by Administrator on 2016.10.09.
 * 机构等级分组
 * 1级维度 机构等级分组
 */
 */
@Component
@Component
@Transactional
@Transactional
public class LevelRole {
public class Level1Role {
    /**
    /**
     * 返回的Listmap中 list第一個是 团队 第二个是机构 第三个是区  第四个市
     * 返回的Listmap中 list第一個是 团队 第二个是机构 第三个是区  第四个市

+ 68 - 0
src/main/java/com/yihu/wlyy/job/elt/role/Level2Role.java

@ -0,0 +1,68 @@
package com.yihu.wlyy.job.elt.role;
import com.yihu.wlyy.job.elt.base.ETLModel;
import com.yihu.wlyy.util.IdCardUtil;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * Created by Administrator on 2016.10.11.
 * 二级维度 的公共的统计算法
 */
@Component
@Transactional
public class Level2Role {
    public List<Map<String, Map<String, List<ETLModel>>>> elt(List<Map<String, List<ETLModel>>> data) throws  Exception{
        List<Map<String, Map<String, List<ETLModel>>>> returnMapsList=new ArrayList<Map<String, Map<String, List<ETLModel>>>>();
        Map<String,Map<String, List<ETLModel>>> tjCityMap = new HashMap<String,Map<String, List<ETLModel>>>();//市级的统计map key 是区行政区划350200
        Map<String,Map<String, List<ETLModel>>> tjTownMap = new HashMap<String,Map<String, List<ETLModel>>>();//区级的统计map key 是区行政区划350206
        Map<String,Map<String, List<ETLModel>>> tjOrgMap = new HashMap<String,Map<String, List<ETLModel>>>();//机构的统计map key 是机构的code
        Map<String,Map<String, List<ETLModel>>> tjAdminTeamMap = new HashMap<String,Map<String, List<ETLModel>>>();//团队级的统计map 一  key 团队id
        //统计市
        compute(tjCityMap,data.get(3));
        //统计区
        compute(tjTownMap,data.get(2));
        //统计机构
        compute(tjOrgMap,data.get(1));
        //统计团队
        compute(tjAdminTeamMap,data.get(0));
        returnMapsList.add(0,tjAdminTeamMap);
        returnMapsList.add(1,tjOrgMap);
        returnMapsList.add(2,tjTownMap);
        returnMapsList.add(3,tjCityMap);
        return returnMapsList;
    }
    /**
     * 统计算法
     * @param tjMap
     * @param eltDateMap
     */
    private void compute(Map<String, Map<String, List<ETLModel>>> tjMap, Map<String, List<ETLModel>> eltDateMap) throws Exception{
        //遍历数据Map
        for(Map.Entry<String,List<ETLModel>> oneData:eltDateMap.entrySet()){
            List<ETLModel> datas=oneData.getValue();//得到数据列表 全部区或者市或者机构或者区的数据
            Map<String, List<ETLModel>> childrens=new HashMap<String, List<ETLModel>>();//返回的map
            for(ETLModel eltModel:datas){
                String sexKey= eltModel.getLevel2Key();
                List<ETLModel> etlModels= childrens.get(sexKey);
                //如果list不存在 新建一个
                if(etlModels==null){
                    etlModels=new ArrayList<>();
                }
                etlModels.add(eltModel);
                childrens.put(sexKey,etlModels);
            }
            tjMap.put(oneData.getKey(),childrens);
        }
    }
}

+ 76 - 0
src/main/java/com/yihu/wlyy/job/elt/role/Level3Role.java

@ -0,0 +1,76 @@
package com.yihu.wlyy.job.elt.role;
import com.yihu.wlyy.job.elt.base.ETLModel;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * Created by Administrator on 2016.10.11.
 * 二级维度的公共的统计算法
 */
@Component
@Transactional
public class Level3Role {
    public List<Map<String, Map<String, Map<String, List<ETLModel>>>>> elt(List<Map<String, Map<String, List<ETLModel>>>> data) throws  Exception{
        List<Map<String, Map<String, Map<String, List<ETLModel>>>>> returnMapsList=new ArrayList<Map<String, Map<String, Map<String, List<ETLModel>>>>>();
        Map<String, Map<String, Map<String, List<ETLModel>>>> tjCityMap = new HashMap<String, Map<String, Map<String, List<ETLModel>>>>();//市级的统计map key 是区行政区划350200
        Map<String, Map<String, Map<String, List<ETLModel>>>> tjTownMap = new HashMap<String, Map<String, Map<String, List<ETLModel>>>>();//区级的统计map key 是区行政区划350206
        Map<String, Map<String, Map<String, List<ETLModel>>>> tjOrgMap = new HashMap<String, Map<String, Map<String, List<ETLModel>>>>();//机构的统计map key 是机构的code
        Map<String, Map<String, Map<String, List<ETLModel>>>> tjAdminTeamMap = new HashMap<String, Map<String, Map<String, List<ETLModel>>>>();//团队级的统计map 一  key 团队id
        //统计市
        compute(tjCityMap,data.get(3));
        //统计区
        compute(tjTownMap,data.get(2));
        //统计机构
        compute(tjOrgMap,data.get(1));
        //统计团队
        compute(tjAdminTeamMap,data.get(0));
        returnMapsList.add(0,tjAdminTeamMap);
        returnMapsList.add(1,tjOrgMap);
        returnMapsList.add(2,tjTownMap);
        returnMapsList.add(3,tjCityMap);
        return returnMapsList;
    }
    /**
     * 统计算法
     * @param tjMap
     * @param eltDateMap
     */
    private void compute(Map<String, Map<String, Map<String, List<ETLModel>>>> tjMap, Map<String, Map<String, List<ETLModel>>> eltDateMap) throws Exception{
        //遍历数据Map
        for(Map.Entry<String, Map<String, List<ETLModel>>> oneData:eltDateMap.entrySet()){
            Map<String, List<ETLModel>> datasOne=oneData.getValue();//得到数据列表 全部区或者市或者机构或者区的数据
            Map<String, Map<String, List<ETLModel>>> childrens=new HashMap<String, Map<String, List<ETLModel>>>();//返回的map
            for(Map.Entry<String, List<ETLModel>> datasTwo:datasOne.entrySet()){
                 //如果
                 List<ETLModel> datasTwoList=datasTwo.getValue();
                 //做三级维度的数据计算
                 Map<String, List<ETLModel>> newThreeDataMap=new HashMap<String, List<ETLModel>>();
                 for(ETLModel etlModel:datasTwoList){
                      if(newThreeDataMap.containsKey(etlModel.getLevel3Key())){
                          newThreeDataMap.get(etlModel.getLevel3Key()).add(etlModel);
                      }else{
                          List<ETLModel> newThreeDataList=new ArrayList<ETLModel>();
                          newThreeDataList.add(etlModel);
                          newThreeDataMap.put(etlModel.getLevel3Key(),newThreeDataList);
                      }
                 }
                //把三级维度统计好的数据加入到二级维度的Map去
                childrens.put(datasTwo.getKey(),newThreeDataMap);
            }
            //把二级维度的数据加入到一级维度里面去
            tjMap.put(oneData.getKey(),childrens);
        }
    }
}

+ 290 - 15
src/main/java/com/yihu/wlyy/job/elt/storage/DBStorage.java

@ -92,9 +92,38 @@ public class DBStorage   {
     * @param day
     * @param day
     * @param wlyyQuota
     * @param wlyyQuota
     * @param foreachNum 标识二级维度循环的次数  例如 年龄就传6  性别就传3
     * @param foreachNum 标识二级维度循环的次数  例如 年龄就传6  性别就传3
     * @param type 1 性别 2 年龄 3 用户分组
     * @param type 1 性别 2 年龄 3 用户分组 4.签约费用
     */
     */
    public void saveByLevel2(List<Map<String, Map<String, List<ETLModel>>>> data, String day, WlyyQuotaVO wlyyQuota,Integer foreachNum,Integer type) {
    public void saveByLevel2(List<Map<String, Map<String, List<ETLModel>>>> data, String day, WlyyQuotaVO wlyyQuota,Integer foreachNum,Integer type) throws Exception{
        Integer start=1;
        this.wlyyQuota=wlyyQuota;
        level2Public(data, day, foreachNum, type, start);
    }
    /**
     * 保存二级维度
     * @param data
     * @param day
     * @param wlyyQuota
     * @param foreachNum 如果start是默认的 标识二级维度循环的次数  例如 年龄就传6  性别就传3
     * @param type 1 性别 2 年龄 3 用户分组 4.签约费用
     * @param start 起始位置 默认是1
     */
    public void saveByLevel2(List<Map<String, Map<String, List<ETLModel>>>> data, String day, WlyyQuotaVO wlyyQuota,Integer foreachNum,Integer type,Integer start)throws Exception {
        this.wlyyQuota=wlyyQuota;
        level2Public(data, day, foreachNum, type, start);
    }
    /**
     * 保存三级维度
     * @param data
     * @param day
     * @param wlyyQuota
     * @param foreachNum2 标识二级维度循环的次数  例如 年龄就传6  性别就传3
     * @param foreachNum3 标识三级维度循环的次数  例如 年龄就传6  性别就传3
     * @param type 1 性别 2 年龄 3 用户分组 4.签约费用
     */
    public void saveByLevel3(List<Map<String, Map<String, Map<String, List<ETLModel>>>>> data, String day, WlyyQuotaVO wlyyQuota,Integer foreachNum2,Integer foreachNum3,Integer type) throws Exception{
        Integer start2=1;
        Integer start3=1;
        this.wlyyQuota=wlyyQuota;
        this.wlyyQuota=wlyyQuota;
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
        for (AdminTeam adminTeam : adminTeams) {
        for (AdminTeam adminTeam : adminTeams) {
@ -117,19 +146,251 @@ public class DBStorage   {
        Map<String, City> cityMap = new HashMap<String, City>();
        Map<String, City> cityMap = new HashMap<String, City>();
        cityMap.put(Constant.city,city);
        cityMap.put(Constant.city,city);
        //保存团队
        //保存团队
        saveAdminTeamDataLevel2(data.get(0),day,adminTeamMap,foreachNum,type);
        saveAdminTeamDataLevel3(data.get(0),day,adminTeamMap,foreachNum2,foreachNum3,type,start2,start3);
        //保存机构
        //保存机构
        saveHospitalTeamDataLevel2(data.get(1),day,hospitalsMap,foreachNum,type);
        saveHospitalTeamDataLevel3(data.get(1),day,hospitalsMap,foreachNum2,foreachNum3,type,start2,start3);
        //保存区
        //保存区
        saveTownTeamDataLevel2(data.get(2),day,townsMap,foreachNum,type);
        saveTownTeamDataLevel3(data.get(2),day,townsMap,foreachNum2,foreachNum3,type,start2,start3);
        //保存市
        //保存市
        saveCityTeamDataLevel2(data.get(3),day,cityMap,foreachNum,type);
        saveCityTeamDataLevel3(data.get(3),day,cityMap,foreachNum2,foreachNum3,type,start2,start3);
    }
    }
    private void saveCityTeamDataLevel2(Map<String, Map<String, List<ETLModel>>> etlModelMap, String day, Map<String, City> citysMap ,Integer foreachNum,Integer type) {
    /**
     * 保存三级维度
     * @param data
     * @param day
     * @param wlyyQuota
     * @param foreachNum2 标识二级维度循环的次数  例如 年龄就传6  性别就传3
     * @param foreachNum3 标识三级维度循环的次数  例如 年龄就传6  性别就传3
     * @param type 1 性别 2 年龄 3 用户分组 4.签约费用
     * @param start2 耳機維度起始位置 默认是1
     * @param start3 耳機維度起始位置 默认是1
     */
    public void saveByLevel3(List<Map<String, Map<String, Map<String, List<ETLModel>>>>> data, String day, WlyyQuotaVO wlyyQuota,Integer foreachNum2,Integer foreachNum3,Integer type,Integer start2,Integer start3) throws Exception{
        if(start2==null){
            start2=1;
        }
        if(start3==null){
            start2=3;
        }
        this.wlyyQuota=wlyyQuota;
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
        for (AdminTeam adminTeam : adminTeams) {
            adminTeamMap.put(adminTeam.getId()+"", adminTeam);
        }
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospitalzxFWZ();
        for (Hospital hospital : hospitals) {
            hospitalsMap.put(hospital.getCode(), hospital);
        }
        //查找出厦门市全部的区
        List<Town> towns = townDao.findByCityCode(Constant.city);
        for (Town town : towns) {
            townsMap.put(town.getCode(), town);
        }
        //全部的市
        City city=new City();
        city.setCode(Constant.city);
        city.setName(Constant.cityName);
        Map<String, City> cityMap = new HashMap<String, City>();
        cityMap.put(Constant.city,city);
        //保存团队
        saveAdminTeamDataLevel3(data.get(0),day,adminTeamMap,foreachNum2,foreachNum3,type,start2,start3);
        //保存机构
        saveHospitalTeamDataLevel3(data.get(1),day,hospitalsMap,foreachNum2,foreachNum3,type,start2,start3);
        //保存区
        saveTownTeamDataLevel3(data.get(2),day,townsMap,foreachNum2,foreachNum3,type,start2,start3);
        //保存市
        saveCityTeamDataLevel3(data.get(3),day,cityMap,foreachNum2,foreachNum3,type,start2,start3);
    }
    private void saveAdminTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap, String day, Map<String, AdminTeam> adminTeamMap, Integer foreachNum2, Integer foreachNum3, Integer type, Integer start2, Integer start3) {
        //遍历团队的Map
        for(Map.Entry<String,AdminTeam> oneAdminTeam:adminTeamMap.entrySet()){
            //得到每个团队的2级维度
            Map<String, Map<String, List<ETLModel>>> twoETLMap= etlModelMap.get(oneAdminTeam.getKey());
            for(int i=start2;i<=foreachNum2;i++){
                 //得到每个团队的三级维度
                 Map<String, List<ETLModel>> threeETLMap= new HashMap<String, List<ETLModel>>();
                 if(twoETLMap!=null){
                     threeETLMap=twoETLMap.get(i);
                 }
                 for(int j=start3;j<=foreachNum3;j++){
                     int num=0;
                     List<ETLModel> etlModelList= threeETLMap.get(i);
                     if(etlModelList!=null&&etlModelList.size()>0){
                         num=etlModelList.size();
                     }
                     AdminTeam adminTeamObj = adminTeamMap.get(oneAdminTeam.getKey());//团队
                     if(adminTeamObj==null)continue;
                     String orgCodeTemp=getOrg(adminTeamObj.getOrgCode());
                     Hospital hospital = hospitalsMap.get(orgCodeTemp);
                     if(hospital==null)continue;
                     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 doctorCode=adminTeamObj.getId()+"";
                     String doctorName=adminTeamObj.getName();
                     String doctorJob="";
                     String level="1";
                     String level2=i+"";
                     String level3=j+"";
                     String level3Name=getLevel3Name(level3,type);
                     save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level,level2,null,level3,level3Name,day);
                }
            }
        }
    }
    private void saveHospitalTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap, String day, Map<String, Hospital> hospitalsMap, Integer foreachNum2, Integer foreachNum3, Integer type, Integer start2, Integer start3) {
        //遍历团队的Map
        for(Map.Entry<String,Hospital> oneHospital:hospitalsMap.entrySet()){
            //得到每个团队的2级维度
            Map<String, Map<String, List<ETLModel>>> twoETLMap= etlModelMap.get(oneHospital.getKey());
            for(int i=start2;i<=foreachNum2;i++){
                //得到每个团队的三级维度
                Map<String, List<ETLModel>> threeETLMap= new HashMap<String, List<ETLModel>>();
                if(twoETLMap!=null){
                    threeETLMap=twoETLMap.get(i);
                }
                for(int j=start3;j<=foreachNum3;j++){
                    int num=0;
                    List<ETLModel> etlModelList= threeETLMap.get(i);
                    if(etlModelList!=null&&etlModelList.size()>0){
                        num=etlModelList.size();
                    }
                    Hospital hospital = hospitalsMap.get(oneHospital.getKey());
                    if(hospital==null)continue;
                    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 doctorCode="";
                    String doctorName="";
                    String doctorJob="";
                    String level="1";
                    String level2=i+"";
                    String level3=j+"";
                    String level3Name=getLevel3Name(level3,type);
                    save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level,level2,null,level3,level3Name,day);
                }
            }
        }
    }
    private void saveTownTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap, String day, Map<String, Town> townsMap, Integer foreachNum2, Integer foreachNum3, Integer type, Integer start2, Integer start3) {
        //遍历团队的Map
        for(Map.Entry<String,Town> oneTownTeam:townsMap.entrySet()){
            //得到每个团队的2级维度
            Map<String, Map<String, List<ETLModel>>> twoETLMap= etlModelMap.get(oneTownTeam.getKey());
            for(int i=start2;i<=foreachNum2;i++){
                //得到每个团队的三级维度
                Map<String, List<ETLModel>> threeETLMap= new HashMap<String, List<ETLModel>>();
                if(twoETLMap!=null){
                    threeETLMap=twoETLMap.get(i);
                }
                for(int j=start3;j<=foreachNum3;j++){
                    int num=0;
                    List<ETLModel> etlModelList= threeETLMap.get(i);
                    if(etlModelList!=null&&etlModelList.size()>0){
                        num=etlModelList.size();
                    }
                    Town townObj=townsMap.get(oneTownTeam.getKey());
                    if(townObj==null)continue;
                    String city=Constant.city;
                    String cityName=Constant.cityName;
                    String town=townObj.getCode();
                    String townName=townObj.getName();
                    String org="";
                    String orgName="";
                    String doctorCode="";
                    String doctorName="";
                    String doctorJob="";
                    String level="1";
                    String level2=i+"";
                    String level3=j+"";
                    String level3Name=getLevel3Name(level3,type);
                    save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level,level2,null,level3,level3Name,day);
                }
            }
        }
    }
    private void saveCityTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap, String day, Map<String, City> cityMap, Integer foreachNum2, Integer foreachNum3, Integer type, Integer start2, Integer start3) {
        //遍历团队的Map
        for(Map.Entry<String,City> oneCityTeam:cityMap.entrySet()){
            //得到每个团队的2级维度
            Map<String, Map<String, List<ETLModel>>> twoETLMap= etlModelMap.get(oneCityTeam.getKey());
            for(int i=start2;i<=foreachNum2;i++){
                //得到每个团队的三级维度
                Map<String, List<ETLModel>> threeETLMap= new HashMap<String, List<ETLModel>>();
                if(twoETLMap!=null){
                    threeETLMap=twoETLMap.get(i);
                }
                for(int j=start3;j<=foreachNum3;j++){
                    int num=0;
                    List<ETLModel> etlModelList= threeETLMap.get(i);
                    if(etlModelList!=null&&etlModelList.size()>0){
                        num=etlModelList.size();
                    }
                    String city=Constant.city;
                    String cityName=Constant.cityName;
                    String town="";
                    String townName="";
                    String org="";
                    String orgName="";
                    String doctorCode="";
                    String doctorName="";
                    String doctorJob="";
                    String level="1";
                    String level2=i+"";
                    String level3=j+"";
                    String level3Name=getLevel3Name(level3,type);
                    save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level,level2,null,level3,level3Name,day);
                }
            }
        }
    }
    private void level2Public(List<Map<String, Map<String, List<ETLModel>>>> data, String day, Integer foreachNum, Integer type, Integer start)throws Exception {
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
        for (AdminTeam adminTeam : adminTeams) {
            adminTeamMap.put(adminTeam.getId()+"", adminTeam);
        }
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospitalzxFWZ();
        for (Hospital hospital : hospitals) {
            hospitalsMap.put(hospital.getCode(), hospital);
        }
        //查找出厦门市全部的区
        List<Town> towns = townDao.findByCityCode(Constant.city);
        for (Town town : towns) {
            townsMap.put(town.getCode(), town);
        }
        //全部的市
        City city=new City();
        city.setCode(Constant.city);
        city.setName(Constant.cityName);
        Map<String, City> cityMap = new HashMap<String, City>();
        cityMap.put(Constant.city,city);
        //保存团队
        saveAdminTeamDataLevel2(data.get(0),day,adminTeamMap,foreachNum,type,start);
        //保存机构
        saveHospitalTeamDataLevel2(data.get(1),day,hospitalsMap,foreachNum,type,start);
        //保存区
        saveTownTeamDataLevel2(data.get(2),day,townsMap,foreachNum,type,start);
        //保存市
        saveCityTeamDataLevel2(data.get(3),day,cityMap,foreachNum,type,start);
    }
    private void saveCityTeamDataLevel2(Map<String, Map<String, List<ETLModel>>> etlModelMap, String day, Map<String, City> citysMap ,Integer foreachNum,Integer type,Integer start) {
         for(Map.Entry<String,City> oneCity:citysMap.entrySet()){
         for(Map.Entry<String,City> oneCity:citysMap.entrySet()){
             Map<String, List<ETLModel>> oneELTMap= etlModelMap.get(oneCity.getKey());
             Map<String, List<ETLModel>> oneELTMap= etlModelMap.get(oneCity.getKey());
             for(int i=1;i<=foreachNum;i++){
             for(int i=start;i<=foreachNum;i++){
                 int num=0;
                 int num=0;
                 if(oneELTMap!=null){
                 if(oneELTMap!=null){
                     List<ETLModel> etlModel= oneELTMap.get(i+"");
                     List<ETLModel> etlModel= oneELTMap.get(i+"");
@ -155,10 +416,10 @@ public class DBStorage   {
         }
         }
    }
    }
    private void saveTownTeamDataLevel2(Map<String, Map<String, List<ETLModel>>> etlModelMap, String day, Map<String, Town> townsMap ,Integer foreachNum,Integer type) {
    private void saveTownTeamDataLevel2(Map<String, Map<String, List<ETLModel>>> etlModelMap, String day, Map<String, Town> townsMap ,Integer foreachNum,Integer type,Integer start) {
        for(Map.Entry<String,Town> oneTown:townsMap.entrySet()){
        for(Map.Entry<String,Town> oneTown:townsMap.entrySet()){
            Map<String, List<ETLModel>> oneELTMap= etlModelMap.get(oneTown.getKey());
            Map<String, List<ETLModel>> oneELTMap= etlModelMap.get(oneTown.getKey());
            for(int i=1;i<=foreachNum;i++){
            for(int i=start;i<=foreachNum;i++){
                int num=0;
                int num=0;
                if(oneELTMap!=null){
                if(oneELTMap!=null){
                    List<ETLModel> etlModel= oneELTMap.get(i+"");
                    List<ETLModel> etlModel= oneELTMap.get(i+"");
@ -184,10 +445,10 @@ public class DBStorage   {
        }
        }
    }
    }
    private void saveHospitalTeamDataLevel2(Map<String, Map<String, List<ETLModel>>> etlModelMap, String day, Map<String, Hospital> hospitalsMap,Integer foreachNum,Integer type) {
    private void saveHospitalTeamDataLevel2(Map<String, Map<String, List<ETLModel>>> etlModelMap, String day, Map<String, Hospital> hospitalsMap,Integer foreachNum,Integer type,Integer start) {
        for(Map.Entry<String,Hospital> oneHospital:hospitalsMap.entrySet()){
        for(Map.Entry<String,Hospital> oneHospital:hospitalsMap.entrySet()){
            Map<String, List<ETLModel>> oneELTMap= etlModelMap.get(oneHospital.getKey());
            Map<String, List<ETLModel>> oneELTMap= etlModelMap.get(oneHospital.getKey());
            for(int i=1;i<=foreachNum;i++){
            for(int i=start;i<=foreachNum;i++){
                int num=0;
                int num=0;
                if(oneELTMap!=null){
                if(oneELTMap!=null){
                    List<ETLModel> etlModel= oneELTMap.get(i+"");
                    List<ETLModel> etlModel= oneELTMap.get(i+"");
@ -214,10 +475,10 @@ public class DBStorage   {
        }
        }
    }
    }
    private void saveAdminTeamDataLevel2(Map<String, Map<String, List<ETLModel>>> etlModelMap, String day, Map<String, AdminTeam> adminTeamMap,Integer foreachNum,Integer type) {
    private void saveAdminTeamDataLevel2(Map<String, Map<String, List<ETLModel>>> etlModelMap, String day, Map<String, AdminTeam> adminTeamMap,Integer foreachNum,Integer type,Integer start) {
        for(Map.Entry<String,AdminTeam> adminTeam:adminTeamMap.entrySet()){
        for(Map.Entry<String,AdminTeam> adminTeam:adminTeamMap.entrySet()){
            Map<String, List<ETLModel>> oneELTMap= etlModelMap.get(adminTeam.getKey());
            Map<String, List<ETLModel>> oneELTMap= etlModelMap.get(adminTeam.getKey());
            for(int i=1;i<=foreachNum;i++){
            for(int i=start;i<=foreachNum;i++){
                int num=0;
                int num=0;
                if(oneELTMap!=null){
                if(oneELTMap!=null){
                    List<ETLModel> etlModel= oneELTMap.get(i+"");
                    List<ETLModel> etlModel= oneELTMap.get(i+"");
@ -401,11 +662,25 @@ public class DBStorage   {
                //用户分组
                //用户分组
                return Constant.getLevelGroupName(i);
                return Constant.getLevelGroupName(i);
            }
            }
            case  4:{
                //费用类别
                return Constant.getLevelExpenseName(i);
            }
            default:{
            default:{
                return "";
                return "";
            }
            }
        }
        }
    }
    }
    private String getLevel3Name(String j, Integer type) {
        switch (type){
            case  1:{
                //签约费用
                return Constant.getLevelExpenseName(j);
            }
            default:{
                return "";
            }
        }
    }
}
}

+ 1 - 1
src/main/java/com/yihu/wlyy/repository/job/QuartzJobConfigDao.java

@ -18,7 +18,7 @@ public interface QuartzJobConfigDao extends PagingAndSortingRepository<QuartzJob
    @Query(" FROM QuartzJobConfig a WHERE a.status=?1 and a.del='1'")
    @Query(" FROM QuartzJobConfig a WHERE a.status=?1 and a.del='1'")
    List<QuartzJobConfig> findByAll(String s);
    List<QuartzJobConfig> findByAll(String s);
    @Query(" FROM QuartzJobConfig a WHERE a.id in (1,2,3,4,5,6,7,8,9,10,12)  and a.del='1' ")
    @Query(" FROM QuartzJobConfig a WHERE a.id in (1,2,3,4,5,6,7,8,9,10,12,13)  and a.del='1' ")
    List<QuartzJobConfig> findByIds();
    List<QuartzJobConfig> findByIds();
    @Query(" FROM QuartzJobConfig a WHERE a.id=?1 and a.del='1'")
    @Query(" FROM QuartzJobConfig a WHERE a.id=?1 and a.del='1'")

+ 10 - 7
src/main/java/com/yihu/wlyy/repository/patient/SignFamilyDao.java

@ -218,20 +218,23 @@ 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 findByjiatingPatientStatus0(String patient);
	SignFamily findByjiatingPatientStatus0(String patient);
	//查找昨天的家庭签约数据
	//查找昨天的家庭签约数据
	@Query(" from SignFamily a where  a.type =2 and a.status = 1  and unix_timestamp(a.applyDate)>=unix_timestamp(?1) and unix_timestamp(a.applyDate)<unix_timestamp(?2) ")
	List<SignFamily> findByJiatingSignYesterday(String yesterday,String today);
	@Query(" from SignFamily a where  a.type =2 and a.status = 1  and unix_timestamp(a.applyDate)>=unix_timestamp(?1) and unix_timestamp(a.applyDate)<unix_timestamp(?2) and a.expensesStatus=1 ")
	List<SignFamily> findByJiatingSignYesterdayExpensesStatus(String yesterday,String today);
	//查找昨天的家庭签约数据
	@Query(" from SignFamily a where  a.type =2 and a.status >= 1  and  unix_timestamp(a.applyDate)<=unix_timestamp(?1) and a.expensesStatus=1 ")
	List<SignFamily> findByJiatingSignYesterdayExpensesStatus(String yesterday);
	//查找昨天的家庭签约数据
	//查找昨天的家庭签约数据
	@Query(" from SignFamily a where  a.type =2 and a.status >= 1  and  unix_timestamp(a.applyDate)<=unix_timestamp(?1) ")
	@Query(" from SignFamily a where  a.type =2 and a.status >= 1  and  unix_timestamp(a.applyDate)<=unix_timestamp(?1) ")
	List<SignFamily> findByJiatingSignYesterday(String yesterday);
	List<SignFamily> findByJiatingSignYesterday(String yesterday);
	//查找昨天的家庭解约数据
	//查找昨天的家庭解约数据
	@Query(" from SignFamily a where  a.type =2 and a.status in (-3,-4) and unix_timestamp(a.applyUnsignDate)>=unix_timestamp(?1) and unix_timestamp(a.applyUnsignDate)<unix_timestamp(?2) ")
	List<SignFamily> findByJiatingUnSignYesterday(String yesterday,String today);
	@Query(" from SignFamily a where  a.type =2 and a.status in (-3,-4) and unix_timestamp(a.applyUnsignDate)>=unix_timestamp(?1) and unix_timestamp(a.applyUnsignDate)<unix_timestamp(?2) and a.expensesStatus=1")
	List<SignFamily> findByJiatingUnSignYesterdayExpensesStatus(String yesterday,String today);
	//查找昨天的家庭待数据
	//查找昨天的家庭待数据
	@Query(" from SignFamily a where  a.type =2 and a.status =0  and unix_timestamp(a.patientApplyDate)>=unix_timestamp(?1) and unix_timestamp(a.patientApplyDate)<unix_timestamp(?2)")
	@Query(" from SignFamily a where  a.type =2 and a.status =0  and unix_timestamp(a.patientApplyDate)>=unix_timestamp(?1) and unix_timestamp(a.patientApplyDate)<unix_timestamp(?2)")
	List<SignFamily> findByJiatingWaitSignYesterday(String yesterday,String today);
	List<SignFamily> findByJiatingWaitSignYesterdayExpensesStatus(String yesterday,String today);
	//查找昨天的家庭待改签
	//查找昨天的家庭待改签
	@Query(" from SignFamily a where  a.type =2 and a.status =100  and unix_timestamp(a.patientApplyDate)>=unix_timestamp(?1) and unix_timestamp(a.patientApplyDate)<unix_timestamp(?2) ")
	List<SignFamily> findByJiatingChaangeSignYesterday(String yesterday, String now);
	@Query(" from SignFamily a where  a.type =2 and a.status =100  and unix_timestamp(a.patientApplyDate)>=unix_timestamp(?1) and unix_timestamp(a.patientApplyDate)<unix_timestamp(?2) and a.expensesStatus=1 ")
	List<SignFamily> findByJiatingChaangeSignYesterdayExpensesStatus(String yesterday, String now);
	@Query("select a from SignFamily a where a.patient = ?1 and a.type = 1 and a.status in (0,1,2)")
	@Query("select a from SignFamily a where a.patient = ?1 and a.type = 1 and a.status in (0,1,2)")
	SignFamily findSanshiSignByPatient(String patientCode);
	SignFamily findSanshiSignByPatient(String patientCode);

+ 26 - 0
src/main/java/com/yihu/wlyy/service/quota/JobService.java

@ -271,4 +271,30 @@ public class JobService {
        s = signFamilyDao.findByDate("2016-08-16 00:00:00");
        s = signFamilyDao.findByDate("2016-08-16 00:00:00");
    }
    }
    public void productDataByDayAndId(Integer day, String id) throws Exception{
        QuartzJobConfig quartzJobConfig = wlyyJobConfigDao.findById(id);
        if(quartzJobConfig==null){
            throw new Exception("id不存在");
        }
            WlyyQuota wlyyQuota = quotaDao.findOne(quartzJobConfig.getQuotaId());
            WlyyQuotaVO wlyyQuotaVO = new WlyyQuotaVO();
            WlyyJobConfigVO wlyyJobConfigVO = new WlyyJobConfigVO();
            BeanUtils.copyProperties(wlyyQuota, wlyyQuotaVO);
            BeanUtils.copyProperties(quartzJobConfig, wlyyJobConfigVO);
            Map<String, Object> params = new HashMap<String, Object>();
            params.put("quota", wlyyQuotaVO);
            params.put("jobConfig", wlyyJobConfigVO);
            for (int i = 1; i <= day; i++) {
                //往quartz框架添加任务
                params.put("now", getYesterday(0 - i + 1));
                params.put("yesterday", getYesterday(0 - i));
                if (!StringUtils.isEmpty(quartzJobConfig.getJobClass())) {
                    quartzHelper.startNow(Class.forName(quartzJobConfig.getJobClass()), quartzJobConfig.getId() + UUID.randomUUID(), params);
                    Thread.sleep(15000L);
                }
            }
    }
}
}

+ 18 - 3
src/main/java/com/yihu/wlyy/web/quota/JobController.java

@ -116,13 +116,28 @@ public class JobController extends BaseController {
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
        }
    }
    }
    /**
    /**
     * 启动任务
     * 生成过去某几天的某一个指标的数据
     *
     *
     * @param id id
     * @param day
     * @return
     * @return
     */
     */
    @RequestMapping(value = "productDataByDayAndId", method = RequestMethod.GET)
    public String productDataByDayAndId(Integer day, String id) {
        try {
            jobService.productDataByDayAndId(day, id);
            return success("启动成功!");
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
            /**
             * 启动任务
             *
             * @param id id
             * @return
             */
    @RequestMapping(value = "startById", method = RequestMethod.GET)
    @RequestMapping(value = "startById", method = RequestMethod.GET)
    public String startById(String id) {
    public String startById(String id) {
        try {
        try {