package com.xjrsoft.module.evaluate.service.impl; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.yulichang.base.MPJBaseServiceImpl; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.xjrsoft.common.utils.VoToColumnUtil; import com.xjrsoft.module.evaluate.dto.AddEvaluateItemDto; import com.xjrsoft.module.evaluate.dto.MakeEvaluateItemDto; import com.xjrsoft.module.evaluate.entity.EvaluateItem; import com.xjrsoft.module.evaluate.mapper.EvaluateItemMapper; import com.xjrsoft.module.evaluate.service.IEvaluateItemService; import com.xjrsoft.module.evaluate.vo.EvaluateItemGroupByTopicVo; import com.xjrsoft.module.evaluate.vo.EvaluateItemVo; import com.xjrsoft.module.evaluate.vo.MakeEvaluateItemVo; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @title: 评价项 * @Author szs * @Date: 2024-01-15 * @Version 1.0 */ @Service @AllArgsConstructor public class EvaluateItemServiceImpl extends MPJBaseServiceImpl implements IEvaluateItemService { private EvaluateItemMapper evaluateItemMapper; @Override public MakeEvaluateItemVo getMakeEvaluateItem(MakeEvaluateItemDto dto) { MakeEvaluateItemVo makeEvaluateItemVo = new MakeEvaluateItemVo(); //获取模板基本信息 //获取模板下的所有评价子项集合 MPJLambdaWrapper evaluateItemWrapper = new MPJLambdaWrapper<>(); evaluateItemWrapper .select(EvaluateItem::getId) .select(EvaluateItem.class, x -> VoToColumnUtil.fieldsToColumns(EvaluateItemVo.class).contains(x.getProperty())) .eq(EvaluateItem::getEvaluateTemplateId, dto.getEvaluateTemplateId()); List evaluateItemVoList = this.selectJoinList(EvaluateItemVo.class, evaluateItemWrapper); Map> groupedEvaluateItemVo = evaluateItemVoList.stream() .collect(Collectors.groupingBy(EvaluateItemVo::getTopic)); List evaluateItemGroupByTopicVoList = new ArrayList<>(); groupedEvaluateItemVo.forEach((topic, group) -> { evaluateItemGroupByTopicVoList.add(new EvaluateItemGroupByTopicVo(){{ setTopic(topic); setEvaluateItemVoList(group); }}); }); makeEvaluateItemVo.setEvaluateItemGroupByTopicVoList(evaluateItemGroupByTopicVoList); return makeEvaluateItemVo; } @Override @Transactional public Boolean addEvaluateItem(List dto) { //获取sortCode的最大数量 QueryWrapper queryWrapperSortcode = new QueryWrapper<>(); queryWrapperSortcode.select("IFNULL(MAX(sort_code),0) as sortCode"); EvaluateItem e = this.getOne(queryWrapperSortcode); int sortCode = e.getSortCode() + 1; List evaluateItemList = new ArrayList<>(); for (AddEvaluateItemDto addEvaluateItemDto : dto) { addEvaluateItemDto.setSortCode(sortCode++); EvaluateItem evaluateItem = BeanUtil.toBean(addEvaluateItemDto, EvaluateItem.class); evaluateItem.setCreateDate(new Date()); evaluateItemList.add(evaluateItem); } return this.saveBatch(evaluateItemList); } @Override public Boolean updateEvaluateItem(List dto) { //先物理删除数据库中该模板下的所有评价项 evaluateItemMapper.physicalDeleteEvaluateItem(dto.get(0).getEvaluateTemplateId()); //添加新的评价项 return addEvaluateItem(dto); } }