package com.pz.system.service.impl; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.pz.common.core.page.TableDataInfo; import com.pz.common.core.domain.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.pz.system.domain.Hospital; import com.pz.system.mapper.HospitalMapper; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import com.pz.system.domain.bo.DepartmentBo; import com.pz.system.domain.vo.DepartmentVo; import com.pz.system.domain.Department; import com.pz.system.mapper.DepartmentMapper; import com.pz.system.service.IDepartmentService; import java.util.*; /** * 科室Service业务层处理 * * @author ruoyi * @date 2023-09-07 */ @RequiredArgsConstructor @Service public class DepartmentServiceImpl implements IDepartmentService { private final DepartmentMapper baseMapper; private final HospitalMapper hospitalMapper; /** * 查询科室 */ @Override public DepartmentVo queryById(Integer id) { return baseMapper.selectVoById(id); } /** * 查询科室列表 */ @Override public List<DepartmentVo> queryPageList(DepartmentBo bo) { LambdaQueryWrapper<Department> lqw = buildQueryWrapper(bo); List<DepartmentVo> result = baseMapper.selectVoList(lqw); if (CollectionUtils.isNotEmpty(result)) { //查询所有菜单 List<DepartmentVo> allMenu = result; // 对父菜单进行排序 Collections.sort(allMenu, new Comparator<DepartmentVo>() { @Override public int compare(DepartmentVo o1, DepartmentVo o2) { // 根据需要进行排序比较,可以根据实际情况修改 return Integer.compare(o1.getSortord(), o2.getSortord()); } }); //根节点集合 List<DepartmentVo> rootMenu = new ArrayList<>(); for (DepartmentVo entity : allMenu) { entity.setLabel(entity.getTitle()); if (entity.getParentId() == 0) { //父节点是0的,为根节点。 rootMenu.add(entity); } } //为根菜单设置子菜单,getClild是递归调用的 for (DepartmentVo entity : rootMenu) { entity.setLabel(entity.getTitle()); /* 获取根节点下的所有子节点 使用getChild方法*/ List<DepartmentVo> childList = getChild(entity.getId().toString(), allMenu); entity.setChildren(childList);//给根节点设置子节点 } return rootMenu; } return result; } @Override public List<Department> departmentByHospitalId(Integer hospitalId) { Hospital hospital = hospitalMapper.selectById(hospitalId); // 去除方括号 String numbers = hospital.getDepartments().substring(1, hospital.getDepartments().length() - 1); // 使用逗号分割字符串 String[] numberArray = numbers.split(", "); // 创建 List<Integer> 并将转换后的整数加入列表中 List<Integer> integerList = new ArrayList<>(); for (String num : numberArray) { integerList.add(Integer.parseInt(num.trim())); } return baseMapper.selectList(new LambdaQueryWrapper<Department>().in(Department::getId,integerList)); } /** * 获取子节点 * * @param id 父节点id * @param allMenu 所有菜单列表 * @return 每个根节点下,所有子菜单列表 */ public List<DepartmentVo> getChild(String id, List<DepartmentVo> allMenu) { // 子菜单 List<DepartmentVo> childList = new ArrayList<>(); for (DepartmentVo entity : allMenu) { if (entity.getParentId().toString().equals(id)) { childList.add(entity); } } // 对子菜单进行排序 Collections.sort(childList, new Comparator<DepartmentVo>() { @Override public int compare(DepartmentVo o1, DepartmentVo o2) { // 根据需要进行排序比较,可以根据实际情况修改 return Integer.compare(o1.getSortord(), o2.getSortord()); } }); // 递归处理子菜单的子菜单 for (DepartmentVo entity : childList) { entity.setChildren(getChild(entity.getId().toString(), allMenu)); } return childList; } /** * 查询科室列表 */ @Override public List<DepartmentVo> queryList(DepartmentBo bo) { LambdaQueryWrapper<Department> lqw = buildQueryWrapper(bo); return baseMapper.selectVoList(lqw); } private LambdaQueryWrapper<Department> buildQueryWrapper(DepartmentBo bo) { Map<String, Object> params = bo.getParams(); LambdaQueryWrapper<Department> lqw = Wrappers.lambdaQuery(); lqw.eq(bo.getParentId() != null, Department::getParentId, bo.getParentId()); lqw.eq(StringUtils.isNotBlank(bo.getTitle()), Department::getTitle, bo.getTitle()); return lqw; } /** * 新增科室 */ @Override public Boolean insertByBo(DepartmentBo bo) { Department add = BeanUtil.toBean(bo, Department.class); validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setId(add.getId()); } return flag; } /** * 修改科室 */ @Override public Boolean updateByBo(DepartmentBo bo) { Department update = BeanUtil.toBean(bo, Department.class); validEntityBeforeSave(update); return baseMapper.updateById(update) > 0; } /** * 保存前的数据校验 */ private void validEntityBeforeSave(Department entity) { //TODO 做一些数据校验,如唯一约束 } /** * 批量删除科室 */ @Override public Boolean deleteWithValidByIds(Collection<Integer> ids, Boolean isValid) { if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteBatchIds(ids) > 0; } }