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.common.utils.JsonUtils; import com.pz.system.domain.Hospital; import com.pz.system.domain.Services; import com.pz.system.domain.vo.HospitalVo; import com.pz.system.mapper.HospitalMapper; import com.pz.system.mapper.ServicesMapper; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import com.pz.system.domain.bo.BusinessBo; import com.pz.system.domain.vo.BusinessVo; import com.pz.system.domain.Business; import com.pz.system.mapper.BusinessMapper; import com.pz.system.service.IBusinessService; import java.util.List; import java.util.Map; import java.util.Collection; import java.util.Optional; import java.util.stream.Collectors; /** * 业务Service业务层处理 * * @author ruoyi * @date 2023-09-07 */ @RequiredArgsConstructor @Service public class BusinessServiceImpl implements IBusinessService { private final BusinessMapper baseMapper; private final HospitalMapper hospitalMapper; private final ServicesMapper servicesMapper; /** * 查询业务 */ @Override public BusinessVo queryById(Long id) { BusinessVo businessVo = baseMapper.selectVoById(id); if (StringUtils.isNotBlank(businessVo.getHospitals())) { List<Integer> ids = JsonUtils.parseArray(businessVo.getHospitals(), Integer.class); businessVo.setHospitalsIdsList(ids); } return businessVo; } /** * 查询业务列表 */ @Override public TableDataInfo<BusinessVo> queryPageList(BusinessBo bo, PageQuery pageQuery) { LambdaQueryWrapper<Business> lqw = buildQueryWrapper(bo); Page<BusinessVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); Optional.ofNullable(result.getRecords()).ifPresent(businessVos -> { businessVos.forEach(businessVo -> { if (StringUtils.isNotBlank(businessVo.getHospitals())) { //获取绑定所以医院id List<Long> ids = JsonUtils.parseArray(businessVo.getHospitals(), Long.class); Optional.ofNullable(hospitalMapper.selectVoList(Wrappers.<Hospital>lambdaQuery().in(Hospital::getId, ids))) .ifPresent(hospitalVos -> { businessVo.setHospitalsList(hospitalVos.stream().map(HospitalVo::getName).collect(Collectors.toList())); }); } //获取关联服务 Optional.ofNullable(servicesMapper.selectVoList(Wrappers.<Services>lambdaQuery().eq(Services::getBid, businessVo.getId()))) .ifPresent(servicesVos -> { businessVo.setServicesVoList(servicesVos); }); }); }); return TableDataInfo.build(result); } /** * 查询业务列表 */ @Override public List<BusinessVo> queryList(BusinessBo bo) { LambdaQueryWrapper<Business> lqw = buildQueryWrapper(bo); return baseMapper.selectVoList(lqw); } private LambdaQueryWrapper<Business> buildQueryWrapper(BusinessBo bo) { Map<String, Object> params = bo.getParams(); LambdaQueryWrapper<Business> lqw = Wrappers.lambdaQuery(); lqw.like(StringUtils.isNotBlank(bo.getName()), Business::getName, bo.getName()); return lqw; } /** * 新增业务 */ @Override public Boolean insertByBo(BusinessBo bo) { Business add = BeanUtil.toBean(bo, Business.class); validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setId(add.getId()); } return flag; } /** * 修改业务 */ @Override public Boolean updateByBo(BusinessBo bo) { Business update = BeanUtil.toBean(bo, Business.class); if (CollectionUtils.isNotEmpty(bo.getHospitalsIdsList())) { String jsonString = JsonUtils.toJsonString(bo.getHospitalsIdsList()); update.setHospitals(jsonString); } validEntityBeforeSave(update); return baseMapper.updateById(update) > 0; } /** * 保存前的数据校验 */ private void validEntityBeforeSave(Business entity) { //TODO 做一些数据校验,如唯一约束 } /** * 批量删除业务 */ @Override public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) { if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteBatchIds(ids) > 0; } }