From 9d270315430c694238f9601931eb37abeec37af8 Mon Sep 17 00:00:00 2001 From: daikon <1059907724@qq.com> Date: Fri, 8 Mar 2024 13:16:15 +0800 Subject: [PATCH] add TagTest and correctDateConf logic (#797) --- .../supersonic/common/pojo/ItemDateResp.java | 2 + .../headless/server/rest/TagController.java | 46 +++++++++ .../service/impl/TagQueryServiceImpl.java | 38 ++++++- .../tencent/supersonic/headless/TagTest.java | 98 +++++++++++++++++++ 4 files changed, 181 insertions(+), 3 deletions(-) create mode 100644 launchers/standalone/src/test/java/com/tencent/supersonic/headless/TagTest.java diff --git a/common/src/main/java/com/tencent/supersonic/common/pojo/ItemDateResp.java b/common/src/main/java/com/tencent/supersonic/common/pojo/ItemDateResp.java index 4b1ec2eba..4cd941a0c 100644 --- a/common/src/main/java/com/tencent/supersonic/common/pojo/ItemDateResp.java +++ b/common/src/main/java/com/tencent/supersonic/common/pojo/ItemDateResp.java @@ -2,11 +2,13 @@ package com.tencent.supersonic.common.pojo; import java.util.List; import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; import lombok.ToString; @Data @AllArgsConstructor +@Builder @ToString public class ItemDateResp { diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/TagController.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/TagController.java index e462fb924..a0e9c01c2 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/TagController.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/TagController.java @@ -35,6 +35,14 @@ public class TagController { this.tagQueryService = tagQueryService; } + /** + * 新建标签 + * @param tagReq + * @param request + * @param response + * @return + * @throws Exception + */ @PostMapping("/create") public TagResp create(@RequestBody TagReq tagReq, HttpServletRequest request, @@ -43,6 +51,14 @@ public class TagController { return tagMetaService.create(tagReq, user); } + /** + * 编辑标签信息 + * @param tagReq + * @param request + * @param response + * @return + * @throws Exception + */ @PostMapping("/update") public TagResp update(@RequestBody TagReq tagReq, HttpServletRequest request, @@ -51,6 +67,13 @@ public class TagController { return tagMetaService.update(tagReq, user); } + /** + * 批量更新标签状态 + * @param metaBatchReq + * @param request + * @param response + * @return + */ @PostMapping("/batchUpdateStatus") public Boolean batchUpdateStatus(@RequestBody MetaBatchReq metaBatchReq, HttpServletRequest request, @@ -59,6 +82,14 @@ public class TagController { return tagMetaService.batchUpdateStatus(metaBatchReq, user); } + /** + * 标签删除 + * @param id + * @param request + * @param response + * @return + * @throws Exception + */ @DeleteMapping("delete/{id}") public Boolean delete(@PathVariable("id") Long id, HttpServletRequest request, @@ -68,6 +99,13 @@ public class TagController { return true; } + /** + * 标签详情获取 + * @param id + * @param request + * @param response + * @return + */ @GetMapping("getTag/{id}") public TagResp getTag(@PathVariable("id") Long id, HttpServletRequest request, @@ -76,6 +114,14 @@ public class TagController { return tagMetaService.getTag(id, user); } + /** + * 标签市场-分页查询 + * @param tagFilterPage + * @param request + * @param response + * @return + * @throws Exception + */ @PostMapping("/queryTag") public PageInfo queryPage(@RequestBody TagFilterPage tagFilterPage, HttpServletRequest request, diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/TagQueryServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/TagQueryServiceImpl.java index 8e9dcaa6e..2e7c20974 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/TagQueryServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/TagQueryServiceImpl.java @@ -6,19 +6,25 @@ import com.tencent.supersonic.common.pojo.Aggregator; import com.tencent.supersonic.common.pojo.DateConf; import com.tencent.supersonic.common.pojo.Order; import com.tencent.supersonic.common.pojo.enums.AggOperatorEnum; +import com.tencent.supersonic.headless.api.pojo.Dim; import com.tencent.supersonic.headless.api.pojo.SchemaElementType; import com.tencent.supersonic.headless.api.pojo.ValueDistribution; import com.tencent.supersonic.headless.api.pojo.request.ItemValueReq; import com.tencent.supersonic.headless.api.pojo.request.QueryTagReq; import com.tencent.supersonic.headless.api.pojo.response.ItemValueResp; +import com.tencent.supersonic.headless.api.pojo.response.ModelResp; import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp; import com.tencent.supersonic.headless.api.pojo.response.TagResp; +import com.tencent.supersonic.headless.server.service.ModelService; import com.tencent.supersonic.headless.server.service.QueryService; import com.tencent.supersonic.headless.server.service.TagMetaService; import com.tencent.supersonic.headless.server.service.TagQueryService; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -30,13 +36,19 @@ import static com.tencent.supersonic.common.pojo.Constants.DESC_UPPER; @Service public class TagQueryServiceImpl implements TagQueryService { + @Value("${item.value.date.before:1}") + private Integer dayBefore; + private final String tagValueAlias = "internalTagCount"; private final TagMetaService tagMetaService; private final QueryService queryService; + private final ModelService modelService; - public TagQueryServiceImpl(TagMetaService tagMetaService, QueryService queryService) { + public TagQueryServiceImpl(TagMetaService tagMetaService, QueryService queryService, + ModelService modelService) { this.tagMetaService = tagMetaService; this.queryService = queryService; + this.modelService = modelService; } @Override @@ -47,6 +59,7 @@ public class TagQueryServiceImpl implements TagQueryService { TagResp tag = tagMetaService.getTag(itemValueReq.getItemId(), user); itemValueResp.setName(tag.getName()); itemValueResp.setBizName(tag.getBizName()); + correctDateConf(itemValueReq, tag); // tag total count Long totalCount = queryTagTotalCount(tag, itemValueReq, user); // tag value @@ -56,6 +69,26 @@ public class TagQueryServiceImpl implements TagQueryService { return itemValueResp; } + private void correctDateConf(ItemValueReq itemValueReq, TagResp tag) { + if (Objects.nonNull(itemValueReq.getDateConf())) { + return; + } + ModelResp model = modelService.getModel(tag.getModelId()); + List timeDimension = model.getTimeDimension(); + if (CollectionUtils.isEmpty(timeDimension)) { + return; + } + + Dim dim = timeDimension.get(0); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern(dim.getDateFormat()); + String endDate = LocalDate.now().plusDays(-dayBefore).format(formatter); + DateConf dateConf = new DateConf(); + dateConf.setDateMode(DateConf.DateMode.BETWEEN); + dateConf.setStartDate(endDate); + dateConf.setEndDate(endDate); + itemValueReq.setDateConf(dateConf); + } + private Long queryTagTotalCount(TagResp tag, ItemValueReq itemValueReq, User user) throws Exception { QueryTagReq queryTagReq = new QueryTagReq(); @@ -74,8 +107,7 @@ public class TagQueryServiceImpl implements TagQueryService { return Long.parseLong(total.toString()); } } - - return Long.MAX_VALUE; + throw new RuntimeException("queryTagTotalCount error"); } private void fillTagValueInfo(ItemValueResp itemValueResp, SemanticQueryResp semanticQueryResp, Long totalCount) { diff --git a/launchers/standalone/src/test/java/com/tencent/supersonic/headless/TagTest.java b/launchers/standalone/src/test/java/com/tencent/supersonic/headless/TagTest.java new file mode 100644 index 000000000..0c4d21f1f --- /dev/null +++ b/launchers/standalone/src/test/java/com/tencent/supersonic/headless/TagTest.java @@ -0,0 +1,98 @@ +package com.tencent.supersonic.headless; + + +import com.tencent.supersonic.auth.api.authentication.pojo.User; +import com.tencent.supersonic.common.pojo.enums.TypeEnums; +import com.tencent.supersonic.headless.api.pojo.TagDefineParams; +import com.tencent.supersonic.headless.api.pojo.enums.TagDefineType; +import com.tencent.supersonic.headless.api.pojo.request.ItemValueReq; +import com.tencent.supersonic.headless.api.pojo.request.TagReq; +import com.tencent.supersonic.headless.api.pojo.response.TagResp; +import com.tencent.supersonic.headless.server.pojo.TagFilter; +import com.tencent.supersonic.headless.server.service.TagMetaService; +import com.tencent.supersonic.headless.server.service.TagQueryService; +import org.junit.Assert; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.ArrayList; +import java.util.Arrays; + +public class TagTest extends BaseTest { + + private final String bizName = "page"; + private final Long modelId = 3L; + private final Integer dimId = 3; + + @Autowired + private TagMetaService tagMetaService; + @Autowired + private TagQueryService tagQueryService; + + @Test + void testCreateTag() { + TagReq tagReq = newTagReq(); + tagMetaService.create(tagReq, User.getFakeUser()); + + TagResp tag = queryTagRespByBizName(bizName); + Assert.assertEquals(bizName, tag.getBizName()); + tagMetaService.delete(tag.getId(), User.getFakeUser()); + } + + @Test + void testUpdateTag() { + TagReq tagReq = newTagReq(); + TagResp tagResp = tagMetaService.create(tagReq, User.getFakeUser()); + Assert.assertEquals(bizName, tagReq.getBizName()); + tagReq.setId(tagResp.getId()); + tagReq.setName("新页面"); + tagMetaService.update(tagReq, User.getFakeUser()); + + TagResp tag = queryTagRespByBizName(bizName); + Assert.assertEquals("新页面", tag.getName()); + tagMetaService.delete(tag.getId(), User.getFakeUser()); + } + + private TagResp queryTagRespByBizName(String bizName) { + TagFilter tagFilter = new TagFilter(); + tagFilter.setBizName(bizName); + TagResp tagRespDb = tagMetaService.getTags(tagFilter).get(0); + return tagRespDb; + } + + private TagReq newTagReq() { + TagReq tagReq = new TagReq(); + tagReq.setModelId(modelId); + tagReq.setName("页面"); + tagReq.setBizName(bizName); + tagReq.setStatus(1); + tagReq.setTypeEnum(TypeEnums.TAG); + tagReq.setTagDefineType(TagDefineType.DIMENSION); + + TagDefineParams tagDefineParams = new TagDefineParams(); + tagDefineParams.setExpr(bizName); + tagDefineParams.setDependencies(new ArrayList<>(Arrays.asList(dimId))); + tagReq.setTagDefineParams(tagDefineParams); + return tagReq; + } + + @Test + void testQueryTag() { + TagReq tagReq = newTagReq(); + tagMetaService.create(tagReq, User.getFakeUser()); + TagResp tag = queryTagRespByBizName(bizName); + Assert.assertEquals(bizName, tag.getBizName()); + tagMetaService.delete(tag.getId(), User.getFakeUser()); + } + + @Test + void testTagValue() throws Exception { + TagReq tagReq = newTagReq(); + tagMetaService.create(tagReq, User.getFakeUser()); + TagResp tag = queryTagRespByBizName(bizName); + ItemValueReq itemValueReq = new ItemValueReq(); + itemValueReq.setItemId(tag.getId()); + tagMetaService.delete(tag.getId(), User.getFakeUser()); + } + +} \ No newline at end of file