package com.imed.costaccount.service.impl; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.imed.costaccount.common.exception.CostException; import com.imed.costaccount.mapper.ResponsibilityDepartmentMapper; import com.imed.costaccount.model.Responsibility; import com.imed.costaccount.model.ResponsibilityDepartment; import com.imed.costaccount.model.User; import com.imed.costaccount.model.dto.DepartDTO; import com.imed.costaccount.model.vo.CenterDepartmentVO; import com.imed.costaccount.model.vo.DepartVO; import com.imed.costaccount.service.ResponsibilityDepartmentService; import com.imed.costaccount.service.ResponsibilityService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @Slf4j @Service("responsibilityDepartmentService") public class ResponsibilityDepartmentServiceImpl extends ServiceImpl implements ResponsibilityDepartmentService { private ResponsibilityService responsibilityService; public ResponsibilityDepartmentServiceImpl(ResponsibilityService responsibilityService) { this.responsibilityService = responsibilityService; } /** * 获取责任中心对照列表 * * @param user 当前登录用户 * @return */ @Override public List getCenterDepart(User user) { List list = responsibilityService.getParentSon(user); for (CenterDepartmentVO centerDepartmentVO : list) { if (centerDepartmentVO.getIsGatherCenter() == 2) { centerDepartmentVO.setDepartments(baseMapper.getDepartByCenterId(centerDepartmentVO.getResponsibilityId())); } List child = centerDepartmentVO.getChild(); if (CollUtil.isEmpty(child)) { child = new ArrayList<>(); } for (CenterDepartmentVO departmentVO : child) { List departVOS = baseMapper.getDepartByCenterId(departmentVO.getResponsibilityId()); departmentVO.setDepartments(departVOS); } } return list; } /** * 保存或修改责任中心对照 * * @param departDTO * @param user */ @Override @Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class) public void saveCenterDepart(DepartDTO departDTO, User user) { Long responsibilityId = departDTO.getResponsibilityId(); Long hospId = user.getHospId(); List list = this.list( new LambdaQueryWrapper().select(ResponsibilityDepartment::getId) .eq(ResponsibilityDepartment::getResponsibilityId, responsibilityId) .eq(ResponsibilityDepartment::getHospId, hospId) ); if (CollUtil.isNotEmpty(list)) { this.removeByIds(list.stream().map(ResponsibilityDepartment::getId).collect(Collectors.toList())); } List departmentIds = departDTO.getDepartmentIds(); if (CollUtil.isEmpty(departmentIds)) { return ; } Responsibility byId = responsibilityService.getById(responsibilityId); if (Objects.isNull(byId)) { throw new CostException(500, "责任中心不存在或已被移除"); } if (byId.getIsGatherCenter() == 1) { throw new CostException(500, "汇总中心不允许添加对照关系,请先修改"); } List data = departmentIds.stream().map(item -> { ResponsibilityDepartment centerDepart = new ResponsibilityDepartment(); return centerDepart.setResponsibilityId(responsibilityId).setCreateTime(System.currentTimeMillis()).setHospId(hospId) .setDepartmentId(item); }).collect(Collectors.toList()); this.saveBatch(data); } }