From e351a1c5414c8cdc10a1a478058ef748f81e53ac Mon Sep 17 00:00:00 2001 From: feelshana <151412598@qq.com> Date: Sat, 28 Sep 2024 09:36:49 +0800 Subject: [PATCH] (fix)(headless)fix the issue that the time schema in LllM is not matched with the sql which modifiedy by sqlAdaptor when the dateformat updated;also fix the issue that the model update is not effected on dimension(#1720)(1719) (#1725) --- .../headless/api/pojo/SchemaElement.java | 1 + .../api/pojo/request/DimensionReq.java | 3 ++ .../api/pojo/response/DimensionResp.java | 3 ++ .../service/impl/DimensionServiceImpl.java | 50 ++++++++++++++----- .../server/utils/DataSetSchemaBuilder.java | 28 +++++++---- .../server/utils/DimensionConverter.java | 9 ++++ .../headless/server/utils/ModelConverter.java | 1 + 7 files changed, 74 insertions(+), 21 deletions(-) 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