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 aef5d66c1..7912be900 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 @@ -41,6 +41,7 @@ public class SchemaElement implements Serializable { private String description; private boolean descriptionMapped; @Builder.Default private Map extInfo = new HashMap<>(); + private DimensionTimeTypeParams typeParams; @Override public boolean equals(Object o) { diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/DimensionReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/DimensionReq.java index ed6a7fc15..5e62fcf68 100644 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/DimensionReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/DimensionReq.java @@ -4,6 +4,7 @@ import javax.validation.constraints.NotNull; import com.tencent.supersonic.common.pojo.enums.DataTypeEnums; import com.tencent.supersonic.headless.api.pojo.DimValueMap; +import com.tencent.supersonic.headless.api.pojo.DimensionTimeTypeParams; import com.tencent.supersonic.headless.api.pojo.SchemaItem; import lombok.Data; @@ -34,4 +35,6 @@ public class DimensionReq extends SchemaItem { private int isTag; private Map ext; + + private DimensionTimeTypeParams typeParams; } diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/DimensionResp.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/DimensionResp.java index ea7692b7f..b5c70830d 100644 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/DimensionResp.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/DimensionResp.java @@ -2,6 +2,7 @@ package com.tencent.supersonic.headless.api.pojo.response; import com.tencent.supersonic.common.pojo.enums.DataTypeEnums; import com.tencent.supersonic.headless.api.pojo.DimValueMap; +import com.tencent.supersonic.headless.api.pojo.DimensionTimeTypeParams; import com.tencent.supersonic.headless.api.pojo.SchemaItem; import com.tencent.supersonic.headless.api.pojo.enums.DimensionType; import lombok.Data; @@ -39,6 +40,8 @@ public class DimensionResp extends SchemaItem { private int isTag; + private DimensionTimeTypeParams typeParams; + private Map ext = new HashMap<>(); public boolean isTimeDimension() { diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DimensionServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DimensionServiceImpl.java index e79a3fd1b..f5d32ccce 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DimensionServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DimensionServiceImpl.java @@ -45,17 +45,14 @@ import com.tencent.supersonic.headless.server.utils.DimensionConverter; import com.tencent.supersonic.headless.server.utils.NameCheckUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.builder.EqualsBuilder; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; @Service @@ -121,13 +118,32 @@ public class DimensionServiceImpl extends ServiceImpl nameMap = dimensionResps.stream() .collect(Collectors.toMap(DimensionResp::getName, a -> a, (k1, k2) -> k1)); - List dimensionToInsert = - dimensionReqs.stream() - .filter( - dimension -> - !bizNameMap.containsKey(dimension.getBizName()) - && !nameMap.containsKey(dimension.getName())) - .collect(Collectors.toList()); + + List dimensionToInsert = Lists.newArrayList(); + dimensionReqs.stream() + .forEach( + dimension -> { + if (!bizNameMap.containsKey(dimension.getBizName()) + && !nameMap.containsKey(dimension.getName())) { + dimensionToInsert.add(dimension); + } else { + DimensionResp dimensionRespByBizName = + bizNameMap.get(dimension.getBizName()); + DimensionResp dimensionRespByName = + nameMap.get(dimension.getName()); + if (null != dimensionRespByBizName + && isChange(dimension, dimensionRespByBizName)) { + dimension.setId(dimensionRespByBizName.getId()); + this.updateDimension(dimension, user); + } else { + if (null != dimensionRespByName + && isChange(dimension, dimensionRespByName)) { + dimension.setId(dimensionRespByName.getId()); + this.updateDimension(dimension, user); + } + } + } + }); if (CollectionUtils.isEmpty(dimensionToInsert)) { return; } @@ -481,4 +497,14 @@ public class DimensionServiceImpl extends ServiceImpl