liusheng
2023-06-15 77d7257c02fc811a53b8d9207e4239f69c8a600c
smartor/src/main/java/com/smartor/service/impl/PatArchiveServiceImpl.java
@@ -1,26 +1,28 @@
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.*;
import java.util.stream.Collectors;
import com.ruoyi.common.core.domain.entity.SysUser;
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.domain.*;
import com.smartor.mapper.BaseTagMapper;
import com.smartor.mapper.PatArchivetagMapper;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.ss.formula.functions.Now;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.parameters.P;
import org.springframework.stereotype.Service;
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;
@@ -113,7 +115,7 @@
    @Override
    @Transactional
    public PatUpInfoVO fileHandle(String username, MultipartFile file) {
    public PatUpInfoVO importFilehandle(SysUser user, String tags, MultipartFile file) {
        PatUpInfoVO patUpInfoVO = new PatUpInfoVO();
        Integer successNum = 0;
        Integer failNum = 0;
@@ -130,8 +132,8 @@
                    continue;
                }
                PatArchive patArchive = new PatArchive();
                if (ObjectUtils.isEmpty(row.getCell(3))) {
                    patArchive.setRemark("身份证号为空");
                if (ObjectUtils.isEmpty(row.getCell(3)) || StringUtils.isEmpty(row.getCell(3).toString())) {
                    addRemark("身份证号为空", patArchive);
                } else {
                    patArchive.setIccardno(row.getCell(3).toString());
                    //根据身份证,先去患者管理表里看看有没有这个人,如果有这个人,也不需要插入患者表
@@ -142,31 +144,30 @@
                }
                //判断姓名是否为空
                if (ObjectUtils.isEmpty(row.getCell(0))) {
                    patArchive.setRemark(patArchive.getRemark() + "," + "姓名为空");
                    errorpatArchiveList.add(patArchive);
                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))) {
                    patArchive.setRemark(patArchive.getRemark() + "," + "性别为空");
                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))) {
                    patArchive.setRemark("证件类型为空");
                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))) {
                    patArchive.setRemark("出生日期为空");
                if (ObjectUtils.isEmpty(row.getCell(4)) || StringUtils.isEmpty(row.getCell(4).toString())) {
                    addRemark("出生日期为空", patArchive);
                } else {
                    //格式转换,转成日期
                    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
@@ -181,8 +182,8 @@
                }
                //判断本人联系是否为空,和长度是否正确
                if (ObjectUtils.isEmpty(row.getCell(5))) {
                    patArchive.setRemark("本人联系电话为空");
                if (ObjectUtils.isEmpty(row.getCell(5)) || StringUtils.isEmpty(row.getCell(5).toString())) {
                    addRemark("本人联系电话为空", patArchive);
                } else {
                    //格式转换,转成文本
                    if (row.getCell(5).getCellType().toString().equals("NUMERIC")) {
@@ -196,8 +197,8 @@
                }
                //判断亲属联系方式是否为空,长度是否正确
                if (ObjectUtils.isEmpty(row.getCell(6))) {
                    patArchive.setRemark("本人联系电话为空");
                if (ObjectUtils.isEmpty(row.getCell(6)) || StringUtils.isEmpty(row.getCell(6).toString())) {
                    addRemark("亲属联系方式为空", patArchive);
                } else {
                    //格式转换,转成文本
                    if (row.getCell(6).getCellType().toString().equals("NUMERIC")) {
@@ -211,8 +212,19 @@
                }
                //患都标签是否为空
                if (ObjectUtils.isEmpty(row.getCell(7))) {
                    patArchive.setRemark("患者标签为空");
                if (ObjectUtils.isEmpty(row.getCell(7)) || StringUtils.isEmpty(row.getCell(7).toString())) {
                    if (StringUtils.isEmpty(tags)) {
                        addRemark("患者标签为空", patArchive);
                    } else {
                        patArchive.setTag(tags);
                    }
                } else {
                    if (StringUtils.isNotEmpty(tags)) {
                        patArchive.setTag(row.getCell(7).toString() + "," + tags);
                    } else {
                        patArchive.setTag(row.getCell(7).toString());
                    }
                }
                //判断备注是否为空
@@ -227,17 +239,36 @@
                patArchiveMapper.insertPatArchive(patArchive);
                //根据标签名查询出标签信息
                BaseTag baseTag = new BaseTag();
                baseTag.setTagname(row.getCell(7).toString());
                List<BaseTag> baseTags = baseTagMapper.selectBaseTagList(baseTag);
                BaseTag baseTag1 = baseTags.get(0);
                String s = patArchive.getTag();
                String[] split = s.split(",");
                for (String tagName : split) {
                    BaseTag baseTag = new BaseTag();
                    baseTag.setTagname(tagName);
                    List<BaseTag> baseTags = baseTagMapper.selectBaseTagList(baseTag);
                // 新增患者档案标签
                PatArchivetag patArchivetag = DtoConversionUtils.sourceToTarget(baseTag1, PatArchivetag.class);
                patArchivetag.setUpdateBy(username);
                patArchivetag.setCreateTime(new Date());
                patArchivetag.setPatid(patArchive.getPatid());
                patArchivetagMapper.insertPatArchivetag(patArchivetag);
                    //如果该标签为空,现标签管理没有出现过的新标签时,自动将标签添加到"标签管理"未分类“中。编辑人为导入账号
                    if (CollectionUtils.isEmpty(baseTags)) {
                        baseTag = new BaseTag();
                        baseTag.setTagcategoryid(1L);
                        baseTag.setTagname(tagName);
                        baseTag.setOrgid(user.getDeptId().toString());
                        baseTag.setDelFlag("0");
                        baseTag.setCreateBy(user.getUserName());
                        baseTag.setCreateTime(new Date());
                        baseTag.setCreateBy(user.getUserName());
                        baseTag.setCreateTime(new Date());
                        baseTagMapper.insertBaseTag(baseTag);
                    } else {
                        baseTag = baseTags.get(0);
                    }
                    // 新增患者档案标签
                    PatArchivetag patArchivetag = DtoConversionUtils.sourceToTarget(baseTag, PatArchivetag.class);
                    patArchivetag.setUpdateBy(user.getUserName());
                    patArchivetag.setCreateTime(new Date());
                    patArchivetag.setPatid(patArchive.getPatid());
                    patArchivetagMapper.insertPatArchivetag(patArchivetag);
                }
                successNum = successNum + 1;
            }
@@ -251,5 +282,145 @@
        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 "导出成功";
    }
    @Override
    public List<PatArchive> patInfoByContion(PatArchiveReq patArchive) {
        List<PatArchive> patArchives = new ArrayList<>();
        //根据条件获取患者信息
        List<PatArchive> patArchiveList = patArchiveMapper.patInfoByContion(patArchive);
        //根据患者ID进行分组
        Map<Long, List<PatArchive>> listMap = patArchiveList.stream().collect(Collectors.groupingBy(PatArchive::getPatid));
        //对数据进行封装
        for (List<PatArchive> list : listMap.values()) {
            PatArchive patArchive1 = new PatArchive();
            List<String> stringList = new ArrayList<>();
            for (int i = 0; i < list.size(); i++) {
                if (i == 0) {
                    patArchive1 = DtoConversionUtils.sourceToTarget(list.get(0), PatArchive.class);
                    //将标签置空,不空也没有问题
                    patArchive1.setTag("");
                }
                //将查出的tag,放到patArchive1里的TagList中
                stringList.add(list.get(i).getTag());
            }
            patArchive1.setTagList(stringList);
            patArchives.add(patArchive1);
        }
        return patArchives;
    }
    @Override
    public List<PatArchivetagAndPatientInfo> patTagByContion(List<Long> tagids) {
        List<PatArchivetagAndPatientInfo> patArchivetagAndPatientInfos = new ArrayList<>();
        if (tagids.size() > 0) {
            for (int i = 0; i < tagids.size(); i++) {
                PatArchivetag patArchivetag = new PatArchivetag();
                patArchivetag.setTagid(tagids.get(i));
                //获取患者patid
                List<PatArchivetag> patArchivetags1 = patArchivetagMapper.selectPatArchivetagAndBaseTagList(patArchivetag);
                for (int j = 0; j < patArchivetags1.size(); j++) {
                    PatArchivetagAndPatientInfo patArchivetagAndPatientInfo = DtoConversionUtils.sourceToTarget(patArchivetags1.get(j), PatArchivetagAndPatientInfo.class);
                    PatArchive patArchive = new PatArchive();
                    patArchive.setPatid(patArchivetagAndPatientInfo.getPatid());
                    List<PatArchive> patArchiveList = patArchiveMapper.selectPatArchiveList(patArchive);
                    patArchivetagAndPatientInfo.setPatNum(patArchiveList.size());
                    // patArchivetagAndPatientInfo.setPatArchives(patArchiveList);
                    patArchivetagAndPatientInfos.add(patArchivetagAndPatientInfo);
                }
            }
        } else {
            PatArchivetag patArchivetag = new PatArchivetag();
            //获取患者patid
            List<PatArchivetag> patArchivetags1 = patArchivetagMapper.selectPatArchivetagAndBaseTagList(patArchivetag);
            for (int j = 0; j < patArchivetags1.size(); j++) {
                PatArchivetagAndPatientInfo patArchivetagAndPatientInfo = DtoConversionUtils.sourceToTarget(patArchivetags1.get(j), PatArchivetagAndPatientInfo.class);
                PatArchive patArchive = new PatArchive();
                patArchive.setPatid(patArchivetagAndPatientInfo.getPatid());
                List<PatArchive> patArchiveList = patArchiveMapper.selectPatArchiveList(patArchive);
                //  patArchivetagAndPatientInfo.setPatArchives(patArchiveList);
                patArchivetagAndPatientInfo.setPatNum(patArchiveList.size());
                patArchivetagAndPatientInfos.add(patArchivetagAndPatientInfo);
            }
        }
        return patArchivetagAndPatientInfos;
    }
    @Override
    public List<PatArchivetagAndPatientInfo> patInfoByTag(List<Long> tagids) {
        return null;
    }
    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);
        }
    }
}