package com.ruoyi.system.service.impl.config;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.exception.ServiceException;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.system.api.constant.AppErrorConstant;
import com.ruoyi.system.api.domain.poji.config.SysTag;
import com.ruoyi.system.api.service.RemoteGoodsService;
import com.ruoyi.system.api.service.RemoteMemberService;
import com.ruoyi.system.api.service.RemoteShopService;
import com.ruoyi.system.domain.dto.MgtTagEditDto;
import com.ruoyi.system.domain.dto.MgtTagImportDto;
import com.ruoyi.system.domain.dto.MgtTagPageDto;
import com.ruoyi.system.domain.vo.MgtTagPageVo;
import com.ruoyi.system.mapper.config.SysTagMapper;
import com.ruoyi.system.service.config.SysTagService;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
*
* 系统标签 服务实现类
*
*
* @author jqs
* @since 2023-04-25
*/
@Service
public class SysTagServiceImpl extends ServiceImpl implements SysTagService {
@Resource
private SysTagMapper sysTagMapper;
@Resource
private RemoteGoodsService remoteGoodsService;
@Resource
private RemoteShopService remoteShopService;
@Resource
private RemoteMemberService remoteMemberService;
/**
* 通过id获取系统标签
* @param tagId
* @return
*/
@Override
public SysTag getByTagId(Long tagId){
return this.getById(tagId);
}
/**
* 通过type获取系统标签列表
* @param tagType
* @return
*/
@Override
public List listByType(Integer tagType){
LambdaQueryWrapper queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(SysTag::getDelFlag, 0).eq(SysTag::getTagType, 1);
List sysTagsList = this.list(queryWrapper);
return sysTagsList;
}
/**
* @description 标签管理
* @author jqs
* @date 2023/6/8 14:09
* @param page
* @param mgtTagPageDto
* @return List
*/
@Override
public List pageTag(Page page, MgtTagPageDto mgtTagPageDto){
return sysTagMapper.pageTag(page, mgtTagPageDto);
}
/**
* @description 修改标签
* @author jqs
* @date 2023/6/8 15:01
* @param mgtTagEditDto
* @return void
*/
@Override
public void editTag(MgtTagEditDto mgtTagEditDto){
// 创建LambdaQueryWrapper对象,用于构建查询条件
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysTag::getDelFlag, 0) // 查询条件:delFlag=0
.eq(SysTag::getTagType, mgtTagEditDto.getTagType()) // 查询条件:tagType=mgtTagEditDto的tagType属性
.eq(SysTag::getTagName, mgtTagEditDto.getTagName()); // 查询条件:tagName=mgtTagEditDto的tagName属性
// 执行查询,获取与查询条件匹配的SysTag对象
SysTag sysTagSame = this.getOne(queryWrapper);
// 获取mgtTagEditDto的tagId属性
Long tagId = mgtTagEditDto.getTagId();
// 定义SysTag对象
SysTag sysTag;
if (tagId != null) { // 如果tagId不为空
// 如果存在同类名同分类类型的分类,但是分类ID不同,抛出异常
if (sysTagSame != null && !Objects.equals(sysTagSame.getTagId(), tagId)) {
throw new ServiceException(AppErrorConstant.TAG_DOUBLE);
}
// 根据tagId获取要修改的分类
sysTag = this.getById(tagId);
} else { // 如果tagId为空
// 如果存在同类名同分类类型的分类,抛出异常
if (sysTagSame != null) {
throw new ServiceException(AppErrorConstant.TAG_DOUBLE);
}
// 新建分类
sysTag = new SysTag();
sysTag.setDelFlag(0);
}
// 设置sysTag的属性
sysTag.setTagType(mgtTagEditDto.getTagType());
sysTag.setTagName(mgtTagEditDto.getTagName());
sysTag.setCreateTime(new Date());
sysTag.setSynFlag(0);
// 执行保存或更新操作
this.saveOrUpdate(sysTag);
}
/**
* @description 删除标签
* @author jqs
* @date 2023/6/8 15:09
* @param tagId
* @return void
*/
@Override
public void deleteTag(Long tagId){
SysTag sysTag = this.getById(tagId);
sysTag.setDelFlag(1);
this.saveOrUpdate(sysTag);
handleDeleteTag(sysTag.getTagType(),sysTag.getTagName());
}
@Async
protected void handleDeleteTag(Integer tagType, String tagName){
//标签类型1用户2合作商3商品4建议
switch (tagType){
case 1:
remoteMemberService.deleteMemberTag(tagName);
break;
case 2:
remoteShopService.deleteShopTag(tagName);
break;
case 3:
remoteGoodsService.deleteGoodsTag(tagName);
break;
case 4:
remoteMemberService.deleteMemberSuggestTag(tagName);
remoteShopService.deleteShopSuggestTag(tagName);
sysTagMapper.deleteStaffSuggestTag(tagName);
break;
default:
break;
}
}
/**
* @description importTag
* @param tagList
* @param tagType
* @param operName
* @return String
* @author jqs34
* @date 2023/6/24 17:32
*/
public String importTag(List tagList, Integer tagType, String operName) {
if (StringUtils.isNull(tagList) || tagList.size() == 0) {
throw new ServiceException("导入标签数据不能为空!");
}
int successNum = 0;
int failureNum = 0;
StringBuilder successMsg = new StringBuilder();
StringBuilder failureMsg = new StringBuilder();
String tagName;
LambdaQueryWrapper queryWrapper;
SysTag sysTagSame;
SysTag sysTagNew;
Date nowTime = new Date();
for (MgtTagImportDto entity : tagList) {
try {
tagName = entity.getTagName();
sysTagSame = null;
// 验证是否存在这个用户
queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysTag::getDelFlag, 0) // 查询条件:delFlag=0
.eq(SysTag::getTagType, tagType) // 查询条件:tagType=mgtTagEditDto的tagType属性
.eq(SysTag::getTagName, tagName); // 查询条件:tagName=mgtTagEditDto的tagName属性
// 执行查询,获取与查询条件匹配的SysTag对象
sysTagSame = this.getOne(queryWrapper);
if (sysTagSame == null) {
sysTagNew = new SysTag();
sysTagNew.setDelFlag(0);
sysTagNew.setTagType(tagType);
sysTagNew.setTagName(tagName);
sysTagNew.setCreateTime(nowTime);
sysTagNew.setSynFlag(0);
this.save(sysTagNew);
successNum++;
successMsg.append("
" + successNum + "、标签 " + sysTagNew.getTagName() + " 导入成功");
} else {
failureNum++;
failureMsg.append("
" + failureNum + "、标签 " + sysTagSame.getTagName() + " 已存在");
}
} catch (Exception e) {
failureNum++;
String msg = "
" + failureNum + "、标签 " + entity.getTagName() + " 导入失败:";
failureMsg.append(msg + e.getMessage());
log.error(msg, e);
}
}
if (failureNum > 0) {
failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:");
throw new ServiceException(failureMsg.toString());
} else {
successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:");
}
return successMsg.toString();
}
}