mitao
2024-12-27 9c717849bee3d6cc25f29ad69a93a507e3de7d13
medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwTransitRouteServiceImpl.java
@@ -1,10 +1,30 @@
package com.sinata.system.service.impl;
import com.sinata.system.domain.MwTransitRoute;
import com.sinata.system.mapper.MwTransitRouteMapper;
import com.sinata.system.service.MwTransitRouteService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sinata.common.entity.PageDTO;
import com.sinata.common.exception.ServiceException;
import com.sinata.common.utils.BeanUtils;
import com.sinata.common.utils.StringUtils;
import com.sinata.system.domain.MwTransitRoute;
import com.sinata.system.domain.MwTransitRouteCar;
import com.sinata.system.domain.MwTransitRoutePoints;
import com.sinata.system.domain.dto.MwTransitRouteDTO;
import com.sinata.system.domain.query.MwTransitRouteQuery;
import com.sinata.system.domain.vo.MwTransitRouteVO;
import com.sinata.system.mapper.MwTransitRouteMapper;
import com.sinata.system.service.MwTransitCarService;
import com.sinata.system.service.MwTransitRouteCarService;
import com.sinata.system.service.MwTransitRoutePointsService;
import com.sinata.system.service.MwTransitRouteService;
import com.sinata.system.service.SysDepartmentService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
 * <p>
@@ -15,6 +35,115 @@
 * @since 2024-12-02
 */
@Service
@RequiredArgsConstructor
public class MwTransitRouteServiceImpl extends ServiceImpl<MwTransitRouteMapper, MwTransitRoute> implements MwTransitRouteService {
    private final SysDepartmentService sysDepartmentService;
    private final MwTransitCarService mwTransitCarService;
    private final MwTransitRoutePointsService mwTransitRoutePointsService;
    private final MwTransitRouteCarService mwTransitRouteCarService;
    /**
     * 分页列表
     *
     * @param query
     * @return
     */
    @Override
    public PageDTO<MwTransitRouteVO> pageList(MwTransitRouteQuery query) {
        String treeCode = sysDepartmentService.getTreeCodeByDepartmentId(query.getDepartmentId());
        if (StringUtils.isBlank(treeCode)) {
            return PageDTO.empty(0L, 0L);
        }
        Page<MwTransitRouteVO> page = baseMapper.pageList(new Page<>(query.getPageCurr(), query.getPageSize()), treeCode);
        return PageDTO.of(page);
    }
    /**
     * 详情
     *
     * @param id
     * @return
     */
    @Override
    public MwTransitRouteVO detail(Long id) {
        MwTransitRouteVO vo = baseMapper.detail(id);
        //关联医院
        vo.setHostpitalList(sysDepartmentService.getHospitalListByRouteId(vo.getId()));
        //关联车辆列表
        vo.setCarList(mwTransitCarService.getCarListByRouteId(vo.getId()));
        return vo;
    }
    /**
     * 新增
     *
     * @param dto
     * @return
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void add(MwTransitRouteDTO dto) {
        MwTransitRoute mwTransitRoute = BeanUtils.copyBean(dto, MwTransitRoute.class);
        mwTransitRoute.setHospitalQuantity(dto.getHostpitalList().size());
        save(mwTransitRoute);
        //关联医院
        List<MwTransitRoutePoints> mwTransitRoutePoints = BeanUtils.copyToList(dto.getHostpitalList(), MwTransitRoutePoints.class);
        mwTransitRoutePoints.forEach(points -> points.setRouteId(mwTransitRoute.getId()));
        mwTransitRoutePointsService.saveBatch(mwTransitRoutePoints);
        //关联车辆
        List<MwTransitRouteCar> mwTransitRouteCars = dto.getCarIdList().stream().map(carId -> {
            MwTransitRouteCar routeCar = new MwTransitRouteCar();
            routeCar.setRouteId(mwTransitRoute.getId());
            routeCar.setCarId(carId);
            return routeCar;
        }).collect(Collectors.toList());
        mwTransitRouteCarService.saveBatch(mwTransitRouteCars);
    }
    /**
     * 编辑
     *
     * @param dto
     * @return
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void edit(MwTransitRouteDTO dto) {
        if (Objects.isNull(dto.getId())) {
            throw new ServiceException("线路id不能为空");
        }
        MwTransitRoute mwTransitRoute = BeanUtils.copyBean(dto, MwTransitRoute.class);
        mwTransitRoute.setHospitalQuantity(dto.getHostpitalList().size());
        updateById(mwTransitRoute);
        //移除关联医院
        mwTransitRoutePointsService.lambdaUpdate().eq(MwTransitRoutePoints::getRouteId, dto.getId()).remove();
        //关联医院
        List<MwTransitRoutePoints> mwTransitRoutePoints = BeanUtils.copyToList(dto.getHostpitalList(), MwTransitRoutePoints.class);
        mwTransitRoutePoints.forEach(points -> points.setRouteId(mwTransitRoute.getId()));
        mwTransitRoutePointsService.saveBatch(mwTransitRoutePoints);
        //移除关联车辆
        mwTransitRouteCarService.lambdaUpdate().eq(MwTransitRouteCar::getRouteId, dto.getId()).remove();
        //关联车辆
        List<MwTransitRouteCar> mwTransitRouteCars = dto.getCarIdList().stream().map(carId -> {
            MwTransitRouteCar routeCar = new MwTransitRouteCar();
            routeCar.setRouteId(mwTransitRoute.getId());
            routeCar.setCarId(carId);
            return routeCar;
        }).collect(Collectors.toList());
        mwTransitRouteCarService.saveBatch(mwTransitRouteCars);
    }
    /**
     * 删除
     *
     * @param id
     */
    @Override
    public void delete(Long id) {
        //移除关联医院
        mwTransitRoutePointsService.lambdaUpdate().eq(MwTransitRoutePoints::getRouteId, id).remove();
        //移除关联车辆
        mwTransitRouteCarService.lambdaUpdate().eq(MwTransitRouteCar::getRouteId, id).remove();
        removeById(id);
    }
}