2 Commits 2338ccadf6 ... 03d5e5e124

Auteur SHA1 Bericht Datum
  jkzlzhoujie 03d5e5e124 olap 数据解析 优化调整 6 jaren geleden
  jkzlzhoujie 7d7b23f65f olap 数据解析 优化调整 6 jaren geleden
20 gewijzigde bestanden met toevoegingen van 517 en 1169 verwijderingen
  1. 26 32
      src/main/java/com/yihu/quota/controller/CubeController.java
  2. 1 10
      src/main/java/com/yihu/quota/controller/DimensionController.java
  3. 0 82
      src/main/java/com/yihu/quota/controller/DimensionMemberController.java
  4. 0 11
      src/main/java/com/yihu/quota/dao/cube/CubeMemberMappingDao.java
  5. 0 20
      src/main/java/com/yihu/quota/dao/dimension/DimensionMemberDao.java
  6. 79 0
      src/main/java/com/yihu/quota/etl/formula/RelevanceFunc.java
  7. 0 3
      src/main/java/com/yihu/quota/model/cube/Cube.java
  8. 58 22
      src/main/java/com/yihu/quota/model/cube/CubeMapping.java
  9. 0 110
      src/main/java/com/yihu/quota/model/cube/CubeMemberMapping.java
  10. 0 51
      src/main/java/com/yihu/quota/model/dimension/Dimension.java
  11. 0 146
      src/main/java/com/yihu/quota/model/dimension/DimensionMember.java
  12. 83 18
      src/main/java/com/yihu/quota/service/cube/CubeMappingService.java
  13. 0 144
      src/main/java/com/yihu/quota/service/cube/CubeMemberMappingService.java
  14. 3 19
      src/main/java/com/yihu/quota/service/cube/CubeService.java
  15. 181 242
      src/main/java/com/yihu/quota/service/cube/ElasticSearchDataProcessService.java
  16. 0 19
      src/main/java/com/yihu/quota/service/dimension/DimensionMemberService.java
  17. 4 7
      src/main/java/com/yihu/quota/service/dimension/DimensionService.java
  18. 2 2
      src/main/java/com/yihu/quota/service/source/DataSourcesTableFieldService.java
  19. 80 34
      src/main/java/com/yihu/quota/vo/CubeMappingModel.java
  20. 0 197
      src/main/java/com/yihu/quota/vo/CubeMemberMappingModel.java

+ 26 - 32
src/main/java/com/yihu/quota/controller/CubeController.java

@ -2,24 +2,18 @@ package com.yihu.quota.controller;
import com.google.gson.Gson;
import com.yihu.ehr.constants.ApiVersion;
import com.yihu.ehr.constants.ServiceApi;
import com.yihu.ehr.util.rest.Envelop;
import com.yihu.quota.model.cube.Cube;
import com.yihu.quota.model.cube.CubeMapping;
import com.yihu.quota.model.cube.CubeMemberMapping;
import com.yihu.quota.model.rest.FieldInfo;
import com.yihu.quota.service.cube.CubeMappingService;
import com.yihu.quota.service.cube.CubeMemberMappingService;
import com.yihu.quota.service.cube.CubeService;
import com.yihu.quota.service.cube.ElasticSearchDataProcessService;
import com.yihu.quota.util.ElasticSearchHandler;
import com.yihu.quota.vo.CubeMappingModel;
import com.yihu.quota.vo.CubeMemberMappingModel;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang.StringUtils;
import org.elasticsearch.client.transport.TransportClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@ -44,8 +38,6 @@ public class CubeController  extends BaseController {
    @Autowired
    private CubeMappingService cubeMappingService;
    @Autowired
    private CubeMemberMappingService cubeMemberMappingService;
    @Autowired
    private ElasticSearchHandler esHandler;
    @Autowired
    private ElasticSearchDataProcessService elasticSearchDataProcessService;
@ -101,33 +93,35 @@ public class CubeController  extends BaseController {
                    FieldInfo fieldInfo =  new FieldInfo();
                    fieldInfo.setField(fieldCode);
                    // 子成员 扩展
                    List<CubeMemberMappingModel>  cubeMemberMappingModels = cubeMemberMappingService.findCubeMemberMappingModelsById(cubeMappingModel.getId());
                    if(cubeMemberMappingModels != null && cubeMemberMappingModels.size() > 0){
                        List<FieldInfo> childFieldiList = new ArrayList<>();
                        //如果存在子集设置 子集属性
                        if(cubeMappingModel.getChildSaveType() != null){
                            if(cubeMappingModel.getChildSaveType().equals(1)){
                                fieldInfo.setDataType("object");
                            }else if(cubeMappingModel.getChildSaveType().equals(2)){
                                fieldInfo.setDataType("nested");
                    if(cubeMappingModel.getChildSaveType() != null){
                        List<CubeMappingModel> childMapping = cubeMappingService.findCubeChildMappingModelsByCubeId(id,cubeMappingModel.getId());
                        if(childMapping != null && childMapping.size() > 0){
                            List<FieldInfo> childFieldiList = new ArrayList<>();
                            //如果存在子集设置 子集属性
                            if(cubeMappingModel.getChildSaveType() != null){
                                if(cubeMappingModel.getChildSaveType().equals(1)){
                                    fieldInfo.setDataType("object");
                                }else if(cubeMappingModel.getChildSaveType().equals(2)){
                                    fieldInfo.setDataType("nested");
                                }
                            }
                        }
                        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 dictFieldName =  new FieldInfo();
                                dictFieldName.setField(fieldCode + "_name");
                                dictFieldName.setDataType("String");
                                childFieldiList.add(dictFieldName);
                            for(CubeMappingModel cubeMappingModel1 : childMapping){
                                FieldInfo childFieldInfo =  new FieldInfo();
                                childFieldInfo.setField(cubeMappingModel1.getDimensionCode());
                                childFieldInfo.setDataType(cubeMappingModel1.getDataType());
                                childFieldiList.add(childFieldInfo);
                                //数据字典名称作为一个子属性 扩展
                                if(StringUtils.isNotEmpty(cubeMappingModel1.getDict())){
                                    FieldInfo dictFieldName =  new FieldInfo();
                                    dictFieldName.setField(fieldCode + "_name");
                                    dictFieldName.setDataType("String");
                                    childFieldiList.add(dictFieldName);
                                }
                            }
                            fieldInfo.setFieldInfos(childFieldiList);
                        }else {
                            fieldInfo.setDataType(cubeMappingModel.getDataType());
                        }
                        fieldInfo.setFieldInfos(childFieldiList);
                    }else {
                        fieldInfo.setDataType(cubeMappingModel.getDataType());
                    }
                    fieldInfoList.add(fieldInfo);
                }

+ 1 - 10
src/main/java/com/yihu/quota/controller/DimensionController.java

@ -4,8 +4,6 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.constants.ApiVersion;
import com.yihu.ehr.util.rest.Envelop;
import com.yihu.quota.model.dimension.Dimension;
import com.yihu.quota.model.dimension.DimensionMember;
import com.yihu.quota.service.dimension.DimensionMemberService;
import com.yihu.quota.service.dimension.DimensionService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -32,8 +30,6 @@ public class DimensionController extends BaseController {
    private ObjectMapper objectMapper;
    @Autowired
    private DimensionService dimensionService;
    @Autowired
    private DimensionMemberService dimensionMemberService;
    @RequestMapping(value = "/olap/searchDimension", method = RequestMethod.GET)
    @ApiOperation(value = "根据查询条件查询,具有分页功能;filters='id=1'")
@ -51,12 +47,7 @@ public class DimensionController extends BaseController {
        Envelop envelop = new Envelop();
        List<Dimension> search = dimensionService.search(fields, filters, sorts, page, size);
        if (null != search && search.size() > 0) {
            for (Dimension dimension : search) {
                List<DimensionMember> list = dimensionMemberService.search("dimensionId=" + dimension.getId());
                if (null != list && list.size() > 0) {
                    dimension.setDimensionMembers(list);
                }
            }
        }
        envelop.setSuccessFlg(true);
        envelop.setDetailModelList(search);

+ 0 - 82
src/main/java/com/yihu/quota/controller/DimensionMemberController.java

@ -1,82 +0,0 @@
package com.yihu.quota.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.ehr.constants.ApiVersion;
import com.yihu.ehr.util.rest.Envelop;
import com.yihu.quota.model.dimension.DimensionMember;
import com.yihu.quota.service.dimension.DimensionMemberService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.net.URLDecoder;
import java.util.List;
/**
 * Created by wxw on 2018/9/7.
 * @author wxw
 */
@RestController
@RequestMapping(ApiVersion.Version1_0)
@Api(value = "DimensionMemberController", description = "OLAP-维度成员表", tags = {"OLAP-维度成员表"})
public class DimensionMemberController extends BaseController {
    @Autowired
    private ObjectMapper objectMapper;
    @Autowired
    private DimensionMemberService dimensionMemberService;
    @RequestMapping(value = "/olap/searchDimensionMenber", method = RequestMethod.GET)
    @ApiOperation(value = "根据查询条件查询,具有分页功能;filters='id=1'")
    public Envelop searchDimensionMenber(
            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段", defaultValue = "")
            @RequestParam(value = "fields", required = false) String fields,
            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
            @RequestParam(value = "filters", required = false) String filters,
            @ApiParam(name = "sorts", value = "排序,规则参见说明文档", defaultValue = "+level")
            @RequestParam(value = "sorts", required = false) String sorts,
            @ApiParam(name = "size", value = "分页大小", defaultValue = "15")
            @RequestParam(value = "size", required = false) int size,
            @ApiParam(name = "page", value = "页码", defaultValue = "1")
            @RequestParam(value = "page", required = false) int page) throws Exception {
        Envelop envelop = new Envelop();
        List<DimensionMember> search = dimensionMemberService.search(fields, filters, sorts, page, size);
        envelop.setSuccessFlg(true);
        envelop.setDetailModelList(search);
        return envelop;
    }
    @RequestMapping(value = "/olap/saveOrUpdateDimensionMember", method = RequestMethod.POST)
    @ApiOperation(value = "添加或修改操作")
    public Envelop saveDimension(
            @ApiParam(name = "model", value = "json数据模型", defaultValue = "")
            @RequestParam String model) throws Exception {
        Envelop envelop = new Envelop();
        DimensionMember dimensionMember = objectMapper.readValue(URLDecoder.decode(model, "UTF-8"), DimensionMember.class);
        if (null == dimensionMember.getId()) {
            // 新增
            dimensionMemberService.save(dimensionMember);
            envelop.setSuccessFlg(true);
        } else {
            dimensionMemberService.save(dimensionMember);
            envelop.setSuccessFlg(true);
        }
        return envelop;
    }
    @RequestMapping(value = "/olap/deleteDMById", method = RequestMethod.DELETE)
    @ApiOperation(value = "根据id删除")
    public Envelop deleteDMById(
            @ApiParam(name = "id", value = "编号", defaultValue = "")
            @RequestParam(value = "id") Integer id) throws Exception {
        Envelop envelop = new Envelop();
        dimensionMemberService.delete(id);
        envelop.setSuccessFlg(true);
        return envelop;
    }
}

+ 0 - 11
src/main/java/com/yihu/quota/dao/cube/CubeMemberMappingDao.java

@ -1,11 +0,0 @@
package com.yihu.quota.dao.cube;
import com.yihu.quota.model.cube.CubeMemberMapping;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by janseny on 2018/9/10.
 * @author janseny
 */
public interface CubeMemberMappingDao extends PagingAndSortingRepository<CubeMemberMapping, Integer> {
}

+ 0 - 20
src/main/java/com/yihu/quota/dao/dimension/DimensionMemberDao.java

@ -1,20 +0,0 @@
package com.yihu.quota.dao.dimension;
import com.yihu.quota.model.dimension.DimensionMember;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.transaction.annotation.Transactional;
/**
 * Created by wxw on 2018/9/7.
 * @author wxw
 */
public interface DimensionMemberDao extends PagingAndSortingRepository<DimensionMember, Integer> {
    @Modifying
    @Transactional
    @Query("delete from DimensionMember where dimensionId = :dimensionId")
    void deleteByDimensionId(@Param("dimensionId") Integer dimensionId);
}

+ 79 - 0
src/main/java/com/yihu/quota/etl/formula/RelevanceFunc.java

@ -0,0 +1,79 @@
package com.yihu.quota.etl.formula;
import com.yihu.quota.service.source.DataSourcesTableFieldService;
import com.yihu.quota.vo.DataSourcesTableModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
/**
 * 表关联
 * @author janseny
 */
@Component
public class RelevanceFunc {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private DataSourcesTableFieldService dataSourcesTableFieldService;
    /**
     * 获取关联字段值
     * @param  dataFieldId  数据 对应源字段ID
     * @param relationFieldId 关联字段ID
     * @param relationFieldVal 关联字段值
     */
    public String getRelationFieldVal(String dataFieldId,String relationFieldId ,String relationFieldVal) throws Exception {
        try {
            String value = null;
            DataSourcesTableModel dtm = dataSourcesTableFieldService.findDataSourcesTableModel(dataFieldId);
            DataSourcesTableModel subDtm = dataSourcesTableFieldService.findDataSourcesTableModel(relationFieldId);
            if(dtm != null && subDtm != null){
                value = getEntityByRelationId(subDtm.getDatabaseName() ,subDtm.getTableCode(), dtm.getFieldCode(),subDtm.getFieldCode(),subDtm.getFieldType(),relationFieldVal);
            }
            return value;
        }catch (Exception e){
            throw e;
        }
    }
    /**
     *
     * @param database 数据库名
     * @param table    表名
     * @param cloumnCode 列名
     * @param relationCode 关联字段名
     * @param relationColDataType 关联字段类型
     * @param relationVal 关联字段值
     * @return
     * @throws Exception
     */
    public String getEntityByRelationId(String database ,String table, String cloumnCode ,String relationCode,String relationColDataType ,
                                        String relationVal) throws Exception {
        try {
            String sql = "";
            if(relationColDataType.toLowerCase().equals("string")){
                sql = " SELECT " + cloumnCode + " FROM " + database + "." + table + " WHERE " + relationCode + "= '" + relationVal + "' ";
            }else {
                sql = " SELECT " + cloumnCode + " FROM " + database + "." + table + " WHERE " + relationCode + "= " + relationVal;
            }
            List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
            if(list != null && list.size() > 0){
                Map<String, Object> map  = list.get(0);
                if(map.get(cloumnCode) == null ){
                    return null;
                }
                return map.get(cloumnCode).toString();
            }else {
                return null;
            }
        }catch (Exception e){
            throw new Exception(" 数据查询异常");
        }
    }
}

+ 0 - 3
src/main/java/com/yihu/quota/model/cube/Cube.java

@ -1,10 +1,7 @@
package com.yihu.quota.model.cube;
import com.yihu.quota.model.dimension.DimensionMember;
import javax.persistence.*;
import java.util.List;
/**
 * 多维数据集 entity

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

@ -1,10 +1,7 @@
package com.yihu.quota.model.cube;
import com.yihu.quota.model.dimension.DimensionMember;
import javax.persistence.*;
import java.util.List;
/**
 * 多维数据集的维度 entity
@ -12,17 +9,21 @@ import java.util.List;
 * @author janseny
 */
@Entity
@Table(name = "olap_cube_mapping")
@Table(name = "olap_cube_mapping_test")
public class CubeMapping {
    private Integer id;
    private Integer cubeId;            //多维数据集ID
    private Integer dataFieldId;      //字段名
    private Integer dimensionId;      //维度ID
    private String dimensionCode;    //维度编码
    private String fieldName;        //字段名称
    private Integer childSaveType; //子集映射格式类型 1 对象 2 子集
    private String dataGetType;        //数据获取方式 1 直接获取 2 关联获取(一对一关联不支持一对多关联) 默认为一
    private String relationFieldId;    //关联主键字段
    private Integer dataFieldId;      //字段ID
    private String dict;                //字典
    private String algorithm;                   //中间算法
    private String parm;                        //算法参数
    private Integer childSaveType;              //子集映射格式类型 1 对象 2 子集
    private Integer parentId;                   //父级ID
    private Integer isNestedPrimarykey;         // 是否指定唯一字段 1是 0 否
    private Integer dataGetType;                //数据获取方式 1 直接获取 2 算法方式获取  3关联获取(一对一关联不支持一对多关联) 默认为一
    private String relationFieldId;             //关联表主键字段ID
    private String relationDataFieldId;      //关联表数据关联字段ID
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
@ -62,22 +63,31 @@ public class CubeMapping {
        this.dimensionId = dimensionId;
    }
    @Column(name = "dimension_code")
    public String getDimensionCode() {
        return dimensionCode;
    @Column(name = "dict")
    public String getDict() {
        return dict;
    }
    public void setDict(String dict) {
        this.dict = dict;
    }
    @Column(name = "algorithm")
    public String getAlgorithm() {
        return algorithm;
    }
    public void setDimensionCode(String dimensionCode) {
        this.dimensionCode = dimensionCode;
    public void setAlgorithm(String algorithm) {
        this.algorithm = algorithm;
    }
    @Column(name = "field_name")
    public String getFieldName() {
        return fieldName;
    @Column(name = "parm")
    public String getParm() {
        return parm;
    }
    public void setFieldName(String fieldName) {
        this.fieldName = fieldName;
    public void setParm(String parm) {
        this.parm = parm;
    }
    @Column(name = "child_save_type")
@ -89,12 +99,30 @@ public class CubeMapping {
        this.childSaveType = childSaveType;
    }
    @Column(name = "parent_id")
    public Integer getParentId() {
        return parentId;
    }
    public void setParentId(Integer parentId) {
        this.parentId = parentId;
    }
    @Column(name = "is_nested_primarykey")
    public Integer getIsNestedPrimarykey() {
        return isNestedPrimarykey;
    }
    public void setIsNestedPrimarykey(Integer isNestedPrimarykey) {
        this.isNestedPrimarykey = isNestedPrimarykey;
    }
    @Column(name = "data_get_type")
    public String getDataGetType() {
    public Integer getDataGetType() {
        return dataGetType;
    }
    public void setDataGetType(String dataGetType) {
    public void setDataGetType(Integer dataGetType) {
        this.dataGetType = dataGetType;
    }
@ -107,4 +135,12 @@ public class CubeMapping {
        this.relationFieldId = relationFieldId;
    }
    @Column(name = "relation_data_field_id")
    public String getRelationDataFieldId() {
        return relationDataFieldId;
    }
    public void setRelationDataFieldId(String relationDataFieldId) {
        this.relationDataFieldId = relationDataFieldId;
    }
}

+ 0 - 110
src/main/java/com/yihu/quota/model/cube/CubeMemberMapping.java

@ -1,110 +0,0 @@
package com.yihu.quota.model.cube;
import com.yihu.quota.model.dimension.DimensionMember;
import javax.persistence.*;
import java.util.List;
/**
 * 多维数据集的维度的成员 entity
 * Created by janseny on 2018/9/10.
 * @author janseny
 */
@Entity
@Table(name = "olap_cube_member_mapping")
public class CubeMemberMapping {
    private Integer id;
    private Integer cubeMappingId;    //多维数据集维度ID
    private Integer dataFieldId;      //字段名
    private Integer dimensionMemberId;//维度成员ID
    private String dimensionCode;    //维度编码
    private String fieldName;        //字段名称
    private Integer isPrimarykey;  //是否指定唯一字段 1是 0 否
    private String dataGetType;        //数据获取方式 1 直接获取 2 关联获取(一对一关联不支持一对多关联) 默认为一
    private String relationFieldId;    //关联主键字段
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    @Column(name = "cube_mapping_id")
    public Integer getCubeMappingId() {
        return cubeMappingId;
    }
    public void setCubeMappingId(Integer cubeMappingId) {
        this.cubeMappingId = cubeMappingId;
    }
    @Column(name = "data_field_id")
    public Integer getDataFieldId() {
        return dataFieldId;
    }
    public void setDataFieldId(Integer dataFieldId) {
        this.dataFieldId = dataFieldId;
    }
    @Column(name = "dimension_member_id")
    public Integer getDimensionMemberId() {
        return dimensionMemberId;
    }
    public void setDimensionMemberId(Integer dimensionMemberId) {
        this.dimensionMemberId = dimensionMemberId;
    }
    @Column(name = "dimension_code")
    public String getDimensionCode() {
        return dimensionCode;
    }
    public void setDimensionCode(String dimensionCode) {
        this.dimensionCode = dimensionCode;
    }
    @Column(name = "field_name")
    public String getFieldName() {
        return fieldName;
    }
    public void setFieldName(String fieldName) {
        this.fieldName = fieldName;
    }
    @Column(name = "is_primarykey")
    public Integer getIsPrimarykey() {
        return isPrimarykey;
    }
    public void setIsPrimarykey(Integer isPrimarykey) {
        this.isPrimarykey = isPrimarykey;
    }
    @Column(name = "data_get_type")
    public String getDataGetType() {
        return dataGetType;
    }
    public void setDataGetType(String dataGetType) {
        this.dataGetType = dataGetType;
    }
    @Column(name = "relation_field_id")
    public String getRelationFieldId() {
        return relationFieldId;
    }
    public void setRelationFieldId(String relationFieldId) {
        this.relationFieldId = relationFieldId;
    }
}

+ 0 - 51
src/main/java/com/yihu/quota/model/dimension/Dimension.java

@ -25,30 +25,12 @@ public class Dimension {
     * 类型 : 1 维度 2 属性 3 指标
     */
    private Integer type;
    /**
     * 数据字典
     */
    private String dict;
    /**
     * 中间算法
     */
    private String algorithm;
    /**
     * 中间算法参数
     */
    private String parm;
    /**
     * 数据类型
     */
    private String dataType;
    /**
     * 临时字段,存放维度成员
     */
    private List<DimensionMember> dimensionMembers;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
@ -84,22 +66,6 @@ public class Dimension {
        this.type = type;
    }
    public String getDict() {
        return dict;
    }
    public void setDict(String dict) {
        this.dict = dict;
    }
    public String getAlgorithm() {
        return algorithm;
    }
    public void setAlgorithm(String algorithm) {
        this.algorithm = algorithm;
    }
    @Column(name = "data_type")
    public String getDataType() {
        return dataType;
@ -108,21 +74,4 @@ public class Dimension {
    public void setDataType(String dataType) {
        this.dataType = dataType;
    }
    public String getParm() {
        return parm;
    }
    public void setParm(String parm) {
        this.parm = parm;
    }
    @Transient
    public List<DimensionMember> getDimensionMembers() {
        return dimensionMembers;
    }
    public void setDimensionMembers(List<DimensionMember> dimensionMembers) {
        this.dimensionMembers = dimensionMembers;
    }
}

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

@ -1,146 +0,0 @@
package com.yihu.quota.model.dimension;
import org.hibernate.annotations.Formula;
import javax.persistence.*;
/**
 * 多维数据集维度的成员 entity
 * Created by wxw on 2018/9/7.
 * @author wxw
 */
@Entity
@Table(name = "olap_dimension_member")
public class DimensionMember {
    private Integer id;
    /**
     * 名称
     */
    private String name;
    /**
     * 编码
     */
    private String code;
    /**
     * 上级维度Id
     */
    private Integer dimensionId;
    /**
     * 维度层级
     */
    private Integer level;
    /**
     * 上级维度名称
     */
    private String dimensionName;
    /**
     * 数据类型
     */
    private String dataType;
    /**
     * 中间算法
     */
    private String algorithm;
    /**
     * 中间算法参数
     */
    private String parm;
    /**
     * 数据字典
     */
    private String dict;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", unique = true, nullable = false)
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    @Column(name = "dimension_id")
    public Integer getDimensionId() {
        return dimensionId;
    }
    public void setDimensionId(Integer dimensionId) {
        this.dimensionId = dimensionId;
    }
    public Integer getLevel() {
        return level;
    }
    public void setLevel(Integer level) {
        this.level = level;
    }
    @Column(name = "data_type")
    public String getDataType() {
        return dataType;
    }
    public void setDataType(String dataType) {
        this.dataType = dataType;
    }
    public String getDict() {
        return dict;
    }
    public void setDict(String dict) {
        this.dict = dict;
    }
    public String getAlgorithm() {
        return algorithm;
    }
    public void setAlgorithm(String algorithm) {
        this.algorithm = algorithm;
    }
    public String getParm() {
        return parm;
    }
    public void setParm(String parm) {
        this.parm = parm;
    }
    @Formula("(SELECT odm.name FROM olap_dimension_member odm LEFT JOIN olap_dimension od ON od.id = odm.dimension_id WHERE odm.id  = id )")
    public String getDimensionName() {
        return dimensionName;
    }
    public void setDimensionName(String dimensionName) {
        this.dimensionName = dimensionName;
    }
}

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

@ -48,12 +48,24 @@ public class CubeMappingService extends BaseJpaService<CubeMapping, CubeMappingD
     * @return
     */
    public List<CubeMappingModel> findCubeMappingModelsByCubeId(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.cube_id = ? order by ocm.id asc";
        String sql = "SELECT ocm.*,od.`code` as dimensionCode,od.data_type from olap_cube_mapping ocm ,olap_dimension od " +
                " where ocm.dimension_id = od.id AND ocm.cube_id = ? and ocm.parent_id is null order by ocm.id asc";
        List<CubeMappingModel> cubeMappingModels = jdbcTemplate.query(sql, new BeanPropertyRowMapper(CubeMappingModel.class), cubeId);
        return cubeMappingModels;
    }
    /**
     * 根据数据集 查询对应的维度的子集维度信息
     * @param cubeId
     * @return
     */
    public List<CubeMappingModel> findCubeChildMappingModelsByCubeId(int cubeId ,int parentId ) {
        String sql = "SELECT ocm.*,od.`code` as dimensionCode,od.data_type from olap_cube_mapping ocm ,olap_dimension od " +
                " where ocm.dimension_id = od.id AND ocm.cube_id = ? and ocm.parent_id = ? order by ocm.id asc";
        List<CubeMappingModel> cubeMappingModels = jdbcTemplate.query(sql, new BeanPropertyRowMapper(CubeMappingModel.class), cubeId,parentId);
        return cubeMappingModels;
    }
    /**
     * 根据表编码和字段编码 查询对应的维度信息
@ -72,6 +84,56 @@ public class CubeMappingService extends BaseJpaService<CubeMapping, CubeMappingD
        return cubeMappingModels;
    }
    /**
     * 根据表编码和字段编码 查询对应的维度信息
     * @param fieldCode
     * @param tableCode
     * @return
     */
    public List<CubeMappingModel> findCubeMappingModelsByField(String tableCode,String fieldCode) {
        String sql = "SELECT ocm.*,od.`code` as dimensionCode,oc.index_name,oc.index_type,odstf.field_code,od.data_type from olap_cube_mapping ocm " +
                " LEFT JOIN olap_data_sources_table_field odstf ON ocm.data_field_id = odstf.id "+
                " LEFT JOIN olap_data_sources_table odst ON odst.id = odstf.table_id " +
                " LEFT JOIN olap_cube oc ON oc.id = ocm.cube_id " +
                " LEFT JOIN olap_dimension od ON ocm.dimension_id = od.id where odstf.field_code = ? and odst.table_code = ? ";
        String param[] = {fieldCode,tableCode};
        List<CubeMappingModel> cubeMappingModels = jdbcTemplate.query(sql, new BeanPropertyRowMapper(CubeMappingModel.class), param);
        return cubeMappingModels;
    }
    /**
     * 查询 父级维度信息
     * @param parentId
     * @return
     */
    public CubeMappingModel findParentDimension(int parentId){
        String sql = "SELECT ocm.* ,od.`code` as dimensionCode ,od.data_type from olap_cube_mapping ocm, olap_dimension od  " +
                " where ocm.dimension_id = od.id  and ocm.id = ? ";
        Object param[] = {parentId};
        List<CubeMappingModel> cubeMappingModels = jdbcTemplate.query(sql, new BeanPropertyRowMapper(CubeMappingModel.class), param);
        if(cubeMappingModels != null && cubeMappingModels.size() > 0 ){
            return  cubeMappingModels.get(0);
        }
        return null;
    }
    /**
     * 查询子集中 主键字段
     * @param parentId
     * @return
     */
    public CubeMappingModel findCubeMappingPrimary(int parentId){
        String[] fields = {"parentId","isPrimarykey"};
        Object[] param = {parentId,1};
        String sql = "SELECT ocm.* ,od.`code` as dimensionCode ,od.data_type from olap_cube_mapping ocm, olap_dimension od  " +
                " where ocm.dimension_id = od.id  and ocm.parent_id = ? and ocm.is_nested_primarykey = ? ";
        List<CubeMappingModel> cubeMappingModels = jdbcTemplate.query(sql, new BeanPropertyRowMapper(CubeMappingModel.class), param);
        if(cubeMappingModels != null && cubeMappingModels.size() > 0 ){
            return  cubeMappingModels.get(0);
        }
        return null;
    }
    /**
     * 根据数据集和维度编码 查询对应的维度信息
@ -91,21 +153,24 @@ public class CubeMappingService extends BaseJpaService<CubeMapping, CubeMappingD
        return null;
    }
//    /**
//     * 根据表编码和关联字段编码 查询对应的维度信息
//     * @param RelationFieldCode 关联字段
//     * @param tableCode
//     * @return
//     */
//    public List<CubeMappingModel> findRelationMappingModelsByFieldCode(String tableCode,String RelationFieldCode) {
//        String sql = "SELECT ocm.*,oc.index_name,oc.index_type,odstf.field_code,od.dict,od.data_type,od.`algorithm`,od.parm from olap_cube_mapping ocm  " +
//                " LEFT JOIN olap_data_sources_table_field odstf ON ocm.relation_field_id = odstf.id "+
//                " LEFT JOIN olap_data_sources_table odst ON odst.id = odstf.table_id " +
//                " LEFT JOIN olap_cube oc ON oc.id = ocm.cube_id " +
//                " LEFT JOIN olap_dimension od ON ocm.dimension_id = od.id where ocm.child_save_type is null and  odstf.field_code = ? and odst.table_code = ? ";
//        String param[] = {RelationFieldCode,tableCode};
//        List<CubeMappingModel> cubeMappingModels = jdbcTemplate.query(sql, new BeanPropertyRowMapper(CubeMappingModel.class), param);
//        return cubeMappingModels;
//    }
    /**
     * 根据 表编码 查询对应的 保存索引和类型
     * @param tableCode
     * @return
     */
    public Cube findCubeByTableCode(String tableCode) {
        String sql = "SELECT oc.* from olap_cube oc " +
                " LEFT JOIN olap_cube_mapping ocm ON oc.id = ocm.cube_id " +
                " LEFT JOIN olap_data_sources_table_field odst ON odst.id = ocm.data_field_id " +
                " LEFT JOIN olap_data_sources_table ods ON ods.id = odst.table_id  " +
                " where ods.table_code = ? ";
        String param[] = {tableCode};
        List<Cube> cubes = jdbcTemplate.query(sql, new BeanPropertyRowMapper(Cube.class), param);
        if(cubes != null && cubes.size() > 0){
            return cubes.get(0);
        }else {
            return null;
        }
    }
}

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

@ -1,144 +0,0 @@
package com.yihu.quota.service.cube;
import com.yihu.ehr.query.BaseJpaService;
import com.yihu.quota.dao.cube.CubeMappingDao;
import com.yihu.quota.dao.cube.CubeMemberMappingDao;
import com.yihu.quota.model.cube.Cube;
import com.yihu.quota.model.cube.CubeMapping;
import com.yihu.quota.model.cube.CubeMemberMapping;
import com.yihu.quota.vo.CubeMemberMappingModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * 多维数据集的维度的成员 service
 * Created by janseny on 2018/9/10.
 * @author janseny
 */
@Service
public class CubeMemberMappingService extends BaseJpaService<CubeMemberMapping, CubeMemberMappingDao> {
    @Autowired
    private CubeMemberMappingDao cubeMemberMappingDao;
    /**
     * 保存接口
     * @param cubeMemberMapping
     * @return 保存之后的id
     */
    public Integer saveOlapCubeMemberMapping(CubeMemberMapping cubeMemberMapping) {
        cubeMemberMapping = cubeMemberMappingDao.save(cubeMemberMapping);
        return cubeMemberMapping.getId();
    }
    public void deleteOlapcubeMemberMapping(Integer id) {
        cubeMemberMappingDao.delete(id);
    }
    /**
     * 根据数据集维度ID 查询对应的维度成员信息
     * @param id
     * @return
     */
    public List<CubeMemberMappingModel> findCubeMemberMappingModelsById(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  AND ocmm.cube_mapping_id = ?  order by ocmm.id asc ";
        List<CubeMemberMappingModel> cubeMemberMappingModels = jdbcTemplate.query(sql, new BeanPropertyRowMapper(CubeMemberMappingModel.class), id);
        return cubeMemberMappingModels;
    }
    /**
     * 根据 表编码和字段编码 查询对应的维度信息
     * @param fieldCode
     * @return
     */
    public List<CubeMemberMappingModel> findCubeMemberMappingModels(String tableCode,String fieldCode) {
        String sql = "SELECT ocmm.*,oc.index_name,oc.index_type,ocm.dimension_code as parentCode,ocm.child_save_type,odstf.field_code,odm.dict,odm.data_type,odm.`algorithm`,odm.parm from olap_cube_member_mapping ocmm " +
                " LEFT JOIN olap_data_sources_table_field odstf ON ocmm.data_field_id = odstf.id " +
                " LEFT JOIN olap_data_sources_table odst ON odst.id = odstf.table_id " +
                " LEFT JOIN olap_dimension_member odm ON ocmm.dimension_member_id = odm.id  " +
                " LEFT JOIN olap_cube_mapping ocm ON ocm.id = ocmm.cube_mapping_id " +
                " LEFT JOIN olap_cube oc ON oc.id = ocm.cube_id " +
                " where   ocmm.dimension_member_id  is not null and odstf.field_code = ? and odst.table_code = ? ";
        String param[] = {fieldCode,tableCode};
        List<CubeMemberMappingModel> cubeMemberMappingModels = jdbcTemplate.query(sql, new BeanPropertyRowMapper(CubeMemberMappingModel.class), param);
        return cubeMemberMappingModels;
    }
    /**
     * 根据 表编码 查询对应的 保存索引和类型
     * @param tableCode
     * @return
     */
    public Cube findCubeByTableCode(String tableCode) {
        String sql = "SELECT oc.* from olap_cube oc " +
                " LEFT JOIN olap_cube_mapping ocm ON oc.id = ocm.cube_id " +
                " LEFT JOIN olap_data_sources_table_field odst ON odst.id = ocm.data_field_id " +
                " LEFT JOIN olap_data_sources_table ods ON ods.id = odst.table_id  " +
                " where ods.table_code = ? ";
        String param[] = {tableCode};
        List<Cube> cubes = jdbcTemplate.query(sql, new BeanPropertyRowMapper(Cube.class), param);
        if(cubes != null && cubes.size() > 0){
            return cubes.get(0);
        }else {
            return null;
        }
    }
    /**
     * 查询子集中 主键字段
     * @param cubeMappingId
     * @return
     */
    public CubeMemberMapping findCubeMemberMappingPrimary(int cubeMappingId){
        String[] fields = {"cubeMappingId","isPrimarykey"};
        Object[] values = {cubeMappingId,1};
        List<CubeMemberMapping> cubeMemberMappings = findByFields(fields,values);
        if(cubeMemberMappings != null && cubeMemberMappings.size() > 0){
            return cubeMemberMappings.get(0);
        }else {
            return null;
        }
    }
    /**
     * 根据数据集和维度编码 查询对应的维度信息
     * @param dimensionCode 维度编码
     * @param cubeMappingId 父级维度ID
     * @return
     */
    public CubeMemberMappingModel findCubeMemberMappingModelByCubeAndCode(int dimensionCode,String cubeMappingId) {
        String sql = "SELECT ocmm.*,odm.data_type from olap_cube_member_mapping ocmm  " +
                " LEFT JOIN olap_cube_mapping ocm on ocm.id = ocmm.cube_mapping_id " +
                " LEFT JOIN olap_dimension_member odm on odm.dimension_id =  ocmm.dimension_member_id " +
                " where   ocmm.dimension_code = ? and ocmm.cube_mapping_id= ? ";
        Object param[] = {dimensionCode,cubeMappingId};
        List<CubeMemberMappingModel> cubeMemberMappingModels = jdbcTemplate.query(sql, new BeanPropertyRowMapper(CubeMemberMappingModel.class), param);
        if(cubeMemberMappingModels != null && cubeMemberMappingModels.size() > 0){
            return cubeMemberMappingModels.get(0);
        }
        return null;
    }
    /**
     * 根据 表编码和关联字段编码 查询对应的维度信息
     * @param relationFieldCode 关联字段
     * @return
     */
    public List<CubeMemberMappingModel> findRelationMemberMappingModels(String tableCode,String relationFieldCode) {
        String sql = "SELECT ocmm.*,oc.index_name,oc.index_type,ocm.dimension_code as parentCode,ocm.child_save_type,odstf.field_code,odm.dict,odm.data_type,odm.`algorithm`,odm.parm from olap_cube_member_mapping ocmm " +
                " LEFT JOIN olap_data_sources_table_field odstf ON ocmm.relation_field_id = odstf.id " +
                " LEFT JOIN olap_data_sources_table odst ON odst.id = odstf.table_id " +
                " LEFT JOIN olap_dimension_member odm ON ocmm.dimension_member_id = odm.id  " +
                " LEFT JOIN olap_cube_mapping ocm ON ocm.id = ocmm.cube_mapping_id " +
                " LEFT JOIN olap_cube oc ON oc.id = ocm.cube_id " +
                " where odstf.field_code = ? and odst.table_code = ? ";
        String param[] = {relationFieldCode,tableCode};
        List<CubeMemberMappingModel> cubeMemberMappingModels = jdbcTemplate.query(sql, new BeanPropertyRowMapper(CubeMemberMappingModel.class), param);
        return cubeMemberMappingModels;
    }
}

+ 3 - 19
src/main/java/com/yihu/quota/service/cube/CubeService.java

@ -3,9 +3,7 @@ package com.yihu.quota.service.cube;
import com.yihu.ehr.query.BaseJpaService;
import com.yihu.quota.dao.cube.CubeDao;
import com.yihu.quota.model.cube.Cube;
import com.yihu.quota.model.cube.CubeMemberMapping;
import com.yihu.quota.vo.CubeMappingModel;
import com.yihu.quota.vo.CubeMemberMappingModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -22,8 +20,6 @@ public class CubeService extends BaseJpaService<Cube, CubeDao> {
    private CubeDao cubeDao;
    @Autowired
    private CubeMappingService cubeMappingService;
    @Autowired
    private CubeMemberMappingService cubeMemberMappingService;
    /**
     * 保存接口
@ -50,21 +46,9 @@ public class CubeService extends BaseJpaService<Cube, CubeDao> {
     * @return
     */
    public String findDimensionDataType(String cubeCode,String dimensionCode){
        if(dimensionCode.contains(".")){
            dimensionCode = dimensionCode.substring(0, dimensionCode.indexOf("."));
            String memberCode = dimensionCode.substring(dimensionCode.indexOf(".")+1);
            CubeMappingModel cubeMappingModel = cubeMappingService.findCubeMappingModelByCubeAndCode(cubeCode, dimensionCode);
            if(cubeMappingModel !=null){
                CubeMemberMappingModel cubeMemberMappingModel = cubeMemberMappingService.findCubeMemberMappingModelByCubeAndCode(cubeMappingModel.getId(), memberCode);
                if(cubeMemberMappingModel !=null){
                    return  cubeMemberMappingModel.getDataType();
                }
            }
        }else {
            CubeMappingModel cubeMappingModel = cubeMappingService.findCubeMappingModelByCubeAndCode(cubeCode, dimensionCode);
            if(cubeMappingModel !=null){
                return  cubeMappingModel.getDataType();
            }
        CubeMappingModel cubeMappingModel = cubeMappingService.findCubeMappingModelByCubeAndCode(cubeCode, dimensionCode);
        if(cubeMappingModel !=null){
            return  cubeMappingModel.getDataType();
        }
        return null;
    }

+ 181 - 242
src/main/java/com/yihu/quota/service/cube/ElasticSearchDataProcessService.java

@ -1,19 +1,13 @@
package com.yihu.quota.service.cube;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
import com.yihu.ehr.elasticsearch.ElasticSearchUtil;
import com.yihu.ehr.util.datetime.DateUtil;
import com.yihu.quota.etl.formula.AgeGroupFunc;
import com.yihu.quota.etl.formula.DictFunc;
import com.yihu.quota.etl.formula.DivisionFunc;
import com.yihu.quota.etl.formula.RelevanceFunc;
import com.yihu.quota.model.cube.Cube;
import com.yihu.quota.model.cube.CubeMemberMapping;
import com.yihu.quota.model.source.DataSourcesTableField;
import com.yihu.quota.service.source.DataSourcesTableFieldService;
import com.yihu.quota.service.dimension.DimensionService;
import com.yihu.quota.vo.CubeMappingModel;
import com.yihu.quota.vo.CubeMemberMappingModel;
import com.yihu.quota.vo.DataSourcesTableModel;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -46,20 +40,18 @@ public class ElasticSearchDataProcessService {
    private static String profileId_k = "profile_id";
    private static String action_k = "action";
    @Autowired
    private JdbcBasicService jdbcBasicService;
    @Autowired
    private CubeMappingService cubeMappingService;
    @Autowired
    private CubeMemberMappingService cubeMemberMappingService;
    @Autowired
    private DataSourcesTableFieldService dataSourcesTableFieldService;
    @Autowired
    private ElasticSearchUtil elasticSearchUtil;
    @Autowired
    private CubeService cubeService;
    @Autowired
    private ObjectMapper objectMapper;
    @Autowired
    private RelevanceFunc relevanceFunc;
    @Autowired
    private DimensionService dimensionService;
    /**
     *
@ -97,100 +89,62 @@ public class ElasticSearchDataProcessService {
        String database = "";
        if (dataMap.containsKey(database_k)) {
            database = dataMap.remove(database_k).toString();
            dataMap.remove(database_k);
        }
        if(dataMap.containsKey(table_k)){
            table = dataMap.get(table_k).toString();
            dataMap.remove(table_k);
        }
        if(dataMap.containsKey(rowKey_k)){
            rowKey = dataMap.get(rowKey_k).toString();
        }
        if(dataMap.containsKey(cubeId_k)){
            cubeId = dataMap.get(cubeId_k).toString();
            dataMap.remove(rowKey_k);
        }
        if(dataMap.containsKey(profileId_k)){
            profileId = dataMap.get(profileId_k).toString();
            dataMap.remove(profileId_k);
        }
        if(dataMap.containsKey(action_k)){
            action = dataMap.get(action_k).toString();
            dataMap.remove(action_k);
        }
        if(dataMap.containsKey(cubeId_k)){
            cubeId = dataMap.get(cubeId_k).toString();
        }
        if(StringUtils.isEmpty(profileId)){
            profileId = rowKey;
        }
        String subRowKey = rowKey;
        try {
            dataMap.remove(table_k);
            dataMap.remove(rowKey_k);
            dataMap.remove(action_k);
            String baseCloumnValue = null;
            if(action.equals(action_put)){
                for(String baseCloumnCode : dataMap.keySet()){
                    if(dataMap.get(baseCloumnCode)!= null){
                        baseCloumnValue = dataMap.get(baseCloumnCode).toString();
                    }else {
                        baseCloumnValue = null;
                    }
                    System.out.println("开始解析数据:" + baseCloumnCode + " ,值为 = " + baseCloumnValue);
                    List<CubeMappingModel> cubeMappingModels = cubeMappingService.findCubeMappingModelsByFieldCode(table, baseCloumnCode);
                    if(cubeMappingModels != null && cubeMappingModels.size() > 0){
                        for(CubeMappingModel cubeMappingModel :cubeMappingModels){
                            Map<String, Object> source  = new HashMap<>();
                            source.put(id_k,rowKey);
                            source.put(rowKey_k,rowKey);
                            String index = cubeMappingModel.getIndexName();
                            String type = cubeMappingModel.getIndexType();
                            String cloumnCode = cubeMappingModel.getDimensionCode();
                            System.out.println("维度code = " + cloumnCode +  ",维度类型:" + cubeMappingModel.getDataType());
                            //维度数据扩展保存
                            Map<String, Object> esDataMap = new HashMap<>();
                            esDataMap = dimensionDataExtendToMap(cubeMappingModel,cloumnCode,baseCloumnValue);
                            source.putAll(esDataMap);
                            saveElasticSearchData(index, type,rowKey,source);
                        }
                    }
                    //如果存在维度的话 rowkey 赋值给 profileId
                    if(cubeMappingModels != null && cubeMappingModels.size() > 0 && StringUtils.isEmpty(profileId)){
                        profileId = rowKey;
                    }
                    // 是否是子集属性
                    List<CubeMemberMappingModel> cubeMemberMappingModels = cubeMemberMappingService.findCubeMemberMappingModels(table,baseCloumnCode);
                    if(cubeMemberMappingModels != null && cubeMemberMappingModels.size() > 0){
                        for(CubeMemberMappingModel cubeMemberMappingModel :cubeMemberMappingModels){
                            String index = cubeMemberMappingModel.getIndexName();
                            String type = cubeMemberMappingModel.getIndexType();
                            String subRowKey = rowKey;
                            if(action.contains(action_put)){
                                //维度成员数据扩展保存
                        List<CubeMappingModel> cubeMappingModels = cubeMappingService.findCubeMappingModelsByField(table, baseCloumnCode);
                        if(cubeMappingModels != null && cubeMappingModels.size() > 0){
                            for(CubeMappingModel cubeMappingModel :cubeMappingModels){
                                System.out.println("维度code = " + cubeMappingModel.getDimensionCode() +  ",维度类型:" + cubeMappingModel.getDataType() + ",值=" + baseCloumnValue );
                                Map<String, Object> source  = new HashMap<>();
                                source = dimensionMemberDataExtendToMap(cubeMemberMappingModel,baseCloumnValue,subRowKey,profileId);
                                saveElasticSearchData(index, type,profileId,source);
                            }
                        }
                    }
//                    //主表字段关联出相关表数据 start
                    List<CubeMemberMappingModel> relationMemberMappingModels = cubeMemberMappingService.findRelationMemberMappingModels(table,baseCloumnCode);
                    if(relationMemberMappingModels != null && relationMemberMappingModels.size() > 0) {
                        profileId = rowKey;
                        for (CubeMemberMappingModel cubeMemberMappingModel : relationMemberMappingModels) {
                            //父级对象
                            if(cubeMemberMappingModel.getChildSaveType() == 1 && cubeMemberMappingModel.getRelationSubFieldId() != null){
                                DataSourcesTableModel dataSourcesTableModel = dataSourcesTableFieldService.findDataSourcesTableModel(cubeMemberMappingModel.getDataFieldId());
                                DataSourcesTableModel subdataSourcesTableModel = dataSourcesTableFieldService.findDataSourcesTableModel(cubeMemberMappingModel.getRelationSubFieldId());
                                if(dataSourcesTableModel != null && subdataSourcesTableModel != null){
                                    String value = jdbcBasicService.getEntityByRelationId(subdataSourcesTableModel.getDatabaseName() ,subdataSourcesTableModel.getTableCode(), dataSourcesTableModel.getFieldCode(),subdataSourcesTableModel.getFieldCode(),subdataSourcesTableModel.getFieldType(),baseCloumnValue);
                                    if(StringUtils.isNotEmpty(value)){
                                        String index = cubeMemberMappingModel.getIndexName();
                                        String type = cubeMemberMappingModel.getIndexType();
                                        if(action.contains(action_put)){
                                            //维度成员数据扩展保存
                                            Map<String, Object> source  = new HashMap<>();
                                            source = dimensionMemberDataExtendToMap(cubeMemberMappingModel,value,null,profileId);
                                            saveElasticSearchData(index, type,profileId,source);
                                        }
                                    }
                                if(cubeMappingModel.getParentId() == null){
                                    source.put(id_k,rowKey);
                                    source.put(rowKey_k,rowKey);
                                    source.putAll(dimensionDataExtendToMap(cubeMappingModel,cubeMappingModel.getDimensionCode(),baseCloumnValue));
                                }else { // 子集成员
                                    rowKey = profileId;
                                    source.put(id_k,profileId);
                                    source.put(rowKey_k,profileId);
                                    source.putAll(dimensionMemberDataExtendToMap(cubeMappingModel,baseCloumnValue,subRowKey,profileId));
                                }
                                String index = cubeMappingModel.getIndexName();
                                String type = cubeMappingModel.getIndexType();
                                saveElasticSearchData(index, type,rowKey,source);
                            }
                        }
                    }
                }
            }else if(action.equals(action_del)){
                //一个表只能对应到一个 索引type
                Cube cube = cubeMemberMappingService.findCubeByTableCode(table);
                Cube cube = cubeMappingService.findCubeByTableCode(table);
                if(cube != null){
                    elasticSearchUtil.delete(cube.getIndexName(),cube.getIndexType(),rowKey);
                }else {
@ -198,7 +152,7 @@ public class ElasticSearchDataProcessService {
                }
            }else if (action.equals(action_putAll)) {
                if (dataMap.containsKey("cubeId")) {
                    Cube cube = this.getIndexTypeById(cubeId);
                    Cube cube = cubeService.findOne(Integer.parseInt(cubeId));
                    if (null != cube) {
                        String index = cube.getIndexName();
                        String type = cube.getIndexType();
@ -209,44 +163,29 @@ public class ElasticSearchDataProcessService {
                            System.out.println("列:" + baseCloumnCode );
                            if(dataMap.get(baseCloumnCode)!= null){
                                baseCloumnValue = dataMap.get(baseCloumnCode).toString();
                                List<CubeMappingModel> cubeMappingModels = cubeMappingService.findCubeMappingModelsByFieldCode(table, baseCloumnCode);
                                List<CubeMappingModel> cubeMappingModels = cubeMappingService.findCubeMappingModelsByField(table, baseCloumnCode);
                                if(cubeMappingModels != null && cubeMappingModels.size() > 0){
                                    for(CubeMappingModel cubeMappingModel :cubeMappingModels){
                                        source.putAll(dimensionDataExtendToMap(cubeMappingModel,cubeMappingModel.getDimensionCode(),baseCloumnValue));
                                    }
                                }
                                // 是否是子集属性
                                profileId = rowKey;
                                String subRowKey = rowKey;
                                List<CubeMemberMappingModel> cubeMemberMappingModels = cubeMemberMappingService.findCubeMemberMappingModels(table,baseCloumnCode);
                                if(cubeMemberMappingModels != null && cubeMemberMappingModels.size() > 0){
                                    for(CubeMemberMappingModel cubeMemberMappingModel :cubeMemberMappingModels){
                                        source.putAll(dimensionMemberDataExtendToMap(cubeMemberMappingModel,baseCloumnValue,subRowKey,profileId));
                                    }
                                }
//                              //主表字段关联出相关表数据 start
                                List<CubeMemberMappingModel> relationMemberMappingModels = cubeMemberMappingService.findRelationMemberMappingModels(table,baseCloumnCode);
                                if(relationMemberMappingModels != null && relationMemberMappingModels.size() > 0) {
                                    for (CubeMemberMappingModel cubeMemberMappingModel : relationMemberMappingModels) {
                                        //父级对象
                                        if(cubeMemberMappingModel.getChildSaveType() == 1 && cubeMemberMappingModel.getRelationSubFieldId() != null){
                                            DataSourcesTableModel dtm = dataSourcesTableFieldService.findDataSourcesTableModel(cubeMemberMappingModel.getDataFieldId());
                                            DataSourcesTableModel subDtm = dataSourcesTableFieldService.findDataSourcesTableModel(cubeMemberMappingModel.getRelationSubFieldId());
                                            if(dtm != null && subDtm != null){
                                                String value = jdbcBasicService.getEntityByRelationId(subDtm.getDatabaseName() ,subDtm.getTableCode(), dtm.getFieldCode(),subDtm.getFieldCode(),subDtm.getFieldType(),baseCloumnValue);
                                                if(StringUtils.isNotEmpty(value)){
                                                    String parentCode = cubeMemberMappingModel.getParentCode();
                                                    Map<String,Object> childMap = new HashMap<>();
                                                    childMap = dimensionMemberDataExtendToMap(cubeMemberMappingModel, value, null, profileId);
                                                    if(source.get(parentCode) != null ){
                                                        Map<String, Object> parentMap  = (Map<String, Object>) source.get(parentCode);
                                                        parentMap.putAll((Map<String, Object>)childMap.get(parentCode));
                                                        source.put(parentCode,parentMap);
                                                    }else {
                                                        source.put(parentCode,childMap.get(parentCode));
                                                    }
                                        System.out.println("维度code = " + cubeMappingModel.getDimensionCode() +  ",维度类型:" + cubeMappingModel.getDataType() + ",值=" + baseCloumnValue );
                                        if(cubeMappingModel.getParentId() == null){
                                            source.putAll(dimensionDataExtendToMap(cubeMappingModel, cubeMappingModel.getDimensionCode(), baseCloumnValue));
                                        }else { // 子集成员
                                            CubeMappingModel mappingModel = cubeMappingService.findParentDimension(cubeMappingModel.getParentId());
                                            String parentCode = mappingModel.getDimensionCode();
                                            cubeMappingModel.setParentCode(parentCode);
                                            cubeMappingModel.setChildSaveType(mappingModel.getChildSaveType());
                                            if(mappingModel != null){
                                                Map<String,Object> childMap = new HashMap<>();
                                                childMap = dimensionMemberDataExtendToMap(cubeMappingModel,baseCloumnValue,subRowKey,profileId);
                                                if(source.get(parentCode) != null ){
                                                    Map<String, Object> parentMap  = (Map<String, Object>) source.get(parentCode);
                                                    parentMap.putAll((Map<String, Object>)childMap.get(parentCode));
                                                    source.put(parentCode,parentMap);
                                                }else {
                                                    source.put(parentCode,childMap.get(parentCode));
                                                }
                                            }
                                        }
                                    }
                                }
@ -259,7 +198,7 @@ public class ElasticSearchDataProcessService {
                }
            }else if (action.contains(action_delAll)) {
                if (dataMap.containsKey("cubeId")) {
                    Cube cube = this.getIndexTypeById(cubeId);
                    Cube cube = cubeService.findOne(Integer.parseInt(cubeId));
                    if (null != cube) {
                        elasticSearchUtil.deleteByField(cube.getIndexName(), cube.getIndexType(), "_index", cube.getIndexName());
                    } else {
@ -285,6 +224,9 @@ public class ElasticSearchDataProcessService {
     */
    public Map<String,Object> dimensionDataExtendToMap(CubeMappingModel cubeMappingModel,String cloumnCode,String baseCloumnValue) throws Exception {
        String dataType = cubeMappingModel.getDataType();
        int dataGetType = cubeMappingModel.getDataGetType();
        String relationFieldId = cubeMappingModel.getRelationFieldId();
        String relationDataFieldId = cubeMappingModel.getRelationDataFieldId();
        String dict = cubeMappingModel.getDict();
        String algorithm = cubeMappingModel.getAlgorithm();
        Map<String, Object> source  = new HashMap<>();
@ -301,10 +243,9 @@ public class ElasticSearchDataProcessService {
//            }else{
//                source.put(cloumnCode,data);
//            }
            //年龄段
            if(algorithm.contains("AgeGroupFunc")){
                source = extendAgeGroupData(source,cloumnCode,dict,baseCloumnValue);
            }
        }else if(StringUtils.isNotEmpty(relationFieldId) && dataGetType == 3 ) {// 关联获取
            String value = relevanceFunc.getRelationFieldVal(relationDataFieldId, relationFieldId, baseCloumnValue);
            source.put(cloumnCode,value);
        }else {
            source.put(cloumnCode,dataConver(dataType,baseCloumnValue));
        }
@ -313,29 +254,35 @@ public class ElasticSearchDataProcessService {
    /**
     * 维度成员数据扩展 转map
     * @param cubeMemberMappingModel
     * @param cubeMappingModel
     * @param baseCloumnValue
     * @param subRowKey
     * @return
     */
    public Map<String,Object> dimensionMemberDataExtendToMap(CubeMemberMappingModel cubeMemberMappingModel,String baseCloumnValue,String subRowKey,String profileId) throws Exception {
        Map<String, Object> source  = new HashMap<>();
        String cloumnCode = cubeMemberMappingModel.getDimensionCode();
        String parentCode = cubeMemberMappingModel.getParentCode();
        String dataType = cubeMemberMappingModel.getDataType();
        String dict = cubeMemberMappingModel.getDict();
        String algorithm = cubeMemberMappingModel.getAlgorithm();
        String algorithmParm = cubeMemberMappingModel.getParm();
        int childSaveType = cubeMemberMappingModel.getChildSaveType();
        String index = cubeMemberMappingModel.getIndexName();
        String type = cubeMemberMappingModel.getIndexType();
        if(childSaveType == 1 ){//对象方式
            Map<String, Object> objChildMap  = new HashMap<>();
            if(StringUtils.isNotEmpty(dict)){
                objChildMap = extendDictData(objChildMap,cloumnCode,dict,baseCloumnValue);
                source.put(parentCode,objChildMap);
            }else if(StringUtils.isNotEmpty(algorithm)){
    public Map<String,Object> dimensionMemberDataExtendToMap(CubeMappingModel cubeMappingModel,String baseCloumnValue,String subRowKey,String profileId) throws Exception {
        try {
            int parentId = cubeMappingModel.getParentId();
            int childSaveType = cubeMappingModel.getChildSaveType();
            String parentCode = cubeMappingModel.getParentCode();
            Map<String, Object> source  = new HashMap<>();
            String cloumnCode = cubeMappingModel.getDimensionCode();
            String dataType = cubeMappingModel.getDataType();
            String dict = cubeMappingModel.getDict();
            String algorithm = cubeMappingModel.getAlgorithm();
            String algorithmParm = cubeMappingModel.getParm();
            String relationFieldId = cubeMappingModel.getRelationFieldId();
            int dataGetType = cubeMappingModel.getDataGetType();
            String index = cubeMappingModel.getIndexName();
            String type = cubeMappingModel.getIndexType();
            if(childSaveType == 1 ){//对象方式
                Map<String, Object> objChildMap  = new HashMap<>();
                if(StringUtils.isNotEmpty(dict)){
                    objChildMap = extendDictData(objChildMap,cloumnCode,dict,baseCloumnValue);
                    source.put(parentCode,objChildMap);
                }else if(StringUtils.isNotEmpty(algorithm) && dataGetType == 2){//算法获取
//                //通过 反射方式进行  后续开放 暂时字典redis不通
//                FuncHelper funcHelper = new FuncHelper();
//                algorithmParm = algorithmParm.replace("value",cloumnCode);
@ -345,34 +292,45 @@ public class ElasticSearchDataProcessService {
//                }else{
//                    objChildMap.put(cloumnCode,data);
//                }
                //区域算法
                if(algorithm.contains("DivisionFunc") && StringUtils.isNotEmpty(algorithmParm)){
                    objChildMap = extendDivisionData(objChildMap, cloumnCode, algorithmParm, baseCloumnValue);
                    source.put(parentCode,objChildMap);
                }else if(StringUtils.isNotEmpty(relationFieldId) && dataGetType == 3 ) {// 关联获取
                    String value = relevanceFunc.getRelationFieldVal(cubeMappingModel.getRelationDataFieldId(), relationFieldId, baseCloumnValue);
                    objChildMap.put(cloumnCode,dataConver(cubeMappingModel.getDataType(),value));
                }else {
                    objChildMap.put(cloumnCode,dataConver(dataType,baseCloumnValue));
                }
                source.put(parentCode,objChildMap);
            }else {
                objChildMap.put(cloumnCode,dataConver(dataType,baseCloumnValue));
            }
            source.put(parentCode,objChildMap);
        }else if(childSaveType == 2 ){//nested 方式
            //查找子集主键字段
            CubeMemberMapping primaryCubeMember = cubeMemberMappingService.findCubeMemberMappingPrimary(cubeMemberMappingModel.getCubeMappingId());
            String primaryKeyCode = "";
            if(primaryCubeMember != null ){
                primaryKeyCode = primaryCubeMember.getDimensionCode();
            }else {
                return null;
            }
            List<Map<String,Object>> nestedList = new ArrayList<>();
            //查出历史数据 然后组合保存
            Map<String, Object> oldMataMap = elasticSearchUtil.findById(index, type, profileId);
            if(oldMataMap != null && oldMataMap.size() > 0){
                //组装 子集历史数据,更改当前字段值 在添加
                List<Map<String, Object>> childList = (List<Map<String, Object>>)oldMataMap.get(parentCode);
                if(childList != null && childList.size() > 0){
                    boolean isexist = false;
                    for(Map<String, Object> map : childList){
                        if(subRowKey.equals(map.get(primaryKeyCode).toString())){
            }else if(childSaveType == 2 ){//nested 方式
                CubeMappingModel cubeMappingModelPri = cubeMappingService.findCubeMappingPrimary(parentId);
                String primaryKeyCode = "";
                if(cubeMappingModelPri != null ){
                    primaryKeyCode = cubeMappingModelPri.getDimensionCode();
                }else {
                    return null;
                }
                List<Map<String,Object>> nestedList = new ArrayList<>();
                //查出历史数据 然后组合保存
                Map<String, Object> oldMataMap = elasticSearchUtil.findById(index, type, profileId);
                if(oldMataMap != null && oldMataMap.size() > 0){
                    //组装 子集历史数据,更改当前字段值 在添加
                    List<Map<String, Object>> childList = (List<Map<String, Object>>)oldMataMap.get(parentCode);
                    if(childList != null && childList.size() > 0){
                        boolean isexist = false;
                        for(Map<String, Object> map : childList){
                            if(subRowKey.equals(map.get(primaryKeyCode).toString())){
                                map.put(primaryKeyCode,subRowKey);
                                map.put(cloumnCode,dataConver(dataType,baseCloumnValue));
                                if(StringUtils.isNotEmpty(dict)){
                                    map = extendDictData(map,cloumnCode,dict,baseCloumnValue);
                                }else if(StringUtils.isNotEmpty(algorithm)){
                                    //其他算法 反射方式 todo
                                }
                                isexist = true;
                            }
                            nestedList.add(map);
                        }
                        if( !isexist){
                            Map<String,Object> map = new HashMap<>();
                            map.put(primaryKeyCode,subRowKey);
                            map.put(cloumnCode,dataConver(dataType,baseCloumnValue));
                            if(StringUtils.isNotEmpty(dict)){
@ -380,34 +338,24 @@ public class ElasticSearchDataProcessService {
                            }else if(StringUtils.isNotEmpty(algorithm)){
                                //其他算法
                            }
                            isexist = true;
                            nestedList.add(map);
                        }
                        nestedList.add(map);
                    }
                    if( !isexist){
                        source.put(parentCode, nestedList);
                    }else{
                        Map<String,Object> map = new HashMap<>();
                        map.put(primaryKeyCode,subRowKey);
                        map.put(cloumnCode,dataConver(dataType,baseCloumnValue));
                        if(StringUtils.isNotEmpty(dict)){
                            map = extendDictData(map,cloumnCode,dict,baseCloumnValue);
                        }else if(StringUtils.isNotEmpty(algorithm)){
                            //其他算法
                        }
                        nestedList.add(map);
                        source.put(parentCode, nestedList);
                    }
                    source.put(parentCode, nestedList);
                }else{
                    Map<String,Object> map = new HashMap<>();
                    map.put(primaryKeyCode,subRowKey);
                    map.put(cloumnCode,dataConver(dataType,baseCloumnValue));
                    nestedList.add(map);
                    source.put(parentCode, nestedList);
                    throw new Exception("没有找到数据,无法更新");
                }
            }else{
                throw new Exception("没有找到数据,无法更新");
            }
            return source;
        }catch (Exception e){
           throw e;
        }
        return source;
    }
    /**
@ -429,56 +377,56 @@ public class ElasticSearchDataProcessService {
        return source;
    }
    /**
     * 年龄扩展年龄段 及年龄段字典
     * @param source 数据集合
     * @param cloumnCode 列code
     * @param dict 字典ID
     * @param sourceValue 年龄
     * @return
     */
    public Map<String, Object> extendAgeGroupData(Map<String, Object> source ,String cloumnCode,String dict,String sourceValue){
        String value = "";
        DictFunc dictFunc = new DictFunc();
        AgeGroupFunc ageGroupFunc = new AgeGroupFunc();
        String ageGroup = ageGroupFunc.execute(Integer.valueOf(sourceValue));
        String param[] = {dict,ageGroup};
//      value = dictFunc.execute(param);
        value = "年龄段=" + ageGroup;
        if(StringUtils.isNotEmpty(dict)){
            source.put(cloumnCode,ageGroup);
            source.put(cloumnCode + "Name",value);
        }
        return source;
    }
//    /**
//     * 年龄扩展年龄段 及年龄段字典
//     * @param source 数据集合
//     * @param cloumnCode 列code
//     * @param dict 字典ID
//     * @param sourceValue 年龄
//     * @return
//     */
//    public Map<String, Object> extendAgeGroupData(Map<String, Object> source ,String cloumnCode,String dict,String sourceValue){
//        String value = "";
//        DictFunc dictFunc = new DictFunc();
//        AgeGroupFunc ageGroupFunc = new AgeGroupFunc();
//        String ageGroup = ageGroupFunc.execute(Integer.valueOf(sourceValue));
//        String param[] = {dict,ageGroup};
////      value = dictFunc.execute(param);
//        value = "年龄段=" + ageGroup;
//        if(StringUtils.isNotEmpty(dict)){
//            source.put(cloumnCode,ageGroup);
//            source.put(cloumnCode + "Name",value);
//        }
//        return source;
//    }
    /**
     * 区域扩展
     * @param source 数据集合
     * @param cloumnCode 列code
     * @param algorithmParm 算法参数
     * @param sourceValue 年龄
     * @return
     */
    public Map<String, Object> extendDivisionData(Map<String, Object> source ,String cloumnCode,String algorithmParm,String sourceValue){
        DivisionFunc divisionFunc = new DivisionFunc();
        String level = "1";
        String divisionVal = "";
        if(cloumnCode.toLowerCase().equals("town")){
            level = "1";
            divisionVal = "婺源县";
        }else if(cloumnCode.toLowerCase().equals("city")){
            level = "2";
            divisionVal = "上饶市";
        }else if(cloumnCode.toLowerCase().equals("province")){
            level = "3";
            divisionVal = "江西省";
        }
        String divisionParam[] = {sourceValue,level};
//      divisionVal = divisionFunc.execute(divisionParam);
        source.put(cloumnCode,divisionVal);
        return source;
    }
//    /**
//     * 区域扩展
//     * @param source 数据集合
//     * @param cloumnCode 列code
//     * @param algorithmParm 算法参数
//     * @param sourceValue 年龄
//     * @return
//     */
//    public Map<String, Object> extendDivisionData(Map<String, Object> source ,String cloumnCode,String algorithmParm,String sourceValue){
//        DivisionFunc divisionFunc = new DivisionFunc();
//        String level = "1";
//        String divisionVal = "";
//        if(cloumnCode.toLowerCase().equals("town")){
//            level = "1";
//            divisionVal = "婺源县";
//        }else if(cloumnCode.toLowerCase().equals("city")){
//            level = "2";
//            divisionVal = "上饶市";
//        }else if(cloumnCode.toLowerCase().equals("province")){
//            level = "3";
//            divisionVal = "江西省";
//        }
//        String divisionParam[] = {sourceValue,level};
////      divisionVal = divisionFunc.execute(divisionParam);
//        source.put(cloumnCode,divisionVal);
//        return source;
//    }
    /**
@ -536,6 +484,7 @@ public class ElasticSearchDataProcessService {
                    }else {
                        dateValue = DateUtil.parseDate(keyValue, DateUtil.DEFAULT_DATE_YMD_FORMAT);
                    }
                    System.out.println("keyval=" + keyValue + ",dateVal=" + dateValue);
                    //es 保存是少8小时
                    Calendar ca = Calendar.getInstance();
                    ca.setTime(dateValue);
@ -558,14 +507,4 @@ public class ElasticSearchDataProcessService {
        return "";
    }
    /**
     * 根据数据集id获取索引名和索引类型
     * @param cubeId
     * @return
     */
    public Cube getIndexTypeById(String cubeId) {
        Cube cube = cubeService.findOne(Integer.parseInt(cubeId));
        return cube;
    }
}

+ 0 - 19
src/main/java/com/yihu/quota/service/dimension/DimensionMemberService.java

@ -1,19 +0,0 @@
package com.yihu.quota.service.dimension;
import com.yihu.ehr.query.BaseJpaService;
import com.yihu.quota.dao.dimension.DimensionMemberDao;
import com.yihu.quota.model.dimension.Dimension;
import com.yihu.quota.model.dimension.DimensionMember;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * Created by wxw on 2018/9/7.
 * @author wxw
 */
@Service
public class DimensionMemberService extends BaseJpaService<DimensionMember, DimensionMemberDao> {
    }

+ 4 - 7
src/main/java/com/yihu/quota/service/dimension/DimensionService.java

@ -2,13 +2,10 @@ package com.yihu.quota.service.dimension;
import com.yihu.ehr.query.BaseJpaService;
import com.yihu.quota.dao.dimension.DimensionDao;
import com.yihu.quota.dao.dimension.DimensionMemberDao;
import com.yihu.quota.model.dimension.Dimension;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
 * Created by wxw on 2018/9/7.
@ -19,8 +16,6 @@ public class DimensionService extends BaseJpaService<Dimension, DimensionDao> {
    @Autowired
    private DimensionDao dimensionDao;
    @Autowired
    private DimensionMemberDao dimensionMemberDao;
    /**
     * 保存接口
@ -34,8 +29,10 @@ public class DimensionService extends BaseJpaService<Dimension, DimensionDao> {
    public void deleteDimension(Integer id) {
        dimensionDao.delete(id);
        // 同时删掉隶属于该维度的成员
        dimensionMemberDao.deleteByDimensionId(id);
    }
    public Dimension findOne(int id){
        return  dimensionDao.findOne(id);
    }
}

+ 2 - 2
src/main/java/com/yihu/quota/service/source/DataSourcesTableFieldService.java

@ -50,11 +50,11 @@ public class DataSourcesTableFieldService extends BaseJpaService<DataSourcesTabl
     * @param fieldId 关联字段
     * @return
     */
    public DataSourcesTableModel findDataSourcesTableModel(int fieldId) {
    public DataSourcesTableModel findDataSourcesTableModel(String fieldId) {
        String sql = "SELECT odstf.*,odst.table_code,odst.database_name from olap_data_sources_table_field odstf  " +
                " LEFT JOIN olap_data_sources_table odst on odst.id = odstf.table_id " +
                " WHERE odstf.id = ? ";
        String param[] = {String.valueOf(fieldId)};
        String param[] = {fieldId};
        List<DataSourcesTableModel> cubeMemberMappingModels = jdbcTemplate.query(sql, new BeanPropertyRowMapper(DataSourcesTableModel.class), param);
        if(cubeMemberMappingModels != null && cubeMemberMappingModels.size() > 0){
            return  cubeMemberMappingModels.get(0);

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

@ -7,7 +7,7 @@ public class CubeMappingModel {
    private Integer id;
    private Integer cubeId;            //多维数据集ID
    private Integer dataFieldId;      //s数据库字段
    private Integer dataFieldId;      //数据库字段
    private Integer dimensionId;      //维度ID
    private String dimensionCode;    //维度编码
    private String fieldName;        //字段名称
@ -17,26 +17,16 @@ public class CubeMappingModel {
    private String dataType;        //数据类型
    private Integer childSaveType; //子集映射格式类型 1 对象 2 子集
    private String fieldCode;        //字段编码
    private Integer dataGetType;        //数据获取方式 1 直接获取 2 算法方式获取  3关联获取(一对一关联不支持一对多关联) 默认为一
    private String relationFieldId;    //关联主键字段
    private String relationDataFieldId; //关联表数据关联字段ID
    private String indexName;
    private String indexType;
    private String dataGetType;        //数据获取方式 1 直接获取 2 关联获取(一对一关联不支持一对多关联) 默认为一
    private String relationFieldId;    //关联主键字段
    public String getDataGetType() {
        return dataGetType;
    }
    private String basedata;
    private String table;
    private Integer parentId;
    private String parentCode;
    public void setDataGetType(String dataGetType) {
        this.dataGetType = dataGetType;
    }
    public String getRelationFieldId() {
        return relationFieldId;
    }
    public void setRelationFieldId(String relationFieldId) {
        this.relationFieldId = relationFieldId;
    }
    public Integer getId() {
        return id;
@ -86,10 +76,6 @@ public class CubeMappingModel {
        this.fieldName = fieldName;
    }
    public String getDataType() {
        return dataType;
    }
    public String getDict() {
        return dict;
    }
@ -98,6 +84,26 @@ public class CubeMappingModel {
        this.dict = dict;
    }
    public String getAlgorithm() {
        return algorithm;
    }
    public void setAlgorithm(String algorithm) {
        this.algorithm = algorithm;
    }
    public String getParm() {
        return parm;
    }
    public void setParm(String parm) {
        this.parm = parm;
    }
    public String getDataType() {
        return dataType;
    }
    public void setDataType(String dataType) {
        this.dataType = dataType;
    }
@ -118,20 +124,12 @@ public class CubeMappingModel {
        this.fieldCode = fieldCode;
    }
    public String getAlgorithm() {
        return algorithm;
    public Integer getParentId() {
        return parentId;
    }
    public void setAlgorithm(String algorithm) {
        this.algorithm = algorithm;
    }
    public String getParm() {
        return parm;
    }
    public void setParm(String parm) {
        this.parm = parm;
    public void setParentId(Integer parentId) {
        this.parentId = parentId;
    }
    public String getIndexName() {
@ -149,4 +147,52 @@ public class CubeMappingModel {
    public void setIndexType(String indexType) {
        this.indexType = indexType;
    }
    public Integer getDataGetType() {
        return dataGetType;
    }
    public void setDataGetType(Integer dataGetType) {
        this.dataGetType = dataGetType;
    }
    public String getRelationFieldId() {
        return relationFieldId;
    }
    public void setRelationFieldId(String relationFieldId) {
        this.relationFieldId = relationFieldId;
    }
    public String getBasedata() {
        return basedata;
    }
    public void setBasedata(String basedata) {
        this.basedata = basedata;
    }
    public String getTable() {
        return table;
    }
    public void setTable(String table) {
        this.table = table;
    }
    public String getRelationDataFieldId() {
        return relationDataFieldId;
    }
    public void setRelationDataFieldId(String relationDataFieldId) {
        this.relationDataFieldId = relationDataFieldId;
    }
    public String getParentCode() {
        return parentCode;
    }
    public void setParentCode(String parentCode) {
        this.parentCode = parentCode;
    }
}

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

@ -1,197 +0,0 @@
package com.yihu.quota.vo;
/**
 * Created by janseny on 2018/9/19.
 */
public class CubeMemberMappingModel {
    private Integer id;
    private Integer cubeMappingId;    //多维数据集维度ID
    private Integer dataFieldId;      //字段名
    private Integer dimensionMemberId;//维度成员ID
    private String dimensionCode;    //维度编码
    private String fieldName;        //字段名称
    private String algorithm;       // 中间算法
    private String parm;            //中间算法参数
    private String dataType;        //数据类型
    private String dict;            //数据字典
    private String fieldCode;      //字段编码
    private String parentCode;      //父级属性code
    private Integer childSaveType;
    private String indexName;
    private String indexType;
    private Integer isPrimarykey;  //是否指定唯一字段 1是 0 否
    private String dataGetType;        //数据获取方式 1 直接获取 2 关联获取(一对一关联不支持一对多关联) 默认为一
    private String relationFieldId;    //关联主键字段
    private Integer relationSubFieldId;    //关联细表主键字段
    private String basedata;
    private String table;
    public String getDataGetType() {
        return dataGetType;
    }
    public void setDataGetType(String dataGetType) {
        this.dataGetType = dataGetType;
    }
    public String getRelationFieldId() {
        return relationFieldId;
    }
    public void setRelationFieldId(String relationFieldId) {
        this.relationFieldId = relationFieldId;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public Integer getCubeMappingId() {
        return cubeMappingId;
    }
    public void setCubeMappingId(Integer cubeMappingId) {
        this.cubeMappingId = cubeMappingId;
    }
    public Integer getDataFieldId() {
        return dataFieldId;
    }
    public void setDataFieldId(Integer dataFieldId) {
        this.dataFieldId = dataFieldId;
    }
    public Integer getDimensionMemberId() {
        return dimensionMemberId;
    }
    public void setDimensionMemberId(Integer dimensionMemberId) {
        this.dimensionMemberId = dimensionMemberId;
    }
    public String getDimensionCode() {
        return dimensionCode;
    }
    public void setDimensionCode(String dimensionCode) {
        this.dimensionCode = dimensionCode;
    }
    public String getFieldName() {
        return fieldName;
    }
    public void setFieldName(String fieldName) {
        this.fieldName = fieldName;
    }
    public String getDataType() {
        return dataType;
    }
    public void setDataType(String dataType) {
        this.dataType = dataType;
    }
    public String getDict() {
        return dict;
    }
    public void setDict(String dict) {
        this.dict = dict;
    }
    public String getFieldCode() {
        return fieldCode;
    }
    public void setFieldCode(String fieldCode) {
        this.fieldCode = fieldCode;
    }
    public String getAlgorithm() {
        return algorithm;
    }
    public void setAlgorithm(String algorithm) {
        this.algorithm = algorithm;
    }
    public String getParm() {
        return parm;
    }
    public void setParm(String parm) {
        this.parm = parm;
    }
    public String getParentCode() {
        return parentCode;
    }
    public void setParentCode(String parentCode) {
        this.parentCode = parentCode;
    }
    public Integer getChildSaveType() {
        return childSaveType;
    }
    public void setChildSaveType(Integer childSaveType) {
        this.childSaveType = childSaveType;
    }
    public String getIndexName() {
        return indexName;
    }
    public void setIndexName(String indexName) {
        this.indexName = indexName;
    }
    public String getIndexType() {
        return indexType;
    }
    public void setIndexType(String indexType) {
        this.indexType = indexType;
    }
    public Integer getIsPrimarykey() {
        return isPrimarykey;
    }
    public void setIsPrimarykey(Integer isPrimarykey) {
        this.isPrimarykey = isPrimarykey;
    }
    public Integer getRelationSubFieldId() {
        return relationSubFieldId;
    }
    public void setRelationSubFieldId(Integer relationSubFieldId) {
        this.relationSubFieldId = relationSubFieldId;
    }
    public String getBasedata() {
        return basedata;
    }
    public void setBasedata(String basedata) {
        this.basedata = basedata;
    }
    public String getTable() {
        return table;
    }
    public void setTable(String table) {
        this.table = table;
    }
}