浏览代码

统计代码提交

chenweida 8 年之前
父节点
当前提交
cb35917af3
共有 24 个文件被更改,包括 472 次插入388 次删除
  1. 2 7
      svr/svr-quota/pom.xml
  2. 0 2
      svr/svr-quota/src/main/java/com/yihu/jw/quota/SvrQuotaApplication.java
  3. 0 44
      svr/svr-quota/src/main/java/com/yihu/jw/quota/config/ElasticsearchConfig.java
  4. 0 13
      svr/svr-quota/src/main/java/com/yihu/jw/quota/dao/es/QuotaResultDao.java
  5. 55 1
      svr/svr-quota/src/main/java/com/yihu/jw/quota/etl/Contant.java
  6. 22 24
      svr/svr-quota/src/main/java/com/yihu/jw/quota/etl/compute/ComputeHelper.java
  7. 9 5
      svr/svr-quota/src/main/java/com/yihu/jw/quota/etl/compute/slave/SlaveCompute.java
  8. 12 0
      svr/svr-quota/src/main/java/com/yihu/jw/quota/etl/dimenconvert/Convert.java
  9. 73 0
      svr/svr-quota/src/main/java/com/yihu/jw/quota/etl/dimenconvert/ConvertHelper.java
  10. 51 0
      svr/svr-quota/src/main/java/com/yihu/jw/quota/etl/dimenconvert/wlyy/AgeConvert.java
  11. 1 1
      svr/svr-quota/src/main/java/com/yihu/jw/quota/etl/save/es/ElasticFactory.java
  12. 2 0
      svr/svr-quota/src/main/java/com/yihu/jw/quota/etl/save/es/ElastricSearchSave.java
  13. 19 3
      svr/svr-quota/src/main/java/com/yihu/jw/quota/job/QuotaJob.java
  14. 0 209
      svr/svr-quota/src/main/java/com/yihu/jw/quota/model/es/QuotaResult.java
  15. 9 0
      svr/svr-quota/src/main/java/com/yihu/jw/quota/model/jpa/TjQuota.java
  16. 52 1
      svr/svr-quota/src/main/java/com/yihu/jw/quota/model/jpa/dimension/TjQuotaDimensionSlave.java
  17. 0 38
      svr/svr-quota/src/main/java/com/yihu/jw/quota/service/QuotaService.java
  18. 80 0
      svr/svr-quota/src/main/java/com/yihu/jw/quota/util/IdCardUtil.java
  19. 0 1
      svr/svr-quota/src/main/java/com/yihu/jw/quota/util/SpringUtil.java
  20. 10 1
      svr/svr-quota/src/main/java/com/yihu/jw/quota/vo/FilterModel.java
  21. 62 0
      svr/svr-quota/src/main/java/com/yihu/jw/quota/vo/QuotaDimensionSlaveVO.java
  22. 9 0
      svr/svr-quota/src/main/java/com/yihu/jw/quota/vo/QuotaVo.java
  23. 4 28
      svr/svr-quota/src/main/java/com/yihu/jw/quota/vo/SaveModel.java
  24. 0 10
      svr/svr-quota/src/main/resources/application.yml

+ 2 - 7
svr/svr-quota/pom.xml

@ -58,14 +58,9 @@
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-elasticsearch</artifactId>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
        </dependency>
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>

+ 0 - 2
svr/svr-quota/src/main/java/com/yihu/jw/quota/SvrQuotaApplication.java

@ -3,7 +3,6 @@ package com.yihu.jw.quota;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
/**
@ -11,7 +10,6 @@ import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
 */
@SpringBootApplication
@EnableDiscoveryClient//服务注册到发现服务
@EnableElasticsearchRepositories(basePackages = "com.yihu.jw.quota.dao.es")
@EnableJpaRepositories(basePackages="com.yihu.jw.quota.dao.jpa")
public class SvrQuotaApplication {

+ 0 - 44
svr/svr-quota/src/main/java/com/yihu/jw/quota/config/ElasticsearchConfig.java

@ -1,44 +0,0 @@
package com.yihu.jw.quota.config;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.transport.TransportAddress;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
import java.net.InetAddress;
import java.net.UnknownHostException;
import static org.elasticsearch.node.NodeBuilder.nodeBuilder;
/**
 * Created by chenweida on 2017/5/23.
 */
@Configuration
public class ElasticsearchConfig {
    @Bean
    public ElasticsearchOperations elasticsearchTemplate() {
        ElasticsearchTemplate elasticsearchTemplate= new ElasticsearchTemplate(nodeBuilder().local(true).node().client());
        return elasticsearchTemplate;
    }
//    @Bean
//    public Client client() {
//        TransportClient client = TransportClient.builder().build();
//        try {
//            InetAddress[] i = InetAddress.getAllByName(hostname);
//            TransportAddress address = new InetSocketTransportAddress(i[0], port);
//
//            client.addTransportAddress(address);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//
//        return client;
//    }
}

+ 0 - 13
svr/svr-quota/src/main/java/com/yihu/jw/quota/dao/es/QuotaResultDao.java

@ -1,13 +0,0 @@
package com.yihu.jw.quota.dao.es;
import com.yihu.jw.quota.model.es.QuotaResult;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.data.jpa.repository.Query;
/**
 * Created by chenweida on 2017/5/23.
 */
public interface QuotaResultDao extends ElasticsearchRepository<QuotaResult, String> {
    @Query("{\"index\":{\"user\" :{\"field\" : {\"id\" : \" ?0\"}}}}")
    QuotaResult findById(String id);
}

+ 55 - 1
svr/svr-quota/src/main/java/com/yihu/jw/quota/etl/Contant.java

@ -1,5 +1,12 @@
package com.yihu.jw.quota.etl;
import com.yihu.jw.quota.model.jpa.dimension.TjQuotaDimensionSlave;
import com.yihu.jw.quota.vo.QuotaDimensionSlaveVO;
import org.springframework.beans.BeanUtils;
import java.util.ArrayList;
import java.util.List;
/**
 * Created by chenweida on 2017/6/1.
 */
@ -23,7 +30,6 @@ public class Contant {
        public static final String computeKey1 = "oneKey";
        public static final String computeKey2 = "senondKey";
    }
    /**
     * 运算常量
     */
@ -98,6 +104,10 @@ public class Contant {
        public static final String age = "2";//年龄段
    }
    public static class slave_dimension_key {
        public static final String one = "one";
        public static final String two = "two";
    }
    public static class save_status {
        public static final String success = "1";
        public static final String fail = "0";
@ -117,4 +127,48 @@ public class Contant {
        public static final String es = "3";
    }
    public static class convert{
        public static String level_age_1="1";
        public static String level_age_2="2";
        public static String level_age_3="3";
        public static String level_age_4="4";
        public static String level_age_5="5";
        public static String level_age_6="6";
        public static String level_age_1_name="0~6";
        public static String level_age_2_name="7~18";
        public static String level_age_3_name="19~30";
        public static String level_age_4_name="31~50";
        public static String level_age_5_name="51~65";
        public static String level_age_6_name=">65";
    }
    /**
     * 数据设置
     * @param quotaDimensionSlaves
     * @param key
     * @return
     */
    public static List<QuotaDimensionSlaveVO> init(List<TjQuotaDimensionSlave> quotaDimensionSlaves, String key) {
        List<QuotaDimensionSlaveVO> returnData = new ArrayList<>();
        if(Contant.slave_dimension_key.one.equals(key)){
            quotaDimensionSlaves.stream().forEach(one->{
                QuotaDimensionSlaveVO q=new QuotaDimensionSlaveVO();
                BeanUtils.copyProperties(one,q);
                q.setDictSql(one.getGetOneDictSql());
                q.setConvertClazz(one.getGetOneConvertClazz());
                returnData.add(q);
            });
        }else if(Contant.slave_dimension_key.two.equals(key)){
            quotaDimensionSlaves.stream().forEach(one->{
                QuotaDimensionSlaveVO q=new QuotaDimensionSlaveVO();
                BeanUtils.copyProperties(one,q);
                q.setDictSql(one.getGetTwoDictSql());
                q.setConvertClazz(one.getGetTwoConvertClazz());
                returnData.add(q);
            });
            return returnData;
        }
        return returnData;
    }
}

+ 22 - 24
svr/svr-quota/src/main/java/com/yihu/jw/quota/etl/compute/ComputeHelper.java

@ -8,10 +8,7 @@ import com.yihu.jw.quota.model.jpa.dimension.TjQuotaDimensionSlave;
import com.yihu.jw.quota.service.dimension.TjDimensionMainService;
import com.yihu.jw.quota.service.dimension.TjDimensionSlaveService;
import com.yihu.jw.quota.util.SpringUtil;
import com.yihu.jw.quota.vo.DataModel;
import com.yihu.jw.quota.vo.MainDimensionModel;
import com.yihu.jw.quota.vo.QuotaVO;
import com.yihu.jw.quota.vo.SaveModel;
import com.yihu.jw.quota.vo.*;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
@ -33,9 +30,9 @@ public class ComputeHelper {
    @Autowired
    private TjDimensionSlaveService dimensionSlaveService;
    public List<SaveModel> compute(Object dataModels, QuotaVO quotaVO,String timeLevel,String saasid,String startTime) {
    public List<SaveModel> compute(Object dataModels, QuotaVO quotaVO, String timeLevel, String saasid, String startTime) {
        //返回的list
        List<SaveModel> saveModels=new ArrayList<>();
        List<SaveModel> saveModels = new ArrayList<>();
        //只得到地址维度的所有主维度
        List<TjQuotaDimensionMain> quotaDimensionMains = dimensionMainService.findTjQuotaDimensionMainByQuotaIncudeAddress(quotaVO.getCode());
        //得到从维度
@ -43,15 +40,15 @@ public class ComputeHelper {
        if (Contant.compute.add.equals(quotaVO.getComputeType())) {
            //判断是否是累加计算 如果强转成list类型
            List<DataModel> dmList = (List<DataModel>) dataModels;
            Map<String, MainDimensionModel> one=getLastData(quotaVO, quotaDimensionMains, quotaDimensionSlaves, dmList);
            for(Map.Entry<String,MainDimensionModel> tjone:one.entrySet()){
                SaveModel saveModel=new SaveModel();
                BeanUtils.copyProperties(tjone.getValue(),saveModel);
            ;
            Map<String, MainDimensionModel> one = getLastData(quotaVO, quotaDimensionMains,Contant. init(quotaDimensionSlaves, Contant.slave_dimension_key.one), dmList);
            for (Map.Entry<String, MainDimensionModel> tjone : one.entrySet()) {
                SaveModel saveModel = new SaveModel();
                BeanUtils.copyProperties(tjone.getValue(), saveModel);
                saveModel.setTimeLevel(timeLevel);
                saveModel.setSaasId(saasid);
                saveModel.setQuotaDate(startTime);
                saveModel.setResult(tjone.getValue().getSlaveDimensionModels().size()+"");
                saveModel.setResult(tjone.getValue().getSlaveDimensionModels().size() + "");
                saveModels.add(saveModel);
            }
        } else if (Contant.compute.division.equals(quotaVO.getComputeType())) {
@ -61,41 +58,42 @@ public class ComputeHelper {
            List<DataModel> twoList = dmMap.get(Contant.extract.computeKey2);
            //计算出分子
            Map<String, MainDimensionModel> one=getLastData(quotaVO, quotaDimensionMains, quotaDimensionSlaves, oneList);
            Map<String, MainDimensionModel> one = getLastData(quotaVO, quotaDimensionMains, Contant. init(quotaDimensionSlaves, Contant.slave_dimension_key.one), oneList);
            //计算出分母
            Map<String, MainDimensionModel> tow=getLastData(quotaVO, quotaDimensionMains, quotaDimensionSlaves, twoList);
            Map<String, MainDimensionModel> tow = getLastData(quotaVO, quotaDimensionMains, Contant. init(quotaDimensionSlaves, Contant.slave_dimension_key.two), twoList);
            for(Map.Entry<String,MainDimensionModel> tjone:one.entrySet()){
                SaveModel saveModel=new SaveModel();
                BeanUtils.copyProperties(tjone.getValue(),saveModel);
            for (Map.Entry<String, MainDimensionModel> tjone : one.entrySet()) {
                SaveModel saveModel = new SaveModel();
                BeanUtils.copyProperties(tjone.getValue(), saveModel);
                saveModel.setTimeLevel(timeLevel);
                saveModel.setSaasId(saasid);
                saveModel.setQuotaDate(startTime);
                saveModel.setResult(new StringBuffer(tjone.getValue().getSlaveDimensionModels().size()+"/"+tow.get(tjone.getKey()).getSlaveDimensionModels()).toString());
                saveModel.setResult(new StringBuffer(tjone.getValue().getSlaveDimensionModels().size() + "/" + tow.get(tjone.getKey()).getSlaveDimensionModels()).toString());
                saveModels.add(saveModel);
            }
        }
        return saveModels;
    }
    private  Map<String, MainDimensionModel> getLastData(QuotaVO quotaVO, List<TjQuotaDimensionMain> quotaDimensionMains, List<TjQuotaDimensionSlave> quotaDimensionSlaves, List<DataModel> dmList) {
        Map<String, MainDimensionModel> mainData=new HashMap<>();
    private Map<String, MainDimensionModel> getLastData(QuotaVO quotaVO, List<TjQuotaDimensionMain> quotaDimensionMains, List<QuotaDimensionSlaveVO> quotaDimensionSlaves, List<DataModel> dmList) {
        Map<String, MainDimensionModel> mainData = new HashMap<>();
        //先统计主维度的数据-----地址维度
        quotaDimensionMains.stream().forEach(one->{
        quotaDimensionMains.stream().forEach(one -> {
            mainData.putAll(SpringUtil.getBean(AreaCompute.class).compute(
                    quotaVO,
                    dmList,//数据
                    one.getDitcSql(), //字典的sql语句
                    Contant.main_dimension_areaLevel.getAreaLevelByMainDimension(one.getType()) //维度转换
                    ));
            ));
        });
        //再统计从维度的数据
        return SpringUtil.getBean(SlaveCompute.class).compute(
                mainData,//数据
                quotaDimensionSlaves //字典的sql语句
                ) ;
        );
    }
}

+ 9 - 5
svr/svr-quota/src/main/java/com/yihu/jw/quota/etl/compute/slave/SlaveCompute.java

@ -3,6 +3,7 @@ package com.yihu.jw.quota.etl.compute.slave;
import com.yihu.jw.quota.model.jpa.dimension.TjQuotaDimensionSlave;
import com.yihu.jw.quota.vo.DictModel;
import com.yihu.jw.quota.vo.MainDimensionModel;
import com.yihu.jw.quota.vo.QuotaDimensionSlaveVO;
import com.yihu.jw.quota.vo.SlaveDimensionModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -30,15 +31,17 @@ public class SlaveCompute {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    public Map<String, MainDimensionModel> compute(Map<String, MainDimensionModel> mainData, List<TjQuotaDimensionSlave> quotaDimensionSlaves) {
    public Map<String, MainDimensionModel> compute(Map<String, MainDimensionModel> mainData,  List<QuotaDimensionSlaveVO> quotaDimensionSlaves) {
        try {
            //找出所有得到字典放到里面List里面去
            List<Map<String, String>> dictList = new ArrayList<>();
            for (int i = 0; i < quotaDimensionSlaves.size(); i++) {
                Map<String, String> dictMap = new HashMap<>();
                String dictSql=quotaDimensionSlaves.get(i).getDictSql();
                QuotaDimensionSlaveVO tjQuotaDimensionSlave= quotaDimensionSlaves.get(i);
                String dictSql=tjQuotaDimensionSlave.getDictSql();
                if(StringUtils.isEmpty(dictSql)){
                    logger.warn("slaveDict sql is null ,quotaID:"+quotaDimensionSlaves.get(i).getQuotaCode()+",quotaSlaveId:"+quotaDimensionSlaves.get(i).getId());
                    logger.warn("slaveDict sql is null ,quotaID:"+tjQuotaDimensionSlave.getQuotaCode()+",quotaSlaveId:"+tjQuotaDimensionSlave.getId());
                }
                List<DictModel> quotaDataSources = jdbcTemplate.query(dictSql, new BeanPropertyRowMapper(DictModel.class));
                quotaDataSources.stream().forEach(one -> {
@ -46,16 +49,17 @@ public class SlaveCompute {
                });
                dictList.add(dictMap);
            }
            //遍历从维度
            //递归遍历从维度
            for (int i = 0; i < quotaDimensionSlaves.size(); i++) {
                Map<String, MainDimensionModel> temp = new HashMap<>();
                //得到字典
                //得到维度对应的字典
                Map<String, String> dict = dictList.get(i);
                //遍历元数据
                for (Map.Entry<String, MainDimensionModel> oneMainDimensionModel : mainData.entrySet()) {
                    //遍历字典
                    for (Map.Entry<String, String> oneDict : dict.entrySet()) {
                        List<SlaveDimensionModel> slaveDimensionModels = oneMainDimensionModel.getValue().getSlaveDimensionModels();
                        //生成新的key
                        String key = new StringBuffer(oneMainDimensionModel.getKey() + "-" + oneDict.getKey()).toString();
                        List<SlaveDimensionModel> slaveDimensionModelTemps = new ArrayList<>();

+ 12 - 0
svr/svr-quota/src/main/java/com/yihu/jw/quota/etl/dimenconvert/Convert.java

@ -0,0 +1,12 @@
package com.yihu.jw.quota.etl.dimenconvert;
import com.yihu.jw.quota.vo.DataModel;
import java.util.List;
/**
 * Created by chenweida on 2017/6/5.
 */
public interface Convert {
    public List<DataModel> convert(List<DataModel> oneList, String slaveLevel);
}

+ 73 - 0
svr/svr-quota/src/main/java/com/yihu/jw/quota/etl/dimenconvert/ConvertHelper.java

@ -0,0 +1,73 @@
package com.yihu.jw.quota.etl.dimenconvert;
import com.yihu.jw.quota.etl.Contant;
import com.yihu.jw.quota.model.jpa.dimension.TjQuotaDimensionSlave;
import com.yihu.jw.quota.service.dimension.TjDimensionSlaveService;
import com.yihu.jw.quota.util.SpringUtil;
import com.yihu.jw.quota.vo.DataModel;
import com.yihu.jw.quota.vo.FilterModel;
import com.yihu.jw.quota.vo.QuotaDimensionSlaveVO;
import com.yihu.jw.quota.vo.QuotaVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.ClassArrayEditor;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.lang.reflect.Method;
import java.util.List;
import java.util.Map;
/**
 * Created by chenweida on 2017/6/5.
 * 维度的key值转换器
 */
@Component
@Scope("prototype")
public class ConvertHelper {
    @Autowired
    private TjDimensionSlaveService dimensionSlaveService;
    public FilterModel convert(FilterModel filterModel, QuotaVO quotaVO) throws Exception {
        //得到从维度
        List<TjQuotaDimensionSlave> tj = dimensionSlaveService.findTjQuotaDimensionSlaveByQuotaCode(quotaVO.getCode());
        for (int i = 0; i < tj.size(); i++) {
            TjQuotaDimensionSlave temp = tj.get(i);
            if (!StringUtils.isEmpty(temp)) {
                if (Contant.compute.add.equals(quotaVO.getComputeType())) {
                    //判断是否是累加计算 如果强转成list类型
                    List<DataModel> oneList = (List<DataModel>) filterModel.getData();
                    List<QuotaDimensionSlaveVO> oneQuotaDimensionSlaveVOList = Contant.init(tj, Contant.slave_dimension_key.one);
                    String clazz=oneQuotaDimensionSlaveVOList.get(i).getConvertClazz();
                    if(!StringUtils.isEmpty(clazz)){
                        //反射出对象并且调用convert方法去转换对应的slavekey
                        Object obj=Class.forName(clazz).newInstance();
                        Method method=obj.getClass().getMethod("convert",List.class,String.class);
                        method.invoke(obj,oneList,String.valueOf(i+1));
                    }
                } else if (Contant.compute.division.equals(quotaVO.getComputeType())) {
                    //判断是否是除法计算 如果强转成Map类型 key在Contant中
                    Map<String, List<DataModel>> dmMap = (Map<String, List<DataModel>>) filterModel.getData();
                    List<DataModel> oneList = dmMap.get(Contant.extract.computeKey1);
                    List<DataModel> twoList = dmMap.get(Contant.extract.computeKey2);
                    List<QuotaDimensionSlaveVO> oneQuotaDimensionSlaveVOList = Contant.init(tj, Contant.slave_dimension_key.one);
                    String clazzOne=oneQuotaDimensionSlaveVOList.get(i).getConvertClazz();
                    if(!StringUtils.isEmpty(clazzOne)){
                        Object obj=Class.forName(clazzOne);
                        Convert.class.getMethod("convert",List.class,String.class).invoke(obj,oneList,String.valueOf(i+1));
                    }
                    dmMap.put(Contant.extract.computeKey1,oneList);
                    List<QuotaDimensionSlaveVO> twoQuotaDimensionSlaveVOList = Contant.init(tj, Contant.slave_dimension_key.two);
                    String clazzTwo=twoQuotaDimensionSlaveVOList.get(i).getConvertClazz();
                    if(!StringUtils.isEmpty(clazzTwo)){
                        Object obj=Class.forName(clazzTwo);
                        Convert.class.getMethod("convert",List.class,String.class).invoke(obj,twoList,String.valueOf(i+1));
                        dmMap.put(Contant.extract.computeKey2,twoList);
                    }
                }
            }
        }
        return filterModel;
    }
}

+ 51 - 0
svr/svr-quota/src/main/java/com/yihu/jw/quota/etl/dimenconvert/wlyy/AgeConvert.java

@ -0,0 +1,51 @@
package com.yihu.jw.quota.etl.dimenconvert.wlyy;
import com.yihu.jw.quota.etl.Contant;
import com.yihu.jw.quota.etl.dimenconvert.Convert;
import com.yihu.jw.quota.util.IdCardUtil;
import com.yihu.jw.quota.vo.DataModel;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import java.util.List;
/**
 * Created by chenweida on 2017/6/5.
 */
public class AgeConvert implements Convert {
    /**
     * @param oneList    数据
     * @param slaveLevel 从1开始
     * @return
     */
    public List<DataModel> convert(List oneList, String slaveLevel) {
        oneList.stream().forEach(one -> {
            try {
                Object value = DataModel.class.getMethod("getSlaveKey" + slaveLevel).invoke(one);
                Integer age= IdCardUtil.getAgeForIdcard(String.valueOf(value));
                String key = getAgeCode(age);
                DataModel.class.getMethod("setSlaveKey" + slaveLevel, String.class).invoke(one, key);
            } catch (Exception e) {
                e.printStackTrace();
            }
        });
        return oneList;
    }
    public String getAgeCode(Integer age) {
        if (age <= 6) {
            return Contant.convert.level_age_1;
        } else if (age >= 7 && age <= 18) {
            return Contant.convert.level_age_2;
        } else if (age >= 19 && age <= 30) {
            return Contant.convert.level_age_3;
        } else if (age >= 31 && age <= 50) {
            return Contant.convert.level_age_4;
        } else if (age >= 51 && age <= 65) {
            return Contant.convert.level_age_5;
        } else {
            return Contant.convert.level_age_6;
        }
    }
}

+ 1 - 1
svr/svr-quota/src/main/java/com/yihu/jw/quota/etl/save/es/ElasticFactory.java

@ -23,7 +23,7 @@ public class ElasticFactory {
        factory.setHttpClientConfig(new HttpClientConfig
                .Builder(hostAddress)
                .multiThreaded(true)
                .discoveryEnabled(true)
                .readTimeout(30)
                .build());
        return factory.getObject();
    }

+ 2 - 0
svr/svr-quota/src/main/java/com/yihu/jw/quota/etl/save/es/ElastricSearchSave.java

@ -13,6 +13,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
/**
@ -37,6 +38,7 @@ public class ElastricSearchSave {
            Bulk.Builder bulk = new Bulk.Builder().defaultIndex(esConfig.getIndex()).defaultType(esConfig.getType());
            for (SaveModel obj : sms) {
                obj.setCreateTime(new Date());
                Index index = new Index.Builder(obj).build();
                bulk.addAction(index);
            }

+ 19 - 3
svr/svr-quota/src/main/java/com/yihu/jw/quota/job/QuotaJob.java

@ -3,6 +3,7 @@ package com.yihu.jw.quota.job;
import com.yihu.jw.quota.dao.jpa.TjQuotaLogDao;
import com.yihu.jw.quota.etl.Contant;
import com.yihu.jw.quota.etl.compute.ComputeHelper;
import com.yihu.jw.quota.etl.dimenconvert.ConvertHelper;
import com.yihu.jw.quota.etl.extract.ExtractHelper;
import com.yihu.jw.quota.etl.filter.FilterHelper;
import com.yihu.jw.quota.etl.save.SaveHelper;
@ -119,15 +120,21 @@ public class QuotaJob implements Job {
            tjQuotaLog.setSaasId(saasid);
            tjQuotaLog.setStartTime(new Date());
            JobLogModel jobLogModel = new JobLogModel();
            //抽取数据 如果是累加就是 List<DataModel>  如果是相除 Map<String,List<DataModel>>
            Object dataModels = extract();
            //根据规则过滤数据
            FilterModel filterModel = filter(dataModels);
            jobLogModel.setErrorModels(filterModel.getErrorModels());
            //从维度的key转换
            filterModel = convert(filterModel);
            //统计数据
            List<SaveModel> sms = compute(filterModel.getData());
            //保存数据
            Boolean success = saveDate(sms);
            tjQuotaLog.setStatus(success ? Contant.save_status.success : Contant.save_status.fail);
            tjQuotaLog.setEndTime(new Date());
            tjQuotaLog.setContent(JSONObject.fromObject(jobLogModel).toString());
@ -136,6 +143,15 @@ public class QuotaJob implements Job {
        }
    }
    private FilterModel convert(FilterModel dataModels) {
        try{
            return SpringUtil.getBean(ConvertHelper.class).convert(dataModels,quotaVO);
        }catch (Exception e){
            logger.error("convert error:" + e.getMessage());
        }
        return null;
    }
    /**
     * 保存数据
     *
@ -167,12 +183,12 @@ public class QuotaJob implements Job {
    /**
     * 过滤数据
     *
     * @param dataModels
     * @param filterModel
     * @return
     */
    private FilterModel filter(Object dataModels) {
    private FilterModel filter(Object filterModel) {
        try {
            return SpringUtil.getBean(FilterHelper.class).filter(dataModels, quotaVO);
            return SpringUtil.getBean(FilterHelper.class).filter(filterModel,quotaVO);
        } catch (Exception e) {
            logger.error("filter error:" + e.getMessage());
        }

+ 0 - 209
svr/svr-quota/src/main/java/com/yihu/jw/quota/model/es/QuotaResult.java

@ -1,209 +0,0 @@
package com.yihu.jw.quota.model.es;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.*;
import java.util.Date;
/**
 * QuotaResult entity. @author MyEclipse Persistence Tools
 */
@Document(indexName = "index", type = "user", shards = 5, replicas = 0, refreshInterval = "-1")
public class QuotaResult implements java.io.Serializable {
    @Id
    private String id;
    private String quotaDate;//统计时间
    private String quatoCode;//指标code
    private String quatoName;//指标name
    private String result;//统计结果
    private String del;//1: 正常 0: 删除
    private String level1Type;//等级 1:团队 2社区机构 3区级 4市级
    private String level2Type;//如果有二级维度那么这个存的是二级维度的code 例如二级维度是性别 那么这个存 1
    private String level2TypeName;//如果有二级维度那么这个存的是二级维度的code 例如二级维度是性别 那么这个存 男
    private String level3Type;//如果有三级维度那么这个存的是三级维度的code 例如三级维度是疾病 那么这个存 1
    private String level3TypeName;//如果有三级维度那么这个存的是三级维度的code 例如三级维度是疾病 那么这个存 高血压
    private String city;//市
    private String cityName;//市级名称
    private String town;//区级
    private String townName;//区级名称
    private String orgCode;//机构code
    private String orgName;//机构名称
    private String qkdoctorName;//全科医生名称 --现在是团队名称
    private String qkdoctorCode;//全科医生code --现在是团队code
    private String qkdoctorJobName;//全科医生职称   用于检验统计线程判断指标是否需要重新生成  等于 1 的时候是不需要
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyyMMdd'T'HHmmss.SSS'Z'")
    @Field(type = FieldType.Date, format = DateFormat.basic_date_time, index = FieldIndex.not_analyzed)
    @CreatedDate
    private Date createTime;//创建时间
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getQuotaDate() {
        return quotaDate;
    }
    public void setQuotaDate(String quotaDate) {
        this.quotaDate = quotaDate;
    }
    public String getQuatoCode() {
        return quatoCode;
    }
    public void setQuatoCode(String quatoCode) {
        this.quatoCode = quatoCode;
    }
    public String getQuatoName() {
        return quatoName;
    }
    public void setQuatoName(String quatoName) {
        this.quatoName = quatoName;
    }
    public String getResult() {
        return result;
    }
    public void setResult(String result) {
        this.result = result;
    }
    public String getDel() {
        return del;
    }
    public void setDel(String del) {
        this.del = del;
    }
    public String getLevel1Type() {
        return level1Type;
    }
    public void setLevel1Type(String level1Type) {
        this.level1Type = level1Type;
    }
    public String getLevel2Type() {
        return level2Type;
    }
    public void setLevel2Type(String level2Type) {
        this.level2Type = level2Type;
    }
    public String getLevel2TypeName() {
        return level2TypeName;
    }
    public void setLevel2TypeName(String level2TypeName) {
        this.level2TypeName = level2TypeName;
    }
    public String getLevel3Type() {
        return level3Type;
    }
    public void setLevel3Type(String level3Type) {
        this.level3Type = level3Type;
    }
    public String getLevel3TypeName() {
        return level3TypeName;
    }
    public void setLevel3TypeName(String level3TypeName) {
        this.level3TypeName = level3TypeName;
    }
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    public String getCityName() {
        return cityName;
    }
    public void setCityName(String cityName) {
        this.cityName = cityName;
    }
    public String getTown() {
        return town;
    }
    public void setTown(String town) {
        this.town = town;
    }
    public String getTownName() {
        return townName;
    }
    public void setTownName(String townName) {
        this.townName = townName;
    }
    public String getOrgCode() {
        return orgCode;
    }
    public void setOrgCode(String orgCode) {
        this.orgCode = orgCode;
    }
    public String getOrgName() {
        return orgName;
    }
    public void setOrgName(String orgName) {
        this.orgName = orgName;
    }
    public String getQkdoctorName() {
        return qkdoctorName;
    }
    public void setQkdoctorName(String qkdoctorName) {
        this.qkdoctorName = qkdoctorName;
    }
    public String getQkdoctorCode() {
        return qkdoctorCode;
    }
    public void setQkdoctorCode(String qkdoctorCode) {
        this.qkdoctorCode = qkdoctorCode;
    }
    public String getQkdoctorJobName() {
        return qkdoctorJobName;
    }
    public void setQkdoctorJobName(String qkdoctorJobName) {
        this.qkdoctorJobName = qkdoctorJobName;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
}

+ 9 - 0
svr/svr-quota/src/main/java/com/yihu/jw/quota/model/jpa/TjQuota.java

@ -18,6 +18,7 @@ public class TjQuota implements java.io.Serializable {
	private String code;
	private String compute; //关联表tj_compute code
	private String name;
	private String cron;//quartz时间表达式
	private String jobClazz; //类class
	private Date createTime;
	private String createUser;
@ -176,4 +177,12 @@ public class TjQuota implements java.io.Serializable {
	public void setCompute(String compute) {
		this.compute = compute;
	}
	public String getCron() {
		return cron;
	}
	public void setCron(String cron) {
		this.cron = cron;
	}
}

+ 52 - 1
svr/svr-quota/src/main/java/com/yihu/jw/quota/model/jpa/dimension/TjQuotaDimensionSlave.java

@ -1,5 +1,8 @@
package com.yihu.jw.quota.model.jpa.dimension;// default package
import com.yihu.jw.quota.etl.Contant;
import net.sf.json.JSONObject;
import javax.persistence.*;
import static javax.persistence.GenerationType.IDENTITY;
@ -16,9 +19,16 @@ public class TjQuotaDimensionSlave implements java.io.Serializable {
	private Integer id;
	private String quotaCode;
	private String slaveCode;
	private String dictSql;
	private String dictSql;//字典的sql
	private String convertClazz;//转换的类
	private String type;
	private String getOneDictSql;//得到分子的
	private String getTwoDictSql;//得到分母的
	private String getOneConvertClazz;//得到分子的
	private String getTwoConvertClazz;//得到分母的
	// Constructors
@ -78,4 +88,45 @@ public class TjQuotaDimensionSlave implements java.io.Serializable {
	public void setType(String type) {
		this.type = type;
	}
	public String getConvertClazz() {
		return convertClazz;
	}
	public void setConvertClazz(String convertClazz) {
		this.convertClazz = convertClazz;
	}
	@Transient
	public String getGetOneDictSql() {
		return JSONObject.fromObject(dictSql).getString(Contant.slave_dimension_key.one);
	}
	public void setGetOneDictSql(String getOneDictSql) {
		this.getOneDictSql = getOneDictSql;
	}
	@Transient
	public String getGetTwoDictSql() {
		return JSONObject.fromObject(dictSql).getString(Contant.slave_dimension_key.two);
	}
	public void setGetTwoDictSql(String getTwoDictSql) {
		this.getTwoDictSql = getTwoDictSql;
	}
	@Transient
	public String getGetOneConvertClazz() {
		return JSONObject.fromObject(convertClazz).getString(Contant.slave_dimension_key.one);
	}
	public void setGetOneConvertClazz(String getOneConvertClazz) {
		this.getOneConvertClazz = getOneConvertClazz;
	}
	@Transient
	public String getGetTwoConvertClazz() {
		return JSONObject.fromObject(convertClazz).getString(Contant.slave_dimension_key.two);
	}
	public void setGetTwoConvertClazz(String getTwoConvertClazz) {
		this.getTwoConvertClazz = getTwoConvertClazz;
	}
}

+ 0 - 38
svr/svr-quota/src/main/java/com/yihu/jw/quota/service/QuotaService.java

@ -1,38 +0,0 @@
package com.yihu.jw.quota.service;
import com.yihu.jw.quota.dao.es.QuotaResultDao;
import com.yihu.jw.quota.model.es.QuotaResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
/**
 * Created by chenweida on 2017/5/23.
 */
@Service
public class QuotaService {
    @Autowired
    private QuotaResultDao quotaResultDao;
    public QuotaResult findById(String id) {
        QuotaResult quotaResult=quotaResultDao.findById(id);
        return quotaResult;
    }
    public QuotaResult findBy_Id(String id) {
        QuotaResult quotaResult=quotaResultDao.findOne(id);
        return quotaResult;
    }
    public String save() {
        QuotaResult wlyyQuotaResult=new QuotaResult();
        wlyyQuotaResult.setDel("1");
        wlyyQuotaResult.setOrgCode("orgtest");
        wlyyQuotaResult.setOrgName("机构测试");
        wlyyQuotaResult.setCreateTime(new Date());
        quotaResultDao.save(wlyyQuotaResult);
        return null;
    }
}

+ 80 - 0
svr/svr-quota/src/main/java/com/yihu/jw/quota/util/IdCardUtil.java

@ -0,0 +1,80 @@
package com.yihu.jw.quota.util;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
/**
 * Created by Administrator on 2016.08.17.
 * 身份证工具类
 */
public class IdCardUtil {
    /**
     * 根据身份证的号码算出当前身份证持有者的年龄
     *
     * @param
     * @throws Exception
     */
    public static int getAgeForIdcard(String idcard) {
        try {
            int age = 0;
            if (org.springframework.util.StringUtils.isEmpty(idcard)) {
                return age;
            }
            String birth = "";
            if (idcard.length() == 18) {
                birth = idcard.substring(6, 14);
            } else if (idcard.length() == 15) {
                birth = "19" + idcard.substring(6, 12);
            } else {
                return 0;
            }
            int year = Integer.valueOf(birth.substring(0, 4));
            int month = Integer.valueOf(birth.substring(4, 6));
            int day = Integer.valueOf(birth.substring(6));
            Calendar cal = Calendar.getInstance();
            age = cal.get(Calendar.YEAR) - year;
            //周岁计算
            if (cal.get(Calendar.MONTH) < (month - 1) || (cal.get(Calendar.MONTH) == (month - 1) && cal.get(Calendar.DATE) < day)) {
                age--;
            }
            return age;
        } catch (Exception e) {
            return 0;
        }
    }
    /**
     * 身份证提取出身日期
     *
     * @param card
     * @return
     * @throws Exception
     */
    public static Date getBirthdayForIdcard(String card)
            throws Exception {
        Date b = null;
        if (card.length() == 18) {
            String year = card.substring(6).substring(0, 4);// 得到年份
            String yue = card.substring(10).substring(0, 2);// 得到月份
            String ri = card.substring(12).substring(0, 2);// 得到日
            // String day=CardCode.substring(12).substring(0,2);//得到日
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            b = format.parse(year + "-" + yue + "-" + ri);
        } else if (card.length() == 15) {
            String uyear = "19" + card.substring(6, 8);// 年份
            String uyue = card.substring(8, 10);// 月份
            String uri = card.substring(10, 12);// 得到日
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
            b = format.parse(uyear + "-" + uyue + "-" + uri);
        }
        return b;
    }
}

+ 0 - 1
svr/svr-quota/src/main/java/com/yihu/jw/quota/util/SpringUtil.java

@ -24,7 +24,6 @@ public class SpringUtil implements ApplicationContextAware {
    public static ApplicationContext
    getApplicationContext() {
        return applicationContext;
    }

+ 10 - 1
svr/svr-quota/src/main/java/com/yihu/jw/quota/vo/FilterModel.java

@ -8,7 +8,8 @@ import java.util.List;
 */
public class FilterModel {
    private Object data;//可能是list 也可能是map
    private List<ErrModel> ErrorModels =new ArrayList<>();
    private List<ErrModel> ErrorModels =new ArrayList<>();//
    private List<ErrModel> slaveKeyChange=new ArrayList<>();
    public FilterModel(Object data) {
        this.data = data;
@ -30,4 +31,12 @@ public class FilterModel {
    public void setErrorModels(List<ErrModel> ErrorModels) {
        this.ErrorModels = ErrorModels;
    }
    public List<ErrModel> getSlaveKeyChange() {
        return slaveKeyChange;
    }
    public void setSlaveKeyChange(List<ErrModel> slaveKeyChange) {
        this.slaveKeyChange = slaveKeyChange;
    }
}

+ 62 - 0
svr/svr-quota/src/main/java/com/yihu/jw/quota/vo/QuotaDimensionSlaveVO.java

@ -0,0 +1,62 @@
package com.yihu.jw.quota.vo;
/**
 * Created by chenweida on 2017/6/5.
 */
public class QuotaDimensionSlaveVO {
    private Integer id;
    private String quotaCode;
    private String slaveCode;
    private String dictSql;//字典的sql
    private String convertClazz;//转换的类
    private String type;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getQuotaCode() {
        return quotaCode;
    }
    public void setQuotaCode(String quotaCode) {
        this.quotaCode = quotaCode;
    }
    public String getSlaveCode() {
        return slaveCode;
    }
    public void setSlaveCode(String slaveCode) {
        this.slaveCode = slaveCode;
    }
    public String getDictSql() {
        return dictSql;
    }
    public void setDictSql(String dictSql) {
        this.dictSql = dictSql;
    }
    public String getConvertClazz() {
        return convertClazz;
    }
    public void setConvertClazz(String convertClazz) {
        this.convertClazz = convertClazz;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
}

+ 9 - 0
svr/svr-quota/src/main/java/com/yihu/jw/quota/vo/QuotaVo.java

@ -12,6 +12,7 @@ public class QuotaVO implements Serializable{
    private String compute;
    private String computeType;//计算类型
    private String name;
    private String cron;//quartz时间表达式
    private String jobClazz;
    private Date createTime;
    private String createUser;
@ -154,4 +155,12 @@ public class QuotaVO implements Serializable{
                ", remark='" + remark + '\'' +
                '}';
    }
    public String getCron() {
        return cron;
    }
    public void setCron(String cron) {
        this.cron = cron;
    }
}

+ 4 - 28
svr/svr-quota/src/main/java/com/yihu/jw/quota/vo/SaveModel.java

@ -1,94 +1,68 @@
package com.yihu.jw.quota.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.searchbox.annotations.JestId;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.*;
import java.util.Date;
/**
 * Created by chenweida on 2017/6/1.
 */
@Document(indexName = "index_sex", type = "sex", shards = 2)
public class SaveModel {
    @Id
    @JestId
    private String id;
    @Field(type = FieldType.String, index = FieldIndex.not_analyzed)
    private String saasId;//saasId
    @Field(type = FieldType.String, index = FieldIndex.not_analyzed)
    private String quotaCode;//指标code
    @Field(type = FieldType.String, index = FieldIndex.not_analyzed)
    private String quotaDate;//统计时间
    @Field(type = FieldType.String, index = FieldIndex.not_analyzed)
    private String province;//省级代码 350000
    @Field(type = FieldType.String, index = FieldIndex.analyzed)
    private String provinceName;//省名字
    @Field(type = FieldType.String, index = FieldIndex.not_analyzed)
    private String city;//城市代码 350200
    @Field(type = FieldType.String, index = FieldIndex.analyzed)
    private String cityName;//
    @Field(type = FieldType.String, index = FieldIndex.not_analyzed)
    private String town;//区代码 350206
    @Field(type = FieldType.String, index = FieldIndex.analyzed)
    private String townName;//
    @Field(type = FieldType.String, index = FieldIndex.not_analyzed)
    private String hospital;//机构code
    @Field(type = FieldType.String, index = FieldIndex.analyzed)
    private String hospitalName;//
    @Field(type = FieldType.String, index = FieldIndex.not_analyzed)
    private String team;//团队的code
    @Field(type = FieldType.String, index = FieldIndex.analyzed)
    private String teamName;//
    @Field(type = FieldType.String, index = FieldIndex.not_analyzed)
    private String slaveKey1;//从维度  1级维度
    @Field(type = FieldType.String, index = FieldIndex.analyzed)
    private String slaveKey1Name;
    @Field(type = FieldType.String, index = FieldIndex.not_analyzed)
    private String slaveKey2;//从维度  2级维度
    @Field(type = FieldType.String, index = FieldIndex.analyzed)
    private String slaveKey2Name;
    @Field(type = FieldType.String, index = FieldIndex.not_analyzed)
    private String slaveKey3;//从维度  3级维度
    @Field(type = FieldType.String, index = FieldIndex.analyzed)
    private String slaveKey3Name;
    @Field(type = FieldType.String, index = FieldIndex.not_analyzed)
    private String slaveKey4;//从维度  4级维度
    @Field(type = FieldType.String, index = FieldIndex.analyzed)
    private String slaveKey4Name;
    @Field(type = FieldType.String, index = FieldIndex.not_analyzed)
    private String result;//统计结果
    @Field(type = FieldType.String, index = FieldIndex.not_analyzed)
    private String timeLevel;// 1 日 2 周 3 月 4 年
    @Field(type = FieldType.String, index = FieldIndex.not_analyzed)
    private String areaLevel;// 1 省 2 市 3 区县 4 机构 5团队
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyyMMdd'T'HHmmss.SSS'Z'")
    @Field(type = FieldType.Date, format = DateFormat.basic_date_time, index = FieldIndex.not_analyzed)
    @CreatedDate
    private Date createTime;//创建时间
@ -299,4 +273,6 @@ public class SaveModel {
    public void setId(String id) {
        this.id = id;
    }
}

+ 0 - 10
svr/svr-quota/src/main/resources/application.yml

@ -2,16 +2,6 @@
spring:
  application:
    name:  svr-quota  ##注册到发现服务的id 如果id一样 eurika会自动做负载
  data:
    elasticsearch:
      repositories:
        enabled: true
  elasticsearch:
      jest:
        proxy:
          host: 172.19.103.45
          port: 9300
---
spring: