package com.ruoyi.system.service.impl.config;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.system.api.constant.AppErrorConstant;
import com.ruoyi.system.api.domain.dto.MgtClassNumDto;
import com.ruoyi.system.api.domain.poji.config.SysClassification;
import com.ruoyi.system.api.service.RemoteGoodsService;
import com.ruoyi.system.domain.dto.MgtClassificationEditDto;
import com.ruoyi.system.domain.dto.MgtClassificationPageDto;
import com.ruoyi.system.domain.vo.AppClassListVo;
import com.ruoyi.system.domain.vo.MgtClassificationPageVo;
import com.ruoyi.system.mapper.config.SysClassificationMapper;
import com.ruoyi.system.service.config.ArticleService;
import com.ruoyi.system.service.config.SysClassificationService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
/**
*
* 分类 服务实现类
*
*
* @author jqs
* @since 2023-04-25
*/
@Service
public class SysClassificationServiceImpl extends ServiceImpl implements SysClassificationService {
@Resource
private SysClassificationMapper sysClassificationMapper;
@Resource
private RemoteGoodsService remoteGoodsService;
@Resource
private ArticleService articleService;
/**
* @description: TODO
* @author jqs34
* @date 2023/6/4 11:59
* @version 1.0
*/
@Override
public Map getSysClassificationList(List classIds){
Map sysClassificationMap = new HashMap<>();
List sysClassifications = this.listByIds(classIds);
for (SysClassification sysClassification : sysClassifications) {
sysClassificationMap.put(sysClassification.getClassId(), sysClassification);
}
return sysClassificationMap;
}
/**
* @description 分页获取分类
* @author jqs
* @date 2023/6/8 10:11
* @param page
* @param mgtClassificationPageDto
* @return List
*/
@Override
public List pageClassification(Page page, MgtClassificationPageDto mgtClassificationPageDto){
return sysClassificationMapper.pageClassification(page, mgtClassificationPageDto);
}
/**
* @description 修改分类
* @author jqs
* @date 2023/6/8 10:23
* @param mgtClassificationEditDto
* @return void
*/
@Override
public void editClassification(MgtClassificationEditDto mgtClassificationEditDto){
// 查询未删除的同类名同分类类型的分类
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysClassification::getDelFlag,0)
.eq(SysClassification::getClassType,mgtClassificationEditDto.getClassType())
.eq(SysClassification::getClassName,mgtClassificationEditDto.getClassName());
SysClassification sysClassificationSame = this.getOne(queryWrapper);
// 获取分类ID
Long classId = mgtClassificationEditDto.getClassId();
SysClassification sysClassification;
// 如果分类ID不为空
if(classId != null){
// 如果存在同类名同分类类型的分类,但是分类ID不同,抛出异常
if(sysClassificationSame != null && !Objects.equals(sysClassificationSame.getClassId(), classId)){
throw new ServiceException(AppErrorConstant.CLASS_DOUBLE);
}
// 获取要修改的分类
sysClassification = this.getById(classId);
}else{ // 如果分类ID为空
// 如果存在同类名同分类类型的分类,抛出异常
if(sysClassificationSame!=null){
throw new ServiceException(AppErrorConstant.CLASS_DOUBLE);
}
// 新建分类
sysClassification = new SysClassification();
sysClassification.setDelFlag(0);
sysClassification.setRelationNum(0);
}
// 设置分类信息
sysClassification.setClassType(mgtClassificationEditDto.getClassType());
sysClassification.setClassName(mgtClassificationEditDto.getClassName());
sysClassification.setClassSort(mgtClassificationEditDto.getClassSort());
sysClassification.setCreateTime(new Date());
// 保存或更新分类
this.saveOrUpdate(sysClassification);
}
/**
* @description 删除分类
* @author jqs
* @date 2023/6/8 10:28
* @param classId
* @return void
*/
@Override
public void deleteClassification(Long classId){
SysClassification sysClassification = this.getById(classId);
sysClassification.setDelFlag(1);
if(sysClassification.getClassType()==1){
articleService.deleteArticleClass(classId);
}else if(sysClassification.getClassType()==2){
List goodsNameList = remoteGoodsService.listGoodsNameByGoodsClass(classId).getData();
if(goodsNameList!=null&&goodsNameList.size()>0){
throw new ServiceException("无法删除,该分类下还有关联商品-"+goodsNameList.toString());
}
}
this.saveOrUpdate(sysClassification);
}
/**
* @description
* @author jqs
* @date 2023/7/13 11:21
* @param
* @return List
*/
@Override
public List listByType(Integer classType){
LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysClassification::getDelFlag,0)
.eq(SysClassification::getClassType,classType)
.orderByDesc(SysClassification::getClassSort)
.orderByDesc(SysClassification::getCreateTime);
List sysClassificationList = this.list(queryWrapper);
List classListVos = sysClassificationList.stream().map(sysClassification ->{
AppClassListVo appClassListVo = new AppClassListVo();
appClassListVo.setClassId(sysClassification.getClassId());
appClassListVo.setClassName(sysClassification.getClassName());
return appClassListVo;
}).collect(Collectors.toList());
return classListVos;
}
/**
* @description 分类变化
* @author jqs
* @date 2023/7/20 14:32
* @param mgtClassNumDto
* @return void
*/
@Override
public void changeClassNum(MgtClassNumDto mgtClassNumDto){
if(mgtClassNumDto.getAddClassId()!=null){
SysClassification addSysClassification = this.getById(mgtClassNumDto.getAddClassId());
if(addSysClassification!=null){
addSysClassification.setRelationNum(addSysClassification.getRelationNum()+1);
this.saveOrUpdate(addSysClassification);
}
}
if(mgtClassNumDto.getSubClassId()!=null){
SysClassification subSysClassification = this.getById(mgtClassNumDto.getSubClassId());
if(subSysClassification!=null){
subSysClassification.setRelationNum(subSysClassification.getRelationNum()-1);
this.saveOrUpdate(subSysClassification);
}
}
}
}