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 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 importPatInfo(MultipartFile multipartFile, SysUser user) { //用于返回 List patArchiveImports = new ArrayList<>(); //去重 List 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 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; } }