浏览代码

es mapping

jkzlzhoujie 6 年之前
父节点
当前提交
28435622fb

+ 56 - 33
src/main/java/com/yihu/quota/controller/CubeController.java

@ -31,7 +31,7 @@ import java.util.List;
 * Created by janseny on 2018/9/19.
 */
@RestController
@RequestMapping(ApiVersion.Version1_0)
@RequestMapping(ApiVersion.Version1_0 + "/cube")
@Api(description = "OLAP 多维数据集 控制入口")
public class CubeController  extends BaseController {
@ -41,10 +41,11 @@ public class CubeController  extends BaseController {
    private CubeMappingService cubeMappingService;
    @Autowired
    private CubeMemberMappingService cubeMemberMappingService;
    @Autowired
    private ElasticSearchHandler esHandler;
    @ApiOperation(value = "创建多维数据集ES的mapping结构 ")
    @RequestMapping(value = "tj/getQuotaReport", method = RequestMethod.GET)
    @RequestMapping(value = "/elasticSearchMapping", method = RequestMethod.GET)
    public Envelop getQuotaReport(
            @ApiParam(name = "id", value = "多维数据集ID", required = true)
            @RequestParam(value = "id", required = true) int id
@ -61,48 +62,70 @@ public class CubeController  extends BaseController {
            if(cube.getIndexType() != null){
                type = cube.getIndexType();
            }
            boolean isExist =  esHandler.isExistsIndex(index,esHandler.getTransportClient());
            if(isExist){
                envelop.setSuccessFlg(false);
                envelop.setErrorMsg("索引已存在");
                return envelop;
            }
            // 数据集维度
            List<CubeMappingModel> cubeMappingModels = cubeMappingService.findCubeMappingModels(id);
            for(CubeMappingModel cubeMappingModel : cubeMappingModels){
                FieldInfo fieldInfo =  new FieldInfo();
                String fieldName = cubeMappingModel.getDimensionCode();
                fieldInfo.setField(fieldName);
                fieldInfo.setDataType(cubeMappingModel.getDataType());
                if(StringUtils.isNotEmpty(cubeMappingModel.getDict())){
                    //数据字典 扩展
                    List<FieldInfo> childDictFieldiList = new ArrayList<>();
                    FieldInfo childFieldCode =  new FieldInfo();
                    childFieldCode.setField(fieldName + "Name");
                    childFieldCode.setDataType("String");
                    FieldInfo childFieldName =  new FieldInfo();
                    childFieldName.setField(fieldName + "Code");
                    childFieldName.setDataType("String");
                    childDictFieldiList.add(childFieldCode);
                    childDictFieldiList.add(childFieldName);
                    fieldInfo.setFieldInfos(childDictFieldiList);
                }else{
                    // 子成员 扩展
                    List<CubeMemberMappingModel>  cubeMemberMappingModels = cubeMemberMappingService.findCubeMappingModels(cubeMappingModel.getId());
                    if(cubeMemberMappingModels != null){
                        List<FieldInfo> childFieldiList = new ArrayList<>();
                        for(CubeMemberMappingModel cubeMemberMappingModel : cubeMemberMappingModels){
                            FieldInfo childFieldInfo =  new FieldInfo();
                            childFieldInfo.setField(cubeMemberMappingModel.getDimensionCode());
                            childFieldInfo.setDataType(cubeMemberMappingModel.getDataType());
                            childFieldiList.add(childFieldInfo);
                String fieldCode = cubeMappingModel.getDimensionCode();
                fieldInfo.setField(fieldCode);
                // 子成员 扩展
                List<CubeMemberMappingModel>  cubeMemberMappingModels = cubeMemberMappingService.findCubeMappingModels(cubeMappingModel.getId());
                if(cubeMemberMappingModels != null){
                    //如果存在子集设置 子集属性
                    if(cubeMappingModel.getChildSaveType() != null){
                        if(cubeMappingModel.getChildSaveType().equals(1)){
                            fieldInfo.setDataType("object");
                        }else if(cubeMappingModel.getChildSaveType().equals(2)){
                            fieldInfo.setDataType("nested");
                        }
                        fieldInfo.setFieldInfos(childFieldiList);
                    }
                    List<FieldInfo> childFieldiList = new ArrayList<>();
                    for(CubeMemberMappingModel cubeMemberMappingModel : cubeMemberMappingModels){
                        FieldInfo childFieldInfo =  new FieldInfo();
                        childFieldInfo.setField(cubeMemberMappingModel.getDimensionCode());
                        childFieldInfo.setDataType(cubeMemberMappingModel.getDataType());
                        childFieldiList.add(childFieldInfo);
                        if(StringUtils.isNotEmpty(cubeMemberMappingModel.getDict())){
                            //子集 的 数据字典 扩展
                            FieldInfo dictFieldCode =  new FieldInfo();
                            dictFieldCode.setField(fieldCode + "Name");
                            dictFieldCode.setDataType("String");
                            FieldInfo dictFieldName =  new FieldInfo();
                            dictFieldName.setField(fieldCode + "Code");
                            dictFieldName.setDataType("String");
                            childFieldiList.add(dictFieldCode);
                            childFieldiList.add(dictFieldName);
                        }
                    }
                    fieldInfo.setFieldInfos(childFieldiList);
                }else {
                    fieldInfo.setDataType(cubeMappingModel.getDataType());
                }
                fieldInfoList.add(fieldInfo);
                if(StringUtils.isNotEmpty(cubeMappingModel.getDict())){
                    //数据字典 扩展
                    FieldInfo dictFieldCode =  new FieldInfo();
                    dictFieldCode.setField(fieldCode + "Name");
                    dictFieldCode.setDataType("String");
                    FieldInfo dictFieldName =  new FieldInfo();
                    dictFieldName.setField(fieldCode + "Code");
                    dictFieldName.setDataType("String");
                    fieldInfoList.add(dictFieldCode);
                    fieldInfoList.add(dictFieldName);
                }
            }
            ElasticSearchHandler esHandler = new ElasticSearchHandler();
            TransportClient client = esHandler.getTransportClient();
            esHandler.createIndexAndCreateMapping(index, type, fieldInfoList, client);
            esHandler.createIndexAndCreateMapping(index, type, fieldInfoList, esHandler.getTransportClient());
            envelop.setSuccessFlg(true);
            return envelop;
        } catch (Exception e) {
            e.printStackTrace();
            invalidUserException(e, -1, "创建失败:" + e.getMessage());
        }
        envelop.setSuccessFlg(false);

+ 5 - 5
src/main/java/com/yihu/quota/model/cube/CubeMapping.java

@ -19,7 +19,7 @@ public class CubeMapping {
    private Integer dimensionId;      //维度ID
    private String dimensionCode;    //维度编码
    private String fieldName;        //字段名称
    private Integer saveType;        //成员保存时映射格式类型: 1 列 2 对象 3 子集
    private Integer childSaveType; //子集映射格式类型 1 对象 2 子集
    private String childPrimaryKay; //子集唯一字段
    @Id
@ -73,12 +73,12 @@ public class CubeMapping {
        this.fieldName = fieldName;
    }
    public Integer getSaveType() {
        return saveType;
    public Integer getChildSaveType() {
        return childSaveType;
    }
    public void setSaveType(Integer saveType) {
        this.saveType = saveType;
    public void setChildSaveType(Integer childSaveType) {
        this.childSaveType = childSaveType;
    }
    public String getChildPrimaryKay() {

+ 13 - 0
src/main/java/com/yihu/quota/model/dimension/DimensionMember.java

@ -40,6 +40,11 @@ public class DimensionMember {
     */
    private String dataType;
    /**
     * 数据字典
     */
    private String dict;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
@ -88,6 +93,14 @@ public class DimensionMember {
        return dataType;
    }
    public String getDict() {
        return dict;
    }
    public void setDict(String dict) {
        this.dict = dict;
    }
    public void setDataType(String dataType) {
        this.dataType = dataType;
    }

+ 1 - 1
src/main/java/com/yihu/quota/service/cube/CubeMappingService.java

@ -43,7 +43,7 @@ public class CubeMappingService extends BaseJpaService<CubeMapping, CubeMappingD
    public List<CubeMappingModel> findCubeMappingModels(int cubeId) {
        String sql = "SELECT ocm.*,od.data_type,od.dict from olap_cube_mapping ocm ,olap_dimension od " +
                " where ocm.dimension_id = od.id AND ocm.id = ? order by ocm.id asc";
                " where ocm.dimension_id = od.id AND ocm.cube_id = ? order by ocm.id asc";
        List<CubeMappingModel> cubeMappingModels = jdbcTemplate.query(sql, new BeanPropertyRowMapper(CubeMappingModel.class), cubeId);
        return cubeMappingModels;
    }

+ 1 - 1
src/main/java/com/yihu/quota/service/cube/CubeMemberMappingService.java

@ -39,7 +39,7 @@ public class CubeMemberMappingService extends BaseJpaService<CubeMemberMapping,
    public List<CubeMemberMappingModel> findCubeMappingModels(Integer id) {
        String sql = "SELECT ocmm.*,odm.data_type from olap_cube_member_mapping ocmm ,olap_dimension_member odm" +
                " where ocmm.dimension_member_id = odm.id order by ocmm.id asc";
                " where ocmm.dimension_member_id = odm.id  AND ocmm.cube_mapping_id = ?  order by ocmm.id asc";
        List<CubeMemberMappingModel> cubeMemberMappingModels = jdbcTemplate.query(sql, new BeanPropertyRowMapper(CubeMemberMappingModel.class), id);
        return cubeMemberMappingModels;
    }

+ 13 - 5
src/main/java/com/yihu/quota/util/ElasticSearchHandler.java

@ -18,19 +18,19 @@ import org.elasticsearch.common.xcontent.XContentFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
 * Created by janseny on 2018/9/17.
 */
@Configuration
@Component
public class ElasticSearchHandler {
@ -76,6 +76,7 @@ public class ElasticSearchHandler {
    public synchronized void addNode(String nodeName,TransportClient client) {
        try {
            client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(nodeName), 9300));
            close(client);
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
@ -89,6 +90,7 @@ public class ElasticSearchHandler {
    public synchronized void removeNode(String name,TransportClient client) {
        try {
            client.removeTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(name), 9300));
            close(client);
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
@ -103,6 +105,7 @@ public class ElasticSearchHandler {
    public void createIndex(String index,TransportClient client) {
        CreateIndexRequest request = new CreateIndexRequest(index);
        client.admin().indices().create(request);
        close(client);
    }
    /**
@ -113,6 +116,7 @@ public class ElasticSearchHandler {
    public boolean isExistsIndex(String indexName,TransportClient client){
        IndicesExistsResponse response =  client.admin().indices().exists(
                new IndicesExistsRequest().indices(new String[]{indexName})).actionGet();
        close(client);
        return response.isExists();
    }
@ -125,7 +129,9 @@ public class ElasticSearchHandler {
    public boolean isExistsType(String indexName,String indexType,TransportClient client){
        TypesExistsResponse response = client.admin().indices()
                .typesExists(new TypesExistsRequest(new String[]{indexName}, indexType)).actionGet();
        return response.isExists();
        boolean isEXist = response.isExists();
        close(client);
        return isEXist;
    }
    /**
@ -138,7 +144,7 @@ public class ElasticSearchHandler {
    public void createBangMapping(String index, String type, XContentBuilder xMapping,TransportClient client) {
        PutMappingRequest mapping = Requests.putMappingRequest(index).type(type).source(xMapping);
        client.admin().indices().putMapping(mapping).actionGet();
        close(client);
    }
    /**
@ -210,8 +216,9 @@ public class ElasticSearchHandler {
                    .endObject();
            cib.addMapping(type, mapping);
            cib.execute().actionGet();
            close(client);
        } catch (IOException e) {
            System.out.println("创建索引发生异常");
            logger.debug("创建索引发生异常");
        }
    }
@ -251,6 +258,7 @@ public class ElasticSearchHandler {
                .endObject();
        cib.addMapping(type, mapping);
        cib.execute().actionGet();
        close(client);
    }
}

+ 9 - 9
src/main/java/com/yihu/quota/vo/CubeMappingModel.java

@ -11,9 +11,9 @@ public class CubeMappingModel {
    private Integer dimensionId;      //维度ID
    private String dimensionCode;    //维度编码
    private String fieldName;        //字段名称
    private Integer saveType;        //成员保存时映射格式类型: 1 列 2 对象 3 子集
    private String dataType;        //数据类型
    private String dict;            //数据字典
    private Integer childSaveType; //子集映射格式类型 1 对象 2 子集
    private String childPrimaryKay; //子集唯一字段
    public Integer getId() {
@ -64,14 +64,6 @@ public class CubeMappingModel {
        this.fieldName = fieldName;
    }
    public Integer getSaveType() {
        return saveType;
    }
    public void setSaveType(Integer saveType) {
        this.saveType = saveType;
    }
    public String getDataType() {
        return dataType;
    }
@ -95,4 +87,12 @@ public class CubeMappingModel {
    public void setChildPrimaryKay(String childPrimaryKay) {
        this.childPrimaryKay = childPrimaryKay;
    }
    public Integer getChildSaveType() {
        return childSaveType;
    }
    public void setChildSaveType(Integer childSaveType) {
        this.childSaveType = childSaveType;
    }
}

+ 10 - 0
src/main/java/com/yihu/quota/vo/CubeMemberMappingModel.java

@ -12,6 +12,7 @@ public class CubeMemberMappingModel {
    private String dimensionCode;    //维度编码
    private String fieldName;        //字段名称
    private String dataType;        //数据类型
    private String dict;            //数据字典
    public Integer getId() {
        return id;
@ -68,4 +69,13 @@ public class CubeMemberMappingModel {
    public void setDataType(String dataType) {
        this.dataType = dataType;
    }
    public String getDict() {
        return dict;
    }
    public void setDict(String dict) {
        this.dict = dict;
    }
}