liusheng
2023-06-06 997d3676de243cc1d84c62990d104fd81a25d54a
smartor/src/main/java/com/smartor/service/impl/PatArchiveServiceImpl.java
@@ -1,134 +1,328 @@
package com.smartor.service.impl;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.DtoConversionUtils;
import com.ruoyi.common.utils.StringUtils;
import com.smartor.domain.BaseTag;
import com.smartor.domain.PatArchivetag;
import com.smartor.domain.PatUpInfoVO;
import com.smartor.mapper.BaseTagMapper;
import com.smartor.mapper.PatArchivetagMapper;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import com.ruoyi.common.utils.StringUtils;
import org.springframework.transaction.annotation.Transactional;
import com.smartor.domain.PatMedOuthosp;
import com.smartor.mapper.PatArchiveMapper;
import com.smartor.domain.PatArchive;
import com.smartor.service.IPatArchiveService;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
/**
 * 患者档案Service业务层处理
 *
 * @author ruoyi
 * @date 2023-02-22
 *
 * @author smartor
 * @date 2023-03-04
 */
@Service
public class PatArchiveServiceImpl implements IPatArchiveService
{
public class PatArchiveServiceImpl implements IPatArchiveService {
    @Autowired
    private PatArchiveMapper patArchiveMapper;
    @Autowired
    private BaseTagMapper baseTagMapper;
    @Autowired
    private PatArchivetagMapper patArchivetagMapper;
    /**
     * 查询患者档案
     *
     * @param PatID 患者档案主键
     *
     * @param patid 患者档案主键
     * @return 患者档案
     */
    @Override
    public PatArchive selectPatArchiveByPatID(Long PatID)
    {
        return patArchiveMapper.selectPatArchiveByPatID(PatID);
    public PatArchive selectPatArchiveByPatid(Long patid) {
        return patArchiveMapper.selectPatArchiveByPatid(patid);
    }
    /**
     * 查询患者档案列表
     *
     *
     * @param patArchive 患者档案
     * @return 患者档案
     */
    @Override
    public List<PatArchive> selectPatArchiveList(PatArchive patArchive)
    {
    public List<PatArchive> selectPatArchiveList(PatArchive patArchive) {
        return patArchiveMapper.selectPatArchiveList(patArchive);
    }
    /**
     * 新增患者档案
     *
     *
     * @param patArchive 患者档案
     * @return 结果
     */
    @Transactional
    @Override
    public int insertPatArchive(PatArchive patArchive)
    {
    public int insertPatArchive(PatArchive patArchive) {
        patArchive.setCreateTime(DateUtils.getNowDate());
        int rows = patArchiveMapper.insertPatArchive(patArchive);
        insertPatMedOuthosp(patArchive);
        return rows;
        return patArchiveMapper.insertPatArchive(patArchive);
    }
    /**
     * 修改患者档案
     *
     *
     * @param patArchive 患者档案
     * @return 结果
     */
    @Transactional
    @Override
    public int updatePatArchive(PatArchive patArchive)
    {
    public int updatePatArchive(PatArchive patArchive) {
        patArchive.setUpdateTime(DateUtils.getNowDate());
        patArchiveMapper.deletePatMedOuthospByPatID(patArchive.getPatID());
        insertPatMedOuthosp(patArchive);
        return patArchiveMapper.updatePatArchive(patArchive);
    }
    /**
     * 批量删除患者档案
     *
     * @param PatIDs 需要删除的患者档案主键
     *
     * @param patids 需要删除的患者档案主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deletePatArchiveByPatIDs(Long[] PatIDs)
    {
        patArchiveMapper.deletePatMedOuthospByPatIDs(PatIDs);
        return patArchiveMapper.deletePatArchiveByPatIDs(PatIDs);
    public int deletePatArchiveByPatids(Long[] patids) {
        return patArchiveMapper.deletePatArchiveByPatids(patids);
    }
    /**
     * 删除患者档案信息
     *
     * @param PatID 患者档案主键
     *
     * @param patid 患者档案主键
     * @return 结果
     */
    @Transactional
    @Override
    public int deletePatArchiveByPatID(Long PatID)
    {
        patArchiveMapper.deletePatMedOuthospByPatID(PatID);
        return patArchiveMapper.deletePatArchiveByPatID(PatID);
    public int deletePatArchiveByPatid(Long patid) {
        return patArchiveMapper.deletePatArchiveByPatid(patid);
    }
    /**
     * 新增患者门诊记录信息
     *
     * @param patArchive 患者档案对象
     */
    public void insertPatMedOuthosp(PatArchive patArchive)
    {
        List<PatMedOuthosp> patMedOuthospList = patArchive.getPatMedOuthospList();
        Long PatID = patArchive.getPatID();
        if (StringUtils.isNotNull(patMedOuthospList))
        {
            List<PatMedOuthosp> list = new ArrayList<PatMedOuthosp>();
            for (PatMedOuthosp patMedOuthosp : patMedOuthospList)
            {
                patMedOuthosp.setPatID(PatID);
                list.add(patMedOuthosp);
    @Override
    @Transactional
    public PatUpInfoVO importFilehandle(String username, MultipartFile file) {
        PatUpInfoVO patUpInfoVO = new PatUpInfoVO();
        Integer successNum = 0;
        Integer failNum = 0;
        List<PatArchive> errorpatArchiveList = new ArrayList<>();
        try {
            Workbook workbook = new XSSFWorkbook(file.getInputStream());
            Sheet sheet = workbook.getSheetAt(0);
            for (int i = sheet.getFirstRowNum() + 1; i < sheet.getLastRowNum(); i++) {
                Row row = sheet.getRow(i);
                //如果行为空,进行下一次循环
                if (ObjectUtils.isEmpty(row)) {
                    continue;
                }
                PatArchive patArchive = new PatArchive();
                if (ObjectUtils.isEmpty(row.getCell(3)) || StringUtils.isEmpty(row.getCell(3).toString())) {
                    addRemark("身份证号为空", patArchive);
                } else {
                    patArchive.setIccardno(row.getCell(3).toString());
                    //根据身份证,先去患者管理表里看看有没有这个人,如果有这个人,也不需要插入患者表
                    List<PatArchive> patArchiveList1 = patArchiveMapper.selectPatArchiveList(patArchive);
                    if (patArchiveList1.size() > 0) {
                        patArchive.setRemark("该患者已存在");
                    }
                }
                //判断姓名是否为空
                if (Objects.isNull(row.getCell(0)) || StringUtils.isEmpty(row.getCell(0).toString())) {
                    addRemark("姓名为空", patArchive);
                } else {
                    patArchive.setName(row.getCell(0).toString());
                }
                //判断性别是否为空
                if (ObjectUtils.isEmpty(row.getCell(1)) || StringUtils.isEmpty(row.getCell(1).toString())) {
                    addRemark("性别为空", patArchive);
                } else {
                    patArchive.setSex(row.getCell(1).toString().equals("男") ? 1L : 2L);
                }
                //判断证件类型是否为空
                if (ObjectUtils.isEmpty(row.getCell(2)) || StringUtils.isEmpty(row.getCell(2).toString())) {
                    addRemark("证件类型为空", patArchive);
                } else {
                    patArchive.setIccardtype(row.getCell(2).toString());
                }
                //判断出生日期是否为空
                if (ObjectUtils.isEmpty(row.getCell(4)) || StringUtils.isEmpty(row.getCell(4).toString())) {
                    addRemark("出生日期为空", patArchive);
                } else {
                    //格式转换,转成日期
                    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
                    Date javaDate = new Date();
                    if (row.getCell(4).getCellType().toString().equals("NUMERIC")) {
                        javaDate = HSSFDateUtil.getJavaDate(row.getCell(4).getNumericCellValue());
                    } else {
                        javaDate = new Date(row.getCell(4).toString());
                    }
                    dateFormat.format(javaDate);
                    patArchive.setBirthdate(javaDate);
                }
                //判断本人联系是否为空,和长度是否正确
                if (ObjectUtils.isEmpty(row.getCell(5)) || StringUtils.isEmpty(row.getCell(5).toString())) {
                    addRemark("本人联系电话为空", patArchive);
                } else {
                    //格式转换,转成文本
                    if (row.getCell(5).getCellType().toString().equals("NUMERIC")) {
                        String cellData = String.valueOf((long) row.getCell(5).getNumericCellValue());
                        patArchive.setTelcode(cellData);
                    } else {
                        DataFormatter dataFormatter = new DataFormatter();
                        String cellValue = dataFormatter.formatCellValue(row.getCell(5));
                        patArchive.setTelcode(cellValue);
                    }
                }
                //判断亲属联系方式是否为空,长度是否正确
                if (ObjectUtils.isEmpty(row.getCell(6)) || StringUtils.isEmpty(row.getCell(6).toString())) {
                    addRemark("亲属联系方式为空", patArchive);
                } else {
                    //格式转换,转成文本
                    if (row.getCell(6).getCellType().toString().equals("NUMERIC")) {
                        String cellData = String.valueOf((long) row.getCell(6).getNumericCellValue());
                        patArchive.setRelativetelcode(cellData);
                    } else {
                        DataFormatter dataFormatter = new DataFormatter();
                        String cellValue = dataFormatter.formatCellValue(row.getCell(6));
                        patArchive.setRelativetelcode(cellValue);
                    }
                }
                //患都标签是否为空
                if (ObjectUtils.isEmpty(row.getCell(7))) {
                    addRemark("患者标签为空", patArchive);
                } else {
                    patArchive.setTag(row.getCell(7).toString());
                }
                //判断备注是否为空
                if (!StringUtils.isEmpty(patArchive.getRemark())) {
                    //如果备注字段不为空,说有该患者填写有问题
                    errorpatArchiveList.add(patArchive);
                    failNum = failNum + 1;
                    continue;
                }
                //往患者表里新增,并获取到新增ID
                patArchiveMapper.insertPatArchive(patArchive);
                //根据标签名查询出标签信息
                String s = row.getCell(7).toString();
                String[] split = s.split(",");
                for (String tagName : split) {
                    BaseTag baseTag = new BaseTag();
                    baseTag.setTagname(tagName);
                    List<BaseTag> baseTags = baseTagMapper.selectBaseTagList(baseTag);
                    BaseTag baseTag1 = baseTags.get(0);
                    // 新增患者档案标签
                    PatArchivetag patArchivetag = DtoConversionUtils.sourceToTarget(baseTag1, PatArchivetag.class);
                    patArchivetag.setUpdateBy(username);
                    patArchivetag.setCreateTime(new Date());
                    patArchivetag.setPatid(patArchive.getPatid());
                    patArchivetagMapper.insertPatArchivetag(patArchivetag);
                }
                successNum = successNum + 1;
            }
            if (list.size() > 0)
            {
                patArchiveMapper.batchPatMedOuthosp(list);
        } catch (Exception e) {
            e.printStackTrace();
        }
        patUpInfoVO.setFailNum(failNum);
        patUpInfoVO.setSuccessNum(successNum);
        patUpInfoVO.setPatArchiveList(errorpatArchiveList);
        return patUpInfoVO;
    }
    @Override
    public String exportErrPatInfo(List<PatArchive> patArchiveList) {
        // 创建工作簿和工作表
        Workbook workbook = new XSSFWorkbook();
        Sheet sheet = workbook.createSheet("Sheet1");
        // 创建行和单元格,并设置单元格的值
        Row row = sheet.createRow(0);
        getdata(row, null, true);
        for (int i = 0; i < patArchiveList.size(); i++) {
            row = sheet.createRow(i + 1);
            getdata(row, patArchiveList.get(i), false);
        }
        // 保存工作簿到文件
        FileOutputStream outputStream = null;
        try {
            outputStream = new FileOutputStream("患者错误信息.xlsx");
            workbook.write(outputStream);
            outputStream.close();
            workbook.close();
        } catch (Exception e) {
            e.printStackTrace();
            return "导出失败";
        }
        return "导出成功";
    }
    private void getdata(Row row, PatArchive patArchive, Boolean head) {
        if (head) {
            row.createCell(0).setCellValue("姓名");
            row.createCell(1).setCellValue("性别");
            row.createCell(2).setCellValue("证件类型");
            row.createCell(3).setCellValue("证件号码");
            row.createCell(4).setCellValue("出生日期");
            row.createCell(5).setCellValue("本人联系方式");
            row.createCell(6).setCellValue("亲属联系方式");
            row.createCell(7).setCellValue("患者标签");
            row.createCell(8).setCellValue("错误原因");
        } else {
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd");
            row.createCell(0).setCellValue(patArchive.getName());
            row.createCell(1).setCellValue(patArchive.getSex() == 1 ? "男" : "女");
            row.createCell(2).setCellValue(patArchive.getIccardtype());
            row.createCell(3).setCellValue(patArchive.getIccardno());
            if (ObjectUtils.isNotEmpty(patArchive.getBirthdate())) {
                row.createCell(4).setCellValue(simpleDateFormat.format(patArchive.getBirthdate()).toString());
            }
            row.createCell(5).setCellValue(patArchive.getTelcode());
            row.createCell(6).setCellValue(patArchive.getRelativetelcode());
            row.createCell(7).setCellValue(patArchive.getTag());
            row.createCell(8).setCellValue(patArchive.getRemark());
        }
    }
    public void addRemark(String info, PatArchive patArchive) {
        if (StringUtils.isNotEmpty(patArchive.getRemark()) == true) {
            patArchive.setRemark(patArchive.getRemark() + "," + info);
        } else {
            patArchive.setRemark(info);
        }
    }
}