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;
}
}