package com.smartor.service.impl; 
 | 
  
 | 
import com.ruoyi.common.core.domain.entity.SysUser; 
 | 
import com.ruoyi.common.utils.DateUtils; 
 | 
import com.ruoyi.common.utils.StringUtils; 
 | 
import com.ruoyi.common.core.domain.entity.SysUserRole; 
 | 
import com.smartor.domain.PatArchiveImport; 
 | 
import com.smartor.mapper.PatArchiveImportMapper; 
 | 
import com.smartor.service.IPatArchiveImportService; 
 | 
import org.apache.commons.collections4.CollectionUtils; 
 | 
import org.apache.commons.lang3.ObjectUtils; 
 | 
import org.apache.poi.ss.usermodel.Cell; 
 | 
import org.apache.poi.ss.usermodel.Row; 
 | 
import org.apache.poi.ss.usermodel.Sheet; 
 | 
import org.apache.poi.ss.usermodel.Workbook; 
 | 
import org.apache.poi.xssf.usermodel.XSSFWorkbook; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Service; 
 | 
import org.springframework.web.multipart.MultipartFile; 
 | 
  
 | 
import java.text.DecimalFormat; 
 | 
import java.text.SimpleDateFormat; 
 | 
import java.util.ArrayList; 
 | 
import java.util.Date; 
 | 
import java.util.List; 
 | 
import java.util.regex.Pattern; 
 | 
  
 | 
/** 
 | 
 * Excel导入患者档案Service业务层处理 
 | 
 * 
 | 
 * @author lihu 
 | 
 * @date 2024-09-05 
 | 
 */ 
 | 
@Service 
 | 
public class PatArchiveImportServiceImpl implements IPatArchiveImportService { 
 | 
    @Autowired 
 | 
    private PatArchiveImportMapper patArchiveImportMapper; 
 | 
  
 | 
  
 | 
    /** 
 | 
     * 查询Excel导入患者档案 
 | 
     * 
 | 
     * @param id Excel导入患者档案主键 
 | 
     * @return Excel导入患者档案 
 | 
     */ 
 | 
    @Override 
 | 
    public PatArchiveImport selectPatArchiveImportById(Long id) { 
 | 
        return patArchiveImportMapper.selectPatArchiveImportById(id); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 查询Excel导入患者档案列表 
 | 
     * 
 | 
     * @param patArchiveImport Excel导入患者档案 
 | 
     * @return Excel导入患者档案 
 | 
     */ 
 | 
    @Override 
 | 
    public List<PatArchiveImport> selectPatArchiveImportList(PatArchiveImport patArchiveImport) { 
 | 
        return patArchiveImportMapper.selectPatArchiveImportList(patArchiveImport); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 新增Excel导入患者档案 
 | 
     * 
 | 
     * @param patArchiveImport Excel导入患者档案 
 | 
     * @return 结果 
 | 
     */ 
 | 
    @Override 
 | 
    public int insertPatArchiveImport(PatArchiveImport patArchiveImport) { 
 | 
        patArchiveImport.setCreateTime(DateUtils.getNowDate()); 
 | 
        return patArchiveImportMapper.insertPatArchiveImport(patArchiveImport); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 修改Excel导入患者档案 
 | 
     * 
 | 
     * @param patArchiveImport Excel导入患者档案 
 | 
     * @return 结果 
 | 
     */ 
 | 
    @Override 
 | 
    public int updatePatArchiveImport(PatArchiveImport patArchiveImport) { 
 | 
        patArchiveImport.setUpdateTime(DateUtils.getNowDate()); 
 | 
        return patArchiveImportMapper.updatePatArchiveImport(patArchiveImport); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 批量删除Excel导入患者档案 
 | 
     * 
 | 
     * @param ids 需要删除的Excel导入患者档案主键 
 | 
     * @return 结果 
 | 
     */ 
 | 
    @Override 
 | 
    public int deletePatArchiveImportByIds(Long[] ids) { 
 | 
        return patArchiveImportMapper.deletePatArchiveImportByIds(ids); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 删除Excel导入患者档案信息 
 | 
     * 
 | 
     * @param id Excel导入患者档案主键 
 | 
     * @return 结果 
 | 
     */ 
 | 
    @Override 
 | 
    public int deletePatArchiveImportById(Long id) { 
 | 
        return patArchiveImportMapper.deletePatArchiveImportById(id); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<PatArchiveImport> importPatInfo(MultipartFile multipartFile, SysUser user) { 
 | 
        //用于返回 
 | 
        List<PatArchiveImport> patArchiveImports = new ArrayList<>(); 
 | 
  
 | 
        //去重 
 | 
        List<String> qc = new ArrayList<>(); 
 | 
        try { 
 | 
            Workbook workbook = new XSSFWorkbook(multipartFile.getInputStream()); 
 | 
            Sheet sheet = workbook.getSheetAt(0); 
 | 
  
 | 
            for (int i = sheet.getFirstRowNum() + 1; i <= sheet.getLastRowNum(); i++) { 
 | 
                //导入患者对象 
 | 
                PatArchiveImport patArchiveImport = new PatArchiveImport(); 
 | 
                Row row = sheet.getRow(i); 
 | 
                //如果行为空,进行下一次循环 
 | 
                if (ObjectUtils.isEmpty(row.getCell(0)) && StringUtils.isNotEmpty(row.getCell(0) + "") && ObjectUtils.isEmpty(row.getCell(1)) && StringUtils.isNotEmpty(row.getCell(1) + "") && ObjectUtils.isEmpty(row.getCell(2)) && StringUtils.isNotEmpty(row.getCell(2) + "")) { 
 | 
                    continue; 
 | 
                } 
 | 
                //判断数据是否有问题 
 | 
  
 | 
  
 | 
                if (ObjectUtils.isNotEmpty(row.getCell(0)) && StringUtils.isNotEmpty(row.getCell(0) + "")) { 
 | 
                    patArchiveImport.setName(row.getCell(0).toString()); 
 | 
                } else { 
 | 
                    continue; 
 | 
                } 
 | 
                if (ObjectUtils.isNotEmpty(row.getCell(1)) && StringUtils.isNotEmpty(row.getCell(1) + "")) { 
 | 
                    Cell cell = row.getCell(1); 
 | 
                    if (row.getCell(1).toString().contains("X") || row.getCell(1).toString().contains("x")) { 
 | 
                        patArchiveImport.setIdcardno(row.getCell(1).toString()); 
 | 
                    } else { 
 | 
                        Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$"); 
 | 
                        boolean matches = pattern.matcher(row.getCell(1).toString()).matches(); 
 | 
                        if (matches) { 
 | 
                            patArchiveImport.setIdcardno(row.getCell(1).toString()); 
 | 
                        } else { 
 | 
                            double numericCellValue = cell.getNumericCellValue(); 
 | 
                            DecimalFormat decimalFormat = new DecimalFormat("#"); 
 | 
                            String formattedValue = decimalFormat.format(numericCellValue); 
 | 
                            patArchiveImport.setIdcardno(formattedValue); 
 | 
                        } 
 | 
                    } 
 | 
  
 | 
                    boolean contains = qc.contains(row.getCell(1).toString()); 
 | 
                    PatArchiveImport pt = new PatArchiveImport(); 
 | 
                    pt.setIdcardno(patArchiveImport.getIdcardno()); 
 | 
                    pt.setDelFlag("0"); 
 | 
                    List<PatArchiveImport> patArchiveImports1 = patArchiveImportMapper.selectPatArchiveImportList(pt); 
 | 
                    if (contains || CollectionUtils.isNotEmpty(patArchiveImports1)) continue; 
 | 
                } 
 | 
  
 | 
                if (ObjectUtils.isNotEmpty(row.getCell(2)) && StringUtils.isNotEmpty(row.getCell(2) + "")) { 
 | 
                    Cell cell = row.getCell(2); 
 | 
                    double numericCellValue = cell.getNumericCellValue(); 
 | 
                    DecimalFormat decimalFormat = new DecimalFormat("#"); 
 | 
                    String formattedValue = decimalFormat.format(numericCellValue); 
 | 
                    patArchiveImport.setTelcode(formattedValue); 
 | 
                } 
 | 
                if (ObjectUtils.isNotEmpty(row.getCell(3)) && StringUtils.isNotEmpty(row.getCell(3) + "")) { 
 | 
                    patArchiveImport.setBatchName(row.getCell(3).toString()); 
 | 
                } 
 | 
                if (ObjectUtils.isNotEmpty(row.getCell(4)) && StringUtils.isNotEmpty(row.getCell(4) + "")) { 
 | 
                    patArchiveImport.setPatientno(row.getCell(4).toString()); 
 | 
                } 
 | 
  
 | 
                if (ObjectUtils.isNotEmpty(row.getCell(5)) && StringUtils.isNotEmpty(row.getCell(5) + "")) { 
 | 
                    patArchiveImport.setPattype(row.getCell(5).toString()); 
 | 
                } 
 | 
                if (ObjectUtils.isNotEmpty(row.getCell(6)) && StringUtils.isNotEmpty(row.getCell(6) + "")) { 
 | 
                    patArchiveImport.setSex(Long.valueOf(row.getCell(6).toString())); 
 | 
                } 
 | 
                if (ObjectUtils.isNotEmpty(row.getCell(7)) && StringUtils.isNotEmpty(row.getCell(7) + "")) { 
 | 
                    patArchiveImport.setAge(Long.valueOf(row.getCell(7).toString())); 
 | 
                } 
 | 
  
 | 
  
 | 
                patArchiveImport.setCreateTime(new Date()); 
 | 
                patArchiveImport.setUpdateTime(new Date()); 
 | 
                //批量号(当前时间) 
 | 
                patArchiveImport.setBatchNo(new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())); 
 | 
                patArchiveImport.setCreateBy(user.getNickName()); 
 | 
                insertPatArchiveImport(patArchiveImport); 
 | 
                //给当前导入患者,注册帐号  sys_user  sys_user_role 
 | 
                if (patArchiveImport.getAccount() == 1) { 
 | 
                    //查询一下,该患者是否已经在表里创建了帐号 
 | 
                    SysUser sysUser = patArchiveImportMapper.checkUserExist(patArchiveImport.getIdcardno()); 
 | 
                    if (ObjectUtils.isEmpty(sysUser)) { 
 | 
                        sysUser = new SysUser(); 
 | 
                        //如果为空,则进行新增sys_user   sys_role 
 | 
                        sysUser.setIdCard(patArchiveImport.getIdcardno()); 
 | 
                        int start = patArchiveImport.getIdcardno().length() - 6; 
 | 
                        String lastSixDigits = patArchiveImport.getIdcardno().substring(start, start + 6); 
 | 
                        sysUser.setUserName(lastSixDigits); 
 | 
                        //密码:xh@123456 
 | 
                        sysUser.setPassword("$2a$10$zja67LEWTESHutljd8bqEeRy.VgWb./8iJPpFR6VjTUa7ZYNfRRrO"); 
 | 
                        sysUser.setPhonenumber(patArchiveImport.getTelcode()); 
 | 
                        sysUser.setUserType("患者"); 
 | 
                        sysUser.setDeptId(395L); 
 | 
                        sysUser.setNickName(patArchiveImport.getName()); 
 | 
                        sysUser.setCreateTime(new Date()); 
 | 
                        sysUser.setCreateBy(user.getNickName()); 
 | 
                        sysUser.setUpdateTime(new Date()); 
 | 
                        sysUser.setUpdateBy(user.getNickName()); 
 | 
                        sysUser.setOrgid(user.getOrgid()); 
 | 
                        patArchiveImportMapper.insertUser(sysUser); 
 | 
                        //将患者与角色绑定 
 | 
                        SysUserRole sysUserRole = new SysUserRole(); 
 | 
                        sysUserRole.setUserId(sysUser.getUserId()); 
 | 
                        sysUserRole.setRoleId(6L); 
 | 
                        sysUserRole.setOrgid(user.getOrgid()); 
 | 
                        patArchiveImportMapper.insertUserRole(sysUserRole); 
 | 
                    } 
 | 
                } 
 | 
  
 | 
                patArchiveImports.add(patArchiveImport); 
 | 
            } 
 | 
  
 | 
        } catch (Exception e) { 
 | 
            e.printStackTrace(); 
 | 
        } 
 | 
  
 | 
        return patArchiveImports; 
 | 
    } 
 | 
} 
 |