Просмотр исходного кода

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

chenweida 8 лет назад
Родитель
Сommit
4826c85b2c

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

@ -1,13 +1,27 @@
package com.yihu.wlyy.statistics.etl.dataFilter;
import com.yihu.wlyy.statistics.dao.DoctorAdminTeamDao;
import com.yihu.wlyy.statistics.dao.HospitalDao;
import com.yihu.wlyy.statistics.dao.SignPatientLabelInfoDao;
import com.yihu.wlyy.statistics.dao.TownDao;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.etl.model.FilterModel;
import com.yihu.wlyy.statistics.job.business.Constant;
import com.yihu.wlyy.statistics.model.hosptial.Hospital;
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 org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * Created by Administrator on 2016.10.16.
@ -17,23 +31,292 @@ import java.util.List;
@Scope("prototype")
public class SignDataFilter {
    public FilterModel filter(List<SignFamily> signFamilies,String level1Key){
        return filterCommon(signFamilies,level1Key,null,null);
    public static String level2Sex="1";//性别
    public static String level2Age="2";//年龄
    public static String level2Group="3";//分组
    public static String level2Expenses="4";//费用
    public static String level2Health="5";//健康服务分布
    public static String level3Disease="1";//疾病分组
    private StringBuffer errorContent =new StringBuffer();//错误信息
    private StringBuffer allContent=new StringBuffer();//完整信息
    @Autowired
    private HospitalDao hospitalDao;
    @Autowired
    private TownDao townDao;
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    @Autowired
    private SignPatientLabelInfoDao signPatientLabelInfoDao;
    /**
     * 过滤数据
     * @param signFamilies 签约列表
     * @param filterDate 过滤的是哪天的数据 yyyy-MM-dd
     * @return
     */
    public FilterModel filter(List<SignFamily> signFamilies,String filterDate){
        return filterCommon(signFamilies,null,null,filterDate);
    }
    public FilterModel filter(List<SignFamily> signFamilies,String level1Key,String level2Key){
        return filterCommon(signFamilies,level1Key,level2Key,null);
    /**
     * 过滤数据
     * @param signFamilies 签约列表
     * @param level2Key 二级维度的key
     * @param filterDate 过滤的是哪天的数据 yyyy-MM-dd
     * @return
     */
    public FilterModel filter(List<SignFamily> signFamilies,String level2Key,String filterDate){
        return filterCommon(signFamilies,level2Key,null,filterDate);
    }
    public FilterModel filter(List<SignFamily> signFamilies,String level1Key,String level2Key,String level3Key){
        return filterCommon(signFamilies,level1Key,level2Key,level3Key);
    /**
     * 过滤数据
     * @param signFamilies 签约列表
     * @param level2Key 二级维度的key
     * @param level3Key 三级维度的key
     * @param filterDate 过滤的是哪天的数据 yyyy-MM-dd
     * @return
     */
    public FilterModel filter(List<SignFamily> signFamilies,String level2Key,String level3Key,String filterDate){
        return filterCommon(signFamilies,level2Key,level3Key,filterDate);
    }
    private FilterModel filterCommon(List<SignFamily> signFamilies,String level1Key,String level2Key,String level3Key) {
        StringBuffer error =new StringBuffer();//错误信息
        StringBuffer allContent=new StringBuffer();//完整信息
    /**
     * 公共的抽取方法
     *  @param signFamilies 签约列表
     * @param level2Key 二级维度的key
     * @param level3Key 三级维度的key
     * @param filterDate 过滤的是哪天的数据 yyyy-MM-dd
     * @return
     */
    private FilterModel filterCommon(List<SignFamily> signFamilies ,String level2Key,String level3Key,String filterDate) {
        //查找出系统全部的全科医生
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
        Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
        for (AdminTeam adminTeam : adminTeams) {
            adminTeamMap.put(adminTeam.getId()+"", adminTeam);
        }
        //查找出系统全部的机构
        List<Hospital> hospitals = hospitalDao.findHospital2();
        Map<String, Hospital> hospitalsMap = new HashMap<String, Hospital>();
        for (Hospital hospital : hospitals) {
            hospitalsMap.put(hospital.getCode(), hospital);
        }
        //查找出厦门市全部的区
        List<Town> towns = townDao.findByCityCode(Constant.city);
        Map<String, Town> townsMap = new HashMap<String, Town>();
        for (Town town : towns) {
            townsMap.put(town.getCode(), town);
        }
        List<ETLModel> etlModelList=new ArrayList<>();//返回的ETL數據
        return FilterModel.getFiltrerMode(error,allContent,etlModelList);
        int allCount=signFamilies.size();//全部的数据
        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 (int i=0;i<signFamilies.size();i++){
            SignFamily signFamily=signFamilies.get(i);
            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;
            }
            ETLModel etlModel=new ETLModel();
            String returnLevel2Key=getLevel2Key(level2Key,signFamily);
            etlModel.setLevel2Key(returnLevel2Key);//设置二级维度的Key
            etlModel.setAdminTeam(adminTeam.getId()+"");
            etlModel.setHospital(orgCodeTemp);
            etlModel.setTown(hospital.getTown());
            etlModel.setCity(Constant.city);
            etlModelList.add(etlModel);
            //统计数目+1
            cityCount++;
            townCount++;
            orgCount++;
            adminCount++;
        }
        String message="";
        return FilterModel.getFiltrerMode(message,etlModelList);
    }
    /**
     * 得到二级维度的key
     * @param level2Key
     * @return
     */
    private String getLevel2Key(String level2Key,SignFamily signFamily) {
        String returnLevel2Key=null;
        if(StringUtils.isEmpty(level2Key)){
             switch (level2Key){
                 //性别
                 case "1" :{
                     returnLevel2Key = getSex(signFamily);
                     break;
                 }
                 //年龄
                 case "2" :{
                     returnLevel2Key = getAge(signFamily);
                     break;
                 }
                 //分组
                 case "3" :{
                     //得到患者的分组标签
                     returnLevel2Key = getGroup(signFamily);
                     break;
                 }
                 //费用
                 case "4" :{
                     returnLevel2Key = getExpenses(signFamily);
                     break;
                 }
                 //健康服务分布
                 case "5" :{
                     returnLevel2Key = getHealth(signFamily);
                     break;
                 }
             }
        }
        return returnLevel2Key;
    }
    private String getHealth(SignFamily signFamily) {
        String returnLevel2Key="0";//查找每个患者的健康分布标签
        List<SignPatientLabelInfo> signPatientLabelInfoList= signPatientLabelInfoDao.findByPatientAndLabelTypeAndStatus(signFamily.getPatient(),"2",1);
        if(signPatientLabelInfoList!=null&&signPatientLabelInfoList.size()>0){
            returnLevel2Key=signPatientLabelInfoList.get(0).getLabel();
        }
        return returnLevel2Key;
    }
    private String getExpenses(SignFamily signFamily) {
        String returnLevel2Key;
        returnLevel2Key= StringUtils.isEmpty(signFamily.getExpensesStatus())?"0":signFamily.getExpensesStatus();
        return returnLevel2Key;
    }
    private String getGroup(SignFamily signFamily) {
        String returnLevel2Key;
        List<SignPatientLabelInfo> signPatientLabelInfoList= signPatientLabelInfoDao.findByPatientAndLabelTypeAndStatus(signFamily.getPatient(),"1",1);
        StringBuffer returnLevel2KeyBuffer= new StringBuffer("1");
        if(signPatientLabelInfoList!=null&&signPatientLabelInfoList.size()>0){
            returnLevel2KeyBuffer.append(signPatientLabelInfoList.get(0).getLabel());
        }
        if("2".equals(returnLevel2KeyBuffer.toString())){
            String returnLevel2KeyTemp="0";
            boolean hasGXY=false;//有高血压
            boolean hasTNB=false;//糖尿病
            //得到患者的疾病标签
            signPatientLabelInfoList= signPatientLabelInfoDao.findByPatientAndLabelTypeAndStatus(signFamily.getPatient(),"3",1);
            for (SignPatientLabelInfo signPatientLabelInfo:signPatientLabelInfoList){
                if("1".equals(signPatientLabelInfo.getLabel())){//判斷是否有高血壓
                    returnLevel2KeyTemp="4";
                    hasGXY=true;
                }
                if("2".equals(signPatientLabelInfo.getLabel())){//判斷是否有糖尿病
                    returnLevel2KeyTemp="5";
                    hasTNB=true;
                }
            }
            if (hasTNB&&hasGXY){
                returnLevel2KeyTemp="6";
            }
            returnLevel2KeyBuffer.append(","+returnLevel2KeyTemp);
        }
        returnLevel2Key=returnLevel2KeyBuffer.toString();
        return returnLevel2Key;
    }
    private String getAge(SignFamily signFamily) {
        String returnLevel2Key;
        int age= IdCardUtil.getAgeForIdcard(signFamily.getIdcard());
        if(0==age){
            errorContent.append("签约code:"+signFamily.getCode()+",年龄是0");
        }
        returnLevel2Key=age+"";
        return returnLevel2Key;
    }
    private String getSex(SignFamily signFamily) {
        String returnLevel2Key;
        returnLevel2Key= IdCardUtil.getSexForIdcard(signFamily.getIdcard());
        if("3".equals(returnLevel2Key)){
            errorContent.append("签约code:"+signFamily.getCode()+",IdCard解析错误,分到未知的组里");
        }
        return returnLevel2Key;
    }
    private String saveContent(Integer size, Long qkCount, Long orgCount, Long townCount, Long cityCount, boolean isAll, StringBuffer errorContent,Long errorCount,String sql,String filterDate) {
        StringBuffer string=new StringBuffer("统计"+filterDate+" 的签约数据完成 ,数据库查询到签约数目:"+size);
        string.append(",sql语句:"+sql);
        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();
    }
}

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

@ -16,12 +16,54 @@ import java.util.List;
 */
@Component
@Scope("prototype")
public class DBExtract {
public class DBExtract<T> {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private DBPageExtract dbPageExtract;
    public List<Object> extract(Class clazz,String sql){
        List<Object> returnList= jdbcTemplate.query(sql,new BeanPropertyRowMapper(clazz));
    /**
     * 不分页抽取
     * @param clazz
     * @param sql
     * @return
     */
    public List<T> extract(Class<T> clazz,String sql){
        List<T> returnList= jdbcTemplate.query(sql,new BeanPropertyRowMapper(clazz));
        return returnList;
    }
    /**
     * 分页抽取
     * @param clazz
     * @param sql
     * @param pageSize 每页显示多少 默认10000
     * @param isMultithreading 是否多线程抽取 默认否
     * @return
     */
    public List<T> extractByPage(Class<T> clazz,String sql,int pageSize,Boolean isMultithreading){
        return dbPageExtract.extractByPage(clazz,sql,pageSize,isMultithreading);
    }
    /**
     * 分页抽取
     * @param clazz
     * @param sql
     * @param isMultithreading 是否多线程抽取 默认否
     * @return
     */
    public List<Object> extractByPage(Class<T> clazz,String sql,Boolean isMultithreading){
        int pageSize=10000;
        return dbPageExtract.extractByPage(clazz,sql,pageSize,isMultithreading);
    }
    /**
     * 分页抽取
     * @param clazz
     * @param sql
     * @return
     */
    public List<Object> extractByPage(Class<T> clazz,String sql){
        int pageSize=10000;
        Boolean isMultithreading=false;
        return dbPageExtract.extractByPage(clazz,sql,pageSize,isMultithreading);
    }
}

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

@ -2,16 +2,50 @@ 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.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 DBPageExtract {
public class DBPageExtract<T> {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    public List<T> extractByPage(Class<T> clazz, String sql, int pageSize, Boolean isMultithreading){
        if(isMultithreading){
            return noMultiThreadExtract(clazz, sql, pageSize);
        }else{
            return noMultiThreadExtract(clazz, sql, pageSize);
        }
    }
    private List<T> noMultiThreadExtract(Class<T> clazz, String sql, int pageSize) {
        List<T> returnList=new ArrayList<T>();
        int start=0;
        int page=1;
        while (true){
            String finalSql=sql+" limit "+start+","+pageSize; //拼凑分页的语句
            List<T> listTemp= jdbcTemplate.query(finalSql,new BeanPropertyRowMapper(clazz));
            returnList.addAll(listTemp);//添加到list里面
            //判断是都是最后页面
            if(listTemp.size()!=pageSize){
                listTemp.clear();
                break;
            }else{
                start =page*pageSize;
                page++;
                listTemp.clear();
            }
        }
        return returnList;
    }
}

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

@ -7,44 +7,46 @@ import java.util.List;
 * 過濾器模型
 */
public class FilterModel {
    private StringBuffer error;//错误信息
    private StringBuffer allContent;//完整信息
    private String  message;
    private List<ETLModel> etlModelList;
    private Boolean isError;
    private FilterModel(){
    }
    public StringBuffer getError() {
        return error;
    public FilterModel( String message, List<ETLModel> etlModelList,Boolean isError) {
        this.isError=isError;
        this.message = message;
        this.etlModelList = etlModelList;
    }
    public void setError(StringBuffer error) {
        this.error = error;
    public static FilterModel getFiltrerMode(String message, List<ETLModel> etlModelList,Boolean isError){
        return new FilterModel(message,etlModelList,isError);
    }
    public StringBuffer getAllContent() {
        return allContent;
    public String getMessage() {
        return message;
    }
    public void setAllContent(StringBuffer allContent) {
        this.allContent = allContent;
    public void setMessage(String message) {
        this.message = message;
    }
    public List<ETLModel> getEtlModelList() {
        return etlModelList;
    public Boolean getError() {
        return isError;
    }
    public void setEtlModelList(List<ETLModel> etlModelList) {
        this.etlModelList = etlModelList;
    public void setError(Boolean error) {
        isError = error;
    }
    public FilterModel(StringBuffer error, StringBuffer allContent, List<ETLModel> etlModelList) {
        this.error = error;
        this.allContent = allContent;
        this.etlModelList = etlModelList;
    public List<ETLModel> getEtlModelList() {
        return etlModelList;
    }
    public static FilterModel getFiltrerMode(StringBuffer error, StringBuffer allContent, List<ETLModel> etlModelList){
        return new FilterModel(error,allContent,etlModelList);
    public void setEtlModelList(List<ETLModel> etlModelList) {
        this.etlModelList = etlModelList;
    }
}

+ 1 - 1
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.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.expenses_time< '"+dateTemp+"' limit "+start+","+pageSize ;
            signFamilys = jdbcTemplate.query(sql,new BeanPropertyRowMapper(SignFamily .class));  // signFamilyDao.findByJiatingSignYesterday(dateTemp);
            int i=0;
            //数据过滤清洗出脏数据  -----------start

+ 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 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.expenses_time< '"+dateTemp+"' limit "+start+","+pageSize ;
            signFamilys = jdbcTemplate.query(sql,new BeanPropertyRowMapper(SignFamily .class));  // signFamilyDao.findByJiatingSignYesterday(dateTemp);
            //数据过滤清洗出脏数据  -----------start
           int i=0;

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

@ -43,8 +43,6 @@ public class CurrentDayAllQuotaJob implements Job {
    @Autowired
    private SignFamilyDao signFamilyDao;
    @Autowired
    private DoctorDao doctorDao;
    @Autowired
    private HospitalDao hospitalDao;
    @Autowired
    private TownDao townDao;
@ -157,7 +155,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.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.expenses_time>= '"+now+"' and  a.expenses_time< '"+tomorrow+"' ";
        List<SignFamily> signFamilys = jdbcTemplate.query(sql,new BeanPropertyRowMapper(SignFamily .class));
        Long cityCount = new Long(0L); //统计到市的数目
@ -260,7 +258,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.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.expenses_time>= '"+now+"' and  a.expenses_time< '"+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); //统计到所有区的数目
@ -362,7 +360,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.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.expenses_time>= '"+now+"' and  a.expenses_time< '"+tomorrow+"' ";
        List<SignFamily> signFamilys = jdbcTemplate.query(sql,new BeanPropertyRowMapper(SignFamily .class));
        Long cityCount = new Long(0L); //统计到市的数目
@ -466,7 +464,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.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.expenses_time>= '"+now+"' and  a.expenses_time< '"+tomorrow+"' and a.expenses_status=1 ";
        List<SignFamily> signFamilys = jdbcTemplate.query(sql,new BeanPropertyRowMapper(SignFamily .class));
        Long cityCount = new Long(0L); //统计到市的数目
@ -589,7 +587,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.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.expenses_time>= '"+now+"' and  a.expenses_time< '"+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是市行政代码 目前只有厦门市
@ -844,7 +842,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.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.expenses_time>= '"+now+"' and  a.expenses_time< '"+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); //统计到所有区的数目
@ -1338,7 +1336,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.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.expenses_time>= '"+now+"' and  a.expenses_time< '"+tomorrow+"' and a.expenses_status=1 ";
        List<SignFamily> signFamilys = jdbcTemplate.query(sql,new BeanPropertyRowMapper(SignFamily .class));
        Long cityCount = new Long(0L); //统计到市的数目
@ -1462,7 +1460,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.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.expenses_time>= '"+now+"' and  a.expenses_time< '"+tomorrow+"' and a.expenses_status=1 ";
        List<SignFamily> signFamilys = jdbcTemplate.query(sql,new BeanPropertyRowMapper(SignFamily .class));
        Long cityCount = new Long(0L); //统计到市的数目
@ -1601,7 +1599,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.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.expenses_time>= '"+now+"' and  a.expenses_time< '"+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); //统计到所有区的数目

+ 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.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.expenses_time>= '"+daybefore+ Constant.quota_date_last+"' and  a.expenses_time< '"+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/SignAgeGroupDiseaseJob.java

@ -118,7 +118,7 @@ public class SignAgeGroupDiseaseJob 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.expenses_time>= '"+daybefore+ Constant.quota_date_last+"' and  a.expenses_time< '"+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); //统计到所有区的数目

+ 2 - 2
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.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.expenses_time>= '"+daybefore+ Constant.quota_date_last+"' and  a.expenses_time< '"+yesterday+ Constant.quota_date_last+"'  ";
        List<SignFamily> signFamilys = jdbcTemplate.query(sql,new BeanPropertyRowMapper(SignFamily .class));  // signFamilyDao.findByJiatingSignYesterday(dateTemp);
        Long cityCount = new Long(0L); //统计到市的数目
@ -183,7 +183,7 @@ public class SignExpenseStatusJob implements Job{
                errorCount++;
                continue;
            }
            etlModel.setLevel2Key(signFamily.getExpensesStatus());//设置二级维度的Key
            etlModel.setLevel2Key(StringUtils.isEmpty(signFamily.getExpensesStatus())?"0":signFamily.getExpensesStatus());//设置二级维度的Key
            etlModel.setAdminTeam(adminTeam.getId() + "");
            etlModel.setHospital(orgCodeTemp);
            etlModel.setTown(hospital.getTown());

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

@ -139,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.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.expenses_time>= '"+daybefore+ Constant.quota_date_last+"' and  a.expenses_time< '"+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); //统计到市的数目
@ -282,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.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.expenses_time>= '"+daybefore+ Constant.quota_date_last+"' and  a.expenses_time< '"+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); //统计到市的数目
@ -452,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.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.expenses_time>= '"+daybefore+ Constant.quota_date_last+"' and  a.expenses_time< '"+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); //统计到所有区的数目
@ -589,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.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.expenses_time>= '"+daybefore+ Constant.quota_date_last+"' and  a.expenses_time< '"+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); //统计到市的数目

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

@ -1,7 +1,10 @@
package com.yihu.wlyy.statistics.job.business;
import com.yihu.wlyy.statistics.dao.*;
import com.yihu.wlyy.statistics.etl.dataFilter.SignDataFilter;
import com.yihu.wlyy.statistics.etl.extract.DBExtract;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.etl.model.FilterModel;
import com.yihu.wlyy.statistics.etl.role.Level1Role;
import com.yihu.wlyy.statistics.etl.storage.DBStorage;
import com.yihu.wlyy.statistics.model.hosptial.Hospital;
@ -38,19 +41,15 @@ public class UnSignJob implements Job {
    @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;
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
    private DBExtract dbExtract;
    @Autowired
    private SignDataFilter signDataFilter;
    String yesterday;
    String daybefore;
@ -79,150 +78,36 @@ public class UnSignJob implements Job {
     */
    @Transactional
    private void computequota() {
        try{
            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='"+2+"'");
        //新建任务日志对象
        QuartzJobLog quartzJobLog = new QuartzJobLog();
        quartzJobLog.setJobStartTime(new Date());
        quartzJobLog.setJobId(wlyyJobConfig.getId());
        quartzJobLog.setJobName(wlyyJobConfig.getJobName());
            //新建任务日志对象
            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 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); //统计到市的数目
        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.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;
            }
            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{
            //找出今天的解约信息
            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> signFamilies= dbExtract.extract(SignFamily.class,sql);
            //清洗數據
            FilterModel etlModels= signDataFilter.filter(signFamilies,yesterday);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels);
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            //保存数据
            dbStorage.saveByLevel1(returnDatas,yesterday,wlyyQuota);
            //保存日志
            quartzJobLog.setJobEndTime(new Date());
            quartzJobLog.setJobContent(etlModels.getMessage());
            quartzJobLog.setJobType(etlModels.getError()?"1":"0");
            quartzJobLogDao.save(quartzJobLog);
        }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());
        string.append(",sql语句:"+sql);
        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();

+ 1 - 2
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/util/IdCardUtil.java

@ -20,8 +20,7 @@ public class IdCardUtil {
     * @return
     * @throws Exception
     */
    public static String getSexForIdcard(String CardCode)
            throws Exception {
    public static String getSexForIdcard(String CardCode){
        String sex = Constant.level_sex_3;
        try {