package com.redxun.knowledge.service; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.redxun.common.base.db.BaseDao; import com.redxun.common.base.db.BaseService; import com.redxun.common.base.search.QueryFilter; import com.redxun.common.model.JPaasUser; import com.redxun.common.tool.IdGenerator; import com.redxun.common.service.impl.SuperServiceImpl; import com.redxun.common.tool.StringUtils; import com.redxun.knowledge.analysis.entity.vo.SearchParticipleWordCloudVo; import com.redxun.knowledge.analysis.service.AnalysisCommonServiceImpl; import com.redxun.knowledge.common.UserService; import com.redxun.knowledge.entity.dao.Banner; import com.redxun.knowledge.entity.dao.Knowledge; import com.redxun.knowledge.entity.dao.KnowledgeApprove; import com.redxun.knowledge.entity.dao.KnowledgeLabel; import com.redxun.knowledge.entity.vo.BannerAdminVo; import com.redxun.knowledge.entity.vo.KnowledgeLabelVo; import com.redxun.knowledge.mapper.KnowledgeLabelMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; import java.util.stream.Collectors; import javax.annotation.Resource; /** * [业务--知识标签表]业务服务类 */ @Service public class KnowledgeLabelServiceImpl extends SuperServiceImpl implements BaseService { @Resource private UserService userService; @Resource private KnowledgeLabelMapper knowledgeLabelMapper; @Autowired private AnalysisCommonServiceImpl analysisCommonService; @Override public BaseDao getRepository() { return knowledgeLabelMapper; } /** * 新增/修改标签数据 * * @param id 标签ID * @param name 标签名称 * @param sort 标签排序 * @return */ @Transactional(rollbackFor = Exception.class) public KnowledgeLabel saveOrUpdateTags(String id, String name, Integer sort) { KnowledgeLabel knowledgeLabel = new KnowledgeLabel(); if (StringUtils.isEmpty(id)) { //判断标签名是否重复 KnowledgeLabel knowledgeLabelName = this.baseMapper.selectOne(new QueryWrapper().eq("name", name)); if (ObjectUtils.isNotEmpty(knowledgeLabelName)) { throw new RuntimeException("标签名重复,请重新输入"); } knowledgeLabel.setPkId(IdGenerator.getIdStr()); knowledgeLabel.setCreateBy(userService.queryLoginUser()); knowledgeLabel.setCreateTime(new Date()); } else { //判断标签名是否重复 KnowledgeLabel knowledgeLabelName = this.baseMapper.selectOne(new QueryWrapper().eq("name", name).ne("PK_ID",id)); if (ObjectUtils.isNotEmpty(knowledgeLabelName)) { throw new RuntimeException("标签名重复,请重新输入"); } knowledgeLabel.setPkId(id); knowledgeLabel.setUpdateBy(userService.queryLoginUser()); knowledgeLabel.setCreateTime(new Date()); } knowledgeLabel.setName(name); knowledgeLabel.setSort(sort); // 更新sort knowledgeLabelMapper.adjustSort(sort); if (saveOrUpdate(knowledgeLabel)) { return knowledgeLabelMapper.selectById(knowledgeLabel.getPkId()); } return null; } public IPage findAllTags(QueryFilter filter) { IPage page = knowledgeLabelMapper.findAllTags(filter.getPage(), filter.getParams()); List knowledgeLabelVos = page.getRecords(); knowledgeLabelVos.forEach(e -> { JPaasUser user = userService.queryUser(e.getOperator()); if (user != null) { e.setOperatorName(user.getFullName()); } }); return page; } public List labels(Integer tops) { List labels = knowledgeLabelMapper.selectTops(tops); labels.forEach(e -> { JPaasUser user = userService.queryUser(e.getOperator()); if (user != null) { e.setOperatorName(user.getFullName()); } }); return labels; } /** * 调整知识标签排序位置 * * @param labelId 标签ID * @param status true 上升 false 下降 * @return */ @Transactional(rollbackFor = Exception.class) public void exchangePosition(String labelId, Boolean status) { KnowledgeLabel label = get(labelId); if (label == null) { return; } Integer sort = label.getSort(); KnowledgeLabel labelTarget = null; List labels = knowledgeLabelMapper.selectList(new QueryWrapper().eq("IS_DEL", 0).orderByAsc("SORT")); if (status) { // 上升 List collect = labels.stream().filter(e -> e.getSort() < sort).collect(Collectors.toList()); if (ObjectUtils.isNotEmpty(collect)) { labelTarget = collect.get(collect.size() - 1); } } else { // 下降 List collect = labels.stream().filter(e -> e.getSort() > sort).collect(Collectors.toList()); if (ObjectUtils.isNotEmpty(collect)) { labelTarget = collect.get(0); } } // 交换位置 if (labelTarget != null) { knowledgeLabelMapper.updateSort(labelId, labelTarget.getSort()); knowledgeLabelMapper.updateSort(labelTarget.getPkId(), sort); } } public String delLabel(String labelId) { knowledgeLabelMapper.delLabel(labelId); return labelId; } }