门诊输液更新

This commit is contained in:
liuhongrui
2025-03-15 13:19:12 +08:00
parent 3570ea007f
commit 7aa0b13069
6 changed files with 161 additions and 13 deletions

View File

@@ -48,8 +48,6 @@ public interface IOutpatientInfusionRecordService {
*/
List<OutpatientInfusionRecordDto> getPatientInfusionRecord(OutpatientInfusionPatientDto outpatientInfusionPatientDto);
/**
* 执行单个患者门诊输液
*
@@ -59,4 +57,19 @@ public interface IOutpatientInfusionRecordService {
*/
boolean editPatientInfusionRecord(OutpatientInfusionRecordDto outpatientInfusionRecordDto,Long exeCount);
/**
* 执行输液后,修改执行结束时间
*
* @param outpatientInfusionRecordDto 患者输液信息
* @return 修改成功/失败
*/
boolean editPatientInfusionTime(OutpatientInfusionRecordDto outpatientInfusionRecordDto);
/**
* 显示门诊输液执行记录查询
*
* @return 门诊输液记录列表
*/
List<OutpatientInfusionRecordDto> getPatientInfusionPerformRecord();
}

View File

@@ -14,6 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.core.common.utils.AgeCalculatorUtil;
@@ -21,6 +22,8 @@ import com.core.common.utils.AssignSeqUtil;
import com.core.common.utils.DateUtils;
import com.core.common.utils.SecurityUtils;
import com.openhis.administration.domain.Practitioner;
import com.openhis.administration.domain.PractitionerRole;
import com.openhis.administration.service.IPractitionerRoleService;
import com.openhis.administration.service.IPractitionerService;
import com.openhis.common.enums.AdministrativeGender;
import com.openhis.common.enums.ClinicalStatus;
@@ -34,6 +37,7 @@ import com.openhis.web.outpatientmanage.dto.OutpatientInfusionRecordDto;
import com.openhis.web.outpatientmanage.dto.OutpatientInfusionSearchParam;
import com.openhis.web.outpatientmanage.mapper.OutpatientManageMapper;
import com.openhis.workflow.domain.ServiceRequest;
import com.openhis.workflow.mapper.ServiceRequestMapper;
import com.openhis.workflow.service.IServiceRequestService;
/**
@@ -54,6 +58,12 @@ public class OutpatientInfusionRecordServiceImpl implements IOutpatientInfusionR
@Autowired
IPractitionerService practitionerService;
@Autowired
IPractitionerRoleService practitionerRoleService;
@Autowired
ServiceRequestMapper serviceRequestMapper;
@Override
/**
* 获取门诊输液记录初期数据列表
@@ -129,6 +139,10 @@ public class OutpatientInfusionRecordServiceImpl implements IOutpatientInfusionR
// 构建查询条件
QueryWrapper<OutpatientInfusionPatientDto> queryWrapper = HisQueryUtils.buildQueryWrapper(null, searchKey,
new HashSet<>(Arrays.asList("patient_busNo", "encounter_busNo", "patient_name")), null);
// based_on_id 是为空的
queryWrapper.eq("based_on_id",null);
// 状态是未完成的
queryWrapper.in("status_enum", EventStatus.IN_PROGRESS.getValue(), EventStatus.NOT_DONE.getValue());
// 添加时间段查询条件
if (beginTime != null && endTime != null) {
queryWrapper.ge("begin_time", beginTime);
@@ -164,7 +178,10 @@ public class OutpatientInfusionRecordServiceImpl implements IOutpatientInfusionR
// 创建查询包装器
QueryWrapper<OutpatientInfusionRecordDto> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("patient_id", outpatientInfusionPatientDto.getPatientId());
// based_on_id 是为空的
queryWrapper.eq("based_on_id",null);
// 状态是未完成的
queryWrapper.in("status_enum", EventStatus.IN_PROGRESS.getValue(), EventStatus.NOT_DONE.getValue());
// 从数据库获取输液记录列表
List<OutpatientInfusionRecordDto> infusionList =
outpatientManageMapper.getOutpatientInfusionRecord(queryWrapper);
@@ -187,9 +204,12 @@ public class OutpatientInfusionRecordServiceImpl implements IOutpatientInfusionR
// 根据执行人ID通过登录userId获取
Practitioner practitioner =
practitionerService.getPractitionerByUserId(SecurityUtils.getLoginUser().getUserId());
if (practitioner == null) {
// 以执行人ID获取执行人的身份类别
PractitionerRole practitionerRole = practitionerRoleService.getPractitionerRoleById(practitioner.getId());
if (practitioner == null || practitionerRole == null) {
return false;
}
String busNo = AssignSeqUtil.formatString(outpatientInfusionRecordDto.getBusNo(), exeCount, 3);
// 当输液未被全部执行时,可以修改继续执行,生成一条执行记录
if ((BigDecimal.valueOf(exeCount)).compareTo(outpatientInfusionRecordDto.getMedicationAntity()) < 0) {
@@ -210,20 +230,78 @@ public class OutpatientInfusionRecordServiceImpl implements IOutpatientInfusionR
.setEncounterId(outpatientInfusionRecordDto.getEncounterId())
// 执行人id通过登录userId获取
.setPerformerId(practitioner.getId())
// 设置执行人身份类别
.setPerformerTypeCode(practitionerRole.getRoleCode())
// 设置执行日期为当前时间
.setOccurrenceStartTime(DateUtils.getNowDate())
// 默认30结束
.setOccurrenceEndTime(DateUtils.addDateMinute(DateUtils.getNowDate(), 30));
boolean result = serviceRequestService.save(serviceRequest);
if (!result) {
return false;
}
// 判断如果是执行该患者最后一次记录,更新原来的服请求状态
if ((BigDecimal.valueOf(exeCount + 1)).compareTo(outpatientInfusionRecordDto.getMedicationAntity()) == 0) {
// 以id为主条件更新服务申请管理表
UpdateWrapper<ServiceRequest> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", outpatientInfusionRecordDto.getServiceId())
.set("status_enum", EventStatus.COMPLETED.getValue())
.set("performer_type_code", practitionerRole.getRoleCode())
.set("performer_id", practitioner.getId())
.set("occurrence_start_time", DateUtils.getNowDate())
.set("occurrence_end_time", DateUtils.getNowDate());
int countUpdate = serviceRequestMapper.update(null, updateWrapper);
if (countUpdate < 0) {
return false;
}
}
return true;
}
return false;
}
/**
* 执行输液后,修改执行结束时间
*
* @param outpatientInfusionRecordDto 患者输液信息
* @return 修改成功/失败
*/
@Override
public boolean editPatientInfusionTime(OutpatientInfusionRecordDto outpatientInfusionRecordDto) {
// 以id为主条件更新服务申请管理表
UpdateWrapper<ServiceRequest> updateWrapper = new UpdateWrapper<>();
updateWrapper.eq("id", outpatientInfusionRecordDto.getServiceId()).set("occurrence_end_time",
DateUtils.parseDate(outpatientInfusionRecordDto.getOccurrenceEndTime()));
int countUpdate = serviceRequestMapper.update(null, updateWrapper);
if (countUpdate < 0) {
return false;
} else {
return true;
}
}
/**
* 显示门诊输液执行记录查询
*
* @return 门诊输液记录列表
*/
@Override
public List<OutpatientInfusionRecordDto> getPatientInfusionPerformRecord() {
// 创建查询包装器
QueryWrapper<OutpatientInfusionRecordDto> queryWrapper = new QueryWrapper<>();
// based_on_id 不为空
queryWrapper.isNotNull("based_on_id");
// 状态是已完成
queryWrapper.eq("status_enum", EventStatus.COMPLETED.getValue());
// 从数据库获取输液记录列表
List<OutpatientInfusionRecordDto> infusionPerformList =
outpatientManageMapper.getOutpatientInfusionRecord(queryWrapper);
return infusionPerformList;
}
}

View File

@@ -16,6 +16,8 @@ import com.openhis.workflow.service.IServiceRequestService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import java.util.List;
/**
* 门诊输液记录
*
@@ -80,15 +82,63 @@ public class OutpatientInfusionRecordController {
* @param outpatientInfusionRecordDto 患者输液信息
* @return 门诊输液记录列表
*/
@PutMapping("/outpatient-record-skintest")
@PutMapping("/infusion-perform")
public R<?>
editPatientInfusionRecord(@Validated @RequestBody OutpatientInfusionRecordDto outpatientInfusionRecordDto) {
// 获取执行次数
Long exeCount =
serviceRequestService.countServiceRequestByBasedOnId(outpatientInfusionRecordDto.getServiceId());
outpatientInfusionRecordService.editPatientInfusionRecord(outpatientInfusionRecordDto,exeCount);
boolean res = outpatientInfusionRecordService.editPatientInfusionRecord(outpatientInfusionRecordDto, exeCount);
if (!res) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00001, new Object[] {"患者门诊输液执行"}));
}
/**
* 批量执行患者门诊输液
*
* @param outpatientInfusionRecordDtoList 患者输液信息列表
* @return 门诊输液记录列表
*/
@PutMapping("/infusion-perform/batch")
public R<?> batchEditPatientInfusionRecord(
@Validated @RequestBody List<OutpatientInfusionRecordDto> outpatientInfusionRecordDtoList) {
// 获取执行次数
for (OutpatientInfusionRecordDto dto : outpatientInfusionRecordDtoList) {
Long exeCount = serviceRequestService.countServiceRequestByBasedOnId(dto.getServiceId());
boolean res = outpatientInfusionRecordService.editPatientInfusionRecord(dto, exeCount);
if (!res) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
}
return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00001, new Object[] {"患者门诊输液执行"}));
}
/**
* 执行输液后,修改执行结束时间
*
* @param outpatientInfusionRecordDto 患者输液信息
*/
@PutMapping("/infusion-perform-time")
public R<?>
editPatientInfusionTime(@Validated @RequestBody OutpatientInfusionRecordDto outpatientInfusionRecordDto) {
boolean res = outpatientInfusionRecordService.editPatientInfusionTime(outpatientInfusionRecordDto);
if (!res) {
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
}
return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00001, new Object[] {"患者门诊输液记录"}));
}
/**
* 显示门诊输液执行记录查询
*
* @return 门诊输液记录列表
*/
@GetMapping(value = "/infusion-perform-Record")
public R<?> getPatientInfusionPerformRecord() {
return R.ok(outpatientInfusionRecordService.getPatientInfusionPerformRecord());
}
}

View File

@@ -44,6 +44,9 @@ public class OutpatientInfusionPatientDto {
/** 病人生日 */
private Date birthDate;
/** 病人身份证号 */
private String idCard;
/** 病人年龄 */
private String ageString;

View File

@@ -57,7 +57,8 @@ public class OutpatientInfusionRecordDto {
private String genderEnum_enumText;
/** 已执行数量 */
private Integer executionCount;
@JsonSerialize(using = ToStringSerializer.class)
private Long executionCount;
/** 执行护士 */
@Dict(dictCode = "id", dictTable = "adm_practitioner", dictText = "name")

View File

@@ -140,6 +140,7 @@
T1.patient_busNo,
T1.patient_id,
T1.patient_name,
T1.id_card,
T1.gender_enum,
T1.create_time
from
@@ -152,6 +153,7 @@
pt.bus_no AS patient_busNo, --病人ID前台显示用
sr.patient_id, --病人ID
pt.name AS patient_name, --病人姓名
pt.name AS id_card, --病人身份证号
pt.gender_enum AS gender_enum, --病人性别
mr.create_time AS create_time --开单时间
FROM
@@ -177,6 +179,7 @@
SELECT
T1.service_id,
T1.bus_no,
T1.execution_count,
T1.based_on_id,
T1.activity_id,
T1.prescription_no,
@@ -204,6 +207,7 @@
SELECT
sr.id AS service_id, --服务申请管理ID
sr.bus_no, -- 服务请求编码
(SELECT COUNT(*) FROM wor_service_request WHERE based_on_id = SPLIT_PART(sr.bus_no, '.', 1)) AS execution_count, -- 执行次数
sr.based_on_id, --请求基于什么的ID
sr.activity_id,--请求code,输液
sr.prescription_no, --处方号
@@ -242,7 +246,6 @@
ad.bus_no = 'sy001' -- 皮试检查的编号todo编号未定后期修改
AND mr.infusion_flag = 1
AND md.infusion_flag = 1
AND sr.status_enum in (2,3) --服务状态未完成
</where>
ORDER BY