浏览代码

微信模板修改

yeshijie 8 年之前
父节点
当前提交
9c3d7a4442
共有 30 个文件被更改,包括 3754 次插入1331 次删除
  1. 17 6
      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. 5 0
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/dataFilter/SignDataFilter.java
  5. 1 1
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/mycache/CachePool.java
  6. 541 446
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/storage/DBStorage.java
  7. 620 585
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/storage/RedisStorage.java
  8. 263 139
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/Constant.java
  9. 182 6
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/CurrentDayAllQuotaJob.java
  10. 109 0
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignChangeHospitalJob.java
  11. 109 0
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignChangeTeamJob.java
  12. 109 0
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignChangeTownJob.java
  13. 108 0
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignInJob.java
  14. 109 0
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignJob.java
  15. 108 0
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignOutJob.java
  16. 114 0
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/RenewSignReasonJob.java
  17. 127 0
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/SignServerTypeJob.java
  18. 539 0
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/model/signfamily/SignFamilyRenew.java
  19. 20 0
      patient-co-wlyy/src/main/java/com/yihu/wlyy/entity/patient/SignFamily.java
  20. 11 0
      patient-co-wlyy/src/main/java/com/yihu/wlyy/entity/patient/SignFamilyRenew.java
  21. 36 0
      patient-co-wlyy/src/main/java/com/yihu/wlyy/entity/patient/SignFamilyRenewLog.java
  22. 24 24
      patient-co-wlyy/src/main/java/com/yihu/wlyy/job/SignEndJob.java
  23. 8 1
      patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/family/FamilyMemberService.java
  24. 17 3
      patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/sign/FamilyContractService.java
  25. 49 98
      patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/sign/SignWebService.java
  26. 20 11
      patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/statistics/StatisticsService.java
  27. 0 3
      patient-co-wlyy/src/main/java/com/yihu/wlyy/web/doctor/sign/DoctorSignController.java
  28. 4 3
      patient-co-wlyy/src/main/java/com/yihu/wlyy/web/patient/sign/FamilyContractController.java
  29. 16 3
      patient-co-wlyy/src/main/java/com/yihu/wlyy/web/patient/sign/PatientSignController.java
  30. 10 1
      patient-co-wlyy/src/main/java/com/yihu/wlyy/web/statistic/StatisticsController.java

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

@ -2,6 +2,7 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <groupId>com.yihu</groupId>
    <artifactId>patient-co-statistics</artifactId>
    <version>1.0.0</version>
@ -371,12 +372,18 @@
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>${version.spring-boot}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <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 +412,15 @@
        <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>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </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,36)  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);
    }
}

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

@ -38,6 +38,7 @@ public class SignDataFilter {
    public static String level2Health = "5";//健康服务分布
    public static String level2Age2 = "6";//年龄
    public static String level2AgeDisease = "7";//年龄疾病
    public static String level2ServerType= "8";//年龄疾病
    public static String level3Disease = "1";//疾病分组
@ -345,6 +346,10 @@ public class SignDataFilter {
                    returnLevel2Key = getAgeDisease(signFamily);
                    return returnLevel2Key;
                }
                case "8": {
                    return signFamily.getSignType();
                }
            }
        }
        return returnLevel2Key;

+ 1 - 1
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/mycache/CachePool.java

@ -50,7 +50,7 @@ public class CachePool {
        CacheModel model= arriveSignFamilyExpenseStatus1Map.get(date);
        if(model==null){
            model=new CacheModel();
            String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status,patient from wlyy_sign_family a " +
            String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status,patient,server_type from wlyy_sign_family a " +
                    " where status in(1,2) and a.type =2  and expenses_status=1 and a.expenses_time< '"+date+ Constant.quota_date_last+"'" ;
            String sqlCount="select count(id) from wlyy_sign_family a " +
                    " where  status in(1,2) and a.type =2 and expenses_status=1 and a.expenses_time< '"+date+ Constant.quota_date_last+"'";

+ 541 - 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续签原因 10 服务类型
     * @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,172 @@ 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);
            }
            case 10: {
                return Constant.getServerType(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 +972,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));
    }
}

+ 620 - 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续签原因 10签约服务
     * @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,83 @@ 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);
            }
            case 10: {
                //疾病年齡
                return Constant.getServerType(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;
        }
    }

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

@ -1,278 +1,402 @@
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.
 * 常量类
 */
public class Constant {
    public static String quota_date_last=" 17:00:00 ";
    public static String city="350200";
    public static String cityName="厦门市";
    public static String quota_date_last = " 17:00:00 ";
    public static String city = "350200";
    public static String cityName = "厦门市";
    //二级维度的性别
    public static String level_sex_1="1";
    public static String level_sex_2="2";
    public static String level_sex_3="3";
    public static String level_sex_1_name="女";
    public static String level_sex_2_name="男";
    public static String level_sex_3_name="未知";
    public static String level_sex_1 = "1";
    public static String level_sex_2 = "2";
    public static String level_sex_3 = "3";
    public static String level_sex_1_name = "女";
    public static String level_sex_2_name = "男";
    public static String level_sex_3_name = "未知";
    //二级维度的年龄
    public static String level_age_1="1";
    public static String level_age_2="2";
    public static String level_age_3="3";
    public static String level_age_4="4";
    public static String level_age_5="5";
    public static String level_age_6="6";
    public static String level_age_1_name="0~6";
    public static String level_age_2_name="7~18";
    public static String level_age_3_name="19~30";
    public static String level_age_4_name="31~50";
    public static String level_age_5_name="51~65";
    public static String level_age_6_name=">65";
    public static String level_age_1 = "1";
    public static String level_age_2 = "2";
    public static String level_age_3 = "3";
    public static String level_age_4 = "4";
    public static String level_age_5 = "5";
    public static String level_age_6 = "6";
    public static String level_age_1_name = "0~6";
    public static String level_age_2_name = "7~18";
    public static String level_age_3_name = "19~30";
    public static String level_age_4_name = "31~50";
    public static String level_age_5_name = "51~65";
    public static String level_age_6_name = ">65";
    //二级维度的年龄
    public static String level_age2_1="1";
    public static String level_age2_2="2";
    public static String level_age2_1_name="<=65";
    public static String level_age2_2_name=">65";
    public static String level_age2_1 = "1";
    public static String level_age2_2 = "2";
    public static String level_age2_1_name = "<=65";
    public static String level_age2_2_name = ">65";
    //二级维度的组
    public static String level_group_0="0";
    public static String level_group_1="1";
    public static String level_group_2="2";
    public static String level_group_3="3";
    public static String level_group_4="4";
    public static String level_group_5="5";
    public static String level_group_6="6";
    public static String level_group_7="7";
    public static String level_group_0_name="未分組";
    public static String level_group_1_name="普通人群";
    public static String level_group_2_name="慢病65岁以下人群";
    public static String level_group_3_name="65岁以上人群";
    public static String level_group_4_name="高血压";
    public static String level_group_5_name="糖尿病";
    public static String level_group_6_name="糖尿病和高血压";
    public static String level_group_7_name="慢病65岁以上人群";
    public static String level_group_0 = "0";
    public static String level_group_1 = "1";
    public static String level_group_2 = "2";
    public static String level_group_3 = "3";
    public static String level_group_4 = "4";
    public static String level_group_5 = "5";
    public static String level_group_6 = "6";
    public static String level_group_7 = "7";
    public static String level_group_0_name = "未分組";
    public static String level_group_1_name = "普通人群";
    public static String level_group_2_name = "慢病65岁以下人群";
    public static String level_group_3_name = "65岁以上人群";
    public static String level_group_4_name = "高血压";
    public static String level_group_5_name = "糖尿病";
    public static String level_group_6_name = "糖尿病和高血压";
    public static String level_group_7_name = "慢病65岁以上人群";
    //二级维度签约扣费
    public static String level_expense_0="0";
    public static String level_expense_1="1";
    public static String level_expense_2="2";
    public static String level_expense_0_name="未缴费人数";
    public static String level_expense_1_name="已缴费人数";
    public static String level_expense_2_name="已退费";
    public static String level_expense_0 = "0";
    public static String level_expense_1 = "1";
    public static String level_expense_2 = "2";
    public static String level_expense_0_name = "未缴费人数";
    public static String level_expense_1_name = "已缴费人数";
    public static String level_expense_2_name = "已退费";
    //二级维度健康分布
    public static String level_health_fb_0="0";
    public static String level_health_fb_1="1";
    public static String level_health_fb_2="2";
    public static String level_health_fb_3="3";
    public static String level_health_fb_4="4";
    public static String level_health_fb_0_name="未标注";
    public static String level_health_fb_1_name="健康人群";
    public static String level_health_fb_2_name="患病人群";
    public static String level_health_fb_3_name="高危人群";
    public static String level_health_fb_4_name="恢复期人群";
    public static String level_health_fb_0 = "0";
    public static String level_health_fb_1 = "1";
    public static String level_health_fb_2 = "2";
    public static String level_health_fb_3 = "3";
    public static String level_health_fb_4 = "4";
    public static String level_health_fb_0_name = "未标注";
    public static String level_health_fb_1_name = "健康人群";
    public static String level_health_fb_2_name = "患病人群";
    public static String level_health_fb_3_name = "高危人群";
    public static String level_health_fb_4_name = "恢复期人群";
    //二姐维度的年龄疾病
    public static String level_age_disease_1="1";
    public static String level_age_disease_2="2";
    public static String level_age_disease_3="3";
    public static String level_age_disease_1_name="高血压";
    public static String level_age_disease_2_name="糖尿病";
    public static String level_age_disease_3_name="65岁以上";
    public static String level_age_disease_1 = "1";
    public static String level_age_disease_2 = "2";
    public static String level_age_disease_3 = "3";
    public static String level_age_disease_1_name = "高血压";
    public static String level_age_disease_2_name = "糖尿病";
    public static String level_age_disease_3_name = "65岁以上";
    //耳机维度的时间分布
    public static String level_reply_time_1="1";
    public static String level_reply_time_2="2";
    public static String level_reply_time_3="3";
    public static String level_reply_time_4="4";
    public static String level_reply_time_5="5";
    public static String level_reply_time_1_name="0-8";
    public static String level_reply_time_2_name="8-12";
    public static String level_reply_time_3_name="12-13";
    public static String level_reply_time_4_name="13-18";
    public static String level_reply_time_5_name="18-24";
    public static String level_reply_time_1 = "1";
    public static String level_reply_time_2 = "2";
    public static String level_reply_time_3 = "3";
    public static String level_reply_time_4 = "4";
    public static String level_reply_time_5 = "5";
    public static String level_reply_time_1_name = "0-8";
    public static String level_reply_time_2_name = "8-12";
    public static String level_reply_time_3_name = "12-13";
    public static String level_reply_time_4_name = "13-18";
    public static String level_reply_time_5_name = "18-24";
    //三级维度的疾病
    public static String level_disease_1="1";
    public static String level_disease_2="2";
    public static String level_disease_3="3";
    public static String level_disease_4="4";
    public static String level_disease_1_name="高血压";
    public static String level_disease_2_name="糖尿病";
    public static String level_disease_3_name="糖尿病和高血压";
    public static String level_disease_4_name="健康人群";
    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";
    public static String level_disease_3 = "3";
    public static String level_disease_4 = "4";
    public static String level_disease_1_name = "高血压";
    public static String level_disease_2_name = "糖尿病";
    public static String level_disease_3_name = "糖尿病和高血压";
    public static String level_disease_4_name = "健康人群";
    public static String getlevelHealthFbName(String key){
        switch (key){
            case "1":{
    public static String getlevelHealthFbName(String key) {
        switch (key) {
            case "1": {
                return level_health_fb_1_name;
            }
            case "2":{
            case "2": {
                return level_health_fb_2_name;
            }
            case "3":{
            case "3": {
                return level_health_fb_3_name;
            }
            case "4":{
            case "4": {
                return level_health_fb_4_name;
            }
            case "0":{
            case "0": {
                return level_health_fb_0_name;
            }
        }
        return "";
    }
    public static String getLevelAge2(String key){
        switch (key){
            case "1":{
    public static String getLevelAge2(String key) {
        switch (key) {
            case "1": {
                return level_age2_1_name;
            }
            case "2":{
            case "2": {
                return level_age2_2_name;
            }
        }
        return "";
    }
    public static String getLevelExpenseName(String key){
        switch (key){
            case "1":{
    public static String getLevelExpenseName(String key) {
        switch (key) {
            case "1": {
                return level_expense_1_name;
            }
            case "2":{
            case "2": {
                return level_expense_2_name;
            }
            case "0":{
            case "0": {
                return level_expense_0_name;
            }
        }
        return "";
    }
    public static String getLevelSexName(String key){
        switch (key){
            case "1":{
    public static String getLevelSexName(String key) {
        switch (key) {
            case "1": {
                return level_sex_1_name;
            }
            case "2":{
            case "2": {
                return level_sex_2_name;
            }
            case "3":{
            case "3": {
                return level_sex_3_name;
            }
        }
        return "";
    }
    public static String getLevelGroupName(String key){
        switch (key){
            case "0":{
    public static String getLevelGroupName(String key) {
        switch (key) {
            case "0": {
                return level_group_0_name;
            }
            case "1":{
            case "1": {
                return level_group_1_name;
            }
            case "2":{
            case "2": {
                return level_group_2_name;
            }
            case "3":{
            case "3": {
                return level_group_3_name;
            }
            case "4":{
            case "4": {
                return level_group_4_name;
            }
            case "5":{
            case "5": {
                return level_group_5_name;
            }
            case "6":{
            case "6": {
                return level_group_6_name;
            }
            case "7":{
            case "7": {
                return level_group_7_name;
            }
        }
        return "";
    }
    public static String getLevelAgeName(String key){
        switch (key){
            case "1":{
    public static String getLevelAgeName(String key) {
        switch (key) {
            case "1": {
                return level_age_1_name;
            }
            case "2":{
            case "2": {
                return level_age_2_name;
            }
            case "3":{
            case "3": {
                return level_age_3_name;
            }
            case "4":{
            case "4": {
                return level_age_4_name;
            }
            case "5":{
            case "5": {
                return level_age_5_name;
            }
            case "6":{
            case "6": {
                return level_age_6_name;
            }
        }
        return "";
    }
    public static String getLevelDiseaseName(String key){
        switch (key){
            case "1":{
    public static String getLevelDiseaseName(String key) {
        switch (key) {
            case "1": {
                return level_disease_1_name;
            }
            case "2":{
            case "2": {
                return level_disease_2_name;
            }
            case "3":{
            case "3": {
                return level_disease_3_name;
            }
            case "4":{
            case "4": {
                return level_disease_4_name;
            }
        }
        return "";
    }
    public static String getLevelAgeDiseaseName(String key){
        switch (key){
            case "1":{
    public static String getLevelAgeDiseaseName(String key) {
        switch (key) {
            case "1": {
                return level_age_disease_1_name;
            }
            case "2":{
            case "2": {
                return level_age_disease_2_name;
            }
            case "3":{
            case "3": {
                return level_age_disease_3_name;
            }
        }
        return "";
    }
    public static String getLevelReplyTimeName(String key){
        switch (key){
            case "1":{
    public static String getLevelReplyTimeName(String key) {
        switch (key) {
            case "1": {
                return level_reply_time_1_name;
            }
            case "2":{
            case "2": {
                return level_reply_time_2_name;
            }
            case "3":{
            case "3": {
                return level_reply_time_3_name;
            }
            case "4":{
            case "4": {
                return level_reply_time_4_name;
            }
            case "5":{
            case "5": {
                return level_reply_time_5_name;
            }
        }
        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";
    }
    public static String getServerType(String key) {
        switch (key) {
            case "1": {
                return "普通服务";
            }
            case "2": {
                return "老年人服务";
            }
            case "3": {
                return "慢性病服务";
            }
            case "4": {
                return "未知4";
            }
            case "5": {
                return "未知5";
            }
            case "6": {
                return "孕产妇";
            }
            case "7": {
                return "未知7";
            }
            case "8": {
                return "儿童(0-6岁)";
            }
            case "9": {
                return "高血压";
            }
            case "10": {
                return "糖尿病";
            }
            case "11": {
                return "贫困人口";
            }
            case "12": {
                return "计生特殊家庭";
            }
            case "13": {
                return "特殊人群";
            }
        }
        return "0";
    }
}

+ 182 - 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,15 @@ 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(); //统计续签签出
        computequota_36(sql, signFamilies, null); //签约服务类型
        quartzJobLog.setJobContent(allContent.toString());
        quartzJobLog.setJobName("实时统计");
@ -197,6 +207,30 @@ public class CurrentDayAllQuotaJob implements Job {
        redisTemplate.opsForValue().set("quota:timeKey", RedisStorage.timeKey);
    }
    private void computequota_36(String sql, List<SignFamily> signFamilies, Object o) {
        String quotaId = "36";
        //找出今天的签约信息
        //String sql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and  a.expenses_time>= '"+now+"' and  a.expenses_time< '"+tomorrow+"' and a.expenses_status=1 ";
        try {
            //抽取數據
            // List<SignFamily> signFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
            //清洗數據
            FilterModel etlModels = SpringUtil.getBean(SignDataFilter.class).filter(signFamilies, SignDataFilter.level2ServerType, sql, null);
            //统计数据 一级维度
            List<Map<String, List<ETLModel>>> returnDatas = SpringUtil.getBean(Level1Role.class).elt(etlModels.getEtlModelList());
            //统计数据 二级维度
            List<Map<String, Map<String, List<ETLModel>>>> patientSexRoleData = SpringUtil.getBean(Level2Role.class).elt(returnDatas);
            //保存数据
            SpringUtil.getBean(RedisStorage.class).saveByLevel2(patientSexRoleData, null, quotaId, 13, 10, 1);
            allContent.append(JsonUtil.objToStr(etlModels.getLogModel()));
        } catch (Exception e) {
            e.printStackTrace();
            allContent.append("统计失败:" + e.getMessage());
        }
        allContent.append("-----------36----------");
    }
    private void computequota_22() {
        String quotaId = "22";
        try {
@ -210,7 +244,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 +253,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 +296,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 +305,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 +358,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 +367,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 +1106,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();
        }
    }
}

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

@ -0,0 +1,127 @@
package com.yihu.wlyy.statistics.job.business;
import com.yihu.wlyy.statistics.dao.QuartzJobLogDao;
import com.yihu.wlyy.statistics.etl.dataFilter.SignDataFilter;
import com.yihu.wlyy.statistics.etl.extract.DBExtract;
import com.yihu.wlyy.statistics.etl.model.CacheModel;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.etl.model.FilterModel;
import com.yihu.wlyy.statistics.etl.mycache.CachePool;
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.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;
/**
 * Created by Administrator on 2016.10.11.
 * 签约 服务类型
 */
@Component
@Scope("prototype")
@DisallowConcurrentExecution//防止到了执行时间点前一任务还在执行中,但是这时有空闲的线程,那么马上又会执行,这样一来就会存在同一job被并行执行
public class SignServerTypeJob implements Job {
    private WlyyQuotaVO wlyyQuota;//指标对象
    private WlyyJobConfigVO wlyyJobConfig;//配置对象
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private Level1Role levelRole;
    @Autowired
    private Level2Role level2Role;
    @Autowired
    private DBStorage dbStorage;
    @Autowired
    private DBExtract dbExtract;
    @Autowired
    private SignDataFilter signDataFilter;
    @Autowired
    private CachePool cachePool;
    @Autowired
    private QuartzJobLogDao quartzJobLogDao;//执行日志Dao
    String yesterday;
    String daybefore;
    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) {
            e.printStackTrace();
            //如果出錯立即重新執行
            JobExecutionException e2 = new JobExecutionException(e);
            e2.setRefireImmediately(true);
        }
    }
    /**
     * 计算指标
     */
    private void computequota() throws Exception {
        try {
            jdbcTemplate.execute("delete from wlyy_quota_result where quota_date='" + yesterday + "' and quato_code='" + 36 + "'");
            //新建任务日志对象
            QuartzJobLog quartzJobLog = new QuartzJobLog();
            quartzJobLog.setJobStartTime(new Date());
            quartzJobLog.setJobId(wlyyJobConfig.getId());
            quartzJobLog.setJobName(wlyyJobConfig.getJobName());
            //从缓存取数据
            CacheModel cacheModel = cachePool.getSignFamilysWithExpenseStatus1ByDate(yesterday);
            //清洗數據
            FilterModel etlModels = signDataFilter.filter(cacheModel.getSignFamilies(), SignDataFilter.level2ServerType, cacheModel.getSql(), yesterday);
            //统计数据 1级维度
            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, 13, 10, 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();
        }
    }
    @Transactional
    private void deleteData() {
        jdbcTemplate.execute("delete from wlyy_quota_result where quota_date='" + yesterday + "' and quato_code='" + 14 + "'");
    }
    public String getYesterday() {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DATE, -1);
        String yesterday = new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
        return yesterday;
    }
}

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

+ 20 - 0
patient-co-wlyy/src/main/java/com/yihu/wlyy/entity/patient/SignFamily.java

@ -73,6 +73,26 @@ public class SignFamily extends IdEntity {
    private String specialPopulation;
    //基卫特殊人群类别名称
    private String specialPopulationName;
    //续签标志 1 医生续签 2 医生改签续签
    private String renewFlag;
    //转签原因
    private String renewChangeReason;
    public String getRenewFlag() {
        return renewFlag;
    }
    public void setRenewFlag(String renewFlag) {
        this.renewFlag = renewFlag;
    }
    public String getRenewChangeReason() {
        return renewChangeReason;
    }
    public void setRenewChangeReason(String renewChangeReason) {
        this.renewChangeReason = renewChangeReason;
    }
    public String getServerType() {
        return serverType;

+ 11 - 0
patient-co-wlyy/src/main/java/com/yihu/wlyy/entity/patient/SignFamilyRenew.java

@ -75,6 +75,17 @@ public class SignFamilyRenew extends IdEntity {
    //基卫特殊人群类别名称
    private String specialPopulationName;
    //转签原因
    private String renewChangeReason;
    public String getRenewChangeReason() {
        return renewChangeReason;
    }
    public void setRenewChangeReason(String renewChangeReason) {
        this.renewChangeReason = renewChangeReason;
    }
    public String getRenewFlag() {
        return renewFlag;
    }

+ 36 - 0
patient-co-wlyy/src/main/java/com/yihu/wlyy/entity/patient/SignFamilyRenewLog.java

@ -31,11 +31,47 @@ public class SignFamilyRenewLog extends IdEntity {
    private String   oldProId ;
    private Date   createTime;
    private Date  updateTime;
    private Integer status;
    private Date applyDate;
    private String renewChangeReason;
    private String expensesStatus;
    public String getSignCode() {
        return signCode;
    }
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    public Date getApplyDate() {
        return applyDate;
    }
    public void setApplyDate(Date applyDate) {
        this.applyDate = applyDate;
    }
    public String getRenewChangeReason() {
        return renewChangeReason;
    }
    public void setRenewChangeReason(String renewChangeReason) {
        this.renewChangeReason = renewChangeReason;
    }
    public String getExpensesStatus() {
        return expensesStatus;
    }
    public void setExpensesStatus(String expensesStatus) {
        this.expensesStatus = expensesStatus;
    }
    public void setSignCode(String signCode) {
        this.signCode = signCode;
    }

+ 24 - 24
patient-co-wlyy/src/main/java/com/yihu/wlyy/job/SignEndJob.java

@ -44,31 +44,31 @@ public class SignEndJob implements Job {
                //设置已过期
                String sql = "UPDATE wlyy_sign_family t SET t.status = -4,t.apply_unsign_date='"+ DateUtil.dateToStr(new Date(),"yyyy-MM-dd HH:mm:ss")+"'  WHERE t.status>=0 AND t.sign_year='"+year+"'";
//                //数据迁移
//                String sql2 ="INSERT INTO wlyy_sign_family(" +
//                        "code,lw_code,type,patient,openid,name,idcard,ssc," +
//                        "mobile,emer_mobile,hospital,hospital_name,doctor," +
//                        "doctor_name,begin,end,images,group_code,status,reason," +
//                        "czrq,team_code,sign_type,apply_date,release_speak," +
//                        "doctor_health_name,doctor_health,family_code,patient_apply_date," +
//                        "expenses,expenses_status,sign_source,sign_doctor_code,sign_doctor_name," +
//                        "sign_doctor_level,patient_apply_unsgin_date,apply_unsign_date,expenses_type," +
//                        "sign_year,medical_insurance_num,agent_doctor_code,agent_doctor_name," +
//                        "agent_doctor_level,admin_team_code,expenses_time,server_type,server_type_name,special_population,special_population_name) " +
//                        "SELECT code,lw_code,type,patient,openid,name,idcard,ssc," +
//                        "mobile,emer_mobile,hospital,hospital_name,doctor,doctor_name," +
//                        "begin,end,images,group_code,status,reason,czrq,team_code," +
//                        "sign_type,apply_date,release_speak,doctor_health_name," +
//                        "doctor_health,family_code,patient_apply_date,expenses," +
//                        "expenses_status,sign_source,sign_doctor_code,sign_doctor_name," +
//                        "sign_doctor_level,patient_apply_unsgin_date,apply_unsign_date," +
//                        "expenses_type,sign_year,medical_insurance_num,agent_doctor_code," +
//                        "agent_doctor_name,agent_doctor_level,admin_team_code,expenses_time,server_type,server_type_name,special_population,special_population_name " +
//                        "FROM wlyy_sign_family_renew t WHERE t.is_valid =0 AND t.status =1 AND t.sign_year='"+(year+1)+"' AND t.expenses_status='1'";
//                //更改迁移状态
//                String sql3 = "UPDATE wlyy_sign_family_renew t SET t.is_valid =1 WHERE t.is_valid =0 AND t.status =1 AND t.sign_year='"+(year+1)+"' AND t.expenses_status='1'";
                String sql2 ="INSERT INTO wlyy_sign_family(" +
                        "code,lw_code,type,patient,openid,name,idcard,ssc," +
                        "mobile,emer_mobile,hospital,hospital_name,doctor," +
                        "doctor_name,begin,end,images,group_code,status,reason," +
                        "czrq,team_code,sign_type,apply_date,release_speak," +
                        "doctor_health_name,doctor_health,family_code,patient_apply_date," +
                        "expenses,expenses_status,sign_source,sign_doctor_code,sign_doctor_name," +
                        "sign_doctor_level,patient_apply_unsgin_date,apply_unsign_date,expenses_type," +
                        "sign_year,medical_insurance_num,agent_doctor_code,agent_doctor_name," +
                        "agent_doctor_level,admin_team_code,expenses_time,server_type,server_type_name,special_population,special_population_name) " +
                        "SELECT code,lw_code,type,patient,openid,name,idcard,ssc," +
                        "mobile,emer_mobile,hospital,hospital_name,doctor,doctor_name," +
                        "begin,end,images,group_code,status,reason,czrq,team_code," +
                        "sign_type,apply_date,release_speak,doctor_health_name," +
                        "doctor_health,family_code,patient_apply_date,expenses," +
                        "expenses_status,sign_source,sign_doctor_code,sign_doctor_name," +
                        "sign_doctor_level,patient_apply_unsgin_date,apply_unsign_date," +
                        "expenses_type,sign_year,medical_insurance_num,agent_doctor_code," +
                        "agent_doctor_name,agent_doctor_level,admin_team_code,expenses_time,server_type,server_type_name,special_population,special_population_name " +
                        "FROM wlyy_sign_family_renew t WHERE t.is_valid =0 AND t.status =1 AND t.sign_year='"+(year+1)+"' AND t.expenses_status='1'";
                //更改迁移状态
                String sql3 = "UPDATE wlyy_sign_family_renew t SET t.is_valid =1 WHERE t.is_valid =0 AND t.status =1 AND t.sign_year='"+(year+1)+"' AND t.expenses_status='1'";
                jdbcTemplate.execute(sql);
//                jdbcTemplate.execute(sql2);
//                jdbcTemplate.execute(sql3);
                jdbcTemplate.execute(sql2);
                jdbcTemplate.execute(sql3);
            }
            System.out.println("sign end job end");

+ 8 - 1
patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/family/FamilyMemberService.java

@ -26,6 +26,8 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.PostConstruct;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
 * 家庭成员服务
@ -826,7 +828,7 @@ public class FamilyMemberService extends BaseService {
        //2.判断手机过滤
        //判断是否绑定了手机
        if (StringUtils.isNoneBlank(p.getMobile())) {
        if (StringUtils.isNoneBlank(p.getMobile())&&isMobileNO(p.getMobile())) {
            //如果用户绑定了微信,将状态更改为4
            if (result == 1) {
                result = 3;
@ -1170,4 +1172,9 @@ public class FamilyMemberService extends BaseService {
        }
    }
    public boolean isMobileNO(String number){
        Pattern pattern = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$");
        Matcher m = pattern.matcher(number);
        return m.matches();
    }
}

+ 17 - 3
patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/sign/FamilyContractService.java

@ -2991,7 +2991,7 @@ public class FamilyContractService extends BaseService {
     * @return
     */
    @Transactional
    public int signRenew(String doctor,String healthDoctor, String patient) throws Exception {
    public int signRenew(String doctor,String healthDoctor, String patient, String reason) throws Exception {
        Patient p = patientDao.findByCode(patient);
        if (p == null) {
            return -1;
@ -3139,6 +3139,11 @@ public class FamilyContractService extends BaseService {
        sf.setIsValid(0);
        sf.setBegin(DateUtil.stringToDate(DateUtil.getSignYear()+"-07-01 00:00:00","yyyy-MM-dd HH:mmm:ss"));
        sf.setEnd(DateUtil.stringToDate(DateUtil.getSignYear()+1+"-07-01 00:00:00","yyyy-MM-dd HH:mmm:ss"));
        //设置转签原因
        if(StringUtils.isNotBlank(reason)){
            sf.setRenewChangeReason(reason);
        }
        SignFamilyRenew temp = signFamilyRenewDao.save(sf);
        if (temp != null) {
@ -3185,7 +3190,7 @@ public class FamilyContractService extends BaseService {
     * @return
     */
    @Transactional
    public int signRenewOverdue(String doctor,String healthDoctor, String patient) throws Exception {
    public int signRenewOverdue(String doctor,String healthDoctor, String patient, String reason) throws Exception {
        Patient p = patientDao.findByCode(patient);
        if (p == null) {
            return -1;
@ -3325,6 +3330,9 @@ public class FamilyContractService extends BaseService {
        sf.setBegin(new Date());
        sf.setEnd(DateUtil.stringToDate(year+1+"-06-30 00:00:00","yyyy-MM-dd HH:mmm:ss"));
        if(StringUtils.isNotBlank(reason)){
            sf.setRenewChangeReason(reason);
        }
        SignFamily temp = signFamilyDao.save(sf);
        if (temp != null) {
@ -3342,7 +3350,13 @@ public class FamilyContractService extends BaseService {
            message.setTitle("家庭续签申请");
            message.setType(1);//家庭签约信息
            message.setReadonly(1);//是否只读消息
            message.setSignStatus("1");//过期以后,变为1为签约
            if("1".equals(sf.getRenewFlag())){
                message.setSignStatus("8");//续签
            }else{
                message.setSignStatus("9");//改签
            }
            //message.setSignStatus("1");//过期以后,变为1为签约
            message.setSex(p.getSex());
            message.setOver("1");//未处理
            message.setData(sf.getCode());

+ 49 - 98
patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/sign/SignWebService.java

@ -1,5 +1,8 @@
package com.yihu.wlyy.service.app.sign;
import java.util.*;
import com.yihu.wlyy.entity.dict.SystemDict;
import com.yihu.wlyy.entity.doctor.profile.Doctor;
import com.yihu.wlyy.entity.doctor.team.admin.AdminTeam;
import com.yihu.wlyy.entity.doctor.team.sign.DoctorTeam;
@ -27,6 +30,7 @@ import com.yihu.wlyy.wechat.util.WeiXinAccessTokenUtils;
import com.yihu.wlyy.wechat.util.WeiXinOpenIdUtils;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
@ -944,10 +948,8 @@ public class SignWebService extends BaseService {
                String openid = (String) signFamily.get("openid");
                String name = (String) signFamily.get("name");
                String doctorName = (String) signFamily.get("doctorName");
                String code = (String) signFamily.get("code");
                JSONObject json = new JSONObject();
                json.put("toUser", code);
                json.put("represented",code);//被代理人
                json.put("keyword1", "续签家庭医生");
                json.put("keyword2", DateUtil.dateToStr(new Date(), "yyyy-MM-dd"));
                json.put("remark", "提醒医生 :" + doctorName + "\n"
@ -956,51 +958,24 @@ public class SignWebService extends BaseService {
                    json.put("first", name + ",您好!\n" +
                            "您的家庭医生签约将于6月30日到期,为了能继续给您提供健康服务,诚邀您续签家庭医生。");
                    PushMsgTask.getInstance().putWxMsg(access_token, 16, openid, name, json);
                }
//                else {
//                    //如果自己没有绑定,则发给家人
//                    String code = (String) signFamily.get("code");
//                    JSONObject j = weiXinOpenIdUtils.getFamilyOpenId(code);
//                    Patient member = (Patient) j.get("member");
//                    Patient p = patientService.findByCode(code);
//                    if (StringUtils.isNotBlank(member.getOpenid())) {
//                        json.put("first", weiXinOpenIdUtils.getTitleMes(p, (int) j.get("relation"), member.getName()) + "\n" +
//                                name + ",您好!\n" +
//                                "您的家庭医生签约将于6月30日到期,为了能继续给您提供健康服务,诚邀您续签家庭医生。");
//                        PushMsgTask.getInstance().putWxMsg(access_token, 16, member.getOpenid(), member.getName(), json);
//                    } else {
//                        //发送短信
//                        String mobile = (String) signFamily.get("mobile");
//                        if (StringUtils.isNotBlank(mobile)) {
//                            SMSService.sendMsg(mobile, name + "您好!您的家庭医生将于6月30日到期,为了继续给您提供健康服务,请关注“厦门i健康”公众号,回复“续签”,进行家庭医生线上续签。");
//                        }
//                    }
//                }
                //发送代理人
                JSONArray jsonArray = weiXinOpenIdUtils.getAgentOpenId(code);
                if(jsonArray!=null&&jsonArray.length()>0){
                } else {
                    //如果自己没有绑定,则发给家人
                    String code = (String) signFamily.get("code");
                    JSONObject j = weiXinOpenIdUtils.getFamilyOpenId(code);
                    Patient member = (Patient) j.get("member");
                    Patient p = patientService.findByCode(code);
                    for (int i = 0;i<jsonArray.length();i++){
                        JSONObject j  = jsonArray.getJSONObject(i);
                        Patient member = (Patient) j.get("member");
                        if(StringUtils.isNotBlank(member.getOpenid())){
                            JSONObject data = json;
                            data.remove("toUser");
                            data.put("toUser",member.getCode());
                            String first = (String) json.get("first");
                            data.remove("first");
                            data.put("first", weiXinOpenIdUtils.getTitleMes(p, (int) j.get("relation"), member.getName()) + "\n" +
                                    name + ",您好!\n" +
                                    "您的家庭医生签约将于6月30日到期,为了能继续给您提供健康服务,诚邀您续签家庭医生。");
                            PushMsgTask.getInstance().putWxMsg(weiXinAccessTokenUtils.getAccessToken(), 16, member.getOpenid(), member.getName(), data);
                    if (StringUtils.isNotBlank(member.getOpenid())) {
                        json.put("first", weiXinOpenIdUtils.getTitleMes(p, (int) j.get("relation"), member.getName()) + "\n" +
                                name + ",您好!\n" +
                                "您的家庭医生签约将于6月30日到期,为了能继续给您提供健康服务,诚邀您续签家庭医生。");
                        PushMsgTask.getInstance().putWxMsg(access_token, 16, member.getOpenid(), member.getName(), json);
                    } else {
                        //发送短信
                        String mobile = (String) signFamily.get("mobile");
                        if (StringUtils.isNotBlank(mobile)) {
                            SMSService.sendMsg(mobile, name + "您好!您的家庭医生将于6月30日到期,为了继续给您提供健康服务,请关注“厦门i健康”公众号,回复“续签”,进行家庭医生线上续签。");
                        }
                    }
                }else{
                    //发送短信
                    String mobile = (String) signFamily.get("mobile");
                    if (StringUtils.isNotBlank(mobile)) {
                        SMSService.sendMsg(mobile, name + "您好!您的家庭医生将于6月30日到期,为了继续给您提供健康服务,请关注“厦门i健康”公众号,回复“续签”,进行家庭医生线上续签。");
                    }
                }
            }
            return 1;
@ -1402,8 +1377,6 @@ public class SignWebService extends BaseService {
        //发送微信模板消息
        Patient p = patientService.findByCode(patientCode);
        JSONObject json = new JSONObject();
        json.put("toUser", patientCode);
        json.put("represented",patientCode);//被代理人
        json.put("keyword1", "续签家庭医生");
        json.put("keyword2", DateUtil.dateToStr(new Date(), "yyyy-MM-dd"));
        json.put("remark", "提醒医生 :" + d.getName() + "\n"
@ -1417,59 +1390,25 @@ public class SignWebService extends BaseService {
            PushMsgTask.getInstance().putWxMsg(access_token, 16, openid, name, json);
            patientSetReminFlag(patientCode);
            return 1;
        }
//        else {
//            //如果自己没有绑定,则发给家人
//            JSONObject j = weiXinOpenIdUtils.getFamilyOpenId(patientCode);
//            Patient member = (Patient) j.get("member");
//            if (StringUtils.isNotBlank(member.getOpenid())) {
//                json.put("first", weiXinOpenIdUtils.getTitleMes(p, (int) j.get("relation"), member.getName()) + "\n" +
//                        name + ",您好!\n" +
//                        "您的家庭医生签约将于6月30日到期,为了能继续给您提供健康服务,诚邀您续签家庭医生。");
//                PushMsgTask.getInstance().putWxMsg(access_token, 16, member.getOpenid(), member.getName(), json);
//                patientSetReminFlag(patientCode);
//                return 1;
//            } else {
//                //发送短信
//                String mobile = p.getMobile();
//                if (StringUtils.isNotBlank(mobile)) {
//                    SMSService.sendMsg(mobile, name + "您好!您的家庭医生将于6月30日到期,为了继续给您提供健康服务,请关注“厦门i健康”公众号,回复“续签”,进行家庭医生线上续签。");
//                    patientSetReminFlag(patientCode);
//                    return 2;
//                }
//            }
//        }
        //发送代理人
        JSONArray jsonArray = weiXinOpenIdUtils.getAgentOpenId(patientCode);
        if(jsonArray!=null&&jsonArray.length()>0){
            boolean flag = false;
            for (int i = 0;i<jsonArray.length();i++){
                JSONObject j  = jsonArray.getJSONObject(i);
                Patient member = (Patient) j.get("member");
                if(StringUtils.isNotBlank(member.getOpenid())){
                    JSONObject data = json;
                    data.remove("toUser");
                    data.put("toUser",member.getCode());
                    String first = (String) json.get("first");
                    data.remove("first");
                    json.put("first", weiXinOpenIdUtils.getTitleMes(p, (int) j.get("relation"), member.getName()) + "\n" +
                            name + ",您好!\n" +
                            "您的家庭医生签约将于6月30日到期,为了能继续给您提供健康服务,诚邀您续签家庭医生。");
                    PushMsgTask.getInstance().putWxMsg(weiXinAccessTokenUtils.getAccessToken(), 16, member.getOpenid(), member.getName(), data);
                    flag = true;
                }
            }
            if(flag){
        } else {
            //如果自己没有绑定,则发给家人
            JSONObject j = weiXinOpenIdUtils.getFamilyOpenId(patientCode);
            Patient member = (Patient) j.get("member");
            if (StringUtils.isNotBlank(member.getOpenid())) {
                json.put("first", weiXinOpenIdUtils.getTitleMes(p, (int) j.get("relation"), member.getName()) + "\n" +
                        name + ",您好!\n" +
                        "您的家庭医生签约将于6月30日到期,为了能继续给您提供健康服务,诚邀您续签家庭医生。");
                PushMsgTask.getInstance().putWxMsg(access_token, 16, member.getOpenid(), member.getName(), json);
                patientSetReminFlag(patientCode);
                return 1;
            }
        }else{
            //发送短信
            String mobile = p.getMobile();
            if (StringUtils.isNotBlank(mobile)) {
                SMSService.sendMsg(mobile, name + "您好!您的家庭医生将于6月30日到期,为了继续给您提供健康服务,请关注“厦门i健康”公众号,回复“续签”,进行家庭医生线上续签。");
                patientSetReminFlag(patientCode);
                return 2;
            } else {
                //发送短信
                String mobile = p.getMobile();
                if (StringUtils.isNotBlank(mobile)) {
                    SMSService.sendMsg(mobile, name + "您好!您的家庭医生将于6月30日到期,为了继续给您提供健康服务,请关注“厦门i健康”公众号,回复“续签”,进行家庭医生线上续签。");
                    patientSetReminFlag(patientCode);
                    return 2;
                }
            }
        }
        return -1;
@ -1786,6 +1725,13 @@ public class SignWebService extends BaseService {
        log.setNeedUpload("1");
        log.setCreateTime(new Date());
        log.setUpdateTime(new Date());
        //1.3.4新增字段
        log.setStatus(renew.getStatus());
        if(StringUtils.isNotBlank(renew.getRenewChangeReason())){
            log.setRenewChangeReason(renew.getRenewChangeReason());
        }
        log.setApplyDate(renew.getApplyDate());
        log.setExpensesStatus(renew.getExpensesStatus());
        signFamilyRenewLogDao.save(log);
        return 1;
@ -1852,4 +1798,9 @@ public class SignWebService extends BaseService {
        renew.setDoctorHealthName(hd.getName());
        renew.setDoctorHealth(hd.getCode());
    }
    public JSONArray getRenewChangeReason(){
       List<SystemDict> systemDict = systemDictService.getDictByDictName("RENEW_CHANGE_REASON");
        return new JSONArray(systemDict);
    }
}

+ 20 - 11
patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/statistics/StatisticsService.java

@ -1,6 +1,7 @@
package com.yihu.wlyy.service.app.statistics;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.doctor.profile.Doctor;
import com.yihu.wlyy.entity.doctor.team.admin.AdminTeam;
import com.yihu.wlyy.entity.organization.Hospital;
import com.yihu.wlyy.entity.statistics.PopulationBase;
@ -2933,19 +2934,17 @@ public class StatisticsService extends BaseService {
                    " GROUP BY dateNo";
            planSQL ="SELECT " +
                    " ( " +
                    "  DATE_FORMAT(w.create_time, '%v') - DATE_FORMAT('"+DateUtil.getFristDayOfMonth()+"', '%v') + 1 " +
                    " ) AS weekOfMonth,COUNT(1) AS planCount " +
                    "FROM " +
                    " left(w.create_time,10) AS dateNo,COUNT(1) AS planCount " +
                    " FROM " +
                    " wlyy_followup w " +
                    "WHERE " +
                    " WHERE " +
                    " w.admin_team_code =" +teamCode+
                    " AND w.doctor_code ='"+doctor+"'"+
                    " AND w.create_time >= '"+startDate+"' " +
                    " AND w.create_time <= '"+endDate+"' " +
                    " AND w.status ='2'"+
                    " AND w.followup_class IS NOT NULL " +
                    " GROUP BY weekOfMonth";
                    " GROUP BY dateNo";
        }else{
            //按月
            totalSQL ="SELECT " +
@ -2964,7 +2963,7 @@ public class StatisticsService extends BaseService {
            planSQL = "SELECT " +
                    " ( " +
                    "  DATE_FORMAT(w.create_time, '%v') - DATE_FORMAT('"+DateUtil.getFristDayOfMonth()+"', '%v') + 1 " +
                    " ) AS weekOfMonth,COUNT(1) AS followupCount " +
                    " ) AS weekOfMonth,COUNT(1) AS planCount " +
                    " FROM " +
                    " wlyy_followup w " +
                    " WHERE " +
@ -2998,7 +2997,7 @@ public class StatisticsService extends BaseService {
                    " WHERE " +
                    " w.admin_team_code =" +teamCode+
                    " AND w.create_time >= '"+startDate+"' " +
                    " AND w.create_time <= '"+endDate+"' " +
            " AND w.create_time <= '"+endDate+"' " +
                    " AND w.followup_class IS NOT NULL " +
                    " GROUP BY dateNo";
@ -3210,7 +3209,7 @@ public class StatisticsService extends BaseService {
            //按增量排序
            if(addList!=null&&addList.size()>0){
                //以增量为基准,合并结果集
                for(Map<String ,Object> map : totalList){
                for(Map<String ,Object> map : addList){
                    String code = (String)map.get("doctorCode");
@ -3222,7 +3221,7 @@ public class StatisticsService extends BaseService {
                        map.put("planCount",0L);
                    }
                    Map<String,Object> m2 =(Map<String,Object>)planMap.get(code);
                    Map<String,Object> m2 =(Map<String,Object>)totalMap.get(code);
                    if(m2!=null){
                        Long followupCount = (Long)m2.get("followupCount");
                        map.put("followupCount",followupCount);
@ -3240,7 +3239,7 @@ public class StatisticsService extends BaseService {
                    String code = (String)map.get("doctorCode");
                    Map<String,Object> m =(Map<String,Object>)planMap.get(code);
                    Map<String,Object> m =(Map<String,Object>)totalMap.get(code);
                    if(m!=null){
                        Long followupCount = (Long)m.get("followupCount");
                        map.put("followupCount",followupCount);
@ -3998,4 +3997,14 @@ public class StatisticsService extends BaseService {
        rs.put("addList",addList);
        return rs;
    }
    public JSONObject getDoctorInfo(String code){
       Doctor doctor =  doctorDao.findByCode(code);
        JSONObject rs = new JSONObject();
        rs.put("doctorName",doctor.getName());
        rs.put("doctor",doctor.getCode());
        rs.put("photo",doctor.getPhoto());
        return rs;
    }
}

+ 0 - 3
patient-co-wlyy/src/main/java/com/yihu/wlyy/web/doctor/sign/DoctorSignController.java

@ -648,7 +648,4 @@ public class DoctorSignController extends WeixinBaseController {
            return error(-1, "查询失败");
        }
    }
}

+ 4 - 3
patient-co-wlyy/src/main/java/com/yihu/wlyy/web/patient/sign/FamilyContractController.java

@ -494,7 +494,8 @@ public class FamilyContractController extends BaseController {
    @ResponseBody
    public String signRenew(@RequestParam(required = true) String doctor,
                            @RequestParam(required = false) String healthDoctor,
                            @RequestParam(required = false) String patient) {
                            @RequestParam(required = false) String patient,
                            @RequestParam(required = false) String reason) {
        try {
            if (StringUtils.isEmpty(doctor)) {
                return error(-1, "签约医生不能为空");
@ -503,9 +504,9 @@ public class FamilyContractController extends BaseController {
            int month = cal.get(Calendar.MONTH)+1;
            int result = -1;
            if(month<7){
                result = familyContractService.signRenew(doctor,healthDoctor,patient);
                result = familyContractService.signRenew(doctor,healthDoctor,patient,reason);
            }else{
                result = familyContractService.signRenewOverdue(doctor,healthDoctor,patient);
                result = familyContractService.signRenewOverdue(doctor,healthDoctor,patient,reason);
            }

+ 16 - 3
patient-co-wlyy/src/main/java/com/yihu/wlyy/web/patient/sign/PatientSignController.java

@ -10,9 +10,7 @@ import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.text.SimpleDateFormat;
import java.util.Date;
@ -282,4 +280,19 @@ public class PatientSignController extends BaseController {
			return error(-1, "系统错误,请联系管理员!");
		}
	}
	/**
	 * 获取转签原因字段
	 * @return
	 */
	@RequestMapping(value = "/getRenewChangeReason", method = {RequestMethod.GET})
	@ResponseBody
	public String getRenewChangeReason(){
		try {
			JSONArray rs = signWebService.getRenewChangeReason();
			return write(200, "查询成功", "data", rs);
		} catch (Exception e) {
			return error(-1, "查询失败");
		}
	}
}

+ 10 - 1
patient-co-wlyy/src/main/java/com/yihu/wlyy/web/statistic/StatisticsController.java

@ -1281,5 +1281,14 @@ public class StatisticsController extends BaseController {
        }
    }
    @RequestMapping("/getDotorInfo")
    @ResponseBody
    public String getDotorInfo(String code){
        try {
            return write(200, "查询成功", "data", statisticsService.getDoctorInfo(code));
        } catch (Exception e) {
            error(e);
            return error(-1, "查询失败");
        }
    }
}