浏览代码

Merge branch 'dev' of http://192.168.1.220:10080/Amoy/patient-co-management into dev

demon 8 年之前
父节点
当前提交
7f5aca58e1

+ 43 - 1
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/controller/JobController.java

@ -244,6 +244,38 @@ public class JobController extends BaseController {
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
    /**
     * 启动判断的任务
     *
     * @return
     */
    @ApiOperation(value = "启动清除缓存的任务")
    @RequestMapping(value = "startCleanCacheJob", method = RequestMethod.GET)
    public String startCleanCacheJob() {
        try {
            jobService.startCleanCacheJob();
            return success("启动成功!");
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
    /**
     * 停止判断的任务
     *
     * @return
     */
    @ApiOperation(value = "停止清除缓存的任务")
    @RequestMapping(value = "stopCleanCacheJob", method = RequestMethod.GET)
    public String stopCleanCacheJob() {
        try {
            jobService.stopCleanCacheJob();
            return success("停止成功!");
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
    /**
     * 启动所有任务
     *
@ -260,7 +292,17 @@ public class JobController extends BaseController {
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
    @ApiOperation(value = "清除緩存")
    @RequestMapping(value = "cleanCache", method = RequestMethod.GET)
    public String cleanCache() {
        try {
            jobService.cleanCache();
            return success("启动成功!");
        } catch (Exception e) {
            error(e);
            return invalidUserException(e, -1, "启动失败:" + e.getMessage());
        }
    }
    //@RequestMapping(value = "startaaaa", method = RequestMethod.GET)
    public String startaaaa() {
        try {

+ 2 - 0
patient-co-statistics/src/main/java/com/yihu/wlyy/statistics/dao/SignPatientLabelInfoDao.java

@ -63,4 +63,6 @@ public interface SignPatientLabelInfoDao extends
     */
    @Query("update SignPatientLabelInfo a set a.labelName = ?1 where a.label= ?2 and a.labelType = '4' ")
    int updateLabelName(String labelName, String labelCode);
    List<SignPatientLabelInfo> findByLabelTypeAndStatus(String s, int i);
}

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

@ -4,6 +4,7 @@ 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.cache.CachePool;
import com.yihu.wlyy.statistics.etl.model.ETLModel;
import com.yihu.wlyy.statistics.etl.model.FilterModel;
import com.yihu.wlyy.statistics.job.business.Constant;
@ -47,6 +48,8 @@ public class SignDataFilter {
    private DoctorAdminTeamDao doctorAdminTeamDao;
    @Autowired
    private SignPatientLabelInfoDao signPatientLabelInfoDao;
    @Autowired
    private CachePool cachePool;
    private int count=0;
    /**
@ -125,13 +128,8 @@ public class SignDataFilter {
        Long adminCount = new Long(0L);//统计到所有团队的数目
        Long errorCount=new Long(0L);//脏数据
        Boolean isAll=true;//是否统计失败
        int a1=0;
        int a2=0;
        for (int i=0;i<signFamilies.size();i++){
            SignFamily signFamily=signFamilies.get(i);
            if("1".equals(signFamily.getExpensesStatus())){
                a1++;
            }
            String orgCode = signFamily.getHospital();
            if(StringUtils.isEmpty(orgCode)) {
                errorContent.append("签约code:"+signFamily.getCode()+",签约表中(wlyy_sign_family)中的hospital数据为空");
@ -196,9 +194,6 @@ public class SignDataFilter {
                errorCount++;
                continue;
            }
            if("1".equals(signFamilies.get(i).getExpensesStatus())){
                a2++;
            }
            //设置二级维度的Key
            String returnLevel2Key=getLevel2Key(level2Key,signFamily);
            String returnLevel3Key=getLevel3Key(level3Key,signFamily);
@ -253,15 +248,17 @@ public class SignDataFilter {
        //如果是慢病的 统计高血压的 糖尿病  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;
        List<String> diseaseList=  cachePool.getDiseaseGroup(signFamily.getPatient());
        if(diseaseList!=null&&diseaseList.size()>0){
            for (String diseaseCode:diseaseList){
                if("1".equals(diseaseCode)){//判斷是否有高血壓
                    diseaseType="1";
                    hasGXY=true;
                }
                if("2".equals(diseaseCode)){//判斷是否有糖尿病
                    diseaseType="2";
                    hasTNB=true;
                }
            }
        }
        if (hasTNB&&hasGXY){
@ -327,9 +324,11 @@ public class SignDataFilter {
    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();
        try{
            returnLevel2Key=cachePool.getHealthGroup(signFamily.getPatient());
        }catch (Exception e){
            e.printStackTrace();
            return returnLevel2Key;
        }
        return returnLevel2Key;
    }
@ -349,33 +348,35 @@ public class SignDataFilter {
    }
    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=new StringBuffer(signPatientLabelInfoList.get(0).getLabel());
        String returnLevel2Key="";
        String group=cachePool.getPatientGroup(signFamily.getPatient());
        if(StringUtils.isEmpty(group)){
            group="0";
        }
        StringBuffer returnLevel2KeyBuffer=new StringBuffer(group);
        //如果是慢病组  区分65岁以上还是以下   65岁以上的慢病患者是7  65岁上下是2
        if("2".equals(returnLevel2KeyBuffer.toString())){
             Integer age=IdCardUtil.getAgeForIdcard(signFamily.getIdcard());
            if(age>65){
                returnLevel2KeyBuffer=new StringBuffer("7");
            }
        }
//        if("2".equals(returnLevel2KeyBuffer.toString())){
//             Integer age=IdCardUtil.getAgeForIdcard(signFamily.getIdcard());
//            if(age>65){
//                returnLevel2KeyBuffer=new StringBuffer("7");
//            }
//        }
        if("2".equals(returnLevel2KeyBuffer.toString())||"7".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;
            List<String> diseaseList=  cachePool.getDiseaseGroup(signFamily.getPatient());
            if(diseaseList!=null&&diseaseList.size()>0){
                for (String diseaseCode:diseaseList){
                    if("1".equals(diseaseCode)){//判斷是否有高血壓
                        returnLevel2KeyTemp="4";
                        hasGXY=true;
                    }
                    if("2".equals(diseaseCode)){//判斷是否有糖尿病
                        returnLevel2KeyTemp="5";
                        hasTNB=true;
                    }
                }
            }
            if (hasTNB&&hasGXY){

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

@ -46,7 +46,7 @@ public class RedisStorage {
     * @param wlyyQuotaId
     * @throws Exception
     */
    public void saveByLevel1(List<Map<String, List<ETLModel>>> data, String wlyyQuotaId) throws Exception {
    public void saveByLevel1(List<Map<String, List<ETLModel>>> data,List<Map<String, List<ETLModel>>> deleteData, String wlyyQuotaId) throws Exception {
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
        Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
        for (AdminTeam adminTeam : adminTeams) {
@ -76,16 +76,29 @@ public class RedisStorage {
        Map<String, List<ETLModel>> townTeam=data.get(2);//区的数据
        Map<String, List<ETLModel>> cityTeam=data.get(3);//市的数据
        redisTemplate.opsForValue().set("quota:date",DateUtil.dateToStrLong(new Date()));
        //保存市
        saveLevel1City(wlyyQuotaId, cityMap, cityTeam);
        //保存区
        saveLevel1Town(wlyyQuotaId, townsMap, townTeam);
        //保存机构
        saveLevel1Org(wlyyQuotaId, hospitalsMap, orgTeam);
        //保存全科团队
        saveLevel1Team(wlyyQuotaId, adminTeamMap, adminTeam);
        if(deleteData==null){
            //保存市
            saveLevel1City(wlyyQuotaId, cityMap, cityTeam);
            //保存区
            saveLevel1Town(wlyyQuotaId, townsMap, townTeam);
            //保存机构
            saveLevel1Org(wlyyQuotaId, hospitalsMap, orgTeam);
            //保存全科团队
            saveLevel1Team(wlyyQuotaId,adminTeamMap, adminTeam);
        }else{
            //保存市
            saveLevel1City(wlyyQuotaId, cityMap, cityTeam,deleteData.get(3));
            //保存区
            saveLevel1Town(wlyyQuotaId, townsMap, townTeam,deleteData.get(2));
            //保存机构
            saveLevel1Org(wlyyQuotaId, hospitalsMap, orgTeam,deleteData.get(1));
            //保存全科团队
            saveLevel1Team(wlyyQuotaId,adminTeamMap, adminTeam,deleteData.get(0));
        }
    }
    /**
     * 保存二级维度的数据
     * @param data
@ -93,9 +106,9 @@ public class RedisStorage {
     * @param foreachNum 标识二级维度循环的次数  例如 年龄就传6  性别就传3
     * @param type 1 性别 2 年龄 3 用户分组 4.签约费用 5 健康分布
     */
    public void saveByLevel2(List<Map<String, Map<String, List<ETLModel>>>> data, String wlyyQuotaId,Integer foreachNum,Integer type) throws Exception {
    public void saveByLevel2(List<Map<String, Map<String, List<ETLModel>>>> data,List<Map<String, Map<String, List<ETLModel>>>> deleteData, String wlyyQuotaId,Integer foreachNum,Integer type) throws Exception {
        Integer start=1;
        saveByLevel2Public(data, wlyyQuotaId, foreachNum, type, start);
        saveByLevel2Public(data,deleteData, wlyyQuotaId, foreachNum, type, start);
    }
    /**
     * 保存二级维度的数据
@ -105,8 +118,8 @@ public class RedisStorage {
     * @param type 1 性别 2 年龄 3 用户分组 4.签约费用 5 健康分布
     * @param start 循环开始
     */
    public void saveByLevel2(List<Map<String, Map<String, List<ETLModel>>>> data, String wlyyQuotaId,Integer foreachNum,Integer type,Integer start) throws Exception {
        saveByLevel2Public(data, wlyyQuotaId, foreachNum, type, start);
    public void saveByLevel2(List<Map<String, Map<String, List<ETLModel>>>> data,List<Map<String, Map<String, List<ETLModel>>>> deleteData, String wlyyQuotaId,Integer foreachNum,Integer type,Integer start) throws Exception {
        saveByLevel2Public(data,deleteData, wlyyQuotaId, foreachNum, type, start);
    }
    /**
     * 保存三级维度的数据
@ -119,7 +132,7 @@ public class RedisStorage {
     * @param start2 循环开始
     * @param start3 循环开始
     */
    public void saveByLevel3(List<Map<String, Map<String, Map<String, List<ETLModel>>>>> data, String wlyyQuotaId,Integer foreachNum2,Integer foreachNum3,Integer type2,Integer type3,Integer start2,Integer start3) throws Exception {
    public void saveByLevel3(List<Map<String, Map<String, Map<String, List<ETLModel>>>>> data,List<Map<String, Map<String, Map<String, List<ETLModel>>>>> deleteData, String wlyyQuotaId,Integer foreachNum2,Integer foreachNum3,Integer type2,Integer type3,Integer start2,Integer start3) throws Exception {
        if(start2==null){
            start2=1;
        }
@ -146,16 +159,74 @@ public class RedisStorage {
        city.setName(Constant.cityName);
        Map<String, City> cityMap = new HashMap<String, City>();
        cityMap.put(Constant.city,city);
        //保存团队
        saveAdminTeamDataLevel3(data.get(0),wlyyQuotaId,adminTeamMap,foreachNum2,foreachNum3,type2,type3,start2,start3);
        //保存机构
        saveHospitalTeamDataLevel3(data.get(1),wlyyQuotaId,hospitalsMap,foreachNum2,foreachNum3,type2,type3,start2,start3);
        //保存区
        saveTownTeamDataLevel3(data.get(2),wlyyQuotaId,townsMap,foreachNum2,foreachNum3,type2,type3,start2,start3);
        //保存市
        saveCityTeamDataLevel3(data.get(3),wlyyQuotaId,cityMap,foreachNum2,foreachNum3,type2,type3,start2,start3);
        if(deleteData!=null){
            //保存团队
            saveAdminTeamDataLevel3(data.get(0),deleteData.get(0),wlyyQuotaId,adminTeamMap,foreachNum2,foreachNum3,type2,type3,start2,start3);
            //保存机构
            saveHospitalTeamDataLevel3(data.get(1),deleteData.get(1),wlyyQuotaId,hospitalsMap,foreachNum2,foreachNum3,type2,type3,start2,start3);
            //保存区
            saveTownTeamDataLevel3(data.get(2),deleteData.get(2),wlyyQuotaId,townsMap,foreachNum2,foreachNum3,type2,type3,start2,start3);
            //保存市
            saveCityTeamDataLevel3(data.get(3),deleteData.get(3),wlyyQuotaId,cityMap,foreachNum2,foreachNum3,type2,type3,start2,start3);
        }else{
            //保存团队
            saveAdminTeamDataLevel3(data.get(0),wlyyQuotaId,adminTeamMap,foreachNum2,foreachNum3,type2,type3,start2,start3);
            //保存机构
            saveHospitalTeamDataLevel3(data.get(1),wlyyQuotaId,hospitalsMap,foreachNum2,foreachNum3,type2,type3,start2,start3);
            //保存区
            saveTownTeamDataLevel3(data.get(2),wlyyQuotaId,townsMap,foreachNum2,foreachNum3,type2,type3,start2,start3);
            //保存市
            saveCityTeamDataLevel3(data.get(3),wlyyQuotaId,cityMap,foreachNum2,foreachNum3,type2,type3,start2,start3);
        }
    }
    private void saveAdminTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap,Map<String, Map<String, Map<String, List<ETLModel>>>> deleteEtlModelMap, String wlyyQuotaId,Map<String, AdminTeam> adminTeamMap, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3, Integer start2, Integer start3) {
        //遍历团队的Map
        for(Map.Entry<String,AdminTeam> oneAdminTeam:adminTeamMap.entrySet()){
            //得到每个团队的2级维度
            Map<String, Map<String, List<ETLModel>>> twoETLMap= etlModelMap.get(oneAdminTeam.getKey());
            Map<String, Map<String, List<ETLModel>>> deleteTwoETLMap= deleteEtlModelMap.get(oneAdminTeam.getKey());
            for(int i=start2;i<=foreachNum2;i++){
                //得到每个团队的三级维度
                Map<String, List<ETLModel>> threeETLMap=null;
                if(twoETLMap!=null){
                    threeETLMap=twoETLMap.get(i+"");
                }
                Map<String, List<ETLModel>> deleteThreeETLMap=null;
                if(deleteTwoETLMap!=null){
                    deleteThreeETLMap=deleteTwoETLMap.get(i+"");
                }
                for(int j=start3;j<=foreachNum3;j++){
                    String level1="1";
                    String level2=i+"";
                    String level3=j+"";
                    int num=0;
                    if(threeETLMap!=null){
                        List<ETLModel> etlModelList= threeETLMap.get(j+"");
                        if(etlModelList!=null&&etlModelList.size()>0){
                            num=etlModelList.size();
                        }
                    }
                    if(deleteThreeETLMap!=null){
                        List<ETLModel> etlModelList= deleteThreeETLMap.get(j+"");
                        if(etlModelList!=null&&etlModelList.size()>0){
                            num=num-etlModelList.size();
                        }
                    }
                    AdminTeam adminTeamObj = adminTeamMap.get(oneAdminTeam.getKey());//团队
                    if(adminTeamObj==null)continue;
                    JSONObject jo=new JSONObject();
                    jo.put("date", DateUtil.dateToStrLong(new Date()));
                    jo.put("num", num);
                    jo.put("teamName", adminTeamObj.getName());
                    jo.put("teamId", adminTeamObj.getId());
                    jo.put("name", getLevel3Name(level3,type3));
                    redisTemplate.opsForValue().set(new StringBuffer("quota:"+wlyyQuotaId+":"+level1+":"+level2+":"+level3+":"+adminTeamObj.getId()).toString(), jo.toString());
                }
            }
        }
    }
    private void saveAdminTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap, String wlyyQuotaId,Map<String, AdminTeam> adminTeamMap, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3, Integer start2, Integer start3) {
        //遍历团队的Map
        for(Map.Entry<String,AdminTeam> oneAdminTeam:adminTeamMap.entrySet()){
@ -191,7 +262,6 @@ public class RedisStorage {
            }
        }
    }
    private String getLevel3Name(String j, Integer type) {
        switch (type){
            case  1:{
@ -204,18 +274,22 @@ public class RedisStorage {
        }
    }
    private void saveHospitalTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap,String wlyyQuotaId, Map<String, Hospital> hospitalMap, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3, Integer start2, Integer start3) {
        List<WlyyQuotaResult> wlyyQuotaResults=new ArrayList<WlyyQuotaResult>();
    private void saveHospitalTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap,Map<String, Map<String, Map<String, List<ETLModel>>>> deleteEtlModelMap,String wlyyQuotaId, Map<String, Hospital> hospitalMap, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3, Integer start2, Integer start3) {
        //遍历团队的Map
        for(Map.Entry<String,Hospital> oneHospital:hospitalMap.entrySet()){
            //得到每个团队的2级维度
            Map<String, Map<String, List<ETLModel>>> twoETLMap= etlModelMap.get(oneHospital.getKey());
            Map<String, Map<String, List<ETLModel>>> deleteTwoETLMap= deleteEtlModelMap.get(oneHospital.getKey());
            for(int i=start2;i<=foreachNum2;i++){
                //得到每个团队的三级维度
                Map<String, List<ETLModel>> threeETLMap= new HashMap<String, List<ETLModel>>();
                if(twoETLMap!=null){
                    threeETLMap=twoETLMap.get(i+"");
                }
                Map<String, List<ETLModel>> deleteThreeETLMap= new HashMap<String, List<ETLModel>>();
                if(deleteTwoETLMap!=null){
                    deleteThreeETLMap=deleteTwoETLMap.get(i+"");
                }
                for(int j=start3;j<=foreachNum3;j++){
                    String level1="2";
                    String level2=i+"";
@ -227,7 +301,42 @@ public class RedisStorage {
                            num=etlModelList.size();
                        }
                    }
                    if(threeETLMap!=null){
                    if(deleteThreeETLMap!=null&&deleteThreeETLMap.size()>0){
                        List<ETLModel> etlModelList= deleteThreeETLMap.get(j+"");
                        if(etlModelList!=null&&etlModelList.size()>0){
                            num=num-etlModelList.size();
                        }
                    }
                    Hospital hospital = hospitalsMap.get(oneHospital.getKey());
                    if(hospital==null)continue;
                    JSONObject jo=new JSONObject();
                    jo.put("date", DateUtil.dateToStrLong(new Date()));
                    jo.put("num", num);
                    jo.put("orgName", hospital.getName());
                    jo.put("orgCode", hospital.getCode());
                    jo.put("name", getLevel3Name(level3,type3));
                    redisTemplate.opsForValue().set(new StringBuffer("quota:"+wlyyQuotaId+":"+level1+":"+level2+":"+level3+":"+hospital.getCode()).toString(), jo.toString());
                }
            }
        }
    }
    private void saveHospitalTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap,String wlyyQuotaId, Map<String, Hospital> hospitalMap, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3, Integer start2, Integer start3) {
        //遍历团队的Map
        for(Map.Entry<String,Hospital> oneHospital:hospitalMap.entrySet()){
            //得到每个团队的2级维度
            Map<String, Map<String, List<ETLModel>>> twoETLMap= etlModelMap.get(oneHospital.getKey());
            for(int i=start2;i<=foreachNum2;i++){
                //得到每个团队的三级维度
                Map<String, List<ETLModel>> threeETLMap= new HashMap<String, List<ETLModel>>();
                if(twoETLMap!=null){
                    threeETLMap=twoETLMap.get(i+"");
                }
                for(int j=start3;j<=foreachNum3;j++){
                    String level1="2";
                    String level2=i+"";
                    String level3=j+"";
                    int num=0;
                    if(threeETLMap!=null&&threeETLMap.size()>0){
                        List<ETLModel> etlModelList= threeETLMap.get(j+"");
                        if(etlModelList!=null&&etlModelList.size()>0){
                            num=etlModelList.size();
@ -246,18 +355,23 @@ public class RedisStorage {
            }
        }
    }
    private void saveTownTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap,String wlyyQuotaId, Map<String, Town> townsMap, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3, Integer start2, Integer start3) {
    private void saveTownTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap,Map<String, Map<String, Map<String, List<ETLModel>>>> deleteEtlModelMap,String wlyyQuotaId, Map<String, Town> townsMap, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3, Integer start2, Integer start3) {
        List<WlyyQuotaResult> wlyyQuotaResults=new ArrayList<WlyyQuotaResult>();
        //遍历团队的Map
        for(Map.Entry<String,Town> oneTownTeam:townsMap.entrySet()){
            //得到每个团队的2级维度
            Map<String, Map<String, List<ETLModel>>> twoETLMap= etlModelMap.get(oneTownTeam.getKey());
            Map<String, Map<String, List<ETLModel>>> deleteTwoETLMap= deleteEtlModelMap.get(oneTownTeam.getKey());
            for(int i=start2;i<=foreachNum2;i++){
                //得到每个团队的三级维度
                Map<String, List<ETLModel>> threeETLMap= new HashMap<String, List<ETLModel>>();
                if(twoETLMap!=null){
                    threeETLMap=twoETLMap.get(i+"");
                }
                Map<String, List<ETLModel>> deleteThreeETLMap= new HashMap<String, List<ETLModel>>();
                if(deleteTwoETLMap!=null){
                    deleteThreeETLMap=deleteTwoETLMap.get(i+"");
                }
                for(int j=start3;j<=foreachNum3;j++){
                    String level1="3";
                    String level2=i+"";
@ -269,10 +383,10 @@ public class RedisStorage {
                            num=etlModelList.size();
                        }
                    }
                    if(threeETLMap!=null){
                        List<ETLModel> etlModelList= threeETLMap.get(j+"");
                    if(deleteThreeETLMap!=null&&deleteThreeETLMap.size()>0){
                        List<ETLModel> etlModelList= deleteThreeETLMap.get(j+"");
                        if(etlModelList!=null&&etlModelList.size()>0){
                            num=etlModelList.size();
                            num=num-etlModelList.size();
                        }
                    }
                    Town town=townsMap.get(oneTownTeam.getKey());
@ -288,18 +402,23 @@ public class RedisStorage {
            }
        }
    }
    private void saveCityTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap,String wlyyQuotaId, Map<String, City> cityMap, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3, Integer start2, Integer start3) {
    private void saveCityTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap,Map<String, Map<String, Map<String, List<ETLModel>>>> deleteEtlModelMap,String wlyyQuotaId, Map<String, City> cityMap, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3, Integer start2, Integer start3) {
        List<WlyyQuotaResult> wlyyQuotaResults=new ArrayList<WlyyQuotaResult>();
        //遍历团队的Map
        for(Map.Entry<String,City> oneCityTeam:cityMap.entrySet()){
            //得到每个团队的2级维度
            Map<String, Map<String, List<ETLModel>>> twoETLMap= etlModelMap.get(oneCityTeam.getKey());
            Map<String, Map<String, List<ETLModel>>> deleteTwoETLMap= deleteEtlModelMap.get(oneCityTeam.getKey());
            for(int i=start2;i<=foreachNum2;i++){
                //得到每个团队的三级维度
                Map<String, List<ETLModel>> threeETLMap= new HashMap<String, List<ETLModel>>();
                if(twoETLMap!=null){
                    threeETLMap=twoETLMap.get(i+"");
                }
                Map<String, List<ETLModel>> deletetThreeETLMap= new HashMap<String, List<ETLModel>>();
                if(deleteTwoETLMap!=null){
                    deletetThreeETLMap=deleteTwoETLMap.get(i+"");
                }
                for(int j=start3;j<=foreachNum3;j++){
                    String level1="4";
@ -312,7 +431,81 @@ public class RedisStorage {
                            num=etlModelList.size();
                        }
                    }
                    if(threeETLMap!=null){
                    if(deletetThreeETLMap!=null&&deletetThreeETLMap.size()>0){
                        List<ETLModel> etlModelList= deletetThreeETLMap.get(j+"");
                        if(etlModelList!=null&&etlModelList.size()>0){
                            num=num-etlModelList.size();
                        }
                    }
                    City cityObj=oneCityTeam.getValue();
                    JSONObject jo=new JSONObject();
                    jo.put("date", DateUtil.dateToStrLong(new Date()));
                    jo.put("num", num);
                    jo.put("cityName", cityObj.getName());
                    jo.put("cityCode", cityObj.getCode());
                    jo.put("name", getLevel3Name(level3,type3));
                    redisTemplate.opsForValue().set(new StringBuffer("quota:"+wlyyQuotaId+":"+level1+":"+level2+":"+level3+":"+cityObj.getCode()).toString(), jo.toString());
                }
            }
        }
    }
    private void saveTownTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap,String wlyyQuotaId, Map<String, Town> townsMap, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3, Integer start2, Integer start3) {
        List<WlyyQuotaResult> wlyyQuotaResults=new ArrayList<WlyyQuotaResult>();
        //遍历团队的Map
        for(Map.Entry<String,Town> oneTownTeam:townsMap.entrySet()){
            //得到每个团队的2级维度
            Map<String, Map<String, List<ETLModel>>> twoETLMap= etlModelMap.get(oneTownTeam.getKey());
            for(int i=start2;i<=foreachNum2;i++){
                //得到每个团队的三级维度
                Map<String, List<ETLModel>> threeETLMap= new HashMap<String, List<ETLModel>>();
                if(twoETLMap!=null){
                    threeETLMap=twoETLMap.get(i+"");
                }
                for(int j=start3;j<=foreachNum3;j++){
                    String level1="3";
                    String level2=i+"";
                    String level3=j+"";
                    int num=0;
                    if(threeETLMap!=null&&threeETLMap.size()>0){
                        List<ETLModel> etlModelList= threeETLMap.get(j+"");
                        if(etlModelList!=null&&etlModelList.size()>0){
                            num=etlModelList.size();
                        }
                    }
                    Town town=townsMap.get(oneTownTeam.getKey());
                    if(town==null)continue;
                    JSONObject jo=new JSONObject();
                    jo.put("date", DateUtil.dateToStrLong(new Date()));
                    jo.put("num", num);
                    jo.put("townName", town.getName());
                    jo.put("townCode", town.getCode());
                    jo.put("name", getLevel3Name(level3,type3));
                    redisTemplate.opsForValue().set(new StringBuffer("quota:"+wlyyQuotaId+":"+level1+":"+level2+":"+level3+":"+town.getCode()).toString(), jo.toString());
                }
            }
        }
    }
    private void saveCityTeamDataLevel3(Map<String, Map<String, Map<String, List<ETLModel>>>> etlModelMap,String wlyyQuotaId, Map<String, City> cityMap, Integer foreachNum2, Integer foreachNum3, Integer type2, Integer type3, Integer start2, Integer start3) {
        List<WlyyQuotaResult> wlyyQuotaResults=new ArrayList<WlyyQuotaResult>();
        //遍历团队的Map
        for(Map.Entry<String,City> oneCityTeam:cityMap.entrySet()){
            //得到每个团队的2级维度
            Map<String, Map<String, List<ETLModel>>> twoETLMap= etlModelMap.get(oneCityTeam.getKey());
            for(int i=start2;i<=foreachNum2;i++){
                //得到每个团队的三级维度
                Map<String, List<ETLModel>> threeETLMap= new HashMap<String, List<ETLModel>>();
                if(twoETLMap!=null){
                    threeETLMap=twoETLMap.get(i+"");
                }
                for(int j=start3;j<=foreachNum3;j++){
                    String level1="4";
                    String level2=i+"";
                    String level3=j+"";
                    int num=0;
                    if(threeETLMap!=null&&threeETLMap.size()>0){
                        List<ETLModel> etlModelList= threeETLMap.get(j+"");
                        if(etlModelList!=null&&etlModelList.size()>0){
                            num=etlModelList.size();
@ -331,7 +524,8 @@ public class RedisStorage {
            }
        }
    }
    private void saveByLevel2Public(List<Map<String, Map<String, List<ETLModel>>>> data, String wlyyQuotaId, Integer foreachNum, Integer type, Integer start) {
    private void saveByLevel2Public(List<Map<String, Map<String, List<ETLModel>>>> data,List<Map<String, Map<String, List<ETLModel>>>> deleteData, String wlyyQuotaId, Integer foreachNum, Integer type, Integer start) {
        List<AdminTeam> adminTeams=doctorAdminTeamDao.findAllTeam();
        Map<String, AdminTeam> adminTeamMap = new HashMap<String, AdminTeam>();
        for (AdminTeam adminTeam : adminTeams) {
@ -362,19 +556,31 @@ public class RedisStorage {
        Map<String, Map<String, List<ETLModel>>> cityTeam=data.get(3);//市的数据
        redisTemplate.opsForValue().set("quota:date",DateUtil.dateToStrLong(new Date()));
        //保存市
        saveLevel2City(wlyyQuotaId, cityMap, cityTeam,foreachNum,type,start);
        //保存区
        saveLevel2Town(wlyyQuotaId, townsMap, townTeam,foreachNum,type,start);
        //保存机构
        saveLevel2Org(wlyyQuotaId, hospitalsMap, orgTeam,foreachNum,type,start);
        //保存全科团队
        saveLevel2Team(wlyyQuotaId, adminTeamMap, adminTeam,foreachNum,type,start);
        if(deleteData!=null){
            //保存市
            saveLevel2City(wlyyQuotaId, cityMap, cityTeam,deleteData.get(3),foreachNum,type,start);
            //保存区
            saveLevel2Town(wlyyQuotaId, townsMap, townTeam,deleteData.get(2),foreachNum,type,start);
            //保存机构
            saveLevel2Org(wlyyQuotaId, hospitalsMap, orgTeam,deleteData.get(1),foreachNum,type,start);
            //保存全科团队
            saveLevel2Team(wlyyQuotaId, adminTeamMap, adminTeam,deleteData.get(0),foreachNum,type,start);
        }else{
            //保存市
            saveLevel2City(wlyyQuotaId, cityMap, cityTeam,foreachNum,type,start);
            //保存区
            saveLevel2Town(wlyyQuotaId, townsMap, townTeam,foreachNum,type,start);
            //保存机构
            saveLevel2Org(wlyyQuotaId, hospitalsMap, orgTeam,foreachNum,type,start);
            //保存全科团队
            saveLevel2Team(wlyyQuotaId, adminTeamMap, adminTeam,foreachNum,type,start);
        }
    }
    private void saveLevel2Team(String wlyyQuotaId, Map<String, AdminTeam> adminTeamMap, Map<String, Map<String, List<ETLModel>>> eltModel, Integer foreachNum, Integer type,Integer start) {
    private void saveLevel2Team(String wlyyQuotaId, Map<String, AdminTeam> adminTeamMap, Map<String, Map<String, List<ETLModel>>> eltModel, Map<String, Map<String, List<ETLModel>>> deleteEltModel, Integer foreachNum, Integer type,Integer start) {
        for(Map.Entry<String,AdminTeam> adminTeam:adminTeamMap.entrySet()){
            Map<String, List<ETLModel>> oneELTMap= eltModel.get(adminTeam.getKey());
            Map<String, List<ETLModel>> deleteOneELTMap= deleteEltModel.get(adminTeam.getKey());
            for(int i=start;i<=foreachNum;i++){
                AdminTeam adminTeamObj=adminTeam.getValue();
                if(adminTeamObj==null)continue;
@ -386,6 +592,12 @@ public class RedisStorage {
                        num=etlModel.size();
                    }
                }
                if(deleteOneELTMap!=null){
                    List<ETLModel> etlModel= deleteOneELTMap.get(i+"");
                    if(etlModel!=null&&etlModel.size()>0){
                        num=num-etlModel.size();
                    }
                }
                jo.put("date", DateUtil.dateToStrLong(new Date()));
                jo.put("num", num);
                jo.put("teamName", adminTeamObj.getName());
@ -396,10 +608,34 @@ public class RedisStorage {
            }
        }
    }
    private void saveLevel2Org(String wlyyQuotaId, Map<String, Hospital> hospitalsMap, Map<String, Map<String, List<ETLModel>>> eltModel, Integer foreachNum, Integer type,Integer start) {
    private void saveLevel2Team(String wlyyQuotaId, Map<String, AdminTeam> adminTeamMap, Map<String, Map<String, List<ETLModel>>> eltModel,  Integer foreachNum, Integer type,Integer start) {
        for(Map.Entry<String,AdminTeam> adminTeam:adminTeamMap.entrySet()){
            Map<String, List<ETLModel>> oneELTMap= eltModel.get(adminTeam.getKey());
            for(int i=start;i<=foreachNum;i++){
                AdminTeam adminTeamObj=adminTeam.getValue();
                if(adminTeamObj==null)continue;
                JSONObject jo=new JSONObject();
                int num=0;
                if(oneELTMap!=null){
                    List<ETLModel> etlModel= oneELTMap.get(i+"");
                    if(etlModel!=null&&etlModel.size()>0){
                        num=etlModel.size();
                    }
                }
                jo.put("date", DateUtil.dateToStrLong(new Date()));
                jo.put("num", num);
                jo.put("teamName", adminTeamObj.getName());
                jo.put("teamId", adminTeamObj.getId());
                String key=i+"";
                jo.put("name", getLevel2Name(key,type));
                redisTemplate.opsForValue().set(new StringBuffer("quota:"+wlyyQuotaId+":1:"+key+":"+adminTeam.getKey()).toString(), jo.toString());
            }
        }
    }
    private void saveLevel2Org(String wlyyQuotaId, Map<String, Hospital> hospitalsMap, Map<String, Map<String, List<ETLModel>>> eltModel, Map<String, Map<String, List<ETLModel>>> deleteEltModel, Integer foreachNum, Integer type,Integer start) {
        for(Map.Entry<String,Hospital> hospital:hospitalsMap.entrySet()){
            Map<String, List<ETLModel>> oneELTMap= eltModel.get(hospital.getKey());
            Map<String, List<ETLModel>> deleteOneELTMap= deleteEltModel.get(hospital.getKey());
            for(int i=start;i<=foreachNum;i++){
                Hospital hospitalObj=hospital.getValue();
                if(hospitalObj==null)continue;
@ -411,6 +647,12 @@ public class RedisStorage {
                        num=etlModel.size();
                    }
                }
                if(deleteOneELTMap!=null){
                    List<ETLModel> etlModel= deleteOneELTMap.get(i+"");
                    if(etlModel!=null&&etlModel.size()>0){
                        num=num-etlModel.size();
                    }
                }
                jo.put("date", DateUtil.dateToStrLong(new Date()));
                jo.put("num", num);
                jo.put("orgName", hospitalObj.getName());
@ -421,10 +663,56 @@ public class RedisStorage {
            }
        }
    }
    private void saveLevel2Town(String wlyyQuotaId, Map<String, Town> townsMap, Map<String, Map<String, List<ETLModel>>> eltModel, Integer foreachNum, Integer type,Integer start) {
    private void saveLevel2Town(String wlyyQuotaId, Map<String, Town> townsMap, Map<String, Map<String, List<ETLModel>>> eltModel,  Integer foreachNum, Integer type,Integer start) {
        for(Map.Entry<String,Town> town:townsMap.entrySet()){
            Map<String, List<ETLModel>> oneELTMap= eltModel.get(town.getKey());
            for(int i=1;i<=foreachNum;i++){
                JSONObject jo=new JSONObject();
                int num=0;
                if(oneELTMap!=null){
                    List<ETLModel> etlModel= oneELTMap.get(i+"");
                    if(etlModel!=null&&etlModel.size()>0){
                        num=etlModel.size();
                    }
                }
                jo.put("date", DateUtil.dateToStrLong(new Date()));
                jo.put("num", num);
                jo.put("townName", town.getValue().getName());
                jo.put("townCode", town.getValue().getCode());
                String key=i+"";
                jo.put("name", getLevel2Name(key,type));
                redisTemplate.opsForValue().set(new StringBuffer("quota:"+wlyyQuotaId+":3:"+key+":"+town.getKey()).toString(), jo.toString());
            }
        }
    }
    private void saveLevel2Org(String wlyyQuotaId, Map<String, Hospital> hospitalsMap, Map<String, Map<String, List<ETLModel>>> eltModel,Integer foreachNum, Integer type,Integer start) {
        for(Map.Entry<String,Hospital> hospital:hospitalsMap.entrySet()){
            Map<String, List<ETLModel>> oneELTMap= eltModel.get(hospital.getKey());
            for(int i=start;i<=foreachNum;i++){
                Hospital hospitalObj=hospital.getValue();
                if(hospitalObj==null)continue;
                JSONObject jo=new JSONObject();
                int num=0;
                if(oneELTMap!=null){
                    List<ETLModel> etlModel= oneELTMap.get(i+"");
                    if(etlModel!=null&&etlModel.size()>0){
                        num=etlModel.size();
                    }
                }
                jo.put("date", DateUtil.dateToStrLong(new Date()));
                jo.put("num", num);
                jo.put("orgName", hospitalObj.getName());
                jo.put("orgCode", hospitalObj.getCode());
                String key=i+"";
                jo.put("name", getLevel2Name(key,type));
                redisTemplate.opsForValue().set(new StringBuffer("quota:"+wlyyQuotaId+":2:"+key+":"+hospital.getKey()).toString(), jo.toString());
            }
        }
    }
    private void saveLevel2Town(String wlyyQuotaId, Map<String, Town> townsMap, Map<String, Map<String, List<ETLModel>>> eltModel, Map<String, Map<String, List<ETLModel>>> deleteEltModel, Integer foreachNum, Integer type,Integer start) {
        for(Map.Entry<String,Town> town:townsMap.entrySet()){
            Map<String, List<ETLModel>> oneELTMap= eltModel.get(town.getKey());
            Map<String, List<ETLModel>> deleteOneELTMap= deleteEltModel.get(town.getKey());
            for(int i=1;i<=foreachNum;i++){
                JSONObject jo=new JSONObject();
                int num=0;
@ -434,6 +722,12 @@ public class RedisStorage {
                        num=etlModel.size();
                    }
                }
                if(deleteOneELTMap!=null){
                    List<ETLModel> etlModel= deleteOneELTMap.get(i+"");
                    if(etlModel!=null&&etlModel.size()>0){
                        num=num-etlModel.size();
                    }
                }
                jo.put("date", DateUtil.dateToStrLong(new Date()));
                jo.put("num", num);
                jo.put("townName", town.getValue().getName());
@ -445,7 +739,36 @@ public class RedisStorage {
        }
    }
    private void saveLevel2City(String wlyyQuotaId, Map<String, City> cityMap, Map<String, Map<String, List<ETLModel>>> eltModel, Integer foreachNum, Integer type,Integer start) {
    private void saveLevel2City(String wlyyQuotaId, Map<String, City> cityMap, Map<String, Map<String, List<ETLModel>>> eltModel, Map<String, Map<String, List<ETLModel>>> deleteEltModel, Integer foreachNum, Integer type,Integer start) {
        for(Map.Entry<String,City> city:cityMap.entrySet()){
            Map<String, List<ETLModel>> oneELTMap= eltModel.get(city.getKey());
            Map<String, List<ETLModel>> deleteOneELTMap= deleteEltModel.get(city.getKey());
            for(int i=start;i<=foreachNum;i++){
                JSONObject jo=new JSONObject();
                int num=0;
                if(oneELTMap!=null){
                    List<ETLModel> etlModel= oneELTMap.get(i+"");
                    if(etlModel!=null&&etlModel.size()>0){
                        num=etlModel.size();
                    }
                }
                if(deleteOneELTMap!=null){
                    List<ETLModel> etlModel= deleteOneELTMap.get(i+"");
                    if(etlModel!=null&&etlModel.size()>0){
                        num=num-etlModel.size();
                    }
                }
                jo.put("date", DateUtil.dateToStrLong(new Date()));
                jo.put("num", num);
                jo.put("cityName", city.getValue().getName());
                jo.put("cityCode", city.getValue().getCode());
                String key=i+"";
                jo.put("name", getLevel2Name(key,type));
                redisTemplate.opsForValue().set(new StringBuffer("quota:"+wlyyQuotaId+":4:"+key+":"+city.getKey()).toString(), jo.toString());
            }
        }
    }
    private void saveLevel2City(String wlyyQuotaId, Map<String, City> cityMap, Map<String, Map<String, List<ETLModel>>> eltModel,  Integer foreachNum, Integer type,Integer start) {
        for(Map.Entry<String,City> city:cityMap.entrySet()){
            Map<String, List<ETLModel>> oneELTMap= eltModel.get(city.getKey());
            for(int i=start;i<=foreachNum;i++){
@ -467,7 +790,6 @@ public class RedisStorage {
            }
        }
    }
    private void saveLevel1Team(String wlyyQuotaId, Map<String, AdminTeam> adminTeamMap, Map<String, List<ETLModel>> adminTeam) {
        for(Map.Entry<String,AdminTeam> entry:adminTeamMap.entrySet()){
            JSONObject jo=new JSONObject();
@ -485,7 +807,29 @@ public class RedisStorage {
            redisTemplate.opsForValue().set(new StringBuffer("quota:"+wlyyQuotaId+":1:"+entry.getKey()).toString(), jo.toString());
        }
    }
    private void saveLevel1Team(String wlyyQuotaId, Map<String, AdminTeam> adminTeamMap, Map<String, List<ETLModel>> adminTeam, Map<String, List<ETLModel>> deleteAdminTeam) {
        for(Map.Entry<String,AdminTeam> entry:adminTeamMap.entrySet()){
            JSONObject jo=new JSONObject();
            Integer num=0;
            AdminTeam adminTeamObj=entry.getValue();
            if(adminTeamObj==null)continue;
            List<ETLModel> etlList=adminTeam.get(entry.getKey());
            if(etlList!=null&&etlList.size()>0){
                num=etlList.size();
            }
            if(deleteAdminTeam!=null&&deleteAdminTeam.size()>0){
                List<ETLModel> deleteEtlList=deleteAdminTeam.get(entry.getKey());
                if(deleteEtlList!=null&&deleteEtlList.size()>0){
                    num=num-deleteEtlList.size();
                }
            }
            jo.put("date", DateUtil.dateToStrLong(new Date()));
            jo.put("num", num);
            jo.put("teamName", adminTeamObj.getName());
            jo.put("teamId", adminTeamObj.getId());
            redisTemplate.opsForValue().set(new StringBuffer("quota:"+wlyyQuotaId+":1:"+entry.getKey()).toString(), jo.toString());
        }
    }
    private void saveLevel1Org(String wlyyQuotaId, Map<String, Hospital> hospitalsMap, Map<String, List<ETLModel>> orgTeam) {
        for(Map.Entry<String,Hospital> entry:hospitalsMap.entrySet()){
            Hospital hospital=entry.getValue();
@ -503,7 +847,51 @@ public class RedisStorage {
            redisTemplate.opsForValue().set(new StringBuffer("quota:"+wlyyQuotaId+":2:"+entry.getKey()).toString(), jo.toString());
        }
    }
    private void saveLevel1Org(String wlyyQuotaId, Map<String, Hospital> hospitalsMap, Map<String, List<ETLModel>> orgTeam, Map<String, List<ETLModel>> deleteOrgTeam) {
        for(Map.Entry<String,Hospital> entry:hospitalsMap.entrySet()){
            Hospital hospital=entry.getValue();
            if(hospital==null)continue;
            JSONObject jo=new JSONObject();
            Integer num=0;
            List<ETLModel> etlList=orgTeam.get(entry.getKey());
            if(etlList!=null&&etlList.size()>0){
                num=etlList.size();
            }
            if(deleteOrgTeam!=null&&deleteOrgTeam.size()>0){
                List<ETLModel> deleteEtlList=deleteOrgTeam.get(entry.getKey());
                if(deleteEtlList!=null&&deleteEtlList.size()>0){
                    num=num-deleteEtlList.size();
                }
            }
            jo.put("date", DateUtil.dateToStrLong(new Date()));
            jo.put("num", num);
            jo.put("orgName", hospital.getName());
            jo.put("orgCode", hospital.getCode());
            redisTemplate.opsForValue().set(new StringBuffer("quota:"+wlyyQuotaId+":2:"+entry.getKey()).toString(), jo.toString());
        }
    }
    private void saveLevel1Town(String wlyyQuotaId, Map<String, Town> townsMap, Map<String, List<ETLModel>> townTeam, Map<String, List<ETLModel>> deleteTownTeam) {
        for(Map.Entry<String,Town> entry:townsMap.entrySet()){
            JSONObject jo=new JSONObject();
            Integer num=0;
            List<ETLModel> etlList=townTeam.get(entry.getKey());
            if(etlList!=null&&etlList.size()>0){
                num=etlList.size();
            }
            if(deleteTownTeam!=null&&deleteTownTeam.size()>0){
                List<ETLModel> deleteEtlList=deleteTownTeam.get(entry.getKey());
                if(deleteEtlList!=null&&deleteEtlList.size()>0){
                    num=num-deleteEtlList.size();
                }
            }
            jo.put("date", DateUtil.dateToStrLong(new Date()));
            jo.put("num", num);
            jo.put("townName", entry.getValue().getName());
            jo.put("townCode", entry.getValue().getCode());
            redisTemplate.opsForValue().set(new StringBuffer("quota:"+wlyyQuotaId+":3:"+entry.getKey()).toString(), jo.toString());
        }
    }
    private void saveLevel1Town(String wlyyQuotaId, Map<String, Town> townsMap, Map<String, List<ETLModel>> townTeam) {
        for(Map.Entry<String,Town> entry:townsMap.entrySet()){
            JSONObject jo=new JSONObject();
@ -519,7 +907,27 @@ public class RedisStorage {
            redisTemplate.opsForValue().set(new StringBuffer("quota:"+wlyyQuotaId+":3:"+entry.getKey()).toString(), jo.toString());
        }
    }
    private void saveLevel1City(String wlyyQuotaId, Map<String, City> cityMap, Map<String, List<ETLModel>> cityTeam, Map<String, List<ETLModel>> deleteCityTeam) {
        for(Map.Entry<String,City> entry:cityMap.entrySet()){
            JSONObject jo=new JSONObject();
            Integer num=0;
            List<ETLModel> etlList=cityTeam.get(entry.getKey());
            if(etlList!=null&&etlList.size()>0){
                num=etlList.size();
            }
            if(deleteCityTeam!=null&&deleteCityTeam.size()>0){
            List<ETLModel> deleteEtlList=deleteCityTeam.get(entry.getKey());
                if(deleteEtlList!=null&&deleteEtlList.size()>0){
                    num=num-deleteEtlList.size();
                }
            }
            jo.put("date", DateUtil.dateToStrLong(new Date()));
            jo.put("num", num);
            jo.put("cityName", entry.getValue().getName());
            jo.put("cityCode", entry.getValue().getCode());
            redisTemplate.opsForValue().set(new StringBuffer("quota:"+wlyyQuotaId+":4:"+entry.getKey()).toString(), jo.toString());
        }
    }
    private void saveLevel1City(String wlyyQuotaId, Map<String, City> cityMap, Map<String, List<ETLModel>> cityTeam) {
        for(Map.Entry<String,City> entry:cityMap.entrySet()){
            JSONObject jo=new JSONObject();
@ -535,7 +943,6 @@ public class RedisStorage {
            redisTemplate.opsForValue().set(new StringBuffer("quota:"+wlyyQuotaId+":4:"+entry.getKey()).toString(), jo.toString());
        }
    }
    private String getLevel2Name(String i, Integer type) {
        switch (type){
            case  1:{

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

@ -37,6 +37,7 @@ public class Constant {
    public static String level_age2_2_name=">65";
    //二级维度的组
    public static String level_group_0="0";
    public static String level_group_1="1";
    public static String level_group_2="2";
    public static String level_group_3="3";
@ -44,6 +45,7 @@ public class Constant {
    public static String level_group_5="5";
    public static String level_group_6="6";
    public static String level_group_7="7";
    public static String level_group_0_name="未分組";
    public static String level_group_1_name="普通人群";
    public static String level_group_2_name="慢病65岁以下人群";
    public static String level_group_3_name="65岁以上人群";
@ -146,6 +148,9 @@ public class Constant {
    }
    public static String getLevelGroupName(String key){
        switch (key){
            case "0":{
                return level_group_0_name;
            }
            case "1":{
                return level_group_1_name;
            }
@ -164,7 +169,6 @@ public class Constant {
            case "6":{
                return level_group_6_name;
            }
            case "7":{
                return level_group_7_name;
            }

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

@ -21,6 +21,7 @@ import com.yihu.wlyy.statistics.model.system.Town;
import com.yihu.wlyy.statistics.model.team.AdminTeam;
import com.yihu.wlyy.statistics.util.DateUtil;
import com.yihu.wlyy.statistics.util.IdCardUtil;
import com.yihu.wlyy.statistics.util.SpringUtil;
import org.json.JSONArray;
import org.json.JSONObject;
import org.quartz.Job;
@ -53,8 +54,6 @@ public class CurrentDayAllQuotaJob implements Job {
    @Autowired
    private TownDao townDao;
    @Autowired
    private StringRedisTemplate redisTemplate;
    @Autowired
    private QuartzJobLogDao quartzJobLogDao;//执行日志Dao
    @Autowired
    private DoctorAdminTeamDao doctorAdminTeamDao;
@ -69,10 +68,6 @@ public class CurrentDayAllQuotaJob implements Job {
    @Autowired
    private JdbcTemplate jdbcTemplate ;
    @Autowired
    private DBExtract dbExtract;
    @Autowired
    private SignDataFilter signDataFilter;
    @Autowired
    private ConsultDataFilter consultDataFilter;
    @Autowired
    private HealthGuideDataFilter healthGuideDataFilter;
@ -172,22 +167,22 @@ public class CurrentDayAllQuotaJob implements Job {
            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>= '"+now+"' and  a.apply_date< '"+tomorrow+"' ";
            String sqlCount=" select count(id) from wlyy_sign_family a where  a.type =2 and expenses_status=1 and  a.apply_date>= '"+now+"' and  a.apply_date< '"+tomorrow+"' ";
            //抽取數據 expensesStatus=1
            List<SignFamily> signFamilies_1= dbExtract.extractByPage(SignFamily.class,sql,sqlCount,true);
            List<SignFamily> signFamilies_1= SpringUtil.getBean(DBExtract.class).extractByPage(SignFamily.class,sql,sqlCount,true);
            //抽取第二种条件的语句
            sql=" select id,code,idcard,hospital,admin_team_code,expenses_status from wlyy_sign_family a where  a.type =2 and (expenses_status !=1 or expenses_status is null) and  a.apply_date>= '"+now+"' and  a.apply_date< '"+tomorrow+"' ";
            sqlCount=" select count(id) from wlyy_sign_family a where  a.type =2 and (expenses_status !=1 or expenses_status is null) and  a.apply_date>= '"+now+"' and  a.apply_date< '"+tomorrow+"' ";
            List<SignFamily> signFamilies_2= dbExtract.extractByPage(SignFamily.class,sql,sqlCount,true);
            List<SignFamily> signFamilies_2= SpringUtil.getBean(DBExtract.class).extractByPage(SignFamily.class,sql,sqlCount,true);
            //抽取的语句
            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+"' ";
            //清洗數據
            FilterModel etlModels= signDataFilter.filter(signFamilies_1, SignDataFilter.level2Expenses,sql,null);
            FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies_1, SignDataFilter.level2Expenses,sql,null);
            //统计数据
            //统计数据 一级维度
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            //统计数据 二级维度
            List<Map<String, Map<String, List<ETLModel>>>> level2Data= level2Role.elt(returnDatas);
            //保存数据
            redisStorage.saveByLevel2(level2Data,quotaId,2,4,0);
            redisStorage.saveByLevel2(level2Data,null,quotaId,2,4,0);
            allContent.append(etlModels.getMessage());
        }catch (Exception e){
            e.printStackTrace();
@ -203,13 +198,21 @@ public class CurrentDayAllQuotaJob implements Job {
        try{
           //抽取數據 分页抽取
           List<SignFamily> signFamilies= dbExtract.extractByPage(SignFamily.class,sql,sqlCount,true);
           List<SignFamily> signFamilies= SpringUtil.getBean(DBExtract.class).extractByPage(SignFamily.class,sql,sqlCount,true);
           //清洗數據
           FilterModel etlModels= signDataFilter.filter(signFamilies,sql,null);
           FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,sql,null);
           //统计数据
           List<Map<String, List<ETLModel>>>  returnData= levelRole.elt(etlModels.getEtlModelList());
            //扣掉今天退費的
            String deleteDql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and  a.czrq>= '"+now+"' and  a.czrq< '"+tomorrow+"' and a.expenses_status=3 ";
            //抽取數據
            List<SignFamily> deleteSignFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
            //清洗數據
            FilterModel deleteEtlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,sql,"now");
            //统计数据
            List<Map<String, List<ETLModel>>>  deleteReturnDatas= levelRole.elt(etlModels.getEtlModelList());
            //保存数据
            redisStorage.saveByLevel1(returnData,"13");
            redisStorage.saveByLevel1(returnData,deleteReturnDatas,"13");
            allContent.append(etlModels.getMessage());
        }catch (Exception e){
            e.printStackTrace();
@ -224,16 +227,16 @@ public class CurrentDayAllQuotaJob implements Job {
        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+"' ";
        try{
            //抽取數據
            List<SignFamily> signFamilies= dbExtract.extract(SignFamily.class,sql);
            List<SignFamily> signFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
            //清洗數據
            FilterModel etlModels= signDataFilter.filter(signFamilies, SignDataFilter.level2Expenses,sql,null);
            FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies, SignDataFilter.level2Expenses,sql,null);
            //统计数据
            //统计数据 一级维度
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            //统计数据 二级维度
            List<Map<String, Map<String, List<ETLModel>>>> role2Data= level2Role.elt(returnDatas);
            //保存数据
            redisStorage.saveByLevel2(role2Data,quotaId,2,4,0);
            redisStorage.saveByLevel2(role2Data,null,quotaId,2,4,0);
            allContent.append(etlModels.getMessage());
        }catch (Exception e){
            e.printStackTrace();
@ -248,15 +251,25 @@ public class CurrentDayAllQuotaJob implements Job {
        String sql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and  a.expenses_time>= '"+now+"' and  a.expenses_time< '"+tomorrow+"' and a.expenses_status=1 ";
       try{
           //抽取數據
           List<SignFamily> signFamilies= dbExtract.extract(SignFamily.class,sql);
           List<SignFamily> signFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
           //清洗數據
           FilterModel etlModels= signDataFilter.filter(signFamilies, SignDataFilter.level2Health,sql,null);
           FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies, SignDataFilter.level2Health,sql,null);
           //统计数据 一级维度
           List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
           //统计数据 二级维度
           List<Map<String, Map<String, List<ETLModel>>>> patientSexRoleData= level2Role.elt(returnDatas);
           //扣掉今天退費的
           String deleteDql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and  a.czrq>= '"+now+"' and  a.czrq< '"+tomorrow+"' and a.expenses_status=3 ";
           //抽取數據
           List<SignFamily> deleteSignFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
           //清洗數據
           FilterModel deleteEtlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,SignDataFilter.level2Health,sql,"now");
           //统计数据
           List<Map<String, List<ETLModel>>>  deleteReturnDatas= levelRole.elt(etlModels.getEtlModelList());
           //统计数据 二级维度
           List<Map<String, Map<String, List<ETLModel>>>>  deleteLevel2Data= level2Role.elt(deleteReturnDatas);;
            //保存数据
            redisStorage.saveByLevel2(patientSexRoleData,quotaId,4,5,0);
            redisStorage.saveByLevel2(patientSexRoleData,deleteLevel2Data,quotaId,4,5,0);
           allContent.append(etlModels.getMessage());
        }catch (Exception e){
            e.printStackTrace();
@ -269,20 +282,31 @@ public class CurrentDayAllQuotaJob implements Job {
        String quotaId="12";
        //找出今天的签约信息
        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 ";
        String deleteSql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and  a.czrq>= '"+now+"' and  a.czrq< '"+tomorrow+"' and a.expenses_status=3  ";
        try{
             //抽取數據
            List<SignFamily> signFamilies= dbExtract.extract(SignFamily.class,sql);
            List<SignFamily> signFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
            //清洗數據
            FilterModel etlModels= signDataFilter.filter(signFamilies,SignDataFilter.level2Age,SignDataFilter.level3Disease,sql,null);
            FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,SignDataFilter.level2Age,SignDataFilter.level3Disease,sql,null);
            //统计数据 一级维度
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            //统计数据 二级维度
            List<Map<String, Map<String, List<ETLModel>>>> patientSexRoleData= level2Role.elt(returnDatas);
            //统计数据 三级维度
            List<Map<String, Map<String, Map<String, List<ETLModel>>>>> returnD=level3Role.elt(patientSexRoleData);
            //抽取數據
            List<SignFamily> deleteSignFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
            //清洗數據
            FilterModel deleteEtlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,SignDataFilter.level2Age,SignDataFilter.level3Disease,sql,null);
            //统计数据 一级维度
            List<Map<String, List<ETLModel>>>  deleteReturnDatas= levelRole.elt(etlModels.getEtlModelList());
            //统计数据 二级维度
            List<Map<String, Map<String, List<ETLModel>>>> deletePatientSexRoleData= level2Role.elt(returnDatas);
            //统计数据 三级维度
            List<Map<String, Map<String, Map<String, List<ETLModel>>>>> deleteReturnD=level3Role.elt(patientSexRoleData);
            //保存数据
            redisStorage.saveByLevel3(returnD,quotaId,6,4,2,1,1,1);
            redisStorage.saveByLevel3(returnD,deleteReturnD,quotaId,6,4,2,1,1,1);
        }catch (Exception e){
        }
@ -322,13 +346,21 @@ public class CurrentDayAllQuotaJob implements Job {
            //找出今天的签约信息 yesterday,now
            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> signFamilies= dbExtract.extract(SignFamily.class,sql);
            List<SignFamily> signFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
            //清洗數據
            FilterModel etlModels= signDataFilter.filter(signFamilies,sql,"now");
            FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,sql,"now");
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            //扣掉今天退費的
            String deleteDql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and  a.czrq>= '"+now+"' and  a.czrq< '"+tomorrow+"' and a.expenses_status=3 ";
            //抽取數據
            List<SignFamily> deleteSignFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
            //清洗數據
            FilterModel deleteEtlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,sql,"now");
            //统计数据
            List<Map<String, List<ETLModel>>>  deleteReturnDatas= levelRole.elt(etlModels.getEtlModelList());
            //保存数据
            redisStorage.saveByLevel1(returnDatas,"1");
            redisStorage.saveByLevel1(returnDatas,deleteReturnDatas,"1");
            allContent.append(etlModels.getMessage());
        }catch (Exception e){
            e.printStackTrace();
@ -344,13 +376,13 @@ public class CurrentDayAllQuotaJob implements Job {
            //找出今天的解约信息
            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> signFamilies= dbExtract.extract(SignFamily.class,sql);
            List<SignFamily> signFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
            //清洗數據
            FilterModel etlModels= signDataFilter.filter(signFamilies,sql);
            FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,sql);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            //保存数据
            redisStorage.saveByLevel1(returnDatas,quotaId);
            redisStorage.saveByLevel1(returnDatas,null,quotaId);
            allContent.append(etlModels.getMessage());
        }catch (Exception e){
            e.printStackTrace();
@ -365,13 +397,13 @@ public class CurrentDayAllQuotaJob implements Job {
            //找出今天的咨询信息
            String sql=" select * from wlyy_consult_team a where a.type=2 and a.czrq>='"+now+"' and a.czrq< '"+tomorrow+"'";
            //抽取數據
            List<ConsultTeam> consultTeams= dbExtract.extract(ConsultTeam.class,sql);
            List<ConsultTeam> consultTeams= SpringUtil.getBean(DBExtract.class).extract(ConsultTeam.class,sql);
            //過濾數據
            FilterModel etlModels= consultDataFilter.filter(consultTeams,sql,null);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            //保存数据
            redisStorage.saveByLevel1(returnDatas,quotaId);
            redisStorage.saveByLevel1(returnDatas,null,quotaId);
            allContent.append(etlModels.getMessage());
        }catch (Exception e){
            e.printStackTrace();
@ -387,13 +419,13 @@ public class CurrentDayAllQuotaJob implements Job {
            String sql=" select * from fv_plan a where unix_timestamp(a.update_time)>=unix_timestamp('"+now+"') and unix_timestamp(a.update_time)< unix_timestamp('"+tomorrow+"')  ";
            //找出今天的随访信息
            List<Map<String, Object>> plans = jdbcTemplate.queryForList(sql);
            List<Map<String, Object>> plans = fv_jdbcTemplate.queryForList(sql);
            FilterModel etlModels = followUpDataFilter.filter(plans, sql, null);
            // 统计数据
            List<Map<String, List<ETLModel>>> returnDatas = levelRole.elt(etlModels.getEtlModelList());
            //保存数据
            redisStorage.saveByLevel1(returnDatas,quotaId);
            redisStorage.saveByLevel1(returnDatas,null,quotaId);
            allContent.append(etlModels.getMessage());
        }catch (Exception e){
            e.printStackTrace();
@ -407,13 +439,13 @@ public class CurrentDayAllQuotaJob implements Job {
        String sql="SELECT * FROM wlyy_patient_health_guidance a WHERE a.czrq>='"+now+"' and a.czrq< '"+tomorrow+"'";
        try{
            //抽取數據
            List<PatientHealthGuidance> consultTeams= dbExtract.extract(PatientHealthGuidance.class,sql);
            List<PatientHealthGuidance> consultTeams= SpringUtil.getBean(DBExtract.class).extract(PatientHealthGuidance.class,sql);
            //過濾數據
            FilterModel etlModels= healthGuideDataFilter.filter(consultTeams,sql,null);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            //保存数据
            redisStorage.saveByLevel1(returnDatas,quotaId);
            redisStorage.saveByLevel1(returnDatas,null,quotaId);
            allContent.append(etlModels.getMessage());
        }catch (Exception e){
            e.printStackTrace();
@ -428,15 +460,25 @@ public class CurrentDayAllQuotaJob implements Job {
        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 ";
       try{
           //抽取數據
           List<SignFamily> signFamilies= dbExtract.extract(SignFamily.class,sql);
           List<SignFamily> signFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
           //清洗數據
           FilterModel etlModels= signDataFilter.filter(signFamilies,SignDataFilter.level2Sex,sql,null);
           FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,SignDataFilter.level2Sex,sql,null);
           //统计数据 1级维度
           List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
           //统计数据 二级维度
           List<Map<String, Map<String, List<ETLModel>>>>  level2Data= level2Role.elt(returnDatas);;
           //扣掉今天退費的
           String deleteDql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and  a.czrq>= '"+now+"' and  a.czrq< '"+tomorrow+"' and a.expenses_status=3 ";
           //抽取數據
           List<SignFamily> deleteSignFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
           //清洗數據
           FilterModel deleteEtlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,SignDataFilter.level2Sex,sql,"now");
           //统计数据
           List<Map<String, List<ETLModel>>>  deleteReturnDatas= levelRole.elt(etlModels.getEtlModelList());
           //统计数据 二级维度
           List<Map<String, Map<String, List<ETLModel>>>>  deleteLevel2Data= level2Role.elt(deleteReturnDatas);;
            //保存数据
            redisStorage.saveByLevel2(level2Data,quotaId,3,1);
            redisStorage.saveByLevel2(level2Data,deleteLevel2Data,quotaId,3,1);
           allContent.append(etlModels.getMessage());
        }catch (Exception e){
            e.printStackTrace();
@ -450,15 +492,25 @@ public class CurrentDayAllQuotaJob implements Job {
        try{
            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> signFamilies= dbExtract.extract(SignFamily.class,sql);
            List<SignFamily> signFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
            //清洗數據
            FilterModel etlModels= signDataFilter.filter(signFamilies,SignDataFilter.level2Group,sql,null);
            FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,SignDataFilter.level2Group,sql,null);
            //统计数据 1级维度
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            //统计数据 二级维度
            List<Map<String, Map<String, List<ETLModel>>>>  level2Data= level2Role.elt(returnDatas);
            //扣掉今天退費的
            String deleteDql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and  a.czrq>= '"+now+"' and  a.czrq< '"+tomorrow+"' and a.expenses_status=3 ";
            //抽取數據
            List<SignFamily> deleteSignFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
            //清洗數據
            FilterModel deleteEtlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,SignDataFilter.level2Group,sql,"now");
            //统计数据
            List<Map<String, List<ETLModel>>>  deleteReturnDatas= levelRole.elt(etlModels.getEtlModelList());
            //统计数据 二级维度
            List<Map<String, Map<String, List<ETLModel>>>>  deleteLevel2Data= level2Role.elt(deleteReturnDatas);;
            //保存数据 1 表示:从1开始循环 6表示:循环6次 3表示 2级维度是 3
            redisStorage.saveByLevel2(level2Data,quotaId,7,3);
            redisStorage.saveByLevel2(level2Data,deleteLevel2Data,quotaId,7,3);
            allContent.append(etlModels.getMessage());
        }catch (Exception e){
            e.printStackTrace();
@ -473,15 +525,25 @@ public class CurrentDayAllQuotaJob implements Job {
            //找出今天的签约信息
            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> signFamilies= dbExtract.extract(SignFamily.class,sql);
            List<SignFamily> signFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
            //清洗數據
            FilterModel etlModels= signDataFilter.filter(signFamilies,SignDataFilter.level2Age,sql,null);
            FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,SignDataFilter.level2Age,sql,null);
            //统计数据 1级维度
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            //统计数据 二级维度
            List<Map<String, Map<String, List<ETLModel>>>>  level2Data= level2Role.elt(returnDatas);;
            //扣掉今天退費的
            String deleteDql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and  a.czrq>= '"+now+"' and  a.czrq< '"+tomorrow+"' and a.expenses_status=3 ";
            //抽取數據
            List<SignFamily> deleteSignFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
            //清洗數據
            FilterModel deleteEtlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,SignDataFilter.level2Age,sql,"now");
            //统计数据
            List<Map<String, List<ETLModel>>>  deleteReturnDatas= levelRole.elt(etlModels.getEtlModelList());
            //统计数据 二级维度
            List<Map<String, Map<String, List<ETLModel>>>>  deleteLevel2Data= level2Role.elt(deleteReturnDatas);;
            //保存数据
            redisStorage.saveByLevel2(level2Data,quotaId,6,2);
            redisStorage.saveByLevel2(level2Data,deleteLevel2Data,quotaId,6,2);
            allContent.append(etlModels.getMessage());
        }catch (Exception e){
            e.printStackTrace();
@ -496,13 +558,13 @@ public class CurrentDayAllQuotaJob implements Job {
        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 ";
        try{
            //抽取數據
            List<SignFamily> signFamilies= dbExtract.extract(SignFamily.class,sql);
            List<SignFamily> signFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
            //清洗數據
            FilterModel etlModels= signDataFilter.filter(signFamilies,sql,null);
            FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,sql,null);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            //保存数据
            redisStorage.saveByLevel1(returnDatas,quotaId);
            redisStorage.saveByLevel1(returnDatas,null,quotaId);
            allContent.append(etlModels.getMessage());
        }catch (Exception e){
            e.printStackTrace();
@ -517,13 +579,13 @@ public class CurrentDayAllQuotaJob implements Job {
            //找出今天的已改簽信息
            String sql=" select id,code,idcard,hospital,admin_team_code from wlyy_sign_family a where  a.type =2 and a.status =100 and  a.patient_apply_date>= '"+now+"' and  a.patient_apply_date< '"+tomorrow+"' and a.expenses_status=1 ";
            //抽取數據
            List<SignFamily> signFamilies= dbExtract.extract(SignFamily.class,sql);
            List<SignFamily> signFamilies= SpringUtil.getBean(DBExtract.class).extract(SignFamily.class,sql);
            //清洗數據
            FilterModel etlModels= signDataFilter.filter(signFamilies,sql,null);
            FilterModel etlModels= SpringUtil.getBean(SignDataFilter.class).filter(signFamilies,sql,null);
            //统计数据
            List<Map<String, List<ETLModel>>>  returnDatas= levelRole.elt(etlModels.getEtlModelList());
            //保存数据
            redisStorage.saveByLevel1(returnDatas,quotaId);
            redisStorage.saveByLevel1(returnDatas,null,quotaId);
           allContent.append(etlModels.getMessage());
        }catch (Exception e){
            e.printStackTrace();

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

@ -165,7 +165,8 @@ public class SignJob implements Job {
            //统计数据 二级维度
            List<Map<String, Map<String, List<ETLModel>>>>  level2Data= level2Role.elt(returnDatas);
            //保存数据 1 表示:从1开始循环 6表示:循环6次 3表示 2级维度是 3
            dbStorage.saveByLevel2(level2Data,yesterday,wlyyQuota,7,3,1);
            // dbStorage.saveByLevel2(level2Data,yesterday,wlyyQuota,7,3,1);
            dbStorage.saveByLevel2(level2Data,yesterday,wlyyQuota,6,3,0);
            //保存日志
            quartzJobLog.setJobEndTime(new Date());

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

@ -4,7 +4,9 @@ import com.yihu.wlyy.statistics.dao.DoctorPatientGroupInfoDao;
import com.yihu.wlyy.statistics.dao.QuartzJobConfigDao;
import com.yihu.wlyy.statistics.dao.QuotaDao;
import com.yihu.wlyy.statistics.dao.SignFamilyDao;
import com.yihu.wlyy.statistics.etl.cache.CachePool;
import com.yihu.wlyy.statistics.job.business.QuartzHelper;
import com.yihu.wlyy.statistics.job.cache.CacheCleanJob;
import com.yihu.wlyy.statistics.job.check.CheckSignJob;
import com.yihu.wlyy.statistics.model.doctor.DoctorPatientGroupInfo;
import com.yihu.wlyy.statistics.model.job.QuartzJobConfig;
@ -42,6 +44,8 @@ public class JobService {
    @Autowired
    private DoctorPatientGroupInfoDao doctorPatientGroupInfoDao;
    @Autowired
    private CachePool cachePool;
    @Transactional
    public void stopById(String id) throws Exception {
@ -153,7 +157,7 @@ public class JobService {
                params.put("yesterday", getYesterday(0 - i));
                if (!StringUtils.isEmpty(quartzJobConfig.getJobClass())) {
                    quartzHelper.startNow(getRightClass(quartzJobConfig), quartzJobConfig.getId() + UUID.randomUUID().toString().replace("-",""), params);
                    Thread.sleep(12000L);
                    Thread.sleep(20000L);
                }
            }
        }
@ -195,7 +199,7 @@ public class JobService {
            params.put("yesterday", yesterday);
            if (!StringUtils.isEmpty(quartzJobConfig.getJobClass())) {
                quartzHelper.startNow(getRightClass(quartzJobConfig), quartzJobConfig.getId() + UUID.randomUUID().toString().replace("-",""), params);
                Thread.sleep(12000L);
                Thread.sleep(20000L);
            }
        }
@ -305,7 +309,7 @@ public class JobService {
                params.put("yesterday", getYesterday(0 - i));
                if (!StringUtils.isEmpty(quartzJobConfig.getJobClass())) {
                    quartzHelper.startNow(getRightClass(quartzJobConfig), quartzJobConfig.getId() + UUID.randomUUID().toString().replace("-",""), params);
                    Thread.sleep(12000L);
                    Thread.sleep(20000L);
                }
            }
    }
@ -372,4 +376,20 @@ public class JobService {
            productDataByOneDayWithId(getYesterday(i,startDate),id);
        }
    }
    public void startCleanCacheJob() throws  Exception {
        if(!quartzHelper.isExistJob(CacheCleanJob.jobKey)){
            quartzHelper.addJob(CacheCleanJob.class,CacheCleanJob.cron,CacheCleanJob.jobKey,new HashMap<>());
        }
    }
    public void stopCleanCacheJob()throws  Exception  {
        if(quartzHelper.isExistJob(CacheCleanJob.jobKey)){
            quartzHelper.removeJob(CacheCleanJob.jobKey);
        }
    }
    public void cleanCache() {
        CachePool.cleanAllCache();
    }
}

+ 0 - 1
patient-co-wlyy/src/main/java/com/yihu/wlyy/service/common/account/PatientService.java

@ -78,7 +78,6 @@ public class PatientService extends TokenService {
	 * @param patient
	 */
	public void updatePatientPwd(Patient patient) {
		EncodesUtil.entryptPassword(patient);
		patientDao.save(patient);
	}