diff --git a/common/src/main/java/com/tencent/supersonic/common/util/DateUtils.java b/common/src/main/java/com/tencent/supersonic/common/util/DateUtils.java index 1b2007ed9..5ab669aa4 100644 --- a/common/src/main/java/com/tencent/supersonic/common/util/DateUtils.java +++ b/common/src/main/java/com/tencent/supersonic/common/util/DateUtils.java @@ -16,6 +16,7 @@ import java.time.temporal.TemporalAdjuster; import java.time.temporal.TemporalAdjusters; import java.util.ArrayList; import java.util.Arrays; +import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Objects; @@ -201,6 +202,13 @@ public class DateUtils { return false; } + public static Long calculateDiffMs(Date createAt) { + Calendar calendar = Calendar.getInstance(); + Date now = calendar.getTime(); + long milliseconds = now.getTime() - createAt.getTime(); + return milliseconds; + } + public static boolean isDateString(String value, String format) { try { DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format); diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/ValueTaskQueryReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/ValueTaskQueryReq.java new file mode 100644 index 000000000..f425ff261 --- /dev/null +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/ValueTaskQueryReq.java @@ -0,0 +1,23 @@ +package com.tencent.supersonic.headless.api.pojo.request; + +import javax.validation.constraints.NotNull; + +import com.tencent.supersonic.common.pojo.PageBaseReq; +import lombok.Data; + +import java.util.List; + +/** + * @author: kanedai + * @date: 2024/11/24 + */ +@Data +public class ValueTaskQueryReq extends PageBaseReq { + + @NotNull + private Long itemId; + + private List taskStatusList; + + private String key; +} diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/DictRepository.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/DictRepository.java index 37008166c..66adedbb0 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/DictRepository.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/DictRepository.java @@ -2,6 +2,7 @@ package com.tencent.supersonic.headless.server.persistence.repository; import com.tencent.supersonic.headless.api.pojo.request.DictItemFilter; import com.tencent.supersonic.headless.api.pojo.request.DictSingleTaskReq; +import com.tencent.supersonic.headless.api.pojo.request.ValueTaskQueryReq; import com.tencent.supersonic.headless.api.pojo.response.DictItemResp; import com.tencent.supersonic.headless.api.pojo.response.DictTaskResp; import com.tencent.supersonic.headless.server.persistence.dataobject.DictConfDO; @@ -26,4 +27,6 @@ public interface DictRepository { DictTaskDO queryDictTaskById(Long id); DictTaskResp queryLatestDictTask(DictSingleTaskReq taskReq); + + List queryAllDictTask(ValueTaskQueryReq taskQueryReq); } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/impl/DictRepositoryImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/impl/DictRepositoryImpl.java index 1abaa39eb..55ffe1d11 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/impl/DictRepositoryImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/impl/DictRepositoryImpl.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.tencent.supersonic.common.pojo.enums.TypeEnums; import com.tencent.supersonic.headless.api.pojo.request.DictItemFilter; import com.tencent.supersonic.headless.api.pojo.request.DictSingleTaskReq; +import com.tencent.supersonic.headless.api.pojo.request.ValueTaskQueryReq; import com.tencent.supersonic.headless.api.pojo.response.DictItemResp; import com.tencent.supersonic.headless.api.pojo.response.DictTaskResp; import com.tencent.supersonic.headless.api.pojo.response.DimensionResp; @@ -14,11 +15,14 @@ import com.tencent.supersonic.headless.server.persistence.mapper.DictTaskMapper; import com.tencent.supersonic.headless.server.persistence.repository.DictRepository; import com.tencent.supersonic.headless.server.service.DimensionService; import com.tencent.supersonic.headless.server.utils.DictUtils; +import com.xkzhangsan.time.utils.CollectionUtil; import lombok.extern.slf4j.Slf4j; +import org.codehaus.plexus.util.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Repository; import org.springframework.util.CollectionUtils; +import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Objects; @@ -100,6 +104,23 @@ public class DictRepositoryImpl implements DictRepository { return taskResp; } + @Override + public List queryAllDictTask(ValueTaskQueryReq taskQueryReq) { + QueryWrapper wrapper = new QueryWrapper<>(); + if (Objects.nonNull(taskQueryReq.getItemId())) { + wrapper.lambda().eq(DictTaskDO::getItemId, taskQueryReq.getItemId()); + } + if (CollectionUtil.isNotEmpty(taskQueryReq.getTaskStatusList())) { + wrapper.lambda().in(DictTaskDO::getStatus, taskQueryReq.getTaskStatusList()); + } + if (StringUtils.isNotEmpty(taskQueryReq.getKey())) { + String key = taskQueryReq.getKey(); + wrapper.lambda().and(qw -> qw.like(DictTaskDO::getName, key).or() + .like(DictTaskDO::getDescription, key).or().like(DictTaskDO::getConfig, key)); + } + return dictTaskMapper.selectList(wrapper); + } + @Override public Long addDictConf(DictConfDO dictConfDO) { dictConfMapper.insert(dictConfDO); diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/KnowledgeController.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/KnowledgeController.java index 7ce9e6d4c..e813e496b 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/KnowledgeController.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/KnowledgeController.java @@ -13,6 +13,7 @@ import com.tencent.supersonic.headless.api.pojo.request.DictItemFilter; import com.tencent.supersonic.headless.api.pojo.request.DictItemReq; import com.tencent.supersonic.headless.api.pojo.request.DictSingleTaskReq; import com.tencent.supersonic.headless.api.pojo.request.DictValueReq; +import com.tencent.supersonic.headless.api.pojo.request.ValueTaskQueryReq; import com.tencent.supersonic.headless.api.pojo.response.DictItemResp; import com.tencent.supersonic.headless.api.pojo.response.DictTaskResp; import com.tencent.supersonic.headless.api.pojo.response.DictValueDimResp; @@ -132,6 +133,18 @@ public class KnowledgeController { return taskService.queryLatestDictTask(taskReq, user); } + /** + * queryDictTask-分页返回维度的字典任务列表 + * + * @param taskQueryReq + */ + @PostMapping("/task/search/page") + public PageInfo queryDictTask(@RequestBody ValueTaskQueryReq taskQueryReq, + HttpServletRequest request, HttpServletResponse response) { + User user = UserHolder.findUser(request, response); + return taskService.queryDictTask(taskQueryReq, user); + } + @GetMapping("/embedding/reload") public Object reloadEmbedding() { metaEmbeddingTask.reloadMetaEmbedding(); diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/DictTaskService.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/DictTaskService.java index 9e2bee6cb..6e66641ac 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/DictTaskService.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/DictTaskService.java @@ -4,6 +4,7 @@ import com.github.pagehelper.PageInfo; import com.tencent.supersonic.common.pojo.User; import com.tencent.supersonic.headless.api.pojo.request.DictSingleTaskReq; import com.tencent.supersonic.headless.api.pojo.request.DictValueReq; +import com.tencent.supersonic.headless.api.pojo.request.ValueTaskQueryReq; import com.tencent.supersonic.headless.api.pojo.response.DictTaskResp; import com.tencent.supersonic.headless.api.pojo.response.DictValueDimResp; @@ -17,6 +18,8 @@ public interface DictTaskService { DictTaskResp queryLatestDictTask(DictSingleTaskReq taskReq, User user); + PageInfo queryDictTask(ValueTaskQueryReq taskQueryReq, User user); + PageInfo queryDictValue(DictValueReq dictValueReq, User user); String queryDictFilePath(DictValueReq dictValueReq, User user); diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DictTaskServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DictTaskServiceImpl.java index d83e8e2de..da70b7de0 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DictTaskServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DictTaskServiceImpl.java @@ -1,15 +1,18 @@ package com.tencent.supersonic.headless.server.service.impl; +import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.tencent.supersonic.common.pojo.Constants; import com.tencent.supersonic.common.pojo.User; import com.tencent.supersonic.common.pojo.enums.StatusEnum; import com.tencent.supersonic.common.pojo.enums.TaskStatusEnum; import com.tencent.supersonic.common.util.BeanMapper; +import com.tencent.supersonic.common.util.DateUtils; import com.tencent.supersonic.headless.api.pojo.DimValueMap; import com.tencent.supersonic.headless.api.pojo.request.DictItemFilter; import com.tencent.supersonic.headless.api.pojo.request.DictSingleTaskReq; import com.tencent.supersonic.headless.api.pojo.request.DictValueReq; +import com.tencent.supersonic.headless.api.pojo.request.ValueTaskQueryReq; import com.tencent.supersonic.headless.api.pojo.response.DictItemResp; import com.tencent.supersonic.headless.api.pojo.response.DictTaskResp; import com.tencent.supersonic.headless.api.pojo.response.DictValueDimResp; @@ -116,14 +119,17 @@ public class DictTaskServiceImpl implements DictTaskService { fileHandler.writeFile(data, fileName, false); // 3.Change in-memory dictionary data in real time + String status = TaskStatusEnum.SUCCESS.getStatus(); try { dictWordService.loadDictWord(); - - dictTaskDO.setStatus(TaskStatusEnum.SUCCESS.getStatus()); - dictRepository.editDictTask(dictTaskDO); } catch (Exception e) { log.error("reloadCustomDictionary error", e); + status = TaskStatusEnum.ERROR.getStatus(); + dictTaskDO.setDescription(e.toString()); } + dictTaskDO.setStatus(status); + dictTaskDO.setElapsedMs(DateUtils.calculateDiffMs(dictTaskDO.getCreatedAt())); + dictRepository.editDictTask(dictTaskDO); } @Override @@ -164,6 +170,17 @@ public class DictTaskServiceImpl implements DictTaskService { return dictRepository.queryLatestDictTask(taskReq); } + @Override + public PageInfo queryDictTask(ValueTaskQueryReq taskQueryReq, User user) { + PageInfo dictTaskDOPageInfo = + PageHelper.startPage(taskQueryReq.getCurrent(), taskQueryReq.getPageSize()) + .doSelectPageInfo(() -> dictRepository.queryAllDictTask(taskQueryReq)); + PageInfo dictTaskRespPageInfo = new PageInfo<>(); + BeanMapper.mapper(dictTaskDOPageInfo, dictTaskRespPageInfo); + dictTaskRespPageInfo.setList(dictConverter.taskDO2Resp(dictTaskDOPageInfo.getList())); + return dictTaskRespPageInfo; + } + @Override public PageInfo queryDictValue(DictValueReq dictValueReq, User user) { // todo 优化读取内存结构 diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DictUtils.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DictUtils.java index aa3fb47bd..e3d76bf97 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DictUtils.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/DictUtils.java @@ -34,6 +34,7 @@ import com.tencent.supersonic.headless.server.service.DimensionService; import com.tencent.supersonic.headless.server.service.MetricService; import com.tencent.supersonic.headless.server.service.ModelService; import com.tencent.supersonic.headless.server.service.TagMetaService; +import com.xkzhangsan.time.utils.CollectionUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; @@ -533,4 +534,12 @@ public class DictUtils { resp.setConfig(JsonUtil.toObject(dictTaskDO.getConfig(), ItemValueConfig.class)); return resp; } + + public List taskDO2Resp(List dictTaskDOList) { + List dictTaskRespList = new ArrayList<>(); + if (CollectionUtil.isNotEmpty(dictTaskDOList)) { + dictTaskDOList.stream().forEach(taskDO -> dictTaskRespList.add(taskDO2Resp(taskDO))); + } + return dictTaskRespList; + } }