Bladeren bron

代码提交

esb 8 jaren geleden
bovenliggende
commit
cc9420a22c
35 gewijzigde bestanden met toevoegingen van 476 en 7563 verwijderingen
  1. 6 1
      patient-co-statistics/pom.xml
  2. 0 1
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/config/SchedulerConfig.java
  3. 1 1
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/dao/QuartzJobConfigDao.java
  4. 0 72
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/role/PatientGroupRole.java
  5. 6 4
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/storage/DBStorage.java
  6. 21 12
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/storage/RedisStorage.java
  7. 1 1
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/AllSignExpenseStatusJob.java
  8. 34 0
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/Constant.java
  9. 187 343
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/CurrentDayAllQuotaJob.java
  10. 51 32
      patient-co-wlyy/src/main/java/com/yihu/wlyy/job/UnSignJob.java
  11. 159 293
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/SignJob.java
  12. 5 5
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/service/JobService.java
  13. 5 3
      patient-co-statistics/src/main/resources/application.yml
  14. 0 231
      patient-co-wlyy/src/main/java/com/yihu/wlyy/job/AllSignExpenseStatusJob.java
  15. 0 226
      patient-co-wlyy/src/main/java/com/yihu/wlyy/job/AllSignJob.java
  16. 0 226
      patient-co-wlyy/src/main/java/com/yihu/wlyy/job/ChangeSignJob.java
  17. 0 158
      patient-co-wlyy/src/main/java/com/yihu/wlyy/job/Constant.java
  18. 0 211
      patient-co-wlyy/src/main/java/com/yihu/wlyy/job/ConsultJob.java
  19. 0 1861
      patient-co-wlyy/src/main/java/com/yihu/wlyy/job/CurrentDayAllQuotaJob.java
  20. 0 301
      patient-co-wlyy/src/main/java/com/yihu/wlyy/job/FollowUpJob.java
  21. 0 220
      patient-co-wlyy/src/main/java/com/yihu/wlyy/job/HealthGuideJob.java
  22. 0 59
      patient-co-wlyy/src/main/java/com/yihu/wlyy/job/InstantiationTracingBeanPostProcessor.java
  23. 0 439
      patient-co-wlyy/src/main/java/com/yihu/wlyy/job/SignAgeGroupDiseaseJob.java
  24. 0 864
      patient-co-wlyy/src/main/java/com/yihu/wlyy/job/SignJob.java
  25. 0 225
      patient-co-wlyy/src/main/java/com/yihu/wlyy/job/WaitSignJob.java
  26. 0 229
      patient-co-wlyy/src/main/java/com/yihu/wlyy/job/check/CheckSignJob.java
  27. 0 88
      patient-co-wlyy/src/main/java/com/yihu/wlyy/job/elt/base/ETLModel.java
  28. 0 78
      patient-co-wlyy/src/main/java/com/yihu/wlyy/job/elt/role/Level1Role.java
  29. 0 68
      patient-co-wlyy/src/main/java/com/yihu/wlyy/job/elt/role/Level2Role.java
  30. 0 76
      patient-co-wlyy/src/main/java/com/yihu/wlyy/job/elt/role/Level3Role.java
  31. 0 88
      patient-co-wlyy/src/main/java/com/yihu/wlyy/job/elt/role/PatientAgeRole.java
  32. 0 74
      patient-co-wlyy/src/main/java/com/yihu/wlyy/job/elt/role/PatientGroupRole.java
  33. 0 70
      patient-co-wlyy/src/main/java/com/yihu/wlyy/job/elt/role/PatientSexRole.java
  34. 0 686
      patient-co-wlyy/src/main/java/com/yihu/wlyy/job/elt/storage/DBStorage.java
  35. 0 317
      patient-co-wlyy/src/main/java/com/yihu/wlyy/job/elt/storage/RedisStorage.java

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

@ -37,7 +37,7 @@
        <version.log4j2>2.4.1</version.log4j2>
        <version.logback>1.1.7</version.logback>
        <version.mysql>5.1.38</version.mysql>
        <version.quartz>2.0.1</version.quartz>
        <version.quartz>2.2.1</version.quartz>
        <version.servlet-api>3.1.0</version.servlet-api>
        <version.slf4j>1.7.21</version.slf4j>
        <version.spring-boot>1.3.5.RELEASE</version.spring-boot>
@ -142,6 +142,11 @@
                <version>${version.quartz}</version>
            </dependency>
            <dependency>
                <groupId>org.quartz-scheduler</groupId>
                <artifactId>quartz-jobs</artifactId>
                <version>${version.quartz}</version>
            </dependency>
             <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>${version.servlet-api}</version>

+ 0 - 1
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/config/SchedulerConfig.java

@ -34,7 +34,6 @@ public class SchedulerConfig {
        bean.setAutoStartup(true);
        bean.setDataSource(dataSource);
        bean.setQuartzProperties(quartzProperties());
        bean.setSchedulerName("PackageResolveScheduler");
        return bean;
    }

+ 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)  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)  and a.del='1' ")
    List<QuartzJobConfig> findByIds();
    @Query(" FROM QuartzJobConfig a WHERE a.id=?1 and a.del='1'")

+ 0 - 72
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/role/PatientGroupRole.java

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

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

@ -44,8 +44,6 @@ public class DBStorage   {
    private DoctorAdminTeamDao doctorAdminTeamDao;
    @Autowired
    private WlyyQuotaResultDao wlyyQuotaResultDao;//指标结果Dao
    @Autowired
    private PlatformTransactionManager platformTransactionManager;
    /**
@ -93,7 +91,7 @@ public class DBStorage   {
     * @param day
     * @param wlyyQuota
     * @param foreachNum 标识二级维度循环的次数  例如 年龄就传6  性别就传3
     * @param type 1 性别 2 年龄 3 用户分组 4.签约费用
     * @param type 1 性别 2 年龄 3 用户分组 4.签约费用 5 健康分布
     */
    public void saveByLevel2(List<Map<String, Map<String, List<ETLModel>>>> data, String day, WlyyQuotaVO wlyyQuota,Integer foreachNum,Integer type) throws Exception{
        Integer start=1;
@ -106,7 +104,7 @@ public class DBStorage   {
     * @param day
     * @param wlyyQuota
     * @param foreachNum 如果start是默认的 标识二级维度循环的次数  例如 年龄就传6  性别就传3
     * @param type 1 性别 2 年龄 3 用户分组 4.签约费用
     * @param type 1 性别 2 年龄 3 用户分组 4.签约费用 5 健康分布
     * @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 {
@ -696,6 +694,10 @@ public class DBStorage   {
                //费用类别
                return Constant.getLevelExpenseName(i);
            }
            case  5:{
                //健康分布
                return Constant.getlevelHealthFbName(i);
            }
            default:{
                return "";
            }

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

@ -86,9 +86,18 @@ public class RedisStorage {
     * @param data
     * @param wlyyQuotaId
     * @param foreachNum 标识二级维度循环的次数  例如 年龄就传6  性别就传3
     * @param type 1 性别 2 年龄 3 用户分组
     * @param type 1 性别 2 年龄 3 用户分组 4.签约费用 5 健康分布
     */
    public void saveByLevel2(List<Map<String, Map<String, List<ETLModel>>>> data, String wlyyQuotaId,Integer foreachNum,Integer type) throws Exception {
        Integer start=1;
        saveByLevel2Public(data, wlyyQuotaId, foreachNum, type, start);
    }
    public void saveByLevel2(List<Map<String, Map<String, List<ETLModel>>>> data, String wlyyQuotaId,Integer foreachNum,Integer type,Integer start) throws Exception {
        saveByLevel2Public(data, wlyyQuotaId, foreachNum, type, start);
    }
    private void saveByLevel2Public(List<Map<String, Map<String, List<ETLModel>>>> data, String wlyyQuotaId, Integer foreachNum, Integer type, Integer start) {
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
        Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
        for (AdminTeam adminTeam : adminTeams) {
@ -118,19 +127,19 @@ public class RedisStorage {
        Map<String, Map<String, List<ETLModel>>> townTeam=data.get(2);//区的数据
        Map<String, Map<String, List<ETLModel>>> cityTeam=data.get(3);//市的数据
        //保存市
        saveLevel2City(wlyyQuotaId, cityMap, cityTeam,foreachNum,type);
        saveLevel2City(wlyyQuotaId, cityMap, cityTeam,foreachNum,type,start);
        //保存区
        saveLevel2Town(wlyyQuotaId, townsMap, townTeam,foreachNum,type);
        saveLevel2Town(wlyyQuotaId, townsMap, townTeam,foreachNum,type,start);
        //保存机构
        saveLevel2Org(wlyyQuotaId, hospitalsMap, orgTeam,foreachNum,type);
        saveLevel2Org(wlyyQuotaId, hospitalsMap, orgTeam,foreachNum,type,start);
        //保存全科团队
        saveLevel2Team(wlyyQuotaId, adminTeamMap, adminTeam,foreachNum,type);
        saveLevel2Team(wlyyQuotaId, adminTeamMap, adminTeam,foreachNum,type,start);
    }
    private void saveLevel2Team(String wlyyQuotaId, Map<String, AdminTeam> adminTeamMap, Map<String, Map<String, List<ETLModel>>> eltModel, Integer foreachNum, Integer type) {
    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());
            for(int i=1;i<=foreachNum;i++){
            for(int i=start;i<=foreachNum;i++){
                AdminTeam adminTeamObj=adminTeam.getValue();
                if(adminTeamObj==null)continue;
                JSONObject jo=new JSONObject();
@ -152,10 +161,10 @@ public class RedisStorage {
        }
    }
    private void saveLevel2Org(String wlyyQuotaId, Map<String, Hospital> hospitalsMap, Map<String, Map<String, List<ETLModel>>> eltModel, Integer foreachNum, Integer type) {
    private void saveLevel2Org(String wlyyQuotaId, Map<String, Hospital> hospitalsMap, Map<String, Map<String, List<ETLModel>>> eltModel, Integer foreachNum, Integer type,Integer start) {
        for(Map.Entry<String,Hospital> hospital:hospitalsMap.entrySet()){
            Map<String, List<ETLModel>> oneELTMap= eltModel.get(hospital.getKey());
            for(int i=1;i<=foreachNum;i++){
            for(int i=start;i<=foreachNum;i++){
                Hospital hospitalObj=hospital.getValue();
                if(hospitalObj==null)continue;
                JSONObject jo=new JSONObject();
@ -177,7 +186,7 @@ public class RedisStorage {
        }
    }
    private void saveLevel2Town(String wlyyQuotaId, Map<String, Town> townsMap, Map<String, Map<String, List<ETLModel>>> eltModel, Integer foreachNum, Integer type) {
    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());
            for(int i=1;i<=foreachNum;i++){
@ -200,10 +209,10 @@ public class RedisStorage {
        }
    }
    private void saveLevel2City(String wlyyQuotaId, Map<String, City> cityMap, Map<String, Map<String, List<ETLModel>>> eltModel, Integer foreachNum, Integer type) {
    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());
            for(int i=1;i<=foreachNum;i++){
            for(int i=start;i<=foreachNum;i++){
                JSONObject jo=new JSONObject();
                int num=0;
                if(oneELTMap!=null){

+ 1 - 1
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/AllSignExpenseStatusJob.java

@ -122,7 +122,6 @@ public class AllSignExpenseStatusJob implements Job{
        //数据过滤清洗出脏数据  -----------start
        for (SignFamily signFamily : signFamilys) {
            ETLModel etlModel = new ETLModel();
            etlModel.setLevel2Key(signFamily.getExpensesStatus());//设置二级维度的Key
            String orgCode = signFamily.getHospital();
            if (StringUtils.isEmpty(orgCode)) {
                errorContent.append("签约code:" + signFamily.getCode() + ",签约表中(wlyy_sign_family)中的hospital数据为空");
@ -181,6 +180,7 @@ public class AllSignExpenseStatusJob implements Job{
                errorCount++;
                continue;
            }
            etlModel.setLevel2Key(signFamily.getExpensesStatus());//设置二级维度的Key
            etlModel.setAdminTeam(adminTeam.getId() + "");
            etlModel.setHospital(orgCodeTemp);
            etlModel.setTown(hospital.getTown());

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

@ -51,6 +51,19 @@ public class Constant {
    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_disease_1="1";
    public static String level_disease_2="2";
@ -61,6 +74,27 @@ public class Constant {
    public static String level_disease_3_name="糖尿病和高血压";
    public static String level_disease_4_name="健康人群";
    public static String getlevelHealthFbName(String key){
        switch (key){
            case "1":{
                return level_health_fb_1_name;
            }
            case "2":{
                return level_health_fb_2_name;
            }
            case "3":{
                return level_health_fb_3_name;
            }
            case "4":{
                return level_health_fb_4_name;
            }
            case "0":{
                return level_health_fb_0_name;
            }
        }
        return "";
    }
    public static String getLevelExpenseName(String key){
        switch (key){
            case "1":{

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

@ -8,6 +8,7 @@ import com.yihu.wlyy.statistics.model.consult.ConsultTeam;
import com.yihu.wlyy.statistics.model.doctor.DoctorPatientGroupInfo;
import com.yihu.wlyy.statistics.model.hosptial.Hospital;
import com.yihu.wlyy.statistics.model.job.QuartzJobLog;
import com.yihu.wlyy.statistics.model.label.SignPatientLabelInfo;
import com.yihu.wlyy.statistics.model.patient.Patient;
import com.yihu.wlyy.statistics.model.patient.PatientHealthGuidance;
import com.yihu.wlyy.statistics.model.signfamily.SignFamily;
@ -65,13 +66,15 @@ public class CurrentDayAllQuotaJob implements Job {
    @Autowired
    private Level1Role levelRole;
    @Autowired
    private PatientAgeRole patientAgeRole;
    private Level2Role level2Role;
    @Autowired
    private PatientGroupRole patientGroupRole;
    private PatientAgeRole patientAgeRole;
    @Autowired
    private PatientSexRole patientSexRole;
    @Autowired
    private RedisStorage redisStorage;
    @Autowired
    private SignPatientLabelInfoDao signPatientLabelInfoDao;
    private org.apache.tomcat.jdbc.pool.DataSource fvdataSource = new org.apache.tomcat.jdbc.pool.DataSource();//随访数据源
@ -147,6 +150,7 @@ public class CurrentDayAllQuotaJob implements Job {
        computequota_9();//统计今天的待签约
        computequota_10();//统计今天的改签
        computequota_12();//统计今天的签约下按年龄分组后再
        computequota_15();//统计健康分布统计
        quartzJobLog.setJobContent(allContent.toString());
        quartzJobLog.setJobName("实时统计");
        quartzJobLog.setJobId("11");
@ -155,11 +159,117 @@ public class CurrentDayAllQuotaJob implements Job {
        quartzJobLogDao.save(quartzJobLog);
    }
    private void computequota_15() {
        errorContent=new StringBuffer();
        String quotaId="15";
        //找出今天的签约信息
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterdayExpensesStatus(now, tomorrow);
        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;//是否统计失败
        //统计有已改簽的
        List<ETLModel> etlModels=new ArrayList<ETLModel>();
        //数据过滤清洗出脏数据  -----------start
        for(SignFamily signFamily:signFamilys){
            ETLModel etlModel=new ETLModel();
            String orgCode = signFamily.getHospital();
            if(StringUtils.isEmpty(orgCode)) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据为空");
                isAll=false;
                errorCount++;
                continue;
            }
            String orgCodeTemp="";
            if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                //站
                orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
            }else{
                //社区
                orgCodeTemp=orgCode;
            }
            //判断社区有没有值
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            Long adminId=signFamily.getAdminTeamId();
            if(adminId == null||adminId<=0) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据为空");
                isAll=false;
                errorCount++;
                continue;
            }
            AdminTeam adminTeam=adminTeamMap.get(signFamily.getAdminTeamId()+"");
            if(adminTeam == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            String idCard=signFamily.getIdcard();
            if(idCard == null||((idCard.length()!=18&&idCard.length()!=15))) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的idCard数据异常");
                isAll=false;
                errorCount++;
                continue;
            }
            String town =hospital.getTown();
            if(StringUtils.isEmpty(town)) {
                errorContent.append("签约code:"+signFamily.getCode()+",机构表的中的town为空");
                isAll=false;
                errorCount++;
                continue;
            }
            Town townObj =townsMap.get(town);
            if(townObj==null) {
                errorContent.append("签约code:"+signFamily.getCode()+",机构表的中的town不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            //查找每个患者的健康分布标签
            List<SignPatientLabelInfo> signPatientLabelInfoList= signPatientLabelInfoDao.findByPatientAndLabelTypeAndStatus(signFamily.getPatient(),"2",1);
            String level2Key="0";
            if(signPatientLabelInfoList!=null&&signPatientLabelInfoList.size()>0){
                level2Key=signPatientLabelInfoList.get(0).getLabel();
            }
            etlModel.setLevel2Key(level2Key);//设置二级维度的Key
            etlModel.setHospital(orgCodeTemp);
            etlModel.setTown(hospital.getTown());
            etlModel.setCity(Constant.city);
            etlModel.setIdcard(signFamily.getIdcard());
            etlModels.add(etlModel);
            //统计数目+1
            cityCount++;
            townCount++;
            orgCount++;
            adminCount++;
        }
        //数据过滤清洗出脏数据  -----------end
        try{
            //统计数据
            List<Map<String, List<ETLModel>>>  returnData1s= levelRole.elt(etlModels);
            List<Map<String, Map<String, List<ETLModel>>>> roleData= level2Role.elt(returnData1s);
            //保存数据
            redisStorage.saveByLevel2(roleData,quotaId,4,1,0);
        }catch (Exception e){
            e.printStackTrace();
            errorContent.append("统计失败:"+e.getMessage());
        }
        allContent.append(saveContent(quotaId,signFamilys.size(),adminCount,orgCount,townCount,cityCount,isAll,errorContent,errorCount));
        allContent.append("-----------15----------");
    }
    private void computequota_12() throws Exception{
         errorContent=new StringBuffer();
        String now = getDayString(0);
        String tomorrow = getDayString(1);
        //找出今天的签约信息 yesterday,now
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospital2();
@ -915,7 +1025,7 @@ public class CurrentDayAllQuotaJob implements Job {
    }
    private void computequota_6() throws Exception {
         errorContent=new StringBuffer();
        errorContent=new StringBuffer();
        String quotaId="6";
        //找出今天的签约信息
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterdayExpensesStatus(now, tomorrow);
@ -1016,40 +1126,43 @@ public class CurrentDayAllQuotaJob implements Job {
    }
    private void computequota_7() {
         errorContent=new StringBuffer();
        errorContent=new StringBuffer();
        String quotaId="7";
        String now = getDayString(0);
        String tomorrow = getDayString(1);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterdayExpensesStatus(now, tomorrow);
        errorContent.append("截止时间:"+now+"-"+DateUtil.dateToStrLong(new Date())+",数据库查询的签约数是:"+signFamilys.size()+",错误:");
        //查找出系统全部的患者
        List<Patient> patients = patientDao.findAllSignPatient();
        Map<String, Patient> patientsMap = new HashMap<String, Patient>();
        for (Patient patient : patients) {
            patientsMap.put(patient.getCode(), patient);
        //查找出系统全部的全科医生
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
        Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
        for (AdminTeam adminTeam : adminTeams) {
            adminTeamMap.put(adminTeam.getId()+"", adminTeam);
        }
        Map<String, Map<String, Long>> cityGroupMap = new HashMap<String, Map<String, Long>>();//key是市行政代码 目前只有厦门市
        cityGroupMap.put(Constant.city,new HashMap<String, Long>());
        Map<String, Map<String, Long>> townGroupMap = new HashMap<String, Map<String, Long>>();//key是区行政代码
        Map<String, Map<String, Long>> orgGroupMap = new HashMap<String, Map<String, Long>>();//key是机构代码
        //得到所有的签约病人的分组信息
        List<DoctorPatientGroupInfo> doctorPatientGroupInfos = doctorPatientGroupInfoDao.findAllPatient();
        Map<String, String> groupMap = new HashMap<String, String>();
        for (DoctorPatientGroupInfo doctorPatientGroupInfo : doctorPatientGroupInfos) {
            groupMap.put(doctorPatientGroupInfo.getPatient(), doctorPatientGroupInfo.getGroup());
        //查找出系统全部的机构
        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<SignFamily> signFamilys = signFamilyDao.findByJiatingUnSignYesterdayExpensesStatus(now,tomorrow);
        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;//是否统计失败
        //统计有签约的
        for (SignFamily signFamily : signFamilys) {
            String patient=signFamily.getPatient();
            String group = groupMap.get(patient);//得到该签约病人的所在分组 1 普通 2 慢病 3是 65岁以上人群
            Hospital hospital = hospitalsMap.get(getOrg(signFamily.getHospital()));//得到患者签约的机构
        StringBuffer errorContent=new StringBuffer();
        //统计有已改簽的
        List<ETLModel> etlModels=new ArrayList<ETLModel>();
        //数据过滤清洗出脏数据  -----------start
        for(SignFamily signFamily:signFamilys){
            ETLModel etlModel=new ETLModel();
            String orgCode = signFamily.getHospital();
            if(StringUtils.isEmpty(orgCode)) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据为空");
@ -1066,7 +1179,7 @@ public class CurrentDayAllQuotaJob implements Job {
                orgCodeTemp=orgCode;
            }
            //判断社区有没有值
            hospital=hospitalsMap.get(orgCodeTemp);
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据不存在");
                isAll=false;
@ -1108,122 +1221,46 @@ public class CurrentDayAllQuotaJob implements Job {
                errorCount++;
                continue;
            }
            town = hospital.getTown();
            //统计市  现在只有厦门市 默认先写死 后面再改
            if (cityGroupMap.containsKey(Constant.city)) {
                Map<String, Long> groupMapTemp = cityGroupMap.get(Constant.city);
                groupMapTemp.put(group,(groupMapTemp.get(group)==null?0l:groupMapTemp.get(group))  + 1);
                cityGroupMap.put(Constant.city, groupMapTemp);
            } else {
                Map<String, Long> groupMapTemp = new HashMap<String, Long>();
                groupMapTemp.put(group, 1L);
                cityGroupMap.put(Constant.city, groupMapTemp);
            //得到患者的分组标签
            List<SignPatientLabelInfo> signPatientLabelInfoList= signPatientLabelInfoDao.findByPatientAndLabelTypeAndStatus(signFamily.getPatient(),"1",1);
            String level2Key="1";
            if(signPatientLabelInfoList!=null&&signPatientLabelInfoList.size()>0){
                level2Key=signPatientLabelInfoList.get(0).getLabel();
            }
            //统计区
            if (townGroupMap.containsKey(town)) {
                Map<String, Long> groupMapTemp = townGroupMap.get(town);
                groupMapTemp.put(group, (groupMapTemp.get(group)==null?0l:groupMapTemp.get(group))+ 1);
                townGroupMap.put(town, groupMapTemp);
            } else {
                Map<String, Long> groupMapTemp = new HashMap<String, Long>();
                groupMapTemp.put(group, 1L);
                townGroupMap.put(town, groupMapTemp);
            }
            //统计机构
            if (orgGroupMap.containsKey(hospital.getCode())) {
                Map<String, Long> groupMapTemp = orgGroupMap.get(hospital.getCode());
                groupMapTemp.put(group, (groupMapTemp.get(group)==null?0l:groupMapTemp.get(group)) + 1);
                orgGroupMap.put(hospital.getCode(), groupMapTemp);
            } else {
                Map<String, Long> groupMapTemp = new HashMap<String, Long>();
                groupMapTemp.put(group, 1L);
                orgGroupMap.put(hospital.getCode(), groupMapTemp);
            }
            boolean hasGXY = false;//有高血压
            boolean hasTNB = false;//有糖尿病
            if ("2".equals(group)) {
                //如果是慢病的 统计高血压的 糖尿病  1高血压,2糖尿病
                String jsonString = redisTemplate.opsForValue().get("disease:" + patient);
                if (StringUtils.isEmpty(jsonString)) {
                    continue;
                }
                //排除数据 只留下高血压和糖尿病
                List<JSONObject> jsonObjects = new ArrayList<JSONObject>();
                JSONArray redisValues = new JSONArray(jsonString);
                for (Object obj : redisValues) {
                    JSONObject redisValue = (JSONObject)(obj);
                    if(!redisValue.has("signType")){
                        continue;
                    }
                    //排除掉三师签约
                    if ("1".equals(redisValue.getString("signType"))) {
                        continue;
                    }
                    String disease = redisValue.getString("disease");
                    if ("1".equals(disease)) {
                        jsonObjects.add(redisValue);
                        hasGXY = true;//设置有高血压
            etlModel.setLevel2Key(level2Key);//设置二级维度的Key
            etlModel.setAdminTeam(adminTeam.getId()+"");
            etlModel.setHospital(orgCodeTemp);
            etlModel.setTown(hospital.getTown());
            etlModel.setCity(Constant.city);
            etlModel.setIdcard(signFamily.getIdcard());
            etlModels.add(etlModel);
            if("2".equals(level2Key)){
                level2Key="0";
                boolean hasGXY=false;//有高血压
                boolean hasTNB=false;//糖尿病
                //得到患者的疾病标签
                signPatientLabelInfoList= signPatientLabelInfoDao.findByPatientAndLabelTypeAndStatus(signFamily.getPatient(),"3",1);
                for (SignPatientLabelInfo signPatientLabelInfo:signPatientLabelInfoList){
                    if("1".equals(signPatientLabelInfo.getLabel())){
                        level2Key="4";
                        hasGXY=true;
                    }
                    if ("2".equals(disease)) {
                        jsonObjects.add(redisValue);
                        hasTNB = true;//设置有糖尿病
                    if("2".equals(signPatientLabelInfo.getLabel())){
                        level2Key="5";
                        hasTNB=true;
                    }
                }
                if(jsonObjects.size()==0){
                    continue;//如果没有高血压和糖尿病 不统计
                if (hasTNB&&hasGXY){
                    level2Key="6";
                }
                if (hasGXY && hasTNB) {
                    group = "6";//有高血压又有糖尿病
                } else {
                    group = Integer.valueOf(jsonObjects.get(0).get("disease").toString()) + 3 + "";//4高血压,5糖尿病
                }
                if (cityGroupMap.containsKey(Constant.city)) {
                    Map<String, Long> groupMapTemp = cityGroupMap.get(Constant.city);
                    groupMapTemp.put(group, (groupMapTemp.get(group) == null ? 0l : groupMapTemp.get(group)) + 1);
                    cityGroupMap.put(Constant.city, groupMapTemp);
                } else {
                    Map<String, Long> groupMapTemp = new HashMap<String, Long>();
                    groupMapTemp.put(group, 1L);
                    cityGroupMap.put(Constant.city, groupMapTemp);
                }
                //统计区
                if (townGroupMap.containsKey(town)) {
                    Map<String, Long> groupMapTemp = townGroupMap.get(town);
                    groupMapTemp.put(group, (groupMapTemp.get(group) == null ? 0l : groupMapTemp.get(group)) + 1);
                    townGroupMap.put(town, groupMapTemp);
                } else {
                    Map<String, Long> groupMapTemp = new HashMap<String, Long>();
                    groupMapTemp.put(group, 1L);
                    townGroupMap.put(town, groupMapTemp);
                }
                //统计机构
                //统计站
                String org=hospital.getCode();
                if (!"00".equals(org.substring(org.length()-2,org.length()))) {
                    orgCodeTemp =org.substring(0,org.length()-2)+"00";
                    //统计机构
                    if (orgGroupMap.containsKey(orgCodeTemp)) {
                        Map<String, Long> groupMapTemp = orgGroupMap.get(orgCodeTemp);
                        groupMapTemp.put(group, (groupMapTemp.get(group) == null ? 0l : groupMapTemp.get(group)) + 1);
                        orgGroupMap.put(orgCodeTemp, groupMapTemp);
                    } else {
                        Map<String, Long> groupMapTemp = new HashMap<String, Long>();
                        groupMapTemp.put(group, 1L);
                        orgGroupMap.put(orgCodeTemp, groupMapTemp);
                    }
                } else {
                    //统计机构
                    if (orgGroupMap.containsKey(hospital.getCode())) {
                        Map<String, Long> groupMapTemp = orgGroupMap.get(hospital.getCode());
                        groupMapTemp.put(group, (groupMapTemp.get(group) == null ? 0l : groupMapTemp.get(group)) + 1);
                        orgGroupMap.put(hospital.getCode(), groupMapTemp);
                    } else {
                        Map<String, Long> groupMapTemp = new HashMap<String, Long>();
                        groupMapTemp.put(group, 1L);
                        orgGroupMap.put(hospital.getCode(), groupMapTemp);
                    }
                }
                etlModel=new ETLModel();
                etlModel.setLevel2Key(level2Key);//设置二级维度的Key
                etlModel.setAdminTeam(adminTeam.getId()+"");
                etlModel.setHospital(orgCodeTemp);
                etlModel.setTown(hospital.getTown());
                etlModel.setCity(Constant.city);
                etlModel.setIdcard(signFamily.getIdcard());
                etlModels.add(etlModel);
            }
            //统计数目+1
            cityCount++;
@ -1231,209 +1268,16 @@ public class CurrentDayAllQuotaJob implements Job {
            orgCount++;
            adminCount++;
        }
        //保存统计数据
        //保存市的统计数据
        for (Map.Entry<String, Map<String, Long>> entry : cityGroupMap.entrySet()) {
            //保存健康人群
            JSONObject jsonObject=new JSONObject();
            if (entry.getValue() != null && entry.getValue().containsKey(Constant.level_group_1)) {
                jsonObject.put("num",entry.getValue().get(Constant.level_group_1));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",Constant.cityName);
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:4:1:"+entry.getKey()).toString(),jsonObject.toString());
            //保存慢病人群
            jsonObject=new JSONObject();
            if (entry.getValue() != null && entry.getValue().containsKey(Constant.level_group_2)) {
                jsonObject.put("num",entry.getValue().get(Constant.level_group_2));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",Constant.cityName);
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:4:2:"+entry.getKey()).toString(),jsonObject.toString());
            //保存65岁以上人群
            jsonObject=new JSONObject();
            if (entry.getValue() != null && entry.getValue().containsKey(Constant.level_group_3)) {
                jsonObject.put("num",entry.getValue().get(Constant.level_group_3));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",Constant.cityName);
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:4:3:"+entry.getKey()).toString(),jsonObject.toString());
            //保存高血压
            jsonObject=new JSONObject();
            if (entry.getValue() != null && entry.getValue().containsKey(Constant.level_group_4)) {
                jsonObject.put("num",entry.getValue().get(Constant.level_group_4));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",Constant.cityName);
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:4:4:"+entry.getKey()).toString(),jsonObject.toString());
            //保存糖尿病
            jsonObject=new JSONObject();
            if (entry.getValue() != null && entry.getValue().containsKey(Constant.level_group_5)) {
                jsonObject.put("num",entry.getValue().get(Constant.level_group_5));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",Constant.cityName);
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:4:5:"+entry.getKey()).toString(),jsonObject.toString());
            //保存糖尿病和高血压
            jsonObject=new JSONObject();
            if (entry.getValue() != null && entry.getValue().containsKey(Constant.level_group_6)) {
                jsonObject.put("num",entry.getValue().get(Constant.level_group_6));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",Constant.cityName);
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:4:6:"+entry.getKey()).toString(),jsonObject.toString());
        }
        //保存区级
        //保存区的统计数据
        for (Map.Entry<String, Town> townEntry : townsMap.entrySet()) {//保存健康人群
            JSONObject jsonObject=new JSONObject();
            Town town=townsMap.get(townEntry.getKey());
            Map<String, Long> oneTown= townGroupMap.get(townEntry.getKey());
            if (oneTown != null && oneTown.containsKey(Constant.level_group_1)) {
                jsonObject.put("num",oneTown.get(Constant.level_group_1));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",town.getName());
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:3:1:"+townEntry.getKey()).toString(),jsonObject.toString());
            //保存慢病人群
            jsonObject=new JSONObject();
            if (oneTown != null && oneTown.containsKey(Constant.level_group_2)) {
                jsonObject.put("num",oneTown.get(Constant.level_group_2));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",town.getName());
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:3:2:"+townEntry.getKey()).toString(),jsonObject.toString());
            //保存65岁以上人群
            jsonObject=new JSONObject();
            if (oneTown != null && oneTown.containsKey(Constant.level_group_3)) {
                jsonObject.put("num",oneTown.get(Constant.level_group_3));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",town.getName());
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:3:3:"+townEntry.getKey()).toString(),jsonObject.toString());
            //保存高血压
            jsonObject=new JSONObject();
            if (oneTown != null && oneTown.containsKey(Constant.level_group_4)) {
                jsonObject.put("num",oneTown.get(Constant.level_group_4));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",town.getName());
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:3:4:"+townEntry.getKey()).toString(),jsonObject.toString());
            //保存糖尿病
            jsonObject=new JSONObject();
            if (oneTown != null && oneTown.containsKey(Constant.level_group_5)) {
                jsonObject.put("num",oneTown.get(Constant.level_group_5));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",town.getName());
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:3:5:"+townEntry.getKey()).toString(),jsonObject.toString());
            //保存糖尿病和高血压
            jsonObject=new JSONObject();
            if (oneTown != null && oneTown.containsKey(Constant.level_group_6)) {
                jsonObject.put("num",oneTown.get(Constant.level_group_6));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",town.getName());
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:3:6:"+townEntry.getKey()).toString(),jsonObject.toString());
        }
        //保存机构
        for (Map.Entry<String, Hospital> hospitalEntry : hospitalsMap.entrySet()) {
            //保存健康人群
            Hospital hospital=hospitalsMap.get(hospitalEntry.getKey());
            if(hospital == null) continue;
            JSONObject jsonObject=new JSONObject();
            Map<String, Long> oneOrg= orgGroupMap.get(hospitalEntry.getKey());
            if (oneOrg != null && oneOrg.containsKey(Constant.level_group_1)) {
                jsonObject.put("num",oneOrg.get(Constant.level_group_1));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",hospital.getName());
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:2:1:"+hospitalEntry.getKey()).toString(),jsonObject.toString());
            //保存慢病人群
            jsonObject=new JSONObject();
            if (oneOrg != null && oneOrg.containsKey(Constant.level_group_2)) {
                jsonObject.put("num",oneOrg.get(Constant.level_group_2));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",hospital.getName());
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:2:2:"+hospitalEntry.getKey()).toString(),jsonObject.toString());
            //保存65岁以上人群
            jsonObject=new JSONObject();
            if (oneOrg != null && oneOrg.containsKey(Constant.level_group_3)) {
                jsonObject.put("num",oneOrg.get(Constant.level_group_3));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",hospital.getName());
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:2:3:"+hospitalEntry.getKey()).toString(),jsonObject.toString());
            //保存高血压
            jsonObject=new JSONObject();
            if (oneOrg != null && oneOrg.containsKey(Constant.level_group_4)) {
                jsonObject.put("num",oneOrg.get(Constant.level_group_4));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",hospital.getName());
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:2:4:"+hospitalEntry.getKey()).toString(),jsonObject.toString());
            //保存糖尿病
            jsonObject=new JSONObject();
            if (oneOrg != null && oneOrg.containsKey(Constant.level_group_5)) {
                jsonObject.put("num",oneOrg.get(Constant.level_group_5));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",hospital.getName());
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:2:5:"+hospitalEntry.getKey()).toString(),jsonObject.toString());
            //保存糖尿病和高血压
            jsonObject=new JSONObject();
            if (oneOrg != null && oneOrg.containsKey(Constant.level_group_6)) {
                jsonObject.put("num",oneOrg.get(Constant.level_group_6));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",hospital.getName());
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:2:6:"+hospitalEntry.getKey()).toString(),jsonObject.toString());
        //数据过滤清洗出脏数据  -----------end
        try{
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels);
            List<Map<String, Map<String, List<ETLModel>>>>  level2Data= level2Role.elt(returnDatas);
            //保存数据 1 表示:从1开始循环 6表示:循环6次 3表示 2级维度是 3
            redisStorage.saveByLevel2(level2Data,quotaId,6,3);
        }catch (Exception e){
            e.printStackTrace();
            errorContent.append("统计失败:"+e.getMessage());
        }
        allContent.append(saveContent(quotaId,signFamilys.size(),adminCount,orgCount,townCount,cityCount,isAll,errorContent,errorCount));
        allContent.append("----------7-----------");

+ 51 - 32
patient-co-wlyy/src/main/java/com/yihu/wlyy/job/UnSignJob.java

@ -1,25 +1,24 @@
package com.yihu.wlyy.job;
package com.yihu.wlyy.statistics.job.business;
import com.yihu.wlyy.entity.doctor.team.admin.AdminTeam;
import com.yihu.wlyy.entity.organization.Hospital;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.job.QuartzJobLog;
import com.yihu.wlyy.entity.patient.SignFamily;
import com.yihu.wlyy.job.elt.base.ETLModel;
import com.yihu.wlyy.job.elt.role.Level1Role;
import com.yihu.wlyy.job.elt.storage.DBStorage;
import com.yihu.wlyy.repository.address.TownDao;
import com.yihu.wlyy.repository.doctor.DoctorAdminTeamDao;
import com.yihu.wlyy.repository.job.QuartzJobLogDao;
import com.yihu.wlyy.repository.organization.HospitalDao;
import com.yihu.wlyy.repository.patient.SignFamilyDao;
import com.yihu.wlyy.web.quota.WlyyJobConfigVO;
import com.yihu.wlyy.web.quota.WlyyQuotaVO;
import com.yihu.wlyy.statistics.dao.*;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
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.hosptial.Hospital;
import com.yihu.wlyy.statistics.model.job.QuartzJobLog;
import com.yihu.wlyy.statistics.model.label.SignPatientLabelInfo;
import com.yihu.wlyy.statistics.model.signfamily.SignFamily;
import com.yihu.wlyy.statistics.model.system.Town;
import com.yihu.wlyy.statistics.model.team.AdminTeam;
import com.yihu.wlyy.statistics.vo.WlyyJobConfigVO;
import com.yihu.wlyy.statistics.vo.WlyyQuotaVO;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
@ -30,10 +29,12 @@ import java.text.SimpleDateFormat;
import java.util.*;
/**
 * 解约的指标执行类
 * Created by Administrator on 2016.10.13.
 * 健康分布统计
 */
@Component
public class UnSignJob implements Job {
@Scope("prototype")
public class HealthSignJob implements Job {
    private WlyyQuotaVO wlyyQuota;//指标对象
    private WlyyJobConfigVO wlyyJobConfig;//配置对象
    @Autowired
@ -49,24 +50,34 @@ public class UnSignJob implements Job {
    @Autowired
    private Level1Role levelRole;
    @Autowired
    private Level2Role level2Role;
    @Autowired
    private DBStorage dbStorage;
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    @Autowired
    private SignPatientLabelInfoDao signPatientLabelInfoDao;
    String yesterday;
    String now;
    @Override
    public void execute(JobExecutionContext context)
            throws JobExecutionException {
        SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
        //初始化参数
        JobDataMap map = context.getJobDetail().getJobDataMap();
        wlyyQuota = (WlyyQuotaVO) map.get("quota");
        wlyyJobConfig = (WlyyJobConfigVO) map.get("jobConfig");
        now= StringUtils.isEmpty(map.get("now"))?SignJob.getDayString(0):map.get("now").toString();
        yesterday= StringUtils.isEmpty(map.get("yesterday"))?SignJob.getDayString(-1):map.get("yesterday").toString();
        //计算指标
        computequota();
        try{
            SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
            //初始化参数
            JobDataMap map = context.getJobDetail().getJobDataMap();
            wlyyQuota = (WlyyQuotaVO) map.get("quota");
            wlyyJobConfig = (WlyyJobConfigVO) map.get("jobConfig");
            now= StringUtils.isEmpty(map.get("now"))?SignJob.getDayString(0):map.get("now").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);
        }
    }
    /**
@ -75,7 +86,7 @@ public class UnSignJob implements Job {
    @Transactional
    private void computequota() {
        jdbcTemplate.execute("delete from wlyy_quota_result where quota_date='"+yesterday+"' and quato_code='"+2+"'");
        jdbcTemplate.execute("delete from wlyy_quota_result where quota_date='"+yesterday+"' and quato_code='"+15+"'");
        //新建任务日志对象
        QuartzJobLog quartzJobLog = new QuartzJobLog();
@ -101,8 +112,8 @@ public class UnSignJob implements Job {
        for (Town town : towns) {
            townsMap.put(town.getCode(), town);
        }
        //找出今天的解约信息
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingUnSignYesterdayExpensesStatus(yesterday,now);
        //找出今天的签约信息
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterdayExpensesStatus(yesterday,now);
        Long cityCount = new Long(0L); //统计到市的数目
        Long townCount = new Long(0L); //统计到所有区的数目
@ -174,6 +185,13 @@ public class UnSignJob implements Job {
                errorCount++;
                continue;
            }
            //查找每个患者的健康分布标签
            List<SignPatientLabelInfo> signPatientLabelInfoList= signPatientLabelInfoDao.findByPatientAndLabelTypeAndStatus(signFamily.getPatient(),"2",1);
            String level2Key="0";
            if(signPatientLabelInfoList!=null&&signPatientLabelInfoList.size()>0){
                level2Key=signPatientLabelInfoList.get(0).getLabel();
            }
            etlModel.setLevel2Key(level2Key);//设置二级维度的Key
            etlModel.setAdminTeam(adminTeam.getId()+"");
            etlModel.setHospital(orgCodeTemp);
            etlModel.setTown(hospital.getTown());
@ -190,8 +208,9 @@ public class UnSignJob implements Job {
        try{
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels);
            List<Map<String, Map<String, List<ETLModel>>>>  level2Data= level2Role.elt(returnDatas);
            //保存数据
            dbStorage.saveByLevel1(returnDatas,yesterday,wlyyQuota);
            dbStorage.saveByLevel2(level2Data,yesterday,wlyyQuota,4,5,0);
        }catch (Exception e){
            e.printStackTrace();
            errorContent.append("统计失败:"+e.getMessage());
@ -204,7 +223,7 @@ public class UnSignJob implements Job {
    }
    private String saveContent(List<SignFamily> signFamilys, Long qkCount, Long orgCount, Long townCount, Long cityCount, boolean isAll, StringBuffer errorContent,Long errorCount) {
        StringBuffer string=new StringBuffer("统计"+yesterday+" 的解约数据完成 ,数据库查询到解约数目:"+signFamilys.size());
        StringBuffer string=new StringBuffer("统计"+yesterday+" 的签约数据完成 ,数据库查询到签约数目:"+signFamilys.size());
        string.append(",过滤的脏数据数目:"+errorCount);
        string.append(",统计到市的数据总数:"+cityCount);
        string.append(",统计到区的数据总数:"+townCount);

+ 159 - 293
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/SignJob.java

@ -3,14 +3,15 @@ package com.yihu.wlyy.statistics.job.business;
import com.yihu.wlyy.statistics.dao.*;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.etl.role.Level1Role;
import com.yihu.wlyy.statistics.etl.role.Level2Role;
import com.yihu.wlyy.statistics.etl.role.PatientAgeRole;
import com.yihu.wlyy.statistics.etl.role.PatientGroupRole;
import com.yihu.wlyy.statistics.etl.role.PatientSexRole;
import com.yihu.wlyy.statistics.etl.storage.DBStorage;
import com.yihu.wlyy.statistics.model.doctor.DoctorPatientGroupInfo;
import com.yihu.wlyy.statistics.model.hosptial.Hospital;
import com.yihu.wlyy.statistics.model.job.QuartzJobLog;
import com.yihu.wlyy.statistics.model.job.WlyyQuotaResult;
import com.yihu.wlyy.statistics.model.label.SignPatientLabelInfo;
import com.yihu.wlyy.statistics.model.signfamily.SignFamily;
import com.yihu.wlyy.statistics.model.system.Town;
import com.yihu.wlyy.statistics.model.team.AdminTeam;
@ -63,13 +64,15 @@ public class SignJob implements Job {
    @Autowired
    private Level1Role levelRole;
    @Autowired
    private PatientAgeRole patientAgeRole;
    private Level2Role level2Role;
    @Autowired
    private PatientGroupRole patientGroupRole;
    private PatientAgeRole patientAgeRole;
    @Autowired
    private PatientSexRole patientSexRole;
    @Autowired
    private DBStorage dbStorage;
    @Autowired
    private SignPatientLabelInfoDao signPatientLabelInfoDao;
    String yesterday;
    String now;
@ -261,309 +264,172 @@ public class SignJob implements Job {
     */
    @Transactional
    private void computequotaByPatientGroup() {
        jdbcTemplate.execute("delete from wlyy_quota_result where quota_date='" + yesterday + "' and quato_code='" + 7 + "'");
        try {
            //数组里面第一个是健康人群 第二个是慢病人群 第三个是65岁以上人群
            Map<String, Map<String, Long>> cityGroupMap = new HashMap<String, Map<String, Long>>();//key是市行政代码 目前只有厦门市
            cityGroupMap.put(Constant.city, new HashMap<String, Long>());
            Map<String, Map<String, Long>> townGroupMap = new HashMap<String, Map<String, Long>>();//key是区行政代码
            Map<String, Map<String, Long>> orgGroupMap = new HashMap<String, Map<String, Long>>();//key是机构代码
            //新建任务日志对象
            QuartzJobLog QuartzJobLog = new QuartzJobLog();
            QuartzJobLog.setJobStartTime(new Date());
            QuartzJobLog.setJobId(wlyyJobConfig.getId());
            QuartzJobLog.setJobName(wlyyJobConfig.getJobName());
            //查找出系统全部的团队
            List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
            Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
            for (AdminTeam adminTeam : adminTeams) {
                adminTeamMap.put(adminTeam.getId()+"", adminTeam);
        jdbcTemplate.execute("delete from wlyy_quota_result where quota_date='"+yesterday+"' and quato_code='"+15+"'");
        //新建任务日志对象
        QuartzJobLog quartzJobLog = new QuartzJobLog();
        quartzJobLog.setJobStartTime(new Date());
        quartzJobLog.setJobId(wlyyJobConfig.getId());
        quartzJobLog.setJobName(wlyyJobConfig.getJobName());
        //查找出系统全部的全科医生
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
        Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
        for (AdminTeam adminTeam : adminTeams) {
            adminTeamMap.put(adminTeam.getId()+"", adminTeam);
        }
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospital2();
        Map<String, Hospital> hospitalsMap = new HashMap<String, Hospital>();
        for (Hospital hospital : hospitals) {
            hospitalsMap.put(hospital.getCode(), hospital);
        }
        //查找出厦门市全部的区
        List<Town> towns = townDao.findByCityCode(Constant.city);
        Map<String, Town> townsMap = new HashMap<String, Town>();
        for (Town town : towns) {
            townsMap.put(town.getCode(), town);
        }
        //找出今天的解约信息
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingUnSignYesterdayExpensesStatus(yesterday,now);
        Long cityCount = new Long(0L); //统计到市的数目
        Long townCount = new Long(0L); //统计到所有区的数目
        Long orgCount =new Long(0L);//统计到所有机构的数目
        Long adminCount = new Long(0L);//统计到所有团队的数目
        Long errorCount=new Long(0L);//脏数据
        Boolean isAll=true;//是否统计失败
        StringBuffer errorContent=new StringBuffer();
        //统计有已改簽的
        List<ETLModel> etlModels=new ArrayList<ETLModel>();
        //数据过滤清洗出脏数据  -----------start
        for(SignFamily signFamily:signFamilys){
            ETLModel etlModel=new ETLModel();
            String orgCode = signFamily.getHospital();
            if(StringUtils.isEmpty(orgCode)) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据为空");
                isAll=false;
                errorCount++;
                continue;
            }
            //查找出系统全部的机构
            List<Hospital> hospitals = hospitalDao.findHospital2();
            Map<String, Hospital> hospitalsMap = new HashMap<String, Hospital>();
            for (Hospital hospital : hospitals) {
                hospitalsMap.put(hospital.getCode(), hospital);
                Map<String, Long> one = new HashMap<String, Long>();
                one.put("1", 0L);
                one.put("2", 0L);
                one.put("3", 0L);
                one.put("4", 0L);
                one.put("5", 0L);
                one.put("6", 0L);
                orgGroupMap.put(hospital.getCode(), one);
            String orgCodeTemp="";
            if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                //站
                orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
            }else{
                //社区
                orgCodeTemp=orgCode;
            }
            //查找出厦门市全部的区
            List<Town> towns = townDao.findByCityCode(Constant.city);
            Map<String, Town> townsMap = new HashMap<String, Town>();
            for (Town town : towns) {
                townsMap.put(town.getCode(), town);
                Map<String, Long> one = new HashMap<String, Long>();
                one.put("1", 0L);
                one.put("2", 0L);
                one.put("3", 0L);
                one.put("4", 0L);
                one.put("5", 0L);
                one.put("6", 0L);
                townGroupMap.put(town.getCode(), one);
            //判断社区有没有值
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            //找出今天的签约信息
            List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterdayExpensesStatus(yesterday, now);
            Long cityCount = 0L; //统计到市的数目
            Long townCount = 0L; //统计到所有区的数目
            Long orgCount = 0L;//统计到所有机构的数目
            Long qkCount = 0L;//统计到所有全科医生的数目
            Long errorCount=0L;//错误数目
            boolean isAll=true;//是否统计失败
            StringBuffer errorContent=new StringBuffer();
            //统计有签约的
            for (SignFamily signFamily : signFamilys) {
                String patient = signFamily.getPatient();
                //设置查看病人所在分组
                List<DoctorPatientGroupInfo> dctorPatientGroupInfo = doctorPatientGroupInfoDao.findByMorenPatient(patient);
                String group ="";//得到该签约病人的所在分组 1 普通 2 慢病 3是 65岁以上人群  4是 高血压 5是糖尿病 100是高血压和糖尿病
                if (dctorPatientGroupInfo != null && dctorPatientGroupInfo.size() > 0) {
                    group=dctorPatientGroupInfo.get(0).getGroup();
                } else {
                    errorContent.append("签约code:"+signFamily.getCode()+",患者未分组");
                    group="1";
                }
                String orgCode = signFamily.getHospital();
                if(StringUtils.isEmpty(orgCode)) {
                    errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据为空");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                String orgCodeTemp="";
                if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                    //站
                    orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
                }else{
                    //社区
                    orgCodeTemp=orgCode;
                }
                //判断社区有没有值
                Hospital hospital=hospitalsMap.get(orgCodeTemp);
                if(hospital == null) {
                    errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据不存在");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                Long adminId=signFamily.getAdminTeamId();
                if(adminId == null||adminId<=0) {
                    errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据为空");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                AdminTeam adminTeam=adminTeamMap.get(signFamily.getAdminTeamId()+"");
                if(adminTeam == null) {
                    errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据不存在");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                String idCard=signFamily.getIdcard();
                if(idCard == null||((idCard.length()!=18&&idCard.length()!=15))) {
                    errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的idCard数据异常");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                String town =hospital.getTown();
                if(StringUtils.isEmpty(town)) {
                    errorContent.append("签约code:"+signFamily.getCode()+",机构表的中的town为空");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                Town townObj =townsMap.get(town);
                if(townObj==null) {
                    errorContent.append("签约code:"+signFamily.getCode()+",机构表的中的town不存在");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                //统计市  现在只有厦门市 默认先写死 后面再改
                compute_level2_2(cityGroupMap, group,Constant.city);
                cityCount++;
                //统计区
                compute_level2_2(townGroupMap, group,town);
                townCount++;
                //统计站
                orgCode=hospital.getCode();
                if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                    //统计站
                   orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
                    //统计机构
                   compute_level2_2(orgGroupMap, group,orgCodeTemp);
                } else {
                    //统计机构
                    compute_level2_2(orgGroupMap, group,hospital.getCode());
                }
                orgCount++;
                boolean hasGXY = false;//有高血压
                boolean hasTNB = false;//有糖尿病
                if ("2".equals(group)) {
                    //如果是慢病的 统计高血压的 糖尿病  1高血压,2糖尿病
                    String jsonString = redisTemplate.opsForValue().get("disease:" + patient);
                    if (StringUtils.isEmpty(jsonString)) {
                        continue;
                    }
                    //排除数据 只留下高血压和糖尿病
                    List<JSONObject> jsonObjects = new ArrayList<JSONObject>();
                    JSONArray redisValues = new JSONArray(jsonString);
                    for (Object obj : redisValues) {
                        JSONObject redisValue = (JSONObject)(obj);
                        if(!redisValue.has("signType")){
                            continue;
                        }
                        //排除掉三师签约
                        if ("1".equals(redisValue.get("signType").toString())) {
                            continue;
                        }
                        String disease =  redisValue.getString("disease");
                        if ("1".equals(disease)) {
                            jsonObjects.add(redisValue);
                            hasGXY = true;//设置有高血压
                        }
                        if ("2".equals(disease)) {
                            jsonObjects.add(redisValue);
                            hasTNB = true;//设置有糖尿病
                        }
                    }
                    if(jsonObjects.size()==0){
                        continue;//如果没有高血压和糖尿病 不统计
                    }
                    if (hasGXY && hasTNB) {
                        group = "100";//有高血压又有糖尿病
                    } else if(hasGXY){
                        group = 4 + "";//4高血压,5糖尿病
                    }else if(hasTNB){
                        group = 5 + "";//4高血压,5糖尿病
                    }
                    //统计市  现在只有厦门市 默认先写死 后面再改
                    compute_level2_2(cityGroupMap, group,Constant.city);
                    //统计区
                    compute_level2_2(townGroupMap, group,town);
                    //统计站
                    orgCode=hospital.getCode();
                    if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                        //统计站
                        orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
                        //统计机构
                        compute_level2_2(orgGroupMap, group,orgCodeTemp);
                    } else {
                        //统计机构
                        compute_level2_2(orgGroupMap, group,hospital.getCode());
                    }
                }
            Long adminId=signFamily.getAdminTeamId();
            if(adminId == null||adminId<=0) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据为空");
                isAll=false;
                errorCount++;
                continue;
            }
            //保存统计数据
            //保存市的统计数据
            for (Map.Entry<String, Map<String, Long>> entry : cityGroupMap.entrySet()) {
                //保存健康人群
                Map<String, Long> oneMap=entry.getValue();
                for(Map.Entry<String, Long> entryCh: oneMap.entrySet()){
                    String city=entry.getKey();
                    String cityName=Constant.cityName;
                    String town="";
                    String townName="";
                    String org="";
                    String orgName="";
                    String level="4";
                    String key=entryCh.getKey();
                    save_level2_2(oneMap, city, cityName, town, townName, org, orgName, level, key);
                }
            AdminTeam adminTeam=adminTeamMap.get(signFamily.getAdminTeamId()+"");
            if(adminTeam == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            //保存区级
            //保存区的统计数据
            for (Map.Entry<String, Town> townEntry : townsMap.entrySet()) {
                //判断该区是否有统计数据
                Map<String, Long> oneTownGroupMap = townGroupMap.get(townEntry.getKey());//得到当个区的统计数据
                Town townObj = townEntry.getValue();//得到区级信息
                for(Map.Entry<String, Long> entryCh: oneTownGroupMap.entrySet()){
                    String city=entryCh.getKey();
                    String cityName=Constant.cityName;
                    String town=townObj.getCode();
                    String townName=townObj.getName();
                    String org="";
                    String orgName="";
                    String level="3";
                    String key=entryCh.getKey();
                    save_level2_2(oneTownGroupMap, city, cityName, town, townName, org, orgName, level, key);
                }
            String idCard=signFamily.getIdcard();
            if(idCard == null||((idCard.length()!=18&&idCard.length()!=15))) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的idCard数据异常");
                isAll=false;
                errorCount++;
                continue;
            }
            //保存机构
            for (Map.Entry<String, Hospital> hospitalEntry : hospitalsMap.entrySet()) {
                //判断该机构是否有统计数据
                Map<String, Long> oneOrgGroupMap = orgGroupMap.get(hospitalEntry.getKey());//得到当个机构的统计数据
                Hospital hospital = hospitalEntry.getValue();//得到区级信息
                for(Map.Entry<String, Long> entryCh: oneOrgGroupMap.entrySet()){
                    Hospital hospital1=hospitalEntry.getValue();
                    if(hospital1==null)continue;
                    String city=entryCh.getKey();
                    String cityName=Constant.cityName;
                    String town=hospital.getTown();
                    String townName=hospital.getTownName();
                    String org=hospital.getCode();
                    String orgName=hospital.getName();
                    String level="2";
                    String key=entryCh.getKey();
                    save_level2_2(oneOrgGroupMap, city, cityName, town, townName, org, orgName, level, key);
            String town =hospital.getTown();
            if(StringUtils.isEmpty(town)) {
                errorContent.append("签约code:"+signFamily.getCode()+",机构表的中的town为空");
                isAll=false;
                errorCount++;
                continue;
            }
            Town townObj =townsMap.get(town);
            if(townObj==null) {
                errorContent.append("签约code:"+signFamily.getCode()+",机构表的中的town不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            //得到患者的分组标签
            List<SignPatientLabelInfo> signPatientLabelInfoList= signPatientLabelInfoDao.findByPatientAndLabelTypeAndStatus(signFamily.getPatient(),"1",1);
            String level2Key="1";
            if(signPatientLabelInfoList!=null&&signPatientLabelInfoList.size()>0){
                level2Key=signPatientLabelInfoList.get(0).getLabel();
            }
            etlModel.setLevel2Key(level2Key);//设置二级维度的Key
            etlModel.setAdminTeam(adminTeam.getId()+"");
            etlModel.setHospital(orgCodeTemp);
            etlModel.setTown(hospital.getTown());
            etlModel.setCity(Constant.city);
            etlModel.setIdcard(signFamily.getIdcard());
            etlModels.add(etlModel);
            if("2".equals(level2Key)){
                level2Key="0";
                boolean hasGXY=false;//有高血压
                boolean hasTNB=false;//糖尿病
                //得到患者的疾病标签
                signPatientLabelInfoList= signPatientLabelInfoDao.findByPatientAndLabelTypeAndStatus(signFamily.getPatient(),"3",1);
                for (SignPatientLabelInfo signPatientLabelInfo:signPatientLabelInfoList){
                    if("1".equals(signPatientLabelInfo.getLabel())){
                        level2Key="4";
                        hasGXY=true;
                    }
                    if("2".equals(signPatientLabelInfo.getLabel())){
                        level2Key="5";
                        hasTNB=true;
                    }
                }
                if (hasTNB&&hasGXY){
                    level2Key="6";
                }
                etlModel=new ETLModel();
                etlModel.setLevel2Key(level2Key);//设置二级维度的Key
                etlModel.setAdminTeam(adminTeam.getId()+"");
                etlModel.setHospital(orgCodeTemp);
                etlModel.setTown(hospital.getTown());
                etlModel.setCity(Constant.city);
                etlModel.setIdcard(signFamily.getIdcard());
                etlModels.add(etlModel);
            }
            QuartzJobLog.setJobEndTime(new Date());
            QuartzJobLog.setJobContent(saveContent(signFamilys,qkCount,orgCount,townCount,cityCount,isAll,errorContent,errorCount));
            QuartzJobLog.setJobType(isAll?"1":"0");
            quartzJobLogDao.save(QuartzJobLog);
        } catch (Exception e) {
            e.printStackTrace();
            //统计数目+1
            cityCount++;
            townCount++;
            orgCount++;
            adminCount++;
        }
    }
    private void save_level2_2(Map<String, Long> oneMap, String city, String cityName, String town, String townName, String org, String orgName, String level, String key) {
        WlyyQuotaResult wlyyQuotaResult = new WlyyQuotaResult();
        wlyyQuotaResult.setDel("1");
        wlyyQuotaResult.setCity(city);
        wlyyQuotaResult.setCityName(cityName);
        wlyyQuotaResult.setTown(town);
        wlyyQuotaResult.setTownName(townName);
        wlyyQuotaResult.setOrgCode(org);
        wlyyQuotaResult.setOrgName(orgName);
        wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
        wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
        wlyyQuotaResult.setQuotaDate(getYesterday());
        wlyyQuotaResult.setCreateTime(new Date());
        wlyyQuotaResult.setLevel1Type(level);//市级
        wlyyQuotaResult.setLevel2Type(key);
        wlyyQuotaResult.setLevel2TypeName(Constant.getLevelGroupName(key));
        if (oneMap != null && oneMap.containsKey(key)) {
            wlyyQuotaResult.setResult(oneMap.get(key) + "");
        } else {
            wlyyQuotaResult.setResult("0");
        //数据过滤清洗出脏数据  -----------end
        try{
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels);
            List<Map<String, Map<String, List<ETLModel>>>>  level2Data= level2Role.elt(returnDatas);
            //保存数据 1 表示:从1开始循环 6表示:循环6次 3表示 2级维度是 3
            dbStorage.saveByLevel2(level2Data,yesterday,wlyyQuota,6,3,1);
        }catch (Exception e){
            e.printStackTrace();
            errorContent.append("统计失败:"+e.getMessage());
        }
        wlyyQuotaResultDao.save(wlyyQuotaResult);
        //保存日志
        quartzJobLog.setJobEndTime(new Date());
        quartzJobLog.setJobContent(saveContent(signFamilys,adminCount,orgCount,townCount,cityCount,isAll,errorContent,errorCount));
        quartzJobLog.setJobType(isAll?"1":"0");
        quartzJobLogDao.save(quartzJobLog);
    }
    private void compute_level2_2(Map<String, Map<String, Long>> cityGroupMap, String group,String key) {
        if (cityGroupMap.containsKey(key)) {
            Map<String, Long> groupMapTemp = cityGroupMap.get(key);
            groupMapTemp.put(group, (groupMapTemp.get(group) == null ? 0l : groupMapTemp.get(group)) + 1);
            cityGroupMap.put(key, groupMapTemp);
        } else {
            Map<String, Long> groupMapTemp = new HashMap<String, Long>();
            groupMapTemp.put(group, 1L);
            cityGroupMap.put(key, groupMapTemp);
        }
    }
    /**
     * 机构维度患者年龄维度计算指标

+ 5 - 5
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/service/JobService.java

@ -127,7 +127,7 @@ public class JobService {
        //往quartz框架添加任务
        if (!StringUtils.isEmpty(quartzJobConfig.getJobClass())) {
            quartzHelper.startNow(getRightClass(quartzJobConfig), quartzJobConfig.getId()+ UUID.randomUUID(), params);
            quartzHelper.startNow(getRightClass(quartzJobConfig), quartzJobConfig.getId()+ UUID.randomUUID().toString().replace("-",""), params);
        }
    }
@ -150,7 +150,7 @@ public class JobService {
                params.put("now", getYesterday(0 - i + 1));
                params.put("yesterday", getYesterday(0 - i));
                if (!StringUtils.isEmpty(quartzJobConfig.getJobClass())) {
                    quartzHelper.startNow(getRightClass(quartzJobConfig), quartzJobConfig.getId() + UUID.randomUUID(), params);
                    quartzHelper.startNow(getRightClass(quartzJobConfig), quartzJobConfig.getId() + UUID.randomUUID().toString().replace("-",""), params);
                }
            }
        }
@ -191,7 +191,7 @@ public class JobService {
            params.put("now", now);
            params.put("yesterday", yesterday);
            if (!StringUtils.isEmpty(quartzJobConfig.getJobClass())) {
                quartzHelper.startNow(getRightClass(quartzJobConfig), quartzJobConfig.getId() + UUID.randomUUID(), params);
                quartzHelper.startNow(getRightClass(quartzJobConfig), quartzJobConfig.getId() + UUID.randomUUID().toString().replace("-",""), params);
            }
        }
@ -250,7 +250,7 @@ public class JobService {
        params.put("now", now);
        params.put("yesterday", yesterday);
        if (!StringUtils.isEmpty(quartzJobConfig.getJobClass())) {
            quartzHelper.startNow(getRightClass(quartzJobConfig), quartzJobConfig.getId() + UUID.randomUUID(), params);
            quartzHelper.startNow(getRightClass(quartzJobConfig), quartzJobConfig.getId() + UUID.randomUUID().toString().replace("-",""), params);
        }
    }
@ -313,7 +313,7 @@ public class JobService {
                params.put("now", getYesterday(0 - i + 1));
                params.put("yesterday", getYesterday(0 - i));
                if (!StringUtils.isEmpty(quartzJobConfig.getJobClass())) {
                    quartzHelper.startNow(getRightClass(quartzJobConfig), quartzJobConfig.getId() + UUID.randomUUID(), params);
                    quartzHelper.startNow(getRightClass(quartzJobConfig), quartzJobConfig.getId() + UUID.randomUUID().toString().replace("-",""), params);
                }
            }
    }

+ 5 - 3
patient-co-statistics/src/main/resources/application.yml

@ -8,11 +8,13 @@ logging:
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    max-active: 30
    max-idle: 18
    min-idle: 18
    max-active: 50
    max-idle: 50
    min-idle: 10
    validation-query: SELECT 1
    test-on-borrow: true
    idle-timeout: 30000
  # REDIS
  redis:
    database: 0 # Database index used by the connection factory.

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

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

+ 0 - 226
patient-co-wlyy/src/main/java/com/yihu/wlyy/job/AllSignJob.java

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

+ 0 - 226
patient-co-wlyy/src/main/java/com/yihu/wlyy/job/ChangeSignJob.java

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

+ 0 - 158
patient-co-wlyy/src/main/java/com/yihu/wlyy/job/Constant.java

@ -1,158 +0,0 @@
package com.yihu.wlyy.job;
/**
 * Created by Administrator on 2016.08.18.
 * 常量类
 */
public class Constant {
    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_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_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_1_name="普通人群";
    public static String level_group_2_name="慢病人群";
    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_expense_0="0";
    public static String level_expense_1="1";
    public static String level_expense_2="2";
    public static String level_expense_0_name="未扣费";
    public static String level_expense_1_name="已扣费";
    public static String level_expense_2_name="已退费";
    //三级维度的疾病
    public static String level_disease_1="1";
    public static String level_disease_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 getLevelExpenseName(String key){
        switch (key){
            case "1":{
                return level_expense_1_name;
            }
            case "2":{
                return level_expense_2_name;
            }
            case "0":{
                return level_expense_0_name;
            }
        }
        return "";
    }
    public static String getLevelSexName(String key){
        switch (key){
            case "1":{
                return level_sex_1_name;
            }
            case "2":{
                return level_sex_2_name;
            }
            case "3":{
                return level_sex_3_name;
            }
        }
        return "";
    }
    public static String getLevelGroupName(String key){
        switch (key){
            case "1":{
                return level_group_1_name;
            }
            case "2":{
                return level_group_2_name;
            }
            case "3":{
                return level_group_3_name;
            }
            case "4":{
                return level_group_4_name;
            }
            case "5":{
                return level_group_5_name;
            }
            case "6":{
                return level_group_6_name;
            }
        }
        return "";
    }
    public static String getLevelAgeName(String key){
        switch (key){
            case "1":{
                return level_age_1_name;
            }
            case "2":{
                return level_age_2_name;
            }
            case "3":{
                return level_age_3_name;
            }
            case "4":{
                return level_age_4_name;
            }
            case "5":{
                return level_age_5_name;
            }
            case "6":{
                return level_age_6_name;
            }
        }
        return "";
    }
    public static String getLevelDiseaseName(String key){
        switch (key){
            case "1":{
                return level_disease_1_name;
            }
            case "2":{
                return level_disease_2_name;
            }
            case "3":{
                return level_disease_3_name;
            }
            case "4":{
                return level_disease_4_name;
            }
        }
        return "";
    }
}

+ 0 - 211
patient-co-wlyy/src/main/java/com/yihu/wlyy/job/ConsultJob.java

@ -1,211 +0,0 @@
package com.yihu.wlyy.job;
import com.yihu.wlyy.entity.doctor.team.admin.AdminTeam;
import com.yihu.wlyy.entity.organization.Hospital;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.consult.ConsultTeam;
import com.yihu.wlyy.entity.job.QuartzJobLog;
import com.yihu.wlyy.job.elt.base.ETLModel;
import com.yihu.wlyy.job.elt.role.Level1Role;
import com.yihu.wlyy.job.elt.storage.DBStorage;
import com.yihu.wlyy.repository.address.TownDao;
import com.yihu.wlyy.repository.consult.ConsultTeamDao;
import com.yihu.wlyy.repository.doctor.DoctorAdminTeamDao;
import com.yihu.wlyy.repository.job.QuartzJobLogDao;
import com.yihu.wlyy.repository.organization.HospitalDao;
import com.yihu.wlyy.web.quota.WlyyJobConfigVO;
import com.yihu.wlyy.web.quota.WlyyQuotaVO;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
import java.text.SimpleDateFormat;
import java.util.*;
/**
 * 咨询模块的指标执行类
 */
@Component
public class ConsultJob implements Job {
    private WlyyQuotaVO wlyyQuota;//指标对象
    private WlyyJobConfigVO wlyyJobConfig;//配置对象
    @Autowired
    private QuartzJobLogDao quartzJobLogDao;//执行日志Dao
    @Autowired
    private HospitalDao hospitalDao;
    @Autowired
    private TownDao townDao;
    @Autowired
    private ConsultTeamDao consultTeamDao;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    @Autowired
    private Level1Role levelRole;
    @Autowired
    private DBStorage dbStorage;
    String yesterday;
    String now;
    @Override
    public void execute(JobExecutionContext context)
            throws JobExecutionException {
        SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
        //初始化参数
        JobDataMap map = context.getJobDetail().getJobDataMap();
        wlyyQuota = (WlyyQuotaVO) map.get("quota");
        wlyyJobConfig = (WlyyJobConfigVO) map.get("jobConfig");
        now= StringUtils.isEmpty(map.get("now"))?SignJob.getDayString(0):map.get("now").toString();
        yesterday= StringUtils.isEmpty(map.get("yesterday"))?SignJob.getDayString(-1):map.get("yesterday").toString();  //線刪除今天的数据
        //计算指标
        computequota();
    }
    @Transactional
    private void computequota() {
        jdbcTemplate.execute("delete from wlyy_quota_result where quota_date='"+yesterday+"' and quato_code='"+3+"'");
        //新建任务日志对象
        QuartzJobLog quartzJobLog = new QuartzJobLog();
        quartzJobLog.setJobStartTime(new Date());
        quartzJobLog.setJobId(wlyyJobConfig.getId());
        quartzJobLog.setJobName(wlyyJobConfig.getJobName());
        //找出全部的团队
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
        Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
        for (AdminTeam adminTeam : adminTeams) {
            adminTeamMap.put(adminTeam.getId()+"", adminTeam);
        }
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospital2();
        Map<String, Hospital> hospitalsMap = new HashMap<String, Hospital>();
        for (Hospital hospital : hospitals) {
            hospitalsMap.put(hospital.getCode(), hospital);
        }
        //查找出厦门市全部的区
        List<Town> towns = townDao.findByCityCode(Constant.city);
        Map<String, Town> townsMap = new HashMap<String, Town>();
        for (Town town : towns) {
            townsMap.put(town.getCode(), town);
        }
        //找出今天的咨询信息
        List<ConsultTeam> consultTeams = consultTeamDao.findByCzrqyYesterday(yesterday,now);
        Long cityCount = new Long(0L); //统计到市的数目
        Long townCount = new Long(0L); //统计到所有区的数目
        Long orgCount =new Long(0L);//统计到所有机构的数目
        Long adminCount = new Long(0L);//统计到所有团队的数目
        Long errorCount=new Long(0L);//脏数据
        Boolean isAll=true;//是否统计失败
        StringBuffer errorContent=new StringBuffer();
        //统计有已改簽的
        List<ETLModel> etlModels=new ArrayList<ETLModel>();
        //数据过滤清洗出脏数据  -----------start
        for(ConsultTeam consultTeam:consultTeams){
            ETLModel etlModel=new ETLModel();
            Long adminId=consultTeam.getAdminTeamId();
            if(adminId == null||adminId<=0) {
                errorContent.append("咨询Id:"+consultTeam.getId()+",咨询的团队(wlyy_consult_team)中的admin_team_code数据为空");
                isAll=false;
                continue;
            }
            String teamCode = consultTeam.getAdminTeamId()+"";//行政的团队的id
            AdminTeam adminTeam=adminTeamMap.get(teamCode);
            if(adminTeam == null) {
                errorContent.append("咨询Id:"+consultTeam.getId()+",团队Id:"+adminTeam.getId()+",咨询的团队(wlyy_consult_team)中的团队不存在");
                isAll=false;
                continue;
            }
            String orgCode = adminTeam.getOrgCode();
            if(StringUtils.isEmpty(orgCode)) {
                errorContent.append("咨询Id:"+consultTeam.getId()+",团队Id:"+adminTeam.getId()+",医生团队的机构为空");
                isAll=false;
                continue;
            }
            String orgCodeTemp="";
            //统计机构
            if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                //统计站
                orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
            }else{
                //统计社区
                orgCodeTemp=orgCode;
            }
            //统计区 ---------------start--------------
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) {
                errorContent.append("咨询Id:"+consultTeam.getId()+",机构Id,医生团队的机构不存在");
                isAll=false;
                continue;
            }
            String town=hospital.getTown();
            if(StringUtils.isEmpty(town)) {
                errorContent.append("咨询Id:"+consultTeam.getId()+",机构Id:"+hospital.getId()+",机构表的区字段(town)为空");
                isAll=false;
                continue;
            }
            Town townObj=townsMap.get(town);
            if(townObj==null) {
                errorContent.append("咨询Id:"+consultTeam.getId()+",机构Id:"+hospital.getId()+",机构表的区不存在");
                isAll=false;
                continue;
            }
            etlModel.setAdminTeam(adminTeam.getId()+"");
            etlModel.setHospital(orgCodeTemp);
            etlModel.setTown(hospital.getTown());
            etlModel.setCity(Constant.city);
            etlModels.add(etlModel);
            //统计数目+1
            cityCount++;
            townCount++;
            orgCount++;
            adminCount++;
        }
        //数据过滤清洗出脏数据  -----------end
        try{
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels);
            //保存数据
            dbStorage.saveByLevel1(returnDatas,yesterday,wlyyQuota);
        }catch (Exception e){
            e.printStackTrace();
            errorContent.append("统计失败:"+e.getMessage());
        }
        //保存日志
        quartzJobLog.setJobEndTime(new Date());
        quartzJobLog.setJobContent(saveContent(consultTeams,adminCount,orgCount,townCount,cityCount,isAll,errorContent,errorCount));
        quartzJobLog.setJobType(isAll?"1":"0");
        quartzJobLogDao.save(quartzJobLog);
    }
    private String saveContent(List<ConsultTeam> consultTeams, Long qkCount, Long orgCount, Long townCount, Long cityCount, boolean isAll, StringBuffer errorContent,Long errorCount) {
        StringBuffer string=new StringBuffer("统计"+yesterday+" 的咨询数据完成 ,数据库查询到咨询数目:"+consultTeams.size());
        string.append(",过滤的脏数据数目:"+errorCount);
        string.append(",统计到市的数据总数:"+cityCount);
        string.append(",统计到区的数据总数:"+townCount);
        string.append(",统计到机构的数据总数:"+orgCount);
        string.append(",统计到团队的数据总数:"+qkCount);
        string.append(",是否统计成功:"+isAll);
        if(!isAll){
            string.append(",失败原因:"+errorContent);
        }
        return string.toString();
    }
    public String getYesterday() {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DATE, -1);
        String yesterday = new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
        return yesterday;
    }
}

+ 0 - 1861
patient-co-wlyy/src/main/java/com/yihu/wlyy/job/CurrentDayAllQuotaJob.java

@ -1,1861 +0,0 @@
package com.yihu.wlyy.job;
import com.yihu.wlyy.entity.doctor.team.admin.AdminTeam;
import com.yihu.wlyy.entity.organization.Hospital;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.consult.ConsultTeam;
import com.yihu.wlyy.entity.doctor.team.sign.DoctorPatientGroupInfo;
import com.yihu.wlyy.entity.job.QuartzJobLog;
import com.yihu.wlyy.entity.patient.Patient;
import com.yihu.wlyy.entity.patient.PatientHealthGuidance;
import com.yihu.wlyy.entity.patient.SignFamily;
import com.yihu.wlyy.job.elt.base.ETLModel;
import com.yihu.wlyy.job.elt.role.Level1Role;
import com.yihu.wlyy.job.elt.role.PatientAgeRole;
import com.yihu.wlyy.job.elt.role.PatientGroupRole;
import com.yihu.wlyy.job.elt.role.PatientSexRole;
import com.yihu.wlyy.job.elt.storage.RedisStorage;
import com.yihu.wlyy.repository.address.TownDao;
import com.yihu.wlyy.repository.consult.ConsultTeamDao;
import com.yihu.wlyy.repository.doctor.DoctorAdminTeamDao;
import com.yihu.wlyy.repository.doctor.DoctorDao;
import com.yihu.wlyy.repository.doctor.DoctorPatientGroupInfoDao;
import com.yihu.wlyy.repository.job.QuartzJobLogDao;
import com.yihu.wlyy.repository.organization.HospitalDao;
import com.yihu.wlyy.repository.patient.PatientDao;
import com.yihu.wlyy.repository.patient.PatientHealthGuidanceDao;
import com.yihu.wlyy.repository.patient.SignFamilyDao;
import com.yihu.wlyy.util.DateUtil;
import com.yihu.wlyy.util.IdCardUtil;
import org.json.JSONArray;
import org.json.JSONObject;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.*;
/**
 * 实时统计今天的数据
 */
@Component
public class CurrentDayAllQuotaJob implements Job {
    @Autowired
    private SignFamilyDao signFamilyDao;
    @Autowired
    private DoctorDao doctorDao;
    @Autowired
    private HospitalDao hospitalDao;
    @Autowired
    private TownDao townDao;
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Autowired
    private ConsultTeamDao consultTeamDao;
    @Autowired
    private PatientHealthGuidanceDao patientHealthGuidanceDao;
    @Autowired
    private DoctorPatientGroupInfoDao doctorPatientGroupInfoDao;
    @Autowired
    private PatientDao patientDao;
    @Autowired
    private QuartzJobLogDao quartzJobLogDao;//执行日志Dao
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    @Autowired
    private Level1Role levelRole;
    @Autowired
    private PatientAgeRole patientAgeRole;
    @Autowired
    private PatientGroupRole patientGroupRole;
    @Autowired
    private PatientSexRole patientSexRole;
    @Autowired
    private RedisStorage redisStorage;
    private org.apache.tomcat.jdbc.pool.DataSource fvdataSource = new org.apache.tomcat.jdbc.pool.DataSource();//随访数据源
    private JdbcTemplate jdbcTemplate = new JdbcTemplate();
    private Properties systemProperties;
    List<Town> towns = null;//厦门市全部的区
    List<Hospital> hospitals = null;//系统全部的机构
    List<AdminTeam> adminTeams=null;//系统全部的团队
    Map<String, Hospital> hospitalsMap = new HashMap<String, Hospital>();
    Map<String, Town> townsMap = new HashMap<String, Town>();
    Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
    private String now = getDayString(0);
    private String tomorrow = getDayString(1);
    private StringBuffer allContent=new StringBuffer();//日志内容
    @Override
    public void execute(JobExecutionContext context)
            throws JobExecutionException {
        try {
            SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
            getSystemProperties();
            fvdataSource.setDriverClassName(systemProperties.get("fv.jdbc.driver").toString());
            fvdataSource.setUrl(systemProperties.get("fv.jdbc.url").toString());
            fvdataSource.setUsername(systemProperties.get("fv.jdbc.username").toString());
            fvdataSource.setPassword(systemProperties.get("fv.jdbc.password").toString());
            jdbcTemplate.setDataSource(fvdataSource);//初始化随访的数据源
            towns = townDao.findByCityCode(Constant.city); //查找出厦门市全部的区
            hospitals = hospitalDao.findHospitalzxFWZ(); //查找出系统全部的机构
            adminTeams=doctorAdminTeamDao.findAllTeam();//查找出系统全部的全科医生
            for (Hospital hospital : hospitals) {
                hospitalsMap.put(hospital.getCode(), hospital);
            }
            for (Town town : towns) {
                townsMap.put(town.getCode(), town);
            }
            for (AdminTeam adminTeam : adminTeams) {
                adminTeamMap.put(adminTeam.getId()+"", adminTeam);
            }
            //计算指标
            computequota();
        }catch (Exception e){
            e.printStackTrace();
            e.printStackTrace();
        }
    }
    //统计
    private void computequota() throws Exception {
        QuartzJobLog quartzJobLog =new QuartzJobLog();
        quartzJobLog.setJobStartTime(new Date());
        allContent=new StringBuffer();
        computequota_1(); //统计今天的签约
        computequota_2(); //统计今天的解约
        computequota_3(); //统计今天的健康咨询量
        computequota_4(); //统计今天的随访量
        computequota_5(); //统计今天的健康指导
        computequota_6(); //统计今天的签约患者性别
        computequota_7();//统计今天的签约患者分组
        computequota_8();//统计今天的签约患者年龄
        computequota_9();//统计今天的待签约
        computequota_10();//统计今天的改签
        computequota_12();//统计今天的签约下按年龄分组后再
        quartzJobLog.setJobContent(allContent.toString());
        quartzJobLog.setJobName("实时统计");
        quartzJobLog.setJobId("11");
        quartzJobLog.setJobType("1");
        quartzJobLog.setJobEndTime(new Date());
        quartzJobLogDao.save(quartzJobLog);
    }
    private void computequota_12() throws Exception{
        StringBuffer errorContent=new StringBuffer();
        String now = getDayString(0);
        String tomorrow = getDayString(1);
        //找出今天的签约信息 yesterday,now
        //查找出系统全部的机构
        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<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterdayExpensesStatus(now, tomorrow);
        //数组里面第一个是健康人群 第二个是慢病人群 第三个是65岁以上人群
        Map<String, Map<String, Map>> cityAgeMap = new HashMap<String, Map<String, Map>>();//key是市行政代码 目前只有厦门市
        Map<String,Map> temp =new HashMap<String,Map>();
        cityAgeMap.put(Constant.city, temp);
        Map<String, Map<String, Map>> townAgeMap = new HashMap<String, Map<String, Map>>();//key是区行政代码
        Map<String, Map<String, Map>> orgAgeMap = new HashMap<String, Map<String, Map>>();//key是机构代码
        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;//是否统计失败
        //统计有签约的
        for (SignFamily signFamily : signFamilys) {
            String orgCode = signFamily.getHospital();
            if(StringUtils.isEmpty(orgCode)) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据为空");
                isAll=false;
                errorCount++;
                continue;
            }
            String orgCodeTemp="";
            if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                //站
                orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
            }else{
                //社区
                orgCodeTemp=orgCode;
            }
            //判断社区有没有值
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            Long adminId=signFamily.getAdminTeamId();
            if(adminId == null||adminId<=0) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据为空");
                isAll=false;
                errorCount++;
                continue;
            }
            AdminTeam adminTeam=adminTeamMap.get(signFamily.getAdminTeamId()+"");
            if(adminTeam == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            String idCard=signFamily.getIdcard();
            if(idCard == null||((idCard.length()!=18&&idCard.length()!=15))) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的idCard数据异常");
                isAll=false;
                errorCount++;
                continue;
            }
            String town =hospital.getTown();
            if(StringUtils.isEmpty(town)) {
                errorContent.append("签约code:"+signFamily.getCode()+",机构表的中的town为空");
                isAll=false;
                errorCount++;
                continue;
            }
            Town townObj =townsMap.get(town);
            if(townObj==null) {
                errorContent.append("签约code:"+signFamily.getCode()+",机构表的中的town不存在");
                isAll=false;
                errorCount++;
                continue;
            }
             town = hospital.getTown();
            int age = IdCardUtil.getAgeForIdcard(signFamily.getIdcard());//根据card解析年龄
            String ageCode = getAgeCode(age);//得到年龄的code
            boolean hasGXY = false;//有高血压
            boolean hasTNB = false;//有糖尿病
            //如果是慢病的 统计高血压的 糖尿病  1高血压,2糖尿病  糖尿病和高血压是3
            String diseaseType="";
            String jsonString = redisTemplate.opsForValue().get("disease:" + signFamily.getPatient());
            if (StringUtils.isEmpty(jsonString)) {
                diseaseType="4";//健康人群
            }else{
                //排除数据 只留下高血压和糖尿病
                List<JSONObject> jsonObjects = new ArrayList<JSONObject>();
                JSONArray redisValues = new JSONArray(jsonString);
                if(redisValues.length()>0){
                    for (Object obj : redisValues) {
                        JSONObject redisValue =  (JSONObject)(obj);
                        if(!redisValue.has("signType")){
                            continue;
                        }
                        //排除掉三师签约
                        if ("1".equals(redisValue.getString("signType"))) {
                            continue;
                        }
                        String disease = redisValue.getString("disease");
                        if (("1").equals(disease)) {
                            jsonObjects.add(redisValue);
                            hasGXY = true;//设置有高血压
                            diseaseType="1";
                        }
                        if (("2").equals(disease)) {
                            jsonObjects.add(redisValue);
                            hasTNB = true;//设置有糖尿病
                            diseaseType="2";
                        }
                    }
                    if(hasGXY&&hasTNB){
                        diseaseType="3";
                    }
                }else{
                    diseaseType="4";
                }
            }
            //统计市
            compute(cityAgeMap, Constant.city, ageCode, diseaseType);
            //统计区
            compute(townAgeMap, town, ageCode, diseaseType);
            //统计机构
            //统计站
             orgCode=hospital.getCode();
            if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                //统计站
                 orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
                //统计机构
                compute(orgAgeMap, orgCodeTemp, ageCode, diseaseType);
            } else {
                compute(orgAgeMap, hospital.getCode(), ageCode, diseaseType);
            }
            //统计数目+1
            cityCount++;
            townCount++;
            orgCount++;
            adminCount++;
        }
        //保存市级数据
        for (Map.Entry<String, Map<String, Map>> entry : cityAgeMap.entrySet()) {
            Map<String, Map> oneAgeMap = entry.getValue();
            for(int i=1;i<7;i++){
                for(int j=1;j<5;j++){
                    String key_2=i+"";
                    String key_3=j+"";
                    String name=Constant.cityName;
                    JSONObject jsonObject=new JSONObject();
                    if (oneAgeMap != null && oneAgeMap.containsKey(key_2)) {
                        Map<String,Long> key3Map=oneAgeMap.get(key_2);
                        if(key3Map!=null&&key3Map.containsKey(key_3)){
                            jsonObject.put("num",key3Map.get(key_3) + "");
                        }else{
                            jsonObject.put("num",0);
                        }
                    } else {
                        jsonObject.put("num",0);
                    }
                    jsonObject.put("name",name);
                    jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
                    redisTemplate.opsForValue().set(new StringBuffer("quota:12:4:"+i+":"+j+":"+entry.getKey()).toString(),jsonObject.toString());
                }
            }
        }
        //保存区级
        for (Map.Entry<String, Town> entry : townsMap.entrySet()) {
            //判断该区是否有统计数据
            Map<String, Map> oneAgeMap = townAgeMap.get(entry.getKey());//得到当个区的统计数据
            Town townObj = entry.getValue();//得到区级信息
            for(int i=1;i<7;i++){
                for(int j=1;j<5;j++){
                    String key_2=i+"";
                    String key_3=j+"";
                    String name=townObj.getName();
                    JSONObject jsonObject=new JSONObject();
                    if (oneAgeMap != null && oneAgeMap.containsKey(key_2)) {
                        Map<String,Long> key3Map=oneAgeMap.get(key_2);
                        if(key3Map!=null&&key3Map.containsKey(key_3)){
                            jsonObject.put("num",(key3Map.get(key_3) + ""));
                        }else{
                            jsonObject.put("num",0);
                        }
                    } else {
                        jsonObject.put("num",0);
                    }
                    jsonObject.put("name",townObj.getName());
                    jsonObject.put("date", DateUtil.dateToStrLong(new Date()));//quota:12:2:6:1:350200
                    redisTemplate.opsForValue().set(new StringBuffer("quota:12:3:"+i+":"+j+":"+entry.getKey()).toString(),jsonObject.toString());
                }
            }
        }
        //保存机构级
        for (Map.Entry<String, Hospital> entry : hospitalsMap.entrySet()) {
            //判断该机构是否有统计数据
            Map<String, Map> oneAgeMap = orgAgeMap.get(entry.getKey());//得到当个机构的统计数据
            Hospital hospital = entry.getValue();//得到机构信息
            for(int i=1;i<7;i++){
                for(int j=1;j<5;j++){
                    String key_2=i+"";
                    String key_3=j+"";
                    String name=hospital.getName();
                    JSONObject jsonObject=new JSONObject();
                    if (oneAgeMap != null && oneAgeMap.containsKey(key_2)) {
                        Map<String,Long> key3Map=oneAgeMap.get(key_2);
                        if(key3Map!=null&&key3Map.containsKey(key_3)){
                            jsonObject.put("num",(key3Map.get(key_3) + ""));
                        }else{
                            jsonObject.put("num",0);
                        }
                    } else {
                        jsonObject.put("num",0);
                    }
                    jsonObject.put("name",name);
                    jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
                    redisTemplate.opsForValue().set(new StringBuffer("quota:12:2:"+i+":"+j+":"+entry.getKey()).toString(),jsonObject.toString());
                }
            }
        }
        saveContent("12",signFamilys.size(),adminCount,orgCount,townCount,cityCount,isAll,errorContent,errorCount);
        allContent.append(errorContent);
        allContent.append("-----------12----------");
    }
    private void compute(Map<String, Map<String, Map>> rootMap, String rootKey, String ageCode, String diseaseType) {
        if (rootMap.containsKey(rootKey)) {
            //得到市下面的所有的年龄map
            Map<String, Map> groupMapTemp = rootMap.get(rootKey);
            if(groupMapTemp.containsKey(ageCode)){
                //得到这个年龄下的患者map
                Map<String,Long> mape= groupMapTemp.get(ageCode);
                if(mape.containsKey(diseaseType)){
                    mape.put(diseaseType,mape.get(diseaseType)+1L);
                }else{
                    mape.put(diseaseType,1L);
                }
            }else{
                //新增疾病的统计map
                Map<String, Long> groupMapTemp1 = new HashMap<String, Long>();
                groupMapTemp1.put(diseaseType, 1L);
                groupMapTemp.put(ageCode,groupMapTemp1);
            }
        } else {
            //没有就新建统计数据  新增疾病的统计map
            Map<String, Long> groupMapTemp = new HashMap<String, Long>();
            groupMapTemp.put(diseaseType, 1L);
            //把统计疾病的map放入对应的年龄组map中
            Map<String, Map> groupMapTemp2 = new HashMap<String, Map>();
            groupMapTemp2.put(ageCode,groupMapTemp);
            //把年龄组map放入市的map里面
            rootMap.put(rootKey, groupMapTemp2);
        }
    }
    private void computequota_1() {
        StringBuffer errorContent=new StringBuffer();
        //找出今天的签约信息 yesterday,now
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterdayExpensesStatus(now, tomorrow);
        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;//是否统计失败
        //统计有已改簽的
        List<ETLModel> etlModels=new ArrayList<ETLModel>();
        //数据过滤清洗出脏数据  -----------start
        for(SignFamily signFamily:signFamilys){
            ETLModel etlModel=new ETLModel();
            String orgCode = signFamily.getHospital();
            if(StringUtils.isEmpty(orgCode)) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据为空");
                isAll=false;
                errorCount++;
                continue;
            }
            String orgCodeTemp="";
            if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                //站
                orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
            }else{
                //社区
                orgCodeTemp=orgCode;
            }
            //判断社区有没有值
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            Long adminId=signFamily.getAdminTeamId();
            if(adminId == null||adminId<=0) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据为空");
                isAll=false;
                errorCount++;
                continue;
            }
            AdminTeam adminTeam=adminTeamMap.get(signFamily.getAdminTeamId()+"");
            if(adminTeam == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            String idCard=signFamily.getIdcard();
            if(idCard == null||((idCard.length()!=18&&idCard.length()!=15))) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的idCard数据异常");
                isAll=false;
                errorCount++;
                continue;
            }
            String town =hospital.getTown();
            if(StringUtils.isEmpty(town)) {
                errorContent.append("签约code:"+signFamily.getCode()+",机构表的中的town为空");
                isAll=false;
                errorCount++;
                continue;
            }
            Town townObj =townsMap.get(town);
            if(townObj==null) {
                errorContent.append("签约code:"+signFamily.getCode()+",机构表的中的town不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            etlModel.setAdminTeam(adminTeam.getId()+"");
            etlModel.setHospital(orgCodeTemp);
            etlModel.setTown(hospital.getTown());
            etlModel.setCity(Constant.city);
            etlModel.setIdcard(signFamily.getIdcard());
            etlModels.add(etlModel);
            //统计数目+1
            cityCount++;
            townCount++;
            orgCount++;
            adminCount++;
        }
        //数据过滤清洗出脏数据  -----------end
        try{
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels);
            //保存数据
            redisStorage.saveByLevel1(returnDatas,"1");
        }catch (Exception e){
            e.printStackTrace();
            errorContent.append("统计失败:"+e.getMessage());
        }
        saveContent("1",signFamilys.size(),adminCount,orgCount,townCount,cityCount,isAll,errorContent,errorCount);
        allContent.append(errorContent);
        allContent.append("-----------1----------");
    }
    private void computequota_2() {
        StringBuffer errorContent=new StringBuffer();
        String quotaId="2";
        //找出今天的解约信息
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterdayExpensesStatus(now,tomorrow);
        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;//是否统计失败
        //统计有已改簽的
        List<ETLModel> etlModels=new ArrayList<ETLModel>();
        //数据过滤清洗出脏数据  -----------start
        for(SignFamily signFamily:signFamilys){
            ETLModel etlModel=new ETLModel();
            String orgCode = signFamily.getHospital();
            if(StringUtils.isEmpty(orgCode)) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据为空");
                isAll=false;
                errorCount++;
                continue;
            }
            String orgCodeTemp="";
            if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                //站
                orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
            }else{
                //社区
                orgCodeTemp=orgCode;
            }
            //判断社区有没有值
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            Long adminId=signFamily.getAdminTeamId();
            if(adminId == null||adminId<=0) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据为空");
                isAll=false;
                errorCount++;
                continue;
            }
            AdminTeam adminTeam=adminTeamMap.get(signFamily.getAdminTeamId()+"");
            if(adminTeam == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            String idCard=signFamily.getIdcard();
            if(idCard == null||(idCard.length()!=18&&idCard.length()!=15)) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的idCard数据异常");
                isAll=false;
                errorCount++;
                continue;
            }
            String town =hospital.getTown();
            if(StringUtils.isEmpty(town)) {
                errorContent.append("签约code:"+signFamily.getCode()+",机构表的中的town为空");
                isAll=false;
                errorCount++;
                continue;
            }
            Town townObj =townsMap.get(town);
            if(townObj==null) {
                errorContent.append("签约code:"+signFamily.getCode()+",机构表的中的town不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            etlModel.setAdminTeam(adminTeam.getId()+"");
            etlModel.setHospital(orgCodeTemp);
            etlModel.setTown(hospital.getTown());
            etlModel.setCity(Constant.city);
            etlModel.setIdcard(signFamily.getIdcard());
            etlModels.add(etlModel);
            //统计数目+1
            cityCount++;
            townCount++;
            orgCount++;
            adminCount++;
        }
        //数据过滤清洗出脏数据  -----------end
        try{
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels);
            //保存数据
            redisStorage.saveByLevel1(returnDatas,quotaId);
        }catch (Exception e){
            e.printStackTrace();
            errorContent.append("统计失败:"+e.getMessage());
        }
        saveContent(quotaId,signFamilys.size(),adminCount,orgCount,townCount,cityCount,isAll,errorContent,errorCount);
        allContent.append(errorContent);
        allContent.append("----------2-----------");
    }
    private void computequota_3() {
        StringBuffer errorContent=new StringBuffer();
        String quotaId="3";
        //找出今天的咨询信息
        List<ConsultTeam> consultTeams = consultTeamDao.findByCzrqyYesterday(now,tomorrow);
        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;//是否统计失败
        //统计有已改簽的
        List<ETLModel> etlModels=new ArrayList<ETLModel>();
        //数据过滤清洗出脏数据  -----------start
        for(ConsultTeam consultTeam:consultTeams){
            ETLModel etlModel=new ETLModel();
            Long adminId=consultTeam.getAdminTeamId();
            if(adminId == null||adminId<=0) {
                errorContent.append("咨询Id:"+consultTeam.getId()+",咨询的团队(wlyy_consult_team)中的admin_team_code数据为空");
                isAll=false;
                continue;
            }
            String teamCode = consultTeam.getAdminTeamId()+"";//行政的团队的id
            AdminTeam adminTeam=adminTeamMap.get(teamCode);
            if(adminTeam == null) {
                errorContent.append("咨询Id:"+consultTeam.getId()+",团队Id:"+adminTeam.getId()+",咨询的团队(wlyy_consult_team)中的团队不存在");
                isAll=false;
                continue;
            }
            String orgCode = adminTeam.getOrgCode();
            if(StringUtils.isEmpty(orgCode)) {
                errorContent.append("咨询Id:"+consultTeam.getId()+",团队Id:"+adminTeam.getId()+",医生团队的机构为空");
                isAll=false;
                continue;
            }
            String orgCodeTemp="";
            //统计机构
            if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                //统计站
                orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
            }else{
                //统计社区
                orgCodeTemp=orgCode;
            }
            //统计区 ---------------start--------------
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) {
                errorContent.append("咨询Id:"+consultTeam.getId()+",机构Id:"+hospital.getId()+",医生团队的机构不存在");
                isAll=false;
                continue;
            }
            String town=hospital.getTown();
            if(StringUtils.isEmpty(town)) {
                errorContent.append("咨询Id:"+consultTeam.getId()+",机构Id:"+hospital.getId()+",机构表的区字段(town)为空");
                isAll=false;
                continue;
            }
            Town townObj=townsMap.get(town);
            if(townObj==null) {
                errorContent.append("咨询Id:"+consultTeam.getId()+",机构Id:"+hospital.getId()+",机构表的区不存在");
                isAll=false;
                continue;
            }
            etlModel.setAdminTeam(adminTeam.getId()+"");
            etlModel.setHospital(orgCodeTemp);
            etlModel.setTown(hospital.getTown());
            etlModel.setCity(Constant.city);
            etlModels.add(etlModel);
            //统计数目+1
            cityCount++;
            townCount++;
            orgCount++;
            adminCount++;
        }
        //数据过滤清洗出脏数据  -----------end
        try{
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels);
            //保存数据
            redisStorage.saveByLevel1(returnDatas,quotaId);
        }catch (Exception e){
            e.printStackTrace();
            errorContent.append("统计失败:"+e.getMessage());
        }
        saveContent(quotaId,consultTeams.size(),adminCount,orgCount,townCount,cityCount,isAll,errorContent,errorCount);
        allContent.append(errorContent);
        allContent.append("----------3-----------");
    }
    private void computequota_4() {
        StringBuffer errorContent=new StringBuffer();
        String quotaId="4";
        //找出今天的随访信息
        List<Map<String,Object>> plans = getFvYesterday();
        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;//是否统计失败
        //统计有已改簽的
        List<ETLModel> etlModels=new ArrayList<ETLModel>();
        //数据过滤清洗出脏数据  -----------start
        for(Map<String,Object> plan:plans){
            ETLModel etlModel=new ETLModel();
            Object idCard=plan.get("id_card");//得到隨訪的身份證
            if(StringUtils.isEmpty(idCard)){
                errorContent.append("随访id:"+plan.get("id")+",随访(fv_plan)表id_card为空");
                isAll=false;
                continue;
            }
            SignFamily signFamily=signFamilyDao.findByIdcard(idCard.toString());
            if(signFamily==null){
                errorContent.append("随访id:"+plan.get("id")+",签约code:"+signFamily.getCode()+",随访中的患者身份证在签约表中找不到数据");
                isAll=false;
                continue;
            }
            Long adminTeamId=signFamily.getAdminTeamId();
            if(adminTeamId==null||adminTeamId<=0){
                errorContent.append("随访id:"+plan.get("id")+",签约code:"+signFamily.getCode()+" 中的adminTeamId为空");
                isAll=false;
                continue;
            }
            AdminTeam adminTeam=adminTeamMap.get(signFamily.getAdminTeamId());
            if(adminTeam==null){
                errorContent.append("随访id:"+plan.get("id")+",签约code:"+signFamily.getCode()+",医生团队不存在");
                isAll=false;
                continue;
            }
            //统计机构------------------start ------------------
            //判断医生属于哪个机构
            String orgCodeTemp="";
            String orgCode=adminTeam.getOrgCode();
            if(StringUtils.isEmpty(orgCode)){
                errorContent.append("随访id:"+plan.get("id")+",团队Id:"+adminTeam.getId()+",随访的医生所属的团队(wlyy_admin_team)机构为空");
                isAll=false;
                continue;
            }
            //统计机构
            if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                //统计站
                orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
            }else{
                //统计社区
                orgCodeTemp=orgCode;
            }
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital==null){
                errorContent.append("随访id:"+plan.get("id")+",团队Id:"+adminTeam.getId()+",随访的医生所属的团队的机构不存在");
                isAll=false;
                continue;
            }
            String town =hospital.getTown();
            if(StringUtils.isEmpty(town)) {
                errorContent.append("随访id:"+plan.get("id")+",机构Id:"+hospital.getId()+",机构表的中的town为空");
                isAll=false;
                errorCount++;
                continue;
            }
            Town townObj =townsMap.get(town);
            if(townObj==null) {
                errorContent.append("随访id:"+plan.get("id")+",机构Id:"+hospital.getId()+",机构表的中的town不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            etlModel.setAdminTeam(adminTeam.getId()+"");
            etlModel.setHospital(orgCodeTemp);
            etlModel.setTown(hospital.getTown());
            etlModel.setCity(Constant.city);
            etlModel.setIdcard(signFamily.getIdcard());
            etlModels.add(etlModel);
            //统计数目+1
            cityCount++;
            townCount++;
            orgCount++;
            adminCount++;
        }
        //数据过滤清洗出脏数据  -----------end
        try{
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels);
            //保存数据
            redisStorage.saveByLevel1(returnDatas,quotaId);
        }catch (Exception e){
            e.printStackTrace();
            errorContent.append("统计失败:"+e.getMessage());
        }
        saveContent(quotaId,plans.size(),adminCount,orgCount,townCount,cityCount,isAll,errorContent,errorCount);
        allContent.append(errorContent);
        allContent.append("-----------4----------");
    }
    private void computequota_5() {
        StringBuffer errorContent=new StringBuffer();
        String quotaId="5";
        List<PatientHealthGuidance> patientHealthGuidances = patientHealthGuidanceDao.findByCzrqyYesterday(now,tomorrow);
        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;//是否统计失败
        //统计有已改簽的
        List<ETLModel> etlModels=new ArrayList<ETLModel>();
        //数据过滤清洗出脏数据  -----------start
        for(PatientHealthGuidance patientHealthGuidance:patientHealthGuidances){
            ETLModel etlModel=new ETLModel();
            String patient=patientHealthGuidance.getPatient();
            SignFamily signFamily= signFamilyDao.findByPatientAndType(patient,2);//只统计家庭签约
            if(signFamily == null) {
                errorContent.append("健康咨询id:"+patientHealthGuidance.getId()+",患者code:"+patient+",家庭签约不存在");
                isAll=false;
                continue;
            }
            String adminId=signFamily.getAdminTeamId()+"";//得到团队ID
            if(StringUtils.isEmpty(adminId)){
                errorContent.append("健康咨询id:"+patientHealthGuidance.getId()+",签约code:"+signFamily.getCode()+",咨询的家庭签约的团队AdminTeamCode为空");
                isAll=false;
                continue;
            }
            AdminTeam adminTeam = adminTeamMap.get(adminId);
            if(adminTeam==null){
                errorContent.append("健康咨询id:"+patientHealthGuidance.getId()+",签约code:"+signFamily.getCode()+",咨询的家庭签约的团队不存在");
                isAll=false;
                continue;
            }
            String orgCode=signFamily.getHospital();//得到机构id
            if(StringUtils.isEmpty(orgCode)){
                errorContent.append("健康咨询id:"+patientHealthGuidance.getId()+",签约code:"+signFamily.getCode()+",咨询的家庭签约的机构Hospital不存在");
                isAll=false;
                continue;
            }
            String orgCodeTemp="";
            //统计机构 -----------------start---------------------
            if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                //统计站
                orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
            }else{
                //统计社区
                orgCodeTemp=orgCode;
            }
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) {
                errorContent.append("健康咨询id:"+patientHealthGuidance.getId()+",机构code:"+orgCodeTemp+",健康咨询的医生所属的机构不存在");
                isAll=false;
                continue;
            }
            String town =hospital.getTown();
            if(StringUtils.isEmpty(town)) {
                errorContent.append("健康咨询id:"+patientHealthGuidance.getId()+",机构code:"+hospital.getCode()+",机构表的中的town为空");
                isAll=false;
                errorCount++;
                continue;
            }
            Town townObj =townsMap.get(town);
            if(townObj==null) {
                errorContent.append("健康咨询id:"+patientHealthGuidance.getId()+",机构code:"+hospital.getCode()+",机构表的中的town不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            etlModel.setAdminTeam(adminTeam.getId()+"");
            etlModel.setHospital(orgCodeTemp);
            etlModel.setTown(hospital.getTown());
            etlModel.setCity(Constant.city);
            etlModel.setIdcard(signFamily.getIdcard());
            etlModels.add(etlModel);
            //统计数目+1
            cityCount++;
            townCount++;
            orgCount++;
            adminCount++;
        }
        //数据过滤清洗出脏数据  -----------end
        try{
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels);
            //保存数据
            redisStorage.saveByLevel1(returnDatas,quotaId);
        }catch (Exception e){
            e.printStackTrace();
            errorContent.append("统计失败:"+e.getMessage());
        }
        saveContent(quotaId,patientHealthGuidances.size(),adminCount,orgCount,townCount,cityCount,isAll,errorContent,errorCount);
        allContent.append(errorContent);
        allContent.append("-----------5----------");
    }
    private void computequota_6() throws Exception {
        StringBuffer errorContent=new StringBuffer();
        String quotaId="6";
        //找出今天的签约信息
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterdayExpensesStatus(now, tomorrow);
        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;//是否统计失败
        //统计有已改簽的
        List<ETLModel> etlModels=new ArrayList<ETLModel>();
        //数据过滤清洗出脏数据  -----------start
        for(SignFamily signFamily:signFamilys){
            ETLModel etlModel=new ETLModel();
            String orgCode = signFamily.getHospital();
            if(StringUtils.isEmpty(orgCode)) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据为空");
                isAll=false;
                errorCount++;
                continue;
            }
            String orgCodeTemp="";
            if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                //站
                orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
            }else{
                //社区
                orgCodeTemp=orgCode;
            }
            //判断社区有没有值
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            Long adminId=signFamily.getAdminTeamId();
            if(adminId == null||adminId<=0) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据为空");
                isAll=false;
                errorCount++;
                continue;
            }
            AdminTeam adminTeam=adminTeamMap.get(signFamily.getAdminTeamId()+"");
            if(adminTeam == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            String idCard=signFamily.getIdcard();
            if(idCard == null||((idCard.length()!=18&&idCard.length()!=15))) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的idCard数据异常");
                isAll=false;
                errorCount++;
                continue;
            }
            String town =hospital.getTown();
            if(StringUtils.isEmpty(town)) {
                errorContent.append("签约code:"+signFamily.getCode()+",机构表的中的town为空");
                isAll=false;
                errorCount++;
                continue;
            }
            Town townObj =townsMap.get(town);
            if(townObj==null) {
                errorContent.append("签约code:"+signFamily.getCode()+",机构表的中的town不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            etlModel.setHospital(orgCodeTemp);
            etlModel.setTown(hospital.getTown());
            etlModel.setCity(Constant.city);
            etlModel.setIdcard(signFamily.getIdcard());
            etlModels.add(etlModel);
            //统计数目+1
            cityCount++;
            townCount++;
            orgCount++;
            adminCount++;
        }
        //数据过滤清洗出脏数据  -----------end
        try{
            //统计数据
            List<Map<String, List<ETLModel>>>  returnData1s= levelRole.elt(etlModels);
            List<Map<String, Map<String, List<ETLModel>>>> patientSexRoleData= patientSexRole.elt(returnData1s);
            //保存数据
            redisStorage.saveByLevel2(patientSexRoleData,quotaId,3,1);
        }catch (Exception e){
            e.printStackTrace();
            errorContent.append("统计失败:"+e.getMessage());
        }
        saveContent(quotaId,signFamilys.size(),adminCount,orgCount,townCount,cityCount,isAll,errorContent,errorCount);
        allContent.append(errorContent);
        allContent.append("-----------6----------");
    }
    private void computequota_7() {
        StringBuffer errorContent=new StringBuffer();
        String quotaId="7";
        String now = getDayString(0);
        String tomorrow = getDayString(1);
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterdayExpensesStatus(now, tomorrow);
        errorContent.append("截止时间:"+now+"-"+DateUtil.dateToStrLong(new Date())+",数据库查询的签约数是:"+signFamilys.size()+",错误:");
        //查找出系统全部的患者
        List<Patient> patients = patientDao.findAllSignPatient();
        Map<String, Patient> patientsMap = new HashMap<String, Patient>();
        for (Patient patient : patients) {
            patientsMap.put(patient.getCode(), patient);
        }
        Map<String, Map<String, Long>> cityGroupMap = new HashMap<String, Map<String, Long>>();//key是市行政代码 目前只有厦门市
        cityGroupMap.put(Constant.city,new HashMap<String, Long>());
        Map<String, Map<String, Long>> townGroupMap = new HashMap<String, Map<String, Long>>();//key是区行政代码
        Map<String, Map<String, Long>> orgGroupMap = new HashMap<String, Map<String, Long>>();//key是机构代码
        //得到所有的签约病人的分组信息
        List<DoctorPatientGroupInfo> doctorPatientGroupInfos = doctorPatientGroupInfoDao.findAllPatient();
        Map<String, String> groupMap = new HashMap<String, String>();
        for (DoctorPatientGroupInfo doctorPatientGroupInfo : doctorPatientGroupInfos) {
            groupMap.put(doctorPatientGroupInfo.getPatient(), doctorPatientGroupInfo.getGroup());
        }
        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;//是否统计失败
        //统计有签约的
        for (SignFamily signFamily : signFamilys) {
            String patient=signFamily.getPatient();
            String group = groupMap.get(patient);//得到该签约病人的所在分组 1 普通 2 慢病 3是 65岁以上人群
            Hospital hospital = hospitalsMap.get(getOrg(signFamily.getHospital()));//得到患者签约的机构
            String orgCode = signFamily.getHospital();
            if(StringUtils.isEmpty(orgCode)) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据为空");
                isAll=false;
                errorCount++;
                continue;
            }
            String orgCodeTemp="";
            if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                //站
                orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
            }else{
                //社区
                orgCodeTemp=orgCode;
            }
            //判断社区有没有值
            hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            Long adminId=signFamily.getAdminTeamId();
            if(adminId == null||adminId<=0) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据为空");
                isAll=false;
                errorCount++;
                continue;
            }
            AdminTeam adminTeam=adminTeamMap.get(signFamily.getAdminTeamId()+"");
            if(adminTeam == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            String idCard=signFamily.getIdcard();
            if(idCard == null||((idCard.length()!=18&&idCard.length()!=15))) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的idCard数据异常");
                isAll=false;
                errorCount++;
                continue;
            }
            String town =hospital.getTown();
            if(StringUtils.isEmpty(town)) {
                errorContent.append("签约code:"+signFamily.getCode()+",机构表的中的town为空");
                isAll=false;
                errorCount++;
                continue;
            }
            Town townObj =townsMap.get(town);
            if(townObj==null) {
                errorContent.append("签约code:"+signFamily.getCode()+",机构表的中的town不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            town = hospital.getTown();
            //统计市  现在只有厦门市 默认先写死 后面再改
            if (cityGroupMap.containsKey(Constant.city)) {
                Map<String, Long> groupMapTemp = cityGroupMap.get(Constant.city);
                groupMapTemp.put(group,(groupMapTemp.get(group)==null?0l:groupMapTemp.get(group))  + 1);
                cityGroupMap.put(Constant.city, groupMapTemp);
            } else {
                Map<String, Long> groupMapTemp = new HashMap<String, Long>();
                groupMapTemp.put(group, 1L);
                cityGroupMap.put(Constant.city, groupMapTemp);
            }
            //统计区
            if (townGroupMap.containsKey(town)) {
                Map<String, Long> groupMapTemp = townGroupMap.get(town);
                groupMapTemp.put(group, (groupMapTemp.get(group)==null?0l:groupMapTemp.get(group))+ 1);
                townGroupMap.put(town, groupMapTemp);
            } else {
                Map<String, Long> groupMapTemp = new HashMap<String, Long>();
                groupMapTemp.put(group, 1L);
                townGroupMap.put(town, groupMapTemp);
            }
            //统计机构
            if (orgGroupMap.containsKey(hospital.getCode())) {
                Map<String, Long> groupMapTemp = orgGroupMap.get(hospital.getCode());
                groupMapTemp.put(group, (groupMapTemp.get(group)==null?0l:groupMapTemp.get(group)) + 1);
                orgGroupMap.put(hospital.getCode(), groupMapTemp);
            } else {
                Map<String, Long> groupMapTemp = new HashMap<String, Long>();
                groupMapTemp.put(group, 1L);
                orgGroupMap.put(hospital.getCode(), groupMapTemp);
            }
            boolean hasGXY = false;//有高血压
            boolean hasTNB = false;//有糖尿病
            if ("2".equals(group)) {
                //如果是慢病的 统计高血压的 糖尿病  1高血压,2糖尿病
                String jsonString = redisTemplate.opsForValue().get("disease:" + patient);
                if (StringUtils.isEmpty(jsonString)) {
                    continue;
                }
                //排除数据 只留下高血压和糖尿病
                List<JSONObject> jsonObjects = new ArrayList<JSONObject>();
                JSONArray redisValues = new JSONArray(jsonString);
                for (Object obj : redisValues) {
                    JSONObject redisValue = (JSONObject)(obj);
                    if(!redisValue.has("signType")){
                        continue;
                    }
                    //排除掉三师签约
                    if ("1".equals(redisValue.getString("signType"))) {
                        continue;
                    }
                    String disease = redisValue.getString("disease");
                    if ("1".equals(disease)) {
                        jsonObjects.add(redisValue);
                        hasGXY = true;//设置有高血压
                    }
                    if ("2".equals(disease)) {
                        jsonObjects.add(redisValue);
                        hasTNB = true;//设置有糖尿病
                    }
                }
                if(jsonObjects.size()==0){
                    continue;//如果没有高血压和糖尿病 不统计
                }
                if (hasGXY && hasTNB) {
                    group = "6";//有高血压又有糖尿病
                } else {
                    group = Integer.valueOf(jsonObjects.get(0).get("disease").toString()) + 3 + "";//4高血压,5糖尿病
                }
                if (cityGroupMap.containsKey(Constant.city)) {
                    Map<String, Long> groupMapTemp = cityGroupMap.get(Constant.city);
                    groupMapTemp.put(group, (groupMapTemp.get(group) == null ? 0l : groupMapTemp.get(group)) + 1);
                    cityGroupMap.put(Constant.city, groupMapTemp);
                } else {
                    Map<String, Long> groupMapTemp = new HashMap<String, Long>();
                    groupMapTemp.put(group, 1L);
                    cityGroupMap.put(Constant.city, groupMapTemp);
                }
                //统计区
                if (townGroupMap.containsKey(town)) {
                    Map<String, Long> groupMapTemp = townGroupMap.get(town);
                    groupMapTemp.put(group, (groupMapTemp.get(group) == null ? 0l : groupMapTemp.get(group)) + 1);
                    townGroupMap.put(town, groupMapTemp);
                } else {
                    Map<String, Long> groupMapTemp = new HashMap<String, Long>();
                    groupMapTemp.put(group, 1L);
                    townGroupMap.put(town, groupMapTemp);
                }
                //统计机构
                //统计站
                String org=hospital.getCode();
                if (!"00".equals(org.substring(org.length()-2,org.length()))) {
                    orgCodeTemp =org.substring(0,org.length()-2)+"00";
                    //统计机构
                    if (orgGroupMap.containsKey(orgCodeTemp)) {
                        Map<String, Long> groupMapTemp = orgGroupMap.get(orgCodeTemp);
                        groupMapTemp.put(group, (groupMapTemp.get(group) == null ? 0l : groupMapTemp.get(group)) + 1);
                        orgGroupMap.put(orgCodeTemp, groupMapTemp);
                    } else {
                        Map<String, Long> groupMapTemp = new HashMap<String, Long>();
                        groupMapTemp.put(group, 1L);
                        orgGroupMap.put(orgCodeTemp, groupMapTemp);
                    }
                } else {
                    //统计机构
                    if (orgGroupMap.containsKey(hospital.getCode())) {
                        Map<String, Long> groupMapTemp = orgGroupMap.get(hospital.getCode());
                        groupMapTemp.put(group, (groupMapTemp.get(group) == null ? 0l : groupMapTemp.get(group)) + 1);
                        orgGroupMap.put(hospital.getCode(), groupMapTemp);
                    } else {
                        Map<String, Long> groupMapTemp = new HashMap<String, Long>();
                        groupMapTemp.put(group, 1L);
                        orgGroupMap.put(hospital.getCode(), groupMapTemp);
                    }
                }
            }
            //统计数目+1
            cityCount++;
            townCount++;
            orgCount++;
            adminCount++;
        }
        //保存统计数据
        //保存市的统计数据
        for (Map.Entry<String, Map<String, Long>> entry : cityGroupMap.entrySet()) {
            //保存健康人群
            JSONObject jsonObject=new JSONObject();
            if (entry.getValue() != null && entry.getValue().containsKey(Constant.level_group_1)) {
                jsonObject.put("num",entry.getValue().get(Constant.level_group_1));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",Constant.cityName);
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:4:1:"+entry.getKey()).toString(),jsonObject.toString());
            //保存慢病人群
            jsonObject=new JSONObject();
            if (entry.getValue() != null && entry.getValue().containsKey(Constant.level_group_2)) {
                jsonObject.put("num",entry.getValue().get(Constant.level_group_2));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",Constant.cityName);
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:4:2:"+entry.getKey()).toString(),jsonObject.toString());
            //保存65岁以上人群
            jsonObject=new JSONObject();
            if (entry.getValue() != null && entry.getValue().containsKey(Constant.level_group_3)) {
                jsonObject.put("num",entry.getValue().get(Constant.level_group_3));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",Constant.cityName);
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:4:3:"+entry.getKey()).toString(),jsonObject.toString());
            //保存高血压
            jsonObject=new JSONObject();
            if (entry.getValue() != null && entry.getValue().containsKey(Constant.level_group_4)) {
                jsonObject.put("num",entry.getValue().get(Constant.level_group_4));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",Constant.cityName);
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:4:4:"+entry.getKey()).toString(),jsonObject.toString());
            //保存糖尿病
            jsonObject=new JSONObject();
            if (entry.getValue() != null && entry.getValue().containsKey(Constant.level_group_5)) {
                jsonObject.put("num",entry.getValue().get(Constant.level_group_5));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",Constant.cityName);
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:4:5:"+entry.getKey()).toString(),jsonObject.toString());
            //保存糖尿病和高血压
            jsonObject=new JSONObject();
            if (entry.getValue() != null && entry.getValue().containsKey(Constant.level_group_6)) {
                jsonObject.put("num",entry.getValue().get(Constant.level_group_6));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",Constant.cityName);
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:4:6:"+entry.getKey()).toString(),jsonObject.toString());
        }
        //保存区级
        //保存区的统计数据
        for (Map.Entry<String, Town> townEntry : townsMap.entrySet()) {//保存健康人群
            JSONObject jsonObject=new JSONObject();
            Town town=townsMap.get(townEntry.getKey());
            Map<String, Long> oneTown= townGroupMap.get(townEntry.getKey());
            if (oneTown != null && oneTown.containsKey(Constant.level_group_1)) {
                jsonObject.put("num",oneTown.get(Constant.level_group_1));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",town.getName());
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:3:1:"+townEntry.getKey()).toString(),jsonObject.toString());
            //保存慢病人群
            jsonObject=new JSONObject();
            if (oneTown != null && oneTown.containsKey(Constant.level_group_2)) {
                jsonObject.put("num",oneTown.get(Constant.level_group_2));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",town.getName());
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:3:2:"+townEntry.getKey()).toString(),jsonObject.toString());
            //保存65岁以上人群
            jsonObject=new JSONObject();
            if (oneTown != null && oneTown.containsKey(Constant.level_group_3)) {
                jsonObject.put("num",oneTown.get(Constant.level_group_3));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",town.getName());
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:3:3:"+townEntry.getKey()).toString(),jsonObject.toString());
            //保存高血压
            jsonObject=new JSONObject();
            if (oneTown != null && oneTown.containsKey(Constant.level_group_4)) {
                jsonObject.put("num",oneTown.get(Constant.level_group_4));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",town.getName());
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:3:4:"+townEntry.getKey()).toString(),jsonObject.toString());
            //保存糖尿病
            jsonObject=new JSONObject();
            if (oneTown != null && oneTown.containsKey(Constant.level_group_5)) {
                jsonObject.put("num",oneTown.get(Constant.level_group_5));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",town.getName());
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:3:5:"+townEntry.getKey()).toString(),jsonObject.toString());
            //保存糖尿病和高血压
            jsonObject=new JSONObject();
            if (oneTown != null && oneTown.containsKey(Constant.level_group_6)) {
                jsonObject.put("num",oneTown.get(Constant.level_group_6));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",town.getName());
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:3:6:"+townEntry.getKey()).toString(),jsonObject.toString());
        }
        //保存机构
        for (Map.Entry<String, Hospital> hospitalEntry : hospitalsMap.entrySet()) {
            //保存健康人群
            Hospital hospital=hospitalsMap.get(hospitalEntry.getKey());
            if(hospital == null) continue;
            JSONObject jsonObject=new JSONObject();
            Map<String, Long> oneOrg= orgGroupMap.get(hospitalEntry.getKey());
            if (oneOrg != null && oneOrg.containsKey(Constant.level_group_1)) {
                jsonObject.put("num",oneOrg.get(Constant.level_group_1));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",hospital.getName());
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:2:1:"+hospitalEntry.getKey()).toString(),jsonObject.toString());
            //保存慢病人群
            jsonObject=new JSONObject();
            if (oneOrg != null && oneOrg.containsKey(Constant.level_group_2)) {
                jsonObject.put("num",oneOrg.get(Constant.level_group_2));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",hospital.getName());
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:2:2:"+hospitalEntry.getKey()).toString(),jsonObject.toString());
            //保存65岁以上人群
            jsonObject=new JSONObject();
            if (oneOrg != null && oneOrg.containsKey(Constant.level_group_3)) {
                jsonObject.put("num",oneOrg.get(Constant.level_group_3));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",hospital.getName());
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:2:3:"+hospitalEntry.getKey()).toString(),jsonObject.toString());
            //保存高血压
            jsonObject=new JSONObject();
            if (oneOrg != null && oneOrg.containsKey(Constant.level_group_4)) {
                jsonObject.put("num",oneOrg.get(Constant.level_group_4));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",hospital.getName());
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:2:4:"+hospitalEntry.getKey()).toString(),jsonObject.toString());
            //保存糖尿病
            jsonObject=new JSONObject();
            if (oneOrg != null && oneOrg.containsKey(Constant.level_group_5)) {
                jsonObject.put("num",oneOrg.get(Constant.level_group_5));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",hospital.getName());
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:2:5:"+hospitalEntry.getKey()).toString(),jsonObject.toString());
            //保存糖尿病和高血压
            jsonObject=new JSONObject();
            if (oneOrg != null && oneOrg.containsKey(Constant.level_group_6)) {
                jsonObject.put("num",oneOrg.get(Constant.level_group_6));
            } else {
                jsonObject.put("num",0);
            }
            jsonObject.put("name",hospital.getName());
            jsonObject.put("date", DateUtil.dateToStrLong(new Date()));
            redisTemplate.opsForValue().set(new StringBuffer("quota:7:2:6:"+hospitalEntry.getKey()).toString(),jsonObject.toString());
        }
        saveContent(quotaId,signFamilys.size(),adminCount,orgCount,townCount,cityCount,isAll,errorContent,errorCount);
        allContent.append(errorContent);
        allContent.append("----------7-----------");
    }
    private void computequota_8()throws Exception {
        StringBuffer errorContent=new StringBuffer();
        String quotaId="8";
        //找出今天的签约信息
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterdayExpensesStatus(now, tomorrow);
        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;//是否统计失败
        //统计有已改簽的
        List<ETLModel> etlModels=new ArrayList<ETLModel>();
        //数据过滤清洗出脏数据  -----------start
        for(SignFamily signFamily:signFamilys){
            ETLModel etlModel=new ETLModel();
            String orgCode = signFamily.getHospital();
            if(StringUtils.isEmpty(orgCode)) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据为空");
                isAll=false;
                errorCount++;
                continue;
            }
            String orgCodeTemp="";
            if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                //站
                orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
            }else{
                //社区
                orgCodeTemp=orgCode;
            }
            //判断社区有没有值
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            Long adminId=signFamily.getAdminTeamId();
            if(adminId == null||adminId<=0) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据为空");
                isAll=false;
                errorCount++;
                continue;
            }
            AdminTeam adminTeam=adminTeamMap.get(signFamily.getAdminTeamId()+"");
            if(adminTeam == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            String idCard=signFamily.getIdcard();
            if(idCard == null||((idCard.length()!=18&&idCard.length()!=15))) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的idCard数据异常");
                isAll=false;
                errorCount++;
                continue;
            }
            String town =hospital.getTown();
            if(StringUtils.isEmpty(town)) {
                errorContent.append("签约code:"+signFamily.getCode()+",机构表的中的town为空");
                isAll=false;
                errorCount++;
                continue;
            }
            Town townObj =townsMap.get(town);
            if(townObj==null) {
                errorContent.append("签约code:"+signFamily.getCode()+",机构表的中的town不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            etlModel.setHospital(orgCodeTemp);
            etlModel.setTown(hospital.getTown());
            etlModel.setCity(Constant.city);
            etlModel.setIdcard(signFamily.getIdcard());
            etlModels.add(etlModel);
            //统计数目+1
            cityCount++;
            townCount++;
            orgCount++;
            adminCount++;
        }
        //数据过滤清洗出脏数据  -----------end
        try{
            //统计数据
            List<Map<String, List<ETLModel>>>  returnData1s= levelRole.elt(etlModels);
            List<Map<String, Map<String, List<ETLModel>>>> patientAgeRoleData= patientAgeRole.elt(returnData1s);
            //保存数据
            redisStorage.saveByLevel2(patientAgeRoleData,quotaId,6,2);
        }catch (Exception e){
            e.printStackTrace();
            errorContent.append("统计失败:"+e.getMessage());
        }
        saveContent(quotaId,signFamilys.size(),adminCount,orgCount,townCount,cityCount,isAll,errorContent,errorCount);
        allContent.append(errorContent);
        allContent.append("----------8-----------");
    }
    private void computequota_9() {
        StringBuffer errorContent=new StringBuffer();
        String quotaId="9";
        //找出今天的待签约信息
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingWaitSignYesterdayExpensesStatus(now,tomorrow);
        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;//是否统计失败
        //统计有已改簽的
        List<ETLModel> etlModels=new ArrayList<ETLModel>();
        //数据过滤清洗出脏数据  -----------start
        for(SignFamily signFamily:signFamilys){
            ETLModel etlModel=new ETLModel();
            String orgCode = signFamily.getHospital();
            if(StringUtils.isEmpty(orgCode)) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据为空");
                isAll=false;
                errorCount++;
                continue;
            }
            String orgCodeTemp="";
            if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                //站
                orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
            }else{
                //社区
                orgCodeTemp=orgCode;
            }
            //判断社区有没有值
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            Long adminId=signFamily.getAdminTeamId();
            if(adminId == null||adminId<=0) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据为空");
                isAll=false;
                errorCount++;
                continue;
            }
            AdminTeam adminTeam=adminTeamMap.get(signFamily.getAdminTeamId()+"");
            if(adminTeam == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            String idCard=signFamily.getIdcard();
            if(idCard == null||(idCard.length()!=18&&idCard.length()!=15)) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的idCard数据异常");
                isAll=false;
                errorCount++;
                continue;
            }
            String town =hospital.getTown();
            if(StringUtils.isEmpty(town)) {
                errorContent.append("签约code:"+signFamily.getCode()+",机构表的中的town为空");
                isAll=false;
                errorCount++;
                continue;
            }
            Town townObj =townsMap.get(town);
            if(townObj==null) {
                errorContent.append("签约code:"+signFamily.getCode()+",机构表的中的town不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            etlModel.setAdminTeam(adminTeam.getId()+"");
            etlModel.setHospital(orgCodeTemp);
            etlModel.setTown(hospital.getTown());
            etlModel.setCity(Constant.city);
            etlModel.setIdcard(signFamily.getIdcard());
            etlModels.add(etlModel);
            //统计数目+1
            cityCount++;
            townCount++;
            orgCount++;
            adminCount++;
        }
        //数据过滤清洗出脏数据  -----------end
        try{
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels);
            //保存数据
            redisStorage.saveByLevel1(returnDatas,quotaId);
        }catch (Exception e){
            e.printStackTrace();
            errorContent.append("统计失败:"+e.getMessage());
        }
        saveContent(quotaId,signFamilys.size(),adminCount,orgCount,townCount,cityCount,isAll,errorContent,errorCount);
        allContent.append(errorContent);
        allContent.append("----------9-----------");
    }
    private void computequota_10() {
        StringBuffer errorContent=new StringBuffer();
        String quotaId="10";
        //查找出系统全部的全科医生
        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<SignFamily> signFamilys = signFamilyDao.findByJiatingChaangeSignYesterdayExpensesStatus(now,tomorrow);
        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;//是否统计失败
        //统计有已改簽的
        List<ETLModel> etlModels=new ArrayList<ETLModel>();
        //数据过滤清洗出脏数据  -----------start
        for(SignFamily signFamily:signFamilys){
            ETLModel etlModel=new ETLModel();
            String orgCode = signFamily.getHospital();
            if(StringUtils.isEmpty(orgCode)) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据为空");
                isAll=false;
                errorCount++;
                continue;
            }
            String orgCodeTemp="";
            if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                //站
                orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
            }else{
                //社区
                orgCodeTemp=orgCode;
            }
            //判断社区有没有值
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            Long adminId=signFamily.getAdminTeamId();
            if(adminId == null||adminId<=0) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据为空");
                isAll=false;
                errorCount++;
                continue;
            }
            AdminTeam adminTeam=adminTeamMap.get(signFamily.getAdminTeamId()+"");
            if(adminTeam == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            String idCard=signFamily.getIdcard();
            if(idCard == null||(idCard.length()!=18&&idCard.length()!=15)) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的idCard数据异常");
                isAll=false;
                errorCount++;
                continue;
            }
            String town =hospital.getTown();
            if(StringUtils.isEmpty(town)) {
                errorContent.append("签约code:"+signFamily.getCode()+",机构表的中的town为空");
                isAll=false;
                errorCount++;
                continue;
            }
            Town townObj =townsMap.get(town);
            if(townObj==null) {
                errorContent.append("签约code:"+signFamily.getCode()+",机构表的中的town不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            etlModel.setAdminTeam(adminTeam.getId()+"");
            etlModel.setHospital(orgCodeTemp);
            etlModel.setTown(hospital.getTown());
            etlModel.setCity(Constant.city);
            etlModel.setIdcard(signFamily.getIdcard());
            etlModels.add(etlModel);
            //统计数目+1
            cityCount++;
            townCount++;
            orgCount++;
            adminCount++;
        }
        //数据过滤清洗出脏数据  -----------end
        try{
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels);
            //保存数据
            redisStorage.saveByLevel1(returnDatas,quotaId);
        }catch (Exception e){
            e.printStackTrace();
            errorContent.append("统计失败:"+e.getMessage());
        }
        saveContent(quotaId,signFamilys.size(),adminCount,orgCount,townCount,cityCount,isAll,errorContent,errorCount);
        allContent.append(errorContent);
        allContent.append("-----------10----------");
    }
    public Properties getSystemProperties() {
        if (systemProperties == null) {
            InputStream is = null;
            try {
                is = this.getClass().getResourceAsStream("/application.properties");
                systemProperties = new Properties();
                systemProperties.load(is);
            } catch (IOException e1) {
                e1.printStackTrace();
            } finally {
                if (is != null) {
                    try {
                        is.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        return systemProperties;
    }
    public static String getDayString(Integer size) {
        Date date = new Date();//取时间
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        calendar.add(calendar.DATE, size);//把日期往后增加一天.整数往后推,负数往前移动
        date = calendar.getTime(); //这个时间就是日期往后推一天的结果
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        String dateString = formatter.format(date);
        return dateString;
    }
    public List<Map<String,Object>> getFvYesterday() {
        String now = getDayString(0);
        String tomorrow = getDayString(1);
        String sql=" select * from fv_plan a where unix_timestamp(a.update_time)>=unix_timestamp('"+now+"') and unix_timestamp(a.update_time)< unix_timestamp('"+tomorrow+"')  ";
        return jdbcTemplate.queryForList(sql);
    }
    /**
     * 根据年龄得到对应的code
     * @param age
     * @return
     */
    public String getAgeCode(int age) {
        if (age < 7) {
            return Constant.level_age_1;
        } else if (age >= 7 && age < 18) {
            return Constant.level_age_2;
        } else if (age >= 18 && age < 30) {
            return Constant.level_age_3;
        } else if (age >= 30 && age < 50) {
            return Constant.level_age_4;
        } else if (age >= 50 && age < 65) {
            return Constant.level_age_5;
        } else {
            return Constant.level_age_6;
        }
    }
    private String getOrg(String org){
        //if(!"00".equals(org.substring(org.length()-2,org.length()))){
        if(org.length() == 10 && !org.endsWith("00")){
            return org.substring(0,org.length()-2)+"00";
        }else{
            return org;
        }
    }
    private String saveContent(String id,Integer size, Long qkCount, Long orgCount, Long townCount, Long cityCount, boolean isAll, StringBuffer errorContent,Long errorCount) {
        StringBuffer string=new StringBuffer("统计 quotaid:"+id+" 的数据完成 ,数据库查询到改签数目:"+size);
        string.append(",过滤的脏数据数目:"+errorCount);
        string.append(",统计到市的数据总数:"+cityCount);
        string.append(",统计到区的数据总数:"+townCount);
        string.append(",统计到机构的数据总数:"+orgCount);
        string.append(",统计到团队的数据总数:"+qkCount);
        string.append(",是否统计成功:"+isAll);
        if(!isAll){
            string.append(",失败原因:"+errorContent);
        }
        return string.toString();
    }
}

+ 0 - 301
patient-co-wlyy/src/main/java/com/yihu/wlyy/job/FollowUpJob.java

@ -1,301 +0,0 @@
package com.yihu.wlyy.job;
import com.yihu.wlyy.entity.doctor.team.admin.AdminTeam;
import com.yihu.wlyy.entity.organization.Hospital;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.job.QuartzJobLog;
import com.yihu.wlyy.entity.patient.SignFamily;
import com.yihu.wlyy.entity.statistics.WlyyQuotaResult;
import com.yihu.wlyy.job.elt.base.ETLModel;
import com.yihu.wlyy.job.elt.role.Level1Role;
import com.yihu.wlyy.job.elt.storage.DBStorage;
import com.yihu.wlyy.repository.address.TownDao;
import com.yihu.wlyy.repository.doctor.DoctorAdminTeamDao;
import com.yihu.wlyy.repository.job.QuartzJobLogDao;
import com.yihu.wlyy.repository.organization.HospitalDao;
import com.yihu.wlyy.repository.patient.SignFamilyDao;
import com.yihu.wlyy.repository.statistics.WlyyQuotaResultDao;
import com.yihu.wlyy.web.quota.WlyyJobConfigVO;
import com.yihu.wlyy.web.quota.WlyyQuotaVO;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
import java.io.IOException;
import java.io.InputStream;
import java.util.*;
/**
 * 随访的指标执行类
 */
@Component
public class FollowUpJob implements Job {
    private WlyyQuotaVO wlyyQuota;//指标对象
    private WlyyJobConfigVO wlyyJobConfig;//配置对象
    @Autowired
    private WlyyQuotaResultDao wlyyQuotaResultDao;//指标结果Dao
    @Autowired
    private QuartzJobLogDao quartzJobLogDao;//执行日志Dao
    @Autowired
    private HospitalDao hospitalDao;
    @Autowired
    private TownDao townDao;
    @Autowired
    private SignFamilyDao signFamilyDao;
    @Autowired
    private JdbcTemplate jdbcTemplate_wlyy;
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    @Autowired
    private Level1Role levelRole;
    @Autowired
    private DBStorage dbStorage;
    private org.apache.tomcat.jdbc.pool.DataSource fvdataSource=new org.apache.tomcat.jdbc.pool.DataSource();//随访数据源
    private JdbcTemplate jdbcTemplate = new JdbcTemplate();
    private Properties systemProperties;
    String yesterday;
    String now;
    @Override
    public void execute(JobExecutionContext context)
            throws JobExecutionException {
        SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
        getSystemProperties();
        fvdataSource.setDriverClassName( systemProperties.get("fv.jdbc.driver").toString());
        fvdataSource.setUrl( systemProperties.get("fv.jdbc.url").toString());
        fvdataSource.setUsername( systemProperties.get("fv.jdbc.username").toString());
        fvdataSource.setPassword( systemProperties.get("fv.jdbc.password").toString());
        //初始化参数
        JobDataMap map = context.getJobDetail().getJobDataMap();
        wlyyQuota = (WlyyQuotaVO) map.get("quota");
        wlyyJobConfig = (WlyyJobConfigVO) map.get("jobConfig");
        //计算指标
        jdbcTemplate.setDataSource(fvdataSource);//初始化随访的数据源
        //線刪除今天的数据
        now= StringUtils.isEmpty(map.get("now"))?SignJob.getDayString(0):map.get("now").toString();
        yesterday= StringUtils.isEmpty(map.get("yesterday"))?SignJob.getDayString(-1):map.get("yesterday").toString();
        computequota();
    }
    @Transactional
    private void computequota() {
        jdbcTemplate_wlyy.execute("delete from wlyy_quota_result where quota_date='"+yesterday+"' and quato_code='"+4+"'");
        //新建任务日志对象
        QuartzJobLog quartzJobLog = new QuartzJobLog();
        quartzJobLog.setJobStartTime(new Date());
        quartzJobLog.setJobId(wlyyJobConfig.getId());
        quartzJobLog.setJobName(wlyyJobConfig.getJobName());
        //查找出系统全部的医生
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
        Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
        for (AdminTeam adminTeam : adminTeams) {
            adminTeamMap.put(adminTeam.getId()+"", adminTeam);
        }
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospital2();
        Map<String, Hospital> hospitalsMap = new HashMap<String, Hospital>();
        for (Hospital hospital : hospitals) {
            hospitalsMap.put(hospital.getCode(), hospital);
        }
        //查找出厦门市全部的区
        List<Town> towns = townDao.findByCityCode(Constant.city);
        Map<String, Town> townsMap = new HashMap<String, Town>();
        for (Town town : towns) {
            townsMap.put(town.getCode(), town);
        }
        //找出今天的随访信息
        List<Map<String,Object>> plans = getFvYesterday();
        Long cityCount = new Long(0L); //统计到市的数目
        Long townCount = new Long(0L); //统计到所有区的数目
        Long orgCount =new Long(0L);//统计到所有机构的数目
        Long adminCount = new Long(0L);//统计到所有团队的数目
        Long errorCount=new Long(0L);//脏数据
        Boolean isAll=true;//是否统计失败
        StringBuffer errorContent=new StringBuffer();
        //统计有已改簽的
        List<ETLModel> etlModels=new ArrayList<ETLModel>();
        //数据过滤清洗出脏数据  -----------start
        for(Map<String,Object> plan:plans){
            ETLModel etlModel=new ETLModel();
            Object idCard=plan.get("id_card");//得到隨訪的身份證
            if(StringUtils.isEmpty(idCard)){
                errorContent.append("随访id:"+plan.get("id")+",随访(fv_plan)表id_card为空");
                isAll=false;
                continue;
            }
            SignFamily signFamily=signFamilyDao.findByIdcard(idCard.toString());
            if(signFamily==null){
                errorContent.append("随访id:"+plan.get("id")+",签约code:,随访中的患者身份证在签约表中找不到数据");
                isAll=false;
                continue;
            }
            Long adminTeamId=signFamily.getAdminTeamId();
            if(adminTeamId==null||adminTeamId<=0){
                errorContent.append("随访id:"+plan.get("id")+",签约code:"+signFamily.getCode()+" 中的adminTeamId为空");
                isAll=false;
                continue;
            }
            AdminTeam adminTeam=adminTeamMap.get(signFamily.getAdminTeamId());
            if(adminTeam==null){
                errorContent.append("随访id:"+plan.get("id")+",签约code:"+signFamily.getCode()+",医生团队不存在");
                isAll=false;
                continue;
            }
            //统计机构------------------start ------------------
            //判断医生属于哪个机构
            String orgCodeTemp="";
            String orgCode=adminTeam.getOrgCode();
            if(StringUtils.isEmpty(orgCode)){
                errorContent.append("随访id:"+plan.get("id")+",团队Id:"+adminTeam.getId()+",随访的医生所属的团队(wlyy_admin_team)机构为空");
                isAll=false;
                continue;
            }
            //统计机构
            if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                //统计站
                orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
            }else{
                //统计社区
                orgCodeTemp=orgCode;
            }
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital==null){
                errorContent.append("随访id:"+plan.get("id")+",团队Id:"+adminTeam.getId()+",随访的医生所属的团队的机构不存在");
                isAll=false;
                continue;
            }
            String town =hospital.getTown();
            if(StringUtils.isEmpty(town)) {
                errorContent.append("随访id:"+plan.get("id")+",机构Id:"+hospital.getId()+",机构表的中的town为空");
                isAll=false;
                errorCount++;
                continue;
            }
            Town townObj =townsMap.get(town);
            if(townObj==null) {
                errorContent.append("随访id:"+plan.get("id")+",机构Id:"+hospital.getId()+",机构表的中的town不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            etlModel.setAdminTeam(adminTeam.getId()+"");
            etlModel.setHospital(orgCodeTemp);
            etlModel.setTown(hospital.getTown());
            etlModel.setCity(Constant.city);
            etlModel.setIdcard(signFamily.getIdcard());
            etlModels.add(etlModel);
            //统计数目+1
            cityCount++;
            townCount++;
            orgCount++;
            adminCount++;
        }
        //数据过滤清洗出脏数据  -----------end
        try{
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels);
            //保存数据
            dbStorage.saveByLevel1(returnDatas,yesterday,wlyyQuota);
        }catch (Exception e){
            e.printStackTrace();
            errorContent.append("统计失败:"+e.getMessage());
        }
        //保存日志
        quartzJobLog.setJobEndTime(new Date());
        quartzJobLog.setJobContent(saveContent(plans,adminCount,orgCount,townCount,cityCount,isAll,errorContent,errorCount));
        quartzJobLog.setJobType(isAll?"1":"0");
        quartzJobLogDao.save(quartzJobLog);
    }
    private String saveContent(List<Map<String, Object>> plans, Long qkCount, Long orgCount, Long townCount, Long cityCount, boolean isAll, StringBuffer errorContent, Long errorCount) {
        StringBuffer string=new StringBuffer("统计"+yesterday+" 的随访完成 ,数据库查询到随访数目:"+plans.size());
        string.append(",过滤的脏数据数目:"+errorCount);
        string.append(",统计到市的数据总数:"+cityCount);
        string.append(",统计到区的数据总数:"+townCount);
        string.append(",统计到机构的数据总数:"+orgCount);
        string.append(",统计到团队的数据总数:"+qkCount);
        string.append(",是否统计成功:"+isAll);
        if(!isAll){
            string.append(",失败原因:"+errorContent);
        }
        return string.toString();
    }
    public String getYesterday() {
        return yesterday;
    }
    public List<Map<String,Object>> getFvYesterday() {
        String sql=" select * from fv_plan a where unix_timestamp(a.update_time)>=unix_timestamp('"+yesterday+"') and unix_timestamp(a.update_time)< unix_timestamp('"+now+"')  ";
        return jdbcTemplate.queryForList(sql);
    }
    private void save(Map<String, Long> tjTownMap, String city, String cityName, String town, String townName, String org, String orgName, String doctorCode, String doctorName, String doctorJob, String level, String key) {
        WlyyQuotaResult wlyyQuotaResult = new WlyyQuotaResult();
        wlyyQuotaResult.setDel("1");
        wlyyQuotaResult.setCity(city);
        wlyyQuotaResult.setCityName(cityName);
        wlyyQuotaResult.setTown(town);
        wlyyQuotaResult.setTownName(townName);
        wlyyQuotaResult.setOrgCode(org);
        wlyyQuotaResult.setOrgName(orgName);
        wlyyQuotaResult.setQkdoctorJobName(doctorJob);
        wlyyQuotaResult.setQkdoctorName(doctorName);
        wlyyQuotaResult.setQkdoctorCode(doctorCode);
        wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
        wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
        wlyyQuotaResult.setQuotaDate(getYesterday());
        wlyyQuotaResult.setCreateTime(new Date());
        wlyyQuotaResult.setLevel1Type(level);
        //判断全科医生是否有随访量
        if (tjTownMap.containsKey(key)) {
            wlyyQuotaResult.setResult(tjTownMap.get(key) + "");
        } else {
            wlyyQuotaResult.setResult("0");
        }
        wlyyQuotaResultDao.save(wlyyQuotaResult);
    }
    public Properties getSystemProperties() {
        if (systemProperties == null) {
            InputStream is = null;
            try {
                is = this.getClass().getResourceAsStream("/application.properties");
                systemProperties = new Properties();
                systemProperties.load(is);
            } catch (IOException e1) {
                e1.printStackTrace();
            } finally {
                if (is != null) {
                    try {
                        is.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        return systemProperties;
    }
    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;
        }
    }
}

+ 0 - 220
patient-co-wlyy/src/main/java/com/yihu/wlyy/job/HealthGuideJob.java

@ -1,220 +0,0 @@
package com.yihu.wlyy.job;
import com.yihu.wlyy.entity.doctor.team.admin.AdminTeam;
import com.yihu.wlyy.entity.organization.Hospital;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.job.QuartzJobLog;
import com.yihu.wlyy.entity.patient.PatientHealthGuidance;
import com.yihu.wlyy.entity.patient.SignFamily;
import com.yihu.wlyy.job.elt.base.ETLModel;
import com.yihu.wlyy.job.elt.role.Level1Role;
import com.yihu.wlyy.job.elt.storage.DBStorage;
import com.yihu.wlyy.repository.address.TownDao;
import com.yihu.wlyy.repository.doctor.DoctorAdminTeamDao;
import com.yihu.wlyy.repository.job.QuartzJobLogDao;
import com.yihu.wlyy.repository.organization.HospitalDao;
import com.yihu.wlyy.repository.patient.PatientHealthGuidanceDao;
import com.yihu.wlyy.repository.patient.SignFamilyDao;
import com.yihu.wlyy.repository.statistics.WlyyQuotaResultDao;
import com.yihu.wlyy.web.quota.WlyyJobConfigVO;
import com.yihu.wlyy.web.quota.WlyyQuotaVO;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
import java.util.*;
/**
 * 健康指导的指标执行类
 */
@Component
public class HealthGuideJob implements Job {
    private WlyyQuotaVO wlyyQuota;//指标对象
    private WlyyJobConfigVO wlyyJobConfig;//配置对象
    @Autowired
    private WlyyQuotaResultDao wlyyQuotaResultDao;//指标结果Dao
    @Autowired
    private QuartzJobLogDao quartzJobLogDao;//执行日志Dao
    @Autowired
    private SignFamilyDao signFamilyDao;
    @Autowired
    private HospitalDao hospitalDao;
    @Autowired
    private TownDao townDao;
    @Autowired
    private PatientHealthGuidanceDao patientHealthGuidanceDao;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    @Autowired
    private Level1Role levelRole;
    @Autowired
    private DBStorage dbStorage;
    String yesterday;
    String now;
    @Override
    public void execute(JobExecutionContext context)
            throws JobExecutionException {
        SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
        //初始化参数
        JobDataMap map = context.getJobDetail().getJobDataMap();
        wlyyQuota = (WlyyQuotaVO) map.get("quota");
        wlyyJobConfig = (WlyyJobConfigVO) map.get("jobConfig");
        now= StringUtils.isEmpty(map.get("now"))?SignJob.getDayString(0):map.get("now").toString();
        yesterday= StringUtils.isEmpty(map.get("yesterday"))?SignJob.getDayString(-1):map.get("yesterday").toString();
        //计算指标
        computequota();
    }
    @Transactional
    private void computequota() {
        jdbcTemplate.execute("delete from wlyy_quota_result where quota_date='"+yesterday+"' and quato_code='"+3+"'");
        //新建任务日志对象
        QuartzJobLog quartzJobLog = new QuartzJobLog();
        quartzJobLog.setJobStartTime(new Date());
        quartzJobLog.setJobId(wlyyJobConfig.getId());
        quartzJobLog.setJobName(wlyyJobConfig.getJobName());
        //找出全部的团队
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
        Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
        for (AdminTeam adminTeam : adminTeams) {
            adminTeamMap.put(adminTeam.getId()+"", adminTeam);
        }
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospital2();
        Map<String, Hospital> hospitalsMap = new HashMap<String, Hospital>();
        for (Hospital hospital : hospitals) {
            hospitalsMap.put(hospital.getCode(), hospital);
        }
        //查找出厦门市全部的区
        List<Town> towns = townDao.findByCityCode(Constant.city);
        Map<String, Town> townsMap = new HashMap<String, Town>();
        for (Town town : towns) {
            townsMap.put(town.getCode(), town);
        }
        //找出今天的健康指导信息
        List<PatientHealthGuidance> patientHealthGuidances = patientHealthGuidanceDao.findByCzrqyYesterday(yesterday,now);
        Long cityCount = new Long(0L); //统计到市的数目
        Long townCount = new Long(0L); //统计到所有区的数目
        Long orgCount =new Long(0L);//统计到所有机构的数目
        Long adminCount = new Long(0L);//统计到所有团队的数目
        Long errorCount=new Long(0L);//脏数据
        Boolean isAll=true;//是否统计失败
        StringBuffer errorContent=new StringBuffer();
        //统计有已改簽的
        List<ETLModel> etlModels=new ArrayList<ETLModel>();
        //数据过滤清洗出脏数据  -----------start
        for(PatientHealthGuidance patientHealthGuidance:patientHealthGuidances){
            ETLModel etlModel=new ETLModel();
            String patient=patientHealthGuidance.getPatient();
            SignFamily signFamily= signFamilyDao.findByPatientAndType(patient,2);//只统计家庭签约
            if(signFamily == null) {
                errorContent.append("健康咨询id:"+patientHealthGuidance.getId()+",患者code:"+patient+",家庭签约不存在");
                isAll=false;
                continue;
            }
            String adminId=signFamily.getAdminTeamId()+"";//得到团队ID
            if(StringUtils.isEmpty(adminId)){
                errorContent.append("健康咨询id:"+patientHealthGuidance.getId()+",签约code:"+signFamily.getCode()+",咨询的家庭签约的团队AdminTeamCode为空");
                isAll=false;
                continue;
            }
            AdminTeam adminTeam = adminTeamMap.get(adminId);
            if(adminTeam==null){
                errorContent.append("健康咨询id:"+patientHealthGuidance.getId()+",签约code:"+signFamily.getCode()+",咨询的家庭签约的团队不存在");
                isAll=false;
                continue;
            }
            String orgCode=signFamily.getHospital();//得到机构id
            if(StringUtils.isEmpty(orgCode)){
                errorContent.append("健康咨询id:"+patientHealthGuidance.getId()+",签约code:"+signFamily.getCode()+",咨询的家庭签约的机构Hospital不存在");
                isAll=false;
                continue;
            }
            String orgCodeTemp="";
            //统计机构 -----------------start---------------------
            if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                //统计站
                orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
            }else{
                //统计社区
                orgCodeTemp=orgCode;
            }
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) {
                errorContent.append("健康咨询id:"+patientHealthGuidance.getId()+",机构code:"+orgCodeTemp+",健康咨询的医生所属的机构不存在");
                isAll=false;
                continue;
            }
            String town =hospital.getTown();
            if(StringUtils.isEmpty(town)) {
                errorContent.append("健康咨询id:"+patientHealthGuidance.getId()+",机构code:"+hospital.getCode()+",机构表的中的town为空");
                isAll=false;
                errorCount++;
                continue;
            }
            Town townObj =townsMap.get(town);
            if(townObj==null) {
                errorContent.append("健康咨询id:"+patientHealthGuidance.getId()+",机构code:"+hospital.getCode()+",机构表的中的town不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            etlModel.setAdminTeam(adminTeam.getId()+"");
            etlModel.setHospital(orgCodeTemp);
            etlModel.setTown(hospital.getTown());
            etlModel.setCity(Constant.city);
            etlModel.setIdcard(signFamily.getIdcard());
            etlModels.add(etlModel);
            //统计数目+1
            cityCount++;
            townCount++;
            orgCount++;
            adminCount++;
        }
        //数据过滤清洗出脏数据  -----------end
        try{
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels);
            //保存数据
            dbStorage.saveByLevel1(returnDatas,yesterday,wlyyQuota);
        }catch (Exception e){
            e.printStackTrace();
            errorContent.append("统计失败:"+e.getMessage());
        }
        //保存日志
        quartzJobLog.setJobEndTime(new Date());
        quartzJobLog.setJobContent(saveContent(patientHealthGuidances,adminCount,orgCount,townCount,cityCount,isAll,errorContent,errorCount));
        quartzJobLog.setJobType(isAll?"1":"0");
        quartzJobLogDao.save(quartzJobLog);
    }
    private String saveContent(List<PatientHealthGuidance> patientHealthGuidances, Long qkCount, Long orgCount, Long townCount, Long cityCount, boolean isAll, StringBuffer errorContent, Long errorCount) {
        StringBuffer string=new StringBuffer("统计"+yesterday+" 的健康指导数据完成 ,数据库查询到健康指导数目:"+patientHealthGuidances.size());
        string.append(",过滤的脏数据数目:"+errorCount);
        string.append(",统计到市的数据总数:"+cityCount);
        string.append(",统计到区的数据总数:"+townCount);
        string.append(",统计到机构的数据总数:"+orgCount);
        string.append(",统计到团队的数据总数:"+qkCount);
        string.append(",是否统计成功:"+isAll);
        if(!isAll){
            string.append(",失败原因:"+errorContent);
        }
        return string.toString();
    }
    public String getYesterday() {
        return yesterday;
    }
}

+ 0 - 59
patient-co-wlyy/src/main/java/com/yihu/wlyy/job/InstantiationTracingBeanPostProcessor.java

@ -1,59 +0,0 @@
package com.yihu.wlyy.job;
import com.yihu.wlyy.entity.job.QuartzJobConfig;
import com.yihu.wlyy.entity.statistics.WlyyQuota;
import com.yihu.wlyy.repository.job.JobConfigDao;
import com.yihu.wlyy.repository.statistics.QuotaDao;
import com.yihu.wlyy.web.quota.WlyyJobConfigVO;
import com.yihu.wlyy.web.quota.WlyyQuotaVO;
import org.quartz.Scheduler;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * Created by Administrator on 2016/8/16.
 * 现在用的数据库保存job不需要用这个类
 */
//@Component
public class InstantiationTracingBeanPostProcessor implements ApplicationListener<ContextRefreshedEvent> {
    @Autowired
    private SchedulerFactoryBean schedulerFactoryBean;
    @Autowired
    private QuotaDao quotaDao;
    @Autowired
    private JobConfigDao jobConfigDao;
    private Scheduler scheduler = null;
    @Autowired
    private QuartzHelper quartzHelper;
    @Override
    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
        try {
            scheduler = schedulerFactoryBean.getScheduler();
            //查询所有需要开始运行的任务的指标
            List<QuartzJobConfig> jobConfigList=jobConfigDao.findByStatus("1");
            for(QuartzJobConfig quartzJobConfig :jobConfigList){
                WlyyQuota wlyyQuota=quotaDao.findOne(quartzJobConfig.getQuotaId());
                WlyyQuotaVO wlyyQuotaVO= new WlyyQuotaVO();
                WlyyJobConfigVO wlyyJobConfigVO=new WlyyJobConfigVO();
                BeanUtils.copyProperties(wlyyQuota,wlyyQuotaVO);
                BeanUtils.copyProperties(quartzJobConfig,wlyyJobConfigVO);
                Map<String,Object> params=new HashMap<String,Object>();
                params.put("quota",wlyyQuotaVO);
                params.put("jobConfig",wlyyJobConfigVO);
                quartzHelper.addJob(Class.forName(quartzJobConfig.getJobClass()), quartzJobConfig.getQuartzCron(), quartzJobConfig.getId(),params);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

+ 0 - 439
patient-co-wlyy/src/main/java/com/yihu/wlyy/job/SignAgeGroupDiseaseJob.java

@ -1,439 +0,0 @@
package com.yihu.wlyy.job;
import com.yihu.wlyy.entity.doctor.team.admin.AdminTeam;
import com.yihu.wlyy.entity.organization.Hospital;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.job.QuartzJobLog;
import com.yihu.wlyy.entity.patient.SignFamily;
import com.yihu.wlyy.entity.statistics.WlyyQuotaResult;
import com.yihu.wlyy.repository.address.TownDao;
import com.yihu.wlyy.repository.doctor.DoctorAdminTeamDao;
import com.yihu.wlyy.repository.job.QuartzJobLogDao;
import com.yihu.wlyy.repository.organization.HospitalDao;
import com.yihu.wlyy.repository.patient.SignFamilyDao;
import com.yihu.wlyy.repository.statistics.WlyyQuotaResultDao;
import com.yihu.wlyy.util.IdCardUtil;
import com.yihu.wlyy.web.quota.WlyyJobConfigVO;
import com.yihu.wlyy.web.quota.WlyyQuotaVO;
import org.json.JSONArray;
import org.json.JSONObject;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
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.*;
/**
 * 签约下按年龄分组后再按疾病统计
 */
@Component
public class SignAgeGroupDiseaseJob implements Job {
    private WlyyQuotaVO wlyyQuota;//指标对象
    private WlyyJobConfigVO wlyyJobConfig;//配置对象
    @Autowired
    private WlyyQuotaResultDao wlyyQuotaResultDao;//指标结果Dao
    @Autowired
    private QuartzJobLogDao quartzJobLogDao;//执行日志Dao
    @Autowired
    private SignFamilyDao signFamilyDao;
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    @Autowired
    private HospitalDao hospitalDao;
    @Autowired
    private TownDao townDao;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private StringRedisTemplate redisTemplate;
    String yesterday;
    String now;
    @Override
    public void execute(JobExecutionContext context)
            throws JobExecutionException {
        SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
        //初始化参数
        JobDataMap map = context.getJobDetail().getJobDataMap();
        wlyyQuota = (WlyyQuotaVO) map.get("quota");
        wlyyJobConfig = (WlyyJobConfigVO) map.get("jobConfig");
        now = StringUtils.isEmpty(map.get("now")) ? SignAgeGroupDiseaseJob.getDayString(0) : map.get("now").toString();
        yesterday = StringUtils.isEmpty(map.get("yesterday")) ? SignAgeGroupDiseaseJob.getDayString(-1) : map.get("yesterday").toString();
        computequotaByPatientAge();
    }
    /**
     * 机构维度患者年龄维度计算指标
     */
    @Transactional
    private void computequotaByPatientAge() {
        try {
            jdbcTemplate.execute("delete from wlyy_quota_result where quota_date='"+yesterday+"' and quato_code='"+12+"'");
            //新建任务日志对象
            QuartzJobLog wlyyJobLog = new QuartzJobLog();
            wlyyJobLog.setJobStartTime(new Date());
            wlyyJobLog.setJobId(wlyyJobConfig.getId());
            wlyyJobLog.setJobName(wlyyJobConfig.getJobName());
            List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
            Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
            for (AdminTeam adminTeam : adminTeams) {
                adminTeamMap.put(adminTeam.getId()+"", adminTeam);
            }
            //查找出系统全部的机构
            List<Hospital> hospitals = hospitalDao.findHospital2();
            Map<String, Hospital> hospitalsMap = new HashMap<String, Hospital>();
            for (Hospital hospital : hospitals) {
                hospitalsMap.put(hospital.getCode(), hospital);
            }
            //查找出厦门市全部的区
            List<Town> towns = townDao.findByCityCode(Constant.city);
            Map<String, Town> townsMap = new HashMap<String, Town>();
            for (Town town : towns) {
                townsMap.put(town.getCode(), town);
            }
            //找出今天的签约信息
            List<SignFamily> signFamilies = signFamilyDao.findByJiatingSignYesterdayExpensesStatus(yesterday, now);
            //数组里面第一个是健康人群 第二个是慢病人群 第三个是65岁以上人群
            Map<String, Map<String, Map>> cityAgeMap = new HashMap<String, Map<String, Map>>();//key是市行政代码 目前只有厦门市
            Map<String,Map> temp =new HashMap<String,Map>();
            cityAgeMap.put(Constant.city, temp);
            Map<String, Map<String, Map>> townAgeMap = new HashMap<String, Map<String, Map>>();//key是区行政代码
            Map<String, Map<String, Map>> orgAgeMap = new HashMap<String, Map<String, Map>>();//key是机构代码
            //统计有签约的
            Long cityCount = 0L; //统计到市的数目
            Long townCount = 0L; //统计到所有区的数目
            Long orgCount = 0L;//统计到所有机构的数目
            Long qkCount = 0L;//统计到所有全科医生的数目
            Long errorCount=0L;
            boolean isAll=true;//是否统计失败
            StringBuffer errorContent=new StringBuffer();
            for (SignFamily signFamily : signFamilies) {
                String orgCode = signFamily.getHospital();
                if(StringUtils.isEmpty(orgCode)) {
                    errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据为空");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                String orgCodeTemp="";
                if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                    //站
                    orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
                }else{
                    //社区
                    orgCodeTemp=orgCode;
                }
                //判断社区有没有值
                Hospital hospital=hospitalsMap.get(orgCodeTemp);
                if(hospital == null) {
                    errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据不存在");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                Long adminId=signFamily.getAdminTeamId();
                if(adminId == null||adminId<=0) {
                    errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据为空");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                AdminTeam adminTeam=adminTeamMap.get(signFamily.getAdminTeamId()+"");
                if(adminTeam == null) {
                    errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据不存在");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                String idCard=signFamily.getIdcard();
                if(idCard == null||((idCard.length()!=18&&idCard.length()!=15))) {
                    errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的idCard数据异常");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                String town =hospital.getTown();
                if(StringUtils.isEmpty(town)) {
                    errorContent.append("签约code:"+signFamily.getCode()+",机构表的中的town为空");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                Town townObj =townsMap.get(town);
                if(townObj==null) {
                    errorContent.append("签约code:"+signFamily.getCode()+",机构表的中的town不存在");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                int age = IdCardUtil.getAgeForIdcard(idCard);//根据card解析年龄
                String ageCode = getAgeCode(age);//得到年龄的code
                boolean hasGXY = false;//有高血压
                boolean hasTNB = false;//有糖尿病
                //如果是慢病的 统计高血压的 糖尿病  1高血压,2糖尿病  3 糖尿病和高血压 4健康人群数
                String diseaseType="";
                String jsonString = redisTemplate.opsForValue().get("disease:" + signFamily.getPatient());
                if (StringUtils.isEmpty(jsonString)) {
                    diseaseType="4";//健康人群
                }else{
                    //排除数据 只留下高血压和糖尿病
                    List<JSONObject> jsonObjects = new ArrayList<JSONObject>();
                    JSONArray redisValues = new JSONArray(jsonString);
                    if(redisValues.length()>0){
                        for (Object obj : redisValues) {
                            JSONObject redisValue = (JSONObject)(obj);
                            if(!redisValue.has("signType")){
                                continue;
                            }
                            //排除掉三师签约
                            if ("1".equals(redisValue.get("signType").toString())) {
                                continue;
                            }
                            String disease =  redisValue.getString("disease");
                            if ("1".equals(disease)) {
                                jsonObjects.add(redisValue);
                                hasGXY = true;//设置有高血压
                                diseaseType="1";
                            }
                            if ("2".equals(disease)) {
                                jsonObjects.add(redisValue);
                                hasTNB = true;//设置有糖尿病
                                diseaseType="2";
                            }
                        }
                        if(hasGXY&&hasTNB){
                            diseaseType="3";//高血压和糖尿病
                        }
                    }else{
                        diseaseType="4";//健康人群
                    }
                }
                //统计市
                compute(cityAgeMap, Constant.city, ageCode, diseaseType);
                cityCount++;
                //统计区
                compute(townAgeMap, town, ageCode, diseaseType);
                townCount++;
                //统计机构
                //统计站
                orgCode=hospital.getCode();
                if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                    //统计站
                     orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
                    //统计机构
                    compute(orgAgeMap, orgCodeTemp, ageCode, diseaseType);
                } else {
                    compute(orgAgeMap, hospital.getCode(), ageCode, diseaseType);
                }
                orgCount++;
            }
            //保存统计数据
            // 保存市的统计数据
            for (Map.Entry<String, Map<String, Map>> entry : cityAgeMap.entrySet()) {
               Map<String, Map> oneAgeMap = entry.getValue();
               for(int i=1;i<7;i++){
                   for(int j=1;j<5;j++){
                       String key_2=i+"";
                       String key_3=j+"";
                       String city=Constant.city;
                       String cityName=Constant.cityName;
                       String town="";
                       String townName="";
                       String org="";
                       String orgName="";
                       save(oneAgeMap, key_2, key_3, city, cityName, town, townName, org, orgName,"4");
                   }
               }
            }
            //保存区级
            for (Map.Entry<String, Town> entry : townsMap.entrySet()) {
                //判断该区是否有统计数据
                Map<String, Map> oneAgeMap = townAgeMap.get(entry.getKey());//得到当个区的统计数据
                Town townObj = entry.getValue();//得到区级信息
                for(int i=1;i<7;i++){
                    for(int j=1;j<5;j++){
                        String key_2=i+"";
                        String key_3=j+"";
                        String city=Constant.city;
                        String cityName=Constant.cityName;
                        String town=townObj.getCode();
                        String townName=townObj.getName();
                        String org="";
                        String orgName="";
                        save(oneAgeMap, key_2, key_3, city, cityName, town, townName, org, orgName,"3");
                    }
                }
            }
            for (Map.Entry<String, Hospital> entry : hospitalsMap.entrySet()) {
                //判断该机构是否有统计数据
                Map<String, Map> oneAgeMap = orgAgeMap.get(entry.getKey());//得到当个机构的统计数据
                Hospital hospital = entry.getValue();//得到机构信息
                for(int i=1;i<7;i++){
                    for(int j=1;j<5;j++){
                        Hospital hospital1=entry.getValue();
                        if(hospital1==null)continue;
                        String key_2=i+"";
                        String key_3=j+"";
                        String city=Constant.city;
                        String cityName=Constant.cityName;
                        String town=hospital.getTown();
                        String townName=hospital.getTownName();
                        String org=hospital.getCode();
                        String orgName=hospital.getName();
                        save(oneAgeMap, key_2, key_3, city, cityName, town, townName, org, orgName,"2");
                    }
                }
            }
            wlyyJobLog.setJobEndTime(new Date());
            wlyyJobLog.setJobContent(saveContent(signFamilies,qkCount,orgCount,townCount,cityCount,isAll,errorContent,errorCount));
            wlyyJobLog.setJobType(isAll?"1":"0");
            quartzJobLogDao.save(wlyyJobLog);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    private String saveContent(List<SignFamily> signFamilys, Long qkCount, Long orgCount, Long townCount, Long cityCount, boolean isAll, StringBuffer errorContent,long errorCount) {
        StringBuffer string=new StringBuffer("统计"+yesterday+" 的签约数据完成 ,数据库查询到签约数目:"+signFamilys.size());
        string.append(",过滤的脏数据数目:"+errorCount);
        string.append(",统计到市的数据总数:"+cityCount);
        string.append(",统计到区的数据总数:"+townCount);
        string.append(",统计到机构的数据总数:"+orgCount);
        string.append(",统计到团队的数据总数:"+qkCount);
        string.append(",是否统计成功:"+isAll);
        if(!isAll){
            string.append(",失败原因:"+errorContent);
        }
        return string.toString();
    }
    private void save(Map<String, Map> oneAgeMap, String key_2, String key_3, String city, String cityName, String town, String townName, String org, String orgName,String level) {
        WlyyQuotaResult wlyyQuotaResult = new WlyyQuotaResult();
        wlyyQuotaResult.setDel("1");
        wlyyQuotaResult.setCity(city);
        wlyyQuotaResult.setCityName(cityName);
        wlyyQuotaResult.setTown(town);
        wlyyQuotaResult.setTownName(townName);
        wlyyQuotaResult.setOrgCode(org);
        wlyyQuotaResult.setOrgName(orgName);
        wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
        wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
        wlyyQuotaResult.setQuotaDate(getYesterday());
        wlyyQuotaResult.setCreateTime(new Date());
        wlyyQuotaResult.setLevel1Type(level);//等级
        wlyyQuotaResult.setLevel2Type(key_2);
        wlyyQuotaResult.setLevel2TypeName(Constant.getLevelAgeName(key_2));
        wlyyQuotaResult.setLevel3Type(key_3);
        wlyyQuotaResult.setLevel3TypeName(Constant.getLevelDiseaseName(key_3));
        if (oneAgeMap != null && oneAgeMap.containsKey(key_2)) {
            Map<String,Long> key3Map=oneAgeMap.get(key_2);
            if(key3Map!=null&&key3Map.containsKey(key_3)){
                wlyyQuotaResult.setResult(key3Map.get(key_3) + "");
            }else{
                wlyyQuotaResult.setResult("0");
            }
        } else {
            wlyyQuotaResult.setResult("0");
        }
        wlyyQuotaResultDao.save(wlyyQuotaResult);
    }
    /**
     * 统计方案
     * @param rootMap 数据存放的map
     * @param rootKey 数据的key 机构 区  市
     * @param ageCode 年龄的key
     * @param diseaseType 疾病类型 1是高血压 2是糖尿病 3是高血压和糖尿病 4是健康人群
     */
    private void compute(Map<String, Map<String, Map>> rootMap, String rootKey, String ageCode, String diseaseType) {
        if (rootMap.containsKey(rootKey)) {
            //得到市下面的所有的年龄map
            Map<String, Map> groupMapTemp = rootMap.get(rootKey);
            if(groupMapTemp.containsKey(ageCode)){
                //得到这个年龄下的患者map
                Map<String,Long> mape= groupMapTemp.get(ageCode);
                if(mape.containsKey(diseaseType)){
                    mape.put(diseaseType,mape.get(diseaseType)+1L); //key是三级维度
                }else{
                    mape.put(diseaseType,1L); //key是三级维度
                }
            }else{
                //新增疾病的统计map
                Map<String, Long> groupMapTemp1 = new HashMap<String, Long>();
                groupMapTemp1.put(diseaseType, 1L);//key是三级维度
                groupMapTemp.put(ageCode,groupMapTemp1);//key是二级维度
            }
        } else {
            //没有就新建统计数据  新增疾病的统计map
            Map<String, Long> groupMapTemp = new HashMap<String, Long>();
            groupMapTemp.put(diseaseType, 1L); //key是三级维度
            //把统计疾病的map放入对应的年龄组map中
            Map<String, Map> groupMapTemp2 = new HashMap<String, Map>();
            groupMapTemp2.put(ageCode,groupMapTemp); //key是二级维度
            //把年龄组map放入市的map里面
            rootMap.put(rootKey, groupMapTemp2); //key是一级维度
        }
    }
    /*
    得到昨天的日期字符串  yyyy-MM-dd
     */
    public String getYesterday() {
        return yesterday;
    }
    /**
     * 根据年龄得到对应的code
     *
     * @param age
     * @return
     */
    public String getAgeCode(int age) {
        if (age < 7) {
            return Constant.level_age_1;
        } else if (age >= 7 && age < 18) {
            return Constant.level_age_2;
        } else if (age >= 18 && age < 30) {
            return Constant.level_age_3;
        } else if (age >= 30 && age < 50) {
            return Constant.level_age_4;
        } else if (age >= 50 && age < 65) {
            return Constant.level_age_5;
        } else {
            return Constant.level_age_6;
        }
    }
    public static String getDayString(Integer size) {
        Date date = new Date();//取时间
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        calendar.add(calendar.DATE, size);//把日期往后增加一天.整数往后推,负数往前移动
        date = calendar.getTime(); //这个时间就是日期往后推一天的结果
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        String dateString = formatter.format(date);
        return dateString;
    }
    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;
        }
    }
    public static void main(String[] args) {
        getDayString(0);
    }
}

+ 0 - 864
patient-co-wlyy/src/main/java/com/yihu/wlyy/job/SignJob.java

@ -1,864 +0,0 @@
package com.yihu.wlyy.job;
import com.yihu.wlyy.entity.doctor.team.admin.AdminTeam;
import com.yihu.wlyy.entity.organization.Hospital;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.doctor.team.sign.DoctorPatientGroupInfo;
import com.yihu.wlyy.entity.job.QuartzJobLog;
import com.yihu.wlyy.entity.patient.SignFamily;
import com.yihu.wlyy.entity.statistics.WlyyQuotaResult;
import com.yihu.wlyy.job.elt.base.ETLModel;
import com.yihu.wlyy.job.elt.role.Level1Role;
import com.yihu.wlyy.job.elt.role.PatientAgeRole;
import com.yihu.wlyy.job.elt.role.PatientGroupRole;
import com.yihu.wlyy.job.elt.role.PatientSexRole;
import com.yihu.wlyy.job.elt.storage.DBStorage;
import com.yihu.wlyy.repository.address.TownDao;
import com.yihu.wlyy.repository.doctor.DoctorAdminTeamDao;
import com.yihu.wlyy.repository.doctor.DoctorPatientGroupInfoDao;
import com.yihu.wlyy.repository.job.QuartzJobLogDao;
import com.yihu.wlyy.repository.organization.HospitalDao;
import com.yihu.wlyy.repository.patient.SignFamilyDao;
import com.yihu.wlyy.repository.statistics.WlyyQuotaResultDao;
import com.yihu.wlyy.web.quota.WlyyJobConfigVO;
import com.yihu.wlyy.web.quota.WlyyQuotaVO;
import org.json.JSONArray;
import org.json.JSONObject;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
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.*;
/**
 * 签约的指标执行类
 */
@Component
public class SignJob implements Job {
    private WlyyQuotaVO wlyyQuota;//指标对象
    private WlyyJobConfigVO wlyyJobConfig;//配置对象
    @Autowired
    private WlyyQuotaResultDao wlyyQuotaResultDao;//指标结果Dao
    @Autowired
    private QuartzJobLogDao quartzJobLogDao;//执行日志Dao
    @Autowired
    private SignFamilyDao signFamilyDao;
    @Autowired
    private HospitalDao hospitalDao;
    @Autowired
    private TownDao townDao;
    @Autowired
    private DoctorPatientGroupInfoDao doctorPatientGroupInfoDao;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    @Autowired
    private Level1Role levelRole;
    @Autowired
    private PatientAgeRole patientAgeRole;
    @Autowired
    private PatientGroupRole patientGroupRole;
    @Autowired
    private PatientSexRole patientSexRole;
    @Autowired
    private DBStorage dbStorage;
    String yesterday;
    String now;
    @Override
    public void execute(JobExecutionContext context)
            throws JobExecutionException {
        SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
        //初始化参数
        JobDataMap map = context.getJobDetail().getJobDataMap();
        wlyyQuota = (WlyyQuotaVO) map.get("quota");
        wlyyJobConfig = (WlyyJobConfigVO) map.get("jobConfig");
        now = StringUtils.isEmpty(map.get("now")) ? SignJob.getDayString(0) : map.get("now").toString();
        yesterday = StringUtils.isEmpty(map.get("yesterday")) ? SignJob.getDayString(-1) : map.get("yesterday").toString();
        String level1 = wlyyQuota.getLevel1();//得到一级维度
        String level2 = wlyyQuota.getLevel2();//得到二级维度
        //如果一级维度为空 不进行统计
        if (!StringUtils.isEmpty(level1)) {
            if (StringUtils.isEmpty(level2)) {
                //線刪除今天的数据
                //2级维度是空按照一级的机构唯独计算指标
                computequota();
            } else {
                switch (level2) {
                    case "1": {
                        //線刪除今天的数据
                        //患者性别
                        computequotaByPatientSex();
                        break;
                    }
                    case "2": {
                        //患者分组
                        computequotaByPatientGroup();
                        break;
                    }
                    case "3": {
                        //患者年龄
                        computequotaByPatientAge();
                        break;
                    }
                }
            }
        }
    }
    /**
     * 机构维度下患者性别维度计算指标
     */
    @Transactional
    private void computequotaByPatientSex() {
        jdbcTemplate.execute("delete from wlyy_quota_result where quota_date='" + yesterday + "' and quato_code='" + 6 + "'");
        try{
            //新建任务日志对象
            QuartzJobLog quartzJobLog = new QuartzJobLog();
            quartzJobLog.setJobStartTime(new Date());
            quartzJobLog.setJobId(wlyyJobConfig.getId());
            quartzJobLog.setJobName(wlyyJobConfig.getJobName());
            //查找出系统全部的团队
            List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
            Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
            for (AdminTeam adminTeam : adminTeams) {
                adminTeamMap.put(adminTeam.getId()+"", adminTeam);
            }
            //查找出系统全部的机构
            List<Hospital> hospitals = hospitalDao.findHospitalzxFWZ();
            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<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterdayExpensesStatus(yesterday, now);
            Long cityCount = new Long(0L); //统计到市的数目
            Long townCount = new Long(0L); //统计到所有区的数目
            Long orgCount =new Long(0L);//统计到所有机构的数目
            Long adminCount = new Long(0L);//统计到所有团队的数目
            Long errorCount=new Long(0L);//脏数据
            Boolean isAll=true;//是否统计失败
            StringBuffer errorContent=new StringBuffer();
            //统计有已改簽的
            List<ETLModel> etlModels=new ArrayList<ETLModel>();
            //数据过滤清洗出脏数据  -----------start
            for(SignFamily signFamily:signFamilys){
                ETLModel etlModel=new ETLModel();
                String orgCode = signFamily.getHospital();
                if(StringUtils.isEmpty(orgCode)) {
                    errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据为空");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                String orgCodeTemp="";
                if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                    //站
                    orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
                }else{
                    //社区
                    orgCodeTemp=orgCode;
                }
                //判断社区有没有值
                Hospital hospital=hospitalsMap.get(orgCodeTemp);
                if(hospital == null) {
                    errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据不存在");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                Long adminId=signFamily.getAdminTeamId();
                if(adminId == null||adminId<=0) {
                    errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据为空");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                AdminTeam adminTeam=adminTeamMap.get(signFamily.getAdminTeamId()+"");
                if(adminTeam == null) {
                    errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据不存在");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                String idCard=signFamily.getIdcard();
                if(idCard == null||((idCard.length()!=18&&idCard.length()!=15))) {
                    errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的idCard数据异常");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                String town =hospital.getTown();
                if(StringUtils.isEmpty(town)) {
                    errorContent.append("签约code:"+signFamily.getCode()+",机构表的中的town为空");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                Town townObj =townsMap.get(town);
                if(townObj==null) {
                    errorContent.append("签约code:"+signFamily.getCode()+",机构表的中的town不存在");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                etlModel.setHospital(orgCodeTemp);
                etlModel.setTown(hospital.getTown());
                etlModel.setCity(Constant.city);
                etlModel.setIdcard(signFamily.getIdcard());
                etlModels.add(etlModel);
                //统计数目+1
                cityCount++;
                townCount++;
                orgCount++;
                adminCount++;
            }
            //数据过滤清洗出脏数据  -----------end
            try{
                //统计数据
                List<Map<String, List<ETLModel>>>  returnData1s= levelRole.elt(etlModels);
                List<Map<String, Map<String, List<ETLModel>>>> patientSexRoleData= patientSexRole.elt(returnData1s);
                //保存数据
                dbStorage.saveByLevel2(patientSexRoleData,yesterday,wlyyQuota,3,1);
            }catch (Exception e){
                e.printStackTrace();
                errorContent.append("统计失败:"+e.getMessage());
            }
            //保存日志
            quartzJobLog.setJobEndTime(new Date());
            quartzJobLog.setJobContent(saveContent(signFamilys,adminCount,orgCount,townCount,cityCount,isAll,errorContent,errorCount));
            quartzJobLog.setJobType(isAll?"1":"0");
            quartzJobLogDao.save(quartzJobLog);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    /**
     * 机构维度患者分组维度计算指标
     */
    @Transactional
    private void computequotaByPatientGroup() {
        jdbcTemplate.execute("delete from wlyy_quota_result where quota_date='" + yesterday + "' and quato_code='" + 7 + "'");
        try {
            //数组里面第一个是健康人群 第二个是慢病人群 第三个是65岁以上人群
            Map<String, Map<String, Long>> cityGroupMap = new HashMap<String, Map<String, Long>>();//key是市行政代码 目前只有厦门市
            cityGroupMap.put(Constant.city, new HashMap<String, Long>());
            Map<String, Map<String, Long>> townGroupMap = new HashMap<String, Map<String, Long>>();//key是区行政代码
            Map<String, Map<String, Long>> orgGroupMap = new HashMap<String, Map<String, Long>>();//key是机构代码
            //新建任务日志对象
            QuartzJobLog QuartzJobLog = new QuartzJobLog();
            QuartzJobLog.setJobStartTime(new Date());
            QuartzJobLog.setJobId(wlyyJobConfig.getId());
            QuartzJobLog.setJobName(wlyyJobConfig.getJobName());
            //查找出系统全部的团队
            List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
            Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
            for (AdminTeam adminTeam : adminTeams) {
                adminTeamMap.put(adminTeam.getId()+"", adminTeam);
            }
            //查找出系统全部的机构
            List<Hospital> hospitals = hospitalDao.findHospital2();
            Map<String, Hospital> hospitalsMap = new HashMap<String, Hospital>();
            for (Hospital hospital : hospitals) {
                hospitalsMap.put(hospital.getCode(), hospital);
                Map<String, Long> one = new HashMap<String, Long>();
                one.put("1", 0L);
                one.put("2", 0L);
                one.put("3", 0L);
                one.put("4", 0L);
                one.put("5", 0L);
                one.put("6", 0L);
                orgGroupMap.put(hospital.getCode(), one);
            }
            //查找出厦门市全部的区
            List<Town> towns = townDao.findByCityCode(Constant.city);
            Map<String, Town> townsMap = new HashMap<String, Town>();
            for (Town town : towns) {
                townsMap.put(town.getCode(), town);
                Map<String, Long> one = new HashMap<String, Long>();
                one.put("1", 0L);
                one.put("2", 0L);
                one.put("3", 0L);
                one.put("4", 0L);
                one.put("5", 0L);
                one.put("6", 0L);
                townGroupMap.put(town.getCode(), one);
            }
            //找出今天的签约信息
            List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterdayExpensesStatus(yesterday, now);
            Long cityCount = 0L; //统计到市的数目
            Long townCount = 0L; //统计到所有区的数目
            Long orgCount = 0L;//统计到所有机构的数目
            Long qkCount = 0L;//统计到所有全科医生的数目
            Long errorCount=0L;//错误数目
            boolean isAll=true;//是否统计失败
            StringBuffer errorContent=new StringBuffer();
            //统计有签约的
            for (SignFamily signFamily : signFamilys) {
                String patient = signFamily.getPatient();
                //设置查看病人所在分组
                List<DoctorPatientGroupInfo> dctorPatientGroupInfo = doctorPatientGroupInfoDao.findByMorenPatient(patient);
                String group ="";//得到该签约病人的所在分组 1 普通 2 慢病 3是 65岁以上人群  4是 高血压 5是糖尿病 100是高血压和糖尿病
                if (dctorPatientGroupInfo != null && dctorPatientGroupInfo.size() > 0) {
                    group=dctorPatientGroupInfo.get(0).getGroup();
                } else {
                    errorContent.append("签约code:"+signFamily.getCode()+",患者未分组");
                    group="1";
                }
                String orgCode = signFamily.getHospital();
                if(StringUtils.isEmpty(orgCode)) {
                    errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据为空");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                String orgCodeTemp="";
                if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                    //站
                    orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
                }else{
                    //社区
                    orgCodeTemp=orgCode;
                }
                //判断社区有没有值
                Hospital hospital=hospitalsMap.get(orgCodeTemp);
                if(hospital == null) {
                    errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据不存在");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                Long adminId=signFamily.getAdminTeamId();
                if(adminId == null||adminId<=0) {
                    errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据为空");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                AdminTeam adminTeam=adminTeamMap.get(signFamily.getAdminTeamId()+"");
                if(adminTeam == null) {
                    errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据不存在");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                String idCard=signFamily.getIdcard();
                if(idCard == null||((idCard.length()!=18&&idCard.length()!=15))) {
                    errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的idCard数据异常");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                String town =hospital.getTown();
                if(StringUtils.isEmpty(town)) {
                    errorContent.append("签约code:"+signFamily.getCode()+",机构表的中的town为空");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                Town townObj =townsMap.get(town);
                if(townObj==null) {
                    errorContent.append("签约code:"+signFamily.getCode()+",机构表的中的town不存在");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                //统计市  现在只有厦门市 默认先写死 后面再改
                compute_level2_2(cityGroupMap, group,Constant.city);
                cityCount++;
                //统计区
                compute_level2_2(townGroupMap, group,town);
                townCount++;
                //统计站
                orgCode=hospital.getCode();
                if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                    //统计站
                   orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
                    //统计机构
                   compute_level2_2(orgGroupMap, group,orgCodeTemp);
                } else {
                    //统计机构
                    compute_level2_2(orgGroupMap, group,hospital.getCode());
                }
                orgCount++;
                boolean hasGXY = false;//有高血压
                boolean hasTNB = false;//有糖尿病
                if ("2".equals(group)) {
                    //如果是慢病的 统计高血压的 糖尿病  1高血压,2糖尿病
                    String jsonString = redisTemplate.opsForValue().get("disease:" + patient);
                    if (StringUtils.isEmpty(jsonString)) {
                        continue;
                    }
                    //排除数据 只留下高血压和糖尿病
                    List<JSONObject> jsonObjects = new ArrayList<JSONObject>();
                    JSONArray redisValues = new JSONArray(jsonString);
                    for (Object obj : redisValues) {
                        JSONObject redisValue = (JSONObject)(obj);
                        if(!redisValue.has("signType")){
                            continue;
                        }
                        //排除掉三师签约
                        if ("1".equals(redisValue.get("signType").toString())) {
                            continue;
                        }
                        String disease =  redisValue.getString("disease");
                        if ("1".equals(disease)) {
                            jsonObjects.add(redisValue);
                            hasGXY = true;//设置有高血压
                        }
                        if ("2".equals(disease)) {
                            jsonObjects.add(redisValue);
                            hasTNB = true;//设置有糖尿病
                        }
                    }
                    if(jsonObjects.size()==0){
                        continue;//如果没有高血压和糖尿病 不统计
                    }
                    if (hasGXY && hasTNB) {
                        group = "100";//有高血压又有糖尿病
                    } else if(hasGXY){
                        group = 4 + "";//4高血压,5糖尿病
                    }else if(hasTNB){
                        group = 5 + "";//4高血压,5糖尿病
                    }
                    //统计市  现在只有厦门市 默认先写死 后面再改
                    compute_level2_2(cityGroupMap, group,Constant.city);
                    //统计区
                    compute_level2_2(townGroupMap, group,town);
                    //统计站
                    orgCode=hospital.getCode();
                    if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                        //统计站
                        orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
                        //统计机构
                        compute_level2_2(orgGroupMap, group,orgCodeTemp);
                    } else {
                        //统计机构
                        compute_level2_2(orgGroupMap, group,hospital.getCode());
                    }
                }
            }
            //保存统计数据
            //保存市的统计数据
            for (Map.Entry<String, Map<String, Long>> entry : cityGroupMap.entrySet()) {
                //保存健康人群
                Map<String, Long> oneMap=entry.getValue();
                for(Map.Entry<String, Long> entryCh: oneMap.entrySet()){
                    String city=entry.getKey();
                    String cityName=Constant.cityName;
                    String town="";
                    String townName="";
                    String org="";
                    String orgName="";
                    String level="4";
                    String key=entryCh.getKey();
                    save_level2_2(oneMap, city, cityName, town, townName, org, orgName, level, key);
                }
            }
            //保存区级
            //保存区的统计数据
            for (Map.Entry<String, Town> townEntry : townsMap.entrySet()) {
                //判断该区是否有统计数据
                Map<String, Long> oneTownGroupMap = townGroupMap.get(townEntry.getKey());//得到当个区的统计数据
                Town townObj = townEntry.getValue();//得到区级信息
                for(Map.Entry<String, Long> entryCh: oneTownGroupMap.entrySet()){
                    String city=entryCh.getKey();
                    String cityName=Constant.cityName;
                    String town=townObj.getCode();
                    String townName=townObj.getName();
                    String org="";
                    String orgName="";
                    String level="3";
                    String key=entryCh.getKey();
                    save_level2_2(oneTownGroupMap, city, cityName, town, townName, org, orgName, level, key);
                }
            }
            //保存机构
            for (Map.Entry<String, Hospital> hospitalEntry : hospitalsMap.entrySet()) {
                //判断该机构是否有统计数据
                Map<String, Long> oneOrgGroupMap = orgGroupMap.get(hospitalEntry.getKey());//得到当个机构的统计数据
                Hospital hospital = hospitalEntry.getValue();//得到区级信息
                for(Map.Entry<String, Long> entryCh: oneOrgGroupMap.entrySet()){
                    Hospital hospital1=hospitalEntry.getValue();
                    if(hospital1==null)continue;
                    String city=entryCh.getKey();
                    String cityName=Constant.cityName;
                    String town=hospital.getTown();
                    String townName=hospital.getTownName();
                    String org=hospital.getCode();
                    String orgName=hospital.getName();
                    String level="2";
                    String key=entryCh.getKey();
                    save_level2_2(oneOrgGroupMap, city, cityName, town, townName, org, orgName, level, key);
                }
            }
            QuartzJobLog.setJobEndTime(new Date());
            QuartzJobLog.setJobContent(saveContent(signFamilys,qkCount,orgCount,townCount,cityCount,isAll,errorContent,errorCount));
            QuartzJobLog.setJobType(isAll?"1":"0");
            quartzJobLogDao.save(QuartzJobLog);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    private void save_level2_2(Map<String, Long> oneMap, String city, String cityName, String town, String townName, String org, String orgName, String level, String key) {
        WlyyQuotaResult wlyyQuotaResult = new WlyyQuotaResult();
        wlyyQuotaResult.setDel("1");
        wlyyQuotaResult.setCity(city);
        wlyyQuotaResult.setCityName(cityName);
        wlyyQuotaResult.setTown(town);
        wlyyQuotaResult.setTownName(townName);
        wlyyQuotaResult.setOrgCode(org);
        wlyyQuotaResult.setOrgName(orgName);
        wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
        wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
        wlyyQuotaResult.setQuotaDate(getYesterday());
        wlyyQuotaResult.setCreateTime(new Date());
        wlyyQuotaResult.setLevel1Type(level);//市级
        wlyyQuotaResult.setLevel2Type(key);
        wlyyQuotaResult.setLevel2TypeName(Constant.getLevelGroupName(key));
        if (oneMap != null && oneMap.containsKey(key)) {
            wlyyQuotaResult.setResult(oneMap.get(key) + "");
        } else {
            wlyyQuotaResult.setResult("0");
        }
        wlyyQuotaResultDao.save(wlyyQuotaResult);
    }
    private void compute_level2_2(Map<String, Map<String, Long>> cityGroupMap, String group,String key) {
        if (cityGroupMap.containsKey(key)) {
            Map<String, Long> groupMapTemp = cityGroupMap.get(key);
            groupMapTemp.put(group, (groupMapTemp.get(group) == null ? 0l : groupMapTemp.get(group)) + 1);
            cityGroupMap.put(key, groupMapTemp);
        } else {
            Map<String, Long> groupMapTemp = new HashMap<String, Long>();
            groupMapTemp.put(group, 1L);
            cityGroupMap.put(key, groupMapTemp);
        }
    }
    /**
     * 机构维度患者年龄维度计算指标
     */
    @Transactional
    private void computequotaByPatientAge() {
        try {
            jdbcTemplate.execute("delete from wlyy_quota_result where quota_date='" + yesterday + "' and quato_code='" + 8 + "'");
            //新建任务日志对象
            QuartzJobLog quartzJobLog = new QuartzJobLog();
            quartzJobLog.setJobStartTime(new Date());
            quartzJobLog.setJobId(wlyyJobConfig.getId());
            quartzJobLog.setJobName(wlyyJobConfig.getJobName());
            //查找出系统全部的团队
            List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
            Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
            for (AdminTeam adminTeam : adminTeams) {
                adminTeamMap.put(adminTeam.getId()+"", adminTeam);
            }
            //查找出系统全部的机构
            List<Hospital> hospitals = hospitalDao.findHospital2();
            Map<String, Hospital> hospitalsMap = new HashMap<String, Hospital>();
            for (Hospital hospital : hospitals) {
                hospitalsMap.put(hospital.getCode(), hospital);
            }
            //查找出厦门市全部的区
            List<Town> towns = townDao.findByCityCode(Constant.city);
            Map<String, Town> townsMap = new HashMap<String, Town>();
            for (Town town : towns) {
                townsMap.put(town.getCode(), town);
            }
            //找出今天的签约信息
            List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterdayExpensesStatus(yesterday, now);
            Long cityCount = new Long(0L); //统计到市的数目
            Long townCount = new Long(0L); //统计到所有区的数目
            Long orgCount =new Long(0L);//统计到所有机构的数目
            Long adminCount = new Long(0L);//统计到所有团队的数目
            Long errorCount=new Long(0L);//脏数据
            Boolean isAll=true;//是否统计失败
            StringBuffer errorContent=new StringBuffer();
            //统计有已改簽的
            List<ETLModel> etlModels=new ArrayList<ETLModel>();
            //数据过滤清洗出脏数据  -----------start
            for(SignFamily signFamily:signFamilys){
                ETLModel etlModel=new ETLModel();
                String orgCode = signFamily.getHospital();
                if(StringUtils.isEmpty(orgCode)) {
                    errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据为空");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                String orgCodeTemp="";
                if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                    //站
                    orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
                }else{
                    //社区
                    orgCodeTemp=orgCode;
                }
                //判断社区有没有值
                Hospital hospital=hospitalsMap.get(orgCodeTemp);
                if(hospital == null) {
                    errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据不存在");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                Long adminId=signFamily.getAdminTeamId();
                if(adminId == null||adminId<=0) {
                    errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据为空");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                AdminTeam adminTeam=adminTeamMap.get(signFamily.getAdminTeamId()+"");
                if(adminTeam == null) {
                    errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据不存在");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                String idCard=signFamily.getIdcard();
                if(idCard == null||((idCard.length()!=18&&idCard.length()!=15))) {
                    errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的idCard数据异常");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                String town =hospital.getTown();
                if(StringUtils.isEmpty(town)) {
                    errorContent.append("签约code:"+signFamily.getCode()+",机构表的中的town为空");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                Town townObj =townsMap.get(town);
                if(townObj==null) {
                    errorContent.append("签约code:"+signFamily.getCode()+",机构表的中的town不存在");
                    isAll=false;
                    errorCount++;
                    continue;
                }
                etlModel.setHospital(orgCodeTemp);
                etlModel.setTown(hospital.getTown());
                etlModel.setCity(Constant.city);
                etlModel.setIdcard(signFamily.getIdcard());
                etlModels.add(etlModel);
                //统计数目+1
                cityCount++;
                townCount++;
                orgCount++;
                adminCount++;
            }
            //数据过滤清洗出脏数据  -----------end
            try{
                //统计数据
                List<Map<String, List<ETLModel>>>  returnData1s= levelRole.elt(etlModels);
                List<Map<String, Map<String, List<ETLModel>>>> patientAgeRoleData= patientAgeRole.elt(returnData1s);
                //保存数据
                dbStorage.saveByLevel2(patientAgeRoleData,yesterday,wlyyQuota,6,2);
            }catch (Exception e){
                e.printStackTrace();
                errorContent.append("统计失败:"+e.getMessage());
            }
            //保存日志
            quartzJobLog.setJobEndTime(new Date());
            quartzJobLog.setJobContent(saveContent(signFamilys,adminCount,orgCount,townCount,cityCount,isAll,errorContent,errorCount));
            quartzJobLog.setJobType(isAll?"1":"0");
            quartzJobLogDao.save(quartzJobLog);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * 机构维度计算指标
     */
    @Transactional
    private void computequota() {
        jdbcTemplate.execute("delete from wlyy_quota_result where quota_date='" + yesterday + "' and quato_code='" + 1 + "'");
        //新建任务日志对象
        QuartzJobLog quartzJobLog = new QuartzJobLog();
        quartzJobLog.setJobStartTime(new Date());
        quartzJobLog.setJobId(wlyyJobConfig.getId());
        quartzJobLog.setJobName(wlyyJobConfig.getJobName());
        //查找出系统全部的团队
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
        Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
        for (AdminTeam adminTeam : adminTeams) {
            adminTeamMap.put(adminTeam.getId()+"", adminTeam);
        }
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospitalzxFWZ();
        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);
        }
        //找出今天的签约信息 yesterday,now
        List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterdayExpensesStatus(yesterday, now);
        Long cityCount = new Long(0L); //统计到市的数目
        Long townCount = new Long(0L); //统计到所有区的数目
        Long orgCount =new Long(0L);//统计到所有机构的数目
        Long adminCount = new Long(0L);//统计到所有团队的数目
        Long errorCount=new Long(0L);//脏数据
        Boolean isAll=true;//是否统计失败
        StringBuffer errorContent=new StringBuffer();
        //统计有已改簽的
        List<ETLModel> etlModels=new ArrayList<ETLModel>();
        //数据过滤清洗出脏数据  -----------start
        for(SignFamily signFamily:signFamilys){
            ETLModel etlModel=new ETLModel();
            String orgCode = signFamily.getHospital();
            if(StringUtils.isEmpty(orgCode)) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据为空");
                isAll=false;
                errorCount++;
                continue;
            }
            String orgCodeTemp="";
            if(!"00".equals(orgCode.substring(orgCode.length()-2,orgCode.length()))){
                //站
                orgCodeTemp=orgCode.substring(0,orgCode.length()-2)+"00";
            }else{
                //社区
                orgCodeTemp=orgCode;
            }
            //判断社区有没有值
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            Long adminId=signFamily.getAdminTeamId();
            if(adminId == null||adminId<=0) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据为空");
                isAll=false;
                errorCount++;
                continue;
            }
            AdminTeam adminTeam=adminTeamMap.get(signFamily.getAdminTeamId()+"");
            if(adminTeam == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            String idCard=signFamily.getIdcard();
            if(idCard == null||((idCard.length()!=18&&idCard.length()!=15))) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的idCard数据异常");
                isAll=false;
                errorCount++;
                continue;
            }
            String town =hospital.getTown();
            if(StringUtils.isEmpty(town)) {
                errorContent.append("签约code:"+signFamily.getCode()+",机构表的中的town为空");
                isAll=false;
                errorCount++;
                continue;
            }
            Town townObj =townsMap.get(town);
            if(townObj==null) {
                errorContent.append("签约code:"+signFamily.getCode()+",机构表的中的town不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            etlModel.setAdminTeam(adminTeam.getId()+"");
            etlModel.setHospital(orgCodeTemp);
            etlModel.setTown(hospital.getTown());
            etlModel.setCity(Constant.city);
            etlModel.setIdcard(signFamily.getIdcard());
            etlModels.add(etlModel);
            //统计数目+1
            cityCount++;
            townCount++;
            orgCount++;
            adminCount++;
        }
        //数据过滤清洗出脏数据  -----------end
        try{
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels);
            //保存数据
            dbStorage.saveByLevel1(returnDatas,yesterday,wlyyQuota);
        }catch (Exception e){
            e.printStackTrace();
            errorContent.append("统计失败:"+e.getMessage());
        }
        //保存日志
        quartzJobLog.setJobEndTime(new Date());
        quartzJobLog.setJobContent(saveContent(signFamilys,adminCount,orgCount,townCount,cityCount,isAll,errorContent,errorCount));
        quartzJobLog.setJobType(isAll?"1":"0");
        quartzJobLogDao.save(quartzJobLog);
    }
    /*
    得到昨天的日期字符串  yyyy-MM-dd
     */
    public String getYesterday() {
        return yesterday;
    }
    public static String getDayString(Integer size) {
        Date date = new Date();//取时间
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        calendar.add(calendar.DATE, size);//把日期往后增加一天.整数往后推,负数往前移动
        date = calendar.getTime(); //这个时间就是日期往后推一天的结果
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
        String dateString = formatter.format(date);
        return dateString;
    }
    private String saveContent(List<SignFamily> signFamilys, Long qkCount, Long orgCount, Long townCount, Long cityCount, boolean isAll, StringBuffer errorContent,Long errorCount) {
        StringBuffer string=new StringBuffer("统计"+yesterday+" 的签约数据完成 ,数据库查询到签约数目:"+signFamilys.size());
        string.append(",过滤的脏数据数目:"+errorCount);
        string.append(",统计到市的数据总数:"+cityCount);
        string.append(",统计到区的数据总数:"+townCount);
        string.append(",统计到机构的数据总数:"+orgCount);
        string.append(",统计到团队的数据总数:"+qkCount);
        string.append(",是否统计成功:"+isAll);
        if(!isAll){
            string.append(",失败原因:"+errorContent);
        }
        return string.toString();
    }
}

+ 0 - 225
patient-co-wlyy/src/main/java/com/yihu/wlyy/job/WaitSignJob.java

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

+ 0 - 229
patient-co-wlyy/src/main/java/com/yihu/wlyy/job/check/CheckSignJob.java

@ -1,229 +0,0 @@
package com.yihu.wlyy.job.check;
import com.yihu.wlyy.entity.job.QuartzJobConfig;
import com.yihu.wlyy.entity.patient.SignFamily;
import com.yihu.wlyy.entity.statistics.WlyyQuota;
import com.yihu.wlyy.entity.statistics.WlyyQuotaResult;
import com.yihu.wlyy.job.QuartzHelper;
import com.yihu.wlyy.job.SignJob;
import com.yihu.wlyy.repository.job.QuartzJobConfigDao;
import com.yihu.wlyy.repository.patient.SignFamilyDao;
import com.yihu.wlyy.repository.statistics.QuotaDao;
import com.yihu.wlyy.repository.statistics.WlyyQuotaResultDao;
import com.yihu.wlyy.util.DateUtil;
import com.yihu.wlyy.web.quota.WlyyJobConfigVO;
import com.yihu.wlyy.web.quota.WlyyQuotaVO;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
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.util.*;
/**
 * Created by Administrator on 2016.10.11.
 * 判断签约的数据对不对 不对的话 添加任务重新生成签约数据
 */
@Component
public class CheckSignJob implements Job{
    public static String jobKey="CHECK_SIGN_JOB";
    public static String cron="0 0 12 * * ?";
    @Autowired
    private WlyyQuotaResultDao wlyyQuotaResultDao;
    @Autowired
    private SignFamilyDao signFamilyDao;
    @Autowired
    private QuartzHelper quartzHelper;
    @Autowired
    private QuartzJobConfigDao wlyyJobConfigDao;
    @Autowired
    private QuotaDao quotaDao;
    @Transactional
    public void execute(JobExecutionContext context) throws JobExecutionException {
        try{
        SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);
        //得到需要检验的统计
        List<WlyyQuotaResult> wlyyQuotaResults=getNeedCheckData();
        //检验统计数据和签约数据是否一致  key:yes 是需要 no:是不需要
        Map<String,List<WlyyQuotaResult>> wlyyQuotaResultsMap=checkWlyyQuotaResult(wlyyQuotaResults);
        //更新不需要下一次统计的任务
        upDataNoNeedCheckQuato(wlyyQuotaResultsMap.get("no"));
        //添加需要重新统计的指标
        addNeedCheckQuato(wlyyQuotaResultsMap.get("yes"));
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    private void addNeedCheckQuato(List<WlyyQuotaResult> yes)throws Exception {
        if(yes.size()>0){
            for(WlyyQuotaResult wlyyQuotaResult:yes){
                QuartzJobConfig quartzJobConfig = wlyyJobConfigDao.findById(wlyyQuotaResult.getId());
                if (quartzJobConfig == null) {
                    throw new Exception("id不存在");
                }
                WlyyQuota wlyyQuota = quotaDao.findOne(quartzJobConfig.getQuotaId());
                WlyyQuotaVO wlyyQuotaVO = new WlyyQuotaVO();
                WlyyJobConfigVO wlyyJobConfigVO = new WlyyJobConfigVO();
                BeanUtils.copyProperties(wlyyQuota, wlyyQuotaVO);
                BeanUtils.copyProperties(quartzJobConfig, wlyyJobConfigVO);
                Map<String, Object> params = new HashMap<String, Object>();
                params.put("quota", wlyyQuotaVO);
                params.put("jobConfig", wlyyJobConfigVO);
                String now=getNextDate(wlyyQuotaResult.getQuotaDate());
                String yesterday=wlyyQuotaResult.getQuotaDate();
                //往quartz框架添加任务
                params.put("now", now);
                params.put("yesterday", yesterday);
                String jobKey="checkSignQuartz:"+wlyyQuotaResult.getQuotaDate()+":"+wlyyQuotaResult.getQuatoCode();
                if(!quartzHelper.isExistJob(jobKey)){
                    quartzHelper.startAt(weeHours(new Date(),1),SignJob.class,jobKey,params);
                    //重新生成性别 疾病 扣费 和 年龄的统计
                    startJob("6",yesterday,now);
                    startJob("7",yesterday,now);
                    startJob("8",yesterday,now);
                    startJob("12",yesterday,now);
                }
            }
        }
    }
    private void startJob(String id, String yesterday, String now) throws Exception{
        QuartzJobConfig quartzJobConfig = wlyyJobConfigDao.findById(id);
        if (quartzJobConfig == null) {
            throw new Exception("id不存在");
        }
        WlyyQuota wlyyQuota = quotaDao.findOne(quartzJobConfig.getQuotaId());
        WlyyQuotaVO wlyyQuotaVO = new WlyyQuotaVO();
        WlyyJobConfigVO wlyyJobConfigVO = new WlyyJobConfigVO();
        BeanUtils.copyProperties(wlyyQuota, wlyyQuotaVO);
        BeanUtils.copyProperties(quartzJobConfig, wlyyJobConfigVO);
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("quota", wlyyQuotaVO);
        params.put("jobConfig", wlyyJobConfigVO);
        //往quartz框架添加任务
        params.put("now", now);
        params.put("yesterday", yesterday);
        String jobKey="checkSignQuartz:"+yesterday+":"+wlyyQuota.getId();
        if(!quartzHelper.isExistJob(jobKey)){
            quartzHelper.startAt(weeHours(new Date(),1),getClassById(id),jobKey,params);
        }
    }
    private Class getClassById(String id) {
        switch (id){
            case "6":{
                return SignJob.class;
            }
            case "7":{
                return SignJob.class;
            }
            case "8":{
                return SignJob.class;
            }
            case "12":{
                return SignJob.class;
            }
        }
        return null;
    }
    /**
     * 更新不需要下一次统计的任务   更新qkdoctorJobName字段为1
     * @param noNeedCheckQuatos
     */
    private void upDataNoNeedCheckQuato(List<WlyyQuotaResult> noNeedCheckQuatos) {
        if(noNeedCheckQuatos.size()>0){
            for(WlyyQuotaResult wlyyQuotaResult:noNeedCheckQuatos){
                wlyyQuotaResult.setQkdoctorJobName("1");
            }
            wlyyQuotaResultDao.save(noNeedCheckQuatos);
        }
    }
    /**
     * 检验统计数据和签约数据是否一致  key:yes 是需要 no:是不需要
     * @param wlyyQuotaResults
     * @return
     */
    private Map<String,List<WlyyQuotaResult>> checkWlyyQuotaResult(List<WlyyQuotaResult> wlyyQuotaResults) {
        Map<String,List<WlyyQuotaResult>> returnMap=new HashMap<String,List<WlyyQuotaResult>>();
        List<WlyyQuotaResult> yes=new ArrayList<WlyyQuotaResult>();//需要重新统计的
        List<WlyyQuotaResult> no=new ArrayList<WlyyQuotaResult>();//不需要重新统计
        for(WlyyQuotaResult wlyyQuotaResult:wlyyQuotaResults){
            String date=  wlyyQuotaResult.getQuotaDate();//格式  2016-10-20
            String nextDate=getNextDate(date);
            List<SignFamily> signFamilys = signFamilyDao.findByJiatingSignYesterdayExpensesStatus(date, nextDate);
            if(signFamilys.size()!=Integer.valueOf(wlyyQuotaResult.getResult())){
                //如果数目不相等 说明需要重新统计
                yes.add(wlyyQuotaResult);
            }else{
                //如果数目相等 说明需要不需要重新统计
                no.add(wlyyQuotaResult);
            }
        }
        returnMap.put("yes",yes);
        returnMap.put("no",no);
        return returnMap;
    }
    private String getNextDate(String date) {
        Date dateTime=  DateUtil.strToDateShort(date);
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(dateTime);
        calendar.add(calendar.DATE,1);//把日期往后增加一天.整数往后推,负数往前移动
        Date nextDateTime=calendar.getTime();
        return DateUtil.dateToStrShort(nextDateTime);
    }
    /**
     * 得到需要检验的统计
     * @return
     */
    private List<WlyyQuotaResult> getNeedCheckData() {
        List<WlyyQuotaResult> wlyyQuotaResults=wlyyQuotaResultDao.findByLevel1TypeAndQkdoctorJobName("4","1");
        return wlyyQuotaResults;
    }
    /**
     * 获取当前时间所在的凌晨时间
     *  凌晨
     * @param date
     * @flag 0 返回yyyy-MM-dd 00:00:00日期<br>
     *       1 返回yyyy-MM-dd 23:59:59日期
     * @return
     */
    private  Date weeHours(Date date, int flag) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        int hour = cal.get(Calendar.HOUR_OF_DAY);
        int minute = cal.get(Calendar.MINUTE);
        int second = cal.get(Calendar.SECOND);
        //时分秒(毫秒数)
        long millisecond = hour*60*60*1000 + minute*60*1000 + second*1000;
        //凌晨00:00:00
        cal.setTimeInMillis(cal.getTimeInMillis()-millisecond);
        if (flag == 0) {
            return cal.getTime();
        } else if (flag == 1) {
            //凌晨23:59:59
            cal.setTimeInMillis(cal.getTimeInMillis()+23*60*60*1000 + 59*60*1000 + 59*1000);
        }
        return cal.getTime();
    }
}

+ 0 - 88
patient-co-wlyy/src/main/java/com/yihu/wlyy/job/elt/base/ETLModel.java

@ -1,88 +0,0 @@
package com.yihu.wlyy.job.elt.base;
/**
 * Created by Administrator on 2016.10.09.
 */
public class ETLModel {
    private String adminTeam;//团队的code
    private String hospital;//机构code
    private String town;//区代码 350206
    private String city;//城市代码 350200
    private String idcard;//患者身份证
    private String patientGroup;//患者分组
    private String signExpensesStatus;//扣费状态 【0未扣费 1已扣费 2已退费】
    private String level2Key;//二级维度的key
    private String level3Key;//三级维度的key
    public String getLevel3Key() {
        return level3Key;
    }
    public void setLevel3Key(String level3Key) {
        this.level3Key = level3Key;
    }
    public String getAdminTeam() {
        return adminTeam;
    }
    public void setAdminTeam(String adminTeam) {
        this.adminTeam = adminTeam;
    }
    public String getHospital() {
        return hospital;
    }
    public void setHospital(String hospital) {
        this.hospital = hospital;
    }
    public String getIdcard() {
        return idcard;
    }
    public void setIdcard(String idcard) {
        this.idcard = idcard;
    }
    public String getTown() {
        return town;
    }
    public void setTown(String town) {
        this.town = town;
    }
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    public String getPatientGroup() {
        return patientGroup;
    }
    public void setPatientGroup(String patientGroup) {
        this.patientGroup = patientGroup;
    }
    public String getSignExpensesStatus() {
        return signExpensesStatus;
    }
    public void setSignExpensesStatus(String signExpensesStatus) {
        this.signExpensesStatus = signExpensesStatus;
    }
    public String getLevel2Key() {
        return level2Key;
    }
    public void setLevel2Key(String level2Key) {
        this.level2Key = level2Key;
    }
}

+ 0 - 78
patient-co-wlyy/src/main/java/com/yihu/wlyy/job/elt/role/Level1Role.java

@ -1,78 +0,0 @@
package com.yihu.wlyy.job.elt.role;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.doctor.team.admin.AdminTeam;
import com.yihu.wlyy.entity.organization.Hospital;
import com.yihu.wlyy.job.Constant;
import com.yihu.wlyy.job.elt.base.ETLModel;
import com.yihu.wlyy.repository.address.TownDao;
import com.yihu.wlyy.repository.consult.ConsultTeamDao;
import com.yihu.wlyy.repository.doctor.DoctorAdminTeamDao;
import com.yihu.wlyy.repository.organization.HospitalDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * Created by Administrator on 2016.10.09.
 * 1级维度 机构等级分组
 */
@Component
@Transactional
public class Level1Role {
    /**
     * 返回的Listmap中 list第一個是 团队 第二个是机构 第三个是区  第四个市
     * @param models
     * @return
     * @throws Exception
     */
    public List<Map<String, List<ETLModel>>> elt(List<ETLModel> models) throws  Exception{
        List<Map<String, List<ETLModel>>> returnMapsList=new ArrayList<Map<String, List<ETLModel>>>();
        Map<String, List<ETLModel>> tjCityMap = new HashMap<String, List<ETLModel>>();//市级的统计map key 是区行政区划350200
        Map<String, List<ETLModel>> tjTownMap = new HashMap<String, List<ETLModel>>();//区级的统计map key 是区行政区划350206
        Map<String, List<ETLModel>> tjOrgMap = new HashMap<String, List<ETLModel>>();//机构的统计map key 是机构的code
        Map<String, List<ETLModel>> tjAdminTeamMap = new HashMap<String, List<ETLModel>>();//团队级的统计map 一  key 团队id
        for(ETLModel etlModel:models){
            //统计市市
            compute(tjCityMap, etlModel.getCity(),etlModel);
            //统计市区
            compute(tjTownMap, etlModel.getTown(),etlModel);
            //统计市机构
            compute(tjOrgMap, etlModel.getHospital(),etlModel);
            //统计团队
            compute(tjAdminTeamMap, etlModel.getAdminTeam(),etlModel);
        }
        returnMapsList.add(0,tjAdminTeamMap);
        returnMapsList.add(1,tjOrgMap);
        returnMapsList.add(2,tjTownMap);
        returnMapsList.add(3,tjCityMap);
        return returnMapsList;
    }
    /**
     * 统计算法
     * @param eltMap
     * @param key
     * @param etlModel
     */
    private void compute(Map<String, List<ETLModel>> eltMap,String key,ETLModel etlModel) {
        if (eltMap.containsKey(key)) {
            List<ETLModel> etlModels=eltMap.get(key);
            etlModels.add(etlModel);
        } else {
            List<ETLModel> etlModels=new ArrayList<ETLModel>();
            etlModels.add(etlModel);
            eltMap.put(key,etlModels);
        }
    }
}

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

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

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

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

+ 0 - 88
patient-co-wlyy/src/main/java/com/yihu/wlyy/job/elt/role/PatientAgeRole.java

@ -1,88 +0,0 @@
package com.yihu.wlyy.job.elt.role;
import com.yihu.wlyy.job.Constant;
import com.yihu.wlyy.job.elt.base.ETLModel;
import com.yihu.wlyy.util.IdCardUtil;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * Created by Administrator on 2016.10.09.
 * 患者性别
 */
@Component
@Transactional
public class PatientAgeRole {
    public List<Map<String, Map<String, List<ETLModel>>>> elt(List<Map<String, List<ETLModel>>> data) throws  Exception{
        List<Map<String, Map<String, List<ETLModel>>>> returnMapsList=new ArrayList<Map<String, Map<String, List<ETLModel>>>>();
        Map<String,Map<String, List<ETLModel>>> tjCityMap = new HashMap<String,Map<String, List<ETLModel>>>();//市级的统计map key 是区行政区划350200
        Map<String,Map<String, List<ETLModel>>> tjTownMap = new HashMap<String,Map<String, List<ETLModel>>>();//区级的统计map key 是区行政区划350206
        Map<String,Map<String, List<ETLModel>>> tjOrgMap = new HashMap<String,Map<String, List<ETLModel>>>();//机构的统计map key 是机构的code
        Map<String,Map<String, List<ETLModel>>> tjAdminTeamMap = new HashMap<String,Map<String, List<ETLModel>>>();//团队级的统计map 一  key 团队id
        //统计市
       compute(tjCityMap,data.get(3));
        //统计区
       compute(tjTownMap,data.get(2));
       //统计机构
       compute(tjOrgMap,data.get(1));
       //统计团队
       compute(tjAdminTeamMap,data.get(0));
        returnMapsList.add(0,tjAdminTeamMap);
        returnMapsList.add(1,tjOrgMap);
        returnMapsList.add(2,tjTownMap);
        returnMapsList.add(3,tjCityMap);
        return returnMapsList;
    }
    /**
     * 统计算法
     * @param tjMap
     * @param eltDateMap
     */
    private void compute(Map<String, Map<String, List<ETLModel>>> tjMap, Map<String, List<ETLModel>> eltDateMap) throws Exception{
        //遍历数据Map
        for(Map.Entry<String,List<ETLModel>> oneData:eltDateMap.entrySet()){
            List<ETLModel> datas=oneData.getValue();//得到数据列表 全部区或者市或者机构或者区的数据
            Map<String, List<ETLModel>> childrens=new HashMap<String, List<ETLModel>>();//返回的map
            for(ETLModel eltModel:datas){
                Integer age= IdCardUtil.getAgeForIdcard(eltModel.getIdcard());//得到年龄
                String key=getAgeCode(age);//根据年龄得到key
                List<ETLModel> etlModels= childrens.get(key);
                //如果list不存在 新建一个
                if(etlModels==null){
                    etlModels=new ArrayList<>();
                }
                etlModels.add(eltModel);
                childrens.put(key,etlModels);
            }
            tjMap.put(oneData.getKey(),childrens);
        }
    }
    private String getAgeCode(int age) {
        if (age < 7) {
            return Constant.level_age_1;
        } else if (age >= 7 && age < 18) {
            return Constant.level_age_2;
        } else if (age >= 18 && age < 30) {
            return Constant.level_age_3;
        } else if (age >= 30 && age < 50) {
            return Constant.level_age_4;
        } else if (age >= 50 && age < 65) {
            return Constant.level_age_5;
        } else {
            return Constant.level_age_6;
        }
    }
}

+ 0 - 74
patient-co-wlyy/src/main/java/com/yihu/wlyy/job/elt/role/PatientGroupRole.java

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

+ 0 - 70
patient-co-wlyy/src/main/java/com/yihu/wlyy/job/elt/role/PatientSexRole.java

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

+ 0 - 686
patient-co-wlyy/src/main/java/com/yihu/wlyy/job/elt/storage/DBStorage.java

@ -1,686 +0,0 @@
package com.yihu.wlyy.job.elt.storage;
import com.yihu.wlyy.entity.address.City;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.doctor.team.admin.AdminTeam;
import com.yihu.wlyy.entity.organization.Hospital;
import com.yihu.wlyy.entity.statistics.WlyyQuotaResult;
import com.yihu.wlyy.job.Constant;
import com.yihu.wlyy.job.elt.base.ETLModel;
import com.yihu.wlyy.repository.address.TownDao;
import com.yihu.wlyy.repository.doctor.DoctorAdminTeamDao;
import com.yihu.wlyy.repository.doctor.DoctorPatientGroupInfoDao;
import com.yihu.wlyy.repository.job.QuartzJobLogDao;
import com.yihu.wlyy.repository.organization.HospitalDao;
import com.yihu.wlyy.repository.statistics.WlyyQuotaResultDao;
import com.yihu.wlyy.web.quota.WlyyJobConfigVO;
import com.yihu.wlyy.web.quota.WlyyQuotaVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * Created by Administrator on 2016.10.09.
 * 统计数据数据库存储器
 */
@Component
@Transactional
public class DBStorage   {
    private WlyyQuotaVO wlyyQuota;//指标对象
    private Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
    private Map<String, Hospital> hospitalsMap = new HashMap<String, Hospital>();
    private Map<String, Town> townsMap = new HashMap<String, Town>();
    @Autowired
    private HospitalDao hospitalDao;
    @Autowired
    private TownDao townDao;
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    @Autowired
    private WlyyQuotaResultDao wlyyQuotaResultDao;//指标结果Dao
    /**
     * 保存一级维度的数据
     * @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();
        for (AdminTeam adminTeam : adminTeams) {
            adminTeamMap.put(adminTeam.getId()+"", adminTeam);
        }
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospitalzxFWZ();
        for (Hospital hospital : hospitals) {
            hospitalsMap.put(hospital.getCode(), hospital);
        }
        //查找出厦门市全部的区
        List<Town> towns = townDao.findByCityCode(Constant.city);
        for (Town town : towns) {
            townsMap.put(town.getCode(), town);
        }
        //全部的市
        Map<String, City> cityMap = new HashMap<String, City>();
        City city=new City();
        city.setCode(Constant.city);
        city.setName(Constant.cityName);
        cityMap.put(Constant.city,city);
        //保存团队
        saveAdminTeamDataLevel1(data.get(0),date,adminTeamMap);
        //保存机构
        saveHospitalTeamDataLevel1(data.get(1),date,hospitalsMap);
        //保存区
        saveTownTeamDataLevel1(data.get(2),date,townsMap);
        //保存市
        saveCityTeamDataLevel1(data.get(3),date,cityMap);
    }
    /**
     * 保存二级维度
     * @param data
     * @param day
     * @param wlyyQuota
     * @param foreachNum 标识二级维度循环的次数  例如 年龄就传6  性别就传3
     * @param type 1 性别 2 年龄 3 用户分组 4.签约费用
     */
    public void saveByLevel2(List<Map<String, Map<String, List<ETLModel>>>> data, String day, WlyyQuotaVO wlyyQuota,Integer foreachNum,Integer type) throws Exception{
        Integer start=1;
        this.wlyyQuota=wlyyQuota;
        level2Public(data, day, foreachNum, type, start);
    }
    /**
     * 保存二级维度
     * @param data
     * @param day
     * @param wlyyQuota
     * @param foreachNum 如果start是默认的 标识二级维度循环的次数  例如 年龄就传6  性别就传3
     * @param type 1 性别 2 年龄 3 用户分组 4.签约费用
     * @param start 起始位置 默认是1
     */
    public void saveByLevel2(List<Map<String, Map<String, List<ETLModel>>>> data, String day, WlyyQuotaVO wlyyQuota,Integer foreachNum,Integer type,Integer start)throws Exception {
        this.wlyyQuota=wlyyQuota;
        level2Public(data, day, foreachNum, type, start);
    }
    /**
     * 保存三级维度
     * @param data
     * @param day
     * @param wlyyQuota
     * @param foreachNum2 标识二级维度循环的次数  例如 年龄就传6  性别就传3
     * @param foreachNum3 标识三级维度循环的次数  例如 年龄就传6  性别就传3
     * @param type 1 性别 2 年龄 3 用户分组 4.签约费用
     */
    public void saveByLevel3(List<Map<String, Map<String, Map<String, List<ETLModel>>>>> data, String day, WlyyQuotaVO wlyyQuota,Integer foreachNum2,Integer foreachNum3,Integer type) throws Exception{
        Integer start2=1;
        Integer start3=1;
        this.wlyyQuota=wlyyQuota;
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
        for (AdminTeam adminTeam : adminTeams) {
            adminTeamMap.put(adminTeam.getId()+"", adminTeam);
        }
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospitalzxFWZ();
        for (Hospital hospital : hospitals) {
            hospitalsMap.put(hospital.getCode(), hospital);
        }
        //查找出厦门市全部的区
        List<Town> towns = townDao.findByCityCode(Constant.city);
        for (Town town : towns) {
            townsMap.put(town.getCode(), town);
        }
        //全部的市
        City city=new City();
        city.setCode(Constant.city);
        city.setName(Constant.cityName);
        Map<String, City> cityMap = new HashMap<String, City>();
        cityMap.put(Constant.city,city);
        //保存团队
        saveAdminTeamDataLevel3(data.get(0),day,adminTeamMap,foreachNum2,foreachNum3,type,start2,start3);
        //保存机构
        saveHospitalTeamDataLevel3(data.get(1),day,hospitalsMap,foreachNum2,foreachNum3,type,start2,start3);
        //保存区
        saveTownTeamDataLevel3(data.get(2),day,townsMap,foreachNum2,foreachNum3,type,start2,start3);
        //保存市
        saveCityTeamDataLevel3(data.get(3),day,cityMap,foreachNum2,foreachNum3,type,start2,start3);
    }
    /**
     * 保存三级维度
     * @param data
     * @param day
     * @param wlyyQuota
     * @param foreachNum2 标识二级维度循环的次数  例如 年龄就传6  性别就传3
     * @param foreachNum3 标识三级维度循环的次数  例如 年龄就传6  性别就传3
     * @param type 1 性别 2 年龄 3 用户分组 4.签约费用
     * @param start2 耳機維度起始位置 默认是1
     * @param start3 耳機維度起始位置 默认是1
     */
    public void saveByLevel3(List<Map<String, Map<String, Map<String, List<ETLModel>>>>> data, String day, WlyyQuotaVO wlyyQuota,Integer foreachNum2,Integer foreachNum3,Integer type,Integer start2,Integer start3) throws Exception{
        if(start2==null){
            start2=1;
        }
        if(start3==null){
            start2=3;
        }
        this.wlyyQuota=wlyyQuota;
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
        for (AdminTeam adminTeam : adminTeams) {
            adminTeamMap.put(adminTeam.getId()+"", adminTeam);
        }
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospitalzxFWZ();
        for (Hospital hospital : hospitals) {
            hospitalsMap.put(hospital.getCode(), hospital);
        }
        //查找出厦门市全部的区
        List<Town> towns = townDao.findByCityCode(Constant.city);
        for (Town town : towns) {
            townsMap.put(town.getCode(), town);
        }
        //全部的市
        City city=new City();
        city.setCode(Constant.city);
        city.setName(Constant.cityName);
        Map<String, City> cityMap = new HashMap<String, City>();
        cityMap.put(Constant.city,city);
        //保存团队
        saveAdminTeamDataLevel3(data.get(0),day,adminTeamMap,foreachNum2,foreachNum3,type,start2,start3);
        //保存机构
        saveHospitalTeamDataLevel3(data.get(1),day,hospitalsMap,foreachNum2,foreachNum3,type,start2,start3);
        //保存区
        saveTownTeamDataLevel3(data.get(2),day,townsMap,foreachNum2,foreachNum3,type,start2,start3);
        //保存市
        saveCityTeamDataLevel3(data.get(3),day,cityMap,foreachNum2,foreachNum3,type,start2,start3);
    }
    private void saveAdminTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap, String day, Map<String, AdminTeam> adminTeamMap, Integer foreachNum2, Integer foreachNum3, Integer type, Integer start2, Integer start3) {
        //遍历团队的Map
        for(Map.Entry<String,AdminTeam> oneAdminTeam:adminTeamMap.entrySet()){
            //得到每个团队的2级维度
            Map<String, Map<String, List<ETLModel>>> twoETLMap= etlModelMap.get(oneAdminTeam.getKey());
            for(int i=start2;i<=foreachNum2;i++){
                 //得到每个团队的三级维度
                 Map<String, List<ETLModel>> threeETLMap= new HashMap<String, List<ETLModel>>();
                 if(twoETLMap!=null){
                     threeETLMap=twoETLMap.get(i);
                 }
                 for(int j=start3;j<=foreachNum3;j++){
                     int num=0;
                     List<ETLModel> etlModelList= threeETLMap.get(i);
                     if(etlModelList!=null&&etlModelList.size()>0){
                         num=etlModelList.size();
                     }
                     AdminTeam adminTeamObj = adminTeamMap.get(oneAdminTeam.getKey());//团队
                     if(adminTeamObj==null)continue;
                     String orgCodeTemp=getOrg(adminTeamObj.getOrgCode());
                     Hospital hospital = hospitalsMap.get(orgCodeTemp);
                     if(hospital==null)continue;
                     String city=Constant.city;
                     String cityName=Constant.cityName;
                     String town=hospital.getTown();
                     String townName=hospital.getTownName();
                     String org=hospital.getCode();
                     String orgName=hospital.getName();
                     String doctorCode=adminTeamObj.getId()+"";
                     String doctorName=adminTeamObj.getName();
                     String doctorJob="";
                     String level="1";
                     String level2=i+"";
                     String level3=j+"";
                     String level3Name=getLevel3Name(level3,type);
                     save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level,level2,null,level3,level3Name,day);
                }
            }
        }
    }
    private void saveHospitalTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap, String day, Map<String, Hospital> hospitalsMap, Integer foreachNum2, Integer foreachNum3, Integer type, Integer start2, Integer start3) {
        //遍历团队的Map
        for(Map.Entry<String,Hospital> oneHospital:hospitalsMap.entrySet()){
            //得到每个团队的2级维度
            Map<String, Map<String, List<ETLModel>>> twoETLMap= etlModelMap.get(oneHospital.getKey());
            for(int i=start2;i<=foreachNum2;i++){
                //得到每个团队的三级维度
                Map<String, List<ETLModel>> threeETLMap= new HashMap<String, List<ETLModel>>();
                if(twoETLMap!=null){
                    threeETLMap=twoETLMap.get(i);
                }
                for(int j=start3;j<=foreachNum3;j++){
                    int num=0;
                    List<ETLModel> etlModelList= threeETLMap.get(i);
                    if(etlModelList!=null&&etlModelList.size()>0){
                        num=etlModelList.size();
                    }
                    Hospital hospital = hospitalsMap.get(oneHospital.getKey());
                    if(hospital==null)continue;
                    String city=Constant.city;
                    String cityName=Constant.cityName;
                    String town=hospital.getTown();
                    String townName=hospital.getTownName();
                    String org=hospital.getCode();
                    String orgName=hospital.getName();
                    String doctorCode="";
                    String doctorName="";
                    String doctorJob="";
                    String level="1";
                    String level2=i+"";
                    String level3=j+"";
                    String level3Name=getLevel3Name(level3,type);
                    save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level,level2,null,level3,level3Name,day);
                }
            }
        }
    }
    private void saveTownTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap, String day, Map<String, Town> townsMap, Integer foreachNum2, Integer foreachNum3, Integer type, Integer start2, Integer start3) {
        //遍历团队的Map
        for(Map.Entry<String,Town> oneTownTeam:townsMap.entrySet()){
            //得到每个团队的2级维度
            Map<String, Map<String, List<ETLModel>>> twoETLMap= etlModelMap.get(oneTownTeam.getKey());
            for(int i=start2;i<=foreachNum2;i++){
                //得到每个团队的三级维度
                Map<String, List<ETLModel>> threeETLMap= new HashMap<String, List<ETLModel>>();
                if(twoETLMap!=null){
                    threeETLMap=twoETLMap.get(i);
                }
                for(int j=start3;j<=foreachNum3;j++){
                    int num=0;
                    List<ETLModel> etlModelList= threeETLMap.get(i);
                    if(etlModelList!=null&&etlModelList.size()>0){
                        num=etlModelList.size();
                    }
                    Town townObj=townsMap.get(oneTownTeam.getKey());
                    if(townObj==null)continue;
                    String city=Constant.city;
                    String cityName=Constant.cityName;
                    String town=townObj.getCode();
                    String townName=townObj.getName();
                    String org="";
                    String orgName="";
                    String doctorCode="";
                    String doctorName="";
                    String doctorJob="";
                    String level="1";
                    String level2=i+"";
                    String level3=j+"";
                    String level3Name=getLevel3Name(level3,type);
                    save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level,level2,null,level3,level3Name,day);
                }
            }
        }
    }
    private void saveCityTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap, String day, Map<String, City> cityMap, Integer foreachNum2, Integer foreachNum3, Integer type, Integer start2, Integer start3) {
        //遍历团队的Map
        for(Map.Entry<String,City> oneCityTeam:cityMap.entrySet()){
            //得到每个团队的2级维度
            Map<String, Map<String, List<ETLModel>>> twoETLMap= etlModelMap.get(oneCityTeam.getKey());
            for(int i=start2;i<=foreachNum2;i++){
                //得到每个团队的三级维度
                Map<String, List<ETLModel>> threeETLMap= new HashMap<String, List<ETLModel>>();
                if(twoETLMap!=null){
                    threeETLMap=twoETLMap.get(i);
                }
                for(int j=start3;j<=foreachNum3;j++){
                    int num=0;
                    List<ETLModel> etlModelList= threeETLMap.get(i);
                    if(etlModelList!=null&&etlModelList.size()>0){
                        num=etlModelList.size();
                    }
                    String city=Constant.city;
                    String cityName=Constant.cityName;
                    String town="";
                    String townName="";
                    String org="";
                    String orgName="";
                    String doctorCode="";
                    String doctorName="";
                    String doctorJob="";
                    String level="1";
                    String level2=i+"";
                    String level3=j+"";
                    String level3Name=getLevel3Name(level3,type);
                    save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level,level2,null,level3,level3Name,day);
                }
            }
        }
    }
    private void level2Public(List<Map<String, Map<String, List<ETLModel>>>> data, String day, Integer foreachNum, Integer type, Integer start)throws Exception {
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
        for (AdminTeam adminTeam : adminTeams) {
            adminTeamMap.put(adminTeam.getId()+"", adminTeam);
        }
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospitalzxFWZ();
        for (Hospital hospital : hospitals) {
            hospitalsMap.put(hospital.getCode(), hospital);
        }
        //查找出厦门市全部的区
        List<Town> towns = townDao.findByCityCode(Constant.city);
        for (Town town : towns) {
            townsMap.put(town.getCode(), town);
        }
        //全部的市
        City city=new City();
        city.setCode(Constant.city);
        city.setName(Constant.cityName);
        Map<String, City> cityMap = new HashMap<String, City>();
        cityMap.put(Constant.city,city);
        //保存团队
        saveAdminTeamDataLevel2(data.get(0),day,adminTeamMap,foreachNum,type,start);
        //保存机构
        saveHospitalTeamDataLevel2(data.get(1),day,hospitalsMap,foreachNum,type,start);
        //保存区
        saveTownTeamDataLevel2(data.get(2),day,townsMap,foreachNum,type,start);
        //保存市
        saveCityTeamDataLevel2(data.get(3),day,cityMap,foreachNum,type,start);
    }
    private void saveCityTeamDataLevel2(Map<String, Map<String, List<ETLModel>>> etlModelMap, String day, Map<String, City> citysMap ,Integer foreachNum,Integer type,Integer start) {
         for(Map.Entry<String,City> oneCity:citysMap.entrySet()){
             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);
                 save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level,level2,level2Name,null,null,day);
             }
         }
    }
    private void saveTownTeamDataLevel2(Map<String, Map<String, List<ETLModel>>> etlModelMap, String day, Map<String, Town> townsMap ,Integer foreachNum,Integer type,Integer start) {
        for(Map.Entry<String,Town> oneTown:townsMap.entrySet()){
            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);
                save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level,level2,level2Name,null,null,day);
            }
        }
    }
    private void saveHospitalTeamDataLevel2(Map<String, Map<String, List<ETLModel>>> etlModelMap, String day, Map<String, Hospital> hospitalsMap,Integer foreachNum,Integer type,Integer start) {
        for(Map.Entry<String,Hospital> oneHospital:hospitalsMap.entrySet()){
            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);
                save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level,level2,level2Name,null,null,day);
            }
        }
    }
    private void saveAdminTeamDataLevel2(Map<String, Map<String, List<ETLModel>>> etlModelMap, String day, Map<String, AdminTeam> adminTeamMap,Integer foreachNum,Integer type,Integer start) {
        for(Map.Entry<String,AdminTeam> adminTeam:adminTeamMap.entrySet()){
            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());
                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);
                save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level,level2,level2Name,null,null,day);
            }
        }
    }
    private void saveAdminTeamDataLevel1(Map<String, List<ETLModel>> mapData,String date,Map<String, AdminTeam> adminTeamMap) {
        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());
            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";
            save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level,null,null,null,null,date);
        }
    }
    private void saveHospitalTeamDataLevel1(Map<String, List<ETLModel>> mapData, String date,  Map<String, Hospital> hospitalsMap ) {
        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";
            save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level,null,null,null,null,date);
        }
    }
    private void saveTownTeamDataLevel1(Map<String, List<ETLModel>> mapData, String date,  Map<String, Town> townsMap) {
        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";
            save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level,null,null,null,null,date);
        }
    }
    private void saveCityTeamDataLevel1(Map<String, List<ETLModel>> mapData, String date, Map<String, City> cityMap) {
        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";
            save(num, city, cityName, town, townName, org, orgName, doctorCode, doctorName, doctorJob, level,null,null,null,null,date);
        }
    }
    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
     * @param townName
     * @param org
     * @param orgName
     * @param doctorCode
     * @param doctorName
     * @param doctorJob
     * @param level1
     */
    private void 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.setDel("1");
        wlyyQuotaResult.setOrgCode(org);
        wlyyQuotaResult.setOrgName(orgName);
        wlyyQuotaResult.setCity(city);
        wlyyQuotaResult.setCityName(cityName);
        wlyyQuotaResult.setQuatoCode(wlyyQuota.getId());
        wlyyQuotaResult.setQuatoName(wlyyQuota.getName());
        wlyyQuotaResult.setQuotaDate(date);
        wlyyQuotaResult.setCreateTime(new Date());
        wlyyQuotaResult.setQkdoctorJobName(doctorJob);
        wlyyQuotaResult.setQkdoctorName(doctorName);
        wlyyQuotaResult.setQkdoctorCode(doctorCode);
        wlyyQuotaResult.setTown(town);
        wlyyQuotaResult.setTownName(townName);
        wlyyQuotaResult.setLevel1Type(level1);
        wlyyQuotaResult.setLevel2Type(level2);
        wlyyQuotaResult.setLevel2TypeName(level2Name);
        wlyyQuotaResult.setLevel3Type(level3);
        wlyyQuotaResult.setLevel3TypeName(level3Name);
        //判断全科医生是否有改签量
        wlyyQuotaResult.setResult(num+"");
        wlyyQuotaResultDao.save(wlyyQuotaResult);
    }
    private String getLevel2Name(String i, Integer type) {
        switch (type){
            case  1:{
                //性别
                return Constant.getLevelSexName(i);
            }
            case  2:{
                //年龄
                return Constant.getLevelAgeName(i);
            }
            case  3:{
                //用户分组
                return Constant.getLevelGroupName(i);
            }
            case  4:{
                //费用类别
                return Constant.getLevelExpenseName(i);
            }
            default:{
                return "";
            }
        }
    }
    private String getLevel3Name(String j, Integer type) {
        switch (type){
            case  1:{
                //签约费用
                return Constant.getLevelExpenseName(j);
            }
            default:{
                return "";
            }
        }
    }
}

+ 0 - 317
patient-co-wlyy/src/main/java/com/yihu/wlyy/job/elt/storage/RedisStorage.java

@ -1,317 +0,0 @@
package com.yihu.wlyy.job.elt.storage;
import com.yihu.wlyy.entity.address.City;
import com.yihu.wlyy.entity.address.Town;
import com.yihu.wlyy.entity.doctor.team.admin.AdminTeam;
import com.yihu.wlyy.entity.organization.Hospital;
import com.yihu.wlyy.job.Constant;
import com.yihu.wlyy.job.elt.base.ETLModel;
import com.yihu.wlyy.repository.address.TownDao;
import com.yihu.wlyy.repository.doctor.DoctorAdminTeamDao;
import com.yihu.wlyy.repository.organization.HospitalDao;
import com.yihu.wlyy.repository.statistics.WlyyQuotaResultDao;
import com.yihu.wlyy.util.DateUtil;
import com.yihu.wlyy.web.quota.WlyyQuotaVO;
import org.apache.axis.utils.Admin;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import springfox.documentation.spring.web.json.Json;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * Created by Administrator on 2016.10.09.
 * 统计数据数据库存储器
 */
@Component
@Transactional
public class RedisStorage {
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Autowired
    private HospitalDao hospitalDao;
    @Autowired
    private TownDao townDao;
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    /**
     * 保存一级维度的数据
     * @param data
     * @param wlyyQuotaId
     * @throws Exception
     */
    public void saveByLevel1(List<Map<String, List<ETLModel>>> data,String wlyyQuotaId) throws Exception {
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
        Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
        for (AdminTeam adminTeam : adminTeams) {
            adminTeamMap.put(adminTeam.getId()+"", adminTeam);
        }
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospitalzxFWZ();
         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);
        }
        //全部的市
        Map<String, City> cityMap = new HashMap<String, 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);//市的数据
        //保存市
        saveLevel1City(wlyyQuotaId, cityMap, cityTeam);
        //保存区
        saveLevel1Town(wlyyQuotaId, townsMap, townTeam);
        //保存机构
        saveLevel1Org(wlyyQuotaId, hospitalsMap, orgTeam);
        //保存全科团队
        saveLevel1Team(wlyyQuotaId, adminTeamMap, adminTeam);
    }
    /**
     * 保存二级维度的数据
     * @param data
     * @param wlyyQuotaId
     * @param foreachNum 标识二级维度循环的次数  例如 年龄就传6  性别就传3
     * @param type 1 性别 2 年龄 3 用户分组
     */
    public void saveByLevel2(List<Map<String, Map<String, List<ETLModel>>>> data, String wlyyQuotaId,Integer foreachNum,Integer type) throws Exception {
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
        Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
        for (AdminTeam adminTeam : adminTeams) {
            adminTeamMap.put(adminTeam.getId()+"", adminTeam);
        }
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospitalzxFWZ();
        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);
        }
        //全部的市
        Map<String, City> cityMap = new HashMap<String, City>();
        City city=new City();
        city.setCode(Constant.city);
        city.setName(Constant.cityName);
        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);//市的数据
        //保存市
        saveLevel2City(wlyyQuotaId, cityMap, cityTeam,foreachNum,type);
        //保存区
        saveLevel2Town(wlyyQuotaId, townsMap, townTeam,foreachNum,type);
        //保存机构
        saveLevel2Org(wlyyQuotaId, hospitalsMap, orgTeam,foreachNum,type);
        //保存全科团队
        saveLevel2Team(wlyyQuotaId, adminTeamMap, adminTeam,foreachNum,type);
    }
    private void saveLevel2Team(String wlyyQuotaId, Map<String, AdminTeam> adminTeamMap, Map<String, Map<String, List<ETLModel>>> eltModel, Integer foreachNum, Integer type) {
        for(Map.Entry<String,AdminTeam> adminTeam:adminTeamMap.entrySet()){
            Map<String, List<ETLModel>> oneELTMap= eltModel.get(adminTeam.getKey());
            for(int i=1;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);
                jo.put("teamName", adminTeamObj.getName());
                jo.put("teamId", adminTeamObj.getId());
                String key=i+"";
                jo.put("name", getLevel2Name(key,type));
                redisTemplate.opsForValue().set(new StringBuffer("quota:"+wlyyQuotaId+":1:"+key+":"+adminTeam.getKey()).toString(), jo.toString());
            }
        }
    }
    private void saveLevel2Org(String wlyyQuotaId, Map<String, Hospital> hospitalsMap, Map<String, Map<String, List<ETLModel>>> eltModel, Integer foreachNum, Integer type) {
        for(Map.Entry<String,Hospital> hospital:hospitalsMap.entrySet()){
            Map<String, List<ETLModel>> oneELTMap= eltModel.get(hospital.getKey());
            for(int i=1;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);
                jo.put("orgName", hospitalObj.getName());
                jo.put("orgCode", hospitalObj.getCode());
                String key=i+"";
                jo.put("name", getLevel2Name(key,type));
                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) {
        for(Map.Entry<String,Town> town:townsMap.entrySet()){
            Map<String, List<ETLModel>> oneELTMap= eltModel.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();
                    }
                }
                jo.put("date", DateUtil.dateToStrLong(new Date()));
                jo.put("num", num);
                jo.put("townName", town.getValue().getName());
                jo.put("townCode", 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());
            }
        }
    }
    private void saveLevel2City(String wlyyQuotaId, Map<String, City> cityMap, Map<String, Map<String, List<ETLModel>>> eltModel, Integer foreachNum, Integer type) {
        for(Map.Entry<String,City> city:cityMap.entrySet()){
            Map<String, List<ETLModel>> oneELTMap= eltModel.get(city.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();
                    }
                }
                jo.put("date", DateUtil.dateToStrLong(new Date()));
                jo.put("num", num);
                jo.put("cityName", city.getValue().getName());
                jo.put("cityCode", city.getValue().getCode());
                String key=i+"";
                jo.put("name", getLevel2Name(key,type));
                redisTemplate.opsForValue().set(new StringBuffer("quota:"+wlyyQuotaId+":4:"+key+":"+city.getKey()).toString(), jo.toString());
            }
        }
    }
    private void saveLevel1Team(String wlyyQuotaId, Map<String, AdminTeam> adminTeamMap, Map<String, List<ETLModel>> adminTeam) {
        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("teamName", adminTeamObj.getName());
            jo.put("teamId", adminTeamObj.getId());
            redisTemplate.opsForValue().set(new StringBuffer("quota:"+wlyyQuotaId+":1:"+entry.getKey()).toString(), jo.toString());
        }
    }
    private void saveLevel1Org(String wlyyQuotaId, Map<String, Hospital> hospitalsMap, Map<String, List<ETLModel>> orgTeam) {
        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);
            jo.put("orgName", hospital.getName());
            jo.put("orgCode", hospital.getCode());
            redisTemplate.opsForValue().set(new StringBuffer("quota:"+wlyyQuotaId+":2:"+entry.getKey()).toString(), jo.toString());
        }
    }
    private void saveLevel1Town(String wlyyQuotaId, Map<String, Town> townsMap, Map<String, List<ETLModel>> townTeam) {
        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("townName", entry.getValue().getName());
            jo.put("townCode", entry.getValue().getCode());
            redisTemplate.opsForValue().set(new StringBuffer("quota:"+wlyyQuotaId+":3:"+entry.getKey()).toString(), jo.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();
            }
            jo.put("date", DateUtil.dateToStrLong(new Date()));
            jo.put("num", num);
            jo.put("cityName", entry.getValue().getName());
            jo.put("cityCode", entry.getValue().getCode());
            redisTemplate.opsForValue().set(new StringBuffer("quota:"+wlyyQuotaId+":4:"+entry.getKey()).toString(), jo.toString());
        }
    }
    private String getLevel2Name(String i, Integer type) {
        switch (type){
            case  1:{
                //性别
                return Constant.getLevelSexName(i);
            }
            case  2:{
                //年龄
                return Constant.getLevelAgeName(i);
            }
            case  3:{
                //用户分组
                return Constant.getLevelGroupName(i);
            }
            default:{
                return "";
            }
        }
    }
}