package com.ruoyi.system.service.impl; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.basic.PageInfo; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.system.domain.TFoundationConfig; import com.ruoyi.system.domain.TFoundationPerson; import com.ruoyi.system.dto.TFoundationPersonBatchDTO; import com.ruoyi.system.dto.TFoundationPersonDTO; import com.ruoyi.system.mapper.TFoundationPersonMapper; import com.ruoyi.system.query.TFoundationPersonQuery; import com.ruoyi.system.service.TFoundationConfigService; import com.ruoyi.system.service.TFoundationPersonService; import com.ruoyi.system.vo.SysUserVO; import com.ruoyi.system.vo.TFoundationPersonVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.Comparator; import java.util.HashSet; import java.util.List; import java.util.stream.Collectors; /** *

* 基础设置 服务实现类 *

* * @author xiaochen * @since 2024-08-15 */ @Service public class TFoundationPersonServiceImpl extends ServiceImpl implements TFoundationPersonService { @Autowired private TFoundationConfigService foundationConfigService; @Override @Transactional(rollbackFor = Exception.class) public void add(TFoundationPersonBatchDTO dto) { List foundationPersonDTOS = dto.getFoundationPersonDTOS(); boolean b = hasDuplicateId(foundationPersonDTOS); if(b){ throw new ServiceException("设置存在重复用餐人数"); } for (TFoundationPersonDTO tFoundationPersonDTO : foundationPersonDTOS) { List foundationConfigs = tFoundationPersonDTO.getFoundationConfigs(); long count = foundationConfigs.stream().map(TFoundationConfig::getTypeId).distinct().count(); if(foundationConfigs.size()!=count){ throw new ServiceException("菜品重复设置"); } this.save(tFoundationPersonDTO); // 添加菜品 foundationConfigs.forEach(item -> { item.setPersonId(tFoundationPersonDTO.getId()); }); foundationConfigService.saveBatch(foundationConfigs); } } @Override @Transactional(rollbackFor = Exception.class) public void edit(TFoundationPersonBatchDTO dto) { List foundationPersonDTOS = dto.getFoundationPersonDTOS(); boolean b = hasDuplicateId(foundationPersonDTOS); if(b){ throw new ServiceException("设置存在重复用餐人数"); } this.remove(Wrappers.lambdaQuery(TFoundationPerson.class) .eq(TFoundationPerson::getMealType,dto.getMealType())); for (TFoundationPersonDTO tFoundationPersonDTO : foundationPersonDTOS) { List foundationConfigs = tFoundationPersonDTO.getFoundationConfigs(); long count = foundationConfigs.stream().map(TFoundationConfig::getTypeId).distinct().count(); if(foundationConfigs.size()!=count){ throw new ServiceException("菜品重复设置"); } // 添加人数 this.saveOrUpdate(tFoundationPersonDTO); // 删除菜品 foundationConfigService.remove(Wrappers.lambdaQuery(TFoundationConfig.class) .eq(TFoundationConfig::getPersonId,tFoundationPersonDTO.getId())); // 添加菜品 foundationConfigs.forEach(item -> { item.setPersonId(tFoundationPersonDTO.getId()); }); foundationConfigService.saveBatch(foundationConfigs); } } @Override public PageInfo getList(TFoundationPersonQuery query) { PageInfo pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); List list = this.baseMapper.getList(query,pageInfo); List ids = list.stream().map(TFoundationPersonVO::getId).collect(Collectors.toList()); if(!CollectionUtils.isEmpty(ids)){ List list1 = foundationConfigService.list(Wrappers.lambdaQuery(TFoundationConfig.class) .in(TFoundationConfig::getPersonId, ids)); list.forEach(item -> { List collect = list1.stream().filter(item1 -> item1.getPersonId().equals(item.getId())).collect(Collectors.toList()); if(!CollectionUtils.isEmpty(collect)){ item.setMinDish(collect.stream().sorted(Comparator.comparingInt(TFoundationConfig::getMinCount)).findFirst().get().getMinCount()); item.setMaxDish(collect.stream().sorted(Comparator.comparingInt(TFoundationConfig::getMaxCount).reversed()).findFirst().get().getMaxCount()); item.setFoundationConfigs(collect); } }); } pageInfo.setRecords(list); return pageInfo; } @Override public boolean hasDuplicateId(List list) { HashSet countSet = new HashSet<>(); for (TFoundationPersonDTO dto : list) { if (!countSet.add(dto.getMealCount())) { return true; // 发现重复的人数 } } return false; // 没有发现重复的人数 } @Override public List getSetList() { List list = new ArrayList<>(); List setList = this.baseMapper.getSetList(); for (int i = 1; i <= 2; i++) { TFoundationPersonVO foundationPersonVO = new TFoundationPersonVO(); foundationPersonVO.setMealType(i); int finalI = i; List collect = setList.stream().filter(e -> e.getMealType() == finalI).collect(Collectors.toList()); if(!CollectionUtils.isEmpty(collect)){ Integer minPerson = collect.stream().sorted(Comparator.comparingInt(TFoundationPerson::getMealCount)).findFirst().get().getMealCount(); foundationPersonVO.setMinPerson(minPerson); Integer maxPerson = collect.stream().sorted(Comparator.comparingInt(TFoundationPerson::getMealCount).reversed()).findFirst().get().getMealCount(); foundationPersonVO.setMaxPerson(maxPerson); } List ids = collect.stream().map(TFoundationPersonVO::getId).collect(Collectors.toList()); if(!CollectionUtils.isEmpty(ids)){ List list1 = foundationConfigService.list(Wrappers.lambdaQuery(TFoundationConfig.class) .in(TFoundationConfig::getPersonId, ids)); list.forEach(item -> { List collect1 = list1.stream().filter(item1 -> item1.getPersonId().equals(item.getId())).collect(Collectors.toList()); if(!CollectionUtils.isEmpty(collect1)){ item.setMinDish(collect1.stream().sorted(Comparator.comparingInt(TFoundationConfig::getMinCount)).findFirst().get().getMinCount()); item.setMaxDish(collect1.stream().sorted(Comparator.comparingInt(TFoundationConfig::getMaxCount).reversed()).findFirst().get().getMaxCount()); item.setFoundationConfigs(collect1); } }); } list.add(foundationPersonVO); } return list; } @Override public List getPersonList() { return this.baseMapper.getSetList(); } }