package com.pz.system.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.lang.TypeReference; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.fasterxml.jackson.databind.ObjectMapper; 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.common.enums.HospitalLevel; import com.pz.common.enums.HospitalType; import com.pz.common.utils.JsonUtils; import com.pz.system.domain.Business; import com.pz.system.domain.Department; import com.pz.system.mapper.BusinessMapper; import com.pz.system.mapper.CityMapper; import com.pz.system.mapper.DepartmentMapper; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import com.pz.system.domain.bo.HospitalBo; import com.pz.system.domain.vo.HospitalVo; import com.pz.system.domain.Hospital; import com.pz.system.mapper.HospitalMapper; import com.pz.system.service.IHospitalService; import java.util.*; /** * 医院Service业务层处理 * * @author ruoyi * @date 2023-09-07 */ @RequiredArgsConstructor @Service public class HospitalServiceImpl implements IHospitalService { private final HospitalMapper baseMapper; private final DepartmentMapper departmentMapper; private final CityMapper cityMapper; private final BusinessMapper businessMapper; /** * 查询医院 */ @Override public HospitalVo queryById(Integer id) { HospitalVo hospitalVo = baseMapper.selectVoById(id); //获取医院类型名称 hospitalVo.setCategoryName(HospitalType.getTypeName(hospitalVo.getCategory())); //获取医院等级名称 hospitalVo.setLevelName(HospitalLevel.getLevelName(hospitalVo.getLevel())); //获取医院科室 if (StringUtils.isNotBlank(hospitalVo.getDepartments())) { //关联科室编号 List<Integer> ids = JsonUtils.parseArray(hospitalVo.getDepartments(), Integer.class); hospitalVo.setIds(ids); } return hospitalVo; } /** * 查询医院列表 */ @Override public TableDataInfo<HospitalVo> queryPageList(HospitalBo bo, PageQuery pageQuery) { LambdaQueryWrapper<Hospital> lqw = new LambdaQueryWrapper<>(); Page<HospitalVo> result = new Page<>(); if(null == bo.getId()){ lqw = buildQueryWrapper(bo); result = baseMapper.selectVoPage(pageQuery.build(), lqw); }else { Business business = businessMapper.selectById(bo.getId()); if (StringUtils.isNotBlank(business.getHospitals())) { List<Integer> ids = JsonUtils.parseArray(business.getHospitals(), Integer.class); bo.setHisId(ids); } lqw = buildQueryWrapper(bo); result = baseMapper.selectVoPage(pageQuery.build(), lqw); } Optional.ofNullable(result.getRecords()).ifPresent(hospitalVos -> { hospitalVos.forEach(hospitalVo -> { //获取医院类型名称 hospitalVo.setCategoryName(HospitalType.getTypeName(hospitalVo.getCategory())); //获取医院等级名称 hospitalVo.setLevelName(HospitalLevel.getLevelName(hospitalVo.getLevel())); //获取城市名称 Optional.ofNullable(cityMapper.selectVoById(hospitalVo.getCityId())).ifPresent( cityVo -> { hospitalVo.setCityName(cityVo.getName()); } ); hospitalVo.setValue(hospitalVo.getId()); hospitalVo.setText(hospitalVo.getName()); //获取医院科室 if (StringUtils.isNotBlank(hospitalVo.getDepartments())) { //关联科室编号 List<Integer> ids = JsonUtils.parseArray(hospitalVo.getDepartments(), Integer.class); Optional.ofNullable(departmentMapper.selectVoList(Wrappers.<Department>lambdaQuery().in(Department::getId, ids))) .ifPresent(departmentVos -> { hospitalVo.setDepartmentVoList(departmentVos); }); } }); }); return TableDataInfo.build(result); } /** * 查询医院列表 */ @Override public List<HospitalVo> queryList(HospitalBo bo) { LambdaQueryWrapper<Hospital> lqw = buildQueryWrapper(bo); return baseMapper.selectVoList(lqw); } private LambdaQueryWrapper<Hospital> buildQueryWrapper(HospitalBo bo) { Map<String, Object> params = bo.getParams(); LambdaQueryWrapper<Hospital> lqw = Wrappers.lambdaQuery(); lqw.eq(bo.getCityId() != null, Hospital::getCityId, bo.getCityId()); lqw.like(StringUtils.isNotBlank(bo.getName()), Hospital::getName, bo.getName()); lqw.eq(StringUtils.isNotBlank(bo.getLogo()), Hospital::getLogo, bo.getLogo()); lqw.eq(bo.getLevel() != null, Hospital::getLevel, bo.getLevel()); /*lqw.eq(StringUtils.isNotBlank(bo.getLng()), Hospital::getLng, bo.getLng()); lqw.eq(StringUtils.isNotBlank(bo.getLat()), Hospital::getLat, bo.getLat());*/ lqw.eq(bo.getCategory() != null, Hospital::getCategory, bo.getCategory()); lqw.eq(StringUtils.isNotBlank(bo.getIntroduce()), Hospital::getIntroduce, bo.getIntroduce()); lqw.eq(bo.getStatus() != null, Hospital::getStatus, bo.getStatus()); lqw.in(bo.getHisId() != null, Hospital::getId, bo.getHisId()); return lqw; } /** * 新增医院 */ @Override public Boolean insertByBo(HospitalBo bo) { Hospital add = BeanUtil.toBean(bo, Hospital.class); validEntityBeforeSave(add); if (CollectionUtils.isNotEmpty(bo.getDepartments())) { add.setDepartments(JsonUtils.toJsonString(bo.getDepartments())); } boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setId(add.getId()); } return flag; } /** * 修改医院 */ @Override public Boolean updateByBo(HospitalBo bo) { Hospital update = BeanUtil.toBean(bo, Hospital.class); validEntityBeforeSave(update); return baseMapper.updateById(update) > 0; } /** * 保存前的数据校验 */ private void validEntityBeforeSave(Hospital entity) { //TODO 做一些数据校验,如唯一约束 } /** * 批量删除医院 */ @Override public Boolean deleteWithValidByIds(Collection<Integer> ids, Boolean isValid) { if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteBatchIds(ids) > 0; } }