[improvement](headless) add batchUpdateStatus and opt deleteCollectionIndicators (#779)

This commit is contained in:
daikon
2024-03-01 14:29:39 +08:00
committed by GitHub
parent 2052352611
commit 93534afc35
12 changed files with 146 additions and 25 deletions

View File

@@ -8,4 +8,6 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper
public interface TagCustomMapper { public interface TagCustomMapper {
List<TagDO> query(TagFilter tagFilter); List<TagDO> query(TagFilter tagFilter);
Boolean batchUpdateStatus(List<TagDO> tagDOList);
} }

View File

@@ -15,4 +15,6 @@ public interface TagRepository {
TagDO getTagById(Long id); TagDO getTagById(Long id);
List<TagDO> query(TagFilter tagFilter); List<TagDO> query(TagFilter tagFilter);
Boolean batchUpdateStatus(List<TagDO> tagDOList);
} }

View File

@@ -41,4 +41,9 @@ public class TagRepositoryImpl implements TagRepository {
public List<TagDO> query(TagFilter tagFilter) { public List<TagDO> query(TagFilter tagFilter) {
return tagCustomMapper.query(tagFilter); return tagCustomMapper.query(tagFilter);
} }
@Override
public Boolean batchUpdateStatus(List<TagDO> tagDOList) {
return tagCustomMapper.batchUpdateStatus(tagDOList);
}
} }

View File

@@ -33,9 +33,10 @@ public class CollectController {
HttpServletRequest request, HttpServletRequest request,
HttpServletResponse response) { HttpServletResponse response) {
User user = UserHolder.findUser(request, response); User user = UserHolder.findUser(request, response);
return collectService.createCollectionIndicators(user, collectDO.getId()); return collectService.createCollectionIndicators(user, collectDO);
} }
@Deprecated
@DeleteMapping("/deleteCollectionIndicators/{id}") @DeleteMapping("/deleteCollectionIndicators/{id}")
public boolean deleteCollectionIndicators(@PathVariable Long id, public boolean deleteCollectionIndicators(@PathVariable Long id,
HttpServletRequest request, HttpServletRequest request,
@@ -44,4 +45,12 @@ public class CollectController {
return collectService.deleteCollectionIndicators(user, id); return collectService.deleteCollectionIndicators(user, id);
} }
@PostMapping("/deleteCollectionIndicators")
public boolean deleteCollectionIndicators(@RequestBody CollectDO collectDO,
HttpServletRequest request,
HttpServletResponse response) {
User user = UserHolder.findUser(request, response);
return collectService.deleteCollectionIndicators(user, collectDO);
}
} }

View File

@@ -3,6 +3,7 @@ package com.tencent.supersonic.headless.server.rest;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.auth.api.authentication.pojo.User;
import com.tencent.supersonic.auth.api.authentication.utils.UserHolder; import com.tencent.supersonic.auth.api.authentication.utils.UserHolder;
import com.tencent.supersonic.headless.api.pojo.request.MetaBatchReq;
import com.tencent.supersonic.headless.api.pojo.request.TagReq; import com.tencent.supersonic.headless.api.pojo.request.TagReq;
import com.tencent.supersonic.headless.api.pojo.response.TagResp; import com.tencent.supersonic.headless.api.pojo.response.TagResp;
import com.tencent.supersonic.headless.server.pojo.TagFilterPage; import com.tencent.supersonic.headless.server.pojo.TagFilterPage;
@@ -42,6 +43,14 @@ public class TagController {
return tagService.update(tagReq, user); return tagService.update(tagReq, user);
} }
@PostMapping("/batchUpdateStatus")
public Boolean batchUpdateStatus(@RequestBody MetaBatchReq metaBatchReq,
HttpServletRequest request,
HttpServletResponse response) {
User user = UserHolder.findUser(request, response);
return tagService.batchUpdateStatus(metaBatchReq, user);
}
@DeleteMapping("delete/{id}") @DeleteMapping("delete/{id}")
public Boolean delete(@PathVariable("id") Long id, public Boolean delete(@PathVariable("id") Long id,
HttpServletRequest request, HttpServletRequest request,
@@ -55,7 +64,8 @@ public class TagController {
public TagResp getTag(@PathVariable("id") Long id, public TagResp getTag(@PathVariable("id") Long id,
HttpServletRequest request, HttpServletRequest request,
HttpServletResponse response) { HttpServletResponse response) {
return tagService.getTag(id); User user = UserHolder.findUser(request, response);
return tagService.getTag(id, user);
} }
@PostMapping("/queryTag") @PostMapping("/queryTag")

View File

@@ -10,10 +10,12 @@ import java.util.List;
public interface CollectService { public interface CollectService {
Boolean createCollectionIndicators(User user, Long id); Boolean createCollectionIndicators(User user, CollectDO collectDO);
Boolean deleteCollectionIndicators(User user, Long id); Boolean deleteCollectionIndicators(User user, Long id);
Boolean deleteCollectionIndicators(User user, CollectDO collectDO);
List<CollectDO> getCollectList(String username); List<CollectDO> getCollectList(String username);
} }

View File

@@ -2,6 +2,7 @@ package com.tencent.supersonic.headless.server.service;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.auth.api.authentication.pojo.User;
import com.tencent.supersonic.headless.api.pojo.request.MetaBatchReq;
import com.tencent.supersonic.headless.api.pojo.request.TagReq; import com.tencent.supersonic.headless.api.pojo.request.TagReq;
import com.tencent.supersonic.headless.api.pojo.response.TagResp; import com.tencent.supersonic.headless.api.pojo.response.TagResp;
import com.tencent.supersonic.headless.server.pojo.TagFilter; import com.tencent.supersonic.headless.server.pojo.TagFilter;
@@ -16,10 +17,11 @@ public interface TagService {
void delete(Long id, User user) throws Exception; void delete(Long id, User user) throws Exception;
TagResp getTag(Long id); TagResp getTag(Long id, User user);
List<TagResp> query(TagFilter tagFilter); List<TagResp> query(TagFilter tagFilter);
PageInfo<TagResp> queryPage(TagFilterPage tagFilterPage, User user); PageInfo<TagResp> queryPage(TagFilterPage tagFilterPage, User user);
Boolean batchUpdateStatus(MetaBatchReq metaBatchReq, User user);
} }

View File

@@ -7,6 +7,7 @@ import com.tencent.supersonic.headless.server.persistence.mapper.CollectMapper;
import com.tencent.supersonic.headless.server.service.CollectService; import com.tencent.supersonic.headless.server.service.CollectService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.util.Strings;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
@@ -22,12 +23,12 @@ public class CollectServiceImpl implements CollectService {
private CollectMapper collectMapper; private CollectMapper collectMapper;
@Override @Override
public Boolean createCollectionIndicators(User user, Long id) { public Boolean createCollectionIndicators(User user, CollectDO collectReq) {
CollectDO collectDO = new CollectDO(); CollectDO collect = new CollectDO();
collectDO.setType(type); collect.setType(Strings.isEmpty(collectReq.getType()) ? type : collectReq.getType());
collectDO.setUsername(user.getName()); collect.setUsername(user.getName());
collectDO.setCollectId(id); collect.setCollectId(collectReq.getId());
collectMapper.insert(collectDO); collectMapper.insert(collect);
return true; return true;
} }
@@ -41,6 +42,16 @@ public class CollectServiceImpl implements CollectService {
return true; return true;
} }
@Override
public Boolean deleteCollectionIndicators(User user, CollectDO collectReq) {
QueryWrapper<CollectDO> collectDOQueryWrapper = new QueryWrapper<>();
collectDOQueryWrapper.lambda().eq(CollectDO::getUsername, user.getName());
collectDOQueryWrapper.lambda().eq(CollectDO::getCollectId, collectReq.getCollectId());
collectDOQueryWrapper.lambda().eq(CollectDO::getType, collectReq.getType());
collectMapper.delete(collectDOQueryWrapper);
return true;
}
@Override @Override
public List<CollectDO> getCollectList(String username) { public List<CollectDO> getCollectList(String username) {
QueryWrapper<CollectDO> queryWrapper = new QueryWrapper<>(); QueryWrapper<CollectDO> queryWrapper = new QueryWrapper<>();

View File

@@ -11,6 +11,7 @@ import com.tencent.supersonic.common.pojo.enums.TypeEnums;
import com.tencent.supersonic.common.pojo.exception.InvalidArgumentException; import com.tencent.supersonic.common.pojo.exception.InvalidArgumentException;
import com.tencent.supersonic.headless.api.pojo.TagDefineParams; import com.tencent.supersonic.headless.api.pojo.TagDefineParams;
import com.tencent.supersonic.headless.api.pojo.enums.TagDefineType; import com.tencent.supersonic.headless.api.pojo.enums.TagDefineType;
import com.tencent.supersonic.headless.api.pojo.request.MetaBatchReq;
import com.tencent.supersonic.headless.api.pojo.request.TagReq; import com.tencent.supersonic.headless.api.pojo.request.TagReq;
import com.tencent.supersonic.headless.api.pojo.response.ModelResp; import com.tencent.supersonic.headless.api.pojo.response.ModelResp;
@@ -24,6 +25,7 @@ import com.tencent.supersonic.headless.server.service.CollectService;
import com.tencent.supersonic.headless.server.service.ModelService; import com.tencent.supersonic.headless.server.service.ModelService;
import com.tencent.supersonic.headless.server.service.TagService; import com.tencent.supersonic.headless.server.service.TagService;
import com.tencent.supersonic.headless.server.utils.NameCheckUtils; import com.tencent.supersonic.headless.server.utils.NameCheckUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Date; import java.util.Date;
@@ -32,6 +34,7 @@ import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@@ -102,8 +105,21 @@ public class TagServiceImpl implements TagService {
} }
@Override @Override
public TagResp getTag(Long id) { public TagResp getTag(Long id, User user) {
return convert(tagRepository.getTagById(id)); // return convert(tagRepository.getTagById(id));
TagDO tagDO = tagRepository.getTagById(id);
TagResp tagResp = fillCollectAndAdminInfo(tagDO, user);
return tagResp;
}
private TagResp fillCollectAndAdminInfo(TagDO tagDO, User user) {
List<Long> collectIds = collectService.getCollectList(user.getName())
.stream().filter(collectDO -> TypeEnums.TAG.name().equalsIgnoreCase(collectDO.getType()))
.map(CollectDO::getCollectId).collect(Collectors.toList());
List<TagResp> tagRespList = convertList(new ArrayList<>(Arrays.asList(tagDO)), collectIds);
fillAdminRes(tagRespList, user);
return tagRespList.get(0);
} }
@Override @Override
@@ -148,6 +164,30 @@ public class TagServiceImpl implements TagService {
return pageInfo; return pageInfo;
} }
@Override
public Boolean batchUpdateStatus(MetaBatchReq metaBatchReq, User user) {
if (Objects.isNull(metaBatchReq) || CollectionUtils.isEmpty(metaBatchReq.getIds())
|| Objects.isNull(metaBatchReq.getStatus())) {
return false;
}
TagFilter tagFilter = new TagFilter();
tagFilter.setIds(metaBatchReq.getIds());
List<TagDO> tagDOList = tagRepository.query(tagFilter);
if (CollectionUtils.isEmpty(tagDOList)) {
return true;
}
tagDOList.stream().forEach(tagDO -> {
tagDO.setStatus(metaBatchReq.getStatus());
tagDO.setUpdatedAt(new Date());
tagDO.setUpdatedBy(user.getName());
});
tagRepository.batchUpdateStatus(tagDOList);
// todo sendEventBatch
return true;
}
private void fillAdminRes(List<TagResp> tagRespList, User user) { private void fillAdminRes(List<TagResp> tagRespList, User user) {
List<ModelResp> modelRespList = modelService.getModelListWithAuth(user, null, AuthType.ADMIN); List<ModelResp> modelRespList = modelService.getModelListWithAuth(user, null, AuthType.ADMIN);
if (CollectionUtils.isEmpty(modelRespList)) { if (CollectionUtils.isEmpty(modelRespList)) {

View File

@@ -107,4 +107,14 @@
</if> </if>
</select> </select>
<update id="batchUpdateStatus" parameterType="java.util.List">
<foreach collection="list" item="tag" separator=";">
update s2_tag
set status = #{tag.status,jdbcType=INTEGER},
updated_at = #{tag.updatedAt,jdbcType=TIMESTAMP},
updated_by = #{tag.updatedBy,jdbcType=VARCHAR}
where id = #{tag.id,jdbcType=BIGINT}
</foreach>
</update>
</mapper> </mapper>

View File

@@ -213,3 +213,32 @@ CREATE TABLE s2_tag(
`ext` LONGVARCHAR DEFAULT NULL , `ext` LONGVARCHAR DEFAULT NULL ,
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
--20240301
CREATE TABLE IF NOT EXISTS `s2_dictionary_conf` (
`id` INT NOT NULL AUTO_INCREMENT,
`description` varchar(255) ,
`type` varchar(255) NOT NULL ,
`item_id` INT NOT NULL ,
`config` text ,
`status` varchar(255) NOT NULL ,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
`created_by` varchar(100) NOT NULL ,
PRIMARY KEY (`id`)
);
COMMENT ON TABLE s2_dictionary_conf IS 'dictionary conf information table';
CREATE TABLE IF NOT EXISTS `s2_dictionary_task` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL ,
`description` varchar(255) ,
`type` varchar(255) NOT NULL ,
`item_id` INT NOT NULL ,
`config` text ,
`status` varchar(255) NOT NULL ,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ,
`created_by` varchar(100) NOT NULL ,
`elapsed_ms` bigINT DEFAULT NULL ,
PRIMARY KEY (`id`)
);
COMMENT ON TABLE s2_dictionary_task IS 'dictionary task information table';

View File

@@ -205,29 +205,28 @@ CREATE TABLE IF NOT EXISTS `s2_dictionary_conf` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`description` varchar(255) , `description` varchar(255) ,
`type` varchar(255) NOT NULL , `type` varchar(255) NOT NULL ,
`item_id` INT NOT NULL , -- task Request Parameters md5 `item_id` INT NOT NULL ,
`config` mediumtext , -- remark related information `config` mediumtext ,
`status` varchar(255) NOT NULL , -- the final status of the task `status` varchar(255) NOT NULL ,
`created_at` datetime NOT NULL COMMENT '创建时间' , `created_at` datetime NOT NULL COMMENT '创建时间' ,
`created_by` varchar(100) NOT NULL , `created_by` varchar(100) NOT NULL ,
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
); ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='字典配置信息表';
COMMENT ON TABLE s2_dictionary_conf IS '字典配置信息表';
CREATE TABLE IF NOT EXISTS `s2_dictionary_task` ( CREATE TABLE IF NOT EXISTS `s2_dictionary_task` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL , -- task name `name` varchar(255) NOT NULL ,
`description` varchar(255) , `description` varchar(255) ,
`type` varchar(255) NOT NULL , `type` varchar(255) NOT NULL ,
`item_id` INT NOT NULL , -- task Request Parameters md5 `item_id` INT NOT NULL ,
`config` mediumtext , -- remark related information `config` mediumtext ,
`status` varchar(255) NOT NULL , -- the final status of the task `status` varchar(255) NOT NULL ,
`created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `created_at` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`created_by` varchar(100) NOT NULL , `created_by` varchar(100) NOT NULL ,
`elapsed_ms` int(10) DEFAULT NULL , -- the task takes time in milliseconds `elapsed_ms` int(10) DEFAULT NULL ,
PRIMARY KEY (`id`) PRIMARY KEY (`id`)
); ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='字典运行任务表';
COMMENT ON TABLE s2_dictionary_task IS 'dictionary task information table';
CREATE TABLE `s2_dimension` ( CREATE TABLE `s2_dimension` (