package com.huimv.admin.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.NumberUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.huimv.admin.common.utils.Result; import com.huimv.admin.common.utils.ResultCode; import com.huimv.admin.common.utils.ResultUtil; import com.huimv.admin.entity.BasePigpen; import com.huimv.admin.entity.dto.BasePigpenDto; import com.huimv.admin.entity.vo.TreeBasePigpen; import com.huimv.admin.mapper.BasePigpenMapper; import com.huimv.admin.service.IBasePigpenService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** *

* 服务实现类 *

* * @author author * @since 2023-02-13 */ @Service public class BasePigpenServiceImpl extends ServiceImpl implements IBasePigpenService { @Autowired private BasePigpenMapper basePigpenMapper; @Override @Transactional public Result addPigpen(BasePigpenDto basePigpenDto) { BasePigpen basePigpen = new BasePigpen(); BeanUtil.copyProperties(basePigpen,basePigpenDto); basePigpen.setParentId(0); basePigpen.setFType(1); int insert = basePigpenMapper.insert(basePigpen); Integer floorNum = basePigpenDto.getFloorNum(); for (Integer integer = 1; integer <= floorNum; integer++) { BasePigpen basePigpen1 = new BasePigpen(); basePigpen1.setFType(2); basePigpen1.setParentId(insert); basePigpen1.setBuildName(Convert.numberToChinese(integer,false)); basePigpen1.setFarmId(basePigpen.getFarmId()); basePigpen1.setStageCode(basePigpen.getStageCode()); } return ResultUtil.addResult(insert); } @Override public Result list(String farmCode, String pigpenName, String stageCode) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.like(StringUtils.isNotBlank(pigpenName),"pigpen_name", pigpenName); queryWrapper.like(StringUtils.isNotBlank(stageCode),"stage_code", stageCode); queryWrapper.eq(StringUtils.isNotBlank(farmCode),"farm_code", farmCode); //创建排序 List basePigpens = basePigpenMapper.selectList(queryWrapper); //将结果List改为树 List treeBasePigpens = parseBizBaseArea(basePigpens); return new Result(ResultCode.SUCCESS,treeBasePigpens); } /** * 查询结果 转换成树形结构 * @param bizBaseAreas 原始数据 * @return 树 */ private List parseBizBaseArea(List bizBaseAreas){ //构建需要展示的树形节点结构 Map nodeMap = bizBaseAreas.stream().map(basePigpen -> { TreeBasePigpen baseVo = new TreeBasePigpen(); baseVo.setId(basePigpen.getId()+""); baseVo.setFarmCode(basePigpen.getFarmId()); baseVo.setParentId(basePigpen.getParentId()); baseVo.setSort(basePigpen.getSort()); baseVo.setPigpenName(basePigpen.getBuildName()); baseVo.setType(basePigpen.getFType()); baseVo.setChildNode(new ArrayList<>()); return baseVo; }).collect(Collectors.toMap(TreeBasePigpen::getId, b -> b,(k1, k2)->k1)); //创建数组存父亲节点 ArrayList roots = new ArrayList<>(); //构建树形 nodeMap.values().forEach(item->{ String parentCode = item.getParentId()+""; if (nodeMap.get(parentCode) == null){ //父节点为空,说明当前节点就已经是父节点了 将该节点存起来 roots.add(item); }else { //父节点 不为空,说明有父节点,拿到该节点的父节点的孩子节点(就是我自己),将该节点存起来 nodeMap.get(parentCode).getChildNode().add(item); } }); return roots; } }