Ver código fonte

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

chenweida 8 anos atrás
pai
commit
12c82db11c
15 arquivos alterados com 3178 adições e 1046 exclusões
  1. 6 8
      patient-co-statistics/pom.xml
  2. 1 1
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/dao/QuartzJobConfigDao.java
  3. 477 0
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/dataFilter/RenewSignDataFilter.java
  4. 538 446
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/storage/DBStorage.java
  5. 616 585
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/storage/RedisStorage.java
  6. 77 0
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/Constant.java
  7. 158 6
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/CurrentDayAllQuotaJob.java
  8. 109 0
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignChangeHospitalJob.java
  9. 109 0
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignChangeTeamJob.java
  10. 109 0
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignChangeTownJob.java
  11. 108 0
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignInJob.java
  12. 109 0
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignJob.java
  13. 108 0
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignOutJob.java
  14. 114 0
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignReasonJob.java
  15. 539 0
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/model/signfamily/SignFamilyRenew.java

+ 6 - 8
patient-co-statistics/pom.xml

@ -8,8 +8,8 @@
    <modelVersion>4.0.0</modelVersion>
    <!--打成war包需要的配置-->
    <packaging>war</packaging>
    <!--<packaging>jar</packaging>-->
    <!--<packaging>war</packaging>-->
    <packaging>jar</packaging>
    <name>patient-co-statistics</name>
    <properties>
@ -376,7 +376,7 @@
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <version>${version.spring-boot}</version>
            <scope>provided</scope>
            <!--<scope>provided</scope>-->
        </dependency>
        <dependency>
            <groupId>org.json</groupId>
@ -405,11 +405,9 @@
        <plugins>
            <!--打成war包需要的配置-->
            <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
        </plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>

+ 1 - 1
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/dao/QuartzJobConfigDao.java

@ -18,7 +18,7 @@ public interface QuartzJobConfigDao extends PagingAndSortingRepository<QuartzJob
    @Query(" FROM QuartzJobConfig a WHERE a.status=?1 and a.del='1'")
    List<QuartzJobConfig> findByAll(String s);
    @Query(" FROM QuartzJobConfig a WHERE a.id in (1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,17,20,21,22,23,24,25,26,27)  and a.del='1' ")
    @Query(" FROM QuartzJobConfig a WHERE a.id in (1,2,3,4,5,6,7,8,9,10,12,13,14,15,16,17,20,21,22,23,24,25,26,27,29,30,31,32,32,33,34,35)  and a.del='1' ")
    List<QuartzJobConfig> findByIds();
    @Query(" FROM QuartzJobConfig a WHERE a.id=?1 and a.del='1'")

+ 477 - 0
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/dataFilter/RenewSignDataFilter.java

@ -0,0 +1,477 @@
package com.yihu.wlyy.statistics.etl.dataFilter;
import com.yihu.wlyy.statistics.dao.DoctorAdminTeamDao;
import com.yihu.wlyy.statistics.dao.HospitalDao;
import com.yihu.wlyy.statistics.dao.TownDao;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.etl.model.ErrorModel;
import com.yihu.wlyy.statistics.etl.model.FilterModel;
import com.yihu.wlyy.statistics.etl.model.LogModel;
import com.yihu.wlyy.statistics.etl.mycache.CachePool;
import com.yihu.wlyy.statistics.job.business.Constant;
import com.yihu.wlyy.statistics.model.hosptial.Hospital;
import com.yihu.wlyy.statistics.model.signfamily.SignFamilyRenew;
import com.yihu.wlyy.statistics.model.system.Town;
import com.yihu.wlyy.statistics.model.team.AdminTeam;
import com.yihu.wlyy.statistics.util.IdCardUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.util.*;
/**
 * Created by Administrator on 2016.10.16.
 * 续签约数据的过滤
 */
@Component
@Scope("prototype")
public class RenewSignDataFilter {
    public static String level2Reson = "1";//续签原因
    @Autowired
    private HospitalDao hospitalDao;
    @Autowired
    private TownDao townDao;
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    @Autowired
    private CachePool cachePool;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    List<ErrorModel> errorModels = new ArrayList<ErrorModel>();
    private int count = 0;
    /**
     * 过滤数据
     *
     * @param signFamilies 签约列表
     * @return
     */
    public FilterModel filter(List<SignFamilyRenew> signFamilies, String sql) {
        return filterCommon(signFamilies, null, null, sql, null);
    }
    /**
     * 过滤数据
     *
     * @param signFamilies 签约列表
     * @param filterDate   不传默认是但在的时间
     * @return
     */
    public FilterModel filter(List<SignFamilyRenew> signFamilies, String sql, String filterDate) {
        return filterCommon(signFamilies, null, null, sql, filterDate);
    }
    /**
     * 过滤数据
     *
     * @param signFamilies 签约列表
     * @param level2Key    二级维度的key
     *                     1:性别 2:年龄 3:分组 4:费用 5:健康服务分布 6:年龄 7:年龄疾病
     * @param filterDate   过滤的是哪天的数据 yyyy-MM-dd
     * @return
     */
    public FilterModel filter(List<SignFamilyRenew> signFamilies, String level2Key, String sql, String filterDate) {
        return filterCommon(signFamilies, level2Key, null, sql, filterDate);
    }
    /**
     * 过滤数据
     *
     * @param signFamilies 签约列表
     * @param level2Key    二级维度的key
     *                     1:健康服务分布
     * @param level3Key    三级维度的key
     *                     1.疾病
     * @param filterDate   过滤的是哪天的数据 yyyy-MM-dd
     * @return
     */
    public FilterModel filter(List<SignFamilyRenew> signFamilies, String level2Key, String level3Key, String sql, String filterDate) {
        return filterCommon(signFamilies, level2Key, level3Key, sql, filterDate);
    }
    /**
     * 公共的抽取方法
     *
     * @param signFamilies 签约列表
     * @param level2Key    二级维度的key
     *                     1:性别 2:年龄 3:分组 4:费用 5:健康服务分布 6:年龄 7:年龄疾病
     * @param level3Key    三级维度的key
     *                     1.疾病
     * @param filterDate   过滤的是哪天的数据 yyyy-MM-dd
     * @return
     */
    private FilterModel filterCommon(List<SignFamilyRenew> signFamilies, String level2Key, String level3Key, String sql, String filterDate) {
        //查找出系统全部的全科医生
        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);
        }
        List<ETLModel> etlModelList = new ArrayList<>();//返回的ETL數據
        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;//是否统计失败
        LogModel logModel = new LogModel();
        errorModels = new ArrayList<ErrorModel>();
        for (int i = 0; i < signFamilies.size(); i++) {
            SignFamilyRenew signFamily = signFamilies.get(i);
            String orgCode = signFamily.getHospital();
            if (StringUtils.isEmpty(orgCode)) {
                errorModels.add(ErrorModel.newEM(signFamily.getCode(), ErrorModel.sign_hospital_null));
                isAll = false;
                errorCount++;
                continue;
            }
            if (orgCode.length() != 10) {
                errorModels.add(ErrorModel.newEM(signFamily.getCode(), ErrorModel.sign_hospital_isTest));
                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) {
                errorModels.add(ErrorModel.newEM(signFamily.getCode(), ErrorModel.sign_hospital_noExist));
                isAll = false;
                errorCount++;
                continue;
            }
            String town = hospital.getTown();
            if (StringUtils.isEmpty(town)) {
                errorModels.add(ErrorModel.newEM(signFamily.getCode(), ErrorModel.sign_town_null));
                isAll = false;
                errorCount++;
                continue;
            }
            Town townObj = townsMap.get(town);
            if (townObj == null) {
                errorModels.add(ErrorModel.newEM(signFamily.getCode(), ErrorModel.sign_town_noExist));
                isAll = false;
                errorCount++;
                continue;
            }
            Long adminId = signFamily.getAdminTeamId();
            if (adminId == null || adminId <= 0) {
                errorModels.add(ErrorModel.newEM(signFamily.getCode(), ErrorModel.sign_adminTeam_null));
                isAll = false;
                errorCount++;
                continue;
            }
            AdminTeam adminTeam = adminTeamMap.get(adminId + "");
            if (adminTeam == null) {
                errorModels.add(ErrorModel.newEM(signFamily.getCode(), ErrorModel.sign_adminTeam_noExist));
                isAll = false;
                errorCount++;
                continue;
            }
            String idCard = signFamily.getIdcard();
            if (idCard == null || ((idCard.length() != 18 && idCard.length() != 15))) {
                errorModels.add(ErrorModel.newEM(signFamily.getCode(), ErrorModel.sign_idcard_error));
                isAll = false;
                errorCount++;
                continue;
            }
            //设置二级维度的Key
            String returnLevel2Key = getLevel2Key(level2Key, signFamily);
            String returnLevel3Key = getLevel3Key(level3Key, signFamily);
            if (StringUtils.isEmpty(returnLevel2Key)) {
                //没有二级维度
                ETLModel etlModel = new ETLModel();
                etlModel.setAdminTeam(adminTeam.getId() + "");
                etlModel.setHospital(orgCodeTemp);
                etlModel.setTown(hospital.getTown());
                etlModel.setCity(Constant.city);
                etlModelList.add(etlModel);
            } else {
                String[] level2Keys = returnLevel2Key.split(",");
                for (int j = 0; j < level2Keys.length; j++) {
                    ETLModel etlModel = new ETLModel();
                    etlModel.setLevel2Key(level2Keys[j]);
                    etlModel.setLevel3Key(returnLevel3Key);
                    etlModel.setAdminTeam(adminTeam.getId() + "");
                    etlModel.setHospital(orgCodeTemp);
                    etlModel.setTown(hospital.getTown());
                    etlModel.setCity(Constant.city);
                    etlModelList.add(etlModel);
                }
            }
            //统计数目+1
            cityCount++;
            townCount++;
            orgCount++;
            adminCount++;
        }
        logModel.setDate(filterDate);
        logModel.setEndTime(new Date());
        logModel.setExcuteSql(sql);
        logModel.setSuccess(isAll);
        logModel.setAllNum(signFamilies.size());
        logModel.setSuccessNum(adminCount.intValue());
        logModel.setModelList(errorModels);
        logModel.setErrorNum(errorCount.intValue());
        //String message=saveContent(signFamilies.size(),adminCount,orgCount,townCount,cityCount,isAll,errorContent,errorCount,sql,filterDate);
        return FilterModel.getFiltrerMode(logModel, etlModelList, isAll);
    }
    private String getLevel3Key(String level3Key, SignFamilyRenew signFamily) {
        String returnLevel3Key = null;
        if (!StringUtils.isEmpty(level3Key)) {
            switch (level3Key) {
                //疾病
                case "1": {
                    returnLevel3Key = getDisease(signFamily);
                    break;
                }
            }
        }
        return returnLevel3Key;
    }
    /**
     * 根据签约表的患者code从缓存得到疾病标签
     *
     * @param signFamily
     * @return
     */
    private String getDisease(SignFamilyRenew signFamily) {
        boolean hasGXY = false;//有高血压
        boolean hasTNB = false;//有糖尿病
        //如果是慢病的 统计高血压的 糖尿病  1高血压,2糖尿病  3 糖尿病和高血压 4健康人群数
        String diseaseType = "4";
        //得到患者的疾病标签
        List<String> diseaseList = cachePool.getDiseaseGroup(signFamily.getPatient());
        if (diseaseList != null && diseaseList.size() > 0) {
            for (String diseaseCode : diseaseList) {
                if ("1".equals(diseaseCode)) {//判斷是否有高血壓
                    diseaseType = "1";
                    hasGXY = true;
                }
                if ("2".equals(diseaseCode)) {//判斷是否有糖尿病
                    diseaseType = "2";
                    hasTNB = true;
                }
            }
        }
        if (hasTNB && hasGXY) {
            diseaseType = "3";
        }
        return diseaseType;
    }
    /**
     * 得到二级维度的key
     * 1:性别 2:年龄 3:分组 4:费用 5:健康服务分布 6:年龄 7:年龄疾病
     *
     * @param level2Key
     * @return
     */
    private String getLevel2Key(String level2Key, SignFamilyRenew signFamily) {
        String returnLevel2Key = null;
        if (!StringUtils.isEmpty(level2Key)) {
            switch (level2Key) {
                //理由
                case "1": {
                    returnLevel2Key = getReason(signFamily);
                    return returnLevel2Key;
                }
            }
        }
        return returnLevel2Key;
    }
    private String getReason(SignFamilyRenew signFamily) {
        return signFamily.getRenewChangeReason();
    }
    public FilterModel filterNoTeam(List<SignFamilyRenew> signFamilies, String level2Key, String level3Key, String sql, String filterDate) {
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospital2();
        Map<String, Hospital> hospitalsMap = new HashMap<String, Hospital>();
        for (Hospital hospital : hospitals) {
            hospitalsMap.put(hospital.getCode(), hospital);
        }
        List<AdminTeam> adminTeams = doctorAdminTeamDao.findAllTeam();
        Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
        for (AdminTeam adminTeam : adminTeams) {
            adminTeamMap.put(adminTeam.getId() + "", adminTeam);
        }
        //查找出厦门市全部的区
        List<Town> towns = townDao.findByCityCode(Constant.city);
        Map<String, Town> townsMap = new HashMap<String, Town>();
        for (Town town : towns) {
            townsMap.put(town.getCode(), town);
        }
        List<ETLModel> etlModelList = new ArrayList<>();//返回的ETL數據
        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;//是否统计失败
        LogModel logModel = new LogModel();
        errorModels = new ArrayList<ErrorModel>();
        for (int i = 0; i < signFamilies.size(); i++) {
            SignFamilyRenew signFamily = signFamilies.get(i);
            String orgCode = signFamily.getHospital();
            if (StringUtils.isEmpty(orgCode)) {
                errorModels.add(ErrorModel.newEM(signFamily.getCode(), ErrorModel.sign_hospital_null));
                isAll = false;
                errorCount++;
                continue;
            }
            if (orgCode.length() != 10) {
                errorModels.add(ErrorModel.newEM(signFamily.getCode(), ErrorModel.sign_hospital_isTest));
                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) {
                errorModels.add(ErrorModel.newEM(signFamily.getCode(), ErrorModel.sign_hospital_noExist));
                isAll = false;
                errorCount++;
                continue;
            }
            String town = hospital.getTown();
            if (StringUtils.isEmpty(town)) {
                errorModels.add(ErrorModel.newEM(signFamily.getCode(), ErrorModel.sign_town_null));
                isAll = false;
                errorCount++;
                continue;
            }
            Town townObj = townsMap.get(town);
            if (townObj == null) {
                errorModels.add(ErrorModel.newEM(signFamily.getCode(), ErrorModel.sign_town_noExist));
                isAll = false;
                errorCount++;
                continue;
            }
            String idCard = signFamily.getIdcard();
            if (idCard == null || ((idCard.length() != 18 && idCard.length() != 15))) {
                errorModels.add(ErrorModel.newEM(signFamily.getCode(), ErrorModel.sign_idcard_error));
                isAll = false;
                errorCount++;
                continue;
            }
            Long adminId = signFamily.getAdminTeamId();
            //医生团队列表
            List<Long> adminTeamList = new ArrayList<>();
            if (adminId == null || adminId <= 0) {
                //如果团队是空 把数目给待签约的医生 可能是健康管理师也可以能是全科
                if (!StringUtils.isEmpty(signFamily.getDoctor())) {
                    //找出全科医生所在的团队
                    String sqlD = "select DISTINCT team_id from wlyy_admin_team_member w where w.doctor_code='" + signFamily.getDoctor() + "'";
                    adminTeamList = jdbcTemplate.queryForList(sqlD, Long.class);
                    if (adminTeamList == null && adminTeamList.size() == 0) {
                        errorModels.add(ErrorModel.newEM(signFamily.getCode(), ErrorModel.sign_adminTeam_null));
                        isAll = false;
                        errorCount++;
                        continue;
                    }
                } else if (!StringUtils.isEmpty(signFamily.getDoctorHealth())) {
                    //找出健康管理师所在的团队
                    String sqlD = "select DISTINCT team_id from wlyy_admin_team_member w where w.doctor_code='" + signFamily.getDoctorHealth() + "'  ";
                    adminTeamList = jdbcTemplate.queryForList(sqlD, Long.class);
                    if (adminTeamList == null && adminTeamList.size() == 0) {
                        errorModels.add(ErrorModel.newEM(signFamily.getCode(), ErrorModel.sign_adminTeam_null));
                        isAll = false;
                        errorCount++;
                        continue;
                    }
                } else {
                    errorModels.add(ErrorModel.newEM(signFamily.getCode(), ErrorModel.sign_adminTeam_null));
                    isAll = false;
                    errorCount++;
                    continue;
                }
            }
            //设置二级维度的Key
            String returnLevel2Key = getLevel2Key(level2Key, signFamily);
            String returnLevel3Key = getLevel3Key(level3Key, signFamily);
            if (StringUtils.isEmpty(returnLevel2Key)) {
                //没有二级维度
                for (int teamNum = 0; teamNum < adminTeamList.size(); teamNum++) {
                    ETLModel etlModel = new ETLModel();
                    etlModel.setHospital(orgCodeTemp);
                    etlModel.setTown(hospital.getTown());
                    etlModel.setCity(Constant.city);
                    etlModel.setAdminTeam(adminTeamList.get(teamNum) + "");
                    etlModelList.add(etlModel);
                }
            } else {
                String[] level2Keys = returnLevel2Key.split(",");
                for (int j = 0; j < level2Keys.length; j++) {
                    for (int teamNum = 0; teamNum < adminTeamList.size(); teamNum++) {
                        ETLModel etlModel = new ETLModel();
                        etlModel.setLevel2Key(level2Keys[j]);
                        etlModel.setLevel3Key(returnLevel3Key);
                        etlModel.setHospital(orgCodeTemp);
                        etlModel.setTown(hospital.getTown());
                        etlModel.setCity(Constant.city);
                        etlModel.setAdminTeam(teamNum + "");
                        etlModelList.add(etlModel);
                    }
                }
            }
            //统计数目+1
            cityCount++;
            townCount++;
            orgCount++;
            adminCount++;
        }
        logModel.setDate(filterDate);
        logModel.setEndTime(new Date());
        logModel.setExcuteSql(sql);
        logModel.setSuccess(isAll);
        logModel.setAllNum(signFamilies.size());
        logModel.setSuccessNum(adminCount.intValue());
        logModel.setModelList(errorModels);
        logModel.setErrorNum(errorCount.intValue());
        //String message=saveContent(signFamilies.size(),adminCount,orgCount,townCount,cityCount,isAll,errorContent,errorCount,sql,filterDate);
        return FilterModel.getFiltrerMode(logModel, etlModelList, isAll);
    }
}

+ 538 - 446
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/storage/DBStorage.java

@ -17,6 +17,7 @@ import com.yihu.wlyy.statistics.util.DateUtil;
import com.yihu.wlyy.statistics.vo.WlyyQuotaVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.scheduling.annotation.Async;
@ -40,7 +41,7 @@ import java.util.*;
@Component
@Scope("prototype")
public class DBStorage   {
public class DBStorage {
    private WlyyQuotaVO wlyyQuota;//指标对象
    private Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
    private Map<String, Hospital> hospitalsMap = new HashMap<String, Hospital>();
@ -57,20 +58,19 @@ public class DBStorage   {
    private JdbcTemplate jdbcTemplate;
    /**
     * 保存一级维度的数据
     *
     * @param data
     * @param date
     * @param wlyyQuota
     * @throws Exception
     */
    public void saveByLevel1(List<Map<String, List<ETLModel>>> data,String date,WlyyQuotaVO wlyyQuota) throws Exception {
        this.wlyyQuota=wlyyQuota;
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
    public void saveByLevel1(List<Map<String, List<ETLModel>>> data, String date, WlyyQuotaVO wlyyQuota) throws Exception {
        this.wlyyQuota = wlyyQuota;
        List<AdminTeam> adminTeams = doctorAdminTeamDao.findAllTeam();
        for (AdminTeam adminTeam : adminTeams) {
            adminTeamMap.put(adminTeam.getId()+"", adminTeam);
            adminTeamMap.put(adminTeam.getId() + "", adminTeam);
        }
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospitalzxFWZ();
@ -84,33 +84,34 @@ public class DBStorage   {
        }
        //全部的市
        Map<String, City> cityMap = new HashMap<String, City>();
        City city=new City();
        City city = new City();
        city.setCode(Constant.city);
        city.setName(Constant.cityName);
        cityMap.put(Constant.city,city);
        cityMap.put(Constant.city, city);
        //保存团队
        saveAll(saveAdminTeamDataLevel1(data.get(0),date,adminTeamMap));
        saveAll(saveAdminTeamDataLevel1(data.get(0), date, adminTeamMap));
        //保存机构
        saveAll(saveHospitalTeamDataLevel1(data.get(1),date,hospitalsMap));
        saveAll(saveHospitalTeamDataLevel1(data.get(1), date, hospitalsMap));
        //保存区
        saveAll(saveTownTeamDataLevel1(data.get(2),date,townsMap));
        saveAll(saveTownTeamDataLevel1(data.get(2), date, townsMap));
        //保存市
        saveAll(saveCityTeamDataLevel1(data.get(3),date,cityMap));
        saveAll(saveCityTeamDataLevel1(data.get(3), date, cityMap));
    }
    /**
            * 保存一级维度的数据
    * @param data
    * @param date
    * @param wlyyQuota
    * @throws Exception
    */
    public List<WlyyQuotaResult> getLevel1(List<Map<String, List<ETLModel>>> data,String date,WlyyQuotaVO wlyyQuota) throws Exception {
        List<WlyyQuotaResult> returnList=new ArrayList<WlyyQuotaResult>();
        this.wlyyQuota=wlyyQuota;
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
     * 保存一级维度的数据
     *
     * @param data
     * @param date
     * @param wlyyQuota
     * @throws Exception
     */
    public List<WlyyQuotaResult> getLevel1(List<Map<String, List<ETLModel>>> data, String date, WlyyQuotaVO wlyyQuota) throws Exception {
        List<WlyyQuotaResult> returnList = new ArrayList<WlyyQuotaResult>();
        this.wlyyQuota = wlyyQuota;
        List<AdminTeam> adminTeams = doctorAdminTeamDao.findAllTeam();
        for (AdminTeam adminTeam : adminTeams) {
            adminTeamMap.put(adminTeam.getId()+"", adminTeam);
            adminTeamMap.put(adminTeam.getId() + "", adminTeam);
        }
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospitalzxFWZ();
@ -124,48 +125,52 @@ public class DBStorage   {
        }
        //全部的市
        Map<String, City> cityMap = new HashMap<String, City>();
        City city=new City();
        City city = new City();
        city.setCode(Constant.city);
        city.setName(Constant.cityName);
        cityMap.put(Constant.city,city);
        cityMap.put(Constant.city, city);
        //保存团队
        returnList.addAll(saveAdminTeamDataLevel1(data.get(0),date,adminTeamMap));
        returnList.addAll(saveAdminTeamDataLevel1(data.get(0), date, adminTeamMap));
        //保存机构
        returnList.addAll(saveHospitalTeamDataLevel1(data.get(1),date,hospitalsMap));
        returnList.addAll(saveHospitalTeamDataLevel1(data.get(1), date, hospitalsMap));
        //保存区
        returnList.addAll(saveTownTeamDataLevel1(data.get(2),date,townsMap));
        returnList.addAll(saveTownTeamDataLevel1(data.get(2), date, townsMap));
        //保存市
        returnList.addAll(saveCityTeamDataLevel1(data.get(3),date,cityMap));
        returnList.addAll(saveCityTeamDataLevel1(data.get(3), date, cityMap));
        return returnList;
    }
    /**
     * 保存二级维度
     *
     * @param data
     * @param day
     * @param wlyyQuota
     * @param foreachNum 标识二级维度循环的次数  例如 年龄就传6  性别就传3
     * @param type 1 性别 2 年龄 3 用户分组 4.签约费用 5 健康分布  6年龄2  7 年龄疾病
     * @param type       1 性别 2 年龄 3 用户分组 4.签约费用 5 健康分布  6年龄2  7 年龄疾病
     */
    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;
    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.签约费用 5 健康分布  6年龄2  7 年龄疾病
     * @param start 起始位置 默认是1
     * @param type       1 性别 2 年龄 3 用户分组 4.签约费用 5 健康分布  6年龄2  7 年龄疾病
     * @param start      起始位置 默认是1
     */
    public List<WlyyQuotaResult> getLevel2(List<Map<String, Map<String, List<ETLModel>>>> data, String day, WlyyQuotaVO wlyyQuota,Integer foreachNum,Integer type,Integer start)throws Exception {
        List<WlyyQuotaResult> returnList=new ArrayList<WlyyQuotaResult>();
        this.wlyyQuota=wlyyQuota;
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
    public List<WlyyQuotaResult> getLevel2(List<Map<String, Map<String, List<ETLModel>>>> data, String day, WlyyQuotaVO wlyyQuota, Integer foreachNum, Integer type, Integer start) throws Exception {
        List<WlyyQuotaResult> returnList = new ArrayList<WlyyQuotaResult>();
        this.wlyyQuota = wlyyQuota;
        List<AdminTeam> adminTeams = doctorAdminTeamDao.findAllTeam();
        for (AdminTeam adminTeam : adminTeams) {
            adminTeamMap.put(adminTeam.getId()+"", adminTeam);
            adminTeamMap.put(adminTeam.getId() + "", adminTeam);
        }
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospitalzxFWZ();
@ -178,54 +183,58 @@ public class DBStorage   {
            townsMap.put(town.getCode(), town);
        }
        //全部的市
        City city=new City();
        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);
        cityMap.put(Constant.city, city);
        //保存团队
        returnList.addAll(saveAdminTeamDataLevel2(data.get(0),day,adminTeamMap,foreachNum,type,start));
        returnList.addAll(saveAdminTeamDataLevel2(data.get(0), day, adminTeamMap, foreachNum, type, start));
        //保存机构
        returnList.addAll(saveHospitalTeamDataLevel2(data.get(1),day,hospitalsMap,foreachNum,type,start));
        returnList.addAll(saveHospitalTeamDataLevel2(data.get(1), day, hospitalsMap, foreachNum, type, start));
        //保存区
        returnList.addAll(saveTownTeamDataLevel2(data.get(2),day,townsMap,foreachNum,type,start));
        returnList.addAll(saveTownTeamDataLevel2(data.get(2), day, townsMap, foreachNum, type, start));
        //保存市
        returnList.addAll(saveCityTeamDataLevel2(data.get(3),day,cityMap,foreachNum,type,start));
        returnList.addAll(saveCityTeamDataLevel2(data.get(3), day, cityMap, foreachNum, type, start));
        return returnList;
    }
    /**
     * 保存二级维度
     *
     * @param data
     * @param day
     * @param wlyyQuota
     * @param foreachNum 如果start是默认的 标识二级维度循环的次数  例如 年龄就传6  性别就传3
     * @param type 1 性别 2 年龄 3 用户分组 4.签约费用 5 健康分布
     * @param start 起始位置 默认是1
     * @param type       1 性别 2 年龄 3 用户分组 4.签约费用 5 健康分布 6年龄2  7年龄疾病 8 回复时间 9续签原因
     * @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;
                             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 type2 1性别 2年龄 3用户分组 4.签约费用 5健康服务 6年龄2
     * @param type3 1 疾病分组
     * @param type2       1性别 2年龄 3用户分组 4.签约费用 5健康服务 6年龄2
     * @param type3       1 疾病分组
     */
    public void saveByLevel3(List<Map<String, Map<String, Map<String, List<ETLModel>>>>> data, String day, WlyyQuotaVO wlyyQuota,Integer foreachNum2,Integer foreachNum3,Integer type2,Integer type3) throws Exception{
        Integer start2=1;
        Integer start3=1;
        this.wlyyQuota=wlyyQuota;
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
    public void saveByLevel3(List<Map<String, Map<String, Map<String, List<ETLModel>>>>> data, String day, WlyyQuotaVO wlyyQuota, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3) throws Exception {
        Integer start2 = 1;
        Integer start3 = 1;
        this.wlyyQuota = wlyyQuota;
        List<AdminTeam> adminTeams = doctorAdminTeamDao.findAllTeam();
        for (AdminTeam adminTeam : adminTeams) {
            adminTeamMap.put(adminTeam.getId()+"", adminTeam);
            adminTeamMap.put(adminTeam.getId() + "", adminTeam);
        }
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospitalzxFWZ();
@ -238,44 +247,45 @@ public class DBStorage   {
            townsMap.put(town.getCode(), town);
        }
        //全部的市
        City city=new City();
        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);
        cityMap.put(Constant.city, city);
        //保存团队
        saveAdminTeamDataLevel3(data.get(0),day,adminTeamMap,foreachNum2,foreachNum3,type2,type3,start2,start3);
        saveAdminTeamDataLevel3(data.get(0), day, adminTeamMap, foreachNum2, foreachNum3, type2, type3, start2, start3);
        //保存机构
        saveHospitalTeamDataLevel3(data.get(1),day,hospitalsMap,foreachNum2,foreachNum3,type2,type3,start2,start3);
        saveHospitalTeamDataLevel3(data.get(1), day, hospitalsMap, foreachNum2, foreachNum3, type2, type3, start2, start3);
        //保存区
        saveTownTeamDataLevel3(data.get(2),day,townsMap,foreachNum2,foreachNum3,type2,type3,start2,start3);
        saveTownTeamDataLevel3(data.get(2), day, townsMap, foreachNum2, foreachNum3, type2, type3, start2, start3);
        //保存市
        saveCityTeamDataLevel3(data.get(3),day,cityMap,foreachNum2,foreachNum3,type2,type3,start2,start3);
        saveCityTeamDataLevel3(data.get(3), day, cityMap, foreachNum2, foreachNum3, type2, type3, start2, start3);
    }
    /**
     * 保存三级维度
     *
     * @param data
     * @param day
     * @param wlyyQuota
     * @param foreachNum2 标识二级维度循环的次数  例如 年龄就传6  性别就传3
     * @param foreachNum3 标识三级维度循环的次数  例如 年龄就传6  性别就传3
     * @param type2 1 性别 2 年龄 3 用户分组 4.签约费用 5健康服务 6年龄2
     * @param type3 1 疾病类型
     * @param start2 耳機維度起始位置 默认是1
     * @param start3 耳機維度起始位置 默认是1
     * @param type2       1 性别 2 年龄 3 用户分组 4.签约费用 5健康服务 6年龄2
     * @param type3       1 疾病类型
     * @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 type2,Integer type3,Integer start2,Integer start3) throws Exception{
        if(start2==null){
            start2=1;
    public void saveByLevel3(List<Map<String, Map<String, Map<String, List<ETLModel>>>>> data, String day, WlyyQuotaVO wlyyQuota, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3, Integer start2, Integer start3) throws Exception {
        if (start2 == null) {
            start2 = 1;
        }
        if(start3==null){
            start2=1;
        if (start3 == null) {
            start2 = 1;
        }
        this.wlyyQuota=wlyyQuota;
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
        this.wlyyQuota = wlyyQuota;
        List<AdminTeam> adminTeams = doctorAdminTeamDao.findAllTeam();
        for (AdminTeam adminTeam : adminTeams) {
            adminTeamMap.put(adminTeam.getId()+"", adminTeam);
            adminTeamMap.put(adminTeam.getId() + "", adminTeam);
        }
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospitalzxFWZ();
@ -288,197 +298,199 @@ public class DBStorage   {
            townsMap.put(town.getCode(), town);
        }
        //全部的市
        City city=new City();
        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);
        cityMap.put(Constant.city, city);
        //保存团队
        saveAdminTeamDataLevel3(data.get(0),day,adminTeamMap,foreachNum2,foreachNum3,type2,type3,start2,start3);
        saveAdminTeamDataLevel3(data.get(0), day, adminTeamMap, foreachNum2, foreachNum3, type2, type3, start2, start3);
        //保存机构
        saveHospitalTeamDataLevel3(data.get(1),day,hospitalsMap,foreachNum2,foreachNum3,type2,type3,start2,start3);
        saveHospitalTeamDataLevel3(data.get(1), day, hospitalsMap, foreachNum2, foreachNum3, type2, type3, start2, start3);
        //保存区
        saveTownTeamDataLevel3(data.get(2),day,townsMap,foreachNum2,foreachNum3,type2,type3,start2,start3);
        saveTownTeamDataLevel3(data.get(2), day, townsMap, foreachNum2, foreachNum3, type2, type3, start2, start3);
        //保存市
        saveCityTeamDataLevel3(data.get(3),day,cityMap,foreachNum2,foreachNum3,type2,type3,start2,start3);
        saveCityTeamDataLevel3(data.get(3), day, cityMap, foreachNum2, foreachNum3, type2, type3, 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 type2,Integer type3, Integer start2, Integer start3)throws  Exception {
        List<WlyyQuotaResult> wlyyQuotaResults=new ArrayList<WlyyQuotaResult>();
    private void saveAdminTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap, String day, Map<String, AdminTeam> adminTeamMap, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3, Integer start2, Integer start3) throws Exception {
        List<WlyyQuotaResult> wlyyQuotaResults = new ArrayList<WlyyQuotaResult>();
        //遍历团队的Map
        for(Map.Entry<String,AdminTeam> oneAdminTeam:adminTeamMap.entrySet()){
        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=null;
                 if(twoETLMap!=null){
                     threeETLMap=twoETLMap.get(i+"");
                 }
                 for(int j=start3;j<=foreachNum3;j++){
                     int num=0;
                     if(threeETLMap!=null){
                         List<ETLModel> etlModelList= threeETLMap.get(j+"");
                         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 level2Name=getLevel2Name(level2,type2);
                     String level3Name=getLevel3Name(level3,type3);
                     wlyyQuotaResults.add(save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level,level2,level2Name,level3,level3Name,day));
            Map<String, Map<String, List<ETLModel>>> twoETLMap = etlModelMap.get(oneAdminTeam.getKey());
            for (int i = start2; i <= foreachNum2; i++) {
                //得到每个团队的三级维度
                Map<String, List<ETLModel>> threeETLMap = null;
                if (twoETLMap != null) {
                    threeETLMap = twoETLMap.get(i + "");
                }
                for (int j = start3; j <= foreachNum3; j++) {
                    int num = 0;
                    if (threeETLMap != null) {
                        List<ETLModel> etlModelList = threeETLMap.get(j + "");
                        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 level2Name = getLevel2Name(level2, type2);
                    String level3Name = getLevel3Name(level3, type3);
                    wlyyQuotaResults.add(save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level, level2, level2Name, level3, level3Name, day));
                }
            }
        }
        saveAll(wlyyQuotaResults);
    }
    private void saveHospitalTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap, String day, Map<String, Hospital> hospitalsMap, Integer foreachNum2, Integer foreachNum3, Integer type2,Integer type3, Integer start2, Integer start3) throws  Exception{
        List<WlyyQuotaResult> wlyyQuotaResults=new ArrayList<WlyyQuotaResult>();
    private void saveHospitalTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap, String day, Map<String, Hospital> hospitalsMap, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3, Integer start2, Integer start3) throws Exception {
        List<WlyyQuotaResult> wlyyQuotaResults = new ArrayList<WlyyQuotaResult>();
        //遍历团队的Map
        for(Map.Entry<String,Hospital> oneHospital:hospitalsMap.entrySet()){
        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, 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+"");
                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;
                    if(threeETLMap!=null&&threeETLMap.size()>0){
                        List<ETLModel> etlModelList= threeETLMap.get(j+"");
                        if(etlModelList!=null&&etlModelList.size()>0){
                            num=etlModelList.size();
                for (int j = start3; j <= foreachNum3; j++) {
                    int num = 0;
                    if (threeETLMap != null && threeETLMap.size() > 0) {
                        List<ETLModel> etlModelList = threeETLMap.get(j + "");
                        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="2";
                    String level2=i+"";
                    String level3=j+"";
                    String level2Name=getLevel2Name(level2,type2);
                    String level3Name=getLevel3Name(level3,type3);
                   wlyyQuotaResults.add( save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level,level2,level2Name,level3,level3Name,day));
                    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 = "2";
                    String level2 = i + "";
                    String level3 = j + "";
                    String level2Name = getLevel2Name(level2, type2);
                    String level3Name = getLevel3Name(level3, type3);
                    wlyyQuotaResults.add(save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level, level2, level2Name, level3, level3Name, day));
                }
            }
        }
        saveAll(wlyyQuotaResults);
    }
    private void saveTownTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap, String day, Map<String, Town> townsMap, Integer foreachNum2, Integer foreachNum3, Integer type2,Integer type3,  Integer start2, Integer start3) throws  Exception{
        List<WlyyQuotaResult> wlyyQuotaResults=new ArrayList<WlyyQuotaResult>();
    private void saveTownTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap, String day, Map<String, Town> townsMap, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3, Integer start2, Integer start3) throws Exception {
        List<WlyyQuotaResult> wlyyQuotaResults = new ArrayList<WlyyQuotaResult>();
        //遍历团队的Map
        for(Map.Entry<String,Town> oneTownTeam:townsMap.entrySet()){
        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, 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+"");
                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;
                    if(threeETLMap!=null&&threeETLMap.size()>0){
                        List<ETLModel> etlModelList= threeETLMap.get(j+"");
                        if(etlModelList!=null&&etlModelList.size()>0){
                            num=etlModelList.size();
                for (int j = start3; j <= foreachNum3; j++) {
                    int num = 0;
                    if (threeETLMap != null && threeETLMap.size() > 0) {
                        List<ETLModel> etlModelList = threeETLMap.get(j + "");
                        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="3";
                    String level2=i+"";
                    String level3=j+"";
                    String level2Name=getLevel2Name(level2,type2);
                    String level3Name=getLevel3Name(level3,type3);
                   wlyyQuotaResults.add(save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level,level2,level2Name,level3,level3Name,day));
                    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 = "3";
                    String level2 = i + "";
                    String level3 = j + "";
                    String level2Name = getLevel2Name(level2, type2);
                    String level3Name = getLevel3Name(level3, type3);
                    wlyyQuotaResults.add(save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level, level2, level2Name, level3, level3Name, day));
                }
            }
        }
        saveAll((wlyyQuotaResults));
    }
    private void saveCityTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap, String day, Map<String, City> cityMap, Integer foreachNum2, Integer foreachNum3, Integer type2,Integer type3,  Integer start2, Integer start3) throws  Exception{
        List<WlyyQuotaResult> wlyyQuotaResults=new ArrayList<WlyyQuotaResult>();
    private void saveCityTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap, String day, Map<String, City> cityMap, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3, Integer start2, Integer start3) throws Exception {
        List<WlyyQuotaResult> wlyyQuotaResults = new ArrayList<WlyyQuotaResult>();
        //遍历团队的Map
        for(Map.Entry<String,City> oneCityTeam:cityMap.entrySet()){
        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, 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+"");
                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;
                    if(threeETLMap!=null&&threeETLMap.size()>0){
                        List<ETLModel> etlModelList= threeETLMap.get(j+"");
                        if(etlModelList!=null&&etlModelList.size()>0){
                            num=etlModelList.size();
                for (int j = start3; j <= foreachNum3; j++) {
                    int num = 0;
                    if (threeETLMap != null && threeETLMap.size() > 0) {
                        List<ETLModel> etlModelList = threeETLMap.get(j + "");
                        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="4";
                    String level2=i+"";
                    String level3=j+"";
                    String level2Name=getLevel2Name(level2,type2);
                    String level3Name=getLevel3Name(level3,type3);
                    wlyyQuotaResults.add(save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level,level2,level2Name,level3,level3Name,day));
                    String city = Constant.city;
                    String cityName = Constant.cityName;
                    String town = "";
                    String townName = "";
                    String org = "";
                    String orgName = "";
                    String doctorCode = "";
                    String doctorName = "";
                    String doctorJob = "";
                    String level = "4";
                    String level2 = i + "";
                    String level3 = j + "";
                    String level2Name = getLevel2Name(level2, type2);
                    String level3Name = getLevel3Name(level3, type3);
                    wlyyQuotaResults.add(save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level, level2, level2Name, level3, level3Name, day));
                }
            }
        }
        saveAll(wlyyQuotaResults);
    }
    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();
    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);
            adminTeamMap.put(adminTeam.getId() + "", adminTeam);
        }
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospitalzxFWZ();
@ -491,261 +503,262 @@ public class DBStorage   {
            townsMap.put(town.getCode(), town);
        }
        //全部的市
        City city=new City();
        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);
        cityMap.put(Constant.city, city);
        //保存团队
        saveAll( saveAdminTeamDataLevel2(data.get(0),day,adminTeamMap,foreachNum,type,start));
        saveAll(saveAdminTeamDataLevel2(data.get(0), day, adminTeamMap, foreachNum, type, start));
        //保存机构
        saveAll( saveHospitalTeamDataLevel2(data.get(1),day,hospitalsMap,foreachNum,type,start));
        saveAll(saveHospitalTeamDataLevel2(data.get(1), day, hospitalsMap, foreachNum, type, start));
        //保存区
        saveAll( saveTownTeamDataLevel2(data.get(2),day,townsMap,foreachNum,type,start));
        saveAll(saveTownTeamDataLevel2(data.get(2), day, townsMap, foreachNum, type, start));
        //保存市
        saveAll( saveCityTeamDataLevel2(data.get(3),day,cityMap,foreachNum,type,start));
        saveAll(saveCityTeamDataLevel2(data.get(3), day, cityMap, foreachNum, type, start));
    }
    private List<WlyyQuotaResult> saveCityTeamDataLevel2(Map<String, Map<String, List<ETLModel>>> etlModelMap, String day, Map<String, City> citysMap ,Integer foreachNum,Integer type,Integer start) throws  Exception{
        List<WlyyQuotaResult> wlyyQuotaResults=new ArrayList<WlyyQuotaResult>();
         for(Map.Entry<String,City> oneCity:citysMap.entrySet()){
             Map<String, List<ETLModel>> oneELTMap= etlModelMap.get(oneCity.getKey());
             for(int i=start;i<=foreachNum;i++){
                 int num=0;
                 if(oneELTMap!=null){
                     List<ETLModel> etlModel= oneELTMap.get(i+"");
                     if(etlModel!=null&&etlModel.size()>0){
                         num=etlModel.size();
                     }
                 }
                 City cityObj=oneCity.getValue();
                 String city=cityObj.getCode();
                 String cityName=cityObj.getName();
                 String town="";
                 String townName="";
                 String org="";
                 String orgName="";
                 String doctorCode="";
                 String doctorName="";
                 String doctorJob="";
                 String level="4";
                 String level2=i+"";
                 String level2Name=getLevel2Name(level2,type);
                 wlyyQuotaResults.add(save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level,level2,level2Name,null,null,day));
             }
         }
    private List<WlyyQuotaResult> saveCityTeamDataLevel2(Map<String, Map<String, List<ETLModel>>> etlModelMap, String day, Map<String, City> citysMap, Integer foreachNum, Integer type, Integer start) throws Exception {
        List<WlyyQuotaResult> wlyyQuotaResults = new ArrayList<WlyyQuotaResult>();
        for (Map.Entry<String, City> oneCity : citysMap.entrySet()) {
            Map<String, List<ETLModel>> oneELTMap = etlModelMap.get(oneCity.getKey());
            for (int i = start; i <= foreachNum; i++) {
                int num = 0;
                if (oneELTMap != null) {
                    List<ETLModel> etlModel = oneELTMap.get(i + "");
                    if (etlModel != null && etlModel.size() > 0) {
                        num = etlModel.size();
                    }
                }
                City cityObj = oneCity.getValue();
                String city = cityObj.getCode();
                String cityName = cityObj.getName();
                String town = "";
                String townName = "";
                String org = "";
                String orgName = "";
                String doctorCode = "";
                String doctorName = "";
                String doctorJob = "";
                String level = "4";
                String level2 = i + "";
                String level2Name = getLevel2Name(level2, type);
                wlyyQuotaResults.add(save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level, level2, level2Name, null, null, day));
            }
        }
        return wlyyQuotaResults;
    }
    private List<WlyyQuotaResult> saveTownTeamDataLevel2(Map<String, Map<String, List<ETLModel>>> etlModelMap, String day, Map<String, Town> townsMap ,Integer foreachNum,Integer type,Integer start)throws  Exception {
        List<WlyyQuotaResult> wlyyQuotaResults=new ArrayList<WlyyQuotaResult>();
        for(Map.Entry<String,Town> oneTown:townsMap.entrySet()){
            Map<String, List<ETLModel>> oneELTMap= etlModelMap.get(oneTown.getKey());
            for(int i=start;i<=foreachNum;i++){
                int num=0;
                if(oneELTMap!=null){
                    List<ETLModel> etlModel= oneELTMap.get(i+"");
                    if(etlModel!=null&&etlModel.size()>0){
                        num=etlModel.size();
    private List<WlyyQuotaResult> saveTownTeamDataLevel2(Map<String, Map<String, List<ETLModel>>> etlModelMap, String day, Map<String, Town> townsMap, Integer foreachNum, Integer type, Integer start) throws Exception {
        List<WlyyQuotaResult> wlyyQuotaResults = new ArrayList<WlyyQuotaResult>();
        for (Map.Entry<String, Town> oneTown : townsMap.entrySet()) {
            Map<String, List<ETLModel>> oneELTMap = etlModelMap.get(oneTown.getKey());
            for (int i = start; i <= foreachNum; i++) {
                int num = 0;
                if (oneELTMap != null) {
                    List<ETLModel> etlModel = oneELTMap.get(i + "");
                    if (etlModel != null && etlModel.size() > 0) {
                        num = etlModel.size();
                    }
                }
                Town townObj=oneTown.getValue();
                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="3";
                String level2=i+"";
                String level2Name=getLevel2Name(level2,type);
                wlyyQuotaResults.add(save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level,level2,level2Name,null,null,day));
                Town townObj = oneTown.getValue();
                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 = "3";
                String level2 = i + "";
                String level2Name = getLevel2Name(level2, type);
                wlyyQuotaResults.add(save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level, level2, level2Name, null, null, day));
            }
        }
        return wlyyQuotaResults;
    }
    private List<WlyyQuotaResult> saveHospitalTeamDataLevel2(Map<String, Map<String, List<ETLModel>>> etlModelMap, String day, Map<String, Hospital> hospitalsMap,Integer foreachNum,Integer type,Integer start)throws  Exception {
        List<WlyyQuotaResult> wlyyQuotaResults=new ArrayList<WlyyQuotaResult>();
        for(Map.Entry<String,Hospital> oneHospital:hospitalsMap.entrySet()){
            Map<String, List<ETLModel>> oneELTMap= etlModelMap.get(oneHospital.getKey());
            for(int i=start;i<=foreachNum;i++){
                int num=0;
                if(oneELTMap!=null){
                    List<ETLModel> etlModel= oneELTMap.get(i+"");
                    if(etlModel!=null&&etlModel.size()>0){
                        num=etlModel.size();
    private List<WlyyQuotaResult> saveHospitalTeamDataLevel2(Map<String, Map<String, List<ETLModel>>> etlModelMap, String day, Map<String, Hospital> hospitalsMap, Integer foreachNum, Integer type, Integer start) throws Exception {
        List<WlyyQuotaResult> wlyyQuotaResults = new ArrayList<WlyyQuotaResult>();
        for (Map.Entry<String, Hospital> oneHospital : hospitalsMap.entrySet()) {
            Map<String, List<ETLModel>> oneELTMap = etlModelMap.get(oneHospital.getKey());
            for (int i = start; i <= foreachNum; i++) {
                int num = 0;
                if (oneELTMap != null) {
                    List<ETLModel> etlModel = oneELTMap.get(i + "");
                    if (etlModel != null && etlModel.size() > 0) {
                        num = etlModel.size();
                    }
                }
                Hospital hospital = oneHospital.getValue();//得到全科医生的机构
                if(hospital==null)continue;
                String city=Constant.city;
                String cityName=Constant.cityName;
                String town=hospital.getTown();
                String townName=hospital.getTownName();
                String org=getOrg(hospital.getCode());
                String orgName=hospital.getName();
                String doctorCode="";
                String doctorName="";
                String doctorJob="";
                String level="2";
                String level2=i+"";
                String level2Name=getLevel2Name(level2,type);
                wlyyQuotaResults.add(save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level,level2,level2Name,null,null,day));
                if (hospital == null) continue;
                String city = Constant.city;
                String cityName = Constant.cityName;
                String town = hospital.getTown();
                String townName = hospital.getTownName();
                String org = getOrg(hospital.getCode());
                String orgName = hospital.getName();
                String doctorCode = "";
                String doctorName = "";
                String doctorJob = "";
                String level = "2";
                String level2 = i + "";
                String level2Name = getLevel2Name(level2, type);
                wlyyQuotaResults.add(save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level, level2, level2Name, null, null, day));
            }
        }
       return wlyyQuotaResults;
        return wlyyQuotaResults;
    }
    private List<WlyyQuotaResult> saveAdminTeamDataLevel2(Map<String, Map<String, List<ETLModel>>> etlModelMap, String day, Map<String, AdminTeam> adminTeamMap,Integer foreachNum,Integer type,Integer start)throws  Exception {
        List<WlyyQuotaResult> wlyyQuotaResults=new ArrayList<WlyyQuotaResult>();
        for(Map.Entry<String,AdminTeam> adminTeam:adminTeamMap.entrySet()){
            Map<String, List<ETLModel>> oneELTMap= etlModelMap.get(adminTeam.getKey());
            for(int i=start;i<=foreachNum;i++){
                int num=0;
                if(oneELTMap!=null){
                    List<ETLModel> etlModel= oneELTMap.get(i+"");
                    if(etlModel!=null&&etlModel.size()>0){
                        num=etlModel.size();
    private List<WlyyQuotaResult> saveAdminTeamDataLevel2(Map<String, Map<String, List<ETLModel>>> etlModelMap, String day, Map<String, AdminTeam> adminTeamMap, Integer foreachNum, Integer type, Integer start) throws Exception {
        List<WlyyQuotaResult> wlyyQuotaResults = new ArrayList<WlyyQuotaResult>();
        for (Map.Entry<String, AdminTeam> adminTeam : adminTeamMap.entrySet()) {
            Map<String, List<ETLModel>> oneELTMap = etlModelMap.get(adminTeam.getKey());
            for (int i = start; i <= foreachNum; i++) {
                int num = 0;
                if (oneELTMap != null) {
                    List<ETLModel> etlModel = oneELTMap.get(i + "");
                    if (etlModel != null && etlModel.size() > 0) {
                        num = etlModel.size();
                    }
                }
                AdminTeam adminTeamObj = adminTeamMap.get(adminTeam.getKey());//团队
                if(adminTeamObj==null)continue;
                String orgCodeTemp=getOrg(adminTeamObj.getOrgCode());
                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 level2Name=getLevel2Name(level2,type);
                wlyyQuotaResults.add(save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level,level2,level2Name,null,null,day));
                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 level2Name = getLevel2Name(level2, type);
                wlyyQuotaResults.add(save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level, level2, level2Name, null, null, day));
            }
        }
       return wlyyQuotaResults;
        return wlyyQuotaResults;
    }
    private  List<WlyyQuotaResult>  saveAdminTeamDataLevel1(Map<String, List<ETLModel>> mapData,String date,Map<String, AdminTeam> adminTeamMap)throws  Exception {
        List<WlyyQuotaResult> wlyyQuotaResults=new ArrayList<WlyyQuotaResult>();
        for(Map.Entry<String, AdminTeam> entry:adminTeamMap.entrySet()){
            List<ETLModel> etlModel= mapData.get(entry.getKey());
            int num=0;
            if(etlModel!=null&&etlModel.size()>0){
                num=etlModel.size();
    private List<WlyyQuotaResult> saveAdminTeamDataLevel1(Map<String, List<ETLModel>> mapData, String date, Map<String, AdminTeam> adminTeamMap) throws Exception {
        List<WlyyQuotaResult> wlyyQuotaResults = new ArrayList<WlyyQuotaResult>();
        for (Map.Entry<String, AdminTeam> entry : adminTeamMap.entrySet()) {
            List<ETLModel> etlModel = mapData.get(entry.getKey());
            int num = 0;
            if (etlModel != null && etlModel.size() > 0) {
                num = etlModel.size();
            }
            AdminTeam adminTeam = adminTeamMap.get(entry.getKey());//得到全科医生
            if(adminTeam==null)continue;
            String orgCodeTemp=getOrg(adminTeam.getOrgCode());
            if (adminTeam == null) continue;
            String orgCodeTemp = getOrg(adminTeam.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=getOrg(hospital.getCode());
            String orgName=hospital.getName();
            String doctorCode=adminTeam.getId()+"";
            String doctorName=adminTeam.getName();
            String doctorJob="";
            String level="1";
            wlyyQuotaResults.add(save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level,null,null,null,null,date));
        }
       return wlyyQuotaResults;
            if (hospital == null) continue;
            String city = Constant.city;
            String cityName = Constant.cityName;
            String town = hospital.getTown();
            String townName = hospital.getTownName();
            String org = getOrg(hospital.getCode());
            String orgName = hospital.getName();
            String doctorCode = adminTeam.getId() + "";
            String doctorName = adminTeam.getName();
            String doctorJob = "";
            String level = "1";
            wlyyQuotaResults.add(save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level, null, null, null, null, date));
        }
        return wlyyQuotaResults;
    }
    private  List<WlyyQuotaResult>  saveHospitalTeamDataLevel1(Map<String, List<ETLModel>> mapData, String date,  Map<String, Hospital> hospitalsMap )throws  Exception {
        List<WlyyQuotaResult> wlyyQuotaResults=new ArrayList<WlyyQuotaResult>();
        for(Map.Entry<String, Hospital> entry:hospitalsMap.entrySet()){
            List<ETLModel> etlModel= mapData.get(entry.getKey());
            int num=0;
            if(etlModel!=null&&etlModel.size()>0){
                num=etlModel.size();
    private List<WlyyQuotaResult> saveHospitalTeamDataLevel1(Map<String, List<ETLModel>> mapData, String date, Map<String, Hospital> hospitalsMap) throws Exception {
        List<WlyyQuotaResult> wlyyQuotaResults = new ArrayList<WlyyQuotaResult>();
        for (Map.Entry<String, Hospital> entry : hospitalsMap.entrySet()) {
            List<ETLModel> etlModel = mapData.get(entry.getKey());
            int num = 0;
            if (etlModel != null && etlModel.size() > 0) {
                num = etlModel.size();
            }
            Hospital hospital = entry.getValue();//得到全科医生的机构
            String city=Constant.city;
            String cityName=Constant.cityName;
            if(hospital==null)continue;
            String town=hospital.getTown();
            String townName=hospital.getTownName();
            String org=getOrg(hospital.getCode());
            String orgName=hospital.getName();
            String doctorCode="";
            String doctorName="";
            String doctorJob="";
            String level="2";
            wlyyQuotaResults.add( save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level,null,null,null,null,date));
            String city = Constant.city;
            String cityName = Constant.cityName;
            if (hospital == null) continue;
            String town = hospital.getTown();
            String townName = hospital.getTownName();
            String org = getOrg(hospital.getCode());
            String orgName = hospital.getName();
            String doctorCode = "";
            String doctorName = "";
            String doctorJob = "";
            String level = "2";
            wlyyQuotaResults.add(save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level, null, null, null, null, date));
        }
        return wlyyQuotaResults;
    }
    private  List<WlyyQuotaResult>  saveTownTeamDataLevel1(Map<String, List<ETLModel>> mapData, String date,  Map<String, Town> townsMap)throws  Exception {
        List<WlyyQuotaResult> wlyyQuotaResults=new ArrayList<WlyyQuotaResult>();
        for(Map.Entry<String, Town> entry:townsMap.entrySet()){
            List<ETLModel> etlModel= mapData.get(entry.getKey());
            int num=0;
            if(etlModel!=null&&etlModel.size()>0){
                num=etlModel.size();
    private List<WlyyQuotaResult> saveTownTeamDataLevel1(Map<String, List<ETLModel>> mapData, String date, Map<String, Town> townsMap) throws Exception {
        List<WlyyQuotaResult> wlyyQuotaResults = new ArrayList<WlyyQuotaResult>();
        for (Map.Entry<String, Town> entry : townsMap.entrySet()) {
            List<ETLModel> etlModel = mapData.get(entry.getKey());
            int num = 0;
            if (etlModel != null && etlModel.size() > 0) {
                num = etlModel.size();
            }
            Town townObj=entry.getValue();
            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="3";
            wlyyQuotaResults.add(save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level,null,null,null,null,date));
            Town townObj = entry.getValue();
            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 = "3";
            wlyyQuotaResults.add(save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level, null, null, null, null, date));
        }
        return wlyyQuotaResults;
    }
    private  List<WlyyQuotaResult>  saveCityTeamDataLevel1(Map<String, List<ETLModel>> mapData, String date, Map<String, City> cityMap) throws  Exception{
        List<WlyyQuotaResult> wlyyQuotaResults=new ArrayList<WlyyQuotaResult>();
        for(Map.Entry<String, City> entry:cityMap.entrySet()){
            List<ETLModel> etlModel= mapData.get(entry.getKey());
            int num=0;
            if(etlModel!=null&&etlModel.size()>0){
                num=etlModel.size();
    private List<WlyyQuotaResult> saveCityTeamDataLevel1(Map<String, List<ETLModel>> mapData, String date, Map<String, City> cityMap) throws Exception {
        List<WlyyQuotaResult> wlyyQuotaResults = new ArrayList<WlyyQuotaResult>();
        for (Map.Entry<String, City> entry : cityMap.entrySet()) {
            List<ETLModel> etlModel = mapData.get(entry.getKey());
            int num = 0;
            if (etlModel != null && etlModel.size() > 0) {
                num = etlModel.size();
            }
            City cityObj=entry.getValue();
            String city=cityObj.getCode();
            String cityName=cityObj.getName();
            String town="";
            String townName="";
            String org="";
            String orgName="";
            String doctorCode="";
            String doctorName="";
            String doctorJob="";
            String level="4";
           wlyyQuotaResults.add( save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level,null,null,null,null,date));
            City cityObj = entry.getValue();
            String city = cityObj.getCode();
            String cityName = cityObj.getName();
            String town = "";
            String townName = "";
            String org = "";
            String orgName = "";
            String doctorCode = "";
            String doctorName = "";
            String doctorJob = "";
            String level = "4";
            wlyyQuotaResults.add(save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level, null, null, null, null, date));
        }
        return wlyyQuotaResults;
    }
    private String getOrg(String org){
        if(!"00".equals(org.substring(org.length()-2,org.length()))){
            return org.substring(0,org.length()-2)+"00";
        }else{
    private String getOrg(String org) {
        if (!"00".equals(org.substring(org.length() - 2, org.length()))) {
            return org.substring(0, org.length() - 2) + "00";
        } else {
            return org;
        }
    }
    /**
     * 保存方案
     *
     * @param city
     * @param cityName
     * @param town
@ -757,7 +770,7 @@ public class DBStorage   {
     * @param doctorJob
     * @param level1
     */
    private WlyyQuotaResult save(int num,  String city, String cityName, String town, String townName, String org, String orgName, String doctorCode, String doctorName, String doctorJob, String level1, String level2, String level2Name,String level3, String level3Name,String date) {
    private WlyyQuotaResult save(int num, String city, String cityName, String town, String townName, String org, String orgName, String doctorCode, String doctorName, String doctorJob, String level1, String level2, String level2Name, String level3, String level3Name, String date) {
        WlyyQuotaResult wlyyQuotaResult = new WlyyQuotaResult();
        //wlyyQuotaResult.setId(UUID.randomUUID().toString().replace("-",""));
        wlyyQuotaResult.setDel("1");
@ -780,90 +793,169 @@ public class DBStorage   {
        wlyyQuotaResult.setLevel3Type(level3);
        wlyyQuotaResult.setLevel3TypeName(level3Name);
        //判断全科医生是否有改签量
        wlyyQuotaResult.setResult(num+"");
        wlyyQuotaResult.setResult(num + "");
        return wlyyQuotaResult;
    }
    @Async("dbStorageExecutor")
    @Transactional
    private void saveAll(List<WlyyQuotaResult> wlyyQuotaResults) throws  Exception{
    private void saveAll(List<WlyyQuotaResult> wlyyQuotaResults) throws Exception {
        wlyyQuotaResultDao.save(wlyyQuotaResults);
    }
    private String getLevel2Name(String i, Integer type) {
        switch (type){
            case  1:{
        switch (type) {
            case 1: {
                //性别
                return Constant.getLevelSexName(i);
            }
            case  2:{
            case 2: {
                //年龄
                return Constant.getLevelAgeName(i);
            }
            case  3:{
            case 3: {
                //用户分组
                return Constant.getLevelGroupName(i);
            }
            case  4:{
            case 4: {
                //费用类别
                return Constant.getLevelExpenseName(i);
            }
            case  5:{
            case 5: {
                //健康分布
                return Constant.getlevelHealthFbName(i);
            }
            case  6:{
            case 6: {
                //年龄2
                return Constant.getLevelAge2(i);
            }
            case  7:{
            case 7: {
                //年龄疾病
                return Constant.getLevelAgeDiseaseName(i);
            }
            case 8:{
            case 8: {
                return Constant.getLevelReplyTimeName(i);
            }
            default:{
            case 9: {
                return Constant.getReason(i);
            }
            default: {
                return "";
            }
        }
    }
    private String getLevel3Name(String j, Integer type) {
        switch (type){
            case  1:{
        switch (type) {
            case 1: {
                //疾病类型
                return Constant.getLevelDiseaseName(j);
            }
            default:{
            default: {
                return "";
            }
        }
    }
    @Transactional
    public void saveLog(final QuartzJobLog quartzJobLog){
       quartzJobLog.setId(UUID.randomUUID().toString().replace("-",""));
       String sql="INSERT INTO wlyy_job_log (id, job_start_time, Job_end_time, job_id, job_content, job_type, job_name) VALUES (?,?,?,?,?,?,?);";
    public void saveLog(final QuartzJobLog quartzJobLog) {
        quartzJobLog.setId(UUID.randomUUID().toString().replace("-", ""));
        String sql = "INSERT INTO wlyy_job_log (id, job_start_time, Job_end_time, job_id, job_content, job_type, job_name) VALUES (?,?,?,?,?,?,?);";
        jdbcTemplate.update(connection -> {
            PreparedStatement statementCreator= connection.prepareCall(sql);
            statementCreator.setString(1,quartzJobLog.getId());
            statementCreator.setTimestamp(2,new Timestamp(quartzJobLog.getJobStartTime().getTime()));
            statementCreator.setTimestamp(3,new Timestamp(quartzJobLog.getJobEndTime().getTime()));
            statementCreator.setString(4,quartzJobLog.getJobId());
            statementCreator.setString(5,quartzJobLog.getJobContent());
            statementCreator.setString(6,quartzJobLog.getJobType());
            statementCreator.setString(7,quartzJobLog.getJobName());
            PreparedStatement statementCreator = connection.prepareCall(sql);
            statementCreator.setString(1, quartzJobLog.getId());
            statementCreator.setTimestamp(2, new Timestamp(quartzJobLog.getJobStartTime().getTime()));
            statementCreator.setTimestamp(3, new Timestamp(quartzJobLog.getJobEndTime().getTime()));
            statementCreator.setString(4, quartzJobLog.getJobId());
            statementCreator.setString(5, quartzJobLog.getJobContent());
            statementCreator.setString(6, quartzJobLog.getJobType());
            statementCreator.setString(7, quartzJobLog.getJobName());
            return statementCreator;
        });
    }
    public void saveByLevel1NoTeam(List<Map<String, List<ETLModel>>> data, String date, WlyyQuotaVO wlyyQuota) throws Exception{
        this.wlyyQuota=wlyyQuota;
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
    //    @Async("dbStorageExecutor")
//    @Transactional
//    private void saveAll(List<WlyyQuotaResult> wlyyQuotaResults) throws Exception {
//        String insertSql = "INSERT INTO `wlyy`.`wlyy_quota_result` ( " +
//                "  `id`, " +
//                "  `quota_date`, " +
//                "  `quato_code`, " +
//                "  `quato_name`, " +
//                "  `result`, " +
//                "  `city`, " +
//                "  `city_name`, " +
//                "  `town`, " +
//                "  `town_name`, " +
//                "  `org_code`, " +
//                "  `org_name`, " +
//                "  `qkdoctor_name`, " +
//                "  `qkdoctor_job_name`, " +
//                "  `level1_type`, " +
//                "  `del`, " +
//                "  `qkdoctor_code`, " +
//                "  `level2_type`, " +
//                "  `level2_type_name`, " +
//                "  `level3_type`, " +
//                "  `level3_type_name`, " +
//                "  `create_time` " +
//                ") " +
//                "VALUES " +
//                "  ( " +
//                "    ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? " +
//                "  ); ";
//        insert(insertSql, wlyyQuotaResults);
////        if (Constant.getStartYear().equals("2016")) {
////            insertSql = insertSql.replace("{year]", "2016");
////            insert(insertSql, wlyyQuotaResults);
////        } else if (Constant.getStartYear().equals("2017")) {
////            insertSql = insertSql.replace("{year]", "2017");
////            insert(insertSql, wlyyQuotaResults);
////        }
//    }
//
//    private void insert(String insertSql, List<WlyyQuotaResult> wlyyQuotaResults) {
//        final List<WlyyQuotaResult> tempWlyyQuotaResults = wlyyQuotaResults;
//        jdbcTemplate.batchUpdate(insertSql, new BatchPreparedStatementSetter() {
//            @Override
//            public void setValues(PreparedStatement ps, int i) throws SQLException {
//                WlyyQuotaResult wlyyQuotaResul = tempWlyyQuotaResults.get(i);
//                ps.setString(1,wlyyQuotaResul.getId());
//                ps.setDate(2,wlyyQuotaResul.getQuotaDate());
//                ps.setString(3,wlyyQuotaResul.getQuatoCode());
//                ps.setString(4,wlyyQuotaResul.getQuatoName());
//                ps.setString(5,wlyyQuotaResul.getResult());
//                ps.setString(6,wlyyQuotaResul.getCity());
//                ps.setString(7,wlyyQuotaResul.getCityName());
//                ps.setString(8,wlyyQuotaResul.getTown());
//                ps.setString(9,wlyyQuotaResul.getTownName());
//                ps.setString(10,wlyyQuotaResul.getOrgCode());
//                ps.setString(11,wlyyQuotaResul.getOrgName());
//                ps.setString(12,wlyyQuotaResul.getQkdoctorName());
//                ps.setString(13,wlyyQuotaResul.getQkdoctorJobName());
//                ps.setString(14,wlyyQuotaResul.getLevel1Type());
//                ps.setString(15,wlyyQuotaResul.getDel());
//                ps.setString(16,wlyyQuotaResul.getQkdoctorCode());
//                ps.setString(17,wlyyQuotaResul.getLevel2Type());
//                ps.setString(18,wlyyQuotaResul.getLevel2TypeName());
//                ps.setString(19,wlyyQuotaResul.getLevel3Type());
//                ps.setString(20,wlyyQuotaResul.getLevel3TypeName());
//                ps.setTimestamp(21,new Timestamp(new Date().getTime()));
//            }
//
//            @Override
//            public int getBatchSize() {
//                return tempWlyyQuotaResults.size();
//            }
//        });
//    }
    public void saveByLevel1NoTeam(List<Map<String, List<ETLModel>>> data, String date, WlyyQuotaVO wlyyQuota) throws Exception {
        this.wlyyQuota = wlyyQuota;
        List<AdminTeam> adminTeams = doctorAdminTeamDao.findAllTeam();
        for (AdminTeam adminTeam : adminTeams) {
            adminTeamMap.put(adminTeam.getId()+"", adminTeam);
            adminTeamMap.put(adminTeam.getId() + "", adminTeam);
        }
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospitalzxFWZ();
@ -877,15 +969,15 @@ public class DBStorage   {
        }
        //全部的市
        Map<String, City> cityMap = new HashMap<String, City>();
        City city=new City();
        City city = new City();
        city.setCode(Constant.city);
        city.setName(Constant.cityName);
        cityMap.put(Constant.city,city);
        cityMap.put(Constant.city, city);
        //保存机构
        saveAll(saveHospitalTeamDataLevel1(data.get(1),date,hospitalsMap));
        saveAll(saveHospitalTeamDataLevel1(data.get(1), date, hospitalsMap));
        //保存区
        saveAll(saveTownTeamDataLevel1(data.get(2),date,townsMap));
        saveAll(saveTownTeamDataLevel1(data.get(2), date, townsMap));
        //保存市
        saveAll(saveCityTeamDataLevel1(data.get(3),date,cityMap));
        saveAll(saveCityTeamDataLevel1(data.get(3), date, cityMap));
    }
}

+ 616 - 585
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/storage/RedisStorage.java

@ -30,9 +30,9 @@ import java.util.*;
@Component
@Scope("prototype")
public class RedisStorage {
    public static String timeKey="";
    public static String timeKey = "";
    public static List<String> keys=new ArrayList<String>();//全部的key
    public static List<String> keys = new ArrayList<String>();//全部的key
    private Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
    private Map<String, Hospital> hospitalsMap = new HashMap<String, Hospital>();
@ -45,18 +45,20 @@ public class RedisStorage {
    private TownDao townDao;
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    /**
     * 保存一级维度的数据
     *
     * @param data
     * @param wlyyQuotaId
     * @throws Exception
     */
    public void saveByLevel1(List<Map<String, List<ETLModel>>> data,List<Map<String, List<ETLModel>>> deleteData, String wlyyQuotaId) throws Exception {
    public void saveByLevel1(List<Map<String, List<ETLModel>>> data, List<Map<String, List<ETLModel>>> deleteData, String wlyyQuotaId) throws Exception {
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
        List<AdminTeam> adminTeams = doctorAdminTeamDao.findAllTeam();
        adminTeamMap = new HashMap<String, AdminTeam>();
        for (AdminTeam adminTeam : adminTeams) {
            adminTeamMap.put(adminTeam.getId()+"", adminTeam);
            adminTeamMap.put(adminTeam.getId() + "", adminTeam);
        }
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospitalzxFWZ();
@ -72,16 +74,16 @@ public class RedisStorage {
        }
        //全部的市
        Map<String, City> cityMap = new HashMap<String, City>();
        City city=new City();
        City city = new City();
        city.setCode(Constant.city);
        city.setName(Constant.cityName);
        cityMap.put(Constant.city,city);
        
        Map<String, List<ETLModel>> adminTeam=data.get(0);//团队的数据
        Map<String, List<ETLModel>> orgTeam=data.get(1);//机构的数据
        Map<String, List<ETLModel>> townTeam=data.get(2);//区的数据
        Map<String, List<ETLModel>> cityTeam=data.get(3);//市的数据
        if(deleteData==null){
        cityMap.put(Constant.city, city);
        Map<String, List<ETLModel>> adminTeam = data.get(0);//团队的数据
        Map<String, List<ETLModel>> orgTeam = data.get(1);//机构的数据
        Map<String, List<ETLModel>> townTeam = data.get(2);//区的数据
        Map<String, List<ETLModel>> cityTeam = data.get(3);//市的数据
        if (deleteData == null) {
            //保存市
            saveLevel1City(wlyyQuotaId, cityMap, cityTeam);
            //保存区
@ -89,8 +91,8 @@ public class RedisStorage {
            //保存机构
            saveLevel1Org(wlyyQuotaId, hospitalsMap, orgTeam);
            //保存全科团队
            saveLevel1Team(wlyyQuotaId,adminTeamMap, adminTeam);
        }else{
            saveLevel1Team(wlyyQuotaId, adminTeamMap, adminTeam);
        } else {
//            //保存市
//            saveLevel1City(wlyyQuotaId, cityMap, cityTeam,deleteData.get(3));
//            //保存区
@ -103,50 +105,54 @@ public class RedisStorage {
    }
    /**
     * 保存二级维度的数据
     *
     * @param data
     * @param wlyyQuotaId
     * @param foreachNum 标识二级维度循环的次数  例如 年龄就传6  性别就传3
     * @param type 1 性别 2 年龄 3 用户分组 4.签约费用 5 健康分布
     * @param foreachNum  标识二级维度循环的次数  例如 年龄就传6  性别就传3
     * @param type        1 性别 2 年龄 3 用户分组 4.签约费用 5 健康分布
     */
    public void saveByLevel2(List<Map<String, Map<String, List<ETLModel>>>> data,List<Map<String, Map<String, List<ETLModel>>>> deleteData, String wlyyQuotaId,Integer foreachNum,Integer type) throws Exception {
        Integer start=1;
        saveByLevel2Public(data,deleteData, wlyyQuotaId, foreachNum, type, start);
    public void saveByLevel2(List<Map<String, Map<String, List<ETLModel>>>> data, List<Map<String, Map<String, List<ETLModel>>>> deleteData, String wlyyQuotaId, Integer foreachNum, Integer type) throws Exception {
        Integer start = 1;
        saveByLevel2Public(data, deleteData, wlyyQuotaId, foreachNum, type, start);
    }
    /**
     * 保存二级维度的数据
     *
     * @param data
     * @param wlyyQuotaId
     * @param foreachNum 标识二级维度循环的次数  例如 年龄就传6  性别就传3
     * @param type 1 性别 2 年龄 3 用户分组 4.签约费用 5 健康分布 6繳費未交費 7年齡疾病
     * @param start 循环开始
     * @param foreachNum  标识二级维度循环的次数  例如 年龄就传6  性别就传3
     * @param type        1 性别 2 年龄 3 用户分组 4.签约费用 5 健康分布 6繳費未交費 7年齡疾病 8 咨询分组 9续签原因
     * @param start       循环开始
     */
    public void saveByLevel2(List<Map<String, Map<String, List<ETLModel>>>> data,List<Map<String, Map<String, List<ETLModel>>>> deleteData, String wlyyQuotaId,Integer foreachNum,Integer type,Integer start) throws Exception {
        saveByLevel2Public(data,deleteData, wlyyQuotaId, foreachNum, type, start);
    public void saveByLevel2(List<Map<String, Map<String, List<ETLModel>>>> data, List<Map<String, Map<String, List<ETLModel>>>> deleteData, String wlyyQuotaId, Integer foreachNum, Integer type, Integer start) throws Exception {
        saveByLevel2Public(data, deleteData, wlyyQuotaId, foreachNum, type, start);
    }
    /**
     * 保存三级维度的数据
     *
     * @param data
     * @param wlyyQuotaId
     * @param foreachNum2 标识二级维度循环的次数  例如 年龄就传6  性别就传3
     * @param foreachNum3 标识二级维度循环的次数  例如 年龄就传6  性别就传3
     * @param type2 1 性别 2 年龄 3 用户分组 4.签约费用 5 健康分布
     * @param type3 1 疾病
     * @param start2 循环开始
     * @param start3 循环开始
     * @param type2       1 性别 2 年龄 3 用户分组 4.签约费用 5 健康分布
     * @param type3       1 疾病
     * @param start2      循环开始
     * @param start3      循环开始
     */
    public void saveByLevel3(List<Map<String, Map<String, Map<String, List<ETLModel>>>>> data,List<Map<String, Map<String, Map<String, List<ETLModel>>>>> deleteData, String wlyyQuotaId,Integer foreachNum2,Integer foreachNum3,Integer type2,Integer type3,Integer start2,Integer start3) throws Exception {
        if(start2==null){
            start2=1;
    public void saveByLevel3(List<Map<String, Map<String, Map<String, List<ETLModel>>>>> data, List<Map<String, Map<String, Map<String, List<ETLModel>>>>> deleteData, String wlyyQuotaId, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3, Integer start2, Integer start3) throws Exception {
        if (start2 == null) {
            start2 = 1;
        }
        if(start3==null){
            start2=1;
        if (start3 == null) {
            start2 = 1;
        }
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
        List<AdminTeam> adminTeams = doctorAdminTeamDao.findAllTeam();
        for (AdminTeam adminTeam : adminTeams) {
            adminTeamMap.put(adminTeam.getId()+"", adminTeam);
            adminTeamMap.put(adminTeam.getId() + "", adminTeam);
        }
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospitalzxFWZ();
@ -159,435 +165,441 @@ public class RedisStorage {
            townsMap.put(town.getCode(), town);
        }
        //全部的市
        City city=new City();
        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);
        if(deleteData!=null){
        cityMap.put(Constant.city, city);
        if (deleteData != null) {
            //保存团队
            saveAdminTeamDataLevel3(data.get(0),deleteData.get(0),wlyyQuotaId,adminTeamMap,foreachNum2,foreachNum3,type2,type3,start2,start3);
            saveAdminTeamDataLevel3(data.get(0), deleteData.get(0), wlyyQuotaId, adminTeamMap, foreachNum2, foreachNum3, type2, type3, start2, start3);
            //保存机构
            saveHospitalTeamDataLevel3(data.get(1),deleteData.get(1),wlyyQuotaId,hospitalsMap,foreachNum2,foreachNum3,type2,type3,start2,start3);
            saveHospitalTeamDataLevel3(data.get(1), deleteData.get(1), wlyyQuotaId, hospitalsMap, foreachNum2, foreachNum3, type2, type3, start2, start3);
            //保存区
            saveTownTeamDataLevel3(data.get(2),deleteData.get(2),wlyyQuotaId,townsMap,foreachNum2,foreachNum3,type2,type3,start2,start3);
            saveTownTeamDataLevel3(data.get(2), deleteData.get(2), wlyyQuotaId, townsMap, foreachNum2, foreachNum3, type2, type3, start2, start3);
            //保存市
            saveCityTeamDataLevel3(data.get(3),deleteData.get(3),wlyyQuotaId,cityMap,foreachNum2,foreachNum3,type2,type3,start2,start3);
        }else{
            saveCityTeamDataLevel3(data.get(3), deleteData.get(3), wlyyQuotaId, cityMap, foreachNum2, foreachNum3, type2, type3, start2, start3);
        } else {
            //保存团队
            saveAdminTeamDataLevel3(data.get(0),wlyyQuotaId,adminTeamMap,foreachNum2,foreachNum3,type2,type3,start2,start3);
            saveAdminTeamDataLevel3(data.get(0), wlyyQuotaId, adminTeamMap, foreachNum2, foreachNum3, type2, type3, start2, start3);
            //保存机构
            saveHospitalTeamDataLevel3(data.get(1),wlyyQuotaId,hospitalsMap,foreachNum2,foreachNum3,type2,type3,start2,start3);
            saveHospitalTeamDataLevel3(data.get(1), wlyyQuotaId, hospitalsMap, foreachNum2, foreachNum3, type2, type3, start2, start3);
            //保存区
            saveTownTeamDataLevel3(data.get(2),wlyyQuotaId,townsMap,foreachNum2,foreachNum3,type2,type3,start2,start3);
            saveTownTeamDataLevel3(data.get(2), wlyyQuotaId, townsMap, foreachNum2, foreachNum3, type2, type3, start2, start3);
            //保存市
            saveCityTeamDataLevel3(data.get(3),wlyyQuotaId,cityMap,foreachNum2,foreachNum3,type2,type3,start2,start3);
            saveCityTeamDataLevel3(data.get(3), wlyyQuotaId, cityMap, foreachNum2, foreachNum3, type2, type3, start2, start3);
        }
    }
    private void saveAdminTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap,Map<String, Map<String, Map<String, List<ETLModel>>>> deleteEtlModelMap, String wlyyQuotaId,Map<String, AdminTeam> adminTeamMap, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3, Integer start2, Integer start3) {
    private void saveAdminTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap, Map<String, Map<String, Map<String, List<ETLModel>>>> deleteEtlModelMap, String wlyyQuotaId, Map<String, AdminTeam> adminTeamMap, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3, Integer start2, Integer start3) {
        //遍历团队的Map
        for(Map.Entry<String,AdminTeam> oneAdminTeam:adminTeamMap.entrySet()){
        for (Map.Entry<String, AdminTeam> oneAdminTeam : adminTeamMap.entrySet()) {
            //得到每个团队的2级维度
            Map<String, Map<String, List<ETLModel>>> twoETLMap= etlModelMap.get(oneAdminTeam.getKey());
            Map<String, Map<String, List<ETLModel>>> deleteTwoETLMap= deleteEtlModelMap.get(oneAdminTeam.getKey());
            for(int i=start2;i<=foreachNum2;i++){
            Map<String, Map<String, List<ETLModel>>> twoETLMap = etlModelMap.get(oneAdminTeam.getKey());
            Map<String, Map<String, List<ETLModel>>> deleteTwoETLMap = deleteEtlModelMap.get(oneAdminTeam.getKey());
            for (int i = start2; i <= foreachNum2; i++) {
                //得到每个团队的三级维度
                Map<String, List<ETLModel>> threeETLMap=null;
                if(twoETLMap!=null){
                    threeETLMap=twoETLMap.get(i+"");
                Map<String, List<ETLModel>> threeETLMap = null;
                if (twoETLMap != null) {
                    threeETLMap = twoETLMap.get(i + "");
                }
                Map<String, List<ETLModel>> deleteThreeETLMap=null;
                if(deleteTwoETLMap!=null){
                    deleteThreeETLMap=deleteTwoETLMap.get(i+"");
                Map<String, List<ETLModel>> deleteThreeETLMap = null;
                if (deleteTwoETLMap != null) {
                    deleteThreeETLMap = deleteTwoETLMap.get(i + "");
                }
                for(int j=start3;j<=foreachNum3;j++){
                    String level1="1";
                    String level2=i+"";
                    String level3=j+"";
                    int num=0;
                    if(threeETLMap!=null){
                        List<ETLModel> etlModelList= threeETLMap.get(j+"");
                        if(etlModelList!=null&&etlModelList.size()>0){
                            num=etlModelList.size();
                for (int j = start3; j <= foreachNum3; j++) {
                    String level1 = "1";
                    String level2 = i + "";
                    String level3 = j + "";
                    int num = 0;
                    if (threeETLMap != null) {
                        List<ETLModel> etlModelList = threeETLMap.get(j + "");
                        if (etlModelList != null && etlModelList.size() > 0) {
                            num = etlModelList.size();
                        }
                    }
                    if(deleteThreeETLMap!=null){
                        List<ETLModel> etlModelList= deleteThreeETLMap.get(j+"");
                        if(etlModelList!=null&&etlModelList.size()>0){
                            num=num-etlModelList.size();
                    if (deleteThreeETLMap != null) {
                        List<ETLModel> etlModelList = deleteThreeETLMap.get(j + "");
                        if (etlModelList != null && etlModelList.size() > 0) {
                            num = num - etlModelList.size();
                        }
                    }
                    AdminTeam adminTeamObj = adminTeamMap.get(oneAdminTeam.getKey());//团队
                    if(adminTeamObj==null)continue;
                    JSONObject jo=new JSONObject();
                    if (adminTeamObj == null) continue;
                    JSONObject jo = new JSONObject();
                    jo.put("date", DateUtil.dateToStrLong(new Date()));
                    jo.put("num", num);
                    jo.put("name", adminTeamObj.getName());
                    jo.put("code", adminTeamObj.getId());
                    jo.put("name", getLevel3Name(level3,type3));
                    redisTemplate.opsForValue().set(new StringBuffer("quota:"+wlyyQuotaId+":"+level1+":"+level2+":"+level3+":"+adminTeamObj.getId()).toString(), jo.toString());
                    jo.put("name", getLevel3Name(level3, type3));
                    redisTemplate.opsForValue().set(new StringBuffer("quota:" + wlyyQuotaId + ":" + level1 + ":" + level2 + ":" + level3 + ":" + adminTeamObj.getId()).toString(), jo.toString());
                }
            }
        }
    }
    private void saveAdminTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap, String wlyyQuotaId,Map<String, AdminTeam> adminTeamMap, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3, Integer start2, Integer start3) {
    private void saveAdminTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap, String wlyyQuotaId, Map<String, AdminTeam> adminTeamMap, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3, Integer start2, Integer start3) {
        //遍历团队的Map
        for(Map.Entry<String,AdminTeam> oneAdminTeam:adminTeamMap.entrySet()){
            JSONArray level2Jr=new JSONArray();
        for (Map.Entry<String, AdminTeam> oneAdminTeam : adminTeamMap.entrySet()) {
            JSONArray level2Jr = new JSONArray();
            AdminTeam adminTeamObj = adminTeamMap.get(oneAdminTeam.getKey());//团队
            String level1="1";
            String level1 = "1";
            //得到每个团队的2级维度
            Map<String, Map<String, List<ETLModel>>> twoETLMap= etlModelMap.get(oneAdminTeam.getKey());
            for(int i=start2;i<=foreachNum2;i++){
                JSONArray jrlevel2=new JSONArray();
            Map<String, Map<String, List<ETLModel>>> twoETLMap = etlModelMap.get(oneAdminTeam.getKey());
            for (int i = start2; i <= foreachNum2; i++) {
                JSONArray jrlevel2 = new JSONArray();
                //得到每个团队的三级维度
                Map<String, List<ETLModel>> threeETLMap=null;
                if(twoETLMap!=null){
                    threeETLMap=twoETLMap.get(i+"");
                Map<String, List<ETLModel>> threeETLMap = null;
                if (twoETLMap != null) {
                    threeETLMap = twoETLMap.get(i + "");
                }
                for(int j=start3;j<=foreachNum3;j++){
                    String level2=i+"";
                    String level3=j+"";
                    int num=0;
                    if(threeETLMap!=null){
                        List<ETLModel> etlModelList= threeETLMap.get(j+"");
                        if(etlModelList!=null&&etlModelList.size()>0){
                            num=etlModelList.size();
                for (int j = start3; j <= foreachNum3; j++) {
                    String level2 = i + "";
                    String level3 = j + "";
                    int num = 0;
                    if (threeETLMap != null) {
                        List<ETLModel> etlModelList = threeETLMap.get(j + "");
                        if (etlModelList != null && etlModelList.size() > 0) {
                            num = etlModelList.size();
                        }
                    }
                    if(adminTeamObj==null)continue;
                    JSONObject jo=new JSONObject();
                    if (adminTeamObj == null) continue;
                    JSONObject jo = new JSONObject();
                    jo.put("date", DateUtil.dateToStrLong(new Date()));
                    jo.put("num", num);
                    jo.put("name", getLevel3Name(level3,type3));
                    jo.put("name", getLevel3Name(level3, type3));
                    jo.put("code", level3);
                    StringBuffer sb=new StringBuffer("quota:"+wlyyQuotaId+":"+level1+":"+adminTeamObj.getId()+":"+level2+":"+":"+level3+":"+timeKey);
                    StringBuffer sb = new StringBuffer("quota:" + wlyyQuotaId + ":" + level1 + ":" + adminTeamObj.getId() + ":" + level2 + ":" + ":" + level3 + ":" + timeKey);
                    keys.add(sb.toString());
                    redisTemplate.opsForValue().set(sb.toString(), jo.toString());
                    level2Jr.put(jo);
                    jrlevel2.put(jo);
                }
                StringBuffer sb=new StringBuffer("quota:"+wlyyQuotaId+":"+level1+":"+adminTeamObj.getId()+":"+timeKey);
                StringBuffer sb = new StringBuffer("quota:" + wlyyQuotaId + ":" + level1 + ":" + adminTeamObj.getId() + ":" + timeKey);
                keys.add(sb.toString());
                redisTemplate.opsForValue().set(sb.toString(), jrlevel2.toString());
            }
            StringBuffer sb=new StringBuffer("quota:"+wlyyQuotaId+":"+level1+":"+adminTeamObj.getId()+":"+timeKey);
            StringBuffer sb = new StringBuffer("quota:" + wlyyQuotaId + ":" + level1 + ":" + adminTeamObj.getId() + ":" + timeKey);
            keys.add(sb.toString());
            redisTemplate.opsForValue().set(sb.toString(), level2Jr.toString());
        }
    }
    private String getLevel3Name(String j, Integer type) {
        switch (type){
            case  1:{
        switch (type) {
            case 1: {
                //疾病类型
                return Constant.getLevelDiseaseName(j);
            }
            default:{
            default: {
                return "";
            }
        }
    }
    private void saveHospitalTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap,Map<String, Map<String, Map<String, List<ETLModel>>>> deleteEtlModelMap,String wlyyQuotaId, Map<String, Hospital> hospitalMap, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3, Integer start2, Integer start3) {
    private void saveHospitalTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap, Map<String, Map<String, Map<String, List<ETLModel>>>> deleteEtlModelMap, String wlyyQuotaId, Map<String, Hospital> hospitalMap, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3, Integer start2, Integer start3) {
        //遍历团队的Map
        for(Map.Entry<String,Hospital> oneHospital:hospitalMap.entrySet()){
        for (Map.Entry<String, Hospital> oneHospital : hospitalMap.entrySet()) {
            //得到每个团队的2级维度
            Map<String, Map<String, List<ETLModel>>> twoETLMap= etlModelMap.get(oneHospital.getKey());
            Map<String, Map<String, List<ETLModel>>> deleteTwoETLMap= deleteEtlModelMap.get(oneHospital.getKey());
            for(int i=start2;i<=foreachNum2;i++){
            Map<String, Map<String, List<ETLModel>>> twoETLMap = etlModelMap.get(oneHospital.getKey());
            Map<String, Map<String, List<ETLModel>>> deleteTwoETLMap = deleteEtlModelMap.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+"");
                Map<String, List<ETLModel>> threeETLMap = new HashMap<String, List<ETLModel>>();
                if (twoETLMap != null) {
                    threeETLMap = twoETLMap.get(i + "");
                }
                Map<String, List<ETLModel>> deleteThreeETLMap= new HashMap<String, List<ETLModel>>();
                if(deleteTwoETLMap!=null){
                    deleteThreeETLMap=deleteTwoETLMap.get(i+"");
                Map<String, List<ETLModel>> deleteThreeETLMap = new HashMap<String, List<ETLModel>>();
                if (deleteTwoETLMap != null) {
                    deleteThreeETLMap = deleteTwoETLMap.get(i + "");
                }
                for(int j=start3;j<=foreachNum3;j++){
                    String level1="2";
                    String level2=i+"";
                    String level3=j+"";
                    int num=0;
                    if(threeETLMap!=null&&threeETLMap.size()>0){
                        List<ETLModel> etlModelList= threeETLMap.get(j+"");
                        if(etlModelList!=null&&etlModelList.size()>0){
                            num=etlModelList.size();
                for (int j = start3; j <= foreachNum3; j++) {
                    String level1 = "2";
                    String level2 = i + "";
                    String level3 = j + "";
                    int num = 0;
                    if (threeETLMap != null && threeETLMap.size() > 0) {
                        List<ETLModel> etlModelList = threeETLMap.get(j + "");
                        if (etlModelList != null && etlModelList.size() > 0) {
                            num = etlModelList.size();
                        }
                    }
                    if(deleteThreeETLMap!=null&&deleteThreeETLMap.size()>0){
                        List<ETLModel> etlModelList= deleteThreeETLMap.get(j+"");
                        if(etlModelList!=null&&etlModelList.size()>0){
                            num=num-etlModelList.size();
                    if (deleteThreeETLMap != null && deleteThreeETLMap.size() > 0) {
                        List<ETLModel> etlModelList = deleteThreeETLMap.get(j + "");
                        if (etlModelList != null && etlModelList.size() > 0) {
                            num = num - etlModelList.size();
                        }
                    }
                    Hospital hospital = hospitalsMap.get(oneHospital.getKey());
                    if(hospital==null)continue;
                    JSONObject jo=new JSONObject();
                    if (hospital == null) continue;
                    JSONObject jo = new JSONObject();
                    jo.put("date", DateUtil.dateToStrLong(new Date()));
                    jo.put("num", num);
                    jo.put("name", hospital.getName());
                    jo.put("code", hospital.getCode());
                    jo.put("name", getLevel3Name(level3,type3));
                    redisTemplate.opsForValue().set(new StringBuffer("quota:"+wlyyQuotaId+":"+level1+":"+level2+":"+level3+":"+hospital.getCode()).toString(), jo.toString());
                    jo.put("name", getLevel3Name(level3, type3));
                    redisTemplate.opsForValue().set(new StringBuffer("quota:" + wlyyQuotaId + ":" + level1 + ":" + level2 + ":" + level3 + ":" + hospital.getCode()).toString(), jo.toString());
                }
            }
        }
    }
    private void saveHospitalTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap,String wlyyQuotaId, Map<String, Hospital> hospitalMap, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3, Integer start2, Integer start3) {
        Map<String,Map<String,JSONArray>> cityJr=new HashMap<String,Map<String,JSONArray>>();
    private void saveHospitalTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap, String wlyyQuotaId, Map<String, Hospital> hospitalMap, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3, Integer start2, Integer start3) {
        Map<String, Map<String, JSONArray>> cityJr = new HashMap<String, Map<String, JSONArray>>();
        //遍历团队的Map
        for(Map.Entry<String,Hospital> oneHospital:hospitalMap.entrySet()){
        for (Map.Entry<String, Hospital> oneHospital : hospitalMap.entrySet()) {
            Hospital hospital = hospitalsMap.get(oneHospital.getKey());
            if(hospital==null)continue;
            JSONArray jr=new JSONArray();
            String level1="2";
            if (hospital == null) continue;
            JSONArray jr = new JSONArray();
            String level1 = "2";
            //得到每个团队的2级维度
            Map<String, Map<String, List<ETLModel>>> twoETLMap= etlModelMap.get(oneHospital.getKey());
            for(int i=start2;i<=foreachNum2;i++){
                JSONArray jrlevel2=new JSONArray();
            Map<String, Map<String, List<ETLModel>>> twoETLMap = etlModelMap.get(oneHospital.getKey());
            for (int i = start2; i <= foreachNum2; i++) {
                JSONArray jrlevel2 = new JSONArray();
                //得到每个团队的三级维度
                Map<String, List<ETLModel>> threeETLMap= new HashMap<String, List<ETLModel>>();
                if(twoETLMap!=null){
                    threeETLMap=twoETLMap.get(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++){
                    String level2=i+"";
                    String level3=j+"";
                    int num=0;
                    if(threeETLMap!=null&&threeETLMap.size()>0){
                        List<ETLModel> etlModelList= threeETLMap.get(j+"");
                        if(etlModelList!=null&&etlModelList.size()>0){
                            num=etlModelList.size();
                for (int j = start3; j <= foreachNum3; j++) {
                    String level2 = i + "";
                    String level3 = j + "";
                    int num = 0;
                    if (threeETLMap != null && threeETLMap.size() > 0) {
                        List<ETLModel> etlModelList = threeETLMap.get(j + "");
                        if (etlModelList != null && etlModelList.size() > 0) {
                            num = etlModelList.size();
                        }
                    }
                    if(hospital==null)continue;
                    JSONObject jo=new JSONObject();
                    if (hospital == null) continue;
                    JSONObject jo = new JSONObject();
                    jo.put("date", DateUtil.dateToStrLong(new Date()));
                    jo.put("num", num);
                    jo.put("name", getLevel3Name(level3,type3));
                    jo.put("name", getLevel3Name(level3, type3));
                    jo.put("code", level3);
                    StringBuffer sb=new StringBuffer("quota:"+wlyyQuotaId+":"+level1+":"+":"+hospital.getCode()+":"+level2+":"+level3+":"+timeKey);
                    StringBuffer sb = new StringBuffer("quota:" + wlyyQuotaId + ":" + level1 + ":" + ":" + hospital.getCode() + ":" + level2 + ":" + level3 + ":" + timeKey);
                    keys.add(sb.toString());
                    redisTemplate.opsForValue().set(sb.toString(), jo.toString());
                    jr.put(jo);
                    jrlevel2.put(jo);
                }
                StringBuffer sb=new StringBuffer("quota:"+wlyyQuotaId+":"+level1+":"+hospital.getCode()+":"+i+":"+timeKey);
                StringBuffer sb = new StringBuffer("quota:" + wlyyQuotaId + ":" + level1 + ":" + hospital.getCode() + ":" + i + ":" + timeKey);
                keys.add(sb.toString());
                redisTemplate.opsForValue().set(sb.toString(), jrlevel2.toString());
            }
            StringBuffer sb=new StringBuffer("quota:"+wlyyQuotaId+":"+level1+":"+hospital.getCode()+":"+timeKey);
            StringBuffer sb = new StringBuffer("quota:" + wlyyQuotaId + ":" + level1 + ":" + hospital.getCode() + ":" + timeKey);
            keys.add(sb.toString());
            redisTemplate.opsForValue().set(sb.toString(), jr.toString());
        }
    }
    private void saveTownTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap,Map<String, Map<String, Map<String, List<ETLModel>>>> deleteEtlModelMap,String wlyyQuotaId, Map<String, Town> townsMap, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3, Integer start2, Integer start3) {
        List<WlyyQuotaResult> wlyyQuotaResults=new ArrayList<WlyyQuotaResult>();
    private void saveTownTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap, Map<String, Map<String, Map<String, List<ETLModel>>>> deleteEtlModelMap, String wlyyQuotaId, Map<String, Town> townsMap, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3, Integer start2, Integer start3) {
        List<WlyyQuotaResult> wlyyQuotaResults = new ArrayList<WlyyQuotaResult>();
        //遍历团队的Map
        for(Map.Entry<String,Town> oneTownTeam:townsMap.entrySet()){
        for (Map.Entry<String, Town> oneTownTeam : townsMap.entrySet()) {
            //得到每个团队的2级维度
            Map<String, Map<String, List<ETLModel>>> twoETLMap= etlModelMap.get(oneTownTeam.getKey());
            Map<String, Map<String, List<ETLModel>>> deleteTwoETLMap= deleteEtlModelMap.get(oneTownTeam.getKey());
            for(int i=start2;i<=foreachNum2;i++){
            Map<String, Map<String, List<ETLModel>>> twoETLMap = etlModelMap.get(oneTownTeam.getKey());
            Map<String, Map<String, List<ETLModel>>> deleteTwoETLMap = deleteEtlModelMap.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+"");
                Map<String, List<ETLModel>> threeETLMap = new HashMap<String, List<ETLModel>>();
                if (twoETLMap != null) {
                    threeETLMap = twoETLMap.get(i + "");
                }
                Map<String, List<ETLModel>> deleteThreeETLMap= new HashMap<String, List<ETLModel>>();
                if(deleteTwoETLMap!=null){
                    deleteThreeETLMap=deleteTwoETLMap.get(i+"");
                Map<String, List<ETLModel>> deleteThreeETLMap = new HashMap<String, List<ETLModel>>();
                if (deleteTwoETLMap != null) {
                    deleteThreeETLMap = deleteTwoETLMap.get(i + "");
                }
                for(int j=start3;j<=foreachNum3;j++){
                    String level1="3";
                    String level2=i+"";
                    String level3=j+"";
                    int num=0;
                    if(threeETLMap!=null&&threeETLMap.size()>0){
                        List<ETLModel> etlModelList= threeETLMap.get(j+"");
                        if(etlModelList!=null&&etlModelList.size()>0){
                            num=etlModelList.size();
                for (int j = start3; j <= foreachNum3; j++) {
                    String level1 = "3";
                    String level2 = i + "";
                    String level3 = j + "";
                    int num = 0;
                    if (threeETLMap != null && threeETLMap.size() > 0) {
                        List<ETLModel> etlModelList = threeETLMap.get(j + "");
                        if (etlModelList != null && etlModelList.size() > 0) {
                            num = etlModelList.size();
                        }
                    }
                    if(deleteThreeETLMap!=null&&deleteThreeETLMap.size()>0){
                        List<ETLModel> etlModelList= deleteThreeETLMap.get(j+"");
                        if(etlModelList!=null&&etlModelList.size()>0){
                            num=num-etlModelList.size();
                    if (deleteThreeETLMap != null && deleteThreeETLMap.size() > 0) {
                        List<ETLModel> etlModelList = deleteThreeETLMap.get(j + "");
                        if (etlModelList != null && etlModelList.size() > 0) {
                            num = num - etlModelList.size();
                        }
                    }
                    Town town=townsMap.get(oneTownTeam.getKey());
                    if(town==null)continue;
                    JSONObject jo=new JSONObject();
                    Town town = townsMap.get(oneTownTeam.getKey());
                    if (town == null) continue;
                    JSONObject jo = new JSONObject();
                    jo.put("date", DateUtil.dateToStrLong(new Date()));
                    jo.put("num", num);
                    jo.put("name", town.getName());
                    jo.put("code", town.getCode());
                    jo.put("name", getLevel3Name(level3,type3));
                    redisTemplate.opsForValue().set(new StringBuffer("quota:"+wlyyQuotaId+":"+level1+":"+level2+":"+level3+":"+town.getCode()).toString(), jo.toString());
                    jo.put("name", getLevel3Name(level3, type3));
                    redisTemplate.opsForValue().set(new StringBuffer("quota:" + wlyyQuotaId + ":" + level1 + ":" + level2 + ":" + level3 + ":" + town.getCode()).toString(), jo.toString());
                }
            }
        }
    }
    private void saveCityTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap,Map<String, Map<String, Map<String, List<ETLModel>>>> deleteEtlModelMap,String wlyyQuotaId, Map<String, City> cityMap, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3, Integer start2, Integer start3) {
        List<WlyyQuotaResult> wlyyQuotaResults=new ArrayList<WlyyQuotaResult>();
    private void saveCityTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap, Map<String, Map<String, Map<String, List<ETLModel>>>> deleteEtlModelMap, String wlyyQuotaId, Map<String, City> cityMap, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3, Integer start2, Integer start3) {
        List<WlyyQuotaResult> wlyyQuotaResults = new ArrayList<WlyyQuotaResult>();
        //遍历团队的Map
        for(Map.Entry<String,City> oneCityTeam:cityMap.entrySet()){
        for (Map.Entry<String, City> oneCityTeam : cityMap.entrySet()) {
            //得到每个团队的2级维度
            Map<String, Map<String, List<ETLModel>>> twoETLMap= etlModelMap.get(oneCityTeam.getKey());
            Map<String, Map<String, List<ETLModel>>> deleteTwoETLMap= deleteEtlModelMap.get(oneCityTeam.getKey());
            for(int i=start2;i<=foreachNum2;i++){
            Map<String, Map<String, List<ETLModel>>> twoETLMap = etlModelMap.get(oneCityTeam.getKey());
            Map<String, Map<String, List<ETLModel>>> deleteTwoETLMap = deleteEtlModelMap.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+"");
                Map<String, List<ETLModel>> threeETLMap = new HashMap<String, List<ETLModel>>();
                if (twoETLMap != null) {
                    threeETLMap = twoETLMap.get(i + "");
                }
                Map<String, List<ETLModel>> deletetThreeETLMap= new HashMap<String, List<ETLModel>>();
                if(deleteTwoETLMap!=null){
                    deletetThreeETLMap=deleteTwoETLMap.get(i+"");
                Map<String, List<ETLModel>> deletetThreeETLMap = new HashMap<String, List<ETLModel>>();
                if (deleteTwoETLMap != null) {
                    deletetThreeETLMap = deleteTwoETLMap.get(i + "");
                }
                for(int j=start3;j<=foreachNum3;j++){
                    String level1="4";
                    String level2=i+"";
                    String level3=j+"";
                    int num=0;
                    if(threeETLMap!=null&&threeETLMap.size()>0){
                        List<ETLModel> etlModelList= threeETLMap.get(j+"");
                        if(etlModelList!=null&&etlModelList.size()>0){
                            num=etlModelList.size();
                for (int j = start3; j <= foreachNum3; j++) {
                    String level1 = "4";
                    String level2 = i + "";
                    String level3 = j + "";
                    int num = 0;
                    if (threeETLMap != null && threeETLMap.size() > 0) {
                        List<ETLModel> etlModelList = threeETLMap.get(j + "");
                        if (etlModelList != null && etlModelList.size() > 0) {
                            num = etlModelList.size();
                        }
                    }
                    if(deletetThreeETLMap!=null&&deletetThreeETLMap.size()>0){
                        List<ETLModel> etlModelList= deletetThreeETLMap.get(j+"");
                        if(etlModelList!=null&&etlModelList.size()>0){
                            num=num-etlModelList.size();
                    if (deletetThreeETLMap != null && deletetThreeETLMap.size() > 0) {
                        List<ETLModel> etlModelList = deletetThreeETLMap.get(j + "");
                        if (etlModelList != null && etlModelList.size() > 0) {
                            num = num - etlModelList.size();
                        }
                    }
                    City cityObj=oneCityTeam.getValue();
                    JSONObject jo=new JSONObject();
                    City cityObj = oneCityTeam.getValue();
                    JSONObject jo = new JSONObject();
                    jo.put("date", DateUtil.dateToStrLong(new Date()));
                    jo.put("num", num);
                    jo.put("name", cityObj.getName());
                    jo.put("code", cityObj.getCode());
                    jo.put("name", getLevel3Name(level3,type3));
                    redisTemplate.opsForValue().set(new StringBuffer("quota:"+wlyyQuotaId+":"+level1+":"+level2+":"+level3+":"+cityObj.getCode()).toString(), jo.toString());
                    jo.put("name", getLevel3Name(level3, type3));
                    redisTemplate.opsForValue().set(new StringBuffer("quota:" + wlyyQuotaId + ":" + level1 + ":" + level2 + ":" + level3 + ":" + cityObj.getCode()).toString(), jo.toString());
                }
            }
        }
    }
    private void saveTownTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap,String wlyyQuotaId, Map<String, Town> townsMap, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3, Integer start2, Integer start3) {
    private void saveTownTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap, String wlyyQuotaId, Map<String, Town> townsMap, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3, Integer start2, Integer start3) {
        //遍历团队的Map
        for(Map.Entry<String,Town> oneTownTeam:townsMap.entrySet()){
            Town town=townsMap.get(oneTownTeam.getKey());
            JSONArray jr=new JSONArray();
            String level1="3";
        for (Map.Entry<String, Town> oneTownTeam : townsMap.entrySet()) {
            Town town = townsMap.get(oneTownTeam.getKey());
            JSONArray jr = new JSONArray();
            String level1 = "3";
            //得到每个团队的2级维度
            Map<String, Map<String, List<ETLModel>>> twoETLMap= etlModelMap.get(oneTownTeam.getKey());
            for(int i=start2;i<=foreachNum2;i++){
                JSONArray jrlevel2=new JSONArray();
            Map<String, Map<String, List<ETLModel>>> twoETLMap = etlModelMap.get(oneTownTeam.getKey());
            for (int i = start2; i <= foreachNum2; i++) {
                JSONArray jrlevel2 = new JSONArray();
                //得到每个团队的三级维度
                Map<String, List<ETLModel>> threeETLMap= new HashMap<String, List<ETLModel>>();
                if(twoETLMap!=null){
                    threeETLMap=twoETLMap.get(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++){
                    String level2=i+"";
                    String level3=j+"";
                    int num=0;
                    if(threeETLMap!=null&&threeETLMap.size()>0){
                        List<ETLModel> etlModelList= threeETLMap.get(j+"");
                        if(etlModelList!=null&&etlModelList.size()>0){
                            num=etlModelList.size();
                for (int j = start3; j <= foreachNum3; j++) {
                    String level2 = i + "";
                    String level3 = j + "";
                    int num = 0;
                    if (threeETLMap != null && threeETLMap.size() > 0) {
                        List<ETLModel> etlModelList = threeETLMap.get(j + "");
                        if (etlModelList != null && etlModelList.size() > 0) {
                            num = etlModelList.size();
                        }
                    }
                    if(town==null)continue;
                    JSONObject jo=new JSONObject();
                    if (town == null) continue;
                    JSONObject jo = new JSONObject();
                    jo.put("date", DateUtil.dateToStrLong(new Date()));
                    jo.put("num", num);
                    //jo.put("name", town.getName());
                    //jo.put("code", town.getCode());
                    jo.put("level2code", level2);
                    jo.put("level2name", getLevel2Name(level2,type2));
                    jo.put("name", getLevel3Name(level3,type3));
                    jo.put("code",level3 );
                    StringBuffer sb=new StringBuffer("quota:"+wlyyQuotaId+":"+level1+":"+town.getCode()+":"+level2+":"+level3+":"+timeKey);
                    jo.put("level2name", getLevel2Name(level2, type2));
                    jo.put("name", getLevel3Name(level3, type3));
                    jo.put("code", level3);
                    StringBuffer sb = new StringBuffer("quota:" + wlyyQuotaId + ":" + level1 + ":" + town.getCode() + ":" + level2 + ":" + level3 + ":" + timeKey);
                    keys.add(sb.toString());
                    redisTemplate.opsForValue().set(sb.toString(), jo.toString());
                    jr.put(jo);
                    jrlevel2.put(jo);
                }
                StringBuffer sb=new StringBuffer("quota:"+wlyyQuotaId+":"+level1+":"+town.getCode()+":"+i+":"+timeKey);
                StringBuffer sb = new StringBuffer("quota:" + wlyyQuotaId + ":" + level1 + ":" + town.getCode() + ":" + i + ":" + timeKey);
                keys.add(sb.toString());
                redisTemplate.opsForValue().set(sb.toString(), jrlevel2.toString());
            }
            StringBuffer sb=new StringBuffer("quota:"+wlyyQuotaId+":"+level1+":"+town.getCode()+":"+timeKey);
            StringBuffer sb = new StringBuffer("quota:" + wlyyQuotaId + ":" + level1 + ":" + town.getCode() + ":" + timeKey);
            keys.add(sb.toString());
            redisTemplate.opsForValue().set(sb.toString(), jr.toString());
        }
    }
    private void saveCityTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap,String wlyyQuotaId, Map<String, City> cityMap, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3, Integer start2, Integer start3) {
    private void saveCityTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap, String wlyyQuotaId, Map<String, City> cityMap, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3, Integer start2, Integer start3) {
        //遍历团队的Map
        for(Map.Entry<String,City> oneCityTeam:cityMap.entrySet()){
            City cityObj=oneCityTeam.getValue();
            JSONArray jr=new JSONArray();
            String level1="4";
        for (Map.Entry<String, City> oneCityTeam : cityMap.entrySet()) {
            City cityObj = oneCityTeam.getValue();
            JSONArray jr = new JSONArray();
            String level1 = "4";
            //得到每个团队的2级维度
            Map<String, Map<String, List<ETLModel>>> twoETLMap= etlModelMap.get(oneCityTeam.getKey());
            for(int i=start2;i<=foreachNum2;i++){
            Map<String, Map<String, List<ETLModel>>> twoETLMap = etlModelMap.get(oneCityTeam.getKey());
            for (int i = start2; i <= foreachNum2; i++) {
                //得到每个团队的三级维度
                JSONArray jrLevel2=new JSONArray();
                Map<String, List<ETLModel>> threeETLMap= new HashMap<String, List<ETLModel>>();
                if(twoETLMap!=null){
                    threeETLMap=twoETLMap.get(i+"");
                JSONArray jrLevel2 = new JSONArray();
                Map<String, List<ETLModel>> threeETLMap = new HashMap<String, List<ETLModel>>();
                if (twoETLMap != null) {
                    threeETLMap = twoETLMap.get(i + "");
                }
                for(int j=start3;j<=foreachNum3;j++){
                    String level2=i+"";
                    String level3=j+"";
                    int num=0;
                    if(threeETLMap!=null&&threeETLMap.size()>0){
                        List<ETLModel> etlModelList= threeETLMap.get(j+"");
                        if(etlModelList!=null&&etlModelList.size()>0){
                            num=etlModelList.size();
                for (int j = start3; j <= foreachNum3; j++) {
                    String level2 = i + "";
                    String level3 = j + "";
                    int num = 0;
                    if (threeETLMap != null && threeETLMap.size() > 0) {
                        List<ETLModel> etlModelList = threeETLMap.get(j + "");
                        if (etlModelList != null && etlModelList.size() > 0) {
                            num = etlModelList.size();
                        }
                    }
                    JSONObject jo=new JSONObject();
                    JSONObject jo = new JSONObject();
                    jo.put("date", DateUtil.dateToStrLong(new Date()));
                    jo.put("num", num);
                    jo.put("name",getLevel3Name(level3,type3));
                    jo.put("code",level3);
                    jo.put("name", getLevel3Name(level3, type3));
                    jo.put("code", level3);
                    StringBuffer sb=new StringBuffer("quota:"+wlyyQuotaId+":"+level1+":"+cityObj.getCode()+":"+level2+":"+level3+":"+timeKey);
                    StringBuffer sb = new StringBuffer("quota:" + wlyyQuotaId + ":" + level1 + ":" + cityObj.getCode() + ":" + level2 + ":" + level3 + ":" + timeKey);
                    keys.add(sb.toString());
                    redisTemplate.opsForValue().set(sb.toString(), jo.toString());
                    jrLevel2.put(jo);
                    jr.put(jo);
                }
                StringBuffer sb=new StringBuffer("quota:"+wlyyQuotaId+":"+level1+":"+cityObj.getCode()+":"+i+":"+timeKey);
                StringBuffer sb = new StringBuffer("quota:" + wlyyQuotaId + ":" + level1 + ":" + cityObj.getCode() + ":" + i + ":" + timeKey);
                keys.add(sb.toString());
                redisTemplate.opsForValue().set(sb.toString(), jrLevel2.toString());
            }
            StringBuffer sb=new StringBuffer("quota:"+wlyyQuotaId+":"+level1+":"+cityObj.getCode()+":"+timeKey);
            StringBuffer sb = new StringBuffer("quota:" + wlyyQuotaId + ":" + level1 + ":" + cityObj.getCode() + ":" + timeKey);
            keys.add(sb.toString());
            redisTemplate.opsForValue().set(sb.toString(), jr.toString());
        }
    }
    private void saveByLevel2Public(List<Map<String, Map<String, List<ETLModel>>>> data,List<Map<String, Map<String, List<ETLModel>>>> deleteData, String wlyyQuotaId, Integer foreachNum, Integer type, Integer start) {
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
    private void saveByLevel2Public(List<Map<String, Map<String, List<ETLModel>>>> data, List<Map<String, Map<String, List<ETLModel>>>> deleteData, String wlyyQuotaId, Integer foreachNum, Integer type, Integer start) {
        List<AdminTeam> adminTeams = doctorAdminTeamDao.findAllTeam();
        adminTeamMap = new HashMap<String, AdminTeam>();
        for (AdminTeam adminTeam : adminTeams) {
            adminTeamMap.put(adminTeam.getId()+"", adminTeam);
            adminTeamMap.put(adminTeam.getId() + "", adminTeam);
        }
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospitalzxFWZ();
@ -597,23 +609,23 @@ public class RedisStorage {
        }
        //查找出厦门市全部的区
        List<Town> towns = townDao.findByCityCode(Constant.city);
         townsMap = new HashMap<String, Town>();
        townsMap = new HashMap<String, Town>();
        for (Town town : towns) {
            townsMap.put(town.getCode(), town);
        }
        //全部的市
        Map<String, City> cityMap = new HashMap<String, City>();
        City city=new City();
        City city = new City();
        city.setCode(Constant.city);
        city.setName(Constant.cityName);
        cityMap.put(Constant.city,city);
        cityMap.put(Constant.city, city);
        Map<String, Map<String, List<ETLModel>>> adminTeam=data.get(0);//团队的数据
        Map<String, Map<String, List<ETLModel>>> orgTeam=data.get(1);//机构的数据
        Map<String, Map<String, List<ETLModel>>> townTeam=data.get(2);//区的数据
        Map<String, Map<String, List<ETLModel>>> cityTeam=data.get(3);//市的数据
        Map<String, Map<String, List<ETLModel>>> adminTeam = data.get(0);//团队的数据
        Map<String, Map<String, List<ETLModel>>> orgTeam = data.get(1);//机构的数据
        Map<String, Map<String, List<ETLModel>>> townTeam = data.get(2);//区的数据
        Map<String, Map<String, List<ETLModel>>> cityTeam = data.get(3);//市的数据
        if(deleteData!=null){
        if (deleteData != null) {
//            //保存市
//            saveLevel2City(wlyyQuotaId, cityMap, cityTeam,deleteData.get(3),foreachNum,type,start);
//            //保存区
@ -622,347 +634,356 @@ public class RedisStorage {
//            saveLevel2Org(wlyyQuotaId, hospitalsMap, orgTeam,deleteData.get(1),foreachNum,type,start);
//            //保存全科团队
//            saveLevel2Team(wlyyQuotaId, adminTeamMap, adminTeam,deleteData.get(0),foreachNum,type,start);
        }else{
        } else {
            //保存市
            saveLevel2City(wlyyQuotaId, cityMap, cityTeam,foreachNum,type,start);
            saveLevel2City(wlyyQuotaId, cityMap, cityTeam, foreachNum, type, start);
            //保存区
            saveLevel2Town(wlyyQuotaId, townsMap, townTeam,foreachNum,type,start);
            saveLevel2Town(wlyyQuotaId, townsMap, townTeam, foreachNum, type, start);
            //保存机构
            saveLevel2Org(wlyyQuotaId, hospitalsMap, orgTeam,foreachNum,type,start);
            saveLevel2Org(wlyyQuotaId, hospitalsMap, orgTeam, foreachNum, type, start);
            //保存全科团队
            saveLevel2Team(wlyyQuotaId, adminTeamMap, adminTeam,foreachNum,type,start);
            saveLevel2Team(wlyyQuotaId, adminTeamMap, adminTeam, foreachNum, type, start);
        }
    }
    private void saveLevel2Team(String wlyyQuotaId, Map<String, AdminTeam> adminTeamMap, Map<String, Map<String, List<ETLModel>>> eltModel, Map<String, Map<String, List<ETLModel>>> deleteEltModel, Integer foreachNum, Integer type,Integer start) {
        for(Map.Entry<String,AdminTeam> adminTeam:adminTeamMap.entrySet()){
            Map<String, List<ETLModel>> oneELTMap= eltModel.get(adminTeam.getKey());
            Map<String, List<ETLModel>> deleteOneELTMap= deleteEltModel.get(adminTeam.getKey());
            for(int i=start;i<=foreachNum;i++){
                AdminTeam adminTeamObj=adminTeam.getValue();
                if(adminTeamObj==null)continue;
                JSONObject jo=new JSONObject();
                int num=0;
                if(oneELTMap!=null){
                    List<ETLModel> etlModel= oneELTMap.get(i+"");
                    if(etlModel!=null&&etlModel.size()>0){
                        num=etlModel.size();
    private void saveLevel2Team(String wlyyQuotaId, Map<String, AdminTeam> adminTeamMap, Map<String, Map<String, List<ETLModel>>> eltModel, Map<String, Map<String, List<ETLModel>>> deleteEltModel, Integer foreachNum, Integer type, Integer start) {
        for (Map.Entry<String, AdminTeam> adminTeam : adminTeamMap.entrySet()) {
            Map<String, List<ETLModel>> oneELTMap = eltModel.get(adminTeam.getKey());
            Map<String, List<ETLModel>> deleteOneELTMap = deleteEltModel.get(adminTeam.getKey());
            for (int i = start; i <= foreachNum; i++) {
                AdminTeam adminTeamObj = adminTeam.getValue();
                if (adminTeamObj == null) continue;
                JSONObject jo = new JSONObject();
                int num = 0;
                if (oneELTMap != null) {
                    List<ETLModel> etlModel = oneELTMap.get(i + "");
                    if (etlModel != null && etlModel.size() > 0) {
                        num = etlModel.size();
                    }
                }
                if(deleteOneELTMap!=null){
                    List<ETLModel> etlModel1= deleteOneELTMap.get(i+"");
                    if(etlModel1!=null&&etlModel1.size()>0){
                        num=num-etlModel1.size();
                if (deleteOneELTMap != null) {
                    List<ETLModel> etlModel1 = deleteOneELTMap.get(i + "");
                    if (etlModel1 != null && etlModel1.size() > 0) {
                        num = num - etlModel1.size();
                    }
                }
                jo.put("date", DateUtil.dateToStrLong(new Date()));
                jo.put("num", num);
                jo.put("name", adminTeamObj.getName());
                jo.put("code", adminTeamObj.getId());
                String key=i+"";
                redisTemplate.opsForValue().set(new StringBuffer("quota:"+wlyyQuotaId+":1:"+key+":"+adminTeam.getKey()).toString(), jo.toString());
                String key = i + "";
                redisTemplate.opsForValue().set(new StringBuffer("quota:" + wlyyQuotaId + ":1:" + key + ":" + adminTeam.getKey()).toString(), jo.toString());
            }
        }
    }
    private void saveLevel2Team(String wlyyQuotaId, Map<String, AdminTeam> adminTeamMap, Map<String, Map<String, List<ETLModel>>> eltModel,  Integer foreachNum, Integer type,Integer start) {
        for(Map.Entry<String,AdminTeam> adminTeam:adminTeamMap.entrySet()){
            Map<String, List<ETLModel>> oneELTMap= eltModel.get(adminTeam.getKey());
            JSONArray level2=new JSONArray();
            for(int i=start;i<=foreachNum;i++){
                AdminTeam adminTeamObj=adminTeam.getValue();
                if(adminTeamObj==null)continue;
                JSONObject jo=new JSONObject();
                int num=0;
                if(oneELTMap!=null){
                    List<ETLModel> etlModel= oneELTMap.get(i+"");
                    if(etlModel!=null&&etlModel.size()>0){
                        num=etlModel.size();
    private void saveLevel2Team(String wlyyQuotaId, Map<String, AdminTeam> adminTeamMap, Map<String, Map<String, List<ETLModel>>> eltModel, Integer foreachNum, Integer type, Integer start) {
        for (Map.Entry<String, AdminTeam> adminTeam : adminTeamMap.entrySet()) {
            Map<String, List<ETLModel>> oneELTMap = eltModel.get(adminTeam.getKey());
            JSONArray level2 = new JSONArray();
            for (int i = start; i <= foreachNum; i++) {
                AdminTeam adminTeamObj = adminTeam.getValue();
                if (adminTeamObj == null) continue;
                JSONObject jo = new JSONObject();
                int num = 0;
                if (oneELTMap != null) {
                    List<ETLModel> etlModel = oneELTMap.get(i + "");
                    if (etlModel != null && etlModel.size() > 0) {
                        num = etlModel.size();
                    }
                }
                jo.put("date", DateUtil.dateToStrLong(new Date()));
                jo.put("num", num);
                String key=i+"";
                jo.put("name", getLevel2Name(key,type));
                jo.put("code",key);
                String key = i + "";
                jo.put("name", getLevel2Name(key, type));
                jo.put("code", key);
                StringBuffer sb=new StringBuffer("quota:"+wlyyQuotaId+":1:"+adminTeam.getKey().toString()+":"+key+":"+timeKey);
                StringBuffer sb = new StringBuffer("quota:" + wlyyQuotaId + ":1:" + adminTeam.getKey().toString() + ":" + key + ":" + timeKey);
                keys.add(sb.toString());
                redisTemplate.opsForValue().set(sb.toString(), jo.toString());
                level2.put(jo);
            }
            StringBuffer sb=new StringBuffer("quota:"+wlyyQuotaId+":1:"+adminTeam.getKey().toString()+":"+timeKey);
            StringBuffer sb = new StringBuffer("quota:" + wlyyQuotaId + ":1:" + adminTeam.getKey().toString() + ":" + timeKey);
            keys.add(sb.toString());
            redisTemplate.opsForValue().set(sb.toString(), level2.toString());
        }
    }
    private void saveLevel2Org(String wlyyQuotaId, Map<String, Hospital> hospitalsMap, Map<String, Map<String, List<ETLModel>>> eltModel, Map<String, Map<String, List<ETLModel>>> deleteEltModel, Integer foreachNum, Integer type,Integer start) {
        for(Map.Entry<String,Hospital> hospital:hospitalsMap.entrySet()){
            Map<String, List<ETLModel>> oneELTMap= eltModel.get(hospital.getKey());
            Map<String, List<ETLModel>> deleteOneELTMap= deleteEltModel.get(hospital.getKey());
            for(int i=start;i<=foreachNum;i++){
                Hospital hospitalObj=hospital.getValue();
                if(hospitalObj==null)continue;
                JSONObject jo=new JSONObject();
                int num=0;
                if(oneELTMap!=null){
                    List<ETLModel> etlModel= oneELTMap.get(i+"");
                    if(etlModel!=null&&etlModel.size()>0){
                        num=etlModel.size();
    private void saveLevel2Org(String wlyyQuotaId, Map<String, Hospital> hospitalsMap, Map<String, Map<String, List<ETLModel>>> eltModel, Map<String, Map<String, List<ETLModel>>> deleteEltModel, Integer foreachNum, Integer type, Integer start) {
        for (Map.Entry<String, Hospital> hospital : hospitalsMap.entrySet()) {
            Map<String, List<ETLModel>> oneELTMap = eltModel.get(hospital.getKey());
            Map<String, List<ETLModel>> deleteOneELTMap = deleteEltModel.get(hospital.getKey());
            for (int i = start; i <= foreachNum; i++) {
                Hospital hospitalObj = hospital.getValue();
                if (hospitalObj == null) continue;
                JSONObject jo = new JSONObject();
                int num = 0;
                if (oneELTMap != null) {
                    List<ETLModel> etlModel = oneELTMap.get(i + "");
                    if (etlModel != null && etlModel.size() > 0) {
                        num = etlModel.size();
                    }
                }
                if(deleteOneELTMap!=null){
                    List<ETLModel> etlModel1= deleteOneELTMap.get(i+"");
                    if(etlModel1!=null&&etlModel1.size()>0){
                        num=num-etlModel1.size();
                if (deleteOneELTMap != null) {
                    List<ETLModel> etlModel1 = deleteOneELTMap.get(i + "");
                    if (etlModel1 != null && etlModel1.size() > 0) {
                        num = num - etlModel1.size();
                    }
                }
                jo.put("date", DateUtil.dateToStrLong(new Date()));
                jo.put("num", num);
                jo.put("name", hospitalObj.getName());
                jo.put("code", hospitalObj.getCode());
                String key=i+"";
                redisTemplate.opsForValue().set(new StringBuffer("quota:"+wlyyQuotaId+":2:"+key+":"+hospital.getKey()).toString(), jo.toString());
                String key = i + "";
                redisTemplate.opsForValue().set(new StringBuffer("quota:" + wlyyQuotaId + ":2:" + key + ":" + hospital.getKey()).toString(), jo.toString());
            }
        }
    }
    private void saveLevel2Town(String wlyyQuotaId, Map<String, Town> townsMap, Map<String, Map<String, List<ETLModel>>> eltModel,  Integer foreachNum, Integer type,Integer start) {
        for(Map.Entry<String,Town> town:townsMap.entrySet()){
            Map<String, List<ETLModel>> oneELTMap= eltModel.get(town.getKey());
            JSONArray level2=new JSONArray();
            for(int i=start;i<=foreachNum;i++){
                JSONObject jo=new JSONObject();
                int num=0;
                if(oneELTMap!=null){
                    List<ETLModel> etlModel= oneELTMap.get(i+"");
                    if(etlModel!=null&&etlModel.size()>0){
                        num=etlModel.size();
    private void saveLevel2Town(String wlyyQuotaId, Map<String, Town> townsMap, Map<String, Map<String, List<ETLModel>>> eltModel, Integer foreachNum, Integer type, Integer start) {
        for (Map.Entry<String, Town> town : townsMap.entrySet()) {
            Map<String, List<ETLModel>> oneELTMap = eltModel.get(town.getKey());
            JSONArray level2 = new JSONArray();
            for (int i = start; i <= foreachNum; i++) {
                JSONObject jo = new JSONObject();
                int num = 0;
                if (oneELTMap != null) {
                    List<ETLModel> etlModel = oneELTMap.get(i + "");
                    if (etlModel != null && etlModel.size() > 0) {
                        num = etlModel.size();
                    }
                }
                jo.put("date", DateUtil.dateToStrLong(new Date()));
                jo.put("num", num);
                String key=i+"";
                jo.put("name", getLevel2Name(key,type));
                jo.put("code",key);
                String key = i + "";
                jo.put("name", getLevel2Name(key, type));
                jo.put("code", key);
                StringBuffer sb=new StringBuffer("quota:"+wlyyQuotaId+":3:"+town.getKey()+":"+key+":"+timeKey);
                StringBuffer sb = new StringBuffer("quota:" + wlyyQuotaId + ":3:" + town.getKey() + ":" + key + ":" + timeKey);
                keys.add(sb.toString());
                redisTemplate.opsForValue().set(sb.toString(), jo.toString());
                level2.put(jo);
            }
            StringBuffer sb=new StringBuffer("quota:"+wlyyQuotaId+":3:"+town.getKey()+":"+timeKey);
            StringBuffer sb = new StringBuffer("quota:" + wlyyQuotaId + ":3:" + town.getKey() + ":" + timeKey);
            keys.add(sb.toString());
            redisTemplate.opsForValue().set(sb.toString(), level2.toString());
        }
    }
    private void saveLevel2Org(String wlyyQuotaId, Map<String, Hospital> hospitalsMap, Map<String, Map<String, List<ETLModel>>> eltModel,Integer foreachNum, Integer type,Integer start) {
        Map<String,Map<String,JSONArray>> townjr=new HashMap<String,Map<String,JSONArray>>();
        for(Map.Entry<String,Hospital> hospital:hospitalsMap.entrySet()){
            Map<String, List<ETLModel>> oneELTMap= eltModel.get(hospital.getKey());
            JSONArray level2=new JSONArray();
            for(int i=start;i<=foreachNum;i++){
                Hospital hospitalObj=hospital.getValue();
                if(hospitalObj==null)continue;
                JSONObject jo=new JSONObject();
                int num=0;
                if(oneELTMap!=null){
                    List<ETLModel> etlModel= oneELTMap.get(i+"");
                    if(etlModel!=null&&etlModel.size()>0){
                        num=etlModel.size();
    private void saveLevel2Org(String wlyyQuotaId, Map<String, Hospital> hospitalsMap, Map<String, Map<String, List<ETLModel>>> eltModel, Integer foreachNum, Integer type, Integer start) {
        Map<String, Map<String, JSONArray>> townjr = new HashMap<String, Map<String, JSONArray>>();
        for (Map.Entry<String, Hospital> hospital : hospitalsMap.entrySet()) {
            Map<String, List<ETLModel>> oneELTMap = eltModel.get(hospital.getKey());
            JSONArray level2 = new JSONArray();
            for (int i = start; i <= foreachNum; i++) {
                Hospital hospitalObj = hospital.getValue();
                if (hospitalObj == null) continue;
                JSONObject jo = new JSONObject();
                int num = 0;
                if (oneELTMap != null) {
                    List<ETLModel> etlModel = oneELTMap.get(i + "");
                    if (etlModel != null && etlModel.size() > 0) {
                        num = etlModel.size();
                    }
                }
                jo.put("date", DateUtil.dateToStrLong(new Date()));
                jo.put("num", num);
                String key=i+"";
                jo.put("name", getLevel2Name(key,type));
                jo.put("code",key);
                String key = i + "";
                jo.put("name", getLevel2Name(key, type));
                jo.put("code", key);
                addJOLeval2(townjr,hospitalObj.getTown(),key,jo);
                addJOLeval2(townjr, hospitalObj.getTown(), key, jo);
                level2.put(jo);
                StringBuffer sb=new StringBuffer("quota:"+wlyyQuotaId+":2:"+hospital.getKey().toString()+":"+key+":"+timeKey);
                StringBuffer sb = new StringBuffer("quota:" + wlyyQuotaId + ":2:" + hospital.getKey().toString() + ":" + key + ":" + timeKey);
                keys.add(sb.toString());
                redisTemplate.opsForValue().set(sb.toString(), jo.toString());
            }
            StringBuffer sb=new StringBuffer("quota:"+wlyyQuotaId+":2:"+hospital.getKey().toString()+":"+timeKey);
            StringBuffer sb = new StringBuffer("quota:" + wlyyQuotaId + ":2:" + hospital.getKey().toString() + ":" + timeKey);
            keys.add(sb.toString());
            redisTemplate.opsForValue().set(sb.toString(), level2.toString());
        }
    }
    private void saveLevel2Town(String wlyyQuotaId, Map<String, Town> townsMap, Map<String, Map<String, List<ETLModel>>> eltModel, Map<String, Map<String, List<ETLModel>>> deleteEltModel, Integer foreachNum, Integer type,Integer start) {
        for(Map.Entry<String,Town> town:townsMap.entrySet()){
            Map<String, List<ETLModel>> oneELTMap= eltModel.get(town.getKey());
            Map<String, List<ETLModel>> deleteOneELTMap= deleteEltModel.get(town.getKey());
            for(int i=1;i<=foreachNum;i++){
                JSONObject jo=new JSONObject();
                int num=0;
                if(oneELTMap!=null){
                    List<ETLModel> etlModel= oneELTMap.get(i+"");
                    if(etlModel!=null&&etlModel.size()>0){
                        num=etlModel.size();
    private void saveLevel2Town(String wlyyQuotaId, Map<String, Town> townsMap, Map<String, Map<String, List<ETLModel>>> eltModel, Map<String, Map<String, List<ETLModel>>> deleteEltModel, Integer foreachNum, Integer type, Integer start) {
        for (Map.Entry<String, Town> town : townsMap.entrySet()) {
            Map<String, List<ETLModel>> oneELTMap = eltModel.get(town.getKey());
            Map<String, List<ETLModel>> deleteOneELTMap = deleteEltModel.get(town.getKey());
            for (int i = 1; i <= foreachNum; i++) {
                JSONObject jo = new JSONObject();
                int num = 0;
                if (oneELTMap != null) {
                    List<ETLModel> etlModel = oneELTMap.get(i + "");
                    if (etlModel != null && etlModel.size() > 0) {
                        num = etlModel.size();
                    }
                }
                if(deleteOneELTMap!=null){
                    List<ETLModel> etlModel1= deleteOneELTMap.get(i+"");
                    if(etlModel1!=null&&etlModel1.size()>0){
                        num=num-etlModel1.size();
                if (deleteOneELTMap != null) {
                    List<ETLModel> etlModel1 = deleteOneELTMap.get(i + "");
                    if (etlModel1 != null && etlModel1.size() > 0) {
                        num = num - etlModel1.size();
                    }
                }
                jo.put("date", DateUtil.dateToStrLong(new Date()));
                jo.put("num", num);
                jo.put("name", town.getValue().getName());
                jo.put("code", town.getValue().getCode());
                String key=i+"";
                jo.put("name", getLevel2Name(key,type));
                redisTemplate.opsForValue().set(new StringBuffer("quota:"+wlyyQuotaId+":3:"+key+":"+town.getKey()).toString(), jo.toString());
                String key = i + "";
                jo.put("name", getLevel2Name(key, type));
                redisTemplate.opsForValue().set(new StringBuffer("quota:" + wlyyQuotaId + ":3:" + key + ":" + town.getKey()).toString(), jo.toString());
            }
        }
    }
    private void saveLevel2City(String wlyyQuotaId, Map<String, City> cityMap, Map<String, Map<String, List<ETLModel>>> eltModel, Map<String, Map<String, List<ETLModel>>> deleteEltModel, Integer foreachNum, Integer type,Integer start) {
        for(Map.Entry<String,City> city:cityMap.entrySet()){
            Map<String, List<ETLModel>> oneELTMap= eltModel.get(city.getKey());
            Map<String, List<ETLModel>> deleteOneELTMap= deleteEltModel.get(city.getKey());
            for(int i=start;i<=foreachNum;i++){
                JSONObject jo=new JSONObject();
                int num=0;
                if(oneELTMap!=null){
                    List<ETLModel> etlModel= oneELTMap.get(i+"");
                    if(etlModel!=null&&etlModel.size()>0){
                        num=etlModel.size();
    private void saveLevel2City(String wlyyQuotaId, Map<String, City> cityMap, Map<String, Map<String, List<ETLModel>>> eltModel, Map<String, Map<String, List<ETLModel>>> deleteEltModel, Integer foreachNum, Integer type, Integer start) {
        for (Map.Entry<String, City> city : cityMap.entrySet()) {
            Map<String, List<ETLModel>> oneELTMap = eltModel.get(city.getKey());
            Map<String, List<ETLModel>> deleteOneELTMap = deleteEltModel.get(city.getKey());
            for (int i = start; i <= foreachNum; i++) {
                JSONObject jo = new JSONObject();
                int num = 0;
                if (oneELTMap != null) {
                    List<ETLModel> etlModel = oneELTMap.get(i + "");
                    if (etlModel != null && etlModel.size() > 0) {
                        num = etlModel.size();
                    }
                }
                if(deleteOneELTMap!=null){
                    List<ETLModel> etlModel1= deleteOneELTMap.get(i+"");
                    if(etlModel1!=null&&etlModel1.size()>0){
                        num=num-etlModel1.size();
                if (deleteOneELTMap != null) {
                    List<ETLModel> etlModel1 = deleteOneELTMap.get(i + "");
                    if (etlModel1 != null && etlModel1.size() > 0) {
                        num = num - etlModel1.size();
                    }
                }
                jo.put("date", DateUtil.dateToStrLong(new Date()));
                jo.put("num", num);
                jo.put("name", city.getValue().getName());
                jo.put("code", city.getValue().getCode());
                String key=i+"";
                jo.put("name", getLevel2Name(key,type));
                jo.put("name", getLevel2Name(key,type));
                redisTemplate.opsForValue().set(new StringBuffer("quota:"+wlyyQuotaId+":4:"+key+":"+city.getKey()).toString(), jo.toString());
                String key = i + "";
                jo.put("name", getLevel2Name(key, type));
                jo.put("name", getLevel2Name(key, type));
                redisTemplate.opsForValue().set(new StringBuffer("quota:" + wlyyQuotaId + ":4:" + key + ":" + city.getKey()).toString(), jo.toString());
            }
        }
    }
    private void saveLevel2City(String wlyyQuotaId, Map<String, City> cityMap, Map<String, Map<String, List<ETLModel>>> eltModel,  Integer foreachNum, Integer type,Integer start) {
        for(Map.Entry<String,City> city:cityMap.entrySet()){
            Map<String, List<ETLModel>> oneELTMap= eltModel.get(city.getKey());
            JSONArray level2=new JSONArray();
            for(int i=start;i<=foreachNum;i++){
                JSONObject jo=new JSONObject();
                int num=0;
                if(oneELTMap!=null){
                    List<ETLModel> etlModel= oneELTMap.get(i+"");
                    if(etlModel!=null&&etlModel.size()>0){
                        num=etlModel.size();
    private void saveLevel2City(String wlyyQuotaId, Map<String, City> cityMap, Map<String, Map<String, List<ETLModel>>> eltModel, Integer foreachNum, Integer type, Integer start) {
        for (Map.Entry<String, City> city : cityMap.entrySet()) {
            Map<String, List<ETLModel>> oneELTMap = eltModel.get(city.getKey());
            JSONArray level2 = new JSONArray();
            for (int i = start; i <= foreachNum; i++) {
                JSONObject jo = new JSONObject();
                int num = 0;
                if (oneELTMap != null) {
                    List<ETLModel> etlModel = oneELTMap.get(i + "");
                    if (etlModel != null && etlModel.size() > 0) {
                        num = etlModel.size();
                    }
                }
                jo.put("date", DateUtil.dateToStrLong(new Date()));
                jo.put("num", num);
                String key=i+"";
                String key = i + "";
                jo.put("code", key);
                jo.put("name", getLevel2Name(key,type));
                jo.put("name", getLevel2Name(key, type));
                StringBuffer sb=new StringBuffer("quota:"+wlyyQuotaId+":4:"+city.getKey()+":"+key+":"+timeKey);
                StringBuffer sb = new StringBuffer("quota:" + wlyyQuotaId + ":4:" + city.getKey() + ":" + key + ":" + timeKey);
                keys.add(sb.toString());
                redisTemplate.opsForValue().set(sb.toString(), jo.toString());
                level2.put(jo);
            }
            StringBuffer sb=new StringBuffer("quota:"+wlyyQuotaId+":4:"+city.getKey()+":"+timeKey);
            StringBuffer sb = new StringBuffer("quota:" + wlyyQuotaId + ":4:" + city.getKey() + ":" + timeKey);
            keys.add(sb.toString());
            redisTemplate.opsForValue().set(sb.toString(), level2.toString());
        }
    }
    private void saveLevel1Team(String wlyyQuotaId, Map<String, AdminTeam> adminTeamMap, Map<String, List<ETLModel>> adminTeam) {
        JSONArray cityjr=new JSONArray();
        Map<String,JSONArray> townjr=new HashMap<String,JSONArray>();//key是town
        Map<String,JSONArray> orgjr=new HashMap<String,JSONArray>();//key是机构
        for(Map.Entry<String,AdminTeam> entry:adminTeamMap.entrySet()){
            JSONObject jo=new JSONObject();
            Integer num=0;
            AdminTeam adminTeamObj=entry.getValue();
            if(adminTeamObj==null)continue;
            List<ETLModel> etlList=adminTeam.get(entry.getKey());
            if(etlList!=null&&etlList.size()>0){
                num=etlList.size();
        JSONArray cityjr = new JSONArray();
        Map<String, JSONArray> townjr = new HashMap<String, JSONArray>();//key是town
        Map<String, JSONArray> orgjr = new HashMap<String, JSONArray>();//key是机构
        for (Map.Entry<String, AdminTeam> entry : adminTeamMap.entrySet()) {
            JSONObject jo = new JSONObject();
            Integer num = 0;
            AdminTeam adminTeamObj = entry.getValue();
            if (adminTeamObj == null) continue;
            List<ETLModel> etlList = adminTeam.get(entry.getKey());
            if (etlList != null && etlList.size() > 0) {
                num = etlList.size();
            }
            jo.put("date", DateUtil.dateToStrLong(new Date()));
            jo.put("num", num);
            jo.put("name", adminTeamObj.getName());
            jo.put("code", adminTeamObj.getId()+"");
            jo.put("code", adminTeamObj.getId() + "");
            String orgKey=adminTeamObj.getOrgCode();
            Hospital hospital=hospitalsMap.get(orgKey);
            if(hospital==null)continue;
            String townKey=hospital.getTown();
            String orgKey = adminTeamObj.getOrgCode();
            Hospital hospital = hospitalsMap.get(orgKey);
            if (hospital == null) continue;
            String townKey = hospital.getTown();
            cityjr.put(jo);
            addJO(townjr,townKey,jo);
            addJO(orgjr,orgKey,jo);
            addJO(townjr, townKey, jo);
            addJO(orgjr, orgKey, jo);
            StringBuffer key=new StringBuffer("quota:"+wlyyQuotaId+":1:"+entry.getKey()+":"+timeKey);
            StringBuffer key = new StringBuffer("quota:" + wlyyQuotaId + ":1:" + entry.getKey() + ":" + timeKey);
            keys.add(key.toString());
            redisTemplate.opsForValue().set(key.toString(), jo.toString());
        }
        //保存市下面全部的团队
        StringBuffer key=new StringBuffer("quota:"+wlyyQuotaId+":4:"+Constant.city+":1:"+timeKey);
        StringBuffer key = new StringBuffer("quota:" + wlyyQuotaId + ":4:" + Constant.city + ":1:" + timeKey);
        keys.add(key.toString());
        redisTemplate.opsForValue().set(key.toString(), cityjr.toString());
        //保存区下面全部的团队
        for(Map.Entry<String,JSONArray> entry:townjr.entrySet()){
            key=new StringBuffer("quota:"+wlyyQuotaId+":3:"+entry.getKey()+":1:"+timeKey);
        for (Map.Entry<String, JSONArray> entry : townjr.entrySet()) {
            key = new StringBuffer("quota:" + wlyyQuotaId + ":3:" + entry.getKey() + ":1:" + timeKey);
            keys.add(key.toString());
            redisTemplate.opsForValue().set(key.toString(), entry.getValue().toString());
        }
        //保存机构下面全部的团队
        for(Map.Entry<String,JSONArray> entry:orgjr.entrySet()){
            key=new StringBuffer("quota:"+wlyyQuotaId+":2:"+entry.getKey()+":1:"+timeKey);
        for (Map.Entry<String, JSONArray> entry : orgjr.entrySet()) {
            key = new StringBuffer("quota:" + wlyyQuotaId + ":2:" + entry.getKey() + ":1:" + timeKey);
            keys.add(key.toString());
            redisTemplate.opsForValue().set(key.toString(), entry.getValue().toString());
        }
    }
    private void saveLevel1Team(String wlyyQuotaId, Map<String, AdminTeam> adminTeamMap, Map<String, List<ETLModel>> adminTeam, Map<String, List<ETLModel>> deleteAdminTeam) {
        for(Map.Entry<String,AdminTeam> entry:adminTeamMap.entrySet()){
            JSONObject jo=new JSONObject();
            Integer num=0;
            AdminTeam adminTeamObj=entry.getValue();
            if(adminTeamObj==null)continue;
            List<ETLModel> etlList=adminTeam.get(entry.getKey());
            if(etlList!=null&&etlList.size()>0){
                num=etlList.size();
        for (Map.Entry<String, AdminTeam> entry : adminTeamMap.entrySet()) {
            JSONObject jo = new JSONObject();
            Integer num = 0;
            AdminTeam adminTeamObj = entry.getValue();
            if (adminTeamObj == null) continue;
            List<ETLModel> etlList = adminTeam.get(entry.getKey());
            if (etlList != null && etlList.size() > 0) {
                num = etlList.size();
            }
            if(deleteAdminTeam!=null&&deleteAdminTeam.size()>0){
                List<ETLModel> deleteEtlList=deleteAdminTeam.get(entry.getKey());
                if(deleteEtlList!=null&&deleteEtlList.size()>0){
                    num=num-deleteEtlList.size();
            if (deleteAdminTeam != null && deleteAdminTeam.size() > 0) {
                List<ETLModel> deleteEtlList = deleteAdminTeam.get(entry.getKey());
                if (deleteEtlList != null && deleteEtlList.size() > 0) {
                    num = num - deleteEtlList.size();
                }
            }
            jo.put("date", DateUtil.dateToStrLong(new Date()));
            jo.put("num", num);
            jo.put("name", adminTeamObj.getName());
            jo.put("code", adminTeamObj.getId());
            redisTemplate.opsForValue().set(new StringBuffer("quota:"+wlyyQuotaId+":1:"+entry.getKey()).toString()+":0", jo.toString());
            redisTemplate.opsForValue().set(new StringBuffer("quota:" + wlyyQuotaId + ":1:" + entry.getKey()).toString() + ":0", jo.toString());
        }
    }
    private void saveLevel1Org(String wlyyQuotaId, Map<String, Hospital> hospitalsMap, Map<String, List<ETLModel>> orgTeam) {
        JSONArray cityjr=new JSONArray();
        Map<String,JSONArray> townjr=new HashMap<String,JSONArray>();
        for(Map.Entry<String,Hospital> entry:hospitalsMap.entrySet()){
            Hospital hospital=entry.getValue();
            if(hospital==null)continue;
            JSONObject jo=new JSONObject();
            Integer num=0;
            List<ETLModel> etlList=orgTeam.get(entry.getKey());
            if(etlList!=null&&etlList.size()>0){
                num=etlList.size();
        JSONArray cityjr = new JSONArray();
        Map<String, JSONArray> townjr = new HashMap<String, JSONArray>();
        for (Map.Entry<String, Hospital> entry : hospitalsMap.entrySet()) {
            Hospital hospital = entry.getValue();
            if (hospital == null) continue;
            JSONObject jo = new JSONObject();
            Integer num = 0;
            List<ETLModel> etlList = orgTeam.get(entry.getKey());
            if (etlList != null && etlList.size() > 0) {
                num = etlList.size();
            }
            jo.put("date", DateUtil.dateToStrLong(new Date()));
            jo.put("num", num);
@ -970,166 +991,169 @@ public class RedisStorage {
            jo.put("code", hospital.getCode());
            cityjr.put(jo);
            String townKey=hospital.getTown();
            String townKey = hospital.getTown();
            addJO(townjr, townKey, jo);
            StringBuffer key=new StringBuffer("quota:"+wlyyQuotaId+":2:"+entry.getKey()+":"+timeKey);
            StringBuffer key = new StringBuffer("quota:" + wlyyQuotaId + ":2:" + entry.getKey() + ":" + timeKey);
            keys.add(key.toString());
            redisTemplate.opsForValue().set(key.toString(), jo.toString());
        }
        //保存市下面全部的机构
        StringBuffer key=new StringBuffer("quota:"+wlyyQuotaId+":4:"+Constant.city+":2:"+timeKey);
        StringBuffer key = new StringBuffer("quota:" + wlyyQuotaId + ":4:" + Constant.city + ":2:" + timeKey);
        keys.add(key.toString());
        redisTemplate.opsForValue().set(key.toString(), cityjr.toString());
        //保存区下面全部的机构
        for(Map.Entry<String,JSONArray> entry:townjr.entrySet()){
            key=new StringBuffer("quota:"+wlyyQuotaId+":3:"+entry.getKey()+":2:"+timeKey);
        for (Map.Entry<String, JSONArray> entry : townjr.entrySet()) {
            key = new StringBuffer("quota:" + wlyyQuotaId + ":3:" + entry.getKey() + ":2:" + timeKey);
            keys.add(key.toString());
            redisTemplate.opsForValue().set(key.toString(), entry.getValue().toString());
        }
    }
    private void addJO(Map<String, JSONArray> townjr,String key, JSONObject jo) {
        if(townjr.containsKey(key)){
    private void addJO(Map<String, JSONArray> townjr, String key, JSONObject jo) {
        if (townjr.containsKey(key)) {
            townjr.get(key).put(jo);
        }else{
            JSONArray townjrList=new JSONArray();
        } else {
            JSONArray townjrList = new JSONArray();
            townjrList.put(jo);
            townjr.put(key,townjrList);
            townjr.put(key, townjrList);
        }
    }
    private void addJOLeval2(Map<String,Map<String, JSONArray>> townjr,String key1,String key2, JSONObject jo) {
        if(townjr.containsKey(key1)){
            Map<String, JSONArray> level2=townjr.get(key1);
            if(level2.containsKey(key2)){
                JSONArray jr=level2.get(key2);
    private void addJOLeval2(Map<String, Map<String, JSONArray>> townjr, String key1, String key2, JSONObject jo) {
        if (townjr.containsKey(key1)) {
            Map<String, JSONArray> level2 = townjr.get(key1);
            if (level2.containsKey(key2)) {
                JSONArray jr = level2.get(key2);
                jr.put(jo);
            }else{
                JSONArray jr=new JSONArray();
            } else {
                JSONArray jr = new JSONArray();
                jr.put(jo);
                level2.put(key2,jr);
                level2.put(key2, jr);
            }
        }else{
            Map<String, JSONArray> level2=new HashMap<>();
            JSONArray jr=new JSONArray();
        } else {
            Map<String, JSONArray> level2 = new HashMap<>();
            JSONArray jr = new JSONArray();
            jr.put(jo);
            level2.put(key2,jr);
            townjr.put(key1,level2);
            level2.put(key2, jr);
            townjr.put(key1, level2);
        }
    }
    private void addJOLeval3(Map<String,Map<String, Map<String, JSONArray>>> townjr,String key1,String key2,String key3, JSONObject jo) {
        if(townjr.containsKey(key1)){
            Map<String, Map<String, JSONArray>> level1= townjr.get(key1);
            if(level1.containsKey(key2)){
                Map<String, JSONArray> level2=level1.get(key2);
                if(level2.containsKey(key3)){
                    JSONArray jr=level2.get(key3);
    private void addJOLeval3(Map<String, Map<String, Map<String, JSONArray>>> townjr, String key1, String key2, String key3, JSONObject jo) {
        if (townjr.containsKey(key1)) {
            Map<String, Map<String, JSONArray>> level1 = townjr.get(key1);
            if (level1.containsKey(key2)) {
                Map<String, JSONArray> level2 = level1.get(key2);
                if (level2.containsKey(key3)) {
                    JSONArray jr = level2.get(key3);
                    jr.put(jo);
                }else{
                    JSONArray jr=new JSONArray();
                } else {
                    JSONArray jr = new JSONArray();
                    jr.put(jo);
                    level2.put(key3,jr);
                    level2.put(key3, jr);
                }
            }else{
                Map<String, JSONArray> level2=new HashMap<>();
                JSONArray jr=new JSONArray();
            } else {
                Map<String, JSONArray> level2 = new HashMap<>();
                JSONArray jr = new JSONArray();
                jr.put(jo);
                level2.put(key3,jr);
                level1.put(key2,level2);
                level2.put(key3, jr);
                level1.put(key2, level2);
            }
        }else{
            Map<String, Map<String, JSONArray>> level1=new HashMap<>();
            Map<String, JSONArray> level2=new HashMap<>();
            JSONArray level3=new JSONArray();
        } else {
            Map<String, Map<String, JSONArray>> level1 = new HashMap<>();
            Map<String, JSONArray> level2 = new HashMap<>();
            JSONArray level3 = new JSONArray();
            level3.put(jo);
        }
    }
    private void saveLevel1Org(String wlyyQuotaId, Map<String, Hospital> hospitalsMap, Map<String, List<ETLModel>> orgTeam, Map<String, List<ETLModel>> deleteOrgTeam) {
        for(Map.Entry<String,Hospital> entry:hospitalsMap.entrySet()){
            Hospital hospital=entry.getValue();
            if(hospital==null)continue;
            JSONObject jo=new JSONObject();
            Integer num=0;
            List<ETLModel> etlList=orgTeam.get(entry.getKey());
            if(etlList!=null&&etlList.size()>0){
                num=etlList.size();
        for (Map.Entry<String, Hospital> entry : hospitalsMap.entrySet()) {
            Hospital hospital = entry.getValue();
            if (hospital == null) continue;
            JSONObject jo = new JSONObject();
            Integer num = 0;
            List<ETLModel> etlList = orgTeam.get(entry.getKey());
            if (etlList != null && etlList.size() > 0) {
                num = etlList.size();
            }
            if(deleteOrgTeam!=null&&deleteOrgTeam.size()>0){
                List<ETLModel> deleteEtlList=deleteOrgTeam.get(entry.getKey());
                if(deleteEtlList!=null&&deleteEtlList.size()>0){
                    num=num-deleteEtlList.size();
            if (deleteOrgTeam != null && deleteOrgTeam.size() > 0) {
                List<ETLModel> deleteEtlList = deleteOrgTeam.get(entry.getKey());
                if (deleteEtlList != null && deleteEtlList.size() > 0) {
                    num = num - deleteEtlList.size();
                }
            }
            jo.put("date", DateUtil.dateToStrLong(new Date()));
            jo.put("num", num);
            jo.put("name", hospital.getName());
            jo.put("code", hospital.getCode());
            redisTemplate.opsForValue().set(new StringBuffer("quota:"+wlyyQuotaId+":2:"+entry.getKey()).toString()+":0", jo.toString());
            redisTemplate.opsForValue().set(new StringBuffer("quota:" + wlyyQuotaId + ":2:" + entry.getKey()).toString() + ":0", jo.toString());
        }
    }
    private void saveLevel1Town(String wlyyQuotaId, Map<String, Town> townsMap, Map<String, List<ETLModel>> townTeam, Map<String, List<ETLModel>> deleteTownTeam) {
        for(Map.Entry<String,Town> entry:townsMap.entrySet()){
            JSONObject jo=new JSONObject();
            Integer num=0;
            List<ETLModel> etlList=townTeam.get(entry.getKey());
            if(etlList!=null&&etlList.size()>0){
                num=etlList.size();
        for (Map.Entry<String, Town> entry : townsMap.entrySet()) {
            JSONObject jo = new JSONObject();
            Integer num = 0;
            List<ETLModel> etlList = townTeam.get(entry.getKey());
            if (etlList != null && etlList.size() > 0) {
                num = etlList.size();
            }
            if(deleteTownTeam!=null&&deleteTownTeam.size()>0){
                List<ETLModel> deleteEtlList=deleteTownTeam.get(entry.getKey());
                if(deleteEtlList!=null&&deleteEtlList.size()>0){
                    num=num-deleteEtlList.size();
            if (deleteTownTeam != null && deleteTownTeam.size() > 0) {
                List<ETLModel> deleteEtlList = deleteTownTeam.get(entry.getKey());
                if (deleteEtlList != null && deleteEtlList.size() > 0) {
                    num = num - deleteEtlList.size();
                }
            }
            jo.put("date", DateUtil.dateToStrLong(new Date()));
            jo.put("num", num);
            jo.put("name", entry.getValue().getName());
            jo.put("code", entry.getValue().getCode());
            redisTemplate.opsForValue().set(new StringBuffer("quota:"+wlyyQuotaId+":3:"+entry.getKey()).toString(), jo.toString());
            redisTemplate.opsForValue().set(new StringBuffer("quota:" + wlyyQuotaId + ":3:" + entry.getKey()).toString(), jo.toString());
        }
    }
    private void saveLevel1Town(String wlyyQuotaId, Map<String, Town> townsMap, Map<String, List<ETLModel>> townTeam) {
        JSONArray jr=new JSONArray();
        for(Map.Entry<String,Town> entry:townsMap.entrySet()){
            JSONObject jo=new JSONObject();
            Integer num=0;
            List<ETLModel> etlList=townTeam.get(entry.getKey());
            if(etlList!=null&&etlList.size()>0){
                num=etlList.size();
        JSONArray jr = new JSONArray();
        for (Map.Entry<String, Town> entry : townsMap.entrySet()) {
            JSONObject jo = new JSONObject();
            Integer num = 0;
            List<ETLModel> etlList = townTeam.get(entry.getKey());
            if (etlList != null && etlList.size() > 0) {
                num = etlList.size();
            }
            jo.put("date", DateUtil.dateToStrLong(new Date()));
            jo.put("num", num);
            jo.put("name", entry.getValue().getName());
            jo.put("code", entry.getValue().getCode());
            jr.put(jo);
            StringBuffer key=new StringBuffer("quota:"+wlyyQuotaId+":3:"+entry.getKey()+":"+timeKey);
            StringBuffer key = new StringBuffer("quota:" + wlyyQuotaId + ":3:" + entry.getKey() + ":" + timeKey);
            keys.add(key.toString());
            redisTemplate.opsForValue().set(key.toString(), jo.toString());
        }
        //保存市下面全部的区
        StringBuffer key=new StringBuffer("quota:"+wlyyQuotaId+":4:"+Constant.city+":3:"+timeKey);
        StringBuffer key = new StringBuffer("quota:" + wlyyQuotaId + ":4:" + Constant.city + ":3:" + timeKey);
        keys.add(key.toString());
        redisTemplate.opsForValue().set(key.toString(), jr.toString());
    }
    private void saveLevel1City(String wlyyQuotaId, Map<String, City> cityMap, Map<String, List<ETLModel>> cityTeam, Map<String, List<ETLModel>> deleteCityTeam) {
        JSONArray jr=new JSONArray();
        for(Map.Entry<String,City> entry:cityMap.entrySet()){
            JSONObject jo=new JSONObject();
            Integer num=0;
            List<ETLModel> etlList=cityTeam.get(entry.getKey());
            if(etlList!=null&&etlList.size()>0){
                num=etlList.size();
        JSONArray jr = new JSONArray();
        for (Map.Entry<String, City> entry : cityMap.entrySet()) {
            JSONObject jo = new JSONObject();
            Integer num = 0;
            List<ETLModel> etlList = cityTeam.get(entry.getKey());
            if (etlList != null && etlList.size() > 0) {
                num = etlList.size();
            }
            if(deleteCityTeam!=null&&deleteCityTeam.size()>0){
            List<ETLModel> deleteEtlList=deleteCityTeam.get(entry.getKey());
                if(deleteEtlList!=null&&deleteEtlList.size()>0){
                    num=num-deleteEtlList.size();
            if (deleteCityTeam != null && deleteCityTeam.size() > 0) {
                List<ETLModel> deleteEtlList = deleteCityTeam.get(entry.getKey());
                if (deleteEtlList != null && deleteEtlList.size() > 0) {
                    num = num - deleteEtlList.size();
                }
            }
            jo.put("date", DateUtil.dateToStrLong(new Date()));
@ -1138,72 +1162,79 @@ public class RedisStorage {
            jo.put("code", entry.getValue().getCode());
            jr.put(jo);
        }
        StringBuffer key=new StringBuffer("quota:"+wlyyQuotaId+":4:"+Constant.city+":");
        StringBuffer key = new StringBuffer("quota:" + wlyyQuotaId + ":4:" + Constant.city + ":");
        keys.add(key.toString());
        redisTemplate.opsForValue().set(key.toString(), jr.toString());
    }
    private void saveLevel1City(String wlyyQuotaId, Map<String, City> cityMap, Map<String, List<ETLModel>> cityTeam) {
        for(Map.Entry<String,City> entry:cityMap.entrySet()){
            JSONObject jo=new JSONObject();
            Integer num=0;
            List<ETLModel> etlList=cityTeam.get(entry.getKey());
            if(etlList!=null&&etlList.size()>0){
                num=etlList.size();
        for (Map.Entry<String, City> entry : cityMap.entrySet()) {
            JSONObject jo = new JSONObject();
            Integer num = 0;
            List<ETLModel> etlList = cityTeam.get(entry.getKey());
            if (etlList != null && etlList.size() > 0) {
                num = etlList.size();
            }
            jo.put("date", DateUtil.dateToStrLong(new Date()));
            jo.put("num", num);
            jo.put("name", entry.getValue().getName());
            jo.put("code", entry.getValue().getCode());
            StringBuffer key=new StringBuffer("quota:"+wlyyQuotaId+":4:"+Constant.city+":"+timeKey);
            StringBuffer key = new StringBuffer("quota:" + wlyyQuotaId + ":4:" + Constant.city + ":" + timeKey);
            keys.add(key.toString());
            redisTemplate.opsForValue().set(key.toString(), jo.toString());
        }
    }
    private String getLevel2Name(String i, Integer type) {
        switch (type){
            case  1:{
        switch (type) {
            case 1: {
                //性别
                return Constant.getLevelSexName(i);
            }
            case  2:{
            case 2: {
                //年龄
                return Constant.getLevelAgeName(i);
            }
            case  3:{
            case 3: {
                //用户分组
                return Constant.getLevelGroupName(i);
            }
            case  4:{
            case 4: {
                //疾病
                return Constant.getLevelDiseaseName(i);
            }
            case  5:{
            case 5: {
                //疾病
                return Constant.getlevelHealthFbName(i);
            }
            case  6:{
            case 6: {
                //繳費未交費
                return Constant.getLevelExpenseName(i);
            }
            case  7:{
            case 7: {
                //疾病年齡
                return Constant.getLevelAgeDiseaseName(i);
            }
            case  8:{
            case 8: {
                //疾病年齡
                return Constant.getLevelReplyTimeName(i);
            }
            default:{
            case 9: {
                //疾病年齡
                return Constant.getReason(i);
            }
            default: {
                return "";
            }
        }
    }
    private String getOrg(String org){
    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{
        if (org.length() == 10 && !org.endsWith("00")) {
            return org.substring(0, org.length() - 2) + "00";
        } else {
            return org;
        }
    }

+ 77 - 0
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/Constant.java

@ -1,5 +1,9 @@
package com.yihu.wlyy.statistics.job.business;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
 * Created by Administrator on 2016.08.18.
 * 常量类
@ -96,6 +100,21 @@ public class Constant {
    public static String level_reply_time_4_name="13-18";
    public static String level_reply_time_5_name="18-24";
    public static String level_sign_reason_1="1";
    public static String level_sign_reason_2="2";
    public static String level_sign_reason_3="3";
    public static String level_sign_reason_4="4";
    public static String level_sign_reason_5="5";
    public static String level_sign_reason_6="6";
    public static String level_sign_reason_1_name="常住地变更";
    public static String level_sign_reason_2_name="医生专业度不够";
    public static String level_sign_reason_3_name="咨询回复慢";
    public static String level_sign_reason_4_name="无获得感";
    public static String level_sign_reason_5_name="医生服务态度差";
    public static String level_sign_reason_6_name="其它";
    //三级维度的疾病
    public static String level_disease_1="1";
    public static String level_disease_2="2";
@ -275,4 +294,62 @@ public class Constant {
        }
        return "";
    }
    public static String getStartTime() throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date today = new Date();
        String todayString=simpleDateFormat.format(today);
        String startDateString = (1900 + today.getYear()) + "-07-01";
        Date startDate = simpleDateFormat.parse(startDateString);
        if (simpleDateFormat.parse(todayString).after(startDate)) {
            return (1900 + today.getYear() ) + "-06-30";
        } else {
            return (1900 + today.getYear() - 1) + "-06-30";
        }
    }
    public static String getStartYear() throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date today = new Date();
        String todayString=simpleDateFormat.format(today);
        String startDateString = (1900 + today.getYear()) + "-07-01";
        Date startDate = simpleDateFormat.parse(startDateString);
        if (simpleDateFormat.parse(todayString).after(startDate)) {
            return (1900 + today.getYear() ) +"";
        } else {
            return (1900 + today.getYear() - 1) +"";
        }
    }
    public static void main(String[] args) throws Exception {
        System.out.println(getStartYear());
    }
    public static String getReason(String key) {
        switch (key){
            case "1":{
                return level_sign_reason_1_name;
            }
            case "2":{
                return level_sign_reason_2_name;
            }
            case "3":{
                return level_sign_reason_3_name;
            }
            case "4":{
                return level_sign_reason_4_name;
            }
            case "5":{
                return level_sign_reason_5_name;
            }
            case "6":{
                return level_sign_reason_6_name;
            }
        }
        return "6";
    }
}

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

@ -15,6 +15,7 @@ import com.yihu.wlyy.statistics.model.job.QuartzJobLog;
import com.yihu.wlyy.statistics.model.patient.PatientHealthGuidance;
import com.yihu.wlyy.statistics.model.patient.PatientReservation;
import com.yihu.wlyy.statistics.model.signfamily.SignFamily;
import com.yihu.wlyy.statistics.model.signfamily.SignFamilyRenew;
import com.yihu.wlyy.statistics.model.system.Town;
import com.yihu.wlyy.statistics.model.team.AdminTeam;
import com.yihu.wlyy.statistics.util.DateUtil;
@ -175,6 +176,14 @@ public class CurrentDayAllQuotaJob implements Job {
        computequota_26();//统计未缴费签约总数
        computequota_27();//统计代预约量
        computequota_28();//统计平均值
        computequota_29(); //统计续签
        computequota_30(); //统计续签原因
        computequota_31(); //统计续签夸团队
        computequota_32(); //统计续签夸社区
        computequota_33(); //统计续签夸区
        computequota_34(); //续签签入
        computequota_35(); //统计续签签出
        quartzJobLog.setJobContent(allContent.toString());
        quartzJobLog.setJobName("实时统计");
@ -197,6 +206,7 @@ public class CurrentDayAllQuotaJob implements Job {
        redisTemplate.opsForValue().set("quota:timeKey", RedisStorage.timeKey);
    }
    private void computequota_22() {
        String quotaId = "22";
        try {
@ -210,7 +220,7 @@ public class CurrentDayAllQuotaJob implements Job {
                if (i < (consultIdMaps.size() - 1)) {
                    sb.append(",");
                }
                if ((1+1) % 100 == 0) {
                if ((1 + 1) % 100 == 0) {
                    //每隔100统计一次
                    String sql = "select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '" + tomorrow + "' and a.consult in (" + sb.toString() + ")";
                    //抽取數據
@ -219,7 +229,7 @@ public class CurrentDayAllQuotaJob implements Job {
                    sb = new StringBuffer();//重置 in条件
                } else {
                    //判断是不是最后的一段
                    if (consultIdMaps.size() == (i+1)) {
                    if (consultIdMaps.size() == (i + 1)) {
                        String sql = "select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '" + tomorrow + "' and a.consult in (" + sb.toString() + ")";
                        //抽取數據
                        List<ConsultTeam> consultTeamsTemp = SpringUtil.getBean(DBExtract.class).extract(ConsultTeam.class, sql);
@ -262,7 +272,7 @@ public class CurrentDayAllQuotaJob implements Job {
                if (i < (consultIdMaps.size() - 1)) {
                    sb.append(",");
                }
                if ((1+1) % 100 == 0) {
                if ((1 + 1) % 100 == 0) {
                    //每隔100统计一次
                    String sql = "select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '" + tomorrow + "' and a.consult in (" + sb.toString() + ")";
                    //抽取數據
@ -271,7 +281,7 @@ public class CurrentDayAllQuotaJob implements Job {
                    sb = new StringBuffer();//重置 in条件
                } else {
                    //判断是不是最后的一段
                    if (consultIdMaps.size() == (i+1)) {
                    if (consultIdMaps.size() == (i + 1)) {
                        String sql = "select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '" + tomorrow + "' and a.consult in (" + sb.toString() + ")";
                        //抽取數據
                        List<ConsultTeam> consultTeamsTemp = SpringUtil.getBean(DBExtract.class).extract(ConsultTeam.class, sql);
@ -324,7 +334,7 @@ public class CurrentDayAllQuotaJob implements Job {
                if (i < (consultIdMaps.size() - 1)) {
                    sb.append(",");
                }
                if ((1+1) % 100 == 0) {
                if ((1 + 1) % 100 == 0) {
                    //每隔100统计一次
                    String sql = "select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '" + tomorrow + "' and a.consult in (" + sb.toString() + ")";
                    //抽取數據
@ -333,7 +343,7 @@ public class CurrentDayAllQuotaJob implements Job {
                    sb = new StringBuffer();//重置 in条件
                } else {
                    //判断是不是最后的一段
                    if (consultIdMaps.size() == (i+1)) {
                    if (consultIdMaps.size() == (i + 1)) {
                        String sql = "select admin_team_code,id,consult from wlyy_consult_team a where  a.czrq< '" + tomorrow + "' and a.consult in (" + sb.toString() + ")";
                        //抽取數據
                        List<ConsultTeam> consultTeamsTemp = SpringUtil.getBean(DBExtract.class).extract(ConsultTeam.class, sql);
@ -1072,6 +1082,148 @@ public class CurrentDayAllQuotaJob implements Job {
        }
    }
    private void computequota_29() {
        String quotaId = "29";
        try {
            String sql="select fr.sign_code code,fr.hospital,fr.admin_team_id from wlyy_sign_family_renew_log fr where fr.`status`>0  and fr.apply_date<'"+tomorrow+"'";
            //抽取數據
            List<SignFamily> signFamilies = SpringUtil.getBean(DBExtract.class).extract(SignFamily.class, sql);
            //清洗數據
            FilterModel etlModels = SpringUtil.getBean(SignDataFilter.class).filter(signFamilies, sql, "now");
            //统计数据
            List<Map<String, List<ETLModel>>> returnDatas = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //保存数据
            SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas, null, quotaId);
            allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        } catch (Exception e) {
            e.printStackTrace();
            allContent.append("统计失败:" + e.getMessage());
        }
        allContent.append("-----------29----------");
    }
    private void computequota_30() {
        String quotaId = "30";
        try {
            String sql="select fr.sign_code code,fr.hospital,fr.admin_team_id from wlyy_sign_family_renew_log fr where fr.`status`>0  and fr.apply_date<'"+tomorrow+"'";
            //抽取數據
            List<SignFamily> signFamilies = SpringUtil.getBean(DBExtract.class).extract(SignFamily.class, sql);
            //清洗數據
            FilterModel etlModels = SpringUtil.getBean(SignDataFilter.class).filter(signFamilies, sql, "now");
            //统计数据
            List<Map<String, List<ETLModel>>> returnDatas = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //统计数据 二级维度
            List<Map<String, Map<String, List<ETLModel>>>> level2Data = SpringUtil.getBean(Level2Role.class).elt(returnDatas);
            //保存redis
            SpringUtil.getBean(RedisStorage.class).saveByLevel2(level2Data, null, quotaId, 6, 9, 1);
            allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        } catch (Exception e) {
            e.printStackTrace();
            allContent.append("统计失败:" + e.getMessage());
        }
        allContent.append("-----------30----------");
    }
    private void computequota_31() {
        String quotaId = "31";
        try {
            String sql="select fr.sign_code code,fr.hospital,fr.admin_team_id from wlyy_sign_family_renew_log fr where  fr.`status`>0  and  fr.apply_date<'"+tomorrow+"' and fr.admin_team_id!=fr.old_admin_team_id and fr.hospital=fr.old_hospital and LEFT(fr.hospital,6)=LEFT(fr.old_hospital,6)" ;
            //抽取數據
            List<SignFamily> signFamilies = SpringUtil.getBean(DBExtract.class).extract(SignFamily.class, sql);
            //清洗數據
            FilterModel etlModels = SpringUtil.getBean(SignDataFilter.class).filter(signFamilies, sql, "now");
            //统计数据
            List<Map<String, List<ETLModel>>> returnDatas = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //保存数据
            SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas, null, quotaId);
            allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        } catch (Exception e) {
            e.printStackTrace();
            allContent.append("统计失败:" + e.getMessage());
        }
        allContent.append("-----------31----------");
    }
    private void computequota_32() {
         String quotaId = "32";
        try {
            String sql="select fr.sign_code code,fr.hospital,fr.admin_team_id from wlyy_sign_family_renew_log fr where  fr.`status`>0  and  fr.apply_date<'"+tomorrow+"' and fr.admin_team_id!=fr.old_admin_team_id and fr.hospital!=fr.old_hospital and LEFT(fr.hospital,6)=LEFT(fr.old_hospital,6)";
            //抽取數據
            List<SignFamily> signFamilies = SpringUtil.getBean(DBExtract.class).extract(SignFamily.class, sql);
            //清洗數據
            FilterModel etlModels = SpringUtil.getBean(SignDataFilter.class).filter(signFamilies, sql, "now");
            //统计数据
            List<Map<String, List<ETLModel>>> returnDatas = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //保存数据
            SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas, null, quotaId);
            allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        } catch (Exception e) {
            e.printStackTrace();
            allContent.append("统计失败:" + e.getMessage());
        }
        allContent.append("-----------32----------");
    }
    private void computequota_33() {
        String quotaId = "33";
        try {
            String sql="select fr.sign_code code,fr.hospital,fr.admin_team_id from wlyy_sign_family_renew_log fr where  fr.`status`>0  and  fr.apply_date<'"+tomorrow+"' and fr.admin_team_id!=fr.old_admin_team_id and fr.hospital!=fr.old_hospital and LEFT(fr.hospital,6)!=LEFT(fr.old_hospital,6) ";
            //抽取數據
            List<SignFamily> signFamilies = SpringUtil.getBean(DBExtract.class).extract(SignFamily.class, sql);
            //清洗數據
            FilterModel etlModels = SpringUtil.getBean(SignDataFilter.class).filter(signFamilies, sql, "now");
            //统计数据
            List<Map<String, List<ETLModel>>> returnDatas = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //保存数据
            SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas, null, quotaId);
            allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        } catch (Exception e) {
            e.printStackTrace();
            allContent.append("统计失败:" + e.getMessage());
        }
        allContent.append("-----------33----------");
    }
    private void computequota_34() {
        String quotaId = "34";
        try {
            String sql="select fr.sign_code code,fr.hospital,fr.admin_team_id from wlyy_sign_family_renew_log fr where  fr.`status`>0  and  fr.apply_date<'"+tomorrow+"' and fr.admin_team_id!=fr.old_admin_team_id ";
            //抽取數據
            List<SignFamily> signFamilies = SpringUtil.getBean(DBExtract.class).extract(SignFamily.class, sql);
            //清洗數據
            FilterModel etlModels = SpringUtil.getBean(SignDataFilter.class).filter(signFamilies, sql, "now");
            //统计数据
            List<Map<String, List<ETLModel>>> returnDatas = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //保存数据
            SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas, null, quotaId);
            allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        } catch (Exception e) {
            e.printStackTrace();
            allContent.append("统计失败:" + e.getMessage());
        }
        allContent.append("-----------34----------");
    }
    private void computequota_35() {
        String quotaId = "35";
        try {
            String sql=" select fr.sign_code code,fr.old_hospital,fr.old_admin_team_id from wlyy_sign_family_renew_log fr where  fr.`status`>0  and  fr.apply_date<'"+ tomorrow+"' and fr.admin_team_id!=fr.old_admin_team_id  ";
            //抽取數據
            List<SignFamily> signFamilies = SpringUtil.getBean(DBExtract.class).extract(SignFamily.class, sql);
            //清洗數據
            FilterModel etlModels = SpringUtil.getBean(SignDataFilter.class).filter(signFamilies, sql, "now");
            //统计数据
            List<Map<String, List<ETLModel>>> returnDatas = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //保存数据
            SpringUtil.getBean(RedisStorage.class).saveByLevel1(returnDatas, null, quotaId);
            allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        } catch (Exception e) {
            e.printStackTrace();
            allContent.append("统计失败:" + e.getMessage());
        }
        allContent.append("-----------35----------");
    }
    public List<Map<String, Object>> getCityTowms() {
        List<Map<String, Object>> map = jdbcTemplate.queryForList(getAvgSqlByCode("city_town_SQL"));
        return map;

+ 109 - 0
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignChangeHospitalJob.java

@ -0,0 +1,109 @@
package com.yihu.wlyy.statistics.job.business;
import com.yihu.wlyy.statistics.dao.QuartzJobLogDao;
import com.yihu.wlyy.statistics.etl.dataFilter.RenewSignDataFilter;
import com.yihu.wlyy.statistics.etl.dataFilter.SignDataFilter;
import com.yihu.wlyy.statistics.etl.extract.DBExtract;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.etl.model.FilterModel;
import com.yihu.wlyy.statistics.etl.role.Level1Role;
import com.yihu.wlyy.statistics.etl.storage.DBStorage;
import com.yihu.wlyy.statistics.model.job.QuartzJobLog;
import com.yihu.wlyy.statistics.model.signfamily.SignFamily;
import com.yihu.wlyy.statistics.model.signfamily.SignFamilyRenew;
import com.yihu.wlyy.statistics.util.JsonUtil;
import com.yihu.wlyy.statistics.vo.WlyyJobConfigVO;
import com.yihu.wlyy.statistics.vo.WlyyQuotaVO;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
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.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * 续签夸社区的指标执行类
 */
@Component
@Scope("prototype")
@DisallowConcurrentExecution//防止到了执行时间点前一任务还在执行中,但是这时有空闲的线程,那么马上又会执行,这样一来就会存在同一job被并行执行
public class RenewSignChangeHospitalJob implements Job {
    private WlyyQuotaVO wlyyQuota;//指标对象
    private WlyyJobConfigVO wlyyJobConfig;//配置对象
    @Autowired
    private QuartzJobLogDao quartzJobLogDao;//执行日志Dao
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private Level1Role levelRole;
    @Autowired
    private DBStorage dbStorage;
    @Autowired
    private DBExtract dbExtract;
    @Autowired
    private RenewSignDataFilter signDataFilter;
    String yesterday;
    String daybefore;
    @Override
    public void execute(JobExecutionContext context)
            throws JobExecutionException {
        try{
            SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
            //初始化参数
            JobDataMap map = context.getJobDetail().getJobDataMap();
            wlyyQuota = (WlyyQuotaVO) map.get("quota");
            wlyyJobConfig = (WlyyJobConfigVO) map.get("jobConfig");
            daybefore= StringUtils.isEmpty(map.get("daybefore"))?SignJob.getDayString(-2):map.get("daybefore").toString();
            yesterday= StringUtils.isEmpty(map.get("yesterday"))?SignJob.getDayString(-1):map.get("yesterday").toString();
            //计算指标
            computequota();
        }catch (Exception e){
            //如果出錯立即重新執行
            JobExecutionException e2 =new JobExecutionException(e);
            e2.setRefireImmediately(true);
        }
    }
    /**
     * 计算指标
     */
    @Transactional
    private void computequota() {
        try{
            jdbcTemplate.execute("delete from wlyy_quota_result where quota_date='"+yesterday+"' and quato_code='"+32+"'");
            //新建任务日志对象
            QuartzJobLog quartzJobLog = new QuartzJobLog();
            quartzJobLog.setJobStartTime(new Date());
            quartzJobLog.setJobId(wlyyJobConfig.getId());
            quartzJobLog.setJobName(wlyyJobConfig.getJobName());
            String sql="select fr.sign_code code,fr.hospital,fr.admin_team_id from wlyy_sign_family_renew_log fr where  fr.`status`>0  and  fr.apply_date<'"+yesterday+ Constant.quota_date_last+"' and fr.admin_team_id!=fr.old_admin_team_id and fr.hospital!=fr.old_hospital and LEFT(fr.hospital,6)=LEFT(fr.old_hospital,6)";
            //抽取數據
            List<SignFamilyRenew> signFamilies= dbExtract.extract(SignFamilyRenew.class,sql);
            //清洗數據
            FilterModel etlModels= signDataFilter.filter(signFamilies,null,null,sql,yesterday);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            //保存数据
            dbStorage.saveByLevel1(returnDatas,yesterday,wlyyQuota);
            //保存日志
            quartzJobLog.setJobEndTime(new Date());
            quartzJobLog.setJobContent(JsonUtil.objToStr(etlModels.getLogModel()));
            quartzJobLog.setJobType(etlModels.getError()?"1":"0");
            quartzJobLogDao.save(quartzJobLog);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

+ 109 - 0
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignChangeTeamJob.java

@ -0,0 +1,109 @@
package com.yihu.wlyy.statistics.job.business;
import com.yihu.wlyy.statistics.dao.QuartzJobLogDao;
import com.yihu.wlyy.statistics.etl.dataFilter.RenewSignDataFilter;
import com.yihu.wlyy.statistics.etl.dataFilter.SignDataFilter;
import com.yihu.wlyy.statistics.etl.extract.DBExtract;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.etl.model.FilterModel;
import com.yihu.wlyy.statistics.etl.role.Level1Role;
import com.yihu.wlyy.statistics.etl.storage.DBStorage;
import com.yihu.wlyy.statistics.model.job.QuartzJobLog;
import com.yihu.wlyy.statistics.model.signfamily.SignFamily;
import com.yihu.wlyy.statistics.model.signfamily.SignFamilyRenew;
import com.yihu.wlyy.statistics.util.JsonUtil;
import com.yihu.wlyy.statistics.vo.WlyyJobConfigVO;
import com.yihu.wlyy.statistics.vo.WlyyQuotaVO;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
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.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * 续签夸团队的指标执行类
 */
@Component
@Scope("prototype")
@DisallowConcurrentExecution//防止到了执行时间点前一任务还在执行中,但是这时有空闲的线程,那么马上又会执行,这样一来就会存在同一job被并行执行
public class RenewSignChangeTeamJob implements Job {
    private WlyyQuotaVO wlyyQuota;//指标对象
    private WlyyJobConfigVO wlyyJobConfig;//配置对象
    @Autowired
    private QuartzJobLogDao quartzJobLogDao;//执行日志Dao
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private Level1Role levelRole;
    @Autowired
    private DBStorage dbStorage;
    @Autowired
    private DBExtract dbExtract;
    @Autowired
    private RenewSignDataFilter signDataFilter;
    String yesterday;
    String daybefore;
    @Override
    public void execute(JobExecutionContext context)
            throws JobExecutionException {
        try{
            SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
            //初始化参数
            JobDataMap map = context.getJobDetail().getJobDataMap();
            wlyyQuota = (WlyyQuotaVO) map.get("quota");
            wlyyJobConfig = (WlyyJobConfigVO) map.get("jobConfig");
            daybefore= StringUtils.isEmpty(map.get("daybefore"))?SignJob.getDayString(-2):map.get("daybefore").toString();
            yesterday= StringUtils.isEmpty(map.get("yesterday"))?SignJob.getDayString(-1):map.get("yesterday").toString();
            //计算指标
            computequota();
        }catch (Exception e){
            //如果出錯立即重新執行
            JobExecutionException e2 =new JobExecutionException(e);
            e2.setRefireImmediately(true);
        }
    }
    /**
     * 计算指标
     */
    @Transactional
    private void computequota() {
        try{
            jdbcTemplate.execute("delete from wlyy_quota_result where quota_date='"+yesterday+"' and quato_code='"+31+"'");
            //新建任务日志对象
            QuartzJobLog quartzJobLog = new QuartzJobLog();
            quartzJobLog.setJobStartTime(new Date());
            quartzJobLog.setJobId(wlyyJobConfig.getId());
            quartzJobLog.setJobName(wlyyJobConfig.getJobName());
            String sql="select fr.sign_code code,fr.hospital,fr.admin_team_id from wlyy_sign_family_renew_log fr where  fr.`status`>0  and  fr.apply_date<'"+yesterday+ Constant.quota_date_last+"' and fr.admin_team_id!=fr.old_admin_team_id and fr.hospital=fr.old_hospital and LEFT(fr.hospital,6)=LEFT(fr.old_hospital,6)" ;
            //抽取數據
            List<SignFamilyRenew> signFamilies= dbExtract.extract(SignFamilyRenew.class,sql);
            //清洗數據
            FilterModel etlModels= signDataFilter.filter(signFamilies,null,null,sql,yesterday);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            //保存数据
            dbStorage.saveByLevel1(returnDatas,yesterday,wlyyQuota);
            //保存日志
            quartzJobLog.setJobEndTime(new Date());
            quartzJobLog.setJobContent(JsonUtil.objToStr(etlModels.getLogModel()));
            quartzJobLog.setJobType(etlModels.getError()?"1":"0");
            quartzJobLogDao.save(quartzJobLog);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

+ 109 - 0
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignChangeTownJob.java

@ -0,0 +1,109 @@
package com.yihu.wlyy.statistics.job.business;
import com.yihu.wlyy.statistics.dao.QuartzJobLogDao;
import com.yihu.wlyy.statistics.etl.dataFilter.RenewSignDataFilter;
import com.yihu.wlyy.statistics.etl.dataFilter.SignDataFilter;
import com.yihu.wlyy.statistics.etl.extract.DBExtract;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.etl.model.FilterModel;
import com.yihu.wlyy.statistics.etl.role.Level1Role;
import com.yihu.wlyy.statistics.etl.storage.DBStorage;
import com.yihu.wlyy.statistics.model.job.QuartzJobLog;
import com.yihu.wlyy.statistics.model.signfamily.SignFamily;
import com.yihu.wlyy.statistics.model.signfamily.SignFamilyRenew;
import com.yihu.wlyy.statistics.util.JsonUtil;
import com.yihu.wlyy.statistics.vo.WlyyJobConfigVO;
import com.yihu.wlyy.statistics.vo.WlyyQuotaVO;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
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.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * 续签夸团队的指标执行类
 */
@Component
@Scope("prototype")
@DisallowConcurrentExecution//防止到了执行时间点前一任务还在执行中,但是这时有空闲的线程,那么马上又会执行,这样一来就会存在同一job被并行执行
public class RenewSignChangeTownJob implements Job {
    private WlyyQuotaVO wlyyQuota;//指标对象
    private WlyyJobConfigVO wlyyJobConfig;//配置对象
    @Autowired
    private QuartzJobLogDao quartzJobLogDao;//执行日志Dao
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private Level1Role levelRole;
    @Autowired
    private DBStorage dbStorage;
    @Autowired
    private DBExtract dbExtract;
    @Autowired
    private RenewSignDataFilter signDataFilter;
    String yesterday;
    String daybefore;
    @Override
    public void execute(JobExecutionContext context)
            throws JobExecutionException {
        try{
            SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
            //初始化参数
            JobDataMap map = context.getJobDetail().getJobDataMap();
            wlyyQuota = (WlyyQuotaVO) map.get("quota");
            wlyyJobConfig = (WlyyJobConfigVO) map.get("jobConfig");
            daybefore= StringUtils.isEmpty(map.get("daybefore"))?SignJob.getDayString(-2):map.get("daybefore").toString();
            yesterday= StringUtils.isEmpty(map.get("yesterday"))?SignJob.getDayString(-1):map.get("yesterday").toString();
            //计算指标
            computequota();
        }catch (Exception e){
            //如果出錯立即重新執行
            JobExecutionException e2 =new JobExecutionException(e);
            e2.setRefireImmediately(true);
        }
    }
    /**
     * 计算指标
     */
    @Transactional
    private void computequota() {
        try{
            jdbcTemplate.execute("delete from wlyy_quota_result where quota_date='"+yesterday+"' and quato_code='"+33+"'");
            //新建任务日志对象
            QuartzJobLog quartzJobLog = new QuartzJobLog();
            quartzJobLog.setJobStartTime(new Date());
            quartzJobLog.setJobId(wlyyJobConfig.getId());
            quartzJobLog.setJobName(wlyyJobConfig.getJobName());
            String sql="select fr.sign_code code,fr.hospital,fr.admin_team_id from wlyy_sign_family_renew_log fr where  fr.`status`>0  and  fr.apply_date<'"+yesterday+ Constant.quota_date_last+"' and fr.admin_team_id!=fr.old_admin_team_id and fr.hospital!=fr.old_hospital and LEFT(fr.hospital,6)!=LEFT(fr.old_hospital,6) ";
            //抽取數據
            List<SignFamilyRenew> signFamilies= dbExtract.extract(SignFamilyRenew.class,sql);
            //清洗數據
            FilterModel etlModels= signDataFilter.filter(signFamilies,null,null,sql,yesterday);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            //保存数据
            dbStorage.saveByLevel1(returnDatas,yesterday,wlyyQuota);
            //保存日志
            quartzJobLog.setJobEndTime(new Date());
            quartzJobLog.setJobContent(JsonUtil.objToStr(etlModels.getLogModel()));
            quartzJobLog.setJobType(etlModels.getError()?"1":"0");
            quartzJobLogDao.save(quartzJobLog);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

+ 108 - 0
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignInJob.java

@ -0,0 +1,108 @@
package com.yihu.wlyy.statistics.job.business;
import com.yihu.wlyy.statistics.dao.QuartzJobLogDao;
import com.yihu.wlyy.statistics.etl.dataFilter.RenewSignDataFilter;
import com.yihu.wlyy.statistics.etl.dataFilter.SignDataFilter;
import com.yihu.wlyy.statistics.etl.extract.DBExtract;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.etl.model.FilterModel;
import com.yihu.wlyy.statistics.etl.role.Level1Role;
import com.yihu.wlyy.statistics.etl.storage.DBStorage;
import com.yihu.wlyy.statistics.model.job.QuartzJobLog;
import com.yihu.wlyy.statistics.model.signfamily.SignFamily;
import com.yihu.wlyy.statistics.model.signfamily.SignFamilyRenew;
import com.yihu.wlyy.statistics.util.JsonUtil;
import com.yihu.wlyy.statistics.vo.WlyyJobConfigVO;
import com.yihu.wlyy.statistics.vo.WlyyQuotaVO;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
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.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * 续签签入的指标执行类
 */
@Component
@Scope("prototype")
@DisallowConcurrentExecution//防止到了执行时间点前一任务还在执行中,但是这时有空闲的线程,那么马上又会执行,这样一来就会存在同一job被并行执行
public class RenewSignInJob implements Job {
    private WlyyQuotaVO wlyyQuota;//指标对象
    private WlyyJobConfigVO wlyyJobConfig;//配置对象
    @Autowired
    private QuartzJobLogDao quartzJobLogDao;//执行日志Dao
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private Level1Role levelRole;
    @Autowired
    private DBStorage dbStorage;
    @Autowired
    private DBExtract dbExtract;
    @Autowired
    private RenewSignDataFilter signDataFilter;
    String yesterday;
    String daybefore;
    @Override
    public void execute(JobExecutionContext context)
            throws JobExecutionException {
        try{
            SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
            //初始化参数
            JobDataMap map = context.getJobDetail().getJobDataMap();
            wlyyQuota = (WlyyQuotaVO) map.get("quota");
            wlyyJobConfig = (WlyyJobConfigVO) map.get("jobConfig");
            daybefore= StringUtils.isEmpty(map.get("daybefore"))?SignJob.getDayString(-2):map.get("daybefore").toString();
            yesterday= StringUtils.isEmpty(map.get("yesterday"))?SignJob.getDayString(-1):map.get("yesterday").toString();
            //计算指标
            computequota();
        }catch (Exception e){
            //如果出錯立即重新執行
            JobExecutionException e2 =new JobExecutionException(e);
            e2.setRefireImmediately(true);
        }
    }
    /**
     * 计算指标
     */
    @Transactional
    private void computequota() {
        try{
            jdbcTemplate.execute("delete from wlyy_quota_result where quota_date='"+yesterday+"' and quato_code='"+34+"'");
            //新建任务日志对象
            QuartzJobLog quartzJobLog = new QuartzJobLog();
            quartzJobLog.setJobStartTime(new Date());
            quartzJobLog.setJobId(wlyyJobConfig.getId());
            quartzJobLog.setJobName(wlyyJobConfig.getJobName());
            String sql="select fr.sign_code code,fr.hospital,fr.admin_team_id from wlyy_sign_family_renew_log fr where  fr.`status`>0  and  fr.apply_date<'"+yesterday+Constant.quota_date_last+"' and fr.admin_team_id!=fr.old_admin_team_id ";
            //抽取數據
            List<SignFamilyRenew> signFamilies= dbExtract.extract(SignFamilyRenew.class,sql);
            //清洗數據
            FilterModel etlModels= signDataFilter.filter(signFamilies,null,null,sql,yesterday);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            //保存数据
            dbStorage.saveByLevel1(returnDatas,yesterday,wlyyQuota);
            //保存日志
            quartzJobLog.setJobEndTime(new Date());
            quartzJobLog.setJobContent(JsonUtil.objToStr(etlModels.getLogModel()));
            quartzJobLog.setJobType(etlModels.getError()?"1":"0");
            quartzJobLogDao.save(quartzJobLog);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

+ 109 - 0
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignJob.java

@ -0,0 +1,109 @@
package com.yihu.wlyy.statistics.job.business;
import com.yihu.wlyy.statistics.dao.QuartzJobLogDao;
import com.yihu.wlyy.statistics.etl.dataFilter.RenewSignDataFilter;
import com.yihu.wlyy.statistics.etl.dataFilter.SignDataFilter;
import com.yihu.wlyy.statistics.etl.extract.DBExtract;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.etl.model.FilterModel;
import com.yihu.wlyy.statistics.etl.role.Level1Role;
import com.yihu.wlyy.statistics.etl.storage.DBStorage;
import com.yihu.wlyy.statistics.model.job.QuartzJobLog;
import com.yihu.wlyy.statistics.model.signfamily.SignFamily;
import com.yihu.wlyy.statistics.model.signfamily.SignFamilyRenew;
import com.yihu.wlyy.statistics.util.JsonUtil;
import com.yihu.wlyy.statistics.vo.WlyyJobConfigVO;
import com.yihu.wlyy.statistics.vo.WlyyQuotaVO;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
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.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * 续签的指标执行类
 */
@Component
@Scope("prototype")
@DisallowConcurrentExecution//防止到了执行时间点前一任务还在执行中,但是这时有空闲的线程,那么马上又会执行,这样一来就会存在同一job被并行执行
public class RenewSignJob implements Job {
    private WlyyQuotaVO wlyyQuota;//指标对象
    private WlyyJobConfigVO wlyyJobConfig;//配置对象
    @Autowired
    private QuartzJobLogDao quartzJobLogDao;//执行日志Dao
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private Level1Role levelRole;
    @Autowired
    private DBStorage dbStorage;
    @Autowired
    private DBExtract dbExtract;
    @Autowired
    private RenewSignDataFilter signDataFilter;
    String yesterday;
    String daybefore;
    @Override
    public void execute(JobExecutionContext context)
            throws JobExecutionException {
        try{
            SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
            //初始化参数
            JobDataMap map = context.getJobDetail().getJobDataMap();
            wlyyQuota = (WlyyQuotaVO) map.get("quota");
            wlyyJobConfig = (WlyyJobConfigVO) map.get("jobConfig");
            daybefore= StringUtils.isEmpty(map.get("daybefore"))?SignJob.getDayString(-2):map.get("daybefore").toString();
            yesterday= StringUtils.isEmpty(map.get("yesterday"))?SignJob.getDayString(-1):map.get("yesterday").toString();
            //计算指标
            computequota();
        }catch (Exception e){
            //如果出錯立即重新執行
            JobExecutionException e2 =new JobExecutionException(e);
            e2.setRefireImmediately(true);
        }
    }
    /**
     * 计算指标
     */
    @Transactional
    private void computequota() {
        try{
            jdbcTemplate.execute("delete from wlyy_quota_result where quota_date='"+yesterday+"' and quato_code='"+29+"'");
            //新建任务日志对象
            QuartzJobLog quartzJobLog = new QuartzJobLog();
            quartzJobLog.setJobStartTime(new Date());
            quartzJobLog.setJobId(wlyyJobConfig.getId());
            quartzJobLog.setJobName(wlyyJobConfig.getJobName());
            String sql="select fr.sign_code code,fr.hospital,fr.admin_team_id from wlyy_sign_family_renew_log fr where fr.`status`>0  and fr.apply_date<'"+yesterday+Constant.quota_date_last+"'";
            //抽取數據
            List<SignFamilyRenew> signFamilies= dbExtract.extract(SignFamilyRenew.class,sql);
            //清洗數據
            FilterModel etlModels= signDataFilter.filter(signFamilies,null,null,sql,yesterday);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            //保存数据
            dbStorage.saveByLevel1(returnDatas,yesterday,wlyyQuota);
            //保存日志
            quartzJobLog.setJobEndTime(new Date());
            quartzJobLog.setJobContent(JsonUtil.objToStr(etlModels.getLogModel()));
            quartzJobLog.setJobType(etlModels.getError()?"1":"0");
            quartzJobLogDao.save(quartzJobLog);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

+ 108 - 0
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignOutJob.java

@ -0,0 +1,108 @@
package com.yihu.wlyy.statistics.job.business;
import com.yihu.wlyy.statistics.dao.QuartzJobLogDao;
import com.yihu.wlyy.statistics.etl.dataFilter.RenewSignDataFilter;
import com.yihu.wlyy.statistics.etl.dataFilter.SignDataFilter;
import com.yihu.wlyy.statistics.etl.extract.DBExtract;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.etl.model.FilterModel;
import com.yihu.wlyy.statistics.etl.role.Level1Role;
import com.yihu.wlyy.statistics.etl.storage.DBStorage;
import com.yihu.wlyy.statistics.model.job.QuartzJobLog;
import com.yihu.wlyy.statistics.model.signfamily.SignFamily;
import com.yihu.wlyy.statistics.model.signfamily.SignFamilyRenew;
import com.yihu.wlyy.statistics.util.JsonUtil;
import com.yihu.wlyy.statistics.vo.WlyyJobConfigVO;
import com.yihu.wlyy.statistics.vo.WlyyQuotaVO;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
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.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * 续签签出的指标执行类
 */
@Component
@Scope("prototype")
@DisallowConcurrentExecution//防止到了执行时间点前一任务还在执行中,但是这时有空闲的线程,那么马上又会执行,这样一来就会存在同一job被并行执行
public class RenewSignOutJob implements Job {
    private WlyyQuotaVO wlyyQuota;//指标对象
    private WlyyJobConfigVO wlyyJobConfig;//配置对象
    @Autowired
    private QuartzJobLogDao quartzJobLogDao;//执行日志Dao
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private Level1Role levelRole;
    @Autowired
    private DBStorage dbStorage;
    @Autowired
    private DBExtract dbExtract;
    @Autowired
    private RenewSignDataFilter signDataFilter;
    String yesterday;
    String daybefore;
    @Override
    public void execute(JobExecutionContext context)
            throws JobExecutionException {
        try{
            SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
            //初始化参数
            JobDataMap map = context.getJobDetail().getJobDataMap();
            wlyyQuota = (WlyyQuotaVO) map.get("quota");
            wlyyJobConfig = (WlyyJobConfigVO) map.get("jobConfig");
            daybefore= StringUtils.isEmpty(map.get("daybefore"))?SignJob.getDayString(-2):map.get("daybefore").toString();
            yesterday= StringUtils.isEmpty(map.get("yesterday"))?SignJob.getDayString(-1):map.get("yesterday").toString();
            //计算指标
            computequota();
        }catch (Exception e){
            //如果出錯立即重新執行
            JobExecutionException e2 =new JobExecutionException(e);
            e2.setRefireImmediately(true);
        }
    }
    /**
     * 计算指标
     */
    @Transactional
    private void computequota() {
        try{
            jdbcTemplate.execute("delete from wlyy_quota_result where quota_date='"+yesterday+"' and quato_code='"+35+"'");
            //新建任务日志对象
            QuartzJobLog quartzJobLog = new QuartzJobLog();
            quartzJobLog.setJobStartTime(new Date());
            quartzJobLog.setJobId(wlyyJobConfig.getId());
            quartzJobLog.setJobName(wlyyJobConfig.getJobName());
            String sql=" select fr.sign_code code,fr.old_hospital,fr.old_admin_team_id from wlyy_sign_family_renew_log fr where  fr.`status`>0  and  fr.apply_date<'"+ yesterday + Constant.quota_date_last+"' and fr.admin_team_id!=fr.old_admin_team_id  ";
            //抽取數據
            List<SignFamilyRenew> signFamilies= dbExtract.extract(SignFamilyRenew.class,sql);
            //清洗數據
            FilterModel etlModels= signDataFilter.filter(signFamilies,null,null,sql,yesterday);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            //保存数据
            dbStorage.saveByLevel1(returnDatas,yesterday,wlyyQuota);
            //保存日志
            quartzJobLog.setJobEndTime(new Date());
            quartzJobLog.setJobContent(JsonUtil.objToStr(etlModels.getLogModel()));
            quartzJobLog.setJobType(etlModels.getError()?"1":"0");
            quartzJobLogDao.save(quartzJobLog);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

+ 114 - 0
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignReasonJob.java

@ -0,0 +1,114 @@
package com.yihu.wlyy.statistics.job.business;
import com.yihu.wlyy.statistics.dao.QuartzJobLogDao;
import com.yihu.wlyy.statistics.etl.dataFilter.RenewSignDataFilter;
import com.yihu.wlyy.statistics.etl.extract.DBExtract;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.etl.model.FilterModel;
import com.yihu.wlyy.statistics.etl.role.Level1Role;
import com.yihu.wlyy.statistics.etl.role.Level2Role;
import com.yihu.wlyy.statistics.etl.storage.DBStorage;
import com.yihu.wlyy.statistics.model.job.QuartzJobLog;
import com.yihu.wlyy.statistics.model.signfamily.SignFamily;
import com.yihu.wlyy.statistics.model.signfamily.SignFamilyRenew;
import com.yihu.wlyy.statistics.util.JsonUtil;
import com.yihu.wlyy.statistics.vo.WlyyJobConfigVO;
import com.yihu.wlyy.statistics.vo.WlyyQuotaVO;
import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
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.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * 续签签约原因的指标执行类
 */
@Component
@Scope("prototype")
@DisallowConcurrentExecution//防止到了执行时间点前一任务还在执行中,但是这时有空闲的线程,那么马上又会执行,这样一来就会存在同一job被并行执行
public class RenewSignReasonJob implements Job {
    private WlyyQuotaVO wlyyQuota;//指标对象
    private WlyyJobConfigVO wlyyJobConfig;//配置对象
    @Autowired
    private QuartzJobLogDao quartzJobLogDao;//执行日志Dao
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private Level1Role levelRole;
    @Autowired
    private Level2Role level2Role;
    @Autowired
    private DBStorage dbStorage;
    @Autowired
    private DBExtract dbExtract;
    @Autowired
    private RenewSignDataFilter signDataFilter;
    String yesterday;
    String daybefore;
    @Override
    public void execute(JobExecutionContext context)
            throws JobExecutionException {
        try{
            SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
            //初始化参数
            JobDataMap map = context.getJobDetail().getJobDataMap();
            wlyyQuota = (WlyyQuotaVO) map.get("quota");
            wlyyJobConfig = (WlyyJobConfigVO) map.get("jobConfig");
            daybefore= StringUtils.isEmpty(map.get("daybefore"))?SignJob.getDayString(-2):map.get("daybefore").toString();
            yesterday= StringUtils.isEmpty(map.get("yesterday"))?SignJob.getDayString(-1):map.get("yesterday").toString();
            //计算指标
            computequota();
        }catch (Exception e){
            //如果出錯立即重新執行
            JobExecutionException e2 =new JobExecutionException(e);
            e2.setRefireImmediately(true);
        }
    }
    /**
     * 计算指标
     */
    @Transactional
    private void computequota() {
        try{
            jdbcTemplate.execute("delete from wlyy_quota_result where quota_date='"+yesterday+"' and quato_code='"+30+"'");
            //新建任务日志对象
            QuartzJobLog quartzJobLog = new QuartzJobLog();
            quartzJobLog.setJobStartTime(new Date());
            quartzJobLog.setJobId(wlyyJobConfig.getId());
            quartzJobLog.setJobName(wlyyJobConfig.getJobName());
            String sql="select fr.sign_code code,fr.hospital,fr.admin_team_id,fr.renew_change_reason from wlyy_sign_family_renew_log fr where fr.`status`>0  and fr.apply_date<'"+yesterday+Constant.quota_date_last+"'";
            //抽取數據
            List<SignFamilyRenew> signFamilies= dbExtract.extract(SignFamilyRenew.class,sql);
            //清洗數據
            FilterModel etlModels= signDataFilter.filter(signFamilies,"1",null,sql,yesterday);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            //统计数据 二级维度
            List<Map<String, Map<String, List<ETLModel>>>> level2Data= level2Role.elt(returnDatas);
            //数据转换
            dbStorage.saveByLevel2(level2Data,yesterday,wlyyQuota,6,9,1);
            //保存日志
            quartzJobLog.setJobEndTime(new Date());
            quartzJobLog.setJobContent(JsonUtil.objToStr(etlModels.getLogModel()));
            quartzJobLog.setJobType(etlModels.getError()?"1":"0");
            quartzJobLogDao.save(quartzJobLog);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

+ 539 - 0
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/model/signfamily/SignFamilyRenew.java

@ -0,0 +1,539 @@
package com.yihu.wlyy.statistics.model.signfamily;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yihu.wlyy.statistics.model.IdEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
/**
 * 家庭签约
 *
 * @author George
 */
@Entity
@Table(name = "wlyy_sign_family_renew")
public class SignFamilyRenew extends IdEntity {
    private static final long serialVersionUID = 364799142991631092L;
    private String code;        // 签约标识
    private String lwCode;      // 两网标识
    private Integer type;       // 签约类型:1三师签约,2网络签约
    private String patient;     // 患者标识
    private String openid;      // 微信OPENID
    private String name;        // 患者姓名
    private String idcard;      // 身份证号
    private String ssc;         // 社保卡号
    private String mobile;      // 手机号
    private String emerMobile;  // 紧急联系人手机号
    private String hospital;    // 签约医院标识
    private String hospitalName;    // 签约医院名称
    private String doctor;      // 全科医生
    private String doctorName;  // 全科医生姓名
    private String doctorHealth;    // 健康管理师
    private String doctorHealthName;    // 健康管理师姓名
    private Date begin;         // 签约开始日期
    private Date end;           // 签约结束日期
    private Integer status;     // 签约状态(-1患者已取消,-2已拒绝,-3已解约,-4已到期,0待签约,1已签约,2患者申请取消签约
    private String images;      // 签约图片附件URL,多图以逗号分隔
    private String reason;      // 解约原因
    private Date czrq;          // 操作时间
    private String teamCode;
    private Date applyDate;     //签约时间
    private Date applyUnsignDate;//解约时间
    private Date patientApplyDate;//患者发起签约时间
    private Date patientApplyUnsignDate;//患者发起解约时间
    private String signType;//1 用户自己申请  2医生手工带签  3.医生发起邀请
    private String familyCode;//签约code
    private Double expenses;//签约费用
    private String expensesStatus;//扣费状态【0未扣费 1已扣费 2已退费】
    private String signSource;// 签约来源【1 社区签约 2 移动签约】
    private String signDoctorCode;//簽約人code
    private String signDoctorName;//簽約人銘
    private String signDoctorLevel;//簽約人等级
    private String expensesType;//补贴类型(4种类型:01无补贴,02全部贴,03补个人承担部分(20),04补统筹基金(70))
    private String signYear;//签约年度
    private String medicalInsuranceNum;//医保流水号
    private String agentDoctorCode;//代理簽約人code
    private String agentDoctorName;//代理簽約人銘
    private String agentDoctorLevel;//代理簽約人等级
    private Long adminTeamId;//行政团队ID
    private Date expensesTime;//缴费时间
    private Integer isValid;//是否生效
    private String renewFlag;//1 医生续签 2 医生改签续签
    private String renewChangeReason;//原因
    //1.3.3.2新增字段
    //基卫服务类型
    private String serverType;
    //基卫服务类型名称
    private String serverTypeName;
    //基卫特殊人群类别
    private String specialPopulation;
    //基卫特殊人群类别名称
    private String specialPopulationName;
    public String getRenewFlag() {
        return renewFlag;
    }
    public void setRenewFlag(String renewFlag) {
        this.renewFlag = renewFlag;
    }
    public String getServerType() {
        return serverType;
    }
    public void setServerType(String serverType) {
        this.serverType = serverType;
    }
    public String getServerTypeName() {
        return serverTypeName;
    }
    public void setServerTypeName(String serverTypeName) {
        this.serverTypeName = serverTypeName;
    }
    public String getSpecialPopulation() {
        return specialPopulation;
    }
    public void setSpecialPopulation(String specialPopulation) {
        this.specialPopulation = specialPopulation;
    }
    public String getSpecialPopulationName() {
        return specialPopulationName;
    }
    public void setSpecialPopulationName(String specialPopulationName) {
        this.specialPopulationName = specialPopulationName;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    public String getLwCode() {
        return lwCode;
    }
    public void setLwCode(String lwCode) {
        this.lwCode = lwCode;
    }
    public Integer getType() {
        return type;
    }
    public void setType(Integer type) {
        this.type = type;
    }
    public String getPatient() {
        return patient;
    }
    public void setPatient(String patient) {
        this.patient = patient;
    }
    public String getOpenid() {
        return openid;
    }
    public void setOpenid(String openid) {
        this.openid = openid;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getIdcard() {
        return idcard;
    }
    public void setIdcard(String idcard) {
        this.idcard = idcard;
    }
    public String getSsc() {
        return ssc;
    }
    public void setSsc(String ssc) {
        this.ssc = ssc;
    }
    public String getMobile() {
        return mobile;
    }
    public void setMobile(String mobile) {
        this.mobile = mobile;
    }
    @Column(name = "emer_mobile")
    public String getEmerMobile() {
        return emerMobile;
    }
    public void setEmerMobile(String emerMobile) {
        this.emerMobile = emerMobile;
    }
    public String getHospital() {
        return hospital;
    }
    public void setHospital(String hospital) {
        this.hospital = hospital;
    }
    @Column(name = "hospital_name")
    public String getHospitalName() {
        return hospitalName;
    }
    public void setHospitalName(String hospitalName) {
        this.hospitalName = hospitalName;
    }
    public String getDoctor() {
        return doctor;
    }
    public void setDoctor(String doctor) {
        this.doctor = doctor;
    }
    @Column(name = "doctor_name")
    public String getDoctorName() {
        return doctorName;
    }
    public void setDoctorName(String doctorName) {
        this.doctorName = doctorName;
    }
    @Column(name = "doctor_health")
    public String getDoctorHealth() {
        return doctorHealth;
    }
    public void setDoctorHealth(String doctorHealth) {
        this.doctorHealth = doctorHealth;
    }
    @Column(name = "doctor_health_name")
    public String getDoctorHealthName() {
        return doctorHealthName;
    }
    public void setDoctorHealthName(String doctorHealthName) {
        this.doctorHealthName = doctorHealthName;
    }
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+08:00")
    public Date getBegin() {
        return begin;
    }
    public void setBegin(Date begin) {
        this.begin = begin;
    }
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+08:00")
    public Date getEnd() {
        return end;
    }
    public void setEnd(Date end) {
        this.end = end;
    }
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    public String getImages() {
        return images;
    }
    public void setImages(String images) {
        this.images = images;
    }
    public String getReason() {
        return reason;
    }
    public void setReason(String reason) {
        this.reason = reason;
    }
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    public Date getCzrq() {
        return czrq;
    }
    public void setCzrq(Date czrq) {
        this.czrq = czrq;
    }
    @Column(name = "team_code")
    public String getTeamCode() {
        return teamCode;
    }
    public void setTeamCode(String teamCode) {
        this.teamCode = teamCode;
    }
    @Column(name = "sign_type")
    public String getSignType() {
        return signType;
    }
    public void setSignType(String signType) {
        this.signType = signType;
    }
    @Column(name = "apply_date")
    public Date getApplyDate() {
        return applyDate;
    }
    public void setApplyDate(Date applyDate) {
        this.applyDate = applyDate;
    }
    @Column(name = "patient_apply_date")
    public Date getPatientApplyDate() {
        return patientApplyDate;
    }
    public void setPatientApplyDate(Date patientApplyDate) {
        this.patientApplyDate = patientApplyDate;
    }
    @Column(name = "patient_apply_unsgin_date")
    public Date getPatientApplyUnsignDate() {
        return patientApplyUnsignDate;
    }
    public void setPatientApplyUnsignDate(Date patientApplyUnsignDate) {
        this.patientApplyUnsignDate = patientApplyUnsignDate;
    }
    @Column(name = "family_code")
    public String getFamilyCode() {
        return familyCode;
    }
    public void setFamilyCode(String familyCode) {
        this.familyCode = familyCode;
    }
    @Column(name = "expenses")
    public Double getExpenses() {
        return expenses;
    }
    public void setExpenses(Double expenses) {
        this.expenses = expenses;
    }
    @Column(name = "sign_doctor_code")
    public String getSignDoctorCode() {
        return signDoctorCode;
    }
    public void setSignDoctorCode(String signDoctorCode) {
        this.signDoctorCode = signDoctorCode;
    }
    @Column(name = "sign_doctor_name")
    public String getSignDoctorName() {
        return signDoctorName;
    }
    public void setSignDoctorName(String signDoctorName) {
        this.signDoctorName = signDoctorName;
    }
    @Column(name = "sign_doctor_level")
    public String getSignDoctorLevel() {
        return signDoctorLevel;
    }
    public void setSignDoctorLevel(String signDoctorLevel) {
        this.signDoctorLevel = signDoctorLevel;
    }
    @Column(name = "apply_unsign_date")
    public Date getApplyUnsignDate() {
        return applyUnsignDate;
    }
    public void setApplyUnsignDate(Date applyUnsignDate) {
        this.applyUnsignDate = applyUnsignDate;
    }
    @Column(name = "expenses_type")
    public String getExpensesType() {
        return expensesType;
    }
    public void setExpensesType(String expensesType) {
        this.expensesType = expensesType;
    }
    @Column(name = "sign_year")
    public String getSignYear() {
        return signYear;
    }
    public void setSignYear(String signYear) {
        this.signYear = signYear;
    }
    @Column(name = "medical_insurance_num")
    public String getMedicalInsuranceNum() {
        return medicalInsuranceNum;
    }
    public void setMedicalInsuranceNum(String medicalInsuranceNum) {
        this.medicalInsuranceNum = medicalInsuranceNum;
    }
    @Column(name = "agent_doctor_code")
    public String getAgentDoctorCode() {
        return agentDoctorCode;
    }
    public void setAgentDoctorCode(String agentDoctorCode) {
        this.agentDoctorCode = agentDoctorCode;
    }
    @Column(name = "agent_doctor_name")
    public String getAgentDoctorName() {
        return agentDoctorName;
    }
    public void setAgentDoctorName(String agentDoctorName) {
        this.agentDoctorName = agentDoctorName;
    }
    @Column(name = "agent_doctor_level")
    public String getAgentDoctorLevel() {
        return agentDoctorLevel;
    }
    public void setAgentDoctorLevel(String agentDoctorLevel) {
        this.agentDoctorLevel = agentDoctorLevel;
    }
    @Column(name = "expenses_status")
    public String getExpensesStatus() {
        return expensesStatus;
    }
    public void setExpensesStatus(String expensesStatus) {
        this.expensesStatus = expensesStatus;
    }
    @Column(name = "sign_source")
    public String getSignSource() {
        return signSource;
    }
    public void setSignSource(String signSource) {
        this.signSource = signSource;
    }
    @Column(name = "admin_team_code")
    public Long getAdminTeamId() {
        return adminTeamId;
    }
    public void setAdminTeamId(Long adminTeamId) {
        this.adminTeamId = adminTeamId;
    }
    @Override
    public String toString() {
        return "SignFamily{" +
                "code='" + code + '\'' +
                ", lwCode='" + lwCode + '\'' +
                ", type=" + type +
                ", patient='" + patient + '\'' +
                ", openid='" + openid + '\'' +
                ", name='" + name + '\'' +
                ", idcard='" + idcard + '\'' +
                ", ssc='" + ssc + '\'' +
                ", mobile='" + mobile + '\'' +
                ", emerMobile='" + emerMobile + '\'' +
                ", hospital='" + hospital + '\'' +
                ", hospitalName='" + hospitalName + '\'' +
                ", doctor='" + doctor + '\'' +
                ", doctorName='" + doctorName + '\'' +
                ", doctorHealth='" + doctorHealth + '\'' +
                ", doctorHealthName='" + doctorHealthName + '\'' +
                ", begin=" + begin +
                ", end=" + end +
                ", status=" + status +
                ", images='" + images + '\'' +
                ", reason='" + reason + '\'' +
                ", czrq=" + czrq +
                ", teamCode='" + teamCode + '\'' +
                ", applyDate=" + applyDate +
                ", signType='" + signType + '\'' +
                ", familyCode='" + familyCode + '\'' +
                '}';
    }
    public Date getExpensesTime() {
        return expensesTime;
    }
    public void setExpensesTime(Date expensesTime) {
        this.expensesTime = expensesTime;
    }
    @Column(name="is_valid")
    public Integer getIsValid() {
        return isValid;
    }
    public void setIsValid(Integer isValid) {
        this.isValid = isValid;
    }
    public String getRenewChangeReason() {
        return renewChangeReason;
    }
    public void setRenewChangeReason(String renewChangeReason) {
        this.renewChangeReason = renewChangeReason;
    }
}