package cn.besteam.modules.medical.service.impl; import cn.besteam.common.constant.DepartmentEnum; import cn.besteam.common.constant.ErrorCode; import cn.besteam.common.exception.BusinessException; import cn.besteam.modules.medical.dto.MwTransitConfigListDTO; import cn.besteam.modules.medical.dto.MwTransitConfigDTO; import cn.besteam.modules.medical.mapper.MwCollectRecordMapper; import cn.besteam.modules.medical.vo.MwTransitConfigVO; import cn.besteam.modules.medical.entity.MwTransitConfig; import cn.besteam.modules.medical.mapper.MwTransitConfigMapper; import cn.besteam.modules.medical.service.IMwTransitConfigService; import cn.besteam.modules.medical.vo.MwTransitConfigSelectVO; import cn.besteam.modules.shiro.authc.util.EnvUtils; import cn.besteam.modules.system.entity.SysDepartment; import cn.besteam.modules.system.entity.SysDictItem; import cn.besteam.modules.system.service.ISysDepartmentService; import cn.besteam.modules.system.service.ISysDictItemService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; import java.util.stream.Collectors; /** * @Description: 出库-运输配置 * @author: besteam * @date: 2020-04-25 * @version: V1.0 */ @Service public class MwTransitConfigServiceImpl extends ServiceImpl implements IMwTransitConfigService { @Autowired private ISysDictItemService sysDictItemService; @Autowired private ISysDepartmentService sysDepartmentService; @Autowired private MwCollectRecordMapper mwCollectRecordMapper; private List getSearchHospitalIdList(Integer hospitalId) { if (hospitalId == null) { return sysDepartmentService.listMyHospital(EnvUtils.getUser().getId()).stream().map(SysDepartment::getId).collect(Collectors.toList()); } else { SysDepartment sysDepartment = sysDepartmentService.getById(hospitalId); if (sysDepartment == null) { return new ArrayList<>(); } List childrenList = sysDepartmentService.list(new QueryWrapper().lambda().likeRight(SysDepartment::getTreeCode, sysDepartment.getTreeCode()).eq(SysDepartment::getOrgType, DepartmentEnum.OrgTypeEnum.HOSPITAL.getType())); if (org.apache.commons.collections.CollectionUtils.isEmpty(childrenList)) { return new ArrayList<>(); } return childrenList.stream().map(SysDepartment::getId).collect(Collectors.toList()); } } /** * 填充用户列表中的区域、医院、部门、科室字段 * * @param vo */ private void fillDepartmentPath(Map sysDepartmentMap, MwTransitConfigVO vo, String separateChar) { if (StringUtils.isEmpty(separateChar)) { separateChar = "/"; } if (vo.getDepartmentId() != null) { SysDepartment sysDepartment = sysDepartmentMap.get(vo.getDepartmentId()); if (sysDepartment == null) { sysDepartment = sysDepartmentService.getById(vo.getDepartmentId()); if (sysDepartment != null) { sysDepartmentMap.put(sysDepartment.getId(), sysDepartment); } } if (sysDepartment != null && sysDepartment.getId().equals(-1)) { vo.setArea(sysDepartment.getDepartName()); return; } while (sysDepartment != null && !sysDepartment.getId().equals(-1)) { //科室 if (sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) { vo.setOffice(sysDepartment.getDepartName()); } //部门 else if (sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType())) { if (StringUtils.isNotEmpty(vo.getDepartment())) { vo.setDepartment(sysDepartment.getDepartName() + separateChar + vo.getDepartment()); } else { vo.setDepartment(sysDepartment.getDepartName()); } } //区域 else { if (StringUtils.isNotEmpty(vo.getArea())) { vo.setArea(sysDepartment.getDepartName() + separateChar + vo.getArea()); } else { vo.setArea(sysDepartment.getDepartName()); } } if (sysDepartmentMap.get(sysDepartment.getParentId()) == null) { sysDepartment = sysDepartmentService.getById(sysDepartment.getParentId()); if (sysDepartment != null) { sysDepartmentMap.put(sysDepartment.getId(), sysDepartment); } } else { sysDepartment = sysDepartmentMap.get(sysDepartment.getParentId()); } } } } /** * 获取出库-运输配置数据列表 * * @param dto * @return */ @Override public IPage queryPageList(MwTransitConfigListDTO dto) { IPage page = new Page<>(dto.getPageNo(), dto.getPageSize()); List hospitalIdList = getSearchHospitalIdList(dto.getHospitalId()); if (org.apache.commons.collections.CollectionUtils.isEmpty(hospitalIdList)) { return page; } dto.setHospitalIdList(hospitalIdList); SysDepartment sysDepartment = null; if (dto.getHospitalId() == null) { sysDepartment = sysDepartmentService.getMyDepartment(EnvUtils.getUser().getId()); if (sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType()) || sysDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) { sysDepartment = sysDepartmentService.getHospital(sysDepartment.getParentId()); } } else { sysDepartment = sysDepartmentService.getById(dto.getHospitalId()); } List sysDepartmentList = sysDepartmentService.list(new QueryWrapper().lambda().likeRight(SysDepartment::getTreeCode, sysDepartment.getTreeCode())); Map sysDepartmentMap = sysDepartmentList.stream().collect(Collectors.toMap(SysDepartment::getId, e -> e)); //dto.setHospitalIdList(sysDepartmentService.listMyHospital(EnvUtils.getUser().getId()).stream().map(SysDepartment::getId).collect(Collectors.toList())); List mwTransitConfigList = baseMapper.getMwTransitConfigList(page, dto); if (CollectionUtils.isNotEmpty(mwTransitConfigList)) { mwTransitConfigList.stream().map(mwTransitConfig -> { Set set = sysDictItemService.listByIds(Arrays.asList(mwTransitConfig.getWasteType().split(","))).stream().map(SysDictItem::getItemText).collect(Collectors.toSet()); mwTransitConfig.setWasteType(StringUtils.join(set, "/")); fillDepartmentPath(sysDepartmentMap, mwTransitConfig, "/"); mwTransitConfig.setHospitalIdList(sysDepartmentService.getParentIdList(mwTransitConfig.getHospitalId())); return mwTransitConfig; }).collect(Collectors.toSet()); } page.setRecords(mwTransitConfigList); return page; } /** * 获取出库-运输配置新增/编辑 * * @param dto */ @Override @Transactional(rollbackFor = Exception.class) public void saveOrUpdate(MwTransitConfigDTO dto) { if (dto.getId() == null || dto.getId() <= 0) { MwTransitConfig mwTransitConfig = new MwTransitConfig(); BeanUtils.copyProperties(dto, mwTransitConfig); save(mwTransitConfig); } else { MwTransitConfig mwTransitConfig = getById(dto.getId()); if (mwTransitConfig == null) { throw new BusinessException(ErrorCode.ERR_500, "运输配置不存在"); } BeanUtils.copyProperties(dto, mwTransitConfig); updateById(mwTransitConfig); } } @Override public List listSelect(Integer parentId, Integer wasteType) { List list = new ArrayList<>(); SysDepartment myDepartment = sysDepartmentService.getMyDepartment(EnvUtils.getUser().getId()); if (parentId != null) { myDepartment = sysDepartmentService.getById(parentId); } if (myDepartment != null) { if (myDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType()) || myDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) { SysDepartment hospital = sysDepartmentService.getHospital(myDepartment.getParentId()); List childrenList = sysDepartmentService.list(new QueryWrapper().lambda().likeRight(SysDepartment::getTreeCode, hospital.getTreeCode()).eq(SysDepartment::getOrgType, DepartmentEnum.OrgTypeEnum.HOSPITAL.getType())); list = list(new QueryWrapper().lambda().in(MwTransitConfig::getHospitalId, childrenList.stream().map(SysDepartment::getId).collect(Collectors.toList()))); } else { List childrenList = sysDepartmentService.list(new QueryWrapper().lambda().likeRight(SysDepartment::getTreeCode, myDepartment.getTreeCode()).eq(SysDepartment::getOrgType, DepartmentEnum.OrgTypeEnum.HOSPITAL.getType())); list = list(new QueryWrapper().lambda().in(MwTransitConfig::getHospitalId, childrenList.stream().map(SysDepartment::getId).collect(Collectors.toList()))); } } List voList = new ArrayList<>(); for (MwTransitConfig mwTransitConfig : list) { if (wasteType != null) { String[] wasteTypeArray = mwTransitConfig.getWasteType().split(","); for (String s : wasteTypeArray) { if (Integer.valueOf(s).equals(wasteType)) { MwTransitConfigSelectVO vo = new MwTransitConfigSelectVO(); BeanUtils.copyProperties(mwTransitConfig, vo); voList.add(vo); break; } } } else { MwTransitConfigSelectVO vo = new MwTransitConfigSelectVO(); BeanUtils.copyProperties(mwTransitConfig, vo); voList.add(vo); } } return voList; } @Override public List listSelectX(Integer parentId, Integer wasteType) { List list = new ArrayList<>(); SysDepartment myDepartment = sysDepartmentService.getMyDepartment(EnvUtils.getUser().getId()); if (parentId != null) { myDepartment = sysDepartmentService.getById(parentId); } if (myDepartment != null) { if (myDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType()) || myDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) { myDepartment = sysDepartmentService.getHospital(myDepartment.getParentId()); } List childrenList = sysDepartmentService.list(new QueryWrapper().lambda().likeRight(SysDepartment::getTreeCode, myDepartment.getTreeCode()).eq(SysDepartment::getOrgType, DepartmentEnum.OrgTypeEnum.HOSPITAL.getType())); list = mwCollectRecordMapper.getTransitInfoList(childrenList.stream().map(SysDepartment::getId).collect(Collectors.toList())); } List voList = new ArrayList<>(); for (MwTransitConfigSelectVO mwTransitConfigSelectVO : list) { Boolean ok=true; for(MwTransitConfigSelectVO vo:voList){ if(vo.getTransitCompany().trim().equals(mwTransitConfigSelectVO.getTransitCompany().trim())){ ok=false; } } if(ok){ MwTransitConfigSelectVO vo = new MwTransitConfigSelectVO(); BeanUtils.copyProperties(mwTransitConfigSelectVO, vo); voList.add(vo); } } return voList; } @Override public List listAppSelect(Integer parentId) { List list = new ArrayList<>(); SysDepartment myDepartment = sysDepartmentService.getById(parentId); if (myDepartment != null) { if (myDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.DEPARTMENT.getType()) || myDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.OFFICE.getType())) { SysDepartment hospital = sysDepartmentService.getHospital(myDepartment.getParentId()); list = list(new QueryWrapper().lambda().eq(MwTransitConfig::getHospitalId, hospital.getId())); } else if (myDepartment.getOrgType().equals(DepartmentEnum.OrgTypeEnum.HOSPITAL.getType())) { list = list(new QueryWrapper().lambda().eq(MwTransitConfig::getHospitalId, myDepartment.getId())); } } List voList = new ArrayList<>(); for (MwTransitConfig mwTransitConfig : list) { MwTransitConfigSelectVO vo = new MwTransitConfigSelectVO(); BeanUtils.copyProperties(mwTransitConfig, vo); voList.add(vo); } return voList; } }