mitao
2025-04-04 d89a42213b4a32535e93185dedf41fe7a7fc1940
medicalWaste-system/src/main/java/com/sinata/system/service/impl/MwStagingRoomServiceImpl.java
@@ -1,14 +1,18 @@
package com.sinata.system.service.impl;
import com.alibaba.excel.EasyExcel;
import cn.hutool.core.bean.copier.CopyOptions;
import cn.idev.excel.FastExcel;
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.config.AutoColumnWidthEntityStrategy;
import com.sinata.system.config.CustomCellWriteHeightConfig;
import com.sinata.system.domain.MwStagingRoom;
import com.sinata.system.domain.SysDepartment;
import com.sinata.system.domain.dto.MwStagingRoomDTO;
import com.sinata.system.domain.excel.MwCheckoutRecordExcel;
import com.sinata.system.domain.query.CheckoutRecordQuery;
import com.sinata.system.domain.query.MwStagingRoomQuery;
import com.sinata.system.domain.query.StorageRecordQuery;
@@ -18,10 +22,16 @@
import com.sinata.system.mapper.MwStagingRoomMapper;
import com.sinata.system.service.MwStagingRoomService;
import com.sinata.system.service.SysDepartmentService;
import com.sinata.system.utils.ImgUtils;
import lombok.RequiredArgsConstructor;
import net.coobird.thumbnailator.Thumbnails;
import org.apache.commons.io.FilenameUtils;
import org.springframework.stereotype.Service;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;
@@ -48,17 +58,11 @@
     */
    @Override
    public PageDTO<MwStagingRoomVO> pageList(MwStagingRoomQuery query) {
        String treeCode = "";
        if (Objects.isNull(query.getDepartmentId())) {
            SysDepartment myDepartment = sysDepartmentService.getMyDepartment();
            if (Objects.isNull(myDepartment)) {
                return PageDTO.empty(0L, 0L);
            }
            treeCode = myDepartment.getTreeCode();
        } else if (Objects.nonNull(query.getDepartmentId())) {
            treeCode = sysDepartmentService.getById(query.getDepartmentId()).getTreeCode();
        String treeCode = sysDepartmentService.getTreeCodeByDepartmentId(query.getDepartmentId());
        if (StringUtils.isBlank(treeCode)) {
            return PageDTO.empty(0L, 0L);
        }
        Page<MwStagingRoomVO> page = baseMapper.pagelist(new Page<>(query.getPageCurr(), query.getPageSize()), treeCode);
        Page<MwStagingRoomVO> page = baseMapper.pageList(new Page<>(query.getPageCurr(), query.getPageSize()), treeCode);
        return PageDTO.of(page);
    }
@@ -89,6 +93,8 @@
        if (Objects.isNull(dto.getId())) {
            throw new ServiceException("暂存间id不能为空");
        }
        MwStagingRoom mwStagingRoom = BeanUtils.copyBean(dto, MwStagingRoom.class);
        updateById(mwStagingRoom);
    }
    /**
@@ -111,15 +117,9 @@
     */
    @Override
    public PageDTO<MwStorageRecordVO> storageRecord(StorageRecordQuery query) {
        String treeCode = "";
        if (Objects.isNull(query.getDepartmentId()) && Objects.isNull(query.getStagingRoomId())) {
            SysDepartment myDepartment = sysDepartmentService.getMyDepartment();
            if (Objects.isNull(myDepartment)) {
                return PageDTO.empty(0L, 0L);
            }
            treeCode = myDepartment.getTreeCode();
        } else if (Objects.nonNull(query.getDepartmentId()) && Objects.isNull(query.getStagingRoomId())) {
            treeCode = sysDepartmentService.getById(query.getDepartmentId()).getTreeCode();
        String treeCode = sysDepartmentService.getTreeCodeByDepartmentId(query.getDepartmentId());
        if (StringUtils.isBlank(treeCode)) {
            return PageDTO.empty(0L, 0L);
        }
        Page<MwStorageRecordVO> page = baseMapper.storageRecordPage(new Page<>(query.getPageCurr(), query.getPageSize()), query, treeCode);
        return PageDTO.of(page);
@@ -133,15 +133,9 @@
     */
    @Override
    public void storageRecordExport(StorageRecordQuery query, HttpServletResponse response) throws IOException {
        String treeCode = "";
        if (Objects.isNull(query.getDepartmentId()) && Objects.isNull(query.getStagingRoomId())) {
            SysDepartment myDepartment = sysDepartmentService.getMyDepartment();
            if (Objects.isNull(myDepartment)) {
                return;
            }
            treeCode = myDepartment.getTreeCode();
        } else if (Objects.nonNull(query.getDepartmentId()) && Objects.isNull(query.getStagingRoomId())) {
            treeCode = sysDepartmentService.getById(query.getDepartmentId()).getTreeCode();
        String treeCode = sysDepartmentService.getTreeCodeByDepartmentId(query.getDepartmentId());
        if (StringUtils.isBlank(treeCode)) {
            return;
        }
        List<MwStorageRecordVO> list = baseMapper.storageRecordList(query, treeCode);
        // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
@@ -150,7 +144,9 @@
        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
        String fileName = URLEncoder.encode("暂存间入库记录", "UTF-8").replaceAll("\\+", "%20");
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
        EasyExcel.write(response.getOutputStream(), MwStorageRecordVO.class).sheet("暂存间入库记录").doWrite(list);
        FastExcel.write(response.getOutputStream(), MwStorageRecordVO.class)
                .registerWriteHandler(new AutoColumnWidthEntityStrategy())
                .sheet("暂存间入库记录").doWrite(list);
    }
    /**
@@ -161,15 +157,9 @@
     */
    @Override
    public PageDTO<MwCheckoutRecordVO> checkoutRecord(CheckoutRecordQuery query) {
        String treeCode = "";
        if (Objects.isNull(query.getDepartmentId()) && Objects.isNull(query.getStagingRoomId())) {
            SysDepartment myDepartment = sysDepartmentService.getMyDepartment();
            if (Objects.isNull(myDepartment)) {
                return PageDTO.empty(0L, 0L);
            }
            treeCode = myDepartment.getTreeCode();
        } else if (Objects.nonNull(query.getDepartmentId()) && Objects.isNull(query.getStagingRoomId())) {
            treeCode = sysDepartmentService.getById(query.getDepartmentId()).getTreeCode();
        String treeCode = sysDepartmentService.getTreeCodeByDepartmentId(query.getDepartmentId());
        if (StringUtils.isBlank(treeCode)) {
            return PageDTO.empty(0L, 0L);
        }
        Page<MwCheckoutRecordVO> page = baseMapper.checkoutRecordPage(new Page<>(query.getPageCurr(), query.getPageSize()), query, treeCode);
        return PageDTO.of(page);
@@ -183,23 +173,67 @@
     */
    @Override
    public void checkoutRecordExport(CheckoutRecordQuery query, HttpServletResponse response) throws IOException {
        String treeCode = "";
        if (Objects.isNull(query.getDepartmentId()) && Objects.isNull(query.getStagingRoomId())) {
            SysDepartment myDepartment = sysDepartmentService.getMyDepartment();
            if (Objects.isNull(myDepartment)) {
                return;
            }
            treeCode = myDepartment.getTreeCode();
        } else if (Objects.nonNull(query.getDepartmentId()) && Objects.isNull(query.getStagingRoomId())) {
            treeCode = sysDepartmentService.getById(query.getDepartmentId()).getTreeCode();
        String treeCode = sysDepartmentService.getTreeCodeByDepartmentId(query.getDepartmentId());
        if (StringUtils.isBlank(treeCode)) {
            return;
        }
        List<MwCheckoutRecordVO> list = baseMapper.checkoutRecordList(query, treeCode);
        // 这里注意 有同学反应使用swagger 会导致各种问题,请直接用浏览器或者用postman
        CopyOptions copyOptions = new CopyOptions();
        copyOptions.setIgnoreProperties("hospitalSignature");
        List<MwCheckoutRecordExcel> mwCheckoutRecordExcels = BeanUtils.copyToList(list, MwCheckoutRecordExcel.class, copyOptions);
        for (MwCheckoutRecordExcel mwCheckoutRecordExcel : mwCheckoutRecordExcels) {
            for (MwCheckoutRecordVO mwCheckoutRecordVO : list) {
                if (mwCheckoutRecordVO.getId().equals(mwCheckoutRecordExcel.getId())) {
                    if (StringUtils.isNotBlank(mwCheckoutRecordVO.getHospitalSignature())) {
                        try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
                            //获取文件后缀
                            String extension = FilenameUtils.getExtension(mwCheckoutRecordVO.getHospitalSignature());
                            BufferedImage originalImage = ImageIO.read(ImgUtils.getFileByHttpURL(mwCheckoutRecordVO.getHospitalSignature()));
                            Thumbnails.of(originalImage).scale(0.8).rotate(270).outputFormat(extension).toOutputStream(outputStream);
                            mwCheckoutRecordExcel.setHospitalSignature(outputStream.toByteArray());
                        } catch (IOException e) {
                            throw new RuntimeException(e);
                        }
                    }
                }
            }
        }
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setCharacterEncoding("utf-8");
        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
        String fileName = URLEncoder.encode("暂存间出库记录", "UTF-8").replaceAll("\\+", "%20");
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx");
        EasyExcel.write(response.getOutputStream(), MwCheckoutRecordVO.class).sheet("暂存间出库记录").doWrite(list);
        FastExcel.write(response.getOutputStream(), MwCheckoutRecordExcel.class)
                .registerWriteHandler(new AutoColumnWidthEntityStrategy())
                .registerWriteHandler(new CustomCellWriteHeightConfig())
                .sheet("暂存间出库记录")
                .doWrite(mwCheckoutRecordExcels);
    }
    @Override
    public List<MwStagingRoomVO> queryStagingRoomList() {
        return baseMapper.queryStagingRoomList();
    }
    /**
     * 暂存间待处理医废分页列表
     *
     * @param query
     * @return
     */
    @Override
    public PageDTO<MwStorageRecordVO> temporarilyStoredMedicalWaste(StorageRecordQuery query) {
        return PageDTO.of(baseMapper.temporarilyStoredMedicalWaste(new Page<MwStorageRecordVO>(query.getPageCurr(), query.getPageSize()), query));
    }
    /**
     * 根据医废查询使用列表
     *
     * @param id 微波设备id
     * @return
     */
    @Override
    public List<MwStorageRecordVO> queryMedicalWasteList(Long id) {
        return baseMapper.queryMedicalWasteList(id);
    }
}