|
@@ -1,14 +1,30 @@
|
|
|
package cn.com.yusys.yusp.service.impl;
|
|
package cn.com.yusys.yusp.service.impl;
|
|
|
|
|
|
|
|
|
|
+import cn.com.yusys.yusp.commons.util.StringUtils;
|
|
|
|
|
+import cn.com.yusys.yusp.commons.util.date.DateUtils;
|
|
|
|
|
+import cn.com.yusys.yusp.domain.vo.VersionRollbackVo;
|
|
|
|
|
+import cn.com.yusys.yusp.mapper.AitagTagInfoVersionDao;
|
|
|
|
|
+import cn.com.yusys.yusp.domain.dto.TagInfoDto;
|
|
|
|
|
+import cn.com.yusys.yusp.domain.entity.AitagTagInfoVersionEntity;
|
|
|
|
|
+import cn.com.yusys.yusp.domain.vo.TagNodeVo;
|
|
|
import cn.com.yusys.yusp.mapper.AitagTagInfoDao;
|
|
import cn.com.yusys.yusp.mapper.AitagTagInfoDao;
|
|
|
import cn.com.yusys.yusp.domain.entity.AitagTagInfoEntity;
|
|
import cn.com.yusys.yusp.domain.entity.AitagTagInfoEntity;
|
|
|
import cn.com.yusys.yusp.domain.vo.AitagTagInfoQueryVo;
|
|
import cn.com.yusys.yusp.domain.vo.AitagTagInfoQueryVo;
|
|
|
import cn.com.yusys.yusp.service.AitagTagInfoService;
|
|
import cn.com.yusys.yusp.service.AitagTagInfoService;
|
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
+
|
|
|
|
|
+import java.util.*;
|
|
|
|
|
+
|
|
|
|
|
+import static cn.com.yusys.yusp.config.DataDictionary.*;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
*
|
|
*
|
|
@@ -20,6 +36,10 @@ import org.springframework.stereotype.Service;
|
|
|
@Service("aitagTagInfoService")
|
|
@Service("aitagTagInfoService")
|
|
|
public class AitagTagInfoServiceImpl extends ServiceImpl<AitagTagInfoDao, AitagTagInfoEntity> implements AitagTagInfoService {
|
|
public class AitagTagInfoServiceImpl extends ServiceImpl<AitagTagInfoDao, AitagTagInfoEntity> implements AitagTagInfoService {
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private AitagTagInfoVersionDao aitagTagInfoVersionDao;
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 分页查询
|
|
* 分页查询
|
|
|
*
|
|
*
|
|
@@ -44,8 +64,8 @@ public class AitagTagInfoServiceImpl extends ServiceImpl<AitagTagInfoDao, AitagT
|
|
|
if (aitagTagInfoQueryVo.getTagRemark() != null) {
|
|
if (aitagTagInfoQueryVo.getTagRemark() != null) {
|
|
|
queryWrapper.eq(AitagTagInfoEntity::getTagRemark, aitagTagInfoQueryVo.getTagRemark());
|
|
queryWrapper.eq(AitagTagInfoEntity::getTagRemark, aitagTagInfoQueryVo.getTagRemark());
|
|
|
}
|
|
}
|
|
|
- if (aitagTagInfoQueryVo.getParentCode() != null) {
|
|
|
|
|
- queryWrapper.eq(AitagTagInfoEntity::getParentCode, aitagTagInfoQueryVo.getParentCode());
|
|
|
|
|
|
|
+ if (aitagTagInfoQueryVo.getparentId() != null) {
|
|
|
|
|
+ queryWrapper.eq(AitagTagInfoEntity::getParentId, aitagTagInfoQueryVo.getparentId());
|
|
|
}
|
|
}
|
|
|
if (aitagTagInfoQueryVo.getReg() != null) {
|
|
if (aitagTagInfoQueryVo.getReg() != null) {
|
|
|
queryWrapper.eq(AitagTagInfoEntity::getReg, aitagTagInfoQueryVo.getReg());
|
|
queryWrapper.eq(AitagTagInfoEntity::getReg, aitagTagInfoQueryVo.getReg());
|
|
@@ -69,4 +89,184 @@ public class AitagTagInfoServiceImpl extends ServiceImpl<AitagTagInfoDao, AitagT
|
|
|
IPage<AitagTagInfoEntity> page = this.page(new Page<>(aitagTagInfoQueryVo.getPage(), aitagTagInfoQueryVo.getSize()), queryWrapper);
|
|
IPage<AitagTagInfoEntity> page = this.page(new Page<>(aitagTagInfoQueryVo.getPage(), aitagTagInfoQueryVo.getSize()), queryWrapper);
|
|
|
return page;
|
|
return page;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void saveTag(AitagTagInfoEntity aitagTagInfo){
|
|
|
|
|
+ aitagTagInfo.setId(StringUtils.getUUID());
|
|
|
|
|
+ String parentId = aitagTagInfo.getParentId();
|
|
|
|
|
+ if(!StringUtils.isBlank(parentId)){
|
|
|
|
|
+ LambdaQueryWrapper<AitagTagInfoEntity> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
+ queryWrapper.eq(AitagTagInfoEntity::getParentId,parentId);
|
|
|
|
|
+ queryWrapper.eq(AitagTagInfoEntity::getIsDelete,TAG_UNDELETED);
|
|
|
|
|
+ List<AitagTagInfoEntity> aitagTagInfoEntities = this.baseMapper.selectList(queryWrapper);
|
|
|
|
|
+ if(!aitagTagInfoEntities.isEmpty()){
|
|
|
|
|
+ AitagTagInfoEntity aitagTagInfoEntity = aitagTagInfoEntities.get(0);
|
|
|
|
|
+ aitagTagInfo.setTagPath(aitagTagInfoEntity.getTagPath()+"/"+aitagTagInfo.getTagNm());
|
|
|
|
|
+ aitagTagInfo.setLevel(aitagTagInfoEntity.getLevel()+1);
|
|
|
|
|
+ }else{
|
|
|
|
|
+ aitagTagInfo.setTagPath(aitagTagInfo.getTagNm());
|
|
|
|
|
+ aitagTagInfo.setLevel(1);
|
|
|
|
|
+ }
|
|
|
|
|
+ }else{
|
|
|
|
|
+ aitagTagInfo.setTagPath(aitagTagInfo.getTagNm());
|
|
|
|
|
+ aitagTagInfo.setLevel(1);
|
|
|
|
|
+ }
|
|
|
|
|
+ aitagTagInfo.setRevisionTime(DateUtils.getCurrDateTimeStr());
|
|
|
|
|
+ aitagTagInfo.setTagVersion("0.1");
|
|
|
|
|
+ aitagTagInfo.setIsDelete(TAG_UNDELETED);
|
|
|
|
|
+ aitagTagInfo.setState(TAG_ENABLED);
|
|
|
|
|
+ this.save(aitagTagInfo);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 列表查询
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param aitagTagInfoQueryVo
|
|
|
|
|
+ * @return List<TagNodeVo>
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public List<TagNodeVo> queryTagTree(AitagTagInfoQueryVo aitagTagInfoQueryVo) {
|
|
|
|
|
+ LambdaQueryWrapper<AitagTagInfoEntity> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
+ if (aitagTagInfoQueryVo.getId() != null) {
|
|
|
|
|
+ queryWrapper.eq(AitagTagInfoEntity::getId, aitagTagInfoQueryVo.getId());
|
|
|
|
|
+ }
|
|
|
|
|
+ queryWrapper.eq(AitagTagInfoEntity::getCategoryId, aitagTagInfoQueryVo.getCategoryId());
|
|
|
|
|
+ if (aitagTagInfoQueryVo.getTagNm() != null) {
|
|
|
|
|
+ queryWrapper.like(AitagTagInfoEntity::getTagNm, aitagTagInfoQueryVo.getTagNm());
|
|
|
|
|
+ }
|
|
|
|
|
+ queryWrapper.eq(AitagTagInfoEntity::getIsDelete, TAG_UNDELETED);
|
|
|
|
|
+ List<AitagTagInfoEntity> aitagTagInfoEntities = this.baseMapper.selectList(queryWrapper);
|
|
|
|
|
+ return this.buildTree(aitagTagInfoEntities);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public TagInfoDto getTagInfo(String id) {
|
|
|
|
|
+ return this.baseMapper.selectTagInfo(id);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
|
|
+ public void updateTag(AitagTagInfoEntity aitagTagInfoEntity) {
|
|
|
|
|
+ AitagTagInfoEntity tagInfo = this.baseMapper.selectById(aitagTagInfoEntity.getId());
|
|
|
|
|
+ AitagTagInfoVersionEntity aitagTagInfoVersionEntity = JSON.parseObject(JSON.toJSONString(tagInfo), AitagTagInfoVersionEntity.class);
|
|
|
|
|
+ aitagTagInfoVersionEntity.setId(StringUtils.getUUID());
|
|
|
|
|
+ this.aitagTagInfoVersionDao.insert(aitagTagInfoVersionEntity);
|
|
|
|
|
+ aitagTagInfoEntity.setRevisionTime(DateUtils.getCurrDateTimeStr());
|
|
|
|
|
+ aitagTagInfoEntity.setTagVersion(Double.parseDouble(tagInfo.getTagVersion())+0.1+"");
|
|
|
|
|
+ this.baseMapper.updateById(aitagTagInfoEntity);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
|
|
+ public void removeTags(List<String> list) {
|
|
|
|
|
+ AitagTagInfoEntity aitagTagInfoEntity = new AitagTagInfoEntity();
|
|
|
|
|
+ for (String id:list){
|
|
|
|
|
+ aitagTagInfoEntity.setId(id);
|
|
|
|
|
+ aitagTagInfoEntity.setIsDelete(TAG_DELETED);
|
|
|
|
|
+ this.baseMapper.updateById(aitagTagInfoEntity);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
|
|
+ public void versionRollback(VersionRollbackVo versionRollback) {
|
|
|
|
|
+ LambdaQueryWrapper<AitagTagInfoVersionEntity> queryTagVersionWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
+ queryTagVersionWrapper.eq(AitagTagInfoVersionEntity::getTagCode,versionRollback.getTagCode());
|
|
|
|
|
+ queryTagVersionWrapper.eq(AitagTagInfoVersionEntity::getTagVersion,versionRollback.getVersion());
|
|
|
|
|
+ List<AitagTagInfoVersionEntity> versionEntities = this.aitagTagInfoVersionDao.selectList(queryTagVersionWrapper);
|
|
|
|
|
+ if(versionEntities !=null && !versionEntities.isEmpty()){
|
|
|
|
|
+ AitagTagInfoVersionEntity tagInfoVersion = versionEntities.get(0);
|
|
|
|
|
+ AitagTagInfoEntity aitagTagInfoEntity = JSON.parseObject(JSONObject.toJSONString(tagInfoVersion), AitagTagInfoEntity.class);
|
|
|
|
|
+ aitagTagInfoEntity.setId(versionRollback.getId());
|
|
|
|
|
+ aitagTagInfoEntity.setRevisionTime(DateUtils.getCurrDateTimeStr());
|
|
|
|
|
+ aitagTagInfoEntity.setReviser(versionRollback.getReviser());
|
|
|
|
|
+ this.baseMapper.updateById(aitagTagInfoEntity);
|
|
|
|
|
+ LambdaUpdateWrapper<AitagTagInfoVersionEntity> updateTagVersion = new LambdaUpdateWrapper<>();
|
|
|
|
|
+ updateTagVersion.eq(AitagTagInfoVersionEntity::getTagCode,versionRollback.getTagCode());
|
|
|
|
|
+ updateTagVersion.ge(AitagTagInfoVersionEntity::getTagVersion,versionRollback.getVersion());
|
|
|
|
|
+ AitagTagInfoVersionEntity aitagTagInfoVersionEntity = new AitagTagInfoVersionEntity();
|
|
|
|
|
+ aitagTagInfoVersionEntity.setIsDelete(TAG_DELETED);
|
|
|
|
|
+ this.aitagTagInfoVersionDao.update(aitagTagInfoVersionEntity,updateTagVersion);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public List<AitagTagInfoEntity> queryList(AitagTagInfoQueryVo aitagTagInfoQueryVo) {
|
|
|
|
|
+ LambdaQueryWrapper<AitagTagInfoEntity> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
|
|
+ if (aitagTagInfoQueryVo.getId() != null) {
|
|
|
|
|
+ queryWrapper.eq(AitagTagInfoEntity::getId, aitagTagInfoQueryVo.getId());
|
|
|
|
|
+ }
|
|
|
|
|
+ if (aitagTagInfoQueryVo.getCategoryId() != null) {
|
|
|
|
|
+ queryWrapper.eq(AitagTagInfoEntity::getCategoryId, aitagTagInfoQueryVo.getCategoryId());
|
|
|
|
|
+ }
|
|
|
|
|
+ if (aitagTagInfoQueryVo.getTagNm() != null) {
|
|
|
|
|
+ queryWrapper.eq(AitagTagInfoEntity::getTagNm, aitagTagInfoQueryVo.getTagNm());
|
|
|
|
|
+ }
|
|
|
|
|
+ if (aitagTagInfoQueryVo.getTagCode() != null) {
|
|
|
|
|
+ queryWrapper.eq(AitagTagInfoEntity::getTagCode, aitagTagInfoQueryVo.getTagCode());
|
|
|
|
|
+ }
|
|
|
|
|
+ if (aitagTagInfoQueryVo.getTagRemark() != null) {
|
|
|
|
|
+ queryWrapper.eq(AitagTagInfoEntity::getTagRemark, aitagTagInfoQueryVo.getTagRemark());
|
|
|
|
|
+ }
|
|
|
|
|
+ if (aitagTagInfoQueryVo.getparentId() != null) {
|
|
|
|
|
+ queryWrapper.eq(AitagTagInfoEntity::getParentId, aitagTagInfoQueryVo.getparentId());
|
|
|
|
|
+ }
|
|
|
|
|
+ if (aitagTagInfoQueryVo.getReg() != null) {
|
|
|
|
|
+ queryWrapper.eq(AitagTagInfoEntity::getReg, aitagTagInfoQueryVo.getReg());
|
|
|
|
|
+ }
|
|
|
|
|
+ if (aitagTagInfoQueryVo.getLevel() != null) {
|
|
|
|
|
+ queryWrapper.eq(AitagTagInfoEntity::getLevel, aitagTagInfoQueryVo.getLevel());
|
|
|
|
|
+ }
|
|
|
|
|
+ if (aitagTagInfoQueryVo.getTagPath() != null) {
|
|
|
|
|
+ queryWrapper.eq(AitagTagInfoEntity::getTagPath, aitagTagInfoQueryVo.getTagPath());
|
|
|
|
|
+ }
|
|
|
|
|
+ if (aitagTagInfoQueryVo.getIsDelete() != null) {
|
|
|
|
|
+ queryWrapper.eq(AitagTagInfoEntity::getIsDelete, aitagTagInfoQueryVo.getIsDelete());
|
|
|
|
|
+ }
|
|
|
|
|
+ if (aitagTagInfoQueryVo.getState() != null) {
|
|
|
|
|
+ queryWrapper.eq(AitagTagInfoEntity::getState, aitagTagInfoQueryVo.getState());
|
|
|
|
|
+ }
|
|
|
|
|
+ if (aitagTagInfoQueryVo.getTagPrompt() != null) {
|
|
|
|
|
+ queryWrapper.eq(AitagTagInfoEntity::getTagPrompt, aitagTagInfoQueryVo.getTagPrompt());
|
|
|
|
|
+ }
|
|
|
|
|
+ queryWrapper.select(AitagTagInfoEntity::getId,AitagTagInfoEntity::getTagNm,AitagTagInfoEntity::getParentId);
|
|
|
|
|
+ return this.baseMapper.selectList(queryWrapper);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 将AitagTagInfoEntity列表转换为树形结构
|
|
|
|
|
+ * @param entities AitagTagInfoEntity列表
|
|
|
|
|
+ * @return 树形结构的根节点列表
|
|
|
|
|
+ */
|
|
|
|
|
+ private List<TagNodeVo> buildTree(List<AitagTagInfoEntity> entities) {
|
|
|
|
|
+ List<TagNodeVo> rootNodes = new ArrayList<>();
|
|
|
|
|
+ Map<String, TagNodeVo> nodeMap = new HashMap<>();
|
|
|
|
|
+
|
|
|
|
|
+ // 首先创建所有节点并放入map
|
|
|
|
|
+ for (AitagTagInfoEntity entity : entities) {
|
|
|
|
|
+ TagNodeVo node = new TagNodeVo(entity);
|
|
|
|
|
+ nodeMap.put(entity.getId(), node);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 构建树形结构
|
|
|
|
|
+ for (AitagTagInfoEntity entity : entities) {
|
|
|
|
|
+ TagNodeVo currentNode = nodeMap.get(entity.getId());
|
|
|
|
|
+ String parentId = entity.getParentId();
|
|
|
|
|
+
|
|
|
|
|
+ // 如果parentId为null或空,则为根节点
|
|
|
|
|
+ if (parentId == null || parentId.isEmpty()) {
|
|
|
|
|
+ rootNodes.add(currentNode);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 查找父节点并添加为子节点
|
|
|
|
|
+ TagNodeVo parentNode = nodeMap.get(parentId);
|
|
|
|
|
+ if (parentNode != null) {
|
|
|
|
|
+ parentNode.addChild(currentNode);
|
|
|
|
|
+ }else{
|
|
|
|
|
+ rootNodes.add(currentNode);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ return rootNodes;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|