修改就诊记录。

This commit is contained in:
haown 2024-03-22 17:34:24 +08:00
parent badef731f1
commit e8438abe59
15 changed files with 258 additions and 61 deletions

View File

@ -0,0 +1,21 @@
package com.xinelu.common.enums;
/**
* @Description 患者来源枚举类
* @Author haown
* @Date 2024-03-21
*/
public enum PatientSourceEnum {
/**
* 微信小程序
*/
WE_CHAT_APPLET,
/**
* 微信公众号
*/
WE_CHAT_OFFICIAL_ACCOUNT,
/**
* 管理端
*/
MANAGE_END
}

View File

@ -13,6 +13,7 @@ import com.xinelu.common.utils.file.FileTypeUtils;
import com.xinelu.common.utils.file.FileUtils; import com.xinelu.common.utils.file.FileUtils;
import com.xinelu.common.utils.file.ImageUtils; import com.xinelu.common.utils.file.ImageUtils;
import com.xinelu.common.utils.reflect.ReflectUtils; import com.xinelu.common.utils.reflect.ReflectUtils;
import java.time.ZoneId;
import org.apache.commons.lang3.RegExUtils; import org.apache.commons.lang3.RegExUtils;
import org.apache.poi.hssf.usermodel.*; import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ooxml.POIXMLDocumentPart; import org.apache.poi.ooxml.POIXMLDocumentPart;
@ -269,6 +270,13 @@ public class ExcelUtil<T> {
} else if (val instanceof Double) { } else if (val instanceof Double) {
val = DateUtil.getJavaDate((Double) val); val = DateUtil.getJavaDate((Double) val);
} }
} else if (LocalDate.class == fieldType) {
if (val instanceof String) {
val = DateUtils.parseDate(val);
} else if (val instanceof Double) {
val = DateUtil.getJavaDate((Double) val);
}
val = ((Date) val).toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
} else if (Boolean.TYPE == fieldType || Boolean.class == fieldType) { } else if (Boolean.TYPE == fieldType || Boolean.class == fieldType) {
val = Convert.toBool(val, false); val = Convert.toBool(val, false);
} }

View File

@ -44,6 +44,7 @@ public class PatientInfoController extends BaseController {
@PreAuthorize("@ss.hasPermi('manage:patientInfo:list')") @PreAuthorize("@ss.hasPermi('manage:patientInfo:list')")
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo list(PatientInfoDto patientInfo) { public TableDataInfo list(PatientInfoDto patientInfo) {
// 根据用户权限判断查询数据权限
startPage(); startPage();
List<PatientInfo> list = patientInfoService.selectPatientInfoList(patientInfo); List<PatientInfo> list = patientInfoService.selectPatientInfoList(patientInfo);
return getDataTable(list); return getDataTable(list);

View File

@ -93,6 +93,7 @@ public class PatientVisitRecordController extends BaseController {
/** /**
* 新增患者就诊记录基本信息 * 新增患者就诊记录基本信息
*/ */
@ApiOperation("新增患者就诊记录基本信息")
@PreAuthorize("@ss.hasPermi('manage:visit:add')") @PreAuthorize("@ss.hasPermi('manage:visit:add')")
@Log(title = "患者就诊记录基本信息", businessType = BusinessType.INSERT) @Log(title = "患者就诊记录基本信息", businessType = BusinessType.INSERT)
@PostMapping @PostMapping
@ -100,6 +101,17 @@ public class PatientVisitRecordController extends BaseController {
return toAjax(patientVisitRecordService.insertPatientVisitRecord(patientVisitRecord)); return toAjax(patientVisitRecordService.insertPatientVisitRecord(patientVisitRecord));
} }
/**
* 修改患者就诊记录基本信息
*/
@ApiOperation("修改患者就诊记录基本信息")
@PreAuthorize("@ss.hasPermi('manage:visit:edit')")
@Log(title = "患者就诊记录基本信息", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@Valid @RequestBody PatientVisitRecord patientVisitRecord) {
return toAjax(patientVisitRecordService.updatePatientVisitRecord(patientVisitRecord));
}
/** /**
* 患者配置就诊信息保存 * 患者配置就诊信息保存
*/ */
@ -116,12 +128,12 @@ public class PatientVisitRecordController extends BaseController {
/** /**
* 修改患者就诊记录基本信息 * 修改患者就诊记录基本信息
*/ */
@ApiOperation("修改患者就诊记录基本信息") @ApiOperation("患者配置——就诊信息修改")
@PreAuthorize("@ss.hasPermi('manage:visit:edit')") @PreAuthorize("@ss.hasPermi('manage:visit:edit')")
@Log(title = "患者就诊记录基本信息", businessType = BusinessType.UPDATE) @Log(title = "患者就诊记录基本信息", businessType = BusinessType.UPDATE)
@PutMapping @PutMapping("updateRecord")
public AjaxResult edit(@Valid @RequestBody PatientVisitRecordSaveDto patientVisitRecord) { public AjaxResult updateRecord(@Valid @RequestBody PatientVisitRecordSaveDto patientVisitRecord) {
return toAjax(patientVisitRecordService.updatePatientVisitRecord(patientVisitRecord)); return toAjax(patientVisitRecordService.updateRecord(patientVisitRecord));
} }
/** /**

View File

@ -1,5 +1,6 @@
package com.xinelu.manage.domain.patientprehospitalization; package com.xinelu.manage.domain.patientprehospitalization;
import com.xinelu.common.annotation.Excel;
import com.xinelu.common.core.domain.BaseEntity; import com.xinelu.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
@ -28,31 +29,37 @@ public class PatientPreHospitalization extends BaseEntity {
* 姓名 * 姓名
*/ */
@ApiModelProperty("姓名") @ApiModelProperty("姓名")
@Excel(name = "姓名")
private String patientName; private String patientName;
/** /**
* 患者电话 * 患者电话
*/ */
@ApiModelProperty("患者电话") @ApiModelProperty("患者电话")
@Excel(name = "电话")
private String patientPhone; private String patientPhone;
/** /**
* 身份证号 * 身份证号
*/ */
@ApiModelProperty("身份证号") @ApiModelProperty("身份证号")
@Excel(name = "身份证号")
private String cardNo; private String cardNo;
/** /**
* 性别MALEFEMALE * 性别MALEFEMALE
*/ */
@ApiModelProperty("性别MALEFEMALE") @ApiModelProperty("性别MALEFEMALE")
@Excel(name = "性别",readConverterExp = "MALE=男,FEMALE=女")
private String sex; private String sex;
/** /**
* 出生日期格式yyyy-MM-dd * 出生日期格式yyyy-MM-dd
*/ */
@ApiModelProperty("出生日期格式yyyy-MM-dd") @ApiModelProperty("出生日期格式yyyy-MM-dd")
@Excel(name = "出生日期")
private LocalDate birthDate; private LocalDate birthDate;
/** /**
* 家属电话 * 家属电话
*/ */
@ApiModelProperty("家属电话") @ApiModelProperty("家属电话")
@Excel(name = "家属电话")
private String familyMemberPhone; private String familyMemberPhone;
/** /**
* 住址 * 住址
@ -63,6 +70,7 @@ public class PatientPreHospitalization extends BaseEntity {
* 主要诊断 * 主要诊断
*/ */
@ApiModelProperty("主要诊断") @ApiModelProperty("主要诊断")
@Excel(name = "诊断")
private String mainDiagnosis; private String mainDiagnosis;
/** /**
* 所属医院id * 所属医院id
@ -93,6 +101,7 @@ public class PatientPreHospitalization extends BaseEntity {
* 所属科室名称 * 所属科室名称
*/ */
@ApiModelProperty("所属科室名称") @ApiModelProperty("所属科室名称")
@Excel(name = "科室名称")
private String departmentName; private String departmentName;
/** /**
* 所属病区id * 所属病区id
@ -102,27 +111,32 @@ public class PatientPreHospitalization extends BaseEntity {
/** /**
* 所属病区名称 * 所属病区名称
*/ */
@Excel(name = "预约病区")
@ApiModelProperty("所属病区名称") @ApiModelProperty("所属病区名称")
private String wardName; private String wardName;
/** /**
* 预约治疗组取值以及枚举未知 * 预约治疗组取值以及枚举未知
*/ */
@ApiModelProperty("预约治疗组(取值以及枚举未知?)") @ApiModelProperty("预约治疗组(取值以及枚举未知?)")
@Excel(name = "预约治疗组")
private String appointmentTreatmentGroup; private String appointmentTreatmentGroup;
/** /**
* 登记号预住院患者 * 登记号预住院患者
*/ */
@ApiModelProperty("登记号(预住院患者)") @ApiModelProperty("登记号(预住院患者)")
@Excel(name = "登记号")
private String registrationNo; private String registrationNo;
/** /**
* 登记日期预住院患者时间格式yyyy-MM-dd * 登记日期预住院患者时间格式yyyy-MM-dd
*/ */
@ApiModelProperty("登记日期预住院患者时间格式yyyy-MM-dd") @ApiModelProperty("登记日期预住院患者时间格式yyyy-MM-dd")
@Excel(name = "登记日期")
private LocalDate registrationDate; private LocalDate registrationDate;
/** /**
* 预约时间预住院患者时间格式yyyy-MM-dd * 预约时间预住院患者时间格式yyyy-MM-dd
*/ */
@ApiModelProperty("预约时间预住院患者时间格式yyyy-MM-dd") @ApiModelProperty("预约时间预住院患者时间格式yyyy-MM-dd")
@Excel(name = "预约日期")
private LocalDate appointmentDate; private LocalDate appointmentDate;
/** /**
* 开证医生id * 开证医生id
@ -133,6 +147,7 @@ public class PatientPreHospitalization extends BaseEntity {
* 开证医生姓名 * 开证医生姓名
*/ */
@ApiModelProperty("开证医生姓名") @ApiModelProperty("开证医生姓名")
@Excel(name = "开证医生")
private String certificateIssuingDoctorName; private String certificateIssuingDoctorName;
/** /**
* 责任护士 * 责任护士

View File

@ -2,6 +2,7 @@ package com.xinelu.manage.mapper.patientinfo;
import com.xinelu.manage.domain.patientinfo.PatientInfo; import com.xinelu.manage.domain.patientinfo.PatientInfo;
import com.xinelu.manage.dto.patientinfo.PatientInfoDto; import com.xinelu.manage.dto.patientinfo.PatientInfoDto;
import com.xinelu.manage.vo.patientinfo.PatientBaseInfoVo;
import java.util.List; import java.util.List;
/** /**
@ -19,6 +20,8 @@ public interface PatientInfoMapper {
*/ */
public PatientInfo selectPatientInfoById(Long id); public PatientInfo selectPatientInfoById(Long id);
public PatientBaseInfoVo getPatientBaseInfo(Long id);
/** /**
* 查询患者信息列表 * 查询患者信息列表
* *

View File

@ -18,16 +18,16 @@ import com.xinelu.manage.mapper.department.DepartmentMapper;
import com.xinelu.manage.mapper.patientinfo.PatientInfoMapper; import com.xinelu.manage.mapper.patientinfo.PatientInfoMapper;
import com.xinelu.manage.mapper.patientprehospitalization.PatientPreHospitalizationMapper; import com.xinelu.manage.mapper.patientprehospitalization.PatientPreHospitalizationMapper;
import com.xinelu.manage.service.patientprehospitalization.IPatientPreHospitalizationService; import com.xinelu.manage.service.patientprehospitalization.IPatientPreHospitalizationService;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.annotation.Resource;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/** /**
* @author haown * @author haown
@ -54,9 +54,10 @@ public class PatientPreHospitalizationServiceImpl implements IPatientPreHospital
@Override @Override
public int insert(PatientPreHospitalization preHospitalization) { public int insert(PatientPreHospitalization preHospitalization) {
// 根据身份证号查询是否有患者信息 // 根据身份证号+医院id查询是否有患者信息
PatientInfoDto patientInfoDto = new PatientInfoDto(); PatientInfoDto patientInfoDto = new PatientInfoDto();
patientInfoDto.setCardNo(preHospitalization.getCardNo()); patientInfoDto.setCardNo(preHospitalization.getCardNo());
patientInfoDto.setHospitalAgencyId(preHospitalization.getHospitalAgencyId());
List<PatientInfo> patientList = patientInfoMapper.selectPatientInfoList(patientInfoDto); List<PatientInfo> patientList = patientInfoMapper.selectPatientInfoList(patientInfoDto);
if (CollectionUtils.isEmpty(patientList)) { if (CollectionUtils.isEmpty(patientList)) {
// 保存患者信息 // 保存患者信息
@ -117,11 +118,15 @@ public class PatientPreHospitalizationServiceImpl implements IPatientPreHospital
} }
@Override @Override
@Transactional(rollbackFor = Exception.class)
public AjaxResult importList(List<PatientPreHospitalization> patientList) { public AjaxResult importList(List<PatientPreHospitalization> patientList) {
//判断添加的数据是否为空 //判断添加的数据是否为空
if (CollectionUtils.isEmpty(patientList)) { if (CollectionUtils.isEmpty(patientList)) {
return AjaxResult.error("请添加预住院患者导入信息!"); return AjaxResult.error("请添加预住院患者导入信息!");
} }
if (SecurityUtils.getLoginUser().getUser().getAgencyId() == null) {
return AjaxResult.error("您未设置机构信息,导入失败");
}
// 根据患者身份证号做去重处理 // 根据患者身份证号做去重处理
List<PatientPreHospitalization> importDataList = patientList.stream().filter(item -> StringUtils.isNotBlank(item.getCardNo())).distinct().collect(Collectors.toList()); List<PatientPreHospitalization> importDataList = patientList.stream().filter(item -> StringUtils.isNotBlank(item.getCardNo())).distinct().collect(Collectors.toList());
// 校验联系电话格式是否正确 // 校验联系电话格式是否正确
@ -133,48 +138,32 @@ public class PatientPreHospitalizationServiceImpl implements IPatientPreHospital
for (PatientPreHospitalization item : importDataList) { for (PatientPreHospitalization item : importDataList) {
PatientPreHospitalization preHospitalization = new PatientPreHospitalization(); PatientPreHospitalization preHospitalization = new PatientPreHospitalization();
BeanUtils.copyProperties(item, preHospitalization); BeanUtils.copyProperties(item, preHospitalization);
// 根据医院名称查询医院id // 设置机构/院区为当前登录用户机构信息
Agency agency = new Agency(); preHospitalization.setHospitalAgencyId(SecurityUtils.getLoginUser().getUser().getAgencyId());
if (StringUtils.isNotBlank(item.getHospitalAgencyName())) { Agency agencyData = agencyMapper.selectAgencyById(SecurityUtils.getLoginUser().getUser().getAgencyId());
agency.setAgencyName(item.getHospitalAgencyName()); if (ObjectUtils.isNotEmpty(agencyData)) {
agency.setNodeType(NodeTypeConstants.HOSPITAL); if (StringUtils.equals(NodeTypeConstants.HOSPITAL, agencyData.getNodeType())) { // 节点类型为机构
List<Agency> agencyList = agencyMapper.selectAgencyList(agency); preHospitalization.setHospitalAgencyName(agencyData.getAgencyName());
if (CollectionUtils.isNotEmpty(agencyList)) { } else if (StringUtils.equals(NodeTypeConstants.CAMPUS, agencyData.getNodeType())) { // 节点类型为院区
preHospitalization.setHospitalAgencyId(agencyList.get(0).getId()); preHospitalization.setCampusAgencyId(agencyData.getId());
} preHospitalization.setCampusAgencyName(agencyData.getAgencyName());
} else { // 机构设为院区所属机构
preHospitalization.setHospitalAgencyId(SecurityUtils.getLoginUser().getUser().getAgencyId()); preHospitalization.setHospitalAgencyId(agencyData.getParentId());
Agency agencyData = agencyMapper.selectAgencyById(SecurityUtils.getLoginUser().getUser().getAgencyId()); Agency agency = agencyMapper.selectAgencyById(agencyData.getParentId());
if (ObjectUtils.isNotEmpty(agencyData)) { preHospitalization.setHospitalAgencyName(agency.getAgencyName());
preHospitalization.setHospitalAgencyName(agencyData.getAgencyName()); }
}
}
// 查询院区id
if (StringUtils.isNotBlank(item.getCampusAgencyName())) {
agency.setAgencyName(item.getWardName());
agency.setNodeType(NodeTypeConstants.CAMPUS);
List<Agency> campusList = agencyMapper.selectAgencyList(agency);
if (CollectionUtils.isNotEmpty(campusList)) {
preHospitalization.setCampusAgencyId(campusList.get(0).getId());
}
} }
// 查询科室id // 查询科室id
Department department = new Department(); Department department = new Department();
if (StringUtils.isNotBlank(item.getDepartmentName())) { if (StringUtils.isNotBlank(item.getDepartmentName())) {
department.setAgencyName(item.getHospitalAgencyName()); department.setAgencyName(preHospitalization.getHospitalAgencyName());
department.setDepartmentName(item.getDepartmentName()); department.setDepartmentName(item.getDepartmentName());
department.setNodeType(NodeTypeConstants.DEPARTMENT); department.setNodeType(NodeTypeConstants.DEPARTMENT);
List<Department> deptList = departmentMapper.selectDepartmentList(department); List<Department> deptList = departmentMapper.selectDepartmentList(department);
if (CollectionUtils.isNotEmpty(deptList)) { if (CollectionUtils.isNotEmpty(deptList)) {
preHospitalization.setDepartmentId(deptList.get(0).getId()); preHospitalization.setDepartmentId(deptList.get(0).getId());
} }
} else {
preHospitalization.setDepartmentId(SecurityUtils.getLoginUser().getUser().getDepartmentId());
Department department1 = departmentMapper.selectDepartmentById(SecurityUtils.getLoginUser().getUser().getDepartmentId());
if (ObjectUtils.isNotEmpty(department1)) {
preHospitalization.setDepartmentName(department1.getDepartmentName());
}
} }
// 查询病区 // 查询病区
if (StringUtils.isNotBlank(item.getWardName())) { if (StringUtils.isNotBlank(item.getWardName())) {
@ -187,28 +176,36 @@ public class PatientPreHospitalizationServiceImpl implements IPatientPreHospital
} }
} }
preHospitalization.setDelFlag(0);
preHospitalization.setCreateTime(LocalDateTime.now()); preHospitalization.setCreateTime(LocalDateTime.now());
preHospitalization.setCreateBy(SecurityUtils.getLoginUser().getUser().getNickName()); preHospitalization.setCreateBy(SecurityUtils.getLoginUser().getUser().getNickName());
// 根据身份证号查询患者信息 // 根据身份证号+机构id查询患者信息
PatientInfoDto patientQuery = new PatientInfoDto(); PatientInfoDto patientQuery = new PatientInfoDto();
patientQuery.setCardNo(item.getCardNo()); patientQuery.setCardNo(item.getCardNo());
patientQuery.setHospitalAgencyId(preHospitalization.getHospitalAgencyId());
List<PatientInfo> patientInfoList = patientInfoMapper.selectPatientInfoList(patientQuery); List<PatientInfo> patientInfoList = patientInfoMapper.selectPatientInfoList(patientQuery);
if (CollectionUtils.isNotEmpty(patientInfoList)) { if (CollectionUtils.isNotEmpty(patientInfoList)) {
// 修改居民信息 // 修改居民信息
PatientInfo updInfo = patientInfoList.get(0); PatientInfo updInfo = patientInfoList.get(0);
BeanUtils.copyBeanProp(updInfo, item); String[] ignore = {"id"};
BeanUtils.copyProperties(preHospitalization,updInfo, ignore);
updInfo.setVisitTime(preHospitalization.getRegistrationDate());
updInfo.setPatientType(PatientTypeConstants.PRE_HOSPITALIZED_PATIENT);
patientInfoMapper.updatePatientInfo(updInfo); patientInfoMapper.updatePatientInfo(updInfo);
preHospitalization.setPatientId(patientInfoList.get(0).getId()); preHospitalization.setPatientId(patientInfoList.get(0).getId());
} else { } else {
PatientInfo saveInfo = new PatientInfo(); PatientInfo saveInfo = new PatientInfo();
// 添加居民 // 添加居民
BeanUtils.copyBeanProp(saveInfo, item); BeanUtils.copyProperties(preHospitalization, saveInfo);
saveInfo.setVisitTime(preHospitalization.getRegistrationDate());
saveInfo.setPatientType(PatientTypeConstants.PRE_HOSPITALIZED_PATIENT);
patientInfoMapper.insertPatientInfo(saveInfo); patientInfoMapper.insertPatientInfo(saveInfo);
preHospitalization.setPatientId(saveInfo.getId()); preHospitalization.setPatientId(saveInfo.getId());
} }
// 根据患者身份证号和预约时间查询是否有记录 // 根据患者身份证号和预约时间查询是否有记录
PatientPreHospitalization preHospitalizationQuery = new PatientPreHospitalization(); PatientPreHospitalization preHospitalizationQuery = new PatientPreHospitalization();
preHospitalizationQuery.setHospitalAgencyId(preHospitalization.getHospitalAgencyId());
preHospitalizationQuery.setCardNo(item.getCardNo()); preHospitalizationQuery.setCardNo(item.getCardNo());
preHospitalizationQuery.setAppointmentDate(item.getAppointmentDate()); preHospitalizationQuery.setAppointmentDate(item.getAppointmentDate());
List<PatientPreHospitalization> list = preHospitalizationMapper.selectApplyList(preHospitalizationQuery); List<PatientPreHospitalization> list = preHospitalizationMapper.selectApplyList(preHospitalizationQuery);

View File

@ -39,6 +39,14 @@ public interface IPatientVisitRecordService {
*/ */
public int insertPatientVisitRecord(PatientVisitRecord patientVisitRecord); public int insertPatientVisitRecord(PatientVisitRecord patientVisitRecord);
/**
* 修改患者就诊记录基本信息
*
* @param patientVisitRecord 患者就诊记录基本信息
* @return 结果
*/
public int updatePatientVisitRecord(PatientVisitRecord patientVisitRecord);
/** /**
* 患者配置就诊信息保存 * 患者配置就诊信息保存
* @param saveDto * @param saveDto
@ -52,7 +60,7 @@ public interface IPatientVisitRecordService {
* @param updDto 患者就诊记录基本信息 * @param updDto 患者就诊记录基本信息
* @return 结果 * @return 结果
*/ */
public int updatePatientVisitRecord(PatientVisitRecordSaveDto updDto); public int updateRecord(PatientVisitRecordSaveDto updDto);
/** /**
* 批量删除患者就诊记录基本信息 * 批量删除患者就诊记录基本信息

View File

@ -2,8 +2,10 @@ package com.xinelu.manage.service.patientvisitrecord.impl;
import com.xinelu.common.constant.Constants; import com.xinelu.common.constant.Constants;
import com.xinelu.common.constant.NodeTypeConstants; import com.xinelu.common.constant.NodeTypeConstants;
import com.xinelu.common.constant.PatientTypeConstants;
import com.xinelu.common.constant.VisitMethodConstants; import com.xinelu.common.constant.VisitMethodConstants;
import com.xinelu.common.core.domain.AjaxResult; import com.xinelu.common.core.domain.AjaxResult;
import com.xinelu.common.enums.PatientSourceEnum;
import com.xinelu.common.exception.ServiceException; import com.xinelu.common.exception.ServiceException;
import com.xinelu.common.utils.SecurityUtils; import com.xinelu.common.utils.SecurityUtils;
import com.xinelu.common.utils.StringUtils; import com.xinelu.common.utils.StringUtils;
@ -22,6 +24,7 @@ import com.xinelu.manage.mapper.department.DepartmentMapper;
import com.xinelu.manage.mapper.patientinfo.PatientInfoMapper; import com.xinelu.manage.mapper.patientinfo.PatientInfoMapper;
import com.xinelu.manage.mapper.patientvisitrecord.PatientVisitRecordMapper; import com.xinelu.manage.mapper.patientvisitrecord.PatientVisitRecordMapper;
import com.xinelu.manage.service.patientvisitrecord.IPatientVisitRecordService; import com.xinelu.manage.service.patientvisitrecord.IPatientVisitRecordService;
import com.xinelu.manage.vo.patientinfo.PatientBaseInfoVo;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.ArrayList; import java.util.ArrayList;
@ -32,6 +35,7 @@ import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.BooleanUtils; import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
/** /**
* 患者就诊记录基本信息Service业务层处理 * 患者就诊记录基本信息Service业务层处理
@ -51,6 +55,8 @@ public class PatientVisitRecordServiceImpl implements IPatientVisitRecordService
private AgencyMapper agencyMapper; private AgencyMapper agencyMapper;
@Resource @Resource
private DepartmentMapper departmentMapper; private DepartmentMapper departmentMapper;
@Resource
private PatientInfoMapper patientInfoMapper;
/** /**
* 查询患者就诊记录基本信息 * 查询患者就诊记录基本信息
@ -82,17 +88,58 @@ public class PatientVisitRecordServiceImpl implements IPatientVisitRecordService
*/ */
@Override @Override
public int insertPatientVisitRecord(PatientVisitRecord patientVisitRecord) { public int insertPatientVisitRecord(PatientVisitRecord patientVisitRecord) {
// 1保存患者信息-查询是否有患者档案
PatientInfoDto patientInfoDto = new PatientInfoDto();
patientInfoDto.setHospitalAgencyId(patientVisitRecord.getHospitalAgencyId());
patientInfoDto.setCardNo(patientInfoDto.getCardNo());
List<PatientInfo> patientInfoList = patientInfoMapper.selectPatientInfoList(patientInfoDto);
// 患者档案信息新增/修改
if(CollectionUtils.isEmpty(patientInfoList)) {
PatientInfo patientInfo = new PatientInfo();
// 新增档案
BeanUtils.copyBeanProp(patientInfo, patientVisitRecord);
patientInfo.setPatientSource(PatientSourceEnum.MANAGE_END.name());
patientInfo.setDelFlag(0);
setPatientType(patientInfo, patientVisitRecord);
patientInfo.setCreateBy(SecurityUtils.getLoginUser().getUser().getNickName());
patientInfo.setCreateTime(LocalDateTime.now());
patientInfoMapper.insertPatientInfo(patientInfo);
patientVisitRecord.setPatientId(patientInfo.getId());
} else {
PatientInfo patientInfo = patientInfoList.get(0);
Long patientId = patientInfo.getId();
// 修改档案
BeanUtils.copyBeanProp(patientInfo, patientVisitRecord);
patientInfo.setUpdateBy(SecurityUtils.getLoginUser().getUser().getNickName());
patientInfo.setUpdateTime(LocalDateTime.now());
patientInfo.setId(patientId);
setPatientType(patientInfo, patientVisitRecord);
patientInfoMapper.updatePatientInfo(patientInfo);
patientVisitRecord.setPatientId(patientId);
}
patientVisitRecord.setCreateBy(SecurityUtils.getLoginUser().getUser().getNickName()); patientVisitRecord.setCreateBy(SecurityUtils.getLoginUser().getUser().getNickName());
patientVisitRecord.setCreateTime(LocalDateTime.now()); patientVisitRecord.setCreateTime(LocalDateTime.now());
return patientVisitRecordMapper.insertPatientVisitRecord(patientVisitRecord); return patientVisitRecordMapper.insertPatientVisitRecord(patientVisitRecord);
} }
@Override @Override
@Transactional
public int updatePatientVisitRecord(PatientVisitRecord patientVisitRecord) {
// 修改患者基本信息
PatientInfo patientInfo = patientMapper.selectPatientInfoById(patientVisitRecord.getPatientId());
BeanUtils.copyBeanProp(patientInfo, patientVisitRecord);
setPatientType(patientInfo, patientVisitRecord);
patientMapper.updatePatientInfo(patientInfo);
// 修改就诊记录信息
return patientVisitRecordMapper.updatePatientVisitRecord(patientVisitRecord);
}
@Override
public int saveRecord(PatientVisitRecordSaveDto saveDto) { public int saveRecord(PatientVisitRecordSaveDto saveDto) {
PatientVisitRecord patientVisitRecord = new PatientVisitRecord(); PatientVisitRecord patientVisitRecord = new PatientVisitRecord();
// 查询患者信息 // 查询患者基本信息
PatientInfo patientInfo = patientMapper.selectPatientInfoById(saveDto.getPatientId()); PatientBaseInfoVo patientBaseInfo = patientMapper.getPatientBaseInfo(saveDto.getPatientId());
BeanUtils.copyBeanProp(patientVisitRecord, patientInfo); BeanUtils.copyBeanProp(patientVisitRecord, patientBaseInfo);
BeanUtils.copyBeanProp(patientVisitRecord, saveDto); BeanUtils.copyBeanProp(patientVisitRecord, saveDto);
patientVisitRecord.setCreateBy(SecurityUtils.getLoginUser().getUser().getNickName()); patientVisitRecord.setCreateBy(SecurityUtils.getLoginUser().getUser().getNickName());
patientVisitRecord.setCreateTime(LocalDateTime.now()); patientVisitRecord.setCreateTime(LocalDateTime.now());
@ -107,9 +154,10 @@ public class PatientVisitRecordServiceImpl implements IPatientVisitRecordService
int flag = patientVisitRecordMapper.insertPatientVisitRecord(patientVisitRecord); int flag = patientVisitRecordMapper.insertPatientVisitRecord(patientVisitRecord);
if (flag > 0) { if (flag > 0) {
// 修改患者信息 // 修改患者信息
patientInfo.setVisitMethod(saveDto.getVisitMethod()); PatientInfo patientInfo = patientMapper.selectPatientInfoById(saveDto.getPatientId());
patientInfo.setDepartmentId(saveDto.getDepartmentId()); BeanUtils.copyBeanProp(patientInfo, patientVisitRecord);
patientInfo.setDepartmentName(saveDto.getDepartmentName()); patientInfo.setId(saveDto.getPatientId());
setPatientType(patientInfo, patientVisitRecord);
patientMapper.updatePatientInfo(patientInfo); patientMapper.updatePatientInfo(patientInfo);
} }
return flag; return flag;
@ -122,7 +170,8 @@ public class PatientVisitRecordServiceImpl implements IPatientVisitRecordService
* @return 结果 * @return 结果
*/ */
@Override @Override
public int updatePatientVisitRecord(PatientVisitRecordSaveDto updDto) { @Transactional
public int updateRecord(PatientVisitRecordSaveDto updDto) {
if (updDto.getId() == null) { if (updDto.getId() == null) {
throw new ServiceException("数据传输错误"); throw new ServiceException("数据传输错误");
} }
@ -146,6 +195,7 @@ public class PatientVisitRecordServiceImpl implements IPatientVisitRecordService
patientInfo.setVisitMethod(updDto.getVisitMethod()); patientInfo.setVisitMethod(updDto.getVisitMethod());
patientInfo.setDepartmentId(updDto.getDepartmentId()); patientInfo.setDepartmentId(updDto.getDepartmentId());
patientInfo.setDepartmentName(updDto.getDepartmentName()); patientInfo.setDepartmentName(updDto.getDepartmentName());
setPatientType(patientInfo, patientVisitRecord);
patientMapper.updatePatientInfo(patientInfo); patientMapper.updatePatientInfo(patientInfo);
} }
return flag; return flag;
@ -300,4 +350,27 @@ public class PatientVisitRecordServiceImpl implements IPatientVisitRecordService
} }
return AjaxResult.success(); return AjaxResult.success();
} }
private void setPatientType(PatientInfo patientInfo, PatientVisitRecord patientVisitRecord) {
if (StringUtils.equals(VisitMethodConstants.OUTPATIENT_SERVICE, patientVisitRecord.getVisitMethod())) {
patientVisitRecord.setVisitDate(patientVisitRecord.getDischargeTime());
} else if (StringUtils.equals(VisitMethodConstants.BE_HOSPITALIZED, patientVisitRecord.getVisitMethod())) {
// 住院时间出院时间-入院时间
long daysBetween = ChronoUnit.DAYS.between(patientVisitRecord.getAdmissionTime(), patientVisitRecord.getDischargeTime());
patientVisitRecord.setHospitalizationDays((int) daysBetween + 1);
patientVisitRecord.setVisitDate(patientVisitRecord.getAdmissionTime());
}
if (StringUtils.equals(VisitMethodConstants.BE_HOSPITALIZED, patientVisitRecord.getVisitMethod())) {
// 住院患者有出院时间设置患者类型为出院没有出院时间设置患者类型为在院
if (patientVisitRecord.getDischargeTime() == null) {
patientInfo.setPatientType(PatientTypeConstants.IN_HOSPITAL_PATIENT);
} else {
patientInfo.setPatientType(PatientTypeConstants.DISCHARGED_PATIENT);
}
} else if (StringUtils.equals(VisitMethodConstants.OUTPATIENT_SERVICE, patientVisitRecord.getVisitMethod())) {
patientInfo.setPatientType(PatientTypeConstants.OUTPATIENT);
}
}
} }

View File

@ -0,0 +1,51 @@
package com.xinelu.manage.vo.patientinfo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.xinelu.common.annotation.Excel;
import io.swagger.annotations.ApiModelProperty;
import java.time.LocalDate;
import lombok.Data;
/**
* @description: 患者基本信息
* @author: haown
* @create: 2024-03-21 17:16
**/
@Data
public class PatientBaseInfoVo {
/** 主键id */
private Long id;
/** 患者姓名 */
@ApiModelProperty(value = "患者姓名")
@Excel(name = "患者姓名")
private String patientName;
/** 患者电话 */
@ApiModelProperty(value = "患者电话")
@Excel(name = "患者电话")
private String patientPhone;
/** 家属电话 */
@ApiModelProperty(value = "家属电话")
private String familyMemberPhone;
/** 出生日期格式yyyy-MM-dd */
@ApiModelProperty(value = "出生日期格式yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private LocalDate birthDate;
/** 身份证号 */
@ApiModelProperty(value = "身份证号")
private String cardNo;
/** 性别MALEFEMALE */
@ApiModelProperty(value = "性别MALEFEMALE")
@Excel(name = "性别MALEFEMALE")
private String sex;
/** 住址 */
@ApiModelProperty(value = "住址")
@Excel(name = "住址")
private String address;
}

View File

@ -165,6 +165,13 @@
where id = #{id} where id = #{id}
</select> </select>
<select id="getPatientBaseInfo" parameterType="Long" resultType="com.xinelu.manage.vo.patientinfo.PatientBaseInfoVo">
select id, patient_name, patient_phone, family_member_phone,
birth_date, card_no, sex, address
from patient_info
where id = #{id}
</select>
<insert id="insertPatientInfo" parameterType="com.xinelu.manage.domain.patientinfo.PatientInfo" useGeneratedKeys="true" keyProperty="id"> <insert id="insertPatientInfo" parameterType="com.xinelu.manage.domain.patientinfo.PatientInfo" useGeneratedKeys="true" keyProperty="id">
insert into patient_info insert into patient_info
<trim prefix="(" suffix=")" suffixOverrides=","> <trim prefix="(" suffix=")" suffixOverrides=",">

View File

@ -290,7 +290,7 @@
p.campus_agency_name, p.campus_agency_name,
p.department_name,p.ward_name, p.department_name,p.ward_name,
p.appointment_treatment_group,p.registration_no,p.registration_date, p.appointment_treatment_group,p.registration_no,p.registration_date,
p.appointment_date,p.certificate_issuing_doctor_id,p.certificate_issuing_doctor_name p.appointment_date, p.certificate_issuing_doctor_id,p.certificate_issuing_doctor_name, patient.create_time
from patient_info patient left join patient_pre_hospitalization p on p.patient_id = patient.id from patient_info patient left join patient_pre_hospitalization p on p.patient_id = patient.id
<where> <where>
p.del_flag = 0 and patient.patient_type = 'PRE_HOSPITALIZED_PATIENT' p.del_flag = 0 and patient.patient_type = 'PRE_HOSPITALIZED_PATIENT'
@ -356,9 +356,9 @@
department_name,ward_id,ward_name, department_name,ward_id,ward_name,
appointment_treatment_group,registration_no,registration_date, appointment_treatment_group,registration_no,registration_date,
appointment_date,certificate_issuing_doctor_id,certificate_issuing_doctor_name, appointment_date,certificate_issuing_doctor_id,certificate_issuing_doctor_name,
responsible_nurse,del_flag,search_value, responsible_nurse,del_flag,
create_by,create_time,update_by, create_by,create_time,update_by,
update_time,remark,params) update_time)
values values
<foreach collection="recordList" item="item" separator=","> <foreach collection="recordList" item="item" separator=",">
(#{item.id,jdbcType=NUMERIC},#{item.patientId,jdbcType=NUMERIC},#{item.patientName,jdbcType=VARCHAR}, (#{item.id,jdbcType=NUMERIC},#{item.patientId,jdbcType=NUMERIC},#{item.patientName,jdbcType=VARCHAR},
@ -369,9 +369,9 @@
#{item.departmentName,jdbcType=VARCHAR},#{item.wardId,jdbcType=NUMERIC},#{item.wardName,jdbcType=VARCHAR}, #{item.departmentName,jdbcType=VARCHAR},#{item.wardId,jdbcType=NUMERIC},#{item.wardName,jdbcType=VARCHAR},
#{item.appointmentTreatmentGroup,jdbcType=VARCHAR},#{item.registrationNo,jdbcType=VARCHAR},#{item.registrationDate,jdbcType=TIMESTAMP}, #{item.appointmentTreatmentGroup,jdbcType=VARCHAR},#{item.registrationNo,jdbcType=VARCHAR},#{item.registrationDate,jdbcType=TIMESTAMP},
#{item.appointmentDate,jdbcType=TIMESTAMP},#{item.certificateIssuingDoctorId,jdbcType=NUMERIC},#{item.certificateIssuingDoctorName,jdbcType=VARCHAR}, #{item.appointmentDate,jdbcType=TIMESTAMP},#{item.certificateIssuingDoctorId,jdbcType=NUMERIC},#{item.certificateIssuingDoctorName,jdbcType=VARCHAR},
#{item.responsibleNurse,jdbcType=VARCHAR},#{item.delFlag,jdbcType=NUMERIC},#{item.searchValue,jdbcType=VARCHAR}, #{item.responsibleNurse,jdbcType=VARCHAR},#{item.delFlag,jdbcType=NUMERIC},
#{item.createBy,jdbcType=VARCHAR},#{item.createTime,jdbcType=TIMESTAMP},#{item.updateBy,jdbcType=VARCHAR}, #{item.createBy,jdbcType=VARCHAR},#{item.createTime,jdbcType=TIMESTAMP},#{item.updateBy,jdbcType=VARCHAR},
#{item.updateTime,jdbcType=TIMESTAMP},#{item.remark,jdbcType=VARCHAR},#{item.params}) #{item.updateTime,jdbcType=TIMESTAMP})
</foreach> </foreach>
</insert> </insert>
</mapper> </mapper>

View File

@ -50,7 +50,7 @@
</resultMap> </resultMap>
<sql id="selectPatientVisitRecordVo"> <sql id="selectPatientVisitRecordVo">
select id, patient_id, card_no, patient_name, patient_phone, family_member_phone, address, sex, birth_date, age, nation, visit_type, visit_date, visit_name, hospital_agency_id, hospital_agency_name, campus_agency_id, campus_agency_name, department_id, department_name, ward_id, ward_name, attending_physician_id, attending_physician_name, main_diagnosis, marriage, medical_history_narrator, admission_time, discharge_time, record_time, outpatient_visit_info, hospitalization_days, in_hospital_info, out_hospital_info, visit_serial_number, in_hospital_number, responsible_nurse, surgical_name, create_by, create_time, update_by, update_time from patient_visit_record select id, patient_id, card_no, patient_name, patient_phone, family_member_phone, address, sex, birth_date, age, nation, visit_method, visit_date, visit_name, hospital_agency_id, hospital_agency_name, campus_agency_id, campus_agency_name, department_id, department_name, ward_id, ward_name, attending_physician_id, attending_physician_name, main_diagnosis, marriage, medical_history_narrator, admission_time, discharge_time, record_time, outpatient_visit_info, hospitalization_days, in_hospital_info, out_hospital_info, visit_serial_number, in_hospital_number, responsible_nurse, surgical_name, create_by, create_time, update_by, update_time from patient_visit_record
</sql> </sql>
<select id="selectPatientVisitRecordList" parameterType="com.xinelu.manage.dto.patientvisitrecord.PatientVisitRecordDto" resultMap="PatientVisitRecordResult"> <select id="selectPatientVisitRecordList" parameterType="com.xinelu.manage.dto.patientvisitrecord.PatientVisitRecordDto" resultMap="PatientVisitRecordResult">
@ -397,7 +397,7 @@
insert into patient_visit_record(patient_id,card_no, insert into patient_visit_record(patient_id,card_no,
patient_name,patient_phone,family_member_phone, patient_name,patient_phone,family_member_phone,
address,sex,birth_date, address,sex,birth_date,
age,nation,visit_type, age,nation,visit_method,
visit_date,visit_name,hospital_agency_id, visit_date,visit_name,hospital_agency_id,
hospital_agency_name,campus_agency_id,campus_agency_name, hospital_agency_name,campus_agency_id,campus_agency_name,
department_id,department_name,ward_id, department_id,department_name,ward_id,

View File

@ -423,5 +423,6 @@
<where> <where>
sign.del_flag = 0 and sign.patient_id = #{patientId} sign.del_flag = 0 and sign.patient_id = #{patientId}
</where> </where>
order by sign.sign_time desc
</select> </select>
</mapper> </mapper>