|  | @ -0,0 +1,173 @@
 | 
												
													
														
															|  | 
 |  | package com.yihu.wlyy.statistics.etl.mycache;
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  | import com.yihu.wlyy.statistics.dao.SignPatientLabelInfoDao;
 | 
												
													
														
															|  | 
 |  | import com.yihu.wlyy.statistics.etl.extract.DBExtract;
 | 
												
													
														
															|  | 
 |  | import com.yihu.wlyy.statistics.etl.model.CacheModel;
 | 
												
													
														
															|  | 
 |  | import com.yihu.wlyy.statistics.job.business.Constant;
 | 
												
													
														
															|  | 
 |  | import com.yihu.wlyy.statistics.model.label.SignPatientLabelInfo;
 | 
												
													
														
															|  | 
 |  | import com.yihu.wlyy.statistics.model.signfamily.SignFamily;
 | 
												
													
														
															|  | 
 |  | import org.springframework.beans.factory.annotation.Autowired;
 | 
												
													
														
															|  | 
 |  | 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.19.
 | 
												
													
														
															|  | 
 |  |  */
 | 
												
													
														
															|  | 
 |  | @Component
 | 
												
													
														
															|  | 
 |  | public class CachePool {
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     @Autowired
 | 
												
													
														
															|  | 
 |  |     private DBExtract dbExtract;
 | 
												
													
														
															|  | 
 |  |     @Autowired
 | 
												
													
														
															|  | 
 |  |     private SignPatientLabelInfoDao signPatientLabelInfoDao;
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     /**
 | 
												
													
														
															|  | 
 |  |      * 到达量的缓存  key 是时间yyyy-MM-dd
 | 
												
													
														
															|  | 
 |  |      */
 | 
												
													
														
															|  | 
 |  |     private static Map<String,CacheModel> arriveSignFamilyExpenseStatus1Map=new HashMap<String,CacheModel>();
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     /**
 | 
												
													
														
															|  | 
 |  |      * 分组标签的缓存 key 是患者code
 | 
												
													
														
															|  | 
 |  |      */
 | 
												
													
														
															|  | 
 |  |     private static Map<String,String> patientGroup=new HashMap<String,String>();
 | 
												
													
														
															|  | 
 |  |     /**
 | 
												
													
														
															|  | 
 |  |      * 健康标签的缓存 key 是患者code
 | 
												
													
														
															|  | 
 |  |      */
 | 
												
													
														
															|  | 
 |  |     private static Map<String,String> healthGroup=new HashMap<String,String>();
 | 
												
													
														
															|  | 
 |  |     /**
 | 
												
													
														
															|  | 
 |  |      * 疾病标签的缓存 key 是患者code
 | 
												
													
														
															|  | 
 |  |      */
 | 
												
													
														
															|  | 
 |  |     private static Map<String,List<String>> diseaseGroup=new HashMap<String,List<String>>();
 | 
												
													
														
															|  | 
 |  |     /**
 | 
												
													
														
															|  | 
 |  |      * 某天的签约的已扣费的到达量
 | 
												
													
														
															|  | 
 |  |      * @param date
 | 
												
													
														
															|  | 
 |  |      * @return
 | 
												
													
														
															|  | 
 |  |      * @throws Exception
 | 
												
													
														
															|  | 
 |  |      */
 | 
												
													
														
															|  | 
 |  |     public synchronized CacheModel getSignFamilysWithExpenseStatus1ByDate(String date) throws Exception{
 | 
												
													
														
															|  | 
 |  |         CacheModel model= arriveSignFamilyExpenseStatus1Map.get(date);
 | 
												
													
														
															|  | 
 |  |         if(model==null){
 | 
												
													
														
															|  | 
 |  |             model=new CacheModel();
 | 
												
													
														
															|  | 
 |  |             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< '"+date+ Constant.quota_date_last+"'" ;
 | 
												
													
														
															|  | 
 |  |             String sqlCount="select count(id) from wlyy_sign_family a where  a.type =2  and expenses_status=1 and a.expenses_time< '"+date+ Constant.quota_date_last+"'";
 | 
												
													
														
															|  | 
 |  |             //抽取數據 分页抽取
 | 
												
													
														
															|  | 
 |  |             List<SignFamily> signFamiliesTemp= dbExtract.extractByPage(SignFamily.class,sql,sqlCount,true);
 | 
												
													
														
															|  | 
 |  |             model.setSql(sql);
 | 
												
													
														
															|  | 
 |  |             model.setSignFamilies(signFamiliesTemp);
 | 
												
													
														
															|  | 
 |  |             arriveSignFamilyExpenseStatus1Map.put(date,model);
 | 
												
													
														
															|  | 
 |  |             return model;
 | 
												
													
														
															|  | 
 |  |         }else{
 | 
												
													
														
															|  | 
 |  |             return model;
 | 
												
													
														
															|  | 
 |  |         }
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  |     /**
 | 
												
													
														
															|  | 
 |  |      * 查询某人的分组标签
 | 
												
													
														
															|  | 
 |  |      * @param patientCode
 | 
												
													
														
															|  | 
 |  |      * @return
 | 
												
													
														
															|  | 
 |  |      * @throws Exception
 | 
												
													
														
															|  | 
 |  |      */
 | 
												
													
														
															|  | 
 |  |     public String getPatientGroup(String patientCode){
 | 
												
													
														
															|  | 
 |  |         String code=null;
 | 
												
													
														
															|  | 
 |  |         try{
 | 
												
													
														
															|  | 
 |  |             if(patientGroup.size()==0){
 | 
												
													
														
															|  | 
 |  |                 initPatientGroup();
 | 
												
													
														
															|  | 
 |  |             }
 | 
												
													
														
															|  | 
 |  |             code= patientGroup.get(patientCode);
 | 
												
													
														
															|  | 
 |  |             if(StringUtils.isEmpty(code)){
 | 
												
													
														
															|  | 
 |  |                 code="0";
 | 
												
													
														
															|  | 
 |  |             }
 | 
												
													
														
															|  | 
 |  |         }catch (Exception e){
 | 
												
													
														
															|  | 
 |  |             e.printStackTrace();
 | 
												
													
														
															|  | 
 |  |             return code;
 | 
												
													
														
															|  | 
 |  |         }
 | 
												
													
														
															|  | 
 |  |         return code;
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     private synchronized void initPatientGroup() throws  Exception{
 | 
												
													
														
															|  | 
 |  |         if(patientGroup.size()==0) {
 | 
												
													
														
															|  | 
 |  |             String sql="select patient,label from wlyy_sign_patient_label_info where label_type='1' and status=1";
 | 
												
													
														
															|  | 
 |  |             String countSql="select count(id) from wlyy_sign_patient_label_info where label_type='1' and status=1";
 | 
												
													
														
															|  | 
 |  |             List<SignPatientLabelInfo> signPatientLabelInfoList = dbExtract.extractByPage(SignPatientLabelInfo.class,sql,countSql,true);
 | 
												
													
														
															|  | 
 |  |             for (SignPatientLabelInfo signPatientLabelInfo : signPatientLabelInfoList) {
 | 
												
													
														
															|  | 
 |  |                 patientGroup.put(signPatientLabelInfo.getPatient(), signPatientLabelInfo.getLabel());
 | 
												
													
														
															|  | 
 |  |             }
 | 
												
													
														
															|  | 
 |  |         }
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     /**
 | 
												
													
														
															|  | 
 |  |      * 查询某人的健康标签
 | 
												
													
														
															|  | 
 |  |      * @param patientCode
 | 
												
													
														
															|  | 
 |  |      * @return
 | 
												
													
														
															|  | 
 |  |      * @throws Exception
 | 
												
													
														
															|  | 
 |  |      */
 | 
												
													
														
															|  | 
 |  |     public  String getHealthGroup(String patientCode){
 | 
												
													
														
															|  | 
 |  |         String code="0";
 | 
												
													
														
															|  | 
 |  |         try{
 | 
												
													
														
															|  | 
 |  |             if(healthGroup.size()==0){
 | 
												
													
														
															|  | 
 |  |                 initHealthGroup();
 | 
												
													
														
															|  | 
 |  |             }
 | 
												
													
														
															|  | 
 |  |              code= healthGroup.get(patientCode);
 | 
												
													
														
															|  | 
 |  |         }catch (Exception e){
 | 
												
													
														
															|  | 
 |  |             e.printStackTrace();
 | 
												
													
														
															|  | 
 |  |             return code;
 | 
												
													
														
															|  | 
 |  |         }
 | 
												
													
														
															|  | 
 |  |         return code;
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     private synchronized void initHealthGroup()  throws  Exception{
 | 
												
													
														
															|  | 
 |  |         if(healthGroup.size()==0){
 | 
												
													
														
															|  | 
 |  |             String sql="select patient,label from wlyy_sign_patient_label_info where label_type='2' and status=1";
 | 
												
													
														
															|  | 
 |  |             String countSql="select count(id) from wlyy_sign_patient_label_info where label_type='2' and status=1";
 | 
												
													
														
															|  | 
 |  |             List<SignPatientLabelInfo> signPatientLabelInfoList = dbExtract.extractByPage(SignPatientLabelInfo.class,sql,countSql,true);
 | 
												
													
														
															|  | 
 |  |             for(SignPatientLabelInfo signPatientLabelInfo:signPatientLabelInfoList){
 | 
												
													
														
															|  | 
 |  |                 healthGroup.put(signPatientLabelInfo.getPatient(),signPatientLabelInfo.getLabel());
 | 
												
													
														
															|  | 
 |  |             }
 | 
												
													
														
															|  | 
 |  |         }
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     /**
 | 
												
													
														
															|  | 
 |  |      * 查询某人的疾病标签
 | 
												
													
														
															|  | 
 |  |      * @param patientCode
 | 
												
													
														
															|  | 
 |  |      * @return
 | 
												
													
														
															|  | 
 |  |      * @throws Exception
 | 
												
													
														
															|  | 
 |  |      */
 | 
												
													
														
															|  | 
 |  |     public  List<String> getDiseaseGroup(String patientCode) {
 | 
												
													
														
															|  | 
 |  |         try{
 | 
												
													
														
															|  | 
 |  |             if(diseaseGroup.size()==0){
 | 
												
													
														
															|  | 
 |  |                 initDiseaseGroup();
 | 
												
													
														
															|  | 
 |  |             }
 | 
												
													
														
															|  | 
 |  |             List<String> code= diseaseGroup.get(patientCode);
 | 
												
													
														
															|  | 
 |  |             return code;
 | 
												
													
														
															|  | 
 |  |         }catch (Exception e){
 | 
												
													
														
															|  | 
 |  |             return null;
 | 
												
													
														
															|  | 
 |  |         }
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     private synchronized void initDiseaseGroup()  throws  Exception{
 | 
												
													
														
															|  | 
 |  |         if(diseaseGroup.size()==0){
 | 
												
													
														
															|  | 
 |  |             String sql="select patient,label from wlyy_sign_patient_label_info where label_type='3' and status=1";
 | 
												
													
														
															|  | 
 |  |             String countSql="select count(id) from wlyy_sign_patient_label_info where label_type='3' and status=1";
 | 
												
													
														
															|  | 
 |  |             List<SignPatientLabelInfo> signPatientLabelInfoList = dbExtract.extractByPage(SignPatientLabelInfo.class,sql,countSql,true);
 | 
												
													
														
															|  | 
 |  |             for(SignPatientLabelInfo signPatientLabelInfo:signPatientLabelInfoList){
 | 
												
													
														
															|  | 
 |  |                 if(diseaseGroup.containsKey(signPatientLabelInfo.getPatient())){
 | 
												
													
														
															|  | 
 |  |                     List<String> code= diseaseGroup.get(signPatientLabelInfo.getPatient());
 | 
												
													
														
															|  | 
 |  |                     code.add(signPatientLabelInfo.getLabel());
 | 
												
													
														
															|  | 
 |  |                     diseaseGroup.put(signPatientLabelInfo.getPatient(),code);
 | 
												
													
														
															|  | 
 |  |                 }else{
 | 
												
													
														
															|  | 
 |  |                     List<String> code=new ArrayList<>();
 | 
												
													
														
															|  | 
 |  |                     code.add(signPatientLabelInfo.getLabel());
 | 
												
													
														
															|  | 
 |  |                     diseaseGroup.put(signPatientLabelInfo.getPatient(),code);
 | 
												
													
														
															|  | 
 |  |                 }
 | 
												
													
														
															|  | 
 |  |             }
 | 
												
													
														
															|  | 
 |  |         }
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     public static void cleanAllCache() {
 | 
												
													
														
															|  | 
 |  |         arriveSignFamilyExpenseStatus1Map.clear();
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | }
 |