ソースを参照

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

chenweida 8 年 前
コミット
d81632b3f2
17 ファイル変更355 行追加435 行削除
  1. 39 0
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/dataFilter/SignDataFilter.java
  2. 27 0
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/extract/DBExtract.java
  3. 17 0
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/extract/DBPageExtract.java
  4. 50 0
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/model/FilterModel.java
  5. 0 88
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/role/PatientAgeRole.java
  6. 0 69
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/role/PatientSexRole.java
  7. 3 3
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/storage/DBStorage.java
  8. 2 2
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/AllSignExpenseStatusJob.java
  9. 1 1
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/AllSignJob.java
  10. 21 22
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/CurrentDayAllQuotaJob.java
  11. 1 1
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/HealthSignJob.java
  12. 148 199
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/SignAgeGroupDiseaseJob.java
  13. 1 1
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/SignExpenseStatusJob.java
  14. 14 26
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/SignJob.java
  15. 1 1
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/UnSignJob.java
  16. 1 1
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/WaitSignJob.java
  17. 29 21
      patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/util/IdCardUtil.java

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

@ -0,0 +1,39 @@
package com.yihu.wlyy.statistics.etl.dataFilter;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.etl.model.FilterModel;
import com.yihu.wlyy.statistics.model.signfamily.SignFamily;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
/**
 * Created by Administrator on 2016.10.16.
 * 签约数据的过滤
 */
@Component
@Scope("prototype")
public class SignDataFilter {
    public FilterModel filter(List<SignFamily> signFamilies,String level1Key){
        return filterCommon(signFamilies,level1Key,null,null);
    }
    public FilterModel filter(List<SignFamily> signFamilies,String level1Key,String level2Key){
        return filterCommon(signFamilies,level1Key,level2Key,null);
    }
    public FilterModel filter(List<SignFamily> signFamilies,String level1Key,String level2Key,String level3Key){
        return filterCommon(signFamilies,level1Key,level2Key,level3Key);
    }
    private FilterModel filterCommon(List<SignFamily> signFamilies,String level1Key,String level2Key,String level3Key) {
        StringBuffer error =new StringBuffer();//错误信息
        StringBuffer allContent=new StringBuffer();//完整信息
        List<ETLModel> etlModelList=new ArrayList<>();//返回的ETL數據
        return FilterModel.getFiltrerMode(error,allContent,etlModelList);
    }
}

+ 27 - 0
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/extract/DBExtract.java

@ -0,0 +1,27 @@
package com.yihu.wlyy.statistics.etl.extract;
import com.yihu.wlyy.statistics.model.signfamily.SignFamily;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
/**
 * Created by Administrator on 2016.10.16.
 * 数据库抽取
 */
@Component
@Scope("prototype")
public class DBExtract {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    public List<Object> extract(Class clazz,String sql){
        List<Object> returnList= jdbcTemplate.query(sql,new BeanPropertyRowMapper(clazz));
        return returnList;
    }
}

+ 17 - 0
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/extract/DBPageExtract.java

@ -0,0 +1,17 @@
package com.yihu.wlyy.statistics.etl.extract;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
/**
 * Created by Administrator on 2016.10.16.
 * 分页抽取器
 */
@Component
@Scope("prototype")
public class DBPageExtract {
    @Autowired
    private JdbcTemplate jdbcTemplate;
}

+ 50 - 0
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/model/FilterModel.java

@ -0,0 +1,50 @@
package com.yihu.wlyy.statistics.etl.model;
import java.util.List;
/**
 * Created by Administrator on 2016.10.16.
 * 過濾器模型
 */
public class FilterModel {
    private StringBuffer error;//错误信息
    private StringBuffer allContent;//完整信息
    private List<ETLModel> etlModelList;
    private FilterModel(){
    }
    public StringBuffer getError() {
        return error;
    }
    public void setError(StringBuffer error) {
        this.error = error;
    }
    public StringBuffer getAllContent() {
        return allContent;
    }
    public void setAllContent(StringBuffer allContent) {
        this.allContent = allContent;
    }
    public List<ETLModel> getEtlModelList() {
        return etlModelList;
    }
    public void setEtlModelList(List<ETLModel> etlModelList) {
        this.etlModelList = etlModelList;
    }
    public FilterModel(StringBuffer error, StringBuffer allContent, List<ETLModel> etlModelList) {
        this.error = error;
        this.allContent = allContent;
        this.etlModelList = etlModelList;
    }
    public static FilterModel getFiltrerMode(StringBuffer error, StringBuffer allContent, List<ETLModel> etlModelList){
        return new FilterModel(error,allContent,etlModelList);
    }
}

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

@ -1,88 +0,0 @@
package com.yihu.wlyy.statistics.etl.role;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.job.business.Constant;
import com.yihu.wlyy.statistics.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 - 69
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/etl/role/PatientSexRole.java

@ -1,69 +0,0 @@
package com.yihu.wlyy.statistics.etl.role;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.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);
        }
    }
}

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

@ -210,7 +210,7 @@ public class DBStorage   {
     * @param wlyyQuota
     * @param foreachNum2 标识二级维度循环的次数  例如 年龄就传6  性别就传3
     * @param foreachNum3 标识三级维度循环的次数  例如 年龄就传6  性别就传3
     * @param type 1 性别 2 年龄 3 用户分组 4.签约费用
     * @param type 1 性别 2 年龄 3 用户分组 4.签约费用 5
     */
    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;
@ -800,8 +800,8 @@ public class DBStorage   {
    private String getLevel3Name(String j, Integer type) {
        switch (type){
            case  1:{
                //签约费用
                return Constant.getLevelExpenseName(j);
                //疾病类型
                return Constant.getLevelDiseaseName(j);
            }
            default:{
                return "";

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

@ -137,7 +137,7 @@ public class AllSignExpenseStatusJob implements Job{
        List<ETLModel> etlModels = new ArrayList<ETLModel>();
        List<SignFamily> signFamilys =null;
        while (true){
            String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and a.status >= 1  and  a.apply_date< '"+dateTemp+"' limit "+start+","+pageSize ;
            String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and  a.apply_date< '"+dateTemp+"' limit "+start+","+pageSize ;
            signFamilys = jdbcTemplate.query(sql,new BeanPropertyRowMapper(SignFamily .class));  // signFamilyDao.findByJiatingSignYesterday(dateTemp);
            int i=0;
            //数据过滤清洗出脏数据  -----------start
@ -203,7 +203,7 @@ public class AllSignExpenseStatusJob implements Job{
                    errorCount++;
                    continue;
                }
                etlModel.setLevel2Key(signFamily.getExpensesStatus());//设置二级维度的Key
                etlModel.setLevel2Key(StringUtils.isEmpty(signFamily.getExpensesStatus())?"0":signFamily.getExpensesStatus());//设置二级维度的Key 如果是空填0
                etlModel.setAdminTeam(adminTeam.getId() + "");
                etlModel.setHospital(orgCodeTemp);
                etlModel.setTown(hospital.getTown());

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

@ -121,7 +121,7 @@ public class AllSignJob implements Job {
        List<ETLModel> etlModels = new ArrayList<ETLModel>();
        List<SignFamily> signFamilys =null;
        while (true){
            String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and a.status >= 1  and expenses_status=1 and a.apply_date< '"+dateTemp+"' limit "+start+","+pageSize ;
            String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2  and expenses_status=1 and a.apply_date< '"+dateTemp+"' limit "+start+","+pageSize ;
            signFamilys = jdbcTemplate.query(sql,new BeanPropertyRowMapper(SignFamily .class));  // signFamilyDao.findByJiatingSignYesterday(dateTemp);
            //数据过滤清洗出脏数据  -----------start
           int i=0;

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

@ -5,7 +5,6 @@ import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.etl.role.*;
import com.yihu.wlyy.statistics.etl.storage.RedisStorage;
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;
@ -60,10 +59,6 @@ public class CurrentDayAllQuotaJob implements Job {
    @Autowired
    private Level2Role level2Role;
    @Autowired
    private PatientAgeRole patientAgeRole;
    @Autowired
    private PatientSexRole patientSexRole;
    @Autowired
    private RedisStorage redisStorage;
    @Autowired
    private SignPatientLabelInfoDao signPatientLabelInfoDao;
@ -162,7 +157,7 @@ public class CurrentDayAllQuotaJob implements Job {
        errorContent=new StringBuffer();
        String quotaId="14";
        //找出今天的签约信息
        String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and a.status =1 and  a.apply_date>= '"+now+"' and  a.apply_date< '"+tomorrow+"' ";
        String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2  and  a.apply_date>= '"+now+"' and  a.apply_date< '"+tomorrow+"' ";
        List<SignFamily> signFamilys = jdbcTemplate.query(sql,new BeanPropertyRowMapper(SignFamily .class));
        Long cityCount = new Long(0L); //统计到市的数目
@ -265,7 +260,7 @@ public class CurrentDayAllQuotaJob implements Job {
    private void computequota_13() {
        errorContent=new StringBuffer();
        //找出今天的签约信息 yesterday,now
        String sql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and a.status =1 and  a.apply_date>= '"+now+"' and  a.apply_date< '"+tomorrow+"' and a.expenses_status=1 ";
        String sql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2  and  a.apply_date>= '"+now+"' and  a.apply_date< '"+tomorrow+"' and a.expenses_status=1 ";
        List<SignFamily> signFamilys = jdbcTemplate.query(sql,new BeanPropertyRowMapper(SignFamily .class));
        Long cityCount = new Long(0L); //统计到市的数目
        Long townCount = new Long(0L); //统计到所有区的数目
@ -367,7 +362,7 @@ public class CurrentDayAllQuotaJob implements Job {
        errorContent=new StringBuffer();
        String quotaId="16";
        //找出今天的签约信息
        String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and a.status =1 and  a.apply_date>= '"+now+"' and  a.apply_date< '"+tomorrow+"' ";
        String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2  and  a.apply_date>= '"+now+"' and  a.apply_date< '"+tomorrow+"' ";
        List<SignFamily> signFamilys = jdbcTemplate.query(sql,new BeanPropertyRowMapper(SignFamily .class));
        Long cityCount = new Long(0L); //统计到市的数目
@ -471,7 +466,7 @@ public class CurrentDayAllQuotaJob implements Job {
        errorContent=new StringBuffer();
        String quotaId="15";
        //找出今天的签约信息
        String sql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and a.status =1 and  a.apply_date>= '"+now+"' and  a.apply_date< '"+tomorrow+"' and a.expenses_status=1 ";
        String sql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and  a.apply_date>= '"+now+"' and  a.apply_date< '"+tomorrow+"' and a.expenses_status=1 ";
        List<SignFamily> signFamilys = jdbcTemplate.query(sql,new BeanPropertyRowMapper(SignFamily .class));
        Long cityCount = new Long(0L); //统计到市的数目
@ -594,7 +589,7 @@ public class CurrentDayAllQuotaJob implements Job {
            townsMap.put(town.getCode(), town);
        }
        //找出今天的签约信息
        String sql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and a.status =1 and  a.apply_date>= '"+now+"' and  a.apply_date< '"+tomorrow+"' and a.expenses_status=1 ";
        String sql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and  a.apply_date>= '"+now+"' and  a.apply_date< '"+tomorrow+"' and a.expenses_status=1 ";
        List<SignFamily> signFamilys = jdbcTemplate.query(sql,new BeanPropertyRowMapper(SignFamily .class));
        //数组里面第一个是健康人群 第二个是慢病人群 第三个是65岁以上人群
        Map<String, Map<String, Map>> cityAgeMap = new HashMap<String, Map<String, Map>>();//key是市行政代码 目前只有厦门市
@ -849,7 +844,7 @@ public class CurrentDayAllQuotaJob implements Job {
    private void computequota_1() {
         errorContent=new StringBuffer();
        //找出今天的签约信息 yesterday,now
        String sql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and a.status =1 and  a.apply_date>= '"+now+"' and  a.apply_date< '"+tomorrow+"' and a.expenses_status=1 ";
        String sql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and  a.apply_date>= '"+now+"' and  a.apply_date< '"+tomorrow+"' and a.expenses_status=1 ";
        List<SignFamily> signFamilys = jdbcTemplate.query(sql,new BeanPropertyRowMapper(SignFamily .class));
        Long cityCount = new Long(0L); //统计到市的数目
        Long townCount = new Long(0L); //统计到所有区的数目
@ -951,7 +946,7 @@ public class CurrentDayAllQuotaJob implements Job {
         errorContent=new StringBuffer();
        String quotaId="2";
        //找出今天的解约信息
        String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and a.status in (-3,-4) and  a.apply_unsign_date>= '"+now+"' and  a.apply_unsign_date< '"+tomorrow+"' and a.expenses_status=1 ";
        String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and  a.apply_unsign_date>= '"+now+"' and  a.apply_unsign_date< '"+tomorrow+"' and a.expenses_status=1 ";
        List<SignFamily> signFamilys = jdbcTemplate.query(sql,new BeanPropertyRowMapper(SignFamily .class));
        Long cityCount = new Long(0L); //统计到市的数目
@ -1098,7 +1093,7 @@ public class CurrentDayAllQuotaJob implements Job {
            //统计区 ---------------start--------------
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) {
                errorContent.append("咨询Id:"+consultTeam.getId()+",机构Id:"+hospital.getId()+",医生团队的机构不存在");
                errorContent.append("咨询Id:"+consultTeam.getId()+",机构Id:,医生团队的机构不存在");
                isAll=false;
                continue;
            }
@ -1163,7 +1158,7 @@ public class CurrentDayAllQuotaJob implements Job {
            }
            SignFamily signFamily=signFamilyDao.findByIdcard(idCard.toString());
            if(signFamily==null){
                errorContent.append("随访id:"+plan.get("id")+",签约code:"+signFamily.getCode()+",随访中的患者身份证在签约表中找不到数据");
                errorContent.append("随访id:"+plan.get("id")+",签约code:随访中的患者身份证在签约表中找不到数据");
                isAll=false;
                continue;
            }
@ -1343,7 +1338,7 @@ public class CurrentDayAllQuotaJob implements Job {
        errorContent=new StringBuffer();
        String quotaId="6";
        //找出今天的签约信息
        String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and a.status =1 and  a.apply_date>= '"+now+"' and  a.apply_date< '"+tomorrow+"' and a.expenses_status=1 ";
        String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and  a.apply_date>= '"+now+"' and  a.apply_date< '"+tomorrow+"' and a.expenses_status=1 ";
        List<SignFamily> signFamilys = jdbcTemplate.query(sql,new BeanPropertyRowMapper(SignFamily .class));
        Long cityCount = new Long(0L); //统计到市的数目
@ -1415,11 +1410,14 @@ public class CurrentDayAllQuotaJob implements Job {
                errorCount++;
                continue;
            }
            String sex= IdCardUtil.getSexForIdcard(signFamily.getIdcard());
            if("3".equals(sex)){
                errorContent.append("签约code:"+signFamily.getCode()+",IdCard解析错误,分到未知的组里");
            }
            etlModel.setHospital(orgCodeTemp);
            etlModel.setTown(hospital.getTown());
            etlModel.setCity(Constant.city);
            etlModel.setAdminTeam(signFamily.getAdminTeamCode()+"");
            etlModel.setIdcard(signFamily.getIdcard());
            etlModels.add(etlModel);
            //统计数目+1
            cityCount++;
@ -1431,7 +1429,7 @@ public class CurrentDayAllQuotaJob implements Job {
        try{
            //统计数据
            List<Map<String, List<ETLModel>>>  returnData1s= levelRole.elt(etlModels);
            List<Map<String, Map<String, List<ETLModel>>>> patientSexRoleData= patientSexRole.elt(returnData1s);
            List<Map<String, Map<String, List<ETLModel>>>> patientSexRoleData= level2Role.elt(returnData1s);
            //保存数据
            redisStorage.saveByLevel2(patientSexRoleData,quotaId,3,1);
        }catch (Exception e){
@ -1464,7 +1462,7 @@ public class CurrentDayAllQuotaJob implements Job {
            townsMap.put(town.getCode(), town);
        }
        //找出今天的解约信息
        String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and a.status =1 and  a.apply_date>= '"+now+"' and  a.apply_date< '"+tomorrow+"' and a.expenses_status=1 ";
        String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and  a.apply_date>= '"+now+"' and  a.apply_date< '"+tomorrow+"' and a.expenses_status=1 ";
        List<SignFamily> signFamilys = jdbcTemplate.query(sql,new BeanPropertyRowMapper(SignFamily .class));
        Long cityCount = new Long(0L); //统计到市的数目
@ -1603,7 +1601,7 @@ public class CurrentDayAllQuotaJob implements Job {
         errorContent=new StringBuffer();
        String quotaId="8";
        //找出今天的签约信息
        String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and a.status =1 and  a.apply_date>= '"+now+"' and  a.apply_date< '"+tomorrow+"' and a.expenses_status=1 ";
        String sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2  and  a.apply_date>= '"+now+"' and  a.apply_date< '"+tomorrow+"' and a.expenses_status=1 ";
        List<SignFamily> signFamilys = jdbcTemplate.query(sql,new BeanPropertyRowMapper(SignFamily .class));
        Long cityCount = new Long(0L); //统计到市的数目
        Long townCount = new Long(0L); //统计到所有区的数目
@ -1674,11 +1672,12 @@ public class CurrentDayAllQuotaJob implements Job {
                errorCount++;
                continue;
            }
            int age=IdCardUtil.getAgeForIdcard(signFamily.getIdcard());
            etlModel.setLevel2Key(age+"");
            etlModel.setHospital(orgCodeTemp);
            etlModel.setAdminTeam(signFamily.getAdminTeamCode()+"");
            etlModel.setTown(hospital.getTown());
            etlModel.setCity(Constant.city);
            etlModel.setIdcard(signFamily.getIdcard());
            etlModels.add(etlModel);
            //统计数目+1
            cityCount++;
@ -1690,7 +1689,7 @@ public class CurrentDayAllQuotaJob implements Job {
        try{
            //统计数据
            List<Map<String, List<ETLModel>>>  returnData1s= levelRole.elt(etlModels);
            List<Map<String, Map<String, List<ETLModel>>>> patientAgeRoleData= patientAgeRole.elt(returnData1s);
            List<Map<String, Map<String, List<ETLModel>>>> patientAgeRoleData= level2Role.elt(returnData1s);
            //保存数据
            redisStorage.saveByLevel2(patientAgeRoleData,quotaId,6,2);
        }catch (Exception e){
@ -1705,7 +1704,7 @@ public class CurrentDayAllQuotaJob implements Job {
         errorContent=new StringBuffer();
        String quotaId="9";
        //找出今天的待签约信息
        String sql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and a.status =0  and  a.patient_apply_date>= '"+now+"' and  a.patient_apply_date< '"+tomorrow+"' and a.expenses_status=1 ";
        String sql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2   and  a.patient_apply_date>= '"+now+"' and  a.patient_apply_date< '"+tomorrow+"' and a.expenses_status=1 ";
        List<SignFamily> signFamilys = jdbcTemplate.query(sql,new BeanPropertyRowMapper(SignFamily .class));
        Long cityCount = new Long(0L); //统计到市的数目

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

@ -114,7 +114,7 @@ public class HealthSignJob implements Job {
            townsMap.put(town.getCode(), town);
        }
        //找出今天的签约信息
        String sql=" select code,idcard,hospital,admin_team_code,patient from wlyy_sign_family a where  a.type =2 and a.status =1 and  a.apply_date>= '"+daybefore+ Constant.quota_date_last+"' and  a.apply_date< '"+yesterday+ Constant.quota_date_last+"' and a.expenses_status=1 ";
        String sql=" select code,idcard,hospital,admin_team_code,patient from wlyy_sign_family a where  a.type =2 and  a.apply_date>= '"+daybefore+ Constant.quota_date_last+"' and  a.apply_date< '"+yesterday+ Constant.quota_date_last+"' and a.expenses_status=1 ";
        List<SignFamily> signFamilys = jdbcTemplate.query(sql,new BeanPropertyRowMapper(SignFamily .class));
        Long cityCount = new Long(0L); //统计到市的数目

+ 148 - 199
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/job/business/SignAgeGroupDiseaseJob.java

@ -1,6 +1,9 @@
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.*;
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.job.WlyyQuotaResult;
@ -52,8 +55,15 @@ public class SignAgeGroupDiseaseJob implements Job {
    private TownDao townDao;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private Level1Role levelRole;
    @Autowired
    private Level2Role level2Role;
    @Autowired
    private StringRedisTemplate redisTemplate;
    private Level3Role level3Role;
    @Autowired
    private DBStorage dbStorage;
    @Autowired
    private SignPatientLabelInfoDao signPatientLabelInfoDao;
@ -84,214 +94,153 @@ public class SignAgeGroupDiseaseJob implements Job {
     */
    @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);
        jdbcTemplate.execute("delete from wlyy_quota_result where quota_date='"+yesterday+"' and quato_code='"+12+"'");
        //新建任务日志对象
        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 sql=" select code,idcard,hospital,admin_team_code,patient from wlyy_sign_family a where  a.type =2 and a.status =1 and  a.apply_date>= '"+daybefore+ Constant.quota_date_last+"' and  a.apply_date< '"+yesterday+ Constant.quota_date_last+"' and a.expenses_status=1 ";
        List<SignFamily> signFamilys = jdbcTemplate.query(sql,new BeanPropertyRowMapper(SignFamily .class));
        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);
            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);
            //判断社区有没有值
            Hospital hospital=hospitalsMap.get(orgCodeTemp);
            if(hospital == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            //找出今天的签约信息
            String sql=" select code,idcard,hospital,admin_team_code,patient from wlyy_sign_family a where  a.type =2 and a.status =1 and  a.apply_date>= '"+daybefore+ Constant.quota_date_last+"' and  a.apply_date< '"+yesterday+ Constant.quota_date_last+"' and a.expenses_status=1 ";
            List<SignFamily> signFamilys = jdbcTemplate.query(sql,new BeanPropertyRowMapper(SignFamily .class));
            //数组里面第一个是健康人群 第二个是慢病人群 第三个是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 : 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.getAdminTeamCode();
                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.getAdminTeamCode()+"");
                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;
                }
                Integer age = IdCardUtil.getAgeForIdcard(idCard);//根据card解析年龄
                String ageCode = getAgeCode(age);//得到年龄的code
                boolean hasGXY = false;//有高血压
                boolean hasTNB = false;//有糖尿病
                //如果是慢病的 统计高血压的 糖尿病  1高血压,2糖尿病  3 糖尿病和高血压 4健康人群数
                String diseaseType="4";
                //得到患者的疾病标签
                List<SignPatientLabelInfo>  signPatientLabelInfoList= signPatientLabelInfoDao.findByPatientAndLabelTypeAndStatus(signFamily.getPatient(),"3",1);
                for (SignPatientLabelInfo signPatientLabelInfo:signPatientLabelInfoList){
                    if("1".equals(signPatientLabelInfo.getLabel())){
                        diseaseType="1";
                        hasGXY=true;
                    }
                    if("2".equals(signPatientLabelInfo.getLabel())){
                        diseaseType="2";
                        hasTNB=true;
                    }
                }
                if (hasTNB&&hasGXY){
                    diseaseType="3";
                }
                //统计市
                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++;
            Long adminId=signFamily.getAdminTeamCode();
            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, 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");
                   }
               }
            AdminTeam adminTeam=adminTeamMap.get(signFamily.getAdminTeamCode()+"");
            if(adminTeam == null) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的Admin_Team_Id数据不存在");
                isAll=false;
                errorCount++;
                continue;
            }
            //保存区级
            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");
                    }
                }
            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> 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");
                    }
            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;
            }
            boolean hasGXY = false;//有高血压
            boolean hasTNB = false;//有糖尿病
            //如果是慢病的 统计高血压的 糖尿病  1高血压,2糖尿病  3 糖尿病和高血压 4健康人群数
            String diseaseType="4";
            //得到患者的疾病标签
            List<SignPatientLabelInfo>  signPatientLabelInfoList= signPatientLabelInfoDao.findByPatientAndLabelTypeAndStatus(signFamily.getPatient(),"3",1);
            for (SignPatientLabelInfo signPatientLabelInfo:signPatientLabelInfoList){
                if("1".equals(signPatientLabelInfo.getLabel())){
                    diseaseType="1";
                    hasGXY=true;
                }
                if("2".equals(signPatientLabelInfo.getLabel())){
                    diseaseType="2";
                    hasTNB=true;
                }
            }
            if (hasTNB&&hasGXY){
                diseaseType="3";
            }
            wlyyJobLog.setJobEndTime(new Date());
            wlyyJobLog.setJobContent(saveContent(signFamilys,qkCount,orgCount,townCount,cityCount,isAll,errorContent,errorCount,sql));
            wlyyJobLog.setJobType(isAll?"1":"0");
            quartzJobLogDao.save(wlyyJobLog);
        } catch (Exception e) {
            etlModel.setLevel2Key(IdCardUtil.getAgeForIdcard(signFamily.getIdcard())+"");
            etlModel.setLevel3Key(diseaseType);
            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>>>> patientSexRoleData= level2Role.elt(returnDatas);
            List<Map<String, Map<String, Map<String, List<ETLModel>>>>> returnD=level3Role.elt(patientSexRoleData);
            //保存数据
            dbStorage.saveByLevel3(returnD,yesterday,wlyyQuota,6,4,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,sql));
        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,String sql) {
        StringBuffer string=new StringBuffer("统计"+yesterday+" 的签约数据完成 ,数据库查询到签约数目:"+signFamilys.size());

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

@ -110,7 +110,7 @@ public class SignExpenseStatusJob implements Job{
            townsMap.put(town.getCode(), town);
        }
        //找出今天的已改簽信息
        String sql=" select code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and a.status =1 and  a.apply_date>= '"+daybefore+ Constant.quota_date_last+"' and  a.apply_date< '"+yesterday+ Constant.quota_date_last+"'  ";
        String sql=" select code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and  a.apply_date>= '"+daybefore+ Constant.quota_date_last+"' and  a.apply_date< '"+yesterday+ Constant.quota_date_last+"'  ";
        List<SignFamily> signFamilys = jdbcTemplate.query(sql,new BeanPropertyRowMapper(SignFamily .class));  // signFamilyDao.findByJiatingSignYesterday(dateTemp);
        Long cityCount = new Long(0L); //统计到市的数目

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

@ -4,28 +4,22 @@ 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.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;
import com.yihu.wlyy.statistics.util.IdCardUtil;
import com.yihu.wlyy.statistics.vo.WlyyJobConfigVO;
import com.yihu.wlyy.statistics.vo.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.context.annotation.Scope;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
@ -45,32 +39,20 @@ 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 Level2Role level2Role;
    @Autowired
    private PatientAgeRole patientAgeRole;
    @Autowired
    private PatientSexRole patientSexRole;
    @Autowired
    private DBStorage dbStorage;
    @Autowired
    private SignPatientLabelInfoDao signPatientLabelInfoDao;
@ -157,7 +139,7 @@ public class SignJob implements Job {
                townsMap.put(town.getCode(), town);
            }
            //找出今天的签约信息
            String sql=" select code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and a.status =1 and  a.apply_date>= '"+daybefore+ Constant.quota_date_last+"' and  a.apply_date< '"+yesterday+ Constant.quota_date_last+"' and a.expenses_status=1 ";
            String sql=" select code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and  a.apply_date>= '"+daybefore+ Constant.quota_date_last+"' and  a.apply_date< '"+yesterday+ Constant.quota_date_last+"' and a.expenses_status=1 ";
            List<SignFamily> signFamilys = jdbcTemplate.query(sql,new BeanPropertyRowMapper(SignFamily .class));
            Long cityCount = new Long(0L); //统计到市的数目
@ -230,6 +212,11 @@ public class SignJob implements Job {
                    errorCount++;
                    continue;
                }
                String sex= IdCardUtil.getSexForIdcard(signFamily.getIdcard());
                if("3".equals(sex)){
                    errorContent.append("签约code:"+signFamily.getCode()+",IdCard解析错误,分到未知的组里");
                }
                etlModel.setLevel2Key(sex);
                etlModel.setHospital(orgCodeTemp);
                etlModel.setTown(hospital.getTown());
                etlModel.setCity(Constant.city);
@ -245,7 +232,7 @@ public class SignJob implements Job {
            try{
                //统计数据
                List<Map<String, List<ETLModel>>>  returnData1s= levelRole.elt(etlModels);
                List<Map<String, Map<String, List<ETLModel>>>> patientSexRoleData= patientSexRole.elt(returnData1s);
                List<Map<String, Map<String, List<ETLModel>>>> patientSexRoleData= level2Role.elt(returnData1s);
                //保存数据
                dbStorage.saveByLevel2(patientSexRoleData,yesterday,wlyyQuota,3,1);
            }catch (Exception e){
@ -295,7 +282,7 @@ public class SignJob implements Job {
            townsMap.put(town.getCode(), town);
        }
        //找出今天的解约信息
        String sql=" select code,idcard,hospital,admin_team_code,patient from wlyy_sign_family a where  a.type =2 and a.status =1 and  a.apply_date>= '"+daybefore+ Constant.quota_date_last+"' and  a.apply_date< '"+yesterday+ Constant.quota_date_last+"' and a.expenses_status=1 ";
        String sql=" select code,idcard,hospital,admin_team_code,patient from wlyy_sign_family a where  a.type =2 and  a.apply_date>= '"+daybefore+ Constant.quota_date_last+"' and  a.apply_date< '"+yesterday+ Constant.quota_date_last+"' and a.expenses_status=1 ";
        List<SignFamily> signFamilys = jdbcTemplate.query(sql,new BeanPropertyRowMapper(SignFamily .class));
        Long cityCount = new Long(0L); //统计到市的数目
@ -465,7 +452,7 @@ public class SignJob implements Job {
                townsMap.put(town.getCode(), town);
            }
            //找出今天的签约信息
            String sql=" select code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and a.status =1 and  a.apply_date>= '"+daybefore+ Constant.quota_date_last+"' and  a.apply_date< '"+yesterday+ Constant.quota_date_last+"' and a.expenses_status=1 ";
            String sql=" select code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and  a.apply_date>= '"+daybefore+ Constant.quota_date_last+"' and  a.apply_date< '"+yesterday+ Constant.quota_date_last+"' and a.expenses_status=1 ";
            List<SignFamily> signFamilys = jdbcTemplate.query(sql,new BeanPropertyRowMapper(SignFamily .class));
            Long cityCount = new Long(0L); //统计到市的数目
            Long townCount = new Long(0L); //统计到所有区的数目
@ -537,10 +524,11 @@ public class SignJob implements Job {
                    errorCount++;
                    continue;
                }
                int age=IdCardUtil.getAgeForIdcard(signFamily.getIdcard());
                etlModel.setLevel2Key(age+"");
                etlModel.setHospital(orgCodeTemp);
                etlModel.setTown(hospital.getTown());
                etlModel.setCity(Constant.city);
                etlModel.setIdcard(signFamily.getIdcard());
                etlModels.add(etlModel);
                //统计数目+1
                cityCount++;
@ -552,7 +540,7 @@ public class SignJob implements Job {
            try{
                //统计数据
                List<Map<String, List<ETLModel>>>  returnData1s= levelRole.elt(etlModels);
                List<Map<String, Map<String, List<ETLModel>>>> patientAgeRoleData= patientAgeRole.elt(returnData1s);
                List<Map<String, Map<String, List<ETLModel>>>> patientAgeRoleData= level2Role.elt(returnData1s);
                //保存数据
                dbStorage.saveByLevel2(patientAgeRoleData,yesterday,wlyyQuota,6,2);
            }catch (Exception e){
@ -601,7 +589,7 @@ public class SignJob implements Job {
            townsMap.put(town.getCode(), town);
        }
        //找出今天的签约信息 yesterday,now
        String sql=" select code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and a.status =1 and  a.apply_date>= '"+daybefore+ Constant.quota_date_last+"' and  a.apply_date< '"+yesterday+ Constant.quota_date_last+"' and a.expenses_status=1 ";
        String sql=" select code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and  a.apply_date>= '"+daybefore+ Constant.quota_date_last+"' and  a.apply_date< '"+yesterday+ Constant.quota_date_last+"' and a.expenses_status=1 ";
        List<SignFamily> signFamilys = jdbcTemplate.query(sql,new BeanPropertyRowMapper(SignFamily .class));
        Long cityCount = new Long(0L); //统计到市的数目

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

@ -107,7 +107,7 @@ public class UnSignJob implements Job {
            townsMap.put(town.getCode(), town);
        }
        //找出今天的解约信息
        String sql=" select code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and a.status in (-3,-4) and  a.apply_unsign_date>= '"+daybefore+ Constant.quota_date_last+"' and  a.apply_unsign_date< '"+yesterday+ Constant.quota_date_last+"' and a.expenses_status=1 ";
        String sql=" select code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and  a.apply_unsign_date>= '"+daybefore+ Constant.quota_date_last+"' and  a.apply_unsign_date< '"+yesterday+ Constant.quota_date_last+"' and a.expenses_status=1 ";
        List<SignFamily> signFamilys = jdbcTemplate.query(sql,new BeanPropertyRowMapper(SignFamily .class));
        Long cityCount = new Long(0L); //统计到市的数目

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

@ -106,7 +106,7 @@ public class WaitSignJob implements Job {
            townsMap.put(town.getCode(), town);
        }
        //找出今天的待签约信息
        String sql=" select code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and a.status =0  and  a.patient_apply_date>= '"+daybefore+ Constant.quota_date_last+"' and  a.patient_apply_date< '"+yesterday+ Constant.quota_date_last+"'  ";
        String sql=" select code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2  and  a.patient_apply_date>= '"+daybefore+ Constant.quota_date_last+"' and  a.patient_apply_date< '"+yesterday+ Constant.quota_date_last+"'  ";
        List<SignFamily> signFamilys = jdbcTemplate.query(sql,new BeanPropertyRowMapper(SignFamily .class));
        Long cityCount = new Long(0L); //统计到市的数目

+ 29 - 21
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/util/IdCardUtil.java

@ -23,27 +23,32 @@ public class IdCardUtil {
    public static String getSexForIdcard(String CardCode)
            throws Exception {
        String sex = Constant.level_sex_3;
        if (CardCode.length() == 18) {
            if (Integer.parseInt(CardCode.substring(16).substring(0, 1)) % 2 == 0) {// 判断性别
                // modifid by lyr 2016-09-29
                // sex =  Constant.level_sex_2;
                sex = Constant.level_sex_1;
                // modifid by lyr 2016-09-29
            } else {
                // modifid by lyr 2016-09-29
                // sex =  Constant.level_sex_1;
                sex = Constant.level_sex_2;
                // modifid by lyr 2016-09-29
            }
        } else if (CardCode.length() == 15) {
            String usex = CardCode.substring(14, 15);// 用户的性别
            if (Integer.parseInt(usex) % 2 == 0) {
                // sex =  Constant.level_sex_2;
                sex = Constant.level_sex_1;
            } else {
                // sex =  Constant.level_sex_1;
                sex = Constant.level_sex_2;
        try {
            if (CardCode.length() == 18) {
                if (Integer.parseInt(CardCode.substring(16).substring(0, 1)) % 2 == 0) {// 判断性别
                    // modifid by lyr 2016-09-29
                    // sex =  Constant.level_sex_2;
                    sex = Constant.level_sex_1;
                    // modifid by lyr 2016-09-29
                } else {
                    // modifid by lyr 2016-09-29
                    // sex =  Constant.level_sex_1;
                    sex = Constant.level_sex_2;
                    // modifid by lyr 2016-09-29
                }
            } else if (CardCode.length() == 15) {
                String usex = CardCode.substring(14, 15);// 用户的性别
                if (Integer.parseInt(usex) % 2 == 0) {
                    // sex =  Constant.level_sex_2;
                    sex = Constant.level_sex_1;
                } else {
                    // sex =  Constant.level_sex_1;
                    sex = Constant.level_sex_2;
                }
            }
        }catch (Exception e){
            return  Constant.level_sex_3;
        }
        return sex;
    }
@ -96,6 +101,7 @@ public class IdCardUtil {
     */
    public static int getAgeForIdcard(String idcard) {
        int age = 0;
        try{
        if (StringUtils.isEmpty(idcard)) {
            return age;
@ -118,7 +124,9 @@ public class IdCardUtil {
        if (cal.get(Calendar.MONTH) > (month - 1) || (cal.get(Calendar.MONTH) == (month - 1) && cal.get(Calendar.DATE) > day)) {
            age--;
        }
        }catch (Exception e){
            return age;
        }
        return age;
    }