package com.doumee.service.business.impl; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.service.business.third.model.LoginUserInfo; import com.doumee.service.business.third.model.PageData; import com.doumee.service.business.third.model.PageWrap; import com.doumee.core.utils.Constants; import com.doumee.core.utils.Utils; import com.doumee.dao.business.CategoryMapper; import com.doumee.dao.business.model.Category; import com.doumee.service.business.CategoryService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.checkerframework.checker.units.qual.C; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.validation.BindException; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; /** * 分类信息表Service实现 * @author 江蹄蹄 * @date 2023/11/30 15:33 */ @Service public class CategoryServiceImpl implements CategoryService { @Autowired private CategoryMapper categoryMapper; @Override @Transactional(rollbackFor = {Exception.class, BindException.class}) public Integer create(Category category){ checkUnique(category); LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); if(loginUserInfo ==null){ loginUserInfo = category.getLoginUserInfo(); } Category insert = new Category(); insert.setCreator(loginUserInfo.getId()); insert.setCreateDate(new Date()); insert.setEditor(loginUserInfo.getId()); insert.setEditDate(new Date()); insert.setIsdeleted(Constants.ZERO); insert.setName(category.getName()); insert.setRemark(category.getRemark()); insert.setStatus(Constants.ZERO); insert.setSortnum(category.getSortnum()); insert.setBizType(category.getBizType()); insert.setImgurl(category.getImgurl()); insert.setType(category.getType()); insert.setParentId(category.getParentId()); categoryMapper.insert(insert); if(insert.getBizType()!=null){ //清空其他bizType,只保留当前新增记录唯一有效 categoryMapper.update(null,new UpdateWrapper().lambda() .set(Category::getBizType,null) .eq(Category::getBizType,insert.getType()) .ne(Category::getId,insert.getId()) ); } return insert.getId(); } @Override public void deleteById(Integer id) { categoryMapper.update(null,new UpdateWrapper().lambda().set(Category::getIsdeleted,Constants.ONE) .eq(Category::getId,id) ); } @Override public void delete(Category category) { UpdateWrapper deleteWrapper = new UpdateWrapper<>(category); categoryMapper.delete(deleteWrapper); } @Override public void deleteByIdInBatch(List ids) { if (CollectionUtils.isEmpty(ids)) { return; } categoryMapper.update(null,new UpdateWrapper().lambda().set(Category::getIsdeleted,Constants.ONE) .in(Category::getId,ids) ); } @Override @Transactional(rollbackFor = {Exception.class, BindException.class}) public void updateById(Category category) { checkUnique(category); categoryMapper.updateById(category); if(category.getBizType()!=null){ //清空其他该bizType属性,只保留当前记录唯一有效 categoryMapper.update(null,new UpdateWrapper().lambda() .set(Category::getBizType,null) .eq(Category::getBizType,category.getBizType()) .ne(Category::getId,category.getId()) ); } } @Override public void updateByIdInBatch(List categorys) { if (CollectionUtils.isEmpty(categorys)) { return; } for (Category category: categorys) { this.updateById(category); } } @Override public Category findById(Integer id) { return categoryMapper.selectById(id); } @Override public Category findOne(Category category) { QueryWrapper wrapper = new QueryWrapper<>(category); return categoryMapper.selectOne(wrapper); } @Override public List findList(Category category) { QueryWrapper wrapper = new QueryWrapper<>(category); return categoryMapper.selectList(wrapper); } @Override public List queryList(Category category) { List categoryList = categoryMapper.selectList(new QueryWrapper().lambda() .eq(Objects.nonNull(category)&&Objects.nonNull(category.getType()),Category::getType,category.getType()) .isNull(Objects.nonNull(category)&&Objects.isNull(category.getParentId()),Category::getParentId) .eq(Objects.nonNull(category)&&Objects.nonNull(category.getParentId()),Category::getParentId,category.getParentId()) .eq(Category::getIsdeleted,Constants.ZERO) ); return categoryList; } @Override public PageData findPage(PageWrap pageWrap) { IPage page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); QueryWrapper queryWrapper = new QueryWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); queryWrapper.lambda().eq(Category::getIsdeleted,Constants.ZERO) .eq(Objects.nonNull(pageWrap.getModel().getType()),Category::getType,pageWrap.getModel().getType()) .isNull(Category::getParentId); PageData categoryPageData = PageData.from(categoryMapper.selectPage(page, queryWrapper)); //查询所有二级数据 List categoryList = categoryMapper.selectList( new QueryWrapper().lambda() .eq(Objects.nonNull(pageWrap.getModel().getType()),Category::getType,pageWrap.getModel().getType()) .eq(Category::getIsdeleted,Constants.ZERO).isNotNull(Category::getParentId)); for (Category category:categoryPageData.getRecords()) { category.setChildCategoryList( categoryList.stream().filter(i->Constants.equalsInteger(i.getParentId(),category.getId())).collect(Collectors.toList()) ); } return categoryPageData; } @Override public long count(Category category) { QueryWrapper wrapper = new QueryWrapper<>(category); return categoryMapper.selectCount(wrapper); } @Override public List findChileList(Category model) { if(Objects.isNull(model)){ model = new Category(); } model.setIsdeleted(Constants.ZERO); List list =findList(model); List data = new ArrayList<>(); if(list!=null){ for(Category category : list){ if(category.getParentId()!=null){ Category pcate = getParentById(category.getParentId(),list); if(pcate!=null){ category.setParentName(StringUtils.defaultString(pcate.getName(),"")); category.setName(StringUtils.defaultString(category.getName(),"")); category.setGroupName( category.getParentName()+"/"+category.getName()); data.add(category); } }else{ data.add(category); } } } return data; } private Category getParentById(Integer parentId, List list) { if(list!=null){ for(Category category : list){ if(Constants.equalsInteger(parentId,category.getId())){ return category; } } } return null; } private void checkUnique(Category category){ QueryWrapper wrapper = new QueryWrapper<>(); wrapper.lambda() .eq(Category::getIsdeleted,Constants.ZERO) .eq(Category::getType,category.getType()) .eq(Category::getName,category.getName()) .ne(category.getId()!=null, Category::getId,category.getId()) ; List categories = categoryMapper.selectList(wrapper); if (org.apache.commons.collections.CollectionUtils.isNotEmpty(categories)){ throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(),"分类信息已存在"); } } }