diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/SchemaElement.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/SchemaElement.java index 729b37a47..3d3156fda 100644 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/SchemaElement.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/SchemaElement.java @@ -84,14 +84,14 @@ public class SchemaElement implements Serializable { return false; } Object o = extInfo.get(DimensionConstants.DIMENSION_TYPE); - DimensionType dimensionTYpe = null; + DimensionType dimensionType = null; if (o instanceof DimensionType) { - dimensionTYpe = (DimensionType) o; + dimensionType = (DimensionType) o; } if (o instanceof String) { - dimensionTYpe = DimensionType.valueOf((String) o); + dimensionType = DimensionType.valueOf((String) o); } - return DimensionType.isIdentity(dimensionTYpe); + return DimensionType.isPrimaryKey(dimensionType); } public String getTimeFormat() { diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/enums/DimensionType.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/enums/DimensionType.java index 6362693a6..72f6eac45 100644 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/enums/DimensionType.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/enums/DimensionType.java @@ -1,7 +1,16 @@ package com.tencent.supersonic.headless.api.pojo.enums; public enum DimensionType { - categorical, time, partition_time, identify; + categorical, time, partition_time, primary_key, foreign_key; + + public static DimensionType fromIdentify(String identify) { + if (IdentifyType.foreign.name().equalsIgnoreCase(identify)) { + return DimensionType.foreign_key; + } else if (IdentifyType.primary.name().equalsIgnoreCase(identify)) { + return DimensionType.primary_key; + } + return DimensionType.categorical; + } public static boolean isTimeDimension(String type) { try { @@ -19,7 +28,7 @@ public enum DimensionType { return type == partition_time; } - public static boolean isIdentity(DimensionType type) { - return type == identify; + public static boolean isPrimaryKey(DimensionType type) { + return type == primary_key; } } diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/ModelResp.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/ModelResp.java index a540ea6a9..3677f5ceb 100644 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/ModelResp.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/ModelResp.java @@ -7,6 +7,7 @@ import com.tencent.supersonic.headless.api.pojo.Field; import com.tencent.supersonic.headless.api.pojo.Identify; import com.tencent.supersonic.headless.api.pojo.ModelDetail; import com.tencent.supersonic.headless.api.pojo.SchemaItem; +import com.tencent.supersonic.headless.api.pojo.enums.IdentifyType; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -95,6 +96,16 @@ public class ModelResp extends SchemaItem { return fieldSet; } + public IdentifyType getIdentifyType(String fieldName) { + List identifiers = modelDetail.getIdentifiers(); + for (Identify identify : identifiers) { + if (Objects.equals(identify.getFieldName(), fieldName)) { + return IdentifyType.valueOf(identify.getType()); + } + } + return null; + } + @Override public boolean equals(Object o) { if (this == o) { diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/ModelRelaServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/ModelRelaServiceImpl.java index 474916c35..b3aee1f98 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/ModelRelaServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/ModelRelaServiceImpl.java @@ -8,9 +8,14 @@ import com.tencent.supersonic.common.pojo.JoinCondition; import com.tencent.supersonic.common.pojo.ModelRela; import com.tencent.supersonic.common.pojo.User; import com.tencent.supersonic.common.util.BeanMapper; +import com.tencent.supersonic.headless.api.pojo.enums.IdentifyType; +import com.tencent.supersonic.headless.api.pojo.response.ModelResp; import com.tencent.supersonic.headless.server.persistence.dataobject.ModelRelaDO; import com.tencent.supersonic.headless.server.persistence.mapper.ModelRelaDOMapper; import com.tencent.supersonic.headless.server.service.ModelRelaService; +import com.tencent.supersonic.headless.server.service.ModelService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -21,8 +26,13 @@ import java.util.stream.Collectors; public class ModelRelaServiceImpl extends ServiceImpl implements ModelRelaService { + @Lazy + @Autowired + private ModelService modelService; + @Override public void save(ModelRela modelRela, User user) { + check(modelRela); modelRela.createdBy(user.getName()); ModelRelaDO modelRelaDO = convert(modelRela); save(modelRelaDO); @@ -30,11 +40,31 @@ public class ModelRelaServiceImpl extends ServiceImpl getModelRelaList(Long domainId) { QueryWrapper wrapper = new QueryWrapper<>(); diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DimensionConverter.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DimensionConverter.java index 28809821c..3e5244898 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DimensionConverter.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DimensionConverter.java @@ -116,7 +116,7 @@ public class DimensionConverter { try { // Support compatibility with legacy data. IdentifyType.valueOf(type.toLowerCase()); - return DimensionType.identify; + return DimensionType.primary_key; } catch (IllegalArgumentException e) { return DimensionType.valueOf(type); } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/ModelConverter.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/ModelConverter.java index eee4263c9..615fe1096 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/ModelConverter.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/ModelConverter.java @@ -152,7 +152,7 @@ public class ModelConverter { dimensionReq.setSemanticType(SemanticType.CATEGORY.name()); dimensionReq.setModelId(modelDO.getId()); dimensionReq.setExpr(identify.getBizName()); - dimensionReq.setType(DimensionType.identify.name()); + dimensionReq.setType(DimensionType.fromIdentify(identify.getType()).name()); return dimensionReq; } diff --git a/launchers/standalone/src/main/java/com/tencent/supersonic/demo/S2VisitsDemo.java b/launchers/standalone/src/main/java/com/tencent/supersonic/demo/S2VisitsDemo.java index b60a9b752..854614edf 100644 --- a/launchers/standalone/src/main/java/com/tencent/supersonic/demo/S2VisitsDemo.java +++ b/launchers/standalone/src/main/java/com/tencent/supersonic/demo/S2VisitsDemo.java @@ -224,7 +224,7 @@ public class S2VisitsDemo extends S2BaseDemo { modelReq.setAdminOrgs(Collections.emptyList()); List identifiers = new ArrayList<>(); ModelDetail modelDetail = new ModelDetail(); - identifiers.add(new Identify("用户名", IdentifyType.primary.name(), "user_name", 0)); + identifiers.add(new Identify("用户名", IdentifyType.foreign.name(), "user_name", 0)); modelDetail.setIdentifiers(identifiers); List dimensions = new ArrayList<>(); @@ -268,7 +268,7 @@ public class S2VisitsDemo extends S2BaseDemo { modelReq.setAdminOrgs(Collections.emptyList()); List identifiers = new ArrayList<>(); ModelDetail modelDetail = new ModelDetail(); - identifiers.add(new Identify("用户", IdentifyType.primary.name(), "user_name", 0)); + identifiers.add(new Identify("用户", IdentifyType.foreign.name(), "user_name", 0)); modelDetail.setIdentifiers(identifiers); List dimensions = new ArrayList<>();