提交merge1.3
This commit is contained in:
@@ -8,6 +8,7 @@ import javax.servlet.http.HttpServletRequest;
|
||||
import com.core.common.core.domain.R;
|
||||
import com.openhis.web.inhospitalnursestation.dto.AdmissionPageParam;
|
||||
import com.openhis.web.inhospitalnursestation.dto.AdmissionPatientInfoDto;
|
||||
import com.openhis.web.inhospitalnursestation.dto.InpatientAdviceParam;
|
||||
|
||||
/**
|
||||
* 入出转管理 service
|
||||
@@ -55,13 +56,25 @@ public interface IATDManageAppService {
|
||||
*/
|
||||
R<?> getAdmissionPatientInfo(Long encounterId);
|
||||
|
||||
|
||||
/**
|
||||
<<<<<<< HEAD
|
||||
* 住院患者待处理信息列表
|
||||
*
|
||||
* @param encounterId 住院id
|
||||
* @return 待处理信息列表
|
||||
*/
|
||||
R<?> getInPatientPendingList(Long encounterId);
|
||||
=======
|
||||
* 住院患者待处理列表查询
|
||||
*
|
||||
* @param inpatientAdviceParam 查询条件
|
||||
* @param pageNo 当前页码
|
||||
* @param pageSize 查询条数
|
||||
* @return 住院患者医
|
||||
*/
|
||||
R<?> getInPatientPendingList(InpatientAdviceParam inpatientAdviceParam, Integer pageNo, Integer pageSize);
|
||||
>>>>>>> v1.3
|
||||
|
||||
/**
|
||||
* 入科床位分配
|
||||
@@ -74,7 +87,11 @@ public interface IATDManageAppService {
|
||||
/**
|
||||
* 转科
|
||||
*
|
||||
<<<<<<< HEAD
|
||||
* @param encounterId 住院id
|
||||
=======
|
||||
* @param encounterId 住院患者id
|
||||
>>>>>>> v1.3
|
||||
* @return 结果
|
||||
*/
|
||||
R<?> transferDepartment(Long encounterId);
|
||||
@@ -82,8 +99,39 @@ public interface IATDManageAppService {
|
||||
/**
|
||||
* 出院
|
||||
*
|
||||
<<<<<<< HEAD
|
||||
* @param encounterId 住院id
|
||||
* @return 结果
|
||||
*/
|
||||
R<?> hospitalDischarge(Long encounterId);
|
||||
=======
|
||||
* @param encounterId 住院患者id
|
||||
* @return 结果
|
||||
*/
|
||||
R<?> hospitalDischarge(Long encounterId);
|
||||
|
||||
/**
|
||||
* 清床
|
||||
*
|
||||
* @param encounterId 住院患者id
|
||||
* @return 结果
|
||||
*/
|
||||
R<?> terminalCleaning(Long encounterId);
|
||||
|
||||
/**
|
||||
* 诊断个人账户金额信息获取
|
||||
*
|
||||
* @param encounterId 诊断id
|
||||
* @return EncounterAccountDto 诊断账户金额
|
||||
**/
|
||||
R<?> getAmount(Long encounterId);
|
||||
|
||||
/**
|
||||
* 获取待配/退药
|
||||
*
|
||||
* @param encounterId 诊断id
|
||||
* @return PendingMedicationDto 待配/退药
|
||||
**/
|
||||
R<?> getPendingMedication(Long encounterId);
|
||||
>>>>>>> v1.3
|
||||
}
|
||||
|
||||
@@ -0,0 +1,79 @@
|
||||
package com.openhis.web.inhospitalnursestation.appservice;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.core.common.core.domain.R;
|
||||
import com.openhis.web.inhospitalnursestation.dto.AutoRollSourceDto;
|
||||
import com.openhis.web.inhospitalnursestation.dto.EncounterAutoRollQueryDto;
|
||||
import com.openhis.web.inhospitalnursestation.dto.EncounterAutoRollSaveDto;
|
||||
import com.openhis.web.inhospitalnursestation.dto.InBedPatientInfoDto;
|
||||
|
||||
/**
|
||||
* 住院就诊滚方 应用实现接口
|
||||
*/
|
||||
public interface IEncounterAutoRollAppService {
|
||||
|
||||
/**
|
||||
* 查询自动滚方数据源
|
||||
*
|
||||
* @return 自动滚方数据源
|
||||
*/
|
||||
List<AutoRollSourceDto> getSource();
|
||||
|
||||
/**
|
||||
* 保存住院就诊的滚方信息
|
||||
*
|
||||
* @param encounterAutoRollSaveDto 住院就诊的滚方信息
|
||||
* @return 结果
|
||||
*/
|
||||
R<?> saveBinding(EncounterAutoRollSaveDto encounterAutoRollSaveDto);
|
||||
|
||||
/**
|
||||
* 查询住院就诊滚方绑定信息
|
||||
*
|
||||
* @param encounterId 就诊id
|
||||
* @return 住院就诊滚方绑定信息
|
||||
*/
|
||||
List<EncounterAutoRollQueryDto> getEncounter(Long encounterId);
|
||||
|
||||
/**
|
||||
* 删除住院就诊的滚方信息
|
||||
*
|
||||
* @param id id
|
||||
* @return 结果
|
||||
*/
|
||||
R<?> deleteBinding(Long id);
|
||||
|
||||
/**
|
||||
* 启用or停用
|
||||
*
|
||||
* @param id id
|
||||
* @param status 状态
|
||||
* @return 结果
|
||||
*/
|
||||
R<?> activeOrRetired(Long id, Integer status);
|
||||
|
||||
/**
|
||||
* 查询在床患者信息
|
||||
*
|
||||
* @return 在床患者信息
|
||||
*/
|
||||
List<InBedPatientInfoDto> getInBedPatientInfo();
|
||||
|
||||
/**
|
||||
* 滚护理费
|
||||
*
|
||||
* @param tenantId 租户id
|
||||
* @param orderPricing 医嘱定价来源 | 定时任务调用时传参
|
||||
*/
|
||||
void autoRollNursingFee(Integer tenantId,String orderPricing);
|
||||
|
||||
/**
|
||||
* 滚基础服务费
|
||||
*
|
||||
* @param tenantId 租户id
|
||||
* @param orderPricing 医嘱定价来源 | 定时任务调用时传参
|
||||
*/
|
||||
void autoRollBasicService(Integer tenantId,String orderPricing);
|
||||
|
||||
}
|
||||
@@ -17,6 +17,7 @@ import com.openhis.web.inhospitalnursestation.dto.MedicineSummaryParam;
|
||||
public interface IMedicineSummaryAppService {
|
||||
|
||||
/**
|
||||
<<<<<<< HEAD
|
||||
* 查询发药单信息
|
||||
*
|
||||
* @param dispenseFormSearchParam 查询条件
|
||||
@@ -30,6 +31,43 @@ public interface IMedicineSummaryAppService {
|
||||
|
||||
/**
|
||||
* 查询药品汇总单
|
||||
=======
|
||||
* 药品汇总单初始化
|
||||
*
|
||||
* @return 初始化信息
|
||||
*/
|
||||
R<?> getMedicineSummaryInit();
|
||||
|
||||
/**
|
||||
* 查询发药单信息
|
||||
>>>>>>> v1.3
|
||||
*
|
||||
* @param dispenseFormSearchParam 查询条件
|
||||
* @param pageNo 当前页码
|
||||
* @param pageSize 查询条数
|
||||
<<<<<<< HEAD
|
||||
* @param searchKey 模糊查询关键字
|
||||
* @param request 请求
|
||||
* @return 药品汇总单
|
||||
*/
|
||||
R<?> getMedicineSummaryFormPage(DispenseFormSearchParam dispenseFormSearchParam, Integer pageNo, Integer pageSize,
|
||||
String searchKey, HttpServletRequest request);
|
||||
|
||||
/**
|
||||
* 查询药品汇总单详情
|
||||
*
|
||||
* @param summaryNo 汇总单号
|
||||
* @return 药品汇总单详情
|
||||
*/
|
||||
=======
|
||||
* @param request 请求
|
||||
* @return 发药单信息
|
||||
*/
|
||||
R<?> getMedicineDispenseFormPage(DispenseFormSearchParam dispenseFormSearchParam, Integer pageNo, Integer pageSize,
|
||||
HttpServletRequest request);
|
||||
|
||||
/**
|
||||
* 查询药品汇总单
|
||||
*
|
||||
* @param dispenseFormSearchParam 查询条件
|
||||
* @param pageNo 当前页码
|
||||
@@ -47,6 +85,7 @@ public interface IMedicineSummaryAppService {
|
||||
* @param summaryNo 汇总单号
|
||||
* @return 药品汇总单详情
|
||||
*/
|
||||
>>>>>>> v1.3
|
||||
R<?> getMedicineSummaryFormDetail(String summaryNo);
|
||||
|
||||
/**
|
||||
@@ -58,12 +97,12 @@ public interface IMedicineSummaryAppService {
|
||||
R<?> medicineSummary(List<MedicineSummaryParam> medicineSummaryParamList);
|
||||
|
||||
/**
|
||||
* 校验库存
|
||||
* 取消汇总
|
||||
*
|
||||
* @param devDispenseId 耗材发放id
|
||||
* @param medDispenseId 药品发放id
|
||||
* @param summaryNo 汇总单号
|
||||
* @return 处理结果
|
||||
*/
|
||||
<<<<<<< HEAD
|
||||
R<?> checkInventoryItem(List<Long> devDispenseId, List<Long> medDispenseId);
|
||||
|
||||
/**
|
||||
@@ -72,5 +111,7 @@ public interface IMedicineSummaryAppService {
|
||||
* @param summaryNo 汇总单号
|
||||
* @return 处理结果
|
||||
*/
|
||||
=======
|
||||
>>>>>>> v1.3
|
||||
R<?> cancelSummary(String summaryNo);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,19 @@
|
||||
package com.openhis.web.inhospitalnursestation.appservice;
|
||||
|
||||
<<<<<<< HEAD
|
||||
import com.core.common.core.domain.R;
|
||||
=======
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import com.core.common.core.domain.R;
|
||||
import com.openhis.administration.dto.CostDetailSearchParam;
|
||||
import com.openhis.web.inhospitalnursestation.dto.InpatientAdviceParam;
|
||||
import com.openhis.web.regdoctorstation.dto.AdviceBatchOpParam;
|
||||
>>>>>>> v1.3
|
||||
import com.openhis.web.regdoctorstation.dto.RegAdviceSaveParam;
|
||||
|
||||
public interface INurseBillingAppService {
|
||||
@@ -9,15 +22,20 @@ public interface INurseBillingAppService {
|
||||
* @return
|
||||
*/
|
||||
public R<?> addInNurseBilling(RegAdviceSaveParam regAdviceSaveParam);
|
||||
<<<<<<< HEAD
|
||||
/*
|
||||
* 住院护士 划价列表 根据护士encounterId查询
|
||||
* @return
|
||||
*/
|
||||
public R<?> getBillingListByEncounterId();
|
||||
=======
|
||||
|
||||
>>>>>>> v1.3
|
||||
/*
|
||||
* 住院护士撤销划价
|
||||
* @return
|
||||
*/
|
||||
<<<<<<< HEAD
|
||||
public R<?> deleteInNurseBilling();
|
||||
/*
|
||||
* 医嘱计费添加 诊疗 耗材
|
||||
@@ -36,4 +54,52 @@ public interface INurseBillingAppService {
|
||||
* @return
|
||||
*/
|
||||
public R<?> getOrderBillingByRequestId();
|
||||
=======
|
||||
public R<?> deleteInNurseBilling(List<AdviceBatchOpParam> paramList);
|
||||
|
||||
/**
|
||||
* 住院患者医嘱查询
|
||||
*
|
||||
* @param inpatientAdviceParam 查询条件
|
||||
* @param pageNo 当前页码
|
||||
* @param pageSize 查询条数
|
||||
* @return 住院患者医
|
||||
*/
|
||||
R<?> getInNurseBillingPage(InpatientAdviceParam inpatientAdviceParam, Integer pageNo, Integer pageSize,
|
||||
LocalDateTime startTime, LocalDateTime endTime);
|
||||
|
||||
/*
|
||||
* 医嘱计费添加 诊疗 耗材
|
||||
*/
|
||||
public R<?> addOrderBilling();
|
||||
|
||||
/*
|
||||
* 医嘱计费删除 诊疗 耗材
|
||||
*/
|
||||
public R<?> deleteOrderBilling();
|
||||
|
||||
/*
|
||||
* 医嘱计费修改 诊疗 耗材
|
||||
*/
|
||||
public R<?> updateOrderBilling();
|
||||
|
||||
/**
|
||||
* 费用明细查询
|
||||
*
|
||||
* @param costDetailSearchParam 查询条件
|
||||
* @param request request请求
|
||||
* @return 住院患者费用明细
|
||||
*/
|
||||
R<?> getCostDetails(CostDetailSearchParam costDetailSearchParam, HttpServletRequest request);
|
||||
|
||||
/**
|
||||
* 费用明细导出
|
||||
*
|
||||
* @param costDetailSearchParam 查询条件
|
||||
* @param request request请求
|
||||
* @param response response响应
|
||||
*/
|
||||
void makeExcelFile(CostDetailSearchParam costDetailSearchParam, HttpServletRequest request,
|
||||
HttpServletResponse response);
|
||||
>>>>>>> v1.3
|
||||
}
|
||||
|
||||
@@ -5,6 +5,10 @@ import com.openhis.web.inhospitalnursestation.dto.OrgDeviceSummaryParam;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
import java.util.List;
|
||||
>>>>>>> v1.3
|
||||
|
||||
/**
|
||||
* 科室耗材盘点 应用实现接口
|
||||
@@ -15,18 +19,35 @@ import javax.servlet.http.HttpServletRequest;
|
||||
public interface IOrgDeviceStockTakeAppService {
|
||||
|
||||
/**
|
||||
<<<<<<< HEAD
|
||||
* 查询科室耗材汇总
|
||||
*
|
||||
* @param orgDeviceSummaryParam 查询条件
|
||||
* @param startTime 开始时间
|
||||
* @param endTime 结束时间
|
||||
=======
|
||||
* 页面初始化
|
||||
*
|
||||
* @return 初始化信息
|
||||
*/
|
||||
R<?> init();
|
||||
|
||||
/**
|
||||
* 查询科室耗材汇总
|
||||
*
|
||||
* @param orgDeviceSummaryParam 查询条件
|
||||
>>>>>>> v1.3
|
||||
* @param pageNo 当前页码
|
||||
* @param pageSize 查询条数
|
||||
* @param searchKey 模糊查询关键字
|
||||
* @param request 请求
|
||||
* @return 科室耗材汇总单
|
||||
*/
|
||||
<<<<<<< HEAD
|
||||
R<?> getOrgDeviceSummaryFromPage(OrgDeviceSummaryParam orgDeviceSummaryParam, String startTime, String endTime,
|
||||
=======
|
||||
R<?> getOrgDeviceSummaryFromPage(OrgDeviceSummaryParam orgDeviceSummaryParam,
|
||||
>>>>>>> v1.3
|
||||
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
|
||||
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, String searchKey,
|
||||
HttpServletRequest request);
|
||||
@@ -36,5 +57,9 @@ public interface IOrgDeviceStockTakeAppService {
|
||||
*
|
||||
* @return 科室耗材汇总单
|
||||
*/
|
||||
<<<<<<< HEAD
|
||||
R<?> orgDeviceSummary(OrgDeviceSummaryParam orgDeviceSummaryParam);
|
||||
=======
|
||||
R<?> orgDeviceSummary(List<OrgDeviceSummaryParam> orgDeviceSummaryParamList);
|
||||
>>>>>>> v1.3
|
||||
}
|
||||
|
||||
@@ -12,10 +12,16 @@ import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.core.common.core.domain.R;
|
||||
import com.core.common.enums.DelFlag;
|
||||
import com.core.common.utils.AgeCalculatorUtil;
|
||||
import com.core.common.utils.DateUtils;
|
||||
import com.core.common.utils.SecurityUtils;
|
||||
import com.core.common.utils.StringUtils;
|
||||
import com.openhis.administration.domain.Encounter;
|
||||
import com.openhis.administration.domain.EncounterLocation;
|
||||
import com.openhis.administration.service.IEncounterLocationService;
|
||||
import com.openhis.administration.service.IEncounterParticipantService;
|
||||
@@ -25,9 +31,23 @@ import com.openhis.common.constant.CommonConstants;
|
||||
import com.openhis.common.enums.*;
|
||||
import com.openhis.common.utils.EnumUtils;
|
||||
import com.openhis.common.utils.HisQueryUtils;
|
||||
import com.openhis.document.domain.DocStatistics;
|
||||
import com.openhis.document.domain.OrderProcess;
|
||||
import com.openhis.document.mapper.DocStatisticsMapper;
|
||||
import com.openhis.document.service.IOrderProcessService;
|
||||
import com.openhis.medication.domain.MedicationDispense;
|
||||
import com.openhis.medication.domain.MedicationRequest;
|
||||
import com.openhis.medication.service.IMedicationDispenseService;
|
||||
import com.openhis.medication.service.IMedicationRequestService;
|
||||
import com.openhis.web.document.appservice.IDocStatisticsAppService;
|
||||
import com.openhis.web.document.appservice.IDocStatisticsDefinitionAppService;
|
||||
import com.openhis.web.document.dto.DocStatisticsDefinitionDto;
|
||||
import com.openhis.web.document.dto.DocStatisticsDto;
|
||||
import com.openhis.web.inhospitalnursestation.appservice.IATDManageAppService;
|
||||
import com.openhis.web.inhospitalnursestation.dto.*;
|
||||
import com.openhis.web.inhospitalnursestation.mapper.ATDManageAppMapper;
|
||||
import com.openhis.workflow.domain.ServiceRequest;
|
||||
import com.openhis.workflow.service.IServiceRequestService;
|
||||
|
||||
/**
|
||||
* 入出转管理 实现类
|
||||
@@ -53,6 +73,27 @@ public class ATDManageAppServiceImpl implements IATDManageAppService {
|
||||
@Resource
|
||||
private IEncounterService encounterService;
|
||||
|
||||
@Resource
|
||||
private IDocStatisticsAppService docStatisticsAppService;
|
||||
|
||||
@Resource
|
||||
private IDocStatisticsDefinitionAppService docStatisticsDefinitionAppService;
|
||||
|
||||
@Resource
|
||||
private DocStatisticsMapper docStatisticsMapper;
|
||||
|
||||
@Resource
|
||||
private IOrderProcessService orderProcessService;
|
||||
|
||||
@Resource
|
||||
private IMedicationDispenseService medicationDispenseService;
|
||||
|
||||
@Resource
|
||||
private IMedicationRequestService medicationRequestService;
|
||||
|
||||
@Resource
|
||||
private IServiceRequestService serviceRequestService;
|
||||
|
||||
/**
|
||||
* 入出转管理页面初始化
|
||||
*
|
||||
@@ -172,17 +213,22 @@ public class ATDManageAppServiceImpl implements IATDManageAppService {
|
||||
ParticipantType.PRIMARY_NURSE.getCode(), ParticipantType.ATTENDING_DOCTOR.getCode(),
|
||||
ParticipantType.ADMITTING_DOCTOR.getCode(), ParticipantType.CHIEF_DOCTOR.getCode());
|
||||
// 年龄
|
||||
admissionPatientInfoDto.setAge(AgeCalculatorUtil.getAge(admissionPatientInfoDto.getBirthDate()));
|
||||
if (admissionPatientInfoDto.getBirthDate() != null) {
|
||||
admissionPatientInfoDto.setAge(AgeCalculatorUtil.getAge(admissionPatientInfoDto.getBirthDate()));
|
||||
}
|
||||
// 性别
|
||||
admissionPatientInfoDto.setGenderEnum_enumText(
|
||||
EnumUtils.getInfoByValue(AdministrativeGender.class, admissionPatientInfoDto.getGenderEnum()));
|
||||
// 病情
|
||||
admissionPatientInfoDto.setPriorityEnum_enumText(
|
||||
EnumUtils.getInfoByValue(PriorityLevel.class, admissionPatientInfoDto.getPriorityEnum()));
|
||||
// 获取入院体征
|
||||
getAdmissionSigns(encounterId, admissionPatientInfoDto);
|
||||
return R.ok(admissionPatientInfoDto);
|
||||
}
|
||||
|
||||
/**
|
||||
<<<<<<< HEAD
|
||||
* 住院患者待处理信息列表
|
||||
*
|
||||
* @param encounterId 住院id
|
||||
@@ -196,6 +242,48 @@ public class ATDManageAppServiceImpl implements IATDManageAppService {
|
||||
// ParticipantType.PRIMARY_NURSE.getCode(), ParticipantType.ATTENDING_DOCTOR.getCode(),
|
||||
// ParticipantType.ADMITTING_DOCTOR.getCode());
|
||||
return null;
|
||||
=======
|
||||
* 住院患者医嘱查询
|
||||
*
|
||||
* @param inpatientAdviceParam 查询条件
|
||||
* @param pageNo 当前页码
|
||||
* @param pageSize 查询条数
|
||||
* @return 住院患者医
|
||||
*/
|
||||
@Override
|
||||
public R<?> getInPatientPendingList(InpatientAdviceParam inpatientAdviceParam, Integer pageNo, Integer pageSize) {
|
||||
// 构建查询条件
|
||||
QueryWrapper<InpatientAdviceParam> queryWrapper =
|
||||
HisQueryUtils.buildQueryWrapper(inpatientAdviceParam, null, null, null);
|
||||
|
||||
// 患者医嘱分页列表
|
||||
Page<InpatientAdviceDto> inpatientAdvicePage = atdManageAppMapper.selectInpatientAdvicePage(
|
||||
new Page<>(pageNo, pageSize), queryWrapper, CommonConstants.TableName.MED_MEDICATION_REQUEST,
|
||||
CommonConstants.TableName.WOR_SERVICE_REQUEST, RequestStatus.DRAFT.getValue(),
|
||||
RequestStatus.STOPPED.getValue(), EncounterActivityStatus.ACTIVE.getValue(), LocationForm.BED.getValue(),
|
||||
ParticipantType.ADMITTING_DOCTOR.getCode(), AccountType.PERSONAL_CASH_ACCOUNT.getCode(),
|
||||
ChargeItemStatus.BILLABLE.getValue(), ChargeItemStatus.BILLED.getValue(),
|
||||
ChargeItemStatus.REFUNDED.getValue(), EncounterClass.IMP.getValue(),
|
||||
GenerateSource.DOCTOR_PRESCRIPTION.getValue(), ActivityDefCategory.TRANSFER.getCode(),
|
||||
ActivityDefCategory.DISCHARGE.getCode(), ActivityDefCategory.NURSING.getCode());
|
||||
inpatientAdvicePage.getRecords().forEach(e -> {
|
||||
// 是否皮试
|
||||
e.setSkinTestFlag_enumText(EnumUtils.getInfoByValue(Whether.class, e.getSkinTestFlag()));
|
||||
// 是否为注射药物
|
||||
e.setInjectFlag_enumText(EnumUtils.getInfoByValue(Whether.class, e.getInjectFlag()));
|
||||
// 医嘱类型
|
||||
e.setTherapyEnum_enumText(EnumUtils.getInfoByValue(TherapyTimeType.class, e.getTherapyEnum()));
|
||||
// 请求状态
|
||||
e.setRequestStatus_enumText(EnumUtils.getInfoByValue(RequestStatus.class, e.getRequestStatus()));
|
||||
// 性别枚举
|
||||
e.setGenderEnum_enumText(EnumUtils.getInfoByValue(AdministrativeGender.class, e.getGenderEnum()));
|
||||
// 计算年龄
|
||||
if (e.getBirthDate() != null) {
|
||||
e.setAge(AgeCalculatorUtil.getAge(e.getBirthDate()));
|
||||
}
|
||||
});
|
||||
return R.ok(inpatientAdvicePage);
|
||||
>>>>>>> v1.3
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -206,6 +294,7 @@ public class ATDManageAppServiceImpl implements IATDManageAppService {
|
||||
*/
|
||||
@Override
|
||||
public R<?> admissionBedAssignment(AdmissionPatientInfoDto admissionPatientInfoDto) {
|
||||
|
||||
// 住院id
|
||||
Long encounterId = admissionPatientInfoDto.getEncounterId();
|
||||
// 目标床位住院患者id
|
||||
@@ -245,6 +334,8 @@ public class ATDManageAppServiceImpl implements IATDManageAppService {
|
||||
admissionPatientInfoDto.getChiefDoctorId(), ParticipantType.CHIEF_DOCTOR.getCode());
|
||||
}
|
||||
}
|
||||
// 更新入院体征
|
||||
saveOrUpdateAdmissionSigns(encounterId, admissionPatientInfoDto, startTime);
|
||||
return R.ok("患者信息更新成功");
|
||||
}
|
||||
|
||||
@@ -343,28 +434,285 @@ public class ATDManageAppServiceImpl implements IATDManageAppService {
|
||||
if (result == 0) {
|
||||
return R.fail("床位分配失败,请联系管理员");
|
||||
}
|
||||
// 保存入院体征
|
||||
saveOrUpdateAdmissionSigns(encounterId, admissionPatientInfoDto, startTime);
|
||||
return R.ok("床位分配成功");
|
||||
}
|
||||
|
||||
/**
|
||||
* 转科
|
||||
*
|
||||
<<<<<<< HEAD
|
||||
* @param encounterId 住院id
|
||||
=======
|
||||
* @param encounterId 住院患者id
|
||||
>>>>>>> v1.3
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public R<?> transferDepartment(Long encounterId) {
|
||||
<<<<<<< HEAD
|
||||
return null;
|
||||
=======
|
||||
if (encounterId == null) {
|
||||
return R.fail("转科失败,请选择有效的患者");
|
||||
}
|
||||
// 获取是否还有待执行医嘱
|
||||
List<MedicationRequest> medicationRequestList = medicationRequestService
|
||||
.list(new LambdaQueryWrapper<MedicationRequest>().eq(MedicationRequest::getEncounterId, encounterId)
|
||||
.ne(MedicationRequest::getStatusEnum, RequestStatus.STOPPED.getValue())
|
||||
.eq(MedicationRequest::getDeleteFlag, DelFlag.NO.getCode()));
|
||||
List<ServiceRequest> serviceRequestList = serviceRequestService
|
||||
.list(new LambdaQueryWrapper<ServiceRequest>().eq(ServiceRequest::getEncounterId, encounterId)
|
||||
.ne(ServiceRequest::getStatusEnum, RequestStatus.STOPPED.getValue())
|
||||
.ne(ServiceRequest::getCategoryEnum, ActivityDefCategory.TRANSFER.getValue())
|
||||
.ne(ServiceRequest::getCategoryEnum, ActivityDefCategory.DISCHARGE.getValue())
|
||||
.ne(ServiceRequest::getCategoryEnum, ActivityDefCategory.NURSING.getValue())
|
||||
.eq(ServiceRequest::getDeleteFlag, DelFlag.NO.getCode()));
|
||||
if (!medicationRequestList.isEmpty() || !serviceRequestList.isEmpty()) {
|
||||
return R.fail("有待执行的医嘱,请执行完后再转科");
|
||||
}
|
||||
// 查询患者待取的药品
|
||||
List<MedicationDispense> medicationDispenseList = medicationDispenseService
|
||||
.list(new LambdaQueryWrapper<MedicationDispense>().eq(MedicationDispense::getEncounterId, encounterId)
|
||||
.in(MedicationDispense::getStatusEnum, DispenseStatus.PREPARATION.getValue(),
|
||||
DispenseStatus.PENDING_REFUND.getValue(), DispenseStatus.SUMMARIZED.getValue())
|
||||
.eq(MedicationDispense::getDeleteFlag, DelFlag.NO.getCode()));
|
||||
if (!medicationDispenseList.isEmpty()) {
|
||||
return R.fail("患者有待取的药品,请先取药");
|
||||
}
|
||||
// 没有待取的药并且没有可以执行的医嘱才可以转科
|
||||
Encounter encounter = encounterService.getById(encounterId);
|
||||
// 查询转科信息
|
||||
List<OrderProcess> orderProcessList = orderProcessService
|
||||
.list(new LambdaQueryWrapper<OrderProcess>().eq(OrderProcess::getEncounterId, encounterId)
|
||||
.eq(OrderProcess::getOriginalOrganizationId, encounter.getOrganizationId())
|
||||
.orderByDesc(OrderProcess::getCreateTime));
|
||||
if (orderProcessList.isEmpty()) {
|
||||
return R.fail("转科失败,请检查转科信息");
|
||||
}
|
||||
OrderProcess orderProcess = orderProcessList.get(0);
|
||||
|
||||
// 更新原病床状态:空闲
|
||||
List<EncounterLocation> encounterLocationList = encounterLocationService.getEncounterLocationList(encounterId,
|
||||
LocationForm.BED, EncounterActivityStatus.ACTIVE);
|
||||
if (encounterLocationList == null || encounterLocationList.size() != 1) {
|
||||
return R.fail("清床失败,请检查病床状态");
|
||||
}
|
||||
locationService.updateStatusById(encounterLocationList.get(0).getLocationId(), LocationStatus.IDLE.getValue());
|
||||
// 更新患者位置状态:已完成
|
||||
encounterLocationService.updateEncounterLocationStatus(encounterId, true);
|
||||
// 更新患者相关医生状态:已完成
|
||||
encounterParticipantService.updateEncounterParticipantsStatus(encounterId);
|
||||
// 新增患者待转病区
|
||||
encounterLocationService.creatEncounterLocation(encounterId, DateUtils.getNowDate(),
|
||||
orderProcess.getTargetLocationId(), LocationForm.WARD.getValue());
|
||||
// 更新住院信息
|
||||
encounter.setOrganizationId(orderProcess.getTargetOrganizationId())
|
||||
.setStatusEnum(EncounterZyStatus.REGISTERED.getValue());
|
||||
return R.ok("转科成功");
|
||||
>>>>>>> v1.3
|
||||
}
|
||||
|
||||
/**
|
||||
* 出院
|
||||
*
|
||||
<<<<<<< HEAD
|
||||
* @param encounterId 住院id
|
||||
=======
|
||||
* @param encounterId 住院患者id
|
||||
>>>>>>> v1.3
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public R<?> hospitalDischarge(Long encounterId) {
|
||||
<<<<<<< HEAD
|
||||
return null;
|
||||
=======
|
||||
if (encounterId == null) {
|
||||
return R.fail("出院失败,请选择有效的患者");
|
||||
}
|
||||
// 获取是否还有待执行医嘱
|
||||
List<MedicationRequest> medicationRequestList = medicationRequestService
|
||||
.list(new LambdaQueryWrapper<MedicationRequest>().eq(MedicationRequest::getEncounterId, encounterId)
|
||||
.ne(MedicationRequest::getStatusEnum, RequestStatus.STOPPED.getValue())
|
||||
.eq(MedicationRequest::getDeleteFlag, DelFlag.NO.getCode()));
|
||||
List<ServiceRequest> serviceRequestList = serviceRequestService
|
||||
.list(new LambdaQueryWrapper<ServiceRequest>().eq(ServiceRequest::getEncounterId, encounterId)
|
||||
.ne(ServiceRequest::getStatusEnum, RequestStatus.STOPPED.getValue())
|
||||
.ne(ServiceRequest::getCategoryEnum, ActivityDefCategory.TRANSFER.getValue())
|
||||
.ne(ServiceRequest::getCategoryEnum, ActivityDefCategory.DISCHARGE.getValue())
|
||||
.ne(ServiceRequest::getCategoryEnum, ActivityDefCategory.NURSING.getValue())
|
||||
.eq(ServiceRequest::getParentId, null)
|
||||
.eq(ServiceRequest::getDeleteFlag, DelFlag.NO.getCode()));
|
||||
if (!medicationRequestList.isEmpty() || !serviceRequestList.isEmpty()) {
|
||||
return R.fail("有待执行的医嘱,请执行完后再出院");
|
||||
}
|
||||
// 查询患者待取的药品
|
||||
List<MedicationDispense> medicationDispenseList = medicationDispenseService
|
||||
.list(new LambdaQueryWrapper<MedicationDispense>().eq(MedicationDispense::getEncounterId, encounterId)
|
||||
.in(MedicationDispense::getStatusEnum, DispenseStatus.PREPARATION.getValue(),
|
||||
DispenseStatus.PENDING_REFUND.getValue(), DispenseStatus.SUMMARIZED.getValue())
|
||||
.eq(MedicationDispense::getDeleteFlag, DelFlag.NO.getCode()));
|
||||
if (!medicationDispenseList.isEmpty()) {
|
||||
return R.fail("患者有待取的药品,请先取药");
|
||||
}
|
||||
int affectedRows =
|
||||
encounterService.updateEncounterStatus(encounterId, EncounterZyStatus.DISCHARGED_FROM_HOSPITAL.getValue());
|
||||
if (affectedRows > 0) {
|
||||
return R.ok("出院成功");
|
||||
}
|
||||
return R.fail("出院失败");
|
||||
}
|
||||
|
||||
/**
|
||||
* 清床
|
||||
*
|
||||
* @param encounterId 住院患者id
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public R<?> terminalCleaning(Long encounterId) {
|
||||
Encounter encounter = encounterService.getById(encounterId);
|
||||
|
||||
if (EncounterZyStatus.ALREADY_SETTLED.getValue().equals(encounter.getStatusEnum())
|
||||
|| EncounterZyStatus.REGISTERED.getValue().equals(encounter.getStatusEnum())) {
|
||||
return R.fail("请等待出院结算完成后再清床");
|
||||
}
|
||||
// 更新患者位置状态:已完成
|
||||
encounterLocationService.updateEncounterLocationStatus(encounterId, true);
|
||||
// 更新患者相关医生状态:已完成
|
||||
encounterParticipantService.updateEncounterParticipantsStatus(encounterId);
|
||||
// 更新原病床状态:空闲
|
||||
List<EncounterLocation> encounterLocationList = encounterLocationService.getEncounterLocationList(encounterId,
|
||||
LocationForm.BED, EncounterActivityStatus.ACTIVE);
|
||||
if (encounterLocationList == null || encounterLocationList.size() != 1) {
|
||||
return R.fail("清床失败,请检查病床状态");
|
||||
}
|
||||
locationService.updateStatusById(encounterLocationList.get(0).getLocationId(), LocationStatus.IDLE.getValue());
|
||||
return R.ok("清床完成");
|
||||
}
|
||||
|
||||
/**
|
||||
* 诊断个人账户金额信息获取
|
||||
*
|
||||
* @param encounterId 诊断id
|
||||
* @return EncounterAccountDto 诊断账户金额
|
||||
**/
|
||||
@Override
|
||||
public R<?> getAmount(Long encounterId) {
|
||||
return R.ok(atdManageAppMapper.getAmount(AccountType.PERSONAL_CASH_ACCOUNT.getCode(),
|
||||
ChargeItemStatus.BILLABLE.getValue(), ChargeItemStatus.BILLED.getValue(),
|
||||
ChargeItemStatus.REFUNDED.getValue(), encounterId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取待配/退药
|
||||
*
|
||||
* @param encounterId 诊断id
|
||||
* @return PendingMedicationDto 待配/退药
|
||||
**/
|
||||
@Override
|
||||
public R<?> getPendingMedication(Long encounterId) {
|
||||
Integer tenantId = SecurityUtils.getLoginUser().getTenantId();
|
||||
return R.ok(atdManageAppMapper.getPendingMedication(encounterId, DispenseStatus.PREPARATION.getValue(),
|
||||
DispenseStatus.SUMMARIZED.getValue(), RequestStatus.CANCELLED.getValue(), tenantId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取入院体征
|
||||
*
|
||||
* @param encounterId 病历ID
|
||||
* @param dto 入院患者信息
|
||||
*/
|
||||
private void getAdmissionSigns(Long encounterId, AdmissionPatientInfoDto dto) {
|
||||
// 获取入院体征
|
||||
LambdaQueryWrapper<DocStatistics> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(DocStatistics::getEncounterId, encounterId);
|
||||
wrapper.eq(DocStatistics::getSource, DocDefinitionEnum.ADMISSION_VITAL_SIGNS.getValue());
|
||||
// 按照时间降序,时间最新的数据在前面
|
||||
wrapper.orderByDesc(DocStatistics::getRecordTime);
|
||||
List<DocStatistics> statisticsList = docStatisticsMapper.selectList(wrapper);
|
||||
if (statisticsList != null && !statisticsList.isEmpty()) {
|
||||
HashMap<String, String> map = new HashMap<>();
|
||||
// typeCode与value一一对应
|
||||
statisticsList.forEach(e -> {
|
||||
// 已经包含的key,所对应的数据是最新的
|
||||
if (!map.containsKey(e.getStatisticDefinitionCode())) {
|
||||
map.put(e.getStatisticDefinitionCode(), e.getValue());
|
||||
}
|
||||
});
|
||||
// 入院体征赋值
|
||||
dto.setHeight(map.get(TemperatureChartEnum.HEIGHT.getTypeCode()));
|
||||
dto.setWeight(map.get(TemperatureChartEnum.WEIGHT.getTypeCode()));
|
||||
dto.setTemperature(map.get(TemperatureChartEnum.TEMPERATURE.getTypeCode()));
|
||||
dto.setPulse(map.get(TemperatureChartEnum.PULSE.getTypeCode()));
|
||||
dto.setHertRate(map.get(TemperatureChartEnum.HEART_RATE.getTypeCode()));
|
||||
String bloodPressure = map.get(TemperatureChartEnum.BLOOD_PRESSURE.getTypeCode());
|
||||
if (!StringUtils.isEmpty(bloodPressure)) {
|
||||
String[] split = bloodPressure.split("/");
|
||||
String endBloodPressure = split[0].strip();
|
||||
String highBloodPressure = split[1].strip();
|
||||
dto.setEndBloodPressure(endBloodPressure);
|
||||
dto.setHighBloodPressure(highBloodPressure);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加入院体征
|
||||
*
|
||||
* @param encounterId 病历ID
|
||||
* @param dto 入院患者信息
|
||||
* @param recordTime 记录时间
|
||||
*/
|
||||
private void saveOrUpdateAdmissionSigns(Long encounterId, AdmissionPatientInfoDto dto, Date recordTime) {
|
||||
// 创建入院体征map
|
||||
HashMap<String, String> map = new HashMap<>();
|
||||
map.put(TemperatureChartEnum.HEIGHT.getTypeCode(), dto.getHeight());
|
||||
map.put(TemperatureChartEnum.WEIGHT.getTypeCode(), dto.getWeight());
|
||||
map.put(TemperatureChartEnum.TEMPERATURE.getTypeCode(), dto.getTemperature());
|
||||
map.put(TemperatureChartEnum.HEART_RATE.getTypeCode(), dto.getHertRate());
|
||||
map.put(TemperatureChartEnum.PULSE.getTypeCode(), dto.getPulse());
|
||||
// 防止 低、高压有一个、或两个没填,导致存库时存入 "xx/null" 或"null/xx" 或"null/null"
|
||||
String endBloodPressure = dto.getEndBloodPressure() == null ? " " : dto.getEndBloodPressure();
|
||||
String highBloodPressure = dto.getHighBloodPressure() == null ? " " : dto.getHighBloodPressure();
|
||||
String bloodPressure = " ".equals(endBloodPressure) && " ".equals(highBloodPressure) ? null
|
||||
: endBloodPressure + "/" + highBloodPressure;
|
||||
map.put(TemperatureChartEnum.BLOOD_PRESSURE.getTypeCode(), bloodPressure);
|
||||
// 获取文书定义列表
|
||||
List<DocStatisticsDefinitionDto> definitionList = docStatisticsDefinitionAppService.getList(1);
|
||||
HashMap<String, DocStatisticsDefinitionDto> definitionDtoHashMap = new HashMap<>();
|
||||
// 根据code创建map,将code与文书定义一一对应
|
||||
definitionList.forEach(docStatisticsDefinitionDto -> {
|
||||
definitionDtoHashMap.put(docStatisticsDefinitionDto.getCode(), docStatisticsDefinitionDto);
|
||||
});
|
||||
// 获取患者ID
|
||||
Encounter encounter = encounterService.getById(encounterId);
|
||||
// 创建体温单统计列表
|
||||
List<DocStatisticsDto> data =
|
||||
((List<DocStatisticsDto>)docStatisticsAppService.queryByEncounterId(encounterId).getData()).stream()
|
||||
.filter(item -> DocDefinitionEnum.ADMISSION_VITAL_SIGNS.getValue().equals(item.getSource())).toList();
|
||||
List<DocStatisticsDto> list = new ArrayList<>(data);
|
||||
map.keySet().forEach(key -> {
|
||||
if (map.get(key) != null && !map.get(key).isEmpty()) {
|
||||
DocStatisticsDefinitionDto docStatisticsDefinitionDto = definitionDtoHashMap.get(key);
|
||||
DocStatisticsDto statistics = new DocStatisticsDto();
|
||||
statistics.setStatisticDefinitionCode(key);
|
||||
statistics.setValue(map.get(key));
|
||||
statistics.setEncounterId(encounterId);
|
||||
statistics.setPatientId(encounter.getPatientId());
|
||||
statistics.setStatisticDefinitionId(docStatisticsDefinitionDto.getId());
|
||||
statistics.setRecordTime(recordTime);
|
||||
statistics.setSource(DocDefinitionEnum.ADMISSION_VITAL_SIGNS.getValue());
|
||||
list.add(statistics);
|
||||
}
|
||||
});
|
||||
// 保存入院体征
|
||||
if (!list.isEmpty()) {
|
||||
docStatisticsAppService.saveOrUpdateAdmissionSigns(list);
|
||||
}
|
||||
>>>>>>> v1.3
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,9 +21,14 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.core.common.core.domain.R;
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
import com.core.common.enums.TenantOptionDict;
|
||||
>>>>>>> v1.3
|
||||
import com.core.common.exception.ServiceException;
|
||||
import com.core.common.utils.*;
|
||||
import com.core.common.utils.bean.BeanUtils;
|
||||
import com.core.web.util.TenantOptionUtil;
|
||||
import com.openhis.administration.domain.ChargeItem;
|
||||
import com.openhis.administration.service.IChargeItemService;
|
||||
import com.openhis.administration.service.IEncounterService;
|
||||
@@ -137,11 +142,11 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
CommonConstants.FieldName.PatientName, CommonConstants.FieldName.BusNo)),
|
||||
request);
|
||||
// 入院患者分页列表
|
||||
Page<AdmissionPatientPageDto> admissionPatientPage =
|
||||
adviceProcessAppMapper.selectInpatientPage(new Page<>(pageNo, pageSize), queryWrapper,
|
||||
EncounterClass.IMP.getValue(), EncounterZyStatus.TO_BE_REGISTERED.getValue(),
|
||||
EncounterZyStatus.REGISTERED.getValue(), EncounterActivityStatus.ACTIVE.getValue(),
|
||||
LocationForm.WARD.getValue(), LocationForm.HOUSE.getValue(), LocationForm.BED.getValue());
|
||||
Page<AdmissionPatientPageDto> admissionPatientPage = adviceProcessAppMapper.selectInpatientPage(
|
||||
new Page<>(pageNo, pageSize), queryWrapper, EncounterClass.IMP.getValue(),
|
||||
EncounterZyStatus.TO_BE_REGISTERED.getValue(), EncounterZyStatus.REGISTERED.getValue(),
|
||||
EncounterActivityStatus.ACTIVE.getValue(), LocationForm.WARD.getValue(), LocationForm.HOUSE.getValue(),
|
||||
LocationForm.BED.getValue(), AccountType.PERSONAL_CASH_ACCOUNT.getCode());
|
||||
admissionPatientPage.getRecords().forEach(e -> {
|
||||
// 性别枚举
|
||||
e.setGenderEnum_enumText(EnumUtils.getInfoByValue(AdministrativeGender.class, e.getGenderEnum()));
|
||||
@@ -189,7 +194,8 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
RequestStatus.DRAFT.getValue(), EncounterActivityStatus.ACTIVE.getValue(), LocationForm.BED.getValue(),
|
||||
ParticipantType.ADMITTING_DOCTOR.getCode(), AccountType.PERSONAL_CASH_ACCOUNT.getCode(),
|
||||
ChargeItemStatus.BILLABLE.getValue(), ChargeItemStatus.BILLED.getValue(),
|
||||
ChargeItemStatus.REFUNDED.getValue(), EncounterClass.IMP.getValue());
|
||||
ChargeItemStatus.REFUNDED.getValue(), EncounterClass.IMP.getValue(),
|
||||
GenerateSource.DOCTOR_PRESCRIPTION.getValue());
|
||||
inpatientAdvicePage.getRecords().forEach(e -> {
|
||||
// 是否皮试
|
||||
e.setSkinTestFlag_enumText(EnumUtils.getInfoByValue(Whether.class, e.getSkinTestFlag()));
|
||||
@@ -372,6 +378,8 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
*/
|
||||
@Override
|
||||
public R<?> adviceExecute(AdviceExecuteParam adviceExecuteParam) {
|
||||
// 实际执行时间
|
||||
Date exeDate = adviceExecuteParam.getExeDate();
|
||||
// 医嘱集合
|
||||
List<AdviceExecuteDetailParam> adviceExecuteDetailList = adviceExecuteParam.getAdviceExecuteDetailList();
|
||||
// 药品
|
||||
@@ -392,14 +400,14 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
}
|
||||
}
|
||||
// 处理药品执行
|
||||
this.exeMedication(medUseExeList);
|
||||
this.exeMedication(medUseExeList, exeDate);
|
||||
}
|
||||
// -------------------------------------------诊疗
|
||||
if (!activityList.isEmpty()) {
|
||||
// 组装诊疗请求用于执行的数据结构
|
||||
List<ServiceRequestUseExe> actUseExeList = this.assemblyActivity(activityList);
|
||||
// 处理诊疗执行
|
||||
this.exeActivity(actUseExeList);
|
||||
this.exeActivity(actUseExeList, exeDate);
|
||||
}
|
||||
|
||||
return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, new Object[] {"医嘱执行"}));
|
||||
@@ -413,6 +421,8 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
*/
|
||||
@Override
|
||||
public R<?> adviceCancel(AdviceExecuteParam adviceExecuteParam) {
|
||||
// 获取当前执行时间
|
||||
Date exeDate = DateUtils.getNowDate();
|
||||
|
||||
// 长期医嘱执行id
|
||||
List<Long> longProcIdList = adviceExecuteParam.getAdviceExecuteDetailList().stream()
|
||||
@@ -434,8 +444,13 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
// 根据执行记录新增取消执行记录
|
||||
Long newProcedureId = procedureService.addProcedureRecord(procedure.getEncounterId(),
|
||||
procedure.getPatientId(), procedure.getRequestId(), procedure.getRequestTable(), EventStatus.CANCEL,
|
||||
<<<<<<< HEAD
|
||||
ProcedureCategory.INPATIENT_ADVICE, null, procedure.getOccurrenceTime(), procedure.getGroupId(),
|
||||
procedure.getId());
|
||||
=======
|
||||
ProcedureCategory.INPATIENT_ADVICE, null, procedure.getOccurrenceTime(), exeDate,
|
||||
procedure.getGroupId(), procedure.getId());
|
||||
>>>>>>> v1.3
|
||||
// 将旧的执行Id和新的执行Id存入map
|
||||
procedureIdMap.put(procedure.getId(), newProcedureId);
|
||||
}
|
||||
@@ -454,7 +469,12 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
for (MedicationDispense medicationDispense : longMedDispenseList) {
|
||||
if (DispenseStatus.COMPLETED.getValue().equals(medicationDispense.getStatusEnum())) {
|
||||
longMedDispensedList.add(medicationDispense);
|
||||
<<<<<<< HEAD
|
||||
} else if (DispenseStatus.PREPARATION.getValue().equals(medicationDispense.getStatusEnum())) {
|
||||
=======
|
||||
} else if (DispenseStatus.PREPARATION.getValue().equals(medicationDispense.getStatusEnum())
|
||||
|| DispenseStatus.SUMMARIZED.getValue().equals(medicationDispense.getStatusEnum())) {
|
||||
>>>>>>> v1.3
|
||||
longMedUndispenseList.add(medicationDispense);
|
||||
}
|
||||
}
|
||||
@@ -481,7 +501,12 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
for (MedicationDispense medicationDispense : tempMedDispenseList) {
|
||||
if (DispenseStatus.COMPLETED.getValue().equals(medicationDispense.getStatusEnum())) {
|
||||
tempMedDispensedList.add(medicationDispense);
|
||||
<<<<<<< HEAD
|
||||
} else if (DispenseStatus.PREPARATION.getValue().equals(medicationDispense.getStatusEnum())) {
|
||||
=======
|
||||
} else if (DispenseStatus.PREPARATION.getValue().equals(medicationDispense.getStatusEnum())
|
||||
|| DispenseStatus.SUMMARIZED.getValue().equals(medicationDispense.getStatusEnum())) {
|
||||
>>>>>>> v1.3
|
||||
tempMedUndispenseList.add(medicationDispense);
|
||||
}
|
||||
}
|
||||
@@ -649,6 +674,11 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
*/
|
||||
@Override
|
||||
public R<?> adviceVoid(AdviceExecuteParam adviceExecuteParam) {
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
// 获取当前不执行时间
|
||||
Date notExeDate = DateUtils.getNowDate();
|
||||
>>>>>>> v1.3
|
||||
List<AdviceExecuteDetailParam> adviceExecuteDetailList = adviceExecuteParam.getAdviceExecuteDetailList();
|
||||
|
||||
// 判断是否有空的pID
|
||||
@@ -668,7 +698,11 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
procedureService.addProcedureRecord(adviceExecuteDetailParam.getEncounterId(),
|
||||
adviceExecuteDetailParam.getPatientId(), adviceExecuteDetailParam.getRequestId(),
|
||||
adviceExecuteDetailParam.getAdviceTable(), EventStatus.STOPPED, ProcedureCategory.INPATIENT_ADVICE,
|
||||
<<<<<<< HEAD
|
||||
null, exeDate, adviceExecuteDetailParam.getGroupId(), null);
|
||||
=======
|
||||
null, exeDate, notExeDate, adviceExecuteDetailParam.getGroupId(), null);
|
||||
>>>>>>> v1.3
|
||||
}
|
||||
}
|
||||
return R.ok("不执行成功");
|
||||
@@ -678,8 +712,9 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
* 执行药品医嘱
|
||||
*
|
||||
* @param medUseExeList 药品医嘱
|
||||
* @param exeDate 实际执行时间
|
||||
*/
|
||||
private void exeMedication(List<MedicationRequestUseExe> medUseExeList) {
|
||||
private void exeMedication(List<MedicationRequestUseExe> medUseExeList, Date exeDate) {
|
||||
// 长期医嘱
|
||||
List<MedicationRequestUseExe> longMedication = medUseExeList.stream()
|
||||
.filter(e -> TherapyTimeType.LONG_TERM.getValue().equals(e.getTherapyEnum())).toList();
|
||||
@@ -691,7 +726,11 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
medUseExeList.stream().map(MedicationRequestUseExe::getMedicationId).collect(Collectors.toList());
|
||||
// 医嘱详细信息
|
||||
List<AdviceBaseDto> medicationInfos = doctorStationAdviceAppService.getAdviceBaseInfo(null, null, null,
|
||||
<<<<<<< HEAD
|
||||
medicationDefinitionIdList, 0L, 1, 500, Whether.NO.getValue(), List.of(1)).getRecords();
|
||||
=======
|
||||
medicationDefinitionIdList, 0L, 1, 500, Whether.NO.getValue(), List.of(1), null).getRecords();
|
||||
>>>>>>> v1.3
|
||||
|
||||
// 当前时间
|
||||
Date curDate = new Date();
|
||||
@@ -708,6 +747,7 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
longMedicationRequest = new MedicationRequest();
|
||||
BeanUtils.copyProperties(medicationRequestUseExe, longMedicationRequest);
|
||||
|
||||
<<<<<<< HEAD
|
||||
// 生成执行记录
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||
// 转换为 LocalDateTime
|
||||
@@ -748,6 +788,8 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
// chargeItem.setDispenseId(dispenseId); // 发放ID
|
||||
|
||||
// ------------------------------ 匹配定价信息
|
||||
=======
|
||||
>>>>>>> v1.3
|
||||
// 根据 medicationId 查找对应的医嘱信息
|
||||
MedicationRequest finalLongMedicationRequest = longMedicationRequest;
|
||||
Optional<AdviceBaseDto> matchedAdvice = medicationInfos.stream()
|
||||
@@ -758,10 +800,14 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
throw new RuntimeException(
|
||||
"未找到对应的医嘱信息,medicationId: " + finalLongMedicationRequest.getMedicationId());
|
||||
}
|
||||
// 获取医嘱信息
|
||||
AdviceBaseDto advice = matchedAdvice.get();
|
||||
// 获取拆零比
|
||||
BigDecimal partPercent = advice.getPartPercent();
|
||||
// 小单位
|
||||
String minUnitCode = advice.getMinUnitCode();
|
||||
|
||||
<<<<<<< HEAD
|
||||
// 在 priceList 中查找匹配的定价信息
|
||||
Optional<AdvicePriceDto> matchedPrice = advice.getPriceList().stream()
|
||||
.filter(price -> finalLongMedicationRequest.getLotNumber().equals(price.getConditionValue()))
|
||||
@@ -786,8 +832,193 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
chargeItem.setUnitPrice(price); // 单价
|
||||
chargeItem.setTotalPrice(
|
||||
longMedicationRequest.getQuantity().multiply(price).setScale(6, RoundingMode.HALF_UP)); // 总价
|
||||
=======
|
||||
// 生成执行记录
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
||||
// 转换为 LocalDateTime
|
||||
LocalDateTime localDateTime = LocalDateTime.parse(executeTime, formatter);
|
||||
// 转换为 Date
|
||||
Date expectedDate = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
|
||||
// 执行记录id
|
||||
Long procedureId = procedureService.addProcedureRecord(longMedicationRequest.getEncounterId(),
|
||||
longMedicationRequest.getPatientId(), longMedicationRequest.getId(),
|
||||
CommonConstants.TableName.MED_MEDICATION_REQUEST, EventStatus.COMPLETED,
|
||||
ProcedureCategory.INPATIENT_ADVICE, null, expectedDate, exeDate, longMedicationRequest.getGroupId(),
|
||||
null);
|
||||
|
||||
chargeItemService.saveOrUpdate(chargeItem);
|
||||
// 医嘱定价来源
|
||||
String orderPricingSource = TenantOptionUtil.getOptionContent(TenantOptionDict.ORDER_PRICING_SOURCE);
|
||||
|
||||
// 统一零售价情况
|
||||
if (OrderPricingSource.RETAIL_PRICE.getCode().equals(orderPricingSource)) {
|
||||
// 生成药品发放
|
||||
Long dispenseId = medicationDispenseService.generateMedicationDispense(longMedicationRequest,
|
||||
procedureId, expectedDate);
|
||||
|
||||
// 生成账单
|
||||
chargeItem = new ChargeItem();
|
||||
chargeItem.setStatusEnum(ChargeItemStatus.BILLABLE.getValue()); // 收费状态
|
||||
chargeItem
|
||||
.setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(longMedicationRequest.getBusNo()));
|
||||
chargeItem.setGenerateSourceEnum(GenerateSource.ORDER_EXECUTE.getValue()); // 生成来源
|
||||
chargeItem.setPrescriptionNo(longMedicationRequest.getPrescriptionNo()); // 处方号
|
||||
chargeItem.setPatientId(longMedicationRequest.getPatientId()); // 患者
|
||||
chargeItem.setContextEnum(ChargeItemContext.MEDICATION.getValue()); // 类型
|
||||
chargeItem.setEncounterId(longMedicationRequest.getEncounterId()); // 就诊id
|
||||
chargeItem.setEntererId(practitionerId);// 开立人ID
|
||||
chargeItem.setRequestingOrgId(orgId); // 开立科室
|
||||
chargeItem.setEnteredDate(curDate); // 开立时间
|
||||
chargeItem.setServiceTable(CommonConstants.TableName.MED_MEDICATION_REQUEST);// 医疗服务类型
|
||||
chargeItem.setServiceId(longMedicationRequest.getId()); // 医疗服务ID
|
||||
chargeItem.setProductTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION);// 产品所在表
|
||||
chargeItem.setProductId(longMedicationRequest.getMedicationId());// 收费项id
|
||||
chargeItem.setAccountId(medicationRequestUseExe.getAccountId());// 关联账户ID
|
||||
chargeItem.setConditionId(longMedicationRequest.getConditionId()); // 诊断id
|
||||
chargeItem.setEncounterDiagnosisId(longMedicationRequest.getEncounterDiagnosisId()); // 就诊诊断id
|
||||
chargeItem.setProcedureId(procedureId); // 执行id
|
||||
chargeItem.setDispenseTable(CommonConstants.TableName.MED_MEDICATION_DISPENSE); // 发放表名
|
||||
// chargeItem.setDispenseId(dispenseId); // 发放ID
|
||||
|
||||
// ------------------------------ 匹配定价信息
|
||||
// 在 priceList 中查找匹配的定价信息 (统一零售价取第一个即可)
|
||||
Optional<AdvicePriceDto> matchedPrice = advice.getPriceList().stream().findFirst();
|
||||
if (matchedPrice.isEmpty()) {
|
||||
throw new RuntimeException("未找到药品匹配的定价信息: " + finalLongMedicationRequest.getMedicationId());
|
||||
}
|
||||
AdvicePriceDto priceDto = matchedPrice.get();
|
||||
// 计算价格
|
||||
BigDecimal price;
|
||||
if (finalLongMedicationRequest.getUnitCode().equals(priceDto.getUnitCode())) {
|
||||
// (大单位)unitCode 匹配,直接取 price
|
||||
price = priceDto.getPrice();
|
||||
} else {
|
||||
// (小单位)unitCode 不匹配,计算 price / partPercent
|
||||
price = priceDto.getPrice().divide(partPercent, 6, RoundingMode.HALF_UP);
|
||||
}
|
||||
chargeItem.setDefinitionId(priceDto.getDefinitionId()); // 费用定价ID
|
||||
chargeItem.setDefDetailId(priceDto.getDefinitionDetailId()); // 定价子表主键
|
||||
chargeItem.setQuantityValue(longMedicationRequest.getQuantity()); // 数量
|
||||
chargeItem.setQuantityUnit(longMedicationRequest.getUnitCode()); // 单位
|
||||
chargeItem.setUnitPrice(price); // 单价
|
||||
chargeItem.setTotalPrice(
|
||||
longMedicationRequest.getQuantity().multiply(price).setScale(6, RoundingMode.HALF_UP)); // 总价
|
||||
|
||||
chargeItemService.saveOrUpdate(chargeItem);
|
||||
} else {
|
||||
// 批次售卖情况
|
||||
throw new RuntimeException("[住院]批次售卖的情况暂未处理");
|
||||
>>>>>>> v1.3
|
||||
|
||||
/* // 需要的药品数量(小单位)
|
||||
BigDecimal minUnitQuantity = medicationRequestUseExe.getMinUnitQuantity();
|
||||
// 库存集合
|
||||
List<AdviceInventoryDto> inventoryList = advice.getInventoryList();
|
||||
// 价格集合
|
||||
List<AdvicePriceDto> priceList = advice.getPriceList();
|
||||
// 剩余需要分配的数量
|
||||
BigDecimal remainingQuantity = minUnitQuantity;
|
||||
|
||||
// 按批次循环分配数量
|
||||
for (AdviceInventoryDto inventory : inventoryList) {
|
||||
if (remainingQuantity.compareTo(BigDecimal.ZERO) <= 0) {
|
||||
break;
|
||||
}
|
||||
// 可用量
|
||||
BigDecimal availableQuantity = inventory.getQuantity();
|
||||
// 实际供应量
|
||||
BigDecimal actualQuantity;
|
||||
if (availableQuantity.compareTo(remainingQuantity) >= 0) {
|
||||
// 当前批次足够满足剩余需求
|
||||
actualQuantity = remainingQuantity;
|
||||
remainingQuantity = BigDecimal.ZERO;
|
||||
} else {
|
||||
// 当前批次全部用完
|
||||
actualQuantity = availableQuantity;
|
||||
remainingQuantity = remainingQuantity.subtract(availableQuantity);
|
||||
}
|
||||
// 批次号
|
||||
String lotNumber = inventory.getLotNumber();
|
||||
|
||||
// 根据批次库存量,生成发放
|
||||
longMedicationRequest.setQuantity(actualQuantity);// 小单位的数量
|
||||
longMedicationRequest.setUnitCode(minUnitCode); // 小单位
|
||||
longMedicationRequest.setLotNumber(lotNumber);
|
||||
// 生成药品发放
|
||||
Long dispenseId = medicationDispenseService.generateMedicationDispense(longMedicationRequest,
|
||||
procedureId, exeDate);
|
||||
|
||||
// 生成账单
|
||||
chargeItem = new ChargeItem();
|
||||
chargeItem.setStatusEnum(ChargeItemStatus.BILLABLE.getValue()); // 收费状态
|
||||
chargeItem.setBusNo(
|
||||
AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(longMedicationRequest.getBusNo()));
|
||||
chargeItem.setGenerateSourceEnum(GenerateSource.ORDER_EXECUTE.getValue()); // 生成来源
|
||||
chargeItem.setPrescriptionNo(longMedicationRequest.getPrescriptionNo()); // 处方号
|
||||
chargeItem.setPatientId(longMedicationRequest.getPatientId()); // 患者
|
||||
chargeItem.setContextEnum(ChargeItemContext.MEDICATION.getValue()); // 类型
|
||||
chargeItem.setEncounterId(longMedicationRequest.getEncounterId()); // 就诊id
|
||||
chargeItem.setEntererId(practitionerId);// 开立人ID
|
||||
chargeItem.setRequestingOrgId(orgId); // 开立科室
|
||||
chargeItem.setEnteredDate(curDate); // 开立时间
|
||||
chargeItem.setServiceTable(CommonConstants.TableName.MED_MEDICATION_REQUEST);// 医疗服务类型
|
||||
chargeItem.setServiceId(longMedicationRequest.getId()); // 医疗服务ID
|
||||
chargeItem.setProductTable(CommonConstants.TableName.MED_MEDICATION_DEFINITION);// 产品所在表
|
||||
chargeItem.setProductId(longMedicationRequest.getMedicationId());// 收费项id
|
||||
chargeItem.setAccountId(medicationRequestUseExe.getAccountId());// 关联账户ID
|
||||
chargeItem.setConditionId(longMedicationRequest.getConditionId()); // 诊断id
|
||||
chargeItem.setEncounterDiagnosisId(longMedicationRequest.getEncounterDiagnosisId()); // 就诊诊断id
|
||||
chargeItem.setProcedureId(procedureId); // 执行id
|
||||
chargeItem.setDispenseTable(CommonConstants.TableName.MED_MEDICATION_DISPENSE); // 发放表名
|
||||
// chargeItem.setDispenseId(dispenseId); // 发放ID
|
||||
|
||||
// ------------------------------ 匹配定价信息
|
||||
// 在 priceList 中查找匹配的定价信息
|
||||
Optional<AdvicePriceDto> matchedPrice =
|
||||
priceList.stream().filter(p -> lotNumber.equals(p.getConditionValue())).findFirst();
|
||||
if (matchedPrice.isEmpty()) {
|
||||
throw new RuntimeException(
|
||||
"未找到匹配的定价信息,lotNumber: " + finalLongMedicationRequest.getLotNumber());
|
||||
}
|
||||
AdvicePriceDto priceDto = matchedPrice.get();
|
||||
// 单价(大单位)
|
||||
BigDecimal price = priceDto.getPrice();
|
||||
// 单价(小单位)
|
||||
BigDecimal priceMin = priceDto.getPrice().divide(partPercent, 6, RoundingMode.HALF_UP);
|
||||
// 总计
|
||||
BigDecimal totalPrice;
|
||||
// 计算 totalPrice
|
||||
if (actualQuantity.compareTo(partPercent) < 0) {
|
||||
// 当 actualQuantity < partPercent 时
|
||||
totalPrice = actualQuantity.multiply(priceMin).setScale(6, RoundingMode.HALF_UP);
|
||||
} else {
|
||||
// 计算商和余数
|
||||
BigDecimal[] quotientAndRemainder = actualQuantity.divideAndRemainder(partPercent);
|
||||
BigDecimal quotient = quotientAndRemainder[0]; // 整数部分
|
||||
BigDecimal remainder = quotientAndRemainder[1]; // 余数部分
|
||||
if (remainder.compareTo(BigDecimal.ZERO) == 0) {
|
||||
// 当 actualQuantity / partPercent 能被整除时
|
||||
totalPrice = price.multiply(quotient).setScale(6, RoundingMode.HALF_UP);
|
||||
} else {
|
||||
// 当 actualQuantity > partPercent 且不能被整除时
|
||||
BigDecimal integerPartPrice =
|
||||
price.multiply(quotient).setScale(6, RoundingMode.HALF_UP);
|
||||
BigDecimal remainderPartPrice =
|
||||
priceMin.multiply(remainder).setScale(6, RoundingMode.HALF_UP);
|
||||
totalPrice = integerPartPrice.add(remainderPartPrice);
|
||||
}
|
||||
}
|
||||
|
||||
chargeItem.setDefinitionId(priceDto.getDefinitionId()); // 费用定价ID
|
||||
chargeItem.setDefDetailId(priceDto.getDefinitionDetailId()); // 定价子表主键
|
||||
chargeItem.setQuantityValue(actualQuantity); // 数量
|
||||
chargeItem.setQuantityUnit(minUnitCode); // 单位
|
||||
chargeItem.setUnitPrice(priceMin); // 单价
|
||||
chargeItem.setTotalPrice(totalPrice); // 总价
|
||||
|
||||
chargeItemService.saveOrUpdate(chargeItem);
|
||||
|
||||
}*/
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -803,16 +1034,19 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
// 转换为 LocalDateTime
|
||||
LocalDateTime localDateTime = LocalDateTime.parse(executeTime, formatter);
|
||||
// 转换为 Date
|
||||
Date exeDate = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
|
||||
Date expectedDate = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
|
||||
// 执行记录id
|
||||
Long procedureId = procedureService.addProcedureRecord(tempMedicationRequest.getEncounterId(),
|
||||
tempMedicationRequest.getPatientId(), tempMedicationRequest.getId(),
|
||||
CommonConstants.TableName.MED_MEDICATION_REQUEST, EventStatus.COMPLETED,
|
||||
ProcedureCategory.INPATIENT_ADVICE, null, exeDate, tempMedicationRequest.getGroupId(), null);
|
||||
ProcedureCategory.INPATIENT_ADVICE, null, expectedDate, exeDate, tempMedicationRequest.getGroupId(),
|
||||
null);
|
||||
|
||||
// 更新药品放发状态
|
||||
medicationDispenseService.update(new LambdaUpdateWrapper<MedicationDispense>()
|
||||
.eq(MedicationDispense::getMedReqId, tempMedicationRequest.getId())
|
||||
.set(MedicationDispense::getProcedureId, procedureId)
|
||||
.set(MedicationDispense::getPlannedDispenseTime, expectedDate)
|
||||
.set(MedicationDispense::getStatusEnum, DispenseStatus.PREPARATION.getValue()));
|
||||
|
||||
// 更新账单状态
|
||||
@@ -829,8 +1063,9 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
* 执行诊疗医嘱
|
||||
*
|
||||
* @param actUseExeList 诊疗医嘱
|
||||
* @param exeDate 实际执行时间
|
||||
*/
|
||||
private void exeActivity(List<ServiceRequestUseExe> actUseExeList) {
|
||||
private void exeActivity(List<ServiceRequestUseExe> actUseExeList, Date exeDate) {
|
||||
// 长期医嘱
|
||||
List<ServiceRequestUseExe> longActivity = actUseExeList.stream()
|
||||
.filter(e -> TherapyTimeType.LONG_TERM.getValue().equals(e.getTherapyEnum())).toList();
|
||||
@@ -842,7 +1077,11 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
actUseExeList.stream().map(ServiceRequestUseExe::getActivityId).collect(Collectors.toList());
|
||||
// 医嘱详细信息
|
||||
List<AdviceBaseDto> activityInfos = doctorStationAdviceAppService.getAdviceBaseInfo(null, null, null,
|
||||
<<<<<<< HEAD
|
||||
activityDefinitionIdList, 0L, 1, 500, Whether.NO.getValue(), List.of(3)).getRecords();
|
||||
=======
|
||||
activityDefinitionIdList, 0L, 1, 500, Whether.NO.getValue(), List.of(3), null).getRecords();
|
||||
>>>>>>> v1.3
|
||||
|
||||
// 当前时间
|
||||
Date curDate = new Date();
|
||||
@@ -869,12 +1108,12 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
// 转换为 LocalDateTime
|
||||
LocalDateTime localDateTime = LocalDateTime.parse(executeTime, formatter);
|
||||
// 转换为 Date
|
||||
Date exeDate = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
|
||||
Date expectedDate = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
|
||||
// 执行记录id
|
||||
Long procedureId = procedureService.addProcedureRecord(longServiceRequest.getEncounterId(),
|
||||
longServiceRequest.getPatientId(), longServiceRequest.getId(),
|
||||
CommonConstants.TableName.WOR_SERVICE_REQUEST, EventStatus.COMPLETED,
|
||||
ProcedureCategory.INPATIENT_ADVICE, null, exeDate, null, null);
|
||||
ProcedureCategory.INPATIENT_ADVICE, null, expectedDate, exeDate, null, null);
|
||||
|
||||
// 生成账单
|
||||
chargeItem = new ChargeItem();
|
||||
@@ -919,9 +1158,19 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
.setTotalPrice(longServiceRequest.getQuantity().multiply(price).setScale(6, RoundingMode.HALF_UP)); // 总价
|
||||
chargeItemService.saveOrUpdate(chargeItem);
|
||||
|
||||
<<<<<<< HEAD
|
||||
// 处理诊疗绑定耗材
|
||||
this.handleBindDevice(longServiceRequest, procedureId, takeDeviceLocationId, curDate, practitionerId,
|
||||
orgId, serviceRequestUseExe.getAccountId(), exeDate, clickDate);
|
||||
=======
|
||||
// 医嘱定价来源
|
||||
String orderPricingSource = TenantOptionUtil.getOptionContent(TenantOptionDict.ORDER_PRICING_SOURCE);
|
||||
if (OrderPricingSource.RETAIL_PRICE.getCode().equals(orderPricingSource)) {
|
||||
// 处理诊疗绑定耗材
|
||||
this.handleBindDevice(longServiceRequest, procedureId, takeDeviceLocationId, curDate,
|
||||
practitionerId, orgId, serviceRequestUseExe.getAccountId(), expectedDate, clickDate);
|
||||
}
|
||||
>>>>>>> v1.3
|
||||
}
|
||||
}
|
||||
|
||||
@@ -940,12 +1189,12 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
// 转换为 LocalDateTime
|
||||
LocalDateTime localDateTime = LocalDateTime.parse(executeTime, formatter);
|
||||
// 转换为 Date
|
||||
Date exeDate = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
|
||||
Date expectedDate = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
|
||||
// 执行记录id
|
||||
Long procedureId = procedureService.addProcedureRecord(tempServiceRequest.getEncounterId(),
|
||||
tempServiceRequest.getPatientId(), tempServiceRequest.getId(),
|
||||
CommonConstants.TableName.WOR_SERVICE_REQUEST, EventStatus.COMPLETED,
|
||||
ProcedureCategory.INPATIENT_ADVICE, null, exeDate, null, null);
|
||||
ProcedureCategory.INPATIENT_ADVICE, null, expectedDate, exeDate, null, null);
|
||||
|
||||
// 更新账单状态
|
||||
chargeItemService.update(
|
||||
@@ -953,9 +1202,19 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
.set(ChargeItem::getProcedureId, procedureId)
|
||||
.set(ChargeItem::getStatusEnum, ChargeItemStatus.BILLABLE.getValue()));
|
||||
|
||||
<<<<<<< HEAD
|
||||
// 处理诊疗绑定耗材
|
||||
this.handleBindDevice(tempServiceRequest, procedureId, takeDeviceLocationId, curDate, practitionerId,
|
||||
orgId, serviceRequestUseExe.getAccountId(), exeDate, clickDate);
|
||||
=======
|
||||
// 医嘱定价来源
|
||||
String orderPricingSource = TenantOptionUtil.getOptionContent(TenantOptionDict.ORDER_PRICING_SOURCE);
|
||||
if (OrderPricingSource.RETAIL_PRICE.getCode().equals(orderPricingSource)) {
|
||||
// 处理诊疗绑定耗材
|
||||
this.handleBindDevice(tempServiceRequest, procedureId, takeDeviceLocationId, curDate,
|
||||
practitionerId, orgId, serviceRequestUseExe.getAccountId(), expectedDate, clickDate);
|
||||
}
|
||||
>>>>>>> v1.3
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1001,7 +1260,11 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
|
||||
// 耗材医嘱详细信息
|
||||
List<AdviceBaseDto> deviceInfos = doctorStationAdviceAppService
|
||||
<<<<<<< HEAD
|
||||
.getAdviceBaseInfo(null, null, null, deviceIds, 0L, 1, 500, Whether.NO.getValue(), List.of(2))
|
||||
=======
|
||||
.getAdviceBaseInfo(null, null, null, deviceIds, 0L, 1, 500, Whether.NO.getValue(), List.of(2), null)
|
||||
>>>>>>> v1.3
|
||||
.getRecords();
|
||||
|
||||
DeviceRequest deviceRequest;
|
||||
@@ -1030,7 +1293,14 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
if (deviceAdvice.isEmpty()) {
|
||||
throw new RuntimeException("未找到对应的医嘱信息,deviceId: " + activityBindDeviceDetailDto.getDeviceId());
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
AdviceBaseDto advice = deviceAdvice.get();
|
||||
=======
|
||||
// 医嘱信息
|
||||
AdviceBaseDto advice = deviceAdvice.get();
|
||||
// 拆零比
|
||||
BigDecimal partPercent = advice.getPartPercent();
|
||||
>>>>>>> v1.3
|
||||
|
||||
// 生成耗材请求
|
||||
deviceRequest = new DeviceRequest();
|
||||
@@ -1058,6 +1328,7 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
// 需要的耗材数量(小单位)
|
||||
minUnitCodeQuantity = activityBindDeviceDetailDto.getMinUnitCodeQuantity();
|
||||
// 单位(小单位)
|
||||
<<<<<<< HEAD
|
||||
// String minUnitCode = activityBindDeviceDetailDto.getMinUnitCode();
|
||||
// 库存集合
|
||||
List<AdviceInventoryDto> inventoryList = advice.getInventoryList();
|
||||
@@ -1127,6 +1398,81 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
chargeItemService.save(chargeItem);
|
||||
|
||||
}
|
||||
=======
|
||||
String minUnitCode = activityBindDeviceDetailDto.getMinUnitCode();
|
||||
// 价格集合
|
||||
List<AdvicePriceDto> priceList = advice.getPriceList();
|
||||
|
||||
// 因为是统一零售价,价格取第一个即可
|
||||
AdvicePriceDto priceInfos = priceList.get(0);
|
||||
|
||||
// 单价(大单位)
|
||||
BigDecimal price = priceInfos.getPrice();
|
||||
// 单价(小单位)
|
||||
BigDecimal priceMin = priceInfos.getPrice().divide(partPercent, 6, RoundingMode.HALF_UP);
|
||||
// 总计
|
||||
BigDecimal totalPrice;
|
||||
// 计算 totalPrice
|
||||
if (minUnitCodeQuantity.compareTo(partPercent) < 0) {
|
||||
// 当 minUnitCodeQuantity < partPercent 时
|
||||
totalPrice = minUnitCodeQuantity.multiply(priceMin).setScale(6, RoundingMode.HALF_UP);
|
||||
} else {
|
||||
// 计算商和余数
|
||||
BigDecimal[] quotientAndRemainder = minUnitCodeQuantity.divideAndRemainder(partPercent);
|
||||
BigDecimal quotient = quotientAndRemainder[0]; // 整数部分
|
||||
BigDecimal remainder = quotientAndRemainder[1]; // 余数部分
|
||||
if (remainder.compareTo(BigDecimal.ZERO) == 0) {
|
||||
// 当能被整除时
|
||||
totalPrice = price.multiply(quotient).setScale(6, RoundingMode.HALF_UP);
|
||||
} else {
|
||||
// 当不能被整除时
|
||||
BigDecimal integerPartPrice = price.multiply(quotient).setScale(6, RoundingMode.HALF_UP);
|
||||
BigDecimal remainderPartPrice = priceMin.multiply(remainder).setScale(6, RoundingMode.HALF_UP);
|
||||
totalPrice = integerPartPrice.add(remainderPartPrice);
|
||||
}
|
||||
}
|
||||
|
||||
// 生成耗材发放
|
||||
deviceRequest.setQuantity(minUnitCodeQuantity);
|
||||
deviceRequest.setUnitCode(minUnitCode);
|
||||
// deviceRequest.setLotNumber(lotNumber);
|
||||
// 发放ID
|
||||
Long dispenseId =
|
||||
deviceDispenseService.generateDeviceDispense(deviceRequest, procedureId, locationId, exeDate);
|
||||
|
||||
// 根据批次库存量,生成账单
|
||||
chargeItem = new ChargeItem();
|
||||
chargeItem.setStatusEnum(ChargeItemStatus.BILLABLE.getValue()); // 收费状态
|
||||
chargeItem.setBusNo(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix().concat(deviceRequest.getBusNo()));
|
||||
chargeItem.setGenerateSourceEnum(GenerateSource.ORDER_EXECUTE.getValue()); // 生成来源
|
||||
chargeItem.setPatientId(deviceRequest.getPatientId()); // 患者
|
||||
chargeItem.setContextEnum(ChargeItemContext.DEVICE.getValue()); // 类型
|
||||
chargeItem.setEncounterId(deviceRequest.getEncounterId()); // 就诊id
|
||||
chargeItem.setDefinitionId(priceInfos.getDefinitionId()); // 费用定价ID
|
||||
chargeItem.setDefDetailId(priceInfos.getDefinitionDetailId()); // 定价子表主键
|
||||
chargeItem.setEntererId(practitionerId);// 开立人ID
|
||||
chargeItem.setRequestingOrgId(orgId); // 开立科室
|
||||
chargeItem.setEnteredDate(curDate); // 开立时间
|
||||
chargeItem.setServiceTable(CommonConstants.TableName.WOR_DEVICE_REQUEST);// 医疗服务类型
|
||||
chargeItem.setServiceId(deviceRequest.getId()); // 医疗服务ID
|
||||
chargeItem.setProductTable(CommonConstants.TableName.ADM_DEVICE_DEFINITION);// 产品所在表
|
||||
chargeItem.setProductId(activityBindDeviceDetailDto.getDeviceId());// 收费项id
|
||||
chargeItem.setAccountId(accountId);// 关联账户ID
|
||||
chargeItem.setConditionId(deviceRequest.getConditionId()); // 诊断id
|
||||
chargeItem.setEncounterDiagnosisId(deviceRequest.getEncounterDiagnosisId()); // 就诊诊断id
|
||||
chargeItem.setDispenseTable(CommonConstants.TableName.WOR_DEVICE_DISPENSE); // 发放表名
|
||||
// chargeItem.setDispenseId(dispenseId); // 发放ID
|
||||
|
||||
chargeItem.setDefinitionId(priceInfos.getDefinitionId()); // 费用定价ID
|
||||
chargeItem.setDefDetailId(priceInfos.getDefinitionDetailId()); // 定价子表主键
|
||||
chargeItem.setQuantityValue(minUnitCodeQuantity); // 数量
|
||||
chargeItem.setQuantityUnit(minUnitCode); // 单位
|
||||
chargeItem.setUnitPrice(priceMin); // 单价
|
||||
chargeItem.setTotalPrice(totalPrice); // 总价
|
||||
|
||||
chargeItemService.save(chargeItem);
|
||||
|
||||
>>>>>>> v1.3
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1267,7 +1613,11 @@ public class AdviceProcessAppServiceImpl implements IAdviceProcessAppService {
|
||||
// 药品发放编码
|
||||
medicationDispense.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.MEDICATION_DIS_NO.getPrefix(), 4));
|
||||
// 退药状态
|
||||
<<<<<<< HEAD
|
||||
medicationDispense.setStatusEnum(DispenseStatus.PREPARATION.getValue());
|
||||
=======
|
||||
medicationDispense.setStatusEnum(DispenseStatus.PENDING_REFUND.getValue());
|
||||
>>>>>>> v1.3
|
||||
// 状态变更时间
|
||||
medicationDispense.setStatusChangedTime(DateUtils.getNowDate());
|
||||
// 取消执行id
|
||||
|
||||
@@ -0,0 +1,354 @@
|
||||
package com.openhis.web.inhospitalnursestation.appservice.impl;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.core.common.core.domain.R;
|
||||
import com.core.common.utils.AssignSeqUtil;
|
||||
import com.core.common.utils.MessageUtils;
|
||||
import com.core.common.utils.SecurityUtils;
|
||||
import com.openhis.administration.domain.ChargeItem;
|
||||
import com.openhis.administration.service.IChargeItemService;
|
||||
import com.openhis.common.constant.CommonConstants;
|
||||
import com.openhis.common.constant.PromptMsgConstant;
|
||||
import com.openhis.common.enums.*;
|
||||
import com.openhis.common.utils.EnumUtils;
|
||||
import com.openhis.template.domain.EncounterAutoRoll;
|
||||
import com.openhis.template.service.IEncounterAutoRollService;
|
||||
import com.openhis.web.doctorstation.appservice.IDoctorStationAdviceAppService;
|
||||
import com.openhis.web.doctorstation.dto.AdviceBaseDto;
|
||||
import com.openhis.web.doctorstation.dto.AdvicePriceDto;
|
||||
import com.openhis.web.inhospitalnursestation.appservice.IEncounterAutoRollAppService;
|
||||
import com.openhis.web.inhospitalnursestation.dto.*;
|
||||
import com.openhis.web.inhospitalnursestation.mapper.EncounterAutoRollAppMapper;
|
||||
|
||||
/**
|
||||
* 住院就诊滚方 应用实现类
|
||||
*/
|
||||
@Service
|
||||
public class EncounterAutoRollAppServiceImpl implements IEncounterAutoRollAppService {
|
||||
|
||||
@Resource
|
||||
EncounterAutoRollAppMapper encounterAutoRollAppMapper;
|
||||
|
||||
@Resource
|
||||
IEncounterAutoRollService encounterAutoRollService;
|
||||
|
||||
@Resource
|
||||
IDoctorStationAdviceAppService doctorStationAdviceAppService;
|
||||
|
||||
@Resource
|
||||
IChargeItemService chargeItemService;
|
||||
|
||||
@Resource
|
||||
AssignSeqUtil assignSeqUtil;
|
||||
|
||||
/**
|
||||
* 查询自动滚方数据源
|
||||
*
|
||||
* @return 自动滚方数据源
|
||||
*/
|
||||
@Override
|
||||
public List<AutoRollSourceDto> getSource() {
|
||||
return encounterAutoRollAppMapper.getSource(PublicationStatus.ACTIVE.getValue(),
|
||||
ActivityDefCategory.BASIC_SERVICE.getCode());
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存住院就诊的滚方信息
|
||||
*
|
||||
* @param encounterAutoRollSaveDto 住院就诊的滚方信息
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public R<?> saveBinding(EncounterAutoRollSaveDto encounterAutoRollSaveDto) {
|
||||
// 当前登录账号参与者id
|
||||
Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId();
|
||||
// 当前登录账号科室id
|
||||
Long orgId = SecurityUtils.getLoginUser().getOrgId();
|
||||
|
||||
// 就诊id
|
||||
Long encounterId = encounterAutoRollSaveDto.getEncounterId();
|
||||
// 实例id
|
||||
Long instanceId = encounterAutoRollSaveDto.getInstanceId();
|
||||
// 数量
|
||||
BigDecimal quantity = encounterAutoRollSaveDto.getQuantity();
|
||||
|
||||
long count = encounterAutoRollService.count(new LambdaQueryWrapper<EncounterAutoRoll>()
|
||||
.eq(EncounterAutoRoll::getEncounterId, encounterId).eq(EncounterAutoRoll::getInstanceId, instanceId));
|
||||
if (count > 0L) {
|
||||
return R.fail("当前患者已经存在该信息,请勿重复绑定");
|
||||
}
|
||||
EncounterAutoRoll encounterAutoRoll = new EncounterAutoRoll();
|
||||
encounterAutoRoll.setStatusEnum(PublicationStatus.ACTIVE.getValue()); // 状态
|
||||
encounterAutoRoll.setEncounterId(encounterId);
|
||||
encounterAutoRoll.setInstanceTable(CommonConstants.TableName.WOR_ACTIVITY_DEFINITION);
|
||||
encounterAutoRoll.setInstanceId(instanceId);
|
||||
encounterAutoRoll.setQuantity(quantity);
|
||||
encounterAutoRoll.setPractitionerId(practitionerId); // 参与者id
|
||||
encounterAutoRoll.setOrganizationId(orgId); // 参与者科室id
|
||||
encounterAutoRollService.save(encounterAutoRoll);
|
||||
|
||||
return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"滚方信息"}));
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询住院就诊滚方绑定信息
|
||||
*
|
||||
* @param encounterId 就诊id
|
||||
* @return 住院就诊滚方绑定信息
|
||||
*/
|
||||
@Override
|
||||
public List<EncounterAutoRollQueryDto> getEncounter(Long encounterId) {
|
||||
List<EncounterAutoRollQueryDto> encounter = encounterAutoRollAppMapper.getEncounter(encounterId);
|
||||
for (EncounterAutoRollQueryDto encounterAutoRollQueryDto : encounter) {
|
||||
encounterAutoRollQueryDto.setStatusEnum_enumText(
|
||||
EnumUtils.getInfoByValue(PublicationStatus.class, encounterAutoRollQueryDto.getStatusEnum()));
|
||||
}
|
||||
return encounter;
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除住院就诊的滚方信息
|
||||
*
|
||||
* @param id id
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public R<?> deleteBinding(Long id) {
|
||||
boolean res = encounterAutoRollService.removeById(id);
|
||||
if (res) {
|
||||
return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00005, new Object[] {"滚方信息"}));
|
||||
} else {
|
||||
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 启用or停用
|
||||
*
|
||||
* @param id id
|
||||
* @param status 状态
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public R<?> activeOrRetired(Long id, Integer status) {
|
||||
EncounterAutoRoll encounterAutoRoll = new EncounterAutoRoll();
|
||||
encounterAutoRoll.setId(id);
|
||||
encounterAutoRoll.setStatusEnum(status); // 状态
|
||||
boolean res = encounterAutoRollService.updateById(encounterAutoRoll);
|
||||
if (res) {
|
||||
return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00004, new Object[] {"变更状态"}));
|
||||
} else {
|
||||
return R.fail(MessageUtils.createMessage(PromptMsgConstant.Common.M00007, null));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询在床患者信息
|
||||
*
|
||||
* @return 在床患者信息
|
||||
*/
|
||||
@Override
|
||||
public List<InBedPatientInfoDto> getInBedPatientInfo() {
|
||||
return encounterAutoRollAppMapper.getInBedPatientInfo(PublicationStatus.ACTIVE.getValue(),
|
||||
EncounterClass.IMP.getValue(), LocationForm.BED.getValue(), AccountType.PERSONAL_CASH_ACCOUNT.getCode(),
|
||||
Whether.YES.getValue());
|
||||
}
|
||||
|
||||
/**
|
||||
* 滚护理费
|
||||
*
|
||||
* @param tenantId 租户id
|
||||
* @param orderPricing 医嘱定价来源 | 定时任务调用时传参
|
||||
*/
|
||||
@Override
|
||||
public void autoRollNursingFee(Integer tenantId, String orderPricing) {
|
||||
// 当前时间
|
||||
Date date = new Date();
|
||||
// 在床患者信息
|
||||
List<InBedPatientInfoDto> inBedPatientInfo = this.getInBedPatientInfo();
|
||||
// 就诊id集合
|
||||
List<Long> encounterIdList =
|
||||
inBedPatientInfo.stream().map(InBedPatientInfoDto::getEncounterId).collect(Collectors.toList());
|
||||
if (!encounterIdList.isEmpty()) {
|
||||
// 需要自动计费的护理医嘱
|
||||
List<AutoRollNursingDto> nursingRequest = encounterAutoRollAppMapper.getNursingRequest(
|
||||
RequestStatus.COMPLETED.getValue(), ActivityDefCategory.NURSING.getValue(), encounterIdList);
|
||||
if (!nursingRequest.isEmpty()) {
|
||||
System.out.println("**************滚护理费start****************");
|
||||
// 赋值计费的相关字段
|
||||
nursingRequest.forEach(nursingDto -> {
|
||||
inBedPatientInfo.stream()
|
||||
.filter(patientInfo -> patientInfo.getEncounterId().equals(nursingDto.getEncounterId()))
|
||||
.findFirst() // 匹配到第一个就返回
|
||||
.ifPresent(patientInfo -> {
|
||||
nursingDto.setAccountId(patientInfo.getAccountId()); // 账号id
|
||||
nursingDto.setConditionId(patientInfo.getConditionId()); // 诊断ID
|
||||
nursingDto.setEncounterDiagnosisId(patientInfo.getEncounterDiagnosisId()); // 就诊诊断id
|
||||
nursingDto.setOrganizationId(patientInfo.getOrganizationId()); // 住院科室id
|
||||
});
|
||||
});
|
||||
// 诊疗定义id集合
|
||||
List<Long> activityDefinitionIdList = nursingRequest.stream()
|
||||
.map(AutoRollNursingDto::getActivityDefinitionId).collect(Collectors.toList());
|
||||
// 诊疗医嘱信息
|
||||
List<AdviceBaseDto> activityInfos = doctorStationAdviceAppService.getAdviceBaseInfo(null, null, null,
|
||||
activityDefinitionIdList, 0L, 1, 500, Whether.NO.getValue(), List.of(3), orderPricing).getRecords();
|
||||
|
||||
// 计费
|
||||
ChargeItem chargeItem;
|
||||
for (AutoRollNursingDto autoRollNursingDto : nursingRequest) {
|
||||
// 当天是否已经生成了账单
|
||||
long count = chargeItemService.count(new LambdaQueryWrapper<ChargeItem>()
|
||||
.eq(ChargeItem::getEncounterId, autoRollNursingDto.getEncounterId())
|
||||
.eq(ChargeItem::getProductId, autoRollNursingDto.getActivityDefinitionId())
|
||||
.apply("DATE(entered_date) = CURRENT_DATE"));
|
||||
if (count > 0L) {
|
||||
break;
|
||||
}
|
||||
chargeItem = new ChargeItem();
|
||||
chargeItem.setTenantId(tenantId); // 租户id
|
||||
chargeItem.setStatusEnum(ChargeItemStatus.DRAFT.getValue()); // 收费状态
|
||||
chargeItem.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix(), 4));
|
||||
chargeItem.setGenerateSourceEnum(GenerateSource.AUTO_ROLL_FEES.getValue()); // 生成来源
|
||||
chargeItem.setPatientId(autoRollNursingDto.getPatientId()); // 患者
|
||||
chargeItem.setContextEnum(ChargeItemContext.ACTIVITY.getValue()); // 类型
|
||||
chargeItem.setEncounterId(autoRollNursingDto.getEncounterId()); // 就诊id
|
||||
chargeItem.setEntererId(autoRollNursingDto.getRequesterId());// 开立人ID
|
||||
chargeItem.setEnteredDate(date); // 开立时间
|
||||
chargeItem.setProductTable(CommonConstants.TableName.WOR_ACTIVITY_DEFINITION);// 产品所在表
|
||||
chargeItem.setProductId(autoRollNursingDto.getActivityDefinitionId());// 收费项id
|
||||
chargeItem.setAccountId(autoRollNursingDto.getAccountId());// 关联账户ID
|
||||
chargeItem.setRequestingOrgId(autoRollNursingDto.getOrganizationId()); // 开立科室
|
||||
chargeItem.setConditionId(autoRollNursingDto.getConditionId()); // 诊断id
|
||||
chargeItem.setEncounterDiagnosisId(autoRollNursingDto.getEncounterDiagnosisId()); // 就诊诊断id
|
||||
// 匹配医嘱详细信息
|
||||
Optional<AdviceBaseDto> matchedAdvice = activityInfos.stream().filter(
|
||||
advice -> autoRollNursingDto.getActivityDefinitionId().equals(advice.getAdviceDefinitionId()))
|
||||
.findFirst();
|
||||
// 医嘱信息
|
||||
AdviceBaseDto advice = matchedAdvice.get();
|
||||
|
||||
Optional<AdvicePriceDto> matchedPrice = advice.getPriceList().stream().findFirst();
|
||||
// 医嘱定价信息
|
||||
AdvicePriceDto priceDto = matchedPrice.get();
|
||||
|
||||
BigDecimal price = priceDto.getPrice();
|
||||
chargeItem.setDefinitionId(priceDto.getDefinitionId()); // 费用定价ID
|
||||
chargeItem.setDefDetailId(priceDto.getDefinitionDetailId()); // 定价子表主键
|
||||
chargeItem.setQuantityValue(autoRollNursingDto.getQuantity()); // 数量
|
||||
chargeItem.setUnitPrice(price); // 单价
|
||||
chargeItem.setTotalPrice(
|
||||
autoRollNursingDto.getQuantity().multiply(price).setScale(6, RoundingMode.HALF_UP)); // 总价
|
||||
|
||||
chargeItemService.save(chargeItem);
|
||||
}
|
||||
System.out.println("**************滚护理费end****************");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 滚基础服务费
|
||||
*
|
||||
* @param tenantId 租户id
|
||||
* @param orderPricing 医嘱定价来源 | 定时任务调用时传参
|
||||
*/
|
||||
@Override
|
||||
public void autoRollBasicService(Integer tenantId, String orderPricing) {
|
||||
|
||||
// 当前时间
|
||||
Date date = new Date();
|
||||
// 在床患者信息
|
||||
List<InBedPatientInfoDto> inBedPatientInfo = this.getInBedPatientInfo();
|
||||
// 就诊id集合
|
||||
List<Long> encounterIdList =
|
||||
inBedPatientInfo.stream().map(InBedPatientInfoDto::getEncounterId).collect(Collectors.toList());
|
||||
if (!encounterIdList.isEmpty()) {
|
||||
// 需要自动计费的绑定基础服务信息
|
||||
List<AutoRollBasicServiceDto> autoRollBasicService = encounterAutoRollAppMapper
|
||||
.getAutoRollBasicService(PublicationStatus.ACTIVE.getValue(), encounterIdList);
|
||||
if (!autoRollBasicService.isEmpty()) {
|
||||
System.out.println("**************滚基础服务费start****************");
|
||||
// 赋值计费的相关字段
|
||||
autoRollBasicService.forEach(basicServiceDto -> {
|
||||
inBedPatientInfo.stream()
|
||||
.filter(patientInfo -> patientInfo.getEncounterId().equals(basicServiceDto.getEncounterId()))
|
||||
.findFirst() // 匹配到第一个就返回
|
||||
.ifPresent(patientInfo -> {
|
||||
basicServiceDto.setAccountId(patientInfo.getAccountId()); // 账号id
|
||||
basicServiceDto.setConditionId(patientInfo.getConditionId()); // 诊断ID
|
||||
basicServiceDto.setEncounterDiagnosisId(patientInfo.getEncounterDiagnosisId()); // 就诊诊断id
|
||||
basicServiceDto.setPatientId(patientInfo.getPatientId()); // 患者id
|
||||
});
|
||||
});
|
||||
// 诊疗定义id集合
|
||||
List<Long> activityDefinitionIdList = autoRollBasicService.stream()
|
||||
.map(AutoRollBasicServiceDto::getActivityDefinitionId).collect(Collectors.toList());
|
||||
// 诊疗医嘱信息
|
||||
List<AdviceBaseDto> activityInfos = doctorStationAdviceAppService.getAdviceBaseInfo(null, null, null,
|
||||
activityDefinitionIdList, 0L, 1, 500, Whether.NO.getValue(), List.of(3), orderPricing).getRecords();
|
||||
// 计费
|
||||
ChargeItem chargeItem;
|
||||
for (AutoRollBasicServiceDto autoRollBasicServiceDto : autoRollBasicService) {
|
||||
// 当天是否已经生成了账单
|
||||
long count = chargeItemService.count(new LambdaQueryWrapper<ChargeItem>()
|
||||
.eq(ChargeItem::getEncounterId, autoRollBasicServiceDto.getEncounterId())
|
||||
.eq(ChargeItem::getProductId, autoRollBasicServiceDto.getActivityDefinitionId())
|
||||
.apply("DATE(entered_date) = CURRENT_DATE"));
|
||||
if (count > 0L) {
|
||||
break;
|
||||
}
|
||||
chargeItem = new ChargeItem();
|
||||
chargeItem.setTenantId(tenantId); // 租户id
|
||||
chargeItem.setStatusEnum(ChargeItemStatus.DRAFT.getValue()); // 收费状态
|
||||
chargeItem.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.CHARGE_ITEM_NO.getPrefix(), 4));
|
||||
chargeItem.setGenerateSourceEnum(GenerateSource.AUTO_ROLL_FEES.getValue()); // 生成来源
|
||||
chargeItem.setPatientId(autoRollBasicServiceDto.getPatientId()); // 患者
|
||||
chargeItem.setContextEnum(ChargeItemContext.ACTIVITY.getValue()); // 类型
|
||||
chargeItem.setEncounterId(autoRollBasicServiceDto.getEncounterId()); // 就诊id
|
||||
chargeItem.setEntererId(autoRollBasicServiceDto.getRequesterId());// 开立人ID
|
||||
chargeItem.setEnteredDate(date); // 开立时间
|
||||
chargeItem.setProductTable(CommonConstants.TableName.WOR_ACTIVITY_DEFINITION);// 产品所在表
|
||||
chargeItem.setProductId(autoRollBasicServiceDto.getActivityDefinitionId());// 收费项id
|
||||
chargeItem.setAccountId(autoRollBasicServiceDto.getAccountId());// 关联账户ID
|
||||
chargeItem.setRequestingOrgId(autoRollBasicServiceDto.getOrganizationId()); // 开立科室
|
||||
chargeItem.setConditionId(autoRollBasicServiceDto.getConditionId()); // 诊断id
|
||||
chargeItem.setEncounterDiagnosisId(autoRollBasicServiceDto.getEncounterDiagnosisId()); // 就诊诊断id
|
||||
// 匹配医嘱详细信息
|
||||
Optional<AdviceBaseDto> matchedAdvice =
|
||||
activityInfos.stream().filter(advice -> autoRollBasicServiceDto.getActivityDefinitionId()
|
||||
.equals(advice.getAdviceDefinitionId())).findFirst();
|
||||
// 医嘱信息
|
||||
AdviceBaseDto advice = matchedAdvice.get();
|
||||
|
||||
Optional<AdvicePriceDto> matchedPrice = advice.getPriceList().stream().findFirst();
|
||||
// 医嘱定价信息
|
||||
AdvicePriceDto priceDto = matchedPrice.get();
|
||||
|
||||
BigDecimal price = priceDto.getPrice();
|
||||
chargeItem.setDefinitionId(priceDto.getDefinitionId()); // 费用定价ID
|
||||
chargeItem.setDefDetailId(priceDto.getDefinitionDetailId()); // 定价子表主键
|
||||
chargeItem.setQuantityValue(autoRollBasicServiceDto.getQuantity()); // 数量
|
||||
chargeItem.setUnitPrice(price); // 单价
|
||||
chargeItem.setTotalPrice(
|
||||
autoRollBasicServiceDto.getQuantity().multiply(price).setScale(6, RoundingMode.HALF_UP)); // 总价
|
||||
|
||||
chargeItemService.save(chargeItem);
|
||||
}
|
||||
System.out.println("**************滚基础服务费end****************");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -3,6 +3,7 @@ package com.openhis.web.inhospitalnursestation.appservice.impl;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
@@ -29,9 +30,14 @@ import com.openhis.web.inhospitalnursestation.dto.MedicineDispenseFormDto;
|
||||
import com.openhis.web.inhospitalnursestation.dto.MedicineSummaryFormDto;
|
||||
import com.openhis.web.inhospitalnursestation.dto.MedicineSummaryParam;
|
||||
import com.openhis.web.inhospitalnursestation.mapper.MedicineSummaryAppMapper;
|
||||
<<<<<<< HEAD
|
||||
import com.openhis.web.pharmacymanage.dto.UnDispenseInventoryDto;
|
||||
import com.openhis.web.pharmacymanage.mapper.ReturnMedicineMapper;
|
||||
import com.openhis.workflow.domain.InventoryItem;
|
||||
=======
|
||||
import com.openhis.web.pharmacymanage.dto.DispenseInitDto;
|
||||
import com.openhis.web.pharmacymanage.mapper.ReturnMedicineMapper;
|
||||
>>>>>>> v1.3
|
||||
import com.openhis.workflow.service.ISupplyDeliveryService;
|
||||
import com.openhis.workflow.service.ISupplyRequestService;
|
||||
|
||||
@@ -66,6 +72,7 @@ public class MedicineSummaryAppServiceImpl implements IMedicineSummaryAppService
|
||||
private ReturnMedicineMapper returnMedicineMapper;
|
||||
|
||||
/**
|
||||
<<<<<<< HEAD
|
||||
* 查询发药单信息
|
||||
*
|
||||
* @param dispenseFormSearchParam 查询条件
|
||||
@@ -115,6 +122,115 @@ public class MedicineSummaryAppServiceImpl implements IMedicineSummaryAppService
|
||||
return R.ok(medicineDispenseFormPage);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询药品汇总单
|
||||
=======
|
||||
* 药品汇总单初始化
|
||||
*
|
||||
* @return 初始化信息
|
||||
*/
|
||||
@Override
|
||||
public R<?> getMedicineSummaryInit() {
|
||||
DispenseInitDto initDto = new DispenseInitDto();
|
||||
// 未发药原因下拉选列表
|
||||
List<DispenseInitDto.NotPerformedReasonOption> notPerformedReasonOptions =
|
||||
Stream.of(NotPerformedReasonEnum.values())
|
||||
.map(notPerformedReason -> new DispenseInitDto.NotPerformedReasonOption(notPerformedReason.getValue(),
|
||||
notPerformedReason.getInfo()))
|
||||
.collect(Collectors.toList());
|
||||
// 发药状态
|
||||
List<DispenseInitDto.DispenseStatusOption> dispenseStatusOptions = new ArrayList<>();
|
||||
dispenseStatusOptions.add(new DispenseInitDto.DispenseStatusOption(DispenseStatus.PREPARATION.getValue(),
|
||||
DispenseStatus.PREPARATION.getInfo()));
|
||||
dispenseStatusOptions.add(new DispenseInitDto.DispenseStatusOption(DispenseStatus.COMPLETED.getValue(),
|
||||
DispenseStatus.COMPLETED.getInfo()));
|
||||
|
||||
initDto.setNotPerformedReasonOptions(notPerformedReasonOptions).setDispenseStatusOptions(dispenseStatusOptions);
|
||||
return R.ok(initDto);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询发药单信息
|
||||
>>>>>>> v1.3
|
||||
*
|
||||
* @param dispenseFormSearchParam 查询条件
|
||||
* @param pageNo 当前页码
|
||||
* @param pageSize 查询条数
|
||||
<<<<<<< HEAD
|
||||
* @param searchKey 模糊查询关键字
|
||||
* @param request 请求
|
||||
* @return 药品汇总单
|
||||
*/
|
||||
@Override
|
||||
public R<?> getMedicineSummaryFormPage(DispenseFormSearchParam dispenseFormSearchParam, Integer pageNo,
|
||||
Integer pageSize, String searchKey, HttpServletRequest request) {
|
||||
// 构建查询条件
|
||||
QueryWrapper<DispenseFormSearchParam> queryWrapper = HisQueryUtils.buildQueryWrapper(dispenseFormSearchParam,
|
||||
searchKey, new HashSet<>(List.of(CommonConstants.FieldName.BusNo)), request);
|
||||
|
||||
// 汇总单分页列表
|
||||
Page<MedicineSummaryFormDto> medicineSummaryFormPage = medicineSummaryAppMapper.selectMedicineSummaryFormPage(
|
||||
new Page<>(pageNo, pageSize), queryWrapper, DispenseStatus.COMPLETED.getValue(),
|
||||
DispenseStatus.IN_PROGRESS.getValue(), SupplyType.SUMMARY_DISPENSE.getValue());
|
||||
medicineSummaryFormPage.getRecords().forEach(e -> {
|
||||
// 发药状态
|
||||
e.setStatusEnum_enumText(EnumUtils.getInfoByValue(DispenseStatus.class, e.getStatusEnum()));
|
||||
});
|
||||
return R.ok(medicineSummaryFormPage);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询药品汇总单详情
|
||||
*
|
||||
* @param summaryNo 汇总单号
|
||||
* @return 药品汇总单详情
|
||||
*/
|
||||
@Override
|
||||
=======
|
||||
* @param request 请求
|
||||
* @return 发药单信息
|
||||
*/
|
||||
@Override
|
||||
public R<?> getMedicineDispenseFormPage(DispenseFormSearchParam dispenseFormSearchParam, Integer pageNo,
|
||||
Integer pageSize, HttpServletRequest request) {
|
||||
// 初始化查询参数
|
||||
String encounterIds = dispenseFormSearchParam.getEncounterIds();
|
||||
dispenseFormSearchParam.setEncounterIds(null);
|
||||
// 构建查询条件
|
||||
QueryWrapper<DispenseFormSearchParam> queryWrapper =
|
||||
HisQueryUtils.buildQueryWrapper(dispenseFormSearchParam, null, null, request);
|
||||
|
||||
// 手动拼接住院患者id条件
|
||||
if (encounterIds != null && !encounterIds.isEmpty()) {
|
||||
List<Long> encounterIdList =
|
||||
Arrays.stream(encounterIds.split(CommonConstants.Common.COMMA)).map(Long::parseLong).toList();
|
||||
queryWrapper.in(CommonConstants.FieldName.EncounterId, encounterIdList);
|
||||
}
|
||||
// 领药信息列表
|
||||
Page<MedicineDispenseFormDto> medicineDispenseFormPage =
|
||||
medicineSummaryAppMapper.selectMedicineDispenseFormPage(new Page<>(pageNo, pageSize), queryWrapper,
|
||||
RequestStatus.COMPLETED.getValue(), EncounterActivityStatus.ACTIVE.getValue(),
|
||||
LocationForm.BED.getValue(), ParticipantType.ADMITTING_DOCTOR.getCode(),
|
||||
AccountType.PERSONAL_CASH_ACCOUNT.getCode(), ChargeItemStatus.BILLABLE.getValue(),
|
||||
ChargeItemStatus.BILLED.getValue(), ChargeItemStatus.REFUNDED.getValue(),
|
||||
DispenseStatus.SUMMARIZED.getValue());
|
||||
medicineDispenseFormPage.getRecords().forEach(e -> {
|
||||
// 是否皮试
|
||||
e.setSkinTestFlag_enumText(EnumUtils.getInfoByValue(Whether.class, e.getSkinTestFlag()));
|
||||
// 是否为注射药物
|
||||
e.setInjectFlag_enumText(EnumUtils.getInfoByValue(Whether.class, e.getInjectFlag()));
|
||||
// 医嘱类型
|
||||
e.setTherapyEnum_enumText(EnumUtils.getInfoByValue(TherapyTimeType.class, e.getTherapyEnum()));
|
||||
// 性别枚举
|
||||
e.setGenderEnum_enumText(EnumUtils.getInfoByValue(AdministrativeGender.class, e.getGenderEnum()));
|
||||
// 计算年龄
|
||||
if (e.getBirthDate() != null) {
|
||||
e.setAge(AgeCalculatorUtil.getAge(e.getBirthDate()));
|
||||
}
|
||||
});
|
||||
return R.ok(medicineDispenseFormPage);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询药品汇总单
|
||||
*
|
||||
@@ -135,7 +251,7 @@ public class MedicineSummaryAppServiceImpl implements IMedicineSummaryAppService
|
||||
// 汇总单分页列表
|
||||
Page<MedicineSummaryFormDto> medicineSummaryFormPage = medicineSummaryAppMapper.selectMedicineSummaryFormPage(
|
||||
new Page<>(pageNo, pageSize), queryWrapper, DispenseStatus.COMPLETED.getValue(),
|
||||
DispenseStatus.IN_PROGRESS.getValue(), SupplyType.SUMMARY_DISPENSE.getValue());
|
||||
DispenseStatus.PREPARATION.getValue(), SupplyType.SUMMARY_DISPENSE.getValue());
|
||||
medicineSummaryFormPage.getRecords().forEach(e -> {
|
||||
// 发药状态
|
||||
e.setStatusEnum_enumText(EnumUtils.getInfoByValue(DispenseStatus.class, e.getStatusEnum()));
|
||||
@@ -150,6 +266,7 @@ public class MedicineSummaryAppServiceImpl implements IMedicineSummaryAppService
|
||||
* @return 药品汇总单详情
|
||||
*/
|
||||
@Override
|
||||
>>>>>>> v1.3
|
||||
public R<?> getMedicineSummaryFormDetail(String summaryNo) {
|
||||
// 药品汇总单详情
|
||||
return R.ok(medicineSummaryAppMapper.selectMedicineSummaryFormDetail(summaryNo));
|
||||
@@ -244,13 +361,13 @@ public class MedicineSummaryAppServiceImpl implements IMedicineSummaryAppService
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验库存
|
||||
* 取消汇总
|
||||
*
|
||||
* @param devDispenseId 耗材发放id
|
||||
* @param medDispenseId 药品发放id
|
||||
* @param summaryNo 汇总单号
|
||||
* @return 处理结果
|
||||
*/
|
||||
@Override
|
||||
<<<<<<< HEAD
|
||||
public R<?> checkInventoryItem(List<Long> devDispenseId, List<Long> medDispenseId) {
|
||||
|
||||
List<InventoryItem> inventoryItemList = new ArrayList<>();
|
||||
@@ -299,8 +416,22 @@ public class MedicineSummaryAppServiceImpl implements IMedicineSummaryAppService
|
||||
inventoryItemList.add(inventoryItem);
|
||||
}
|
||||
}
|
||||
=======
|
||||
public R<?> cancelSummary(String summaryNo) {
|
||||
// 取消汇总申请(软删除)
|
||||
List<Long> requestIdList = supplyRequestService.cancelSummarySupplyRequest(List.of(summaryNo));
|
||||
if (requestIdList.isEmpty()) {
|
||||
return R.fail("取消汇总申请失败");
|
||||
}
|
||||
return R.ok(inventoryItemList);
|
||||
// 软删除汇总发放
|
||||
supplyDeliveryService.deleteSupplyDeliveryByReqId(requestIdList);
|
||||
// 取消药品汇总
|
||||
boolean result = medicationDispenseService.cancelMedicationSummary(List.of(summaryNo));
|
||||
if (!result) {
|
||||
return R.fail("取消汇总申请失败");
|
||||
>>>>>>> v1.3
|
||||
}
|
||||
return R.ok(MessageUtils.createMessage(PromptMsgConstant.Common.M00004, new Object[] {"取消"}));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.openhis.web.inhospitalnursestation.appservice.impl;
|
||||
|
||||
<<<<<<< HEAD
|
||||
import com.core.common.core.domain.R;
|
||||
import com.core.common.core.domain.model.LoginUser;
|
||||
import com.core.common.exception.ServiceException;
|
||||
@@ -30,10 +31,66 @@ import java.util.stream.Collectors;
|
||||
/**
|
||||
* 住院护士站划价服务实现类
|
||||
* 核心功能:临时耗材/诊疗活动划价签发、关联费用项管理、库存校验、医嘱删除(已收费校验)等
|
||||
=======
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.core.common.core.domain.R;
|
||||
import com.core.common.core.domain.model.LoginUser;
|
||||
import com.core.common.exception.NonCaptureException;
|
||||
import com.core.common.exception.ServiceException;
|
||||
import com.core.common.utils.*;
|
||||
import com.openhis.administration.domain.ChargeItem;
|
||||
import com.openhis.administration.dto.CostDetailDto;
|
||||
import com.openhis.administration.dto.CostDetailSearchParam;
|
||||
import com.openhis.administration.service.IChargeItemService;
|
||||
import com.openhis.administration.service.IOrganizationService;
|
||||
import com.openhis.clinical.domain.Procedure;
|
||||
import com.openhis.clinical.service.IProcedureService;
|
||||
import com.openhis.common.constant.CommonConstants;
|
||||
import com.openhis.common.constant.PromptMsgConstant;
|
||||
import com.openhis.common.enums.*;
|
||||
import com.openhis.common.utils.EnumUtils;
|
||||
import com.openhis.common.utils.HisQueryUtils;
|
||||
import com.openhis.web.doctorstation.dto.ActivityChildrenJsonParams;
|
||||
import com.openhis.web.doctorstation.dto.AdviceSaveDto;
|
||||
import com.openhis.web.doctorstation.utils.AdviceUtils;
|
||||
import com.openhis.web.inhospitalnursestation.appservice.INurseBillingAppService;
|
||||
import com.openhis.web.inhospitalnursestation.dto.CostDetailExcelOutDto;
|
||||
import com.openhis.web.inhospitalnursestation.dto.InpatientAdviceDto;
|
||||
import com.openhis.web.inhospitalnursestation.dto.InpatientAdviceParam;
|
||||
import com.openhis.web.inhospitalnursestation.mapper.NurseBillingAppMapper;
|
||||
import com.openhis.web.regdoctorstation.dto.AdviceBatchOpParam;
|
||||
import com.openhis.web.regdoctorstation.dto.RegAdviceSaveDto;
|
||||
import com.openhis.web.regdoctorstation.dto.RegAdviceSaveParam;
|
||||
import com.openhis.workflow.domain.ActivityDefinition;
|
||||
import com.openhis.workflow.domain.DeviceRequest;
|
||||
import com.openhis.workflow.domain.ServiceRequest;
|
||||
import com.openhis.workflow.service.IActivityDefinitionService;
|
||||
import com.openhis.workflow.service.IDeviceDispenseService;
|
||||
import com.openhis.workflow.service.IDeviceRequestService;
|
||||
import com.openhis.workflow.service.IServiceRequestService;
|
||||
|
||||
/**
|
||||
* 住院护士站划价服务实现类 核心职责: 1. 临时耗材划价签发(含耗材请求生成、发放记录创建、费用项关联) 2. 诊疗活动划价签发(含服务请求生成、子项处理、费用项关联) 3. 划价参数校验(非空校验、库房校验等) 4.
|
||||
* 已收费项目删除限制(避免误删已结算数据) 5. 关联数据一致性管理(请求表、执行表、费用表、发放表联动)
|
||||
>>>>>>> v1.3
|
||||
*/
|
||||
@Service
|
||||
public class NurseBillingAppService implements INurseBillingAppService {
|
||||
|
||||
<<<<<<< HEAD
|
||||
// 依赖注入:保留@Resource注解,按原有方式注入依赖
|
||||
@Resource
|
||||
private AdviceUtils adviceUtils;
|
||||
@@ -75,11 +132,116 @@ public class NurseBillingAppService implements INurseBillingAppService {
|
||||
Date authoredTime = regAdviceSaveParam.getAuthoredTime() == null ? curDate : regAdviceSaveParam.getAuthoredTime();
|
||||
|
||||
// 2. 入参校验:非空校验 + 库存校验,校验失败直接返回错误响应
|
||||
=======
|
||||
// ======================== 常量定义(关联表名/编码规则)========================
|
||||
/**
|
||||
* 耗材请求服务关联表名(用于费用项关联数据源)
|
||||
*/
|
||||
private static final String SERVICE_TABLE_DEVICE = CommonConstants.TableName.WOR_DEVICE_REQUEST;
|
||||
/**
|
||||
* 诊疗活动服务关联表名(用于费用项关联数据源)
|
||||
*/
|
||||
private static final String SERVICE_TABLE_SERVICE = CommonConstants.TableName.WOR_SERVICE_REQUEST;
|
||||
/**
|
||||
* 耗材产品定义表名(用于费用项关联产品信息)
|
||||
*/
|
||||
private static final String PRODUCT_TABLE_DEVICE = CommonConstants.TableName.ADM_DEVICE_DEFINITION;
|
||||
/**
|
||||
* 诊疗活动定义表名(用于费用项关联产品信息)
|
||||
*/
|
||||
private static final String PRODUCT_TABLE_ACTIVITY = CommonConstants.TableName.WOR_ACTIVITY_DEFINITION;
|
||||
/**
|
||||
* 耗材发放表名(用于费用项关联发放记录)
|
||||
*/
|
||||
private static final String WOR_DEVICE_DISPENSE = CommonConstants.TableName.WOR_DEVICE_DISPENSE;
|
||||
|
||||
/**
|
||||
* 费用项业务编号前缀(统一编码规则,便于追溯)
|
||||
*/
|
||||
private static final String CHARGE_ITEM_BUS_NO_PREFIX = AssignSeqEnum.CHARGE_ITEM_NO.getPrefix();
|
||||
/**
|
||||
* 耗材申请单号序列号长度(按日生成,每日从0001开始递增)
|
||||
*/
|
||||
private static final int DEVICE_RES_NO_SEQ_LENGTH = 4;
|
||||
/**
|
||||
* 医嘱签发编码序列号长度(全局唯一,用于关联同一批次划价的医嘱)
|
||||
*/
|
||||
private static final int ADVICE_SIGN_SEQ_LENGTH = 10;
|
||||
|
||||
// ======================== 依赖注入(业务服务/工具类)========================
|
||||
/**
|
||||
* 诊疗活动定义服务(查询诊疗活动基础信息及子项配置)
|
||||
*/
|
||||
@Resource
|
||||
IActivityDefinitionService iActivityDefinitionService;
|
||||
/**
|
||||
* 医嘱处理工具类(含诊疗子项处理等通用逻辑)
|
||||
*/
|
||||
@Resource
|
||||
private AdviceUtils adviceUtils;
|
||||
/**
|
||||
* 序列生成工具类(用于生成业务编号、签发编码等唯一标识)
|
||||
*/
|
||||
@Resource
|
||||
private AssignSeqUtil assignSeqUtil;
|
||||
/**
|
||||
* 耗材请求服务(CRUD耗材请求记录WOR_DEVICE_REQUEST)
|
||||
*/
|
||||
@Resource
|
||||
private IDeviceRequestService iDeviceRequestService;
|
||||
/**
|
||||
* 服务请求服务(CRUD诊疗活动请求记录WOR_SERVICE_REQUEST)
|
||||
*/
|
||||
@Resource
|
||||
private IServiceRequestService iServiceRequestService;
|
||||
/**
|
||||
* 费用项服务(CRUD费用记录ADM_CHARGE_ITEM,含收费状态管理)
|
||||
*/
|
||||
@Resource
|
||||
private IChargeItemService iChargeItemService;
|
||||
/**
|
||||
* 耗材发放服务(生成耗材发放记录WOR_DEVICE_DISPENSE,管理发放状态)
|
||||
*/
|
||||
@Resource
|
||||
private IDeviceDispenseService iDeviceDispenseService;
|
||||
/**
|
||||
* 执行记录服务(生成医嘱执行记录CLIN_PROCEDURE,记录执行状态/人员/时间)
|
||||
*/
|
||||
@Resource
|
||||
private IProcedureService iProcedureService;
|
||||
@Resource
|
||||
private NurseBillingAppMapper nurseBillingAppMapper;
|
||||
@Resource
|
||||
private IOrganizationService organizationService;
|
||||
|
||||
// ======================== 核心业务方法(划价新增)========================
|
||||
|
||||
/**
|
||||
* 新增住院护士站划价(核心入口方法) 完整流程:参数初始化 → 入参校验 → 医嘱分类 → 生成全局签发编码 → 分类处理划价 → 返回结果 事务特性:所有操作原子化,任一环节失败则整体回滚(避免数据不一致)
|
||||
*
|
||||
* @param regAdviceSaveParam 划价请求参数体 包含:患者ID、就诊ID、住院科室ID、医嘱列表(耗材/诊疗活动)、操作时间等核心数据
|
||||
* @return R<?> 划价结果响应 成功:返回操作成功提示(编码M00002) 失败:返回具体错误信息(如参数缺失、库房为空等)
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public R<?> addInNurseBilling(RegAdviceSaveParam regAdviceSaveParam) {
|
||||
// 获取当前登录用户信息(包含护士ID、所属科室等)
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
|
||||
// 1. 时间参数初始化:优先使用入参指定时间,无则默认当前系统时间
|
||||
Date curDate = new Date();
|
||||
Date startTime = regAdviceSaveParam.getStartTime() == null ? curDate : regAdviceSaveParam.getStartTime();
|
||||
Date authoredTime =
|
||||
regAdviceSaveParam.getAuthoredTime() == null ? curDate : regAdviceSaveParam.getAuthoredTime();
|
||||
|
||||
// 2. 入参校验:校验不通过直接返回错误响应(避免后续无效处理)
|
||||
>>>>>>> v1.3
|
||||
R<?> checkResult = checkNurseBillingParam(regAdviceSaveParam);
|
||||
if (checkResult.getCode() != R.SUCCESS) {
|
||||
return checkResult;
|
||||
}
|
||||
|
||||
<<<<<<< HEAD
|
||||
// 3. 提取核心业务参数
|
||||
Long organizationId = regAdviceSaveParam.getOrganizationId(); // 患者住院科室ID
|
||||
List<RegAdviceSaveDto> allAdviceList = regAdviceSaveParam.getRegAdviceSaveList(); // 所有待处理医嘱列表
|
||||
@@ -354,27 +516,158 @@ public class NurseBillingAppService implements INurseBillingAppService {
|
||||
*/
|
||||
private R<?> checkNurseBillingParam(RegAdviceSaveParam regAdviceSaveParam) {
|
||||
// 1. 整体参数非空校验
|
||||
=======
|
||||
// 3. 提取核心业务参数:住院科室ID(优先入参,无则取登录用户所属科室)
|
||||
Long organizationId = regAdviceSaveParam.getOrganizationId() == null ? loginUser.getOrgId()
|
||||
: regAdviceSaveParam.getOrganizationId();
|
||||
// 待处理医嘱列表(含耗材、诊疗活动两种类型)
|
||||
List<RegAdviceSaveDto> allAdviceList = regAdviceSaveParam.getRegAdviceSaveList();
|
||||
|
||||
// 4. 医嘱分类:按类型拆分为耗材类和诊疗活动类(分别执行不同划价逻辑)
|
||||
List<RegAdviceSaveDto> deviceAdviceList = filterDeviceAdvice(allAdviceList);
|
||||
List<RegAdviceSaveDto> activityAdviceList = filterActivityAdvice(allAdviceList);
|
||||
|
||||
// 5. 生成全局唯一签发编码:关联同一批次划价的所有医嘱(便于追溯)
|
||||
String signCode = assignSeqUtil.getSeq(AssignSeqEnum.ADVICE_SIGN.getPrefix(), ADVICE_SIGN_SEQ_LENGTH);
|
||||
|
||||
// 6. 分类处理划价:耗材类、诊疗活动类分别执行对应逻辑
|
||||
if (!deviceAdviceList.isEmpty()) {
|
||||
handleAddDeviceBilling(deviceAdviceList, signCode, organizationId, curDate);
|
||||
}
|
||||
if (!activityAdviceList.isEmpty()) {
|
||||
handleAddActivityBilling(activityAdviceList, signCode, organizationId, curDate, startTime, authoredTime);
|
||||
}
|
||||
|
||||
// 7. 划价成功:返回统一成功提示(通过国际化工具类拼接提示信息)
|
||||
return R.ok(null, MessageUtils.createMessage(PromptMsgConstant.Common.M00002, new Object[] {"住院护士划价"}));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除住院划价记录(核心实现) 流程:参数校验 → 分类筛选医嘱 → 已收费状态校验 → 级联删除关联数据 → 返回结果 事务特性:所有删除操作原子化,任一环节失败整体回滚
|
||||
*
|
||||
* @return R<?> 删除结果响应
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public R<?> deleteInNurseBilling(List<AdviceBatchOpParam> paramList) {
|
||||
|
||||
// TODO 撤销前校验
|
||||
// 诊疗ids
|
||||
List<Long> activityRequestIds = Collections.emptyList();
|
||||
if (paramList != null && !paramList.isEmpty()) {
|
||||
activityRequestIds = paramList.stream().filter(e -> e != null // 避免单个参数对象为null
|
||||
&& ItemType.ACTIVITY.getValue().equals(e.getAdviceType()) && e.getRequestId() != null) // 避免requestId为null(按需添加)
|
||||
.map(AdviceBatchOpParam::getRequestId).collect(Collectors.toList());
|
||||
}
|
||||
// 耗材ids
|
||||
List<Long> deviceRequestIds = Collections.emptyList();
|
||||
if (paramList != null && !paramList.isEmpty()) {
|
||||
deviceRequestIds = paramList.stream().filter(e -> e != null // 避免单个参数对象为null
|
||||
&& ItemType.DEVICE.getValue().equals(e.getAdviceType()) && e.getRequestId() != null) // 避免requestId为null(按需添加)
|
||||
.map(AdviceBatchOpParam::getRequestId).collect(Collectors.toList());
|
||||
}
|
||||
this.handleDel(deviceRequestIds, SERVICE_TABLE_DEVICE);
|
||||
this.handleDel(activityRequestIds, SERVICE_TABLE_SERVICE);
|
||||
return R.ok("删除成功");
|
||||
}
|
||||
|
||||
/**
|
||||
* 住院患者医嘱查询
|
||||
*
|
||||
* @param inpatientAdviceParam 查询条件
|
||||
* @param pageNo 当前页码
|
||||
* @param pageSize 查询条数
|
||||
* @return 住院患者医
|
||||
*/
|
||||
@Override
|
||||
public R<?> getInNurseBillingPage(InpatientAdviceParam inpatientAdviceParam, Integer pageNo, Integer pageSize,
|
||||
LocalDateTime startTime, LocalDateTime endTime) {
|
||||
// 初始化查询参数
|
||||
String encounterIds = inpatientAdviceParam.getEncounterIds();
|
||||
inpatientAdviceParam.setEncounterIds(null);
|
||||
Integer exeStatus = inpatientAdviceParam.getExeStatus();
|
||||
inpatientAdviceParam.setExeStatus(null);
|
||||
// 构建查询条件
|
||||
QueryWrapper<InpatientAdviceParam> queryWrapper =
|
||||
HisQueryUtils.buildQueryWrapper(inpatientAdviceParam, null, null, null);
|
||||
|
||||
// 手动拼接住院患者id条件
|
||||
if (encounterIds != null && !encounterIds.isEmpty()) {
|
||||
List<Long> encounterIdList =
|
||||
Arrays.stream(encounterIds.split(CommonConstants.Common.COMMA)).map(Long::parseLong).toList();
|
||||
queryWrapper.in(CommonConstants.FieldName.EncounterId, encounterIdList);
|
||||
}
|
||||
// 患者医嘱分页列表
|
||||
Page<InpatientAdviceDto> inpatientAdvicePage =
|
||||
nurseBillingAppMapper.getInNurseBillingPage(new Page<>(pageNo, pageSize), queryWrapper,
|
||||
CommonConstants.TableName.WOR_DEVICE_REQUEST, CommonConstants.TableName.WOR_SERVICE_REQUEST,
|
||||
RequestStatus.DRAFT.getValue(), EncounterActivityStatus.ACTIVE.getValue(), LocationForm.BED.getValue(),
|
||||
ParticipantType.ADMITTING_DOCTOR.getCode(), AccountType.PERSONAL_CASH_ACCOUNT.getCode(),
|
||||
ChargeItemStatus.BILLABLE.getValue(), ChargeItemStatus.BILLED.getValue(),
|
||||
ChargeItemStatus.REFUNDED.getValue(), EncounterClass.IMP.getValue(),
|
||||
GenerateSource.NURSE_PRICING.getValue(), startTime, endTime);
|
||||
inpatientAdvicePage.getRecords().forEach(e -> {
|
||||
// 医嘱类型
|
||||
e.setTherapyEnum_enumText(EnumUtils.getInfoByValue(TherapyTimeType.class, e.getTherapyEnum()));
|
||||
// 请求状态
|
||||
e.setRequestStatus_enumText(EnumUtils.getInfoByValue(RequestStatus.class, e.getRequestStatus()));
|
||||
// 性别枚举
|
||||
e.setGenderEnum_enumText(EnumUtils.getInfoByValue(AdministrativeGender.class, e.getGenderEnum()));
|
||||
// 计算年龄
|
||||
if (e.getBirthDate() != null) {
|
||||
e.setAge(AgeCalculatorUtil.getAge(e.getBirthDate()));
|
||||
}
|
||||
});
|
||||
return R.ok(inpatientAdvicePage);
|
||||
}
|
||||
|
||||
// ======================== 入参校验方法 ========================
|
||||
|
||||
/**
|
||||
* 划价入参校验(通用校验逻辑) 校验规则:1. 参数非空 2. 住院科室ID非空 3. 医嘱列表非空 4. 隐含库房校验(耗材类单独校验) 校验失败直接返回错误响应,不进入后续业务逻辑
|
||||
*
|
||||
* @param regAdviceSaveParam 划价请求参数体
|
||||
* @return R<?> 校验结果:成功返回R.ok(),失败返回R.fail(错误信息)
|
||||
*/
|
||||
private R<?> checkNurseBillingParam(RegAdviceSaveParam regAdviceSaveParam) {
|
||||
// 1. 整体参数非空校验:请求体为null直接返回失败
|
||||
>>>>>>> v1.3
|
||||
if (regAdviceSaveParam == null) {
|
||||
return R.fail("划价请求失败:未获取到有效请求数据,请重新提交");
|
||||
}
|
||||
|
||||
<<<<<<< HEAD
|
||||
// 2. 核心字段非空校验:患者住院科室ID
|
||||
=======
|
||||
// 2. 核心字段非空校验:患者住院科室ID不能为空
|
||||
>>>>>>> v1.3
|
||||
if (regAdviceSaveParam.getOrganizationId() == null) {
|
||||
return R.fail("划价请求失败:患者住院科室信息缺失,请确认患者科室后重试");
|
||||
}
|
||||
|
||||
<<<<<<< HEAD
|
||||
// 3. 医嘱列表非空校验
|
||||
=======
|
||||
// 3. 医嘱列表非空校验:必须选择至少一个待划价项目
|
||||
>>>>>>> v1.3
|
||||
List<RegAdviceSaveDto> adviceList = regAdviceSaveParam.getRegAdviceSaveList();
|
||||
if (adviceList == null || adviceList.isEmpty()) {
|
||||
return R.fail("划价请求失败:未选择任何待划价项目,请添加医嘱后提交");
|
||||
}
|
||||
|
||||
<<<<<<< HEAD
|
||||
// 4. 临时耗材库存校验:仅校验非删除、非诊疗活动的临时医嘱
|
||||
=======
|
||||
// 4. 库存校验:临时注释(当前需求:划价不校验库存,实际发放时校验)
|
||||
// 若后续需要恢复库存校验,可解除以下注释
|
||||
/*
|
||||
>>>>>>> v1.3
|
||||
List<AdviceSaveDto> needCheckInventoryList = adviceList.stream()
|
||||
.filter(advice -> TherapyTimeType.TEMPORARY.getValue().equals(advice.getTherapyEnum())
|
||||
&& !DbOpType.DELETE.getCode().equals(advice.getDbOpType())
|
||||
&& !ItemType.ACTIVITY.getValue().equals(advice.getAdviceType()))
|
||||
.collect(Collectors.toList());
|
||||
<<<<<<< HEAD
|
||||
|
||||
// 调用工具类校验库存,返回非null则表示库存不足
|
||||
String inventoryTip = adviceUtils.checkInventory(new ArrayList<>(needCheckInventoryList));
|
||||
@@ -382,10 +675,19 @@ public class NurseBillingAppService implements INurseBillingAppService {
|
||||
// 库存提示已包含具体耗材名称和短缺数量,直接拼接操作建议
|
||||
return R.fail("划价失败:" + inventoryTip + ",请联系库房确认库存或调整申请数量");
|
||||
}
|
||||
=======
|
||||
|
||||
String inventoryTip = adviceUtils.checkInventory(new ArrayList<>(needCheckInventoryList));
|
||||
if (inventoryTip != null) {
|
||||
return R.fail("划价失败:" + inventoryTip + ",请联系库房确认库存或调整申请数量");
|
||||
}
|
||||
*/
|
||||
>>>>>>> v1.3
|
||||
|
||||
// 所有校验通过
|
||||
return R.ok();
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
|
||||
// ======================== 以下方法原代码未实现,保留接口方法签名 ========================
|
||||
|
||||
@@ -425,4 +727,507 @@ public class NurseBillingAppService implements INurseBillingAppService {
|
||||
// 功能:根据请求ID查询订单划价(待实现)
|
||||
return null;
|
||||
}
|
||||
=======
|
||||
// ======================== 医嘱分类工具方法 ========================
|
||||
|
||||
/**
|
||||
* 筛选耗材类医嘱 筛选规则:按医嘱类型枚举(ItemType.DEVICE)匹配,仅保留耗材相关医嘱
|
||||
*
|
||||
* @param allAdviceList 所有待处理医嘱列表
|
||||
* @return List<RegAdviceSaveDto> 筛选后的耗材类医嘱列表
|
||||
*/
|
||||
private List<RegAdviceSaveDto> filterDeviceAdvice(List<RegAdviceSaveDto> allAdviceList) {
|
||||
return allAdviceList.stream().filter(advice -> ItemType.DEVICE.getValue().equals(advice.getAdviceType()))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 筛选诊疗活动类医嘱 筛选规则:按医嘱类型枚举(ItemType.ACTIVITY)匹配,仅保留诊疗活动相关医嘱
|
||||
*
|
||||
* @param allAdviceList 所有待处理医嘱列表
|
||||
* @return List<RegAdviceSaveDto> 筛选后的诊疗活动类医嘱列表
|
||||
*/
|
||||
private List<RegAdviceSaveDto> filterActivityAdvice(List<RegAdviceSaveDto> allAdviceList) {
|
||||
return allAdviceList.stream().filter(advice -> ItemType.ACTIVITY.getValue().equals(advice.getAdviceType()))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
// ======================== 耗材类划价处理 ========================
|
||||
|
||||
/**
|
||||
* 处理耗材类医嘱划价(核心子流程) 流程:筛选临时耗材 → 校验发放库房 → 生成耗材请求 → 生成执行记录 → 生成耗材发放 → 生成费用项 特殊规则:临时耗材划价不校验库存、不预减库存(仅记录发放需求,实际发放时扣库)
|
||||
*
|
||||
* @param deviceAdviceList 耗材类医嘱列表(已筛选)
|
||||
* @param signCode 全局签发编码(关联同一批次划价)
|
||||
* @param organizationId 患者住院科室ID
|
||||
* @param curDate 当前操作时间(用于填充创建时间/执行时间)
|
||||
*/
|
||||
private void handleAddDeviceBilling(List<RegAdviceSaveDto> deviceAdviceList, String signCode, Long organizationId,
|
||||
Date curDate) {
|
||||
// 1. 筛选临时类型耗材:仅处理临时医嘱(TherapyTimeType.TEMPORARY),且请求ID不为空
|
||||
List<AdviceSaveDto> tempDeviceList = deviceAdviceList.stream().collect(Collectors.toList());
|
||||
|
||||
// 2. 校验发放库房:必须指定耗材发放库房(locationId),否则抛出业务异常
|
||||
if (tempDeviceList.stream().anyMatch(t -> t.getLocationId() == null)) {
|
||||
throw new ServiceException("耗材划价失败:发放库房为空,请重新选择");
|
||||
}
|
||||
|
||||
// 3. 循环处理每个临时耗材医嘱(逐条生成关联数据)
|
||||
for (AdviceSaveDto adviceDto : tempDeviceList) {
|
||||
// 3.1 生成耗材请求记录(WOR_DEVICE_REQUEST):状态设为激活,来源标记为护士划价
|
||||
DeviceRequest deviceRequest = buildDeviceRequest(adviceDto, curDate);
|
||||
iDeviceRequestService.saveOrUpdate(deviceRequest);
|
||||
|
||||
// 3.2 生成医嘱执行记录(CLIN_PROCEDURE):记录执行状态、执行科室、执行时间等
|
||||
Long procedureId = this.addProcedureRecord(deviceRequest.getEncounterId(), // 就诊ID
|
||||
deviceRequest.getPatientId(), // 患者ID
|
||||
deviceRequest.getId(), // 耗材请求ID(关联执行记录与请求)
|
||||
SERVICE_TABLE_DEVICE, // 关联表名(耗材请求表)
|
||||
EventStatus.COMPLETED, // 执行状态:已完成
|
||||
ProcedureCategory.INPATIENT_NURSE_ADVICE, // 执行种类:住院护士医嘱
|
||||
deviceRequest.getLocationId(), // 执行位置(发放库房)
|
||||
curDate, null, null // 当前时间为执行时间,组号/取消ID为空
|
||||
);
|
||||
|
||||
// 3.3 生成耗材发放记录(WOR_DEVICE_DISPENSE):状态设为待发放,关联执行记录
|
||||
Long dispenseId = iDeviceDispenseService.generateDeviceDispense(deviceRequest, procedureId,
|
||||
deviceRequest.getLocationId(), curDate);
|
||||
|
||||
// 3.4 生成费用项记录(ADM_CHARGE_ITEM):关联耗材请求、发放记录、执行记录,状态设为待结算
|
||||
ChargeItem chargeItem = buildChargeItem(adviceDto, deviceRequest.getBusNo(), deviceRequest.getId(),
|
||||
SERVICE_TABLE_DEVICE, PRODUCT_TABLE_DEVICE, curDate, procedureId, dispenseId, WOR_DEVICE_DISPENSE);
|
||||
iChargeItemService.saveOrUpdate(chargeItem);
|
||||
}
|
||||
}
|
||||
|
||||
// ======================== 诊疗活动类划价处理 ========================
|
||||
|
||||
/**
|
||||
* 处理诊疗活动类医嘱划价(核心子流程) 流程:生成服务请求 → 生成执行记录 → 生成费用项 → 处理诊疗子项(如有) 特殊规则:诊疗活动可能包含子项(如套餐类活动),需递归处理子项划价
|
||||
*
|
||||
* @param activityAdviceList 诊疗活动类医嘱列表(已筛选)
|
||||
* @param signCode 全局签发编码(关联同一批次划价)
|
||||
* @param organizationId 患者住院科室ID
|
||||
* @param curDate 当前操作时间
|
||||
* @param startTime 医嘱开始时间
|
||||
* @param authoredTime 医嘱签发时间
|
||||
*/
|
||||
private void handleAddActivityBilling(List<RegAdviceSaveDto> activityAdviceList, String signCode,
|
||||
Long organizationId, Date curDate, Date startTime, Date authoredTime) {
|
||||
// 循环处理每个诊疗活动医嘱
|
||||
for (AdviceSaveDto adviceDto : activityAdviceList) {
|
||||
// 1. 生成诊疗活动请求记录(WOR_SERVICE_REQUEST):状态设为激活,来源标记为护士划价
|
||||
ServiceRequest serviceRequest =
|
||||
this.buildActivityRequest(adviceDto, signCode, organizationId, curDate, startTime, authoredTime);
|
||||
|
||||
// 2. 生成医嘱执行记录(CLIN_PROCEDURE):关联服务请求,记录执行状态
|
||||
Long procedureId = this.addProcedureRecord(serviceRequest.getEncounterId(), // 就诊ID
|
||||
serviceRequest.getPatientId(), // 患者ID
|
||||
serviceRequest.getId(), // 服务请求ID(关联执行记录与请求)
|
||||
SERVICE_TABLE_SERVICE, // 关联表名(服务请求表)
|
||||
EventStatus.COMPLETED, // 执行状态:已完成
|
||||
ProcedureCategory.INPATIENT_NURSE_ADVICE, // 执行种类:住院护士医嘱
|
||||
serviceRequest.getLocationId(), // 执行位置(执行科室)
|
||||
curDate, null, null // 当前时间为执行时间,组号/取消ID为空
|
||||
);
|
||||
|
||||
// 3. 生成费用项记录(ADM_CHARGE_ITEM):关联服务请求、执行记录,状态设为待结算
|
||||
ChargeItem chargeItem = buildChargeItem(adviceDto, serviceRequest.getBusNo(), serviceRequest.getId(),
|
||||
SERVICE_TABLE_SERVICE, PRODUCT_TABLE_ACTIVITY, curDate, procedureId, null, null);
|
||||
iChargeItemService.saveOrUpdate(chargeItem);
|
||||
|
||||
// 4. 处理诊疗子项(如活动包含子项配置,递归生成子项的划价数据)
|
||||
this.buidActivityRequestChild(serviceRequest, chargeItem.getId(), adviceDto, organizationId);
|
||||
}
|
||||
}
|
||||
|
||||
// ======================== 执行记录工具方法 ========================
|
||||
|
||||
/**
|
||||
* 生成医嘱执行记录(通用方法,支持耗材/诊疗活动两种类型) 功能:调用执行记录服务,创建CLIN_PROCEDURE表记录,关联请求数据与执行信息
|
||||
*
|
||||
* @param encounterId 就诊ID(关联患者就诊记录)
|
||||
* @param patientId 患者ID(关联患者基本信息)
|
||||
* @param requestId 请求ID(关联耗材/服务请求主记录)
|
||||
* @param requestTable 关联表名(标记是耗材请求还是服务请求)
|
||||
* @param eventStatus 执行状态(如已完成、待执行等)
|
||||
* @param procedureCategory 执行种类(如住院护士医嘱、医生医嘱等)
|
||||
* @param locationId 执行位置(执行科室/发放库房ID)
|
||||
* @param exeDate 执行时间
|
||||
* @param groupId 组号(批量执行时用于关联同一组医嘱)
|
||||
* @param refundId 取消执行ID(取消执行时关联原执行记录)
|
||||
* @return Long 执行记录ID(CLIN_PROCEDURE表主键)
|
||||
*/
|
||||
private Long addProcedureRecord(Long encounterId, Long patientId, Long requestId, String requestTable,
|
||||
EventStatus eventStatus, ProcedureCategory procedureCategory, Long locationId, Date exeDate, Long groupId,
|
||||
Long refundId) {
|
||||
// 调用执行记录服务创建记录,返回执行记录主键ID
|
||||
return iProcedureService.addProcedureRecord(encounterId, patientId, requestId, requestTable, eventStatus,
|
||||
procedureCategory, locationId, exeDate, exeDate, groupId, refundId);
|
||||
}
|
||||
|
||||
// ======================== 实体构建工具方法(请求/费用项)========================
|
||||
|
||||
/**
|
||||
* 构建耗材请求实体(DeviceRequest) 功能:将医嘱DTO参数映射为耗材请求实体,填充默认配置(状态、业务编号、来源等)
|
||||
*
|
||||
* @param adviceDto 耗材医嘱DTO(含请求参数:数量、单位、耗材ID等)
|
||||
* @param curDate 当前操作时间
|
||||
* @return DeviceRequest 构建完成的耗材请求实体(可直接保存)
|
||||
*/
|
||||
private DeviceRequest buildDeviceRequest(AdviceSaveDto adviceDto, Date curDate) {
|
||||
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||
DeviceRequest deviceRequest = new DeviceRequest();
|
||||
|
||||
// 基础配置:主键(新增为null,修改为已有ID)、状态、业务编号
|
||||
deviceRequest.setId(adviceDto.getRequestId());
|
||||
// 业务编号:按日生成,前缀+4位序列号(确保每日唯一)
|
||||
deviceRequest
|
||||
.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.DEVICE_RES_NO.getPrefix(), DEVICE_RES_NO_SEQ_LENGTH));
|
||||
// deviceRequest.setPrescriptionNo(null);//处方号
|
||||
// deviceRequest.setActivityId(null);//诊疗ID
|
||||
// deviceRequest.setPackageId(null);//组套id
|
||||
// deviceRequest.setIntentCode(null); // 请求意图
|
||||
deviceRequest.setCategoryEnum(adviceDto.getCategoryEnum()); // 请求类型(枚举,如常规请求)
|
||||
// deviceRequest.setPerformFlag(null);//优先级
|
||||
// deviceRequest.setPriorityEnum(null);//是否停止执行
|
||||
// deviceRequest.setGroupNo(null);//分组编号
|
||||
// deviceRequest.setDeviceTypeCode(null);//器材类型
|
||||
deviceRequest.setQuantity(adviceDto.getQuantity()); // 耗材请求数量
|
||||
deviceRequest.setUnitCode(adviceDto.getUnitCode()); // 单位编码(如"个"、"盒")
|
||||
deviceRequest.setLotNumber(adviceDto.getLotNumber()); // 产品批号(可选,耗材批次管理)
|
||||
deviceRequest.setStatusEnum(RequestStatus.COMPLETED.getValue()); // 状态:已完成(划价即生效)
|
||||
deviceRequest.setDeviceDefId(adviceDto.getAdviceDefinitionId()); // 耗材定义ID(关联ADM_DEVICE_DEFINITION)
|
||||
// deviceRequest.setDeviceSpecifications(null)//器材规格
|
||||
deviceRequest.setRequesterId(
|
||||
adviceDto.getPractitionerId() == null ? loginUser.getPractitionerId() : adviceDto.getPractitionerId());// 请求发起人
|
||||
deviceRequest
|
||||
.setOrgId(adviceDto.getFounderOrgId() == null ? loginUser.getOrgId() : adviceDto.getFounderOrgId());// 请求发起的科室
|
||||
deviceRequest.setLocationId(adviceDto.getLocationId());// 默认器材房
|
||||
deviceRequest.setPerformLocation(adviceDto.getLocationId()); // 发放库房ID(关联耗材发放位置)
|
||||
deviceRequest.setEncounterId(adviceDto.getEncounterId()); // 就诊ID(关联患者本次住院记录)
|
||||
deviceRequest.setPatientId(adviceDto.getPatientId()); // 患者ID(关联患者信息)
|
||||
// deviceRequest.setRateCode(null);//用药频次
|
||||
// deviceRequest.setUseTime();//预计使用时间
|
||||
// deviceRequest.setUseStartTime();//预计使用时间
|
||||
// deviceRequest.setUseEndTime();//预计使用结束时间
|
||||
// deviceRequest.setUseTiming();//预计使用周期时间
|
||||
deviceRequest.setReqAuthoredTime(curDate); // 请求开始时间(当前操作时间)
|
||||
// deviceRequest.setPerformerEnum();//执行人类型
|
||||
// deviceRequest.setPerformerId();//执行人
|
||||
// deviceRequest.setPerformOrgId();//执行科室
|
||||
// deviceRequest.setConditionIdJson(); // 相关诊断
|
||||
// deviceRequest.setObservationIdJson();//相关观测
|
||||
// deviceRequest.setAsNeedFlag();//是否可以按需给出
|
||||
// deviceRequest.setAsNeedReason();//按需使用原因
|
||||
// deviceRequest.setContractCode();//合同id
|
||||
// deviceRequest.setSupportInfo();//支持用药信息
|
||||
// deviceRequest.setRequesterId();//退药id
|
||||
deviceRequest.setContentJson(adviceDto.getContentJson());// 请求内容json
|
||||
// deviceRequest.setYbClassEnum();//类别医保编码
|
||||
// deviceRequest.setTraceNo()//追溯码
|
||||
deviceRequest.setConditionId(adviceDto.getConditionId());// 诊断id
|
||||
deviceRequest.setEncounterDiagnosisId(adviceDto.getEncounterDiagnosisId());// 就诊诊断id
|
||||
// deviceRequest.setBasedOnTable();//请求基于什么
|
||||
deviceRequest.setBasedOnId(adviceDto.getBasedOnId());// 请求基于什么的ID
|
||||
deviceRequest.setGenerateSourceEnum(GenerateSource.NURSE_PRICING.getValue()); // 生成来源:护士划价
|
||||
return deviceRequest;
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建诊疗活动请求实体(ServiceRequest) 功能:将诊疗活动医嘱DTO映射为服务请求实体,填充默认配置和业务参数
|
||||
*
|
||||
* @param activityDto 诊疗活动医嘱DTO(含活动ID、数量、执行科室等)
|
||||
* @param signCode 全局签发编码(关联同一批次划价)
|
||||
* @param organizationId 住院科室ID
|
||||
* @param curDate 当前操作时间
|
||||
* @param startTime 医嘱开始时间
|
||||
* @param authoredTime 医嘱签发时间
|
||||
* @return ServiceRequest 构建完成的诊疗活动请求实体(已保存到数据库)
|
||||
*/
|
||||
private ServiceRequest buildActivityRequest(AdviceSaveDto activityDto, String signCode, Long organizationId,
|
||||
Date curDate, Date startTime, Date authoredTime) {
|
||||
ServiceRequest serviceRequest = new ServiceRequest();
|
||||
|
||||
// 基础配置:主键、状态、业务编号、签发编码
|
||||
serviceRequest.setId(activityDto.getRequestId()); // 主键ID(新增为null,修改为已有ID)
|
||||
serviceRequest.setStatusEnum(RequestStatus.ACTIVE.getValue()); // 状态:激活(划价即生效)
|
||||
serviceRequest.setAuthoredTime(authoredTime); // 医嘱签发时间
|
||||
serviceRequest.setSignCode(signCode); // 全局签发编码(关联同一批次划价的医嘱)
|
||||
serviceRequest.setOccurrenceStartTime(startTime); // 医嘱开始执行时间
|
||||
// 业务编号:按日生成,前缀+4位序列号(每日唯一)
|
||||
serviceRequest.setBusNo(assignSeqUtil.getSeqByDay(AssignSeqEnum.SERVICE_RES_NO.getPrefix(), 4));
|
||||
serviceRequest.setGenerateSourceEnum(GenerateSource.NURSE_PRICING.getValue()); // 生成来源:护士划价
|
||||
|
||||
// 业务属性映射:从DTO提取核心参数
|
||||
serviceRequest.setQuantity(activityDto.getQuantity()); // 请求数量(如诊疗活动执行次数)
|
||||
serviceRequest.setUnitCode(activityDto.getUnitCode()); // 单位编码(如"次"、"疗程")
|
||||
serviceRequest.setCategoryEnum(activityDto.getCategoryEnum()); // 请求类型(枚举,如常规诊疗)
|
||||
serviceRequest.setTherapyEnum(activityDto.getTherapyEnum()); // 治疗类型(如临时、长期,前端传入)
|
||||
serviceRequest.setActivityId(activityDto.getAdviceDefinitionId()); // 诊疗活动定义ID(关联WOR_ACTIVITY_DEFINITION)
|
||||
serviceRequest.setPatientId(activityDto.getPatientId()); // 患者ID(关联患者信息)
|
||||
serviceRequest.setRequesterId(activityDto.getPractitionerId()); // 开方医生ID(诊疗活动的开单医生)
|
||||
serviceRequest.setEncounterId(activityDto.getEncounterId()); // 就诊ID(关联本次住院记录)
|
||||
serviceRequest.setAuthoredTime(curDate); // 请求签发时间(当前操作时间)
|
||||
serviceRequest.setOrgId(activityDto.getPositionId()); // 执行科室ID(诊疗活动的执行科室)
|
||||
serviceRequest.setContentJson(activityDto.getContentJson()); // 扩展信息JSON(额外配置)
|
||||
serviceRequest.setYbClassEnum(activityDto.getYbClassEnum()); // 医保类别编码(关联医保报销)
|
||||
serviceRequest.setConditionId(activityDto.getConditionId()); // 诊断ID(关联患者诊断)
|
||||
serviceRequest.setEncounterDiagnosisId(activityDto.getEncounterDiagnosisId()); // 就诊诊断ID(本次就诊具体诊断)
|
||||
|
||||
// 保存诊疗活动请求记录到数据库
|
||||
iServiceRequestService.saveOrUpdate(serviceRequest);
|
||||
return serviceRequest;
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理诊疗活动子项划价(如诊疗活动是套餐,包含多个子项) 功能:解析诊疗活动的子项配置JSON,递归生成子项的划价数据(请求、执行记录、费用项)
|
||||
*
|
||||
* @param serviceRequest 父诊疗活动请求实体(关联子项)
|
||||
* @param chargeItemId 父诊疗活动的费用项ID(关联子项费用)
|
||||
* @param activityDto 诊疗活动医嘱DTO(含子项配置JSON)
|
||||
* @param organizationId 住院科室ID
|
||||
*/
|
||||
private void buidActivityRequestChild(ServiceRequest serviceRequest, Long chargeItemId, AdviceSaveDto activityDto,
|
||||
Long organizationId) {
|
||||
// 1. 查询诊疗活动定义信息(获取子项配置JSON)
|
||||
ActivityDefinition activityDefinition = iActivityDefinitionService.getById(activityDto.getAdviceDefinitionId());
|
||||
String childrenJson = activityDefinition.getChildrenJson();
|
||||
|
||||
// 2. 若存在子项配置,构建子项参数并调用工具类处理
|
||||
if (childrenJson != null) {
|
||||
ActivityChildrenJsonParams activityChildrenJsonParams = new ActivityChildrenJsonParams();
|
||||
// 子项治疗类型:默认临时(与父项一致)
|
||||
activityChildrenJsonParams.setTherapyEnum(TherapyTimeType.TEMPORARY.getValue());
|
||||
activityChildrenJsonParams.setPatientId(serviceRequest.getPatientId()); // 患者ID(继承父项)
|
||||
activityChildrenJsonParams.setEncounterId(serviceRequest.getEncounterId()); // 就诊ID(继承父项)
|
||||
activityChildrenJsonParams.setAccountId(activityDto.getAccountId()); // 患者账户ID(关联费用结算)
|
||||
activityChildrenJsonParams.setChargeItemId(chargeItemId); // 父费用项ID(关联子项费用)
|
||||
activityChildrenJsonParams.setParentId(serviceRequest.getId()); // 父诊疗请求ID(关联子项与父项)
|
||||
activityChildrenJsonParams.setEncounterDiagnosisId(serviceRequest.getEncounterDiagnosisId());
|
||||
// 调用工具类处理子项:递归生成子项的请求、执行记录、费用项
|
||||
adviceUtils.handleActivityChild(childrenJson, organizationId, activityChildrenJsonParams);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建费用项实体(ChargeItem) 功能:关联请求记录(耗材/诊疗)与费用信息,生成待结算的费用项(ADM_CHARGE_ITEM表) 通用性:支持耗材、诊疗活动两种类型的费用项构建
|
||||
*
|
||||
* @param adviceDto 医嘱DTO(含费用相关参数:单价、总价等)
|
||||
* @param requestBusNo 关联请求的业务编号(耗材/服务请求的busNo)
|
||||
* @param requestId 关联请求的ID(耗材/服务请求的主键)
|
||||
* @param serviceTable 关联服务表名(标记是耗材请求还是服务请求)
|
||||
* @param productTable 关联产品表名(标记产品类型:耗材/诊疗活动)
|
||||
* @param curDate 当前操作时间(费用开立时间)
|
||||
* @param procedureId 执行记录ID(关联CLIN_PROCEDURE表)
|
||||
* @param dispenseId 发放记录ID(关联耗材发放表,诊疗活动为null)
|
||||
* @param dispenseTable 发放表名(耗材为WOR_DEVICE_DISPENSE,诊疗活动为null)
|
||||
* @return ChargeItem 构建完成的费用项实体(可直接保存)
|
||||
*/
|
||||
private ChargeItem buildChargeItem(AdviceSaveDto adviceDto, String requestBusNo, Long requestId,
|
||||
String serviceTable, String productTable, Date curDate, Long procedureId, Long dispenseId,
|
||||
String dispenseTable) {
|
||||
ChargeItem chargeItem = new ChargeItem();
|
||||
// TODO1、是否需跨批次 2、金额 精确到小数点后6位 、数量 计算
|
||||
// 基础配置:主键、状态、业务编号
|
||||
chargeItem.setId(adviceDto.getChargeItemId()); // 费用项ID(新增为null,修改为已有ID)
|
||||
chargeItem.setStatusEnum(ChargeItemStatus.BILLABLE.getValue()); // 状态:待结算(未收费)
|
||||
// 业务编号:费用项前缀+关联请求的业务编号(确保与请求一一对应,便于追溯)
|
||||
chargeItem.setBusNo(CHARGE_ITEM_BUS_NO_PREFIX.concat(requestBusNo));
|
||||
chargeItem.setGenerateSourceEnum(GenerateSource.NURSE_PRICING.getValue()); // 生成来源:护士划价
|
||||
|
||||
// 业务属性映射:患者、就诊、定价相关信息
|
||||
chargeItem.setPatientId(adviceDto.getPatientId()); // 患者ID(关联患者)
|
||||
chargeItem.setContextEnum(adviceDto.getAdviceType()); // 费用类型(与医嘱类型一致:耗材/诊疗)
|
||||
chargeItem.setEncounterId(adviceDto.getEncounterId()); // 就诊ID(关联本次住院)
|
||||
chargeItem.setDefinitionId(adviceDto.getDefinitionId()); // 费用定价ID(关联定价规则)
|
||||
chargeItem.setDefDetailId(adviceDto.getDefinitionDetailId()); // 定价子表ID(明细定价,如规格对应的单价)
|
||||
chargeItem.setEntererId(adviceDto.getPractitionerId()); // 开立人ID(开方医生/护士)
|
||||
chargeItem.setRequestingOrgId(SecurityUtils.getLoginUser().getOrgId()); // 开立科室ID(当前登录用户科室)
|
||||
chargeItem.setEnteredDate(curDate); // 开立时间(当前操作时间)
|
||||
chargeItem.setServiceTable(serviceTable); // 关联服务表名(标记数据源)
|
||||
chargeItem.setServiceId(requestId); // 关联服务ID(耗材/服务请求的主键)
|
||||
chargeItem.setProductTable(productTable); // 关联产品表名(标记产品类型)
|
||||
chargeItem.setProductId(adviceDto.getAdviceDefinitionId()); // 产品ID(耗材/诊疗活动定义ID)
|
||||
chargeItem.setAccountId(adviceDto.getAccountId()); // 患者账户ID(关联费用结算账户)
|
||||
chargeItem.setConditionId(adviceDto.getConditionId()); // 诊断ID(关联患者诊断)
|
||||
chargeItem.setEncounterDiagnosisId(adviceDto.getEncounterDiagnosisId()); // 就诊诊断ID(本次就诊具体诊断)
|
||||
chargeItem.setProductId(procedureId); // 执行记录ID(关联执行记录)
|
||||
chargeItem.setDispenseId(dispenseId); // 发放记录ID(耗材专属,诊疗活动为null)
|
||||
chargeItem.setDispenseTable(dispenseTable); // 发放表名(耗材专属,诊疗活动为null)
|
||||
|
||||
// 费用核心属性:数量、单位、单价、总价(与医嘱保持一致)
|
||||
chargeItem.setQuantityValue(adviceDto.getQuantity()); // 数量(与请求数量一致)
|
||||
chargeItem.setQuantityUnit(adviceDto.getUnitCode()); // 单位(与请求单位一致)
|
||||
chargeItem.setUnitPrice(adviceDto.getUnitPrice()); // 单价(从DTO传入,已定价)
|
||||
chargeItem.setTotalPrice(adviceDto.getTotalPrice()); // 总价(数量×单价,DTO已计算,避免重复计算)
|
||||
|
||||
return chargeItem;
|
||||
}
|
||||
|
||||
// ======================== 耗材删除相关方法 ========================
|
||||
|
||||
/**
|
||||
* 处理耗材删除逻辑(级联删除关联数据) 核心规则:已收费的耗材项目不允许删除,未收费项目级联删除关联数据 级联删除顺序:耗材请求表 → 耗材发放表 → 费用项表
|
||||
*
|
||||
* @param requestIds 待删除的耗材医嘱列表(可为null)
|
||||
* @param serviceTable 关联服务表名(此处为耗材请求表)
|
||||
*/
|
||||
private void handleDel(List<Long> requestIds, String serviceTable) {
|
||||
// 空列表直接返回,避免无效循环
|
||||
if (requestIds == null || requestIds.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
// 1. 校验:待删除项是否已收费,已收费则抛出异常阻止删除
|
||||
checkDeletedDeviceChargeStatus(requestIds);
|
||||
// 软删除执行记录
|
||||
List<Procedure> procedureList = iProcedureService.listByIds(requestIds);
|
||||
List<Long> procedureIds = procedureList.stream().filter(Objects::nonNull) // 过滤掉null的Procedure对象
|
||||
.map(Procedure::getId).filter(Objects::nonNull) // 过滤掉id为null的记录(按需添加)
|
||||
.collect(Collectors.toList());
|
||||
// 批量删除执行记录
|
||||
iProcedureService.removeBatchByIds(procedureIds);
|
||||
|
||||
// 不想循环删除
|
||||
for (Long requestId : requestIds) {
|
||||
if (serviceTable.equals(SERVICE_TABLE_DEVICE)) {
|
||||
// 删除耗材请求主记录(WOR_DEVICE_REQUEST)
|
||||
iDeviceRequestService.removeById(requestId);
|
||||
// 删除关联的耗材发放记录(WOR_DEVICE_DISPENSE)
|
||||
iDeviceDispenseService.deleteDeviceDispense(requestId);
|
||||
}
|
||||
if (serviceTable.equals(SERVICE_TABLE_SERVICE)) {
|
||||
// 删除耗材请求主记录(WOR_DEVICE_REQUEST)
|
||||
iServiceRequestService.removeById(requestId);
|
||||
}
|
||||
// 删除关联的费用项记录(ADM_CHARGE_ITEM,按服务表+服务ID关联)
|
||||
iChargeItemService.deleteByServiceTableAndId(serviceTable, requestId);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验待删除耗材的费用状态(防止删除已收费项目) 逻辑:查询待删除耗材对应的费用项,若存在"已收费"状态则抛出业务异常
|
||||
*
|
||||
* @param requestIds 待删除的耗材请求ID列表
|
||||
*/
|
||||
private void checkDeletedDeviceChargeStatus(List<Long> requestIds) {
|
||||
if (requestIds.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 1. 查询待删除耗材对应的费用项列表
|
||||
List<ChargeItem> chargeItemList = iChargeItemService.getChargeItemInfoByReqId(requestIds);
|
||||
if (chargeItemList == null || chargeItemList.isEmpty()) {
|
||||
return; // 无关联费用项,允许删除
|
||||
}
|
||||
|
||||
// 2. 校验是否存在已收费项(状态为BILLED)
|
||||
boolean hasBilledItem =
|
||||
chargeItemList.stream().anyMatch(ci -> ChargeItemStatus.BILLED.getValue().equals(ci.getStatusEnum()));
|
||||
if (hasBilledItem) {
|
||||
throw new ServiceException("删除失败:部分项目已完成收费(结算),不支持直接删除,请联系收费人员处理后重试");
|
||||
}
|
||||
}
|
||||
|
||||
// ======================== 未实现接口方法(保留签名,待扩展)========================
|
||||
|
||||
/**
|
||||
* 新增订单划价(待实现) 功能:针对订单类型的划价(如患者自主购买耗材/服务),生成对应的费用项
|
||||
*
|
||||
* @return R<?> 划价结果响应
|
||||
*/
|
||||
@Override
|
||||
public R<?> addOrderBilling() {
|
||||
// 待实现:需接收订单相关参数,构建订单划价逻辑(类似耗材/诊疗划价,差异在于来源类型)
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除订单划价(待实现) 功能:删除未收费的订单划价记录,级联删除关联数据
|
||||
*
|
||||
* @return R<?> 删除结果响应
|
||||
*/
|
||||
@Override
|
||||
public R<?> deleteOrderBilling() {
|
||||
// 待实现:类似住院划价删除逻辑,需校验订单划价的费用状态
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改订单划价(待实现) 功能:支持修改未收费订单划价的数量、单价等信息,同步更新费用项
|
||||
*
|
||||
* @return R<?> 修改结果响应
|
||||
*/
|
||||
@Override
|
||||
public R<?> updateOrderBilling() {
|
||||
// 待实现:需接收修改后的订单划价参数,更新请求记录和费用项
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 费用明细查询
|
||||
*
|
||||
* @param costDetailSearchParam 查询条件
|
||||
* @param request request请求
|
||||
* @return 住院患者费用明细
|
||||
*/
|
||||
@Override
|
||||
public R<List<CostDetailDto>> getCostDetails(CostDetailSearchParam costDetailSearchParam,
|
||||
HttpServletRequest request) {
|
||||
List<Long> encounterIds = costDetailSearchParam.getEncounterIds();
|
||||
if (encounterIds == null || encounterIds.isEmpty()) {
|
||||
return R.fail("就诊ID不能为空");
|
||||
}
|
||||
costDetailSearchParam.setEncounterIds(null);
|
||||
QueryWrapper<CostDetailSearchParam> queryWrapper =
|
||||
HisQueryUtils.buildQueryWrapper(costDetailSearchParam, null, null, request);
|
||||
queryWrapper.in(CommonConstants.FieldName.EncounterId, encounterIds);
|
||||
List<CostDetailDto> list = iChargeItemService.getCostDetails(queryWrapper, ChargeItemStatus.BILLABLE.getValue(),
|
||||
ChargeItemStatus.BILLED.getValue(), ChargeItemStatus.REFUNDED.getValue(),
|
||||
EncounterActivityStatus.ACTIVE.getValue(), LocationForm.BED.getValue(),
|
||||
ParticipantType.ADMITTING_DOCTOR.getCode(), AccountType.PERSONAL_CASH_ACCOUNT.getCode());
|
||||
return R.ok(list);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param costDetailSearchParam 查询条件
|
||||
* @param request request请求
|
||||
* @param response response响应
|
||||
*/
|
||||
@Override
|
||||
public void makeExcelFile(CostDetailSearchParam costDetailSearchParam, HttpServletRequest request,
|
||||
HttpServletResponse response) {
|
||||
R<List<CostDetailDto>> costDetails = getCostDetails(costDetailSearchParam, request);
|
||||
if (costDetails.getData() != null) {
|
||||
List<CostDetailDto> dataList = costDetails.getData();
|
||||
// 设置执行科室
|
||||
dataList.forEach(costDetailDto -> {
|
||||
Long orgId = costDetailDto.getOrgId();
|
||||
costDetailDto.setOrgName(organizationService.getById(orgId).getName());
|
||||
});
|
||||
// 根据EncounterId分组
|
||||
Map<Long, List<CostDetailDto>> map =
|
||||
dataList.stream().collect(Collectors.groupingBy(CostDetailDto::getEncounterId));
|
||||
map.forEach((key, value) -> {
|
||||
// 新加一条小计
|
||||
value.add(new CostDetailDto().setEncounterId(key).setChargeName("小计").setTotalPrice(
|
||||
value.stream().map(CostDetailDto::getTotalPrice).reduce(BigDecimal.ZERO, BigDecimal::add)));
|
||||
});
|
||||
// 收集要导出的数据
|
||||
List<CostDetailExcelOutDto> excelOutList =
|
||||
map.entrySet().stream().map(entry -> new CostDetailExcelOutDto(entry.getKey(), entry.getValue(),
|
||||
entry.getValue().get(0).getPatientName())).toList();
|
||||
try {
|
||||
// 住院记账-费用明细 导出
|
||||
NewExcelUtil<CostDetailExcelOutDto> util = new NewExcelUtil<>(CostDetailExcelOutDto.class);
|
||||
util.exportExcel(response, excelOutList, CommonConstants.SheetName.COST_DETAILS);
|
||||
} catch (Exception e) {
|
||||
throw new NonCaptureException(StringUtils.format("导出excel失败"), e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
>>>>>>> v1.3
|
||||
}
|
||||
@@ -8,16 +8,26 @@ import com.core.common.utils.AssignSeqUtil;
|
||||
import com.core.common.utils.DateUtils;
|
||||
import com.core.common.utils.SecurityUtils;
|
||||
import com.openhis.common.constant.CommonConstants;
|
||||
<<<<<<< HEAD
|
||||
import com.openhis.common.enums.AssignSeqEnum;
|
||||
import com.openhis.common.enums.PublicationStatus;
|
||||
import com.openhis.common.utils.HisQueryUtils;
|
||||
=======
|
||||
import com.openhis.common.enums.*;
|
||||
import com.openhis.common.utils.HisQueryUtils;
|
||||
import com.openhis.web.common.appservice.impl.CommonServiceImpl;
|
||||
import com.openhis.web.common.dto.LocationDto;
|
||||
>>>>>>> v1.3
|
||||
import com.openhis.web.common.dto.UnitDto;
|
||||
import com.openhis.web.inhospitalnursestation.appservice.IOrgDeviceStockTakeAppService;
|
||||
import com.openhis.web.inhospitalnursestation.dto.OrgDeviceDto;
|
||||
import com.openhis.web.inhospitalnursestation.dto.OrgDeviceSummaryFromDto;
|
||||
import com.openhis.web.inhospitalnursestation.dto.OrgDeviceSummaryParam;
|
||||
import com.openhis.web.inhospitalnursestation.mapper.OrgDeviceStockTakeAppMapper;
|
||||
<<<<<<< HEAD
|
||||
import com.openhis.web.pharmacymanage.mapper.ReturnMedicineMapper;
|
||||
=======
|
||||
>>>>>>> v1.3
|
||||
import com.openhis.workflow.domain.InventoryItem;
|
||||
import com.openhis.workflow.mapper.InventoryItemMapper;
|
||||
import com.openhis.workflow.service.IDeviceDispenseService;
|
||||
@@ -29,7 +39,10 @@ import org.springframework.stereotype.Service;
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.math.BigDecimal;
|
||||
<<<<<<< HEAD
|
||||
import java.time.LocalDate;
|
||||
=======
|
||||
>>>>>>> v1.3
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -63,12 +76,32 @@ public class OrgDeviceStockTakeAppServiceImpl implements IOrgDeviceStockTakeAppS
|
||||
@Resource
|
||||
private InventoryItemMapper inventoryItemMapper;
|
||||
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
@Resource
|
||||
private CommonServiceImpl commonService;
|
||||
|
||||
/**
|
||||
* 页面初始化
|
||||
*
|
||||
* @return 初始化信息
|
||||
*/
|
||||
@Override
|
||||
public R<?> init() {
|
||||
List<LocationDto> inventoryPharmacyList = commonService.getInventoryPharmacyList();
|
||||
return R.ok(inventoryPharmacyList);
|
||||
}
|
||||
|
||||
>>>>>>> v1.3
|
||||
/**
|
||||
* 查询科室耗材汇总
|
||||
*
|
||||
* @param orgDeviceSummaryParam 查询条件
|
||||
<<<<<<< HEAD
|
||||
* @param startTime 开始时间
|
||||
* @param endTime 结束时间
|
||||
=======
|
||||
>>>>>>> v1.3
|
||||
* @param pageNo 当前页码
|
||||
* @param pageSize 查询条数
|
||||
* @param searchKey 模糊查询关键字
|
||||
@@ -76,12 +109,18 @@ public class OrgDeviceStockTakeAppServiceImpl implements IOrgDeviceStockTakeAppS
|
||||
* @return 科室耗材汇总单
|
||||
*/
|
||||
@Override
|
||||
<<<<<<< HEAD
|
||||
public R<?> getOrgDeviceSummaryFromPage(OrgDeviceSummaryParam orgDeviceSummaryParam, String startTime,
|
||||
String endTime, Integer pageNo, Integer pageSize, String searchKey, HttpServletRequest request) {
|
||||
=======
|
||||
public R<?> getOrgDeviceSummaryFromPage(OrgDeviceSummaryParam orgDeviceSummaryParam, Integer pageNo,
|
||||
Integer pageSize, String searchKey, HttpServletRequest request) {
|
||||
>>>>>>> v1.3
|
||||
pageSize = Integer.MAX_VALUE;
|
||||
|
||||
QueryWrapper<OrgDeviceDto> queryWrapper = HisQueryUtils.buildQueryWrapper(orgDeviceSummaryParam, searchKey,
|
||||
new HashSet<>(List.of(CommonConstants.FieldName.ItemName)), request);
|
||||
<<<<<<< HEAD
|
||||
if (!(startTime == null || endTime == null)) {
|
||||
queryWrapper.between(CommonConstants.FieldName.ApplyTime, LocalDate.parse(startTime),
|
||||
LocalDate.parse(endTime));
|
||||
@@ -93,11 +132,21 @@ public class OrgDeviceStockTakeAppServiceImpl implements IOrgDeviceStockTakeAppS
|
||||
List<OrgDeviceDto> orgDeviceList =
|
||||
new ArrayList<>(orgDeviceDtoPage.getRecords()).stream().filter(x -> x.getDispenseId() != null).toList();
|
||||
|
||||
=======
|
||||
|
||||
Page<OrgDeviceDto> orgDeviceDtoPage =
|
||||
orgDeviceStockTakeAppMapper.selectOrgDeviceInfo(new Page<>(pageNo, pageSize), queryWrapper,
|
||||
EncounterClass.IMP.getValue(), RequestStatus.COMPLETED.getValue(),
|
||||
DispenseStatus.PREPARATION.getValue(), ChargeItemStatus.BILLABLE.getValue());
|
||||
|
||||
List<OrgDeviceDto> orgDeviceList = new ArrayList<>(orgDeviceDtoPage.getRecords());
|
||||
>>>>>>> v1.3
|
||||
// 根据项目id + 批次号 + 库房号分组
|
||||
Map<String, List<OrgDeviceDto>> orgDeviceGroupBy =
|
||||
orgDeviceList.stream().collect(Collectors.groupingBy(item -> item.getItemId() + CommonConstants.Common.DASH
|
||||
+ item.getLotNumber() + CommonConstants.Common.DASH + item.getSourceLocationId()));
|
||||
|
||||
<<<<<<< HEAD
|
||||
ArrayList<OrgDeviceSummaryFromDto> orgDeviceSummaryFromDtoList = new ArrayList<>();
|
||||
|
||||
orgDeviceGroupBy.forEach((k, v) -> {
|
||||
@@ -168,6 +217,92 @@ public class OrgDeviceStockTakeAppServiceImpl implements IOrgDeviceStockTakeAppS
|
||||
// 库存id
|
||||
orgDeviceSummaryFromDto.setInventoryItemId(inventoryItem.getId());
|
||||
}
|
||||
=======
|
||||
List<OrgDeviceSummaryFromDto> orgDeviceSummaryFromDtoList = new ArrayList<>();
|
||||
|
||||
// 对分组后的数量进行汇总
|
||||
for (Map.Entry<String, List<OrgDeviceDto>> entrySet : orgDeviceGroupBy.entrySet()) {
|
||||
// 分组key 项目id + 批次号 + 库房号
|
||||
String groupKey = entrySet.getKey();
|
||||
List<OrgDeviceDto> orgDeviceDtoList = entrySet.getValue();
|
||||
|
||||
OrgDeviceSummaryFromDto orgDeviceSummaryFromDto = new OrgDeviceSummaryFromDto();
|
||||
|
||||
// 项目id
|
||||
String itemId = groupKey.split(CommonConstants.Common.DASH)[0];
|
||||
// 批号
|
||||
String lotNumber = groupKey.split(CommonConstants.Common.DASH)[1];
|
||||
// 仓库id
|
||||
String sourceLocationId = groupKey.split(CommonConstants.Common.DASH)[2];
|
||||
|
||||
if (!orgDeviceDtoList.isEmpty()) {
|
||||
OrgDeviceDto orgDeviceDtoFirst = orgDeviceDtoList.get(0);
|
||||
// 拆零比例
|
||||
BigDecimal partPercent = orgDeviceDtoFirst.getPartPercent();
|
||||
// 最小单位
|
||||
String minUnitCode = orgDeviceDtoFirst.getMinUnitCode();
|
||||
// 常规单位
|
||||
String unitCode = orgDeviceDtoFirst.getMaxUnitCode();
|
||||
if (minUnitCode == null || unitCode == null || partPercent == null) {
|
||||
throw new ServiceException("耗材信息有误,请联系管理员");
|
||||
}
|
||||
|
||||
List<Long> dispenseIdList = new ArrayList<>();
|
||||
BigDecimal minQuantity = BigDecimal.ZERO;
|
||||
// 汇总数量
|
||||
for (OrgDeviceDto orgDeviceDto : orgDeviceDtoList) {
|
||||
BigDecimal quantity = orgDeviceDto.getQuantity();
|
||||
if (unitCode.equals(orgDeviceDto.getUnitCode())) {
|
||||
// 转换为小单位进行累加
|
||||
quantity = orgDeviceDto.getQuantity().multiply(partPercent);
|
||||
}
|
||||
minQuantity = minQuantity.add(quantity);
|
||||
// 保存所有汇总的id
|
||||
dispenseIdList.add(orgDeviceDto.getDispenseId());
|
||||
}
|
||||
|
||||
List<UnitDto> unitList = new ArrayList<>();
|
||||
UnitDto unitDto = new UnitDto();
|
||||
// 单位列表
|
||||
unitDto.setUnitCode(orgDeviceDtoFirst.getUnitCode()).setMinUnitCode(minUnitCode);
|
||||
unitList.add(unitDto);
|
||||
|
||||
orgDeviceSummaryFromDto.setItemId(Long.valueOf(itemId)) // 器材id
|
||||
.setName(orgDeviceDtoFirst.getItemName()) // 器材名称
|
||||
.setTotalVolume(orgDeviceDtoFirst.getTotalVolume()) // 规格
|
||||
.setManufacturer(orgDeviceDtoFirst.getManufacturer()) // 厂家
|
||||
.setLotNumber(lotNumber) // 批号
|
||||
.setUnitPrice(orgDeviceDtoFirst.getUnitPrice()) // 单价
|
||||
.setDispenseQuantity(minQuantity) // 发放数量
|
||||
.setUnitCode(orgDeviceDtoFirst.getUnitCode()) // 单位
|
||||
.setMinUnitCode(minUnitCode) // 最小单位
|
||||
.setPartPercent(partPercent) // 拆零比
|
||||
.setUnitCode_dictText(orgDeviceDtoFirst.getUnitCode_dictText()) // 单位文字
|
||||
.setSourceLocationId(Long.valueOf(sourceLocationId)) // 发放地点
|
||||
.setDispenseIdList(dispenseIdList) // 发放id列表
|
||||
.setUnitList(unitList); // 单位列表
|
||||
|
||||
orgDeviceSummaryFromDtoList.add(orgDeviceSummaryFromDto);
|
||||
}
|
||||
}
|
||||
|
||||
// 根据项目id、批次号、库房号获取库存数量
|
||||
List<Long> itemIdList = orgDeviceSummaryFromDtoList.stream().map(OrgDeviceSummaryFromDto::getItemId).toList();
|
||||
if (!itemIdList.isEmpty()) {
|
||||
List<InventoryItem> inventoryItemList = inventoryItemService.selectInventoryByItemIdList(itemIdList,
|
||||
SecurityUtils.getLoginUser().getTenantId());
|
||||
for (InventoryItem inventoryItem : inventoryItemList)
|
||||
for (OrgDeviceSummaryFromDto orgDeviceSummaryFromDto : orgDeviceSummaryFromDtoList)
|
||||
if (orgDeviceSummaryFromDto.getItemId().equals(inventoryItem.getItemId())
|
||||
&& orgDeviceSummaryFromDto.getLotNumber().equals(inventoryItem.getLotNumber())
|
||||
&& orgDeviceSummaryFromDto.getSourceLocationId().equals(inventoryItem.getLocationId())) {
|
||||
// 库存数量
|
||||
orgDeviceSummaryFromDto.setQuantity(inventoryItem.getQuantity());
|
||||
// 库存id
|
||||
orgDeviceSummaryFromDto.setInventoryItemId(inventoryItem.getId());
|
||||
}
|
||||
}
|
||||
>>>>>>> v1.3
|
||||
|
||||
return R.ok(orgDeviceSummaryFromDtoList);
|
||||
}
|
||||
@@ -178,11 +313,16 @@ public class OrgDeviceStockTakeAppServiceImpl implements IOrgDeviceStockTakeAppS
|
||||
* @return 科室耗材汇总单
|
||||
*/
|
||||
@Override
|
||||
<<<<<<< HEAD
|
||||
public R<?> orgDeviceSummary(OrgDeviceSummaryParam orgDeviceSummaryParam) {
|
||||
=======
|
||||
public R<?> orgDeviceSummary(List<OrgDeviceSummaryParam> orgDeviceSummaryParamList) {
|
||||
>>>>>>> v1.3
|
||||
// 申请时间
|
||||
Date now = DateUtils.getNowDate();
|
||||
// 申请人
|
||||
Long practitionerId = SecurityUtils.getLoginUser().getPractitionerId();
|
||||
<<<<<<< HEAD
|
||||
// 汇总单据号
|
||||
String busNo = assignSeqUtil.getSeqByDay(AssignSeqEnum.DEVICE_SUMMARY_NO.getPrefix(), 4);
|
||||
|
||||
@@ -243,6 +383,76 @@ public class OrgDeviceStockTakeAppServiceImpl implements IOrgDeviceStockTakeAppS
|
||||
return R.ok("盘点成功");
|
||||
}
|
||||
return R.fail("未找到对应库存数据");
|
||||
=======
|
||||
|
||||
for (OrgDeviceSummaryParam orgDeviceSummaryParam : orgDeviceSummaryParamList) {
|
||||
// 汇总单据号
|
||||
String busNo = assignSeqUtil.getSeqByDay(AssignSeqEnum.DEVICE_SUMMARY_NO.getPrefix(), 4);
|
||||
|
||||
// 数量
|
||||
BigDecimal stockTakeQuantity = orgDeviceSummaryParam.getStockTakeQuantity();
|
||||
// 使用单位
|
||||
String useUnitCode = orgDeviceSummaryParam.getUseUnitCode();
|
||||
// 最小单位
|
||||
String minUnitCode = orgDeviceSummaryParam.getMinUnitCode();
|
||||
// 拆零比
|
||||
BigDecimal partPercent = orgDeviceSummaryParam.getPartPercent();
|
||||
// 发放id列表
|
||||
List<Long> dispenseIdList = orgDeviceSummaryParam.getDispenseIdList();
|
||||
|
||||
if (orgDeviceSummaryParam.getInventoryItemId() == null) {
|
||||
return R.fail(orgDeviceSummaryParam.getName() + "未匹配到库存");
|
||||
}
|
||||
|
||||
List<InventoryItem> inventoryItemList = new ArrayList<>();
|
||||
// 获取库存信息
|
||||
InventoryItem inventoryItem = inventoryItemMapper.selectById(orgDeviceSummaryParam.getInventoryItemId());
|
||||
|
||||
// 库存操作
|
||||
if (inventoryItem != null) {
|
||||
if (PublicationStatus.ACTIVE.getValue().equals(inventoryItem.getInventoryStatusEnum())) {
|
||||
// 库存数量判定
|
||||
if (useUnitCode.equals(inventoryItem.getUnitCode())) {
|
||||
// 当前库存数量(拆零单位)=当前库存数量(拆零单位)-请求数量
|
||||
BigDecimal quantity = inventoryItem.getQuantity().subtract(stockTakeQuantity);
|
||||
// 库存数量判定
|
||||
if (quantity.compareTo(BigDecimal.ZERO) < 0) {
|
||||
// 库存数量不足
|
||||
return R.fail(orgDeviceSummaryParam.getName() + "当前库存数量不足");
|
||||
} else {
|
||||
inventoryItem.setQuantity(quantity);
|
||||
}
|
||||
} else {
|
||||
// 当前库存数量(拆零单位)=当前库存数量(拆零单位)-拆零数量(拆零比×请求数量)
|
||||
BigDecimal quantity =
|
||||
inventoryItem.getQuantity().subtract(partPercent.multiply(stockTakeQuantity));
|
||||
// 库存数量判定
|
||||
if (quantity.compareTo(BigDecimal.ZERO) < 0) {
|
||||
// 库存数量不足
|
||||
return R.fail(orgDeviceSummaryParam.getName() + "当前库存数量不足");
|
||||
} else {
|
||||
inventoryItem.setQuantity(quantity);
|
||||
}
|
||||
}
|
||||
inventoryItemList.add(inventoryItem);
|
||||
}
|
||||
// 耗材发放状态更新
|
||||
deviceDispenseService.updateDispenseStatusSummarized(dispenseIdList, busNo);
|
||||
|
||||
// 添加汇总单
|
||||
Long supplyRequestId = supplyRequestService.createDeviceSummarySupplyRequest(
|
||||
orgDeviceSummaryParam.getItemId(), orgDeviceSummaryParam.getSourceLocationId(),
|
||||
orgDeviceSummaryParam.getLotNumber(), stockTakeQuantity, minUnitCode, practitionerId, now, busNo);
|
||||
supplyDeliveryService.createDeviceSummarySupplyDelivery(orgDeviceSummaryParam.getItemId(),
|
||||
orgDeviceSummaryParam.getLotNumber(), stockTakeQuantity, minUnitCode, supplyRequestId);
|
||||
|
||||
// 库存更新
|
||||
inventoryItemService.updateBatchById(inventoryItemList);
|
||||
}
|
||||
return R.fail("未查询到" + orgDeviceSummaryParam.getName() + "对应库存数据");
|
||||
}
|
||||
return R.ok("盘点成功");
|
||||
>>>>>>> v1.3
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ import com.core.common.core.domain.R;
|
||||
import com.openhis.web.inhospitalnursestation.appservice.IATDManageAppService;
|
||||
import com.openhis.web.inhospitalnursestation.dto.AdmissionPageParam;
|
||||
import com.openhis.web.inhospitalnursestation.dto.AdmissionPatientInfoDto;
|
||||
import com.openhis.web.inhospitalnursestation.dto.InpatientAdviceParam;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -87,6 +88,7 @@ public class ATDManageController {
|
||||
|
||||
/**
|
||||
* 住院患者待处理信息列表
|
||||
<<<<<<< HEAD
|
||||
*
|
||||
* @param encounterId 住院id
|
||||
* @return 待处理信息列表
|
||||
@@ -94,6 +96,19 @@ public class ATDManageController {
|
||||
@GetMapping(value = "/patient-pending")
|
||||
public R<?> getInPatientPendingList(Long encounterId) {
|
||||
return atdManageAppService.getInPatientPendingList(encounterId);
|
||||
=======
|
||||
*
|
||||
* @param inpatientAdviceParam 查询条件
|
||||
* @param pageNo 当前页码
|
||||
* @param pageSize 查询条数
|
||||
* @return 住院患者医
|
||||
*/
|
||||
@GetMapping(value = "/patient-pending")
|
||||
public R<?> getInPatientPendingList(InpatientAdviceParam inpatientAdviceParam,
|
||||
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
|
||||
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
|
||||
return atdManageAppService.getInPatientPendingList(inpatientAdviceParam, pageNo, pageSize);
|
||||
>>>>>>> v1.3
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -110,7 +125,11 @@ public class ATDManageController {
|
||||
/**
|
||||
* 转科
|
||||
*
|
||||
<<<<<<< HEAD
|
||||
* @param encounterId 住院id
|
||||
=======
|
||||
* @param encounterId 住院患者id
|
||||
>>>>>>> v1.3
|
||||
* @return 结果
|
||||
*/
|
||||
@PutMapping(value = "/transfer-department")
|
||||
@@ -121,11 +140,51 @@ public class ATDManageController {
|
||||
/**
|
||||
* 出院
|
||||
*
|
||||
<<<<<<< HEAD
|
||||
* @param encounterId 住院id
|
||||
=======
|
||||
* @param encounterId 住院患者id
|
||||
>>>>>>> v1.3
|
||||
* @return 结果
|
||||
*/
|
||||
@PutMapping(value = "/hospital-discharge")
|
||||
public R<?> hospitalDischarge(Long encounterId) {
|
||||
return atdManageAppService.hospitalDischarge(encounterId);
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
|
||||
/**
|
||||
* 清床
|
||||
*
|
||||
* @param encounterId 住院患者id
|
||||
* @return 结果
|
||||
*/
|
||||
@PutMapping(value = "/terminal-cleaning")
|
||||
public R<?> terminalCleaning(Long encounterId) {
|
||||
return atdManageAppService.terminalCleaning(encounterId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 诊断个人账户金额信息获取
|
||||
*
|
||||
* @param encounterId 诊断id
|
||||
* @return EncounterAccountDto 诊断账户金额
|
||||
**/
|
||||
@GetMapping(value = "/get-amount")
|
||||
public R<?> getAmount(Long encounterId) {
|
||||
return atdManageAppService.getAmount(encounterId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取待配/退药
|
||||
*
|
||||
* @param encounterId 诊断id
|
||||
* @return PendingMedicationDto 待配/退药
|
||||
**/
|
||||
@GetMapping(value = "/get-dr-medication")
|
||||
public R<?> getPendingMedication(Long encounterId) {
|
||||
return atdManageAppService.getPendingMedication(encounterId);
|
||||
}
|
||||
>>>>>>> v1.3
|
||||
}
|
||||
|
||||
@@ -0,0 +1,92 @@
|
||||
package com.openhis.web.inhospitalnursestation.controller;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import com.core.common.core.domain.R;
|
||||
import com.openhis.common.enums.PublicationStatus;
|
||||
import com.openhis.web.inhospitalnursestation.appservice.IEncounterAutoRollAppService;
|
||||
import com.openhis.web.inhospitalnursestation.dto.EncounterAutoRollSaveDto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
* 住院就诊滚方
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/nurse-station/auto-roll")
|
||||
@Slf4j
|
||||
@AllArgsConstructor
|
||||
public class EncounterAutoRollAppController {
|
||||
|
||||
@Resource
|
||||
public IEncounterAutoRollAppService iEncounterAutoRollAppService;
|
||||
|
||||
/**
|
||||
* 查询自动滚方数据源
|
||||
*
|
||||
* @return 自动滚方数据源
|
||||
*/
|
||||
@GetMapping(value = "/source-info")
|
||||
public R<?> getSource() {
|
||||
return R.ok(iEncounterAutoRollAppService.getSource());
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存住院就诊的滚方信息
|
||||
*
|
||||
* @param encounterAutoRollSaveDto 住院就诊的滚方信息
|
||||
* @return 结果
|
||||
*/
|
||||
@PostMapping(value = "/save-binding")
|
||||
public R<?> saveBinding(@RequestBody EncounterAutoRollSaveDto encounterAutoRollSaveDto) {
|
||||
return iEncounterAutoRollAppService.saveBinding(encounterAutoRollSaveDto);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询住院就诊滚方绑定信息
|
||||
*
|
||||
* @param encounterId 就诊id
|
||||
* @return 住院就诊滚方绑定信息
|
||||
*/
|
||||
@GetMapping(value = "/encounter-info")
|
||||
public R<?> getEncounter(@RequestParam(value = "encounterId") Long encounterId) {
|
||||
return R.ok(iEncounterAutoRollAppService.getEncounter(encounterId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除住院就诊的滚方信息
|
||||
*
|
||||
* @param id id
|
||||
* @return 结果
|
||||
*/
|
||||
@DeleteMapping("/delete-binding")
|
||||
public R<?> deleteBinding(@RequestParam Long id) {
|
||||
return R.ok(iEncounterAutoRollAppService.deleteBinding(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 启用
|
||||
*
|
||||
* @param id id
|
||||
* @return 结果
|
||||
*/
|
||||
@PutMapping("/active")
|
||||
public R<?> active(@RequestParam Long id) {
|
||||
return R.ok(iEncounterAutoRollAppService.activeOrRetired(id, PublicationStatus.ACTIVE.getValue()));
|
||||
}
|
||||
|
||||
/**
|
||||
* 停用
|
||||
*
|
||||
* @param id id
|
||||
* @return 结果
|
||||
*/
|
||||
@PutMapping("/retired")
|
||||
public R<?> retired(@RequestParam Long id) {
|
||||
return R.ok(iEncounterAutoRollAppService.activeOrRetired(id, PublicationStatus.RETIRED.getValue()));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -31,6 +31,7 @@ public class MedicineSummaryController {
|
||||
public IMedicineSummaryAppService medicineSummaryAppService;
|
||||
|
||||
/**
|
||||
<<<<<<< HEAD
|
||||
* 查询发药单信息
|
||||
*
|
||||
* @param dispenseFormSearchParam 查询条件
|
||||
@@ -47,6 +48,57 @@ public class MedicineSummaryController {
|
||||
request);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询药品汇总单
|
||||
=======
|
||||
* 药品汇总单初始化
|
||||
*
|
||||
* @return 初始化信息
|
||||
*/
|
||||
@GetMapping(value = "/summary-init")
|
||||
public R<?> getMedicineSummaryInit() {
|
||||
return medicineSummaryAppService.getMedicineSummaryInit();
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询发药单信息
|
||||
>>>>>>> v1.3
|
||||
*
|
||||
* @param dispenseFormSearchParam 查询条件
|
||||
* @param pageNo 当前页码
|
||||
* @param pageSize 查询条数
|
||||
<<<<<<< HEAD
|
||||
* @param searchKey 模糊查询关键字
|
||||
* @param request 请求
|
||||
* @return 药品汇总单
|
||||
*/
|
||||
@GetMapping(value = "/summary-form")
|
||||
public R<?> getMedicineSummaryFormPage(DispenseFormSearchParam dispenseFormSearchParam,
|
||||
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
|
||||
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, String searchKey,
|
||||
HttpServletRequest request) {
|
||||
return medicineSummaryAppService.getMedicineSummaryFormPage(dispenseFormSearchParam, pageNo, pageSize,
|
||||
searchKey, request);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询药品汇总单详情
|
||||
*
|
||||
* @param summaryNo 汇总单号
|
||||
* @return 药品汇总单详情
|
||||
*/
|
||||
=======
|
||||
* @param request 请求
|
||||
* @return 发药单信息
|
||||
*/
|
||||
@GetMapping(value = "/dispensing-form")
|
||||
public R<?> getMedicineDispenseFormPage(DispenseFormSearchParam dispenseFormSearchParam,
|
||||
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
|
||||
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, HttpServletRequest request) {
|
||||
return medicineSummaryAppService.getMedicineDispenseFormPage(dispenseFormSearchParam, pageNo, pageSize,
|
||||
request);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询药品汇总单
|
||||
*
|
||||
@@ -72,6 +124,7 @@ public class MedicineSummaryController {
|
||||
* @param summaryNo 汇总单号
|
||||
* @return 药品汇总单详情
|
||||
*/
|
||||
>>>>>>> v1.3
|
||||
@GetMapping(value = "/summary-form-detail")
|
||||
public R<?> getMedicineSummaryFormDetail(String summaryNo) {
|
||||
return medicineSummaryAppService.getMedicineSummaryFormDetail(summaryNo);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.openhis.web.inhospitalnursestation.controller;
|
||||
|
||||
<<<<<<< HEAD
|
||||
import com.core.common.core.domain.R;
|
||||
import com.openhis.web.regdoctorstation.dto.RegAdviceSaveParam;
|
||||
import lombok.AllArgsConstructor;
|
||||
@@ -19,10 +20,45 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
@AllArgsConstructor
|
||||
public class NurseBillingController {
|
||||
// TODO: Implement InNurseBillingController
|
||||
=======
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import com.core.common.core.domain.R;
|
||||
import com.openhis.administration.dto.CostDetailSearchParam;
|
||||
import com.openhis.web.inhospitalnursestation.appservice.INurseBillingAppService;
|
||||
import com.openhis.web.inhospitalnursestation.dto.InpatientAdviceParam;
|
||||
import com.openhis.web.regdoctorstation.dto.AdviceBatchOpParam;
|
||||
import com.openhis.web.regdoctorstation.dto.RegAdviceSaveParam;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
* 住院护士 患者划价、医嘱计费
|
||||
*/
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/inhospitalnursestation/nursebilling")
|
||||
@Slf4j
|
||||
@AllArgsConstructor
|
||||
public class NurseBillingController {
|
||||
@Resource
|
||||
private INurseBillingAppService iNurseBillingAppService;
|
||||
|
||||
>>>>>>> v1.3
|
||||
/*
|
||||
* 新增住院护士划价
|
||||
* @return
|
||||
*/
|
||||
<<<<<<< HEAD
|
||||
public R<?> addInNurseBilling(RegAdviceSaveParam regAdviceSaveParam) {
|
||||
return R.ok();
|
||||
}
|
||||
@@ -33,10 +69,18 @@ public class NurseBillingController {
|
||||
public R<?> getBillingListByEncounterId() {
|
||||
return R.ok();
|
||||
}
|
||||
=======
|
||||
@PostMapping("/add-billing")
|
||||
public R<?> addInNurseBilling(@RequestBody RegAdviceSaveParam regAdviceSaveParam) {
|
||||
return iNurseBillingAppService.addInNurseBilling(regAdviceSaveParam);
|
||||
}
|
||||
|
||||
>>>>>>> v1.3
|
||||
/*
|
||||
* 住院护士撤销划价
|
||||
* @return
|
||||
*/
|
||||
<<<<<<< HEAD
|
||||
public R<?> deleteInNurseBilling() {
|
||||
return R.ok();
|
||||
}
|
||||
@@ -63,6 +107,74 @@ public class NurseBillingController {
|
||||
* @return
|
||||
*/
|
||||
public R<?> getOrderBillingByRequestId() {
|
||||
=======
|
||||
@PostMapping("/del-billing")
|
||||
public R<?> deleteInNurseBilling(@RequestBody List<AdviceBatchOpParam> paramList) {
|
||||
return iNurseBillingAppService.deleteInNurseBilling(paramList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 住院划价查询
|
||||
*
|
||||
* @param inpatientAdviceParam 查询条件
|
||||
* @param pageNo 当前页码
|
||||
* @param pageSize 查询条数
|
||||
* @return 住院患者医
|
||||
*/
|
||||
@GetMapping(value = "/innurse-billing-list/")
|
||||
public R<?> getInNurseBillingPage(InpatientAdviceParam inpatientAdviceParam,
|
||||
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
|
||||
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize,
|
||||
@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime startTime,
|
||||
@RequestParam @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime endTime) {
|
||||
return iNurseBillingAppService.getInNurseBillingPage(inpatientAdviceParam, pageNo, pageSize, startTime,
|
||||
endTime);
|
||||
}
|
||||
|
||||
/**
|
||||
* 费用明细查询
|
||||
*
|
||||
* @param costDetailSearchParam 查询条件
|
||||
* @param request request请求
|
||||
* @return 住院患者费用明细
|
||||
*/
|
||||
@GetMapping("/cost-detail")
|
||||
public R<?> getCostDetails(CostDetailSearchParam costDetailSearchParam, HttpServletRequest request) {
|
||||
return iNurseBillingAppService.getCostDetails(costDetailSearchParam, request);
|
||||
}
|
||||
|
||||
/**
|
||||
* 费用明细导出
|
||||
*
|
||||
* @param costDetailSearchParam 查询条件
|
||||
* @param request request请求
|
||||
* @param response response响应
|
||||
*/
|
||||
@GetMapping("/excel-out")
|
||||
public void makeExcelFile(CostDetailSearchParam costDetailSearchParam, HttpServletRequest request,
|
||||
HttpServletResponse response) {
|
||||
iNurseBillingAppService.makeExcelFile(costDetailSearchParam, request, response);
|
||||
}
|
||||
|
||||
/*
|
||||
* 医嘱计费添加 诊疗 耗材
|
||||
*/
|
||||
public R<?> addOrderBilling() {
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
/*
|
||||
* 医嘱计费删除 诊疗 耗材
|
||||
*/
|
||||
public R<?> deleteOrderBilling() {
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
/*
|
||||
* 医嘱计费修改 诊疗 耗材
|
||||
*/
|
||||
public R<?> updateOrderBilling() {
|
||||
>>>>>>> v1.3
|
||||
return R.ok();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.openhis.web.inhospitalnursestation.controller;
|
||||
|
||||
<<<<<<< HEAD
|
||||
import com.core.common.core.domain.R;
|
||||
import com.openhis.web.inhospitalnursestation.appservice.IOrgDeviceStockTakeAppService;
|
||||
import com.openhis.web.inhospitalnursestation.dto.OrgDeviceSummaryParam;
|
||||
@@ -9,6 +10,21 @@ import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
=======
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import com.core.common.core.domain.R;
|
||||
import com.openhis.web.inhospitalnursestation.appservice.IOrgDeviceStockTakeAppService;
|
||||
import com.openhis.web.inhospitalnursestation.dto.OrgDeviceSummaryParam;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.util.List;
|
||||
>>>>>>> v1.3
|
||||
|
||||
/**
|
||||
* 科室耗材盘点
|
||||
@@ -17,7 +33,11 @@ import javax.servlet.http.HttpServletRequest;
|
||||
* @date 2025/11/05
|
||||
*/
|
||||
@RestController
|
||||
<<<<<<< HEAD
|
||||
@RequestMapping("/nurse-station/orgdevice-stocktake")
|
||||
=======
|
||||
@RequestMapping("/nurse-station/org-device-stockTake")
|
||||
>>>>>>> v1.3
|
||||
@Slf4j
|
||||
@AllArgsConstructor
|
||||
public class OrgDeviceStockTakeController {
|
||||
@@ -26,11 +46,27 @@ public class OrgDeviceStockTakeController {
|
||||
private IOrgDeviceStockTakeAppService orgDeviceStockTakeService;
|
||||
|
||||
/**
|
||||
<<<<<<< HEAD
|
||||
* 查询科室耗材汇总
|
||||
*
|
||||
* @param orgDeviceSummaryParam 查询条件
|
||||
* @param startTime 开始时间
|
||||
* @param endTime 结束时间
|
||||
=======
|
||||
* 页面初始化
|
||||
*
|
||||
* @return 初始化信息
|
||||
*/
|
||||
@GetMapping(value = "/init")
|
||||
public R<?> init() {
|
||||
return orgDeviceStockTakeService.init();
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询科室耗材汇总
|
||||
*
|
||||
* @param orgDeviceSummaryParam 查询条件
|
||||
>>>>>>> v1.3
|
||||
* @param pageNo 当前页码
|
||||
* @param pageSize 查询条数
|
||||
* @param searchKey 模糊查询关键字
|
||||
@@ -38,12 +74,21 @@ public class OrgDeviceStockTakeController {
|
||||
* @return 科室耗材汇总单
|
||||
*/
|
||||
@GetMapping(value = "/summary-from")
|
||||
<<<<<<< HEAD
|
||||
public R<?> getOrgDeviceSummaryFromPage(OrgDeviceSummaryParam orgDeviceSummaryParam, String startTime,
|
||||
String endTime, @RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
|
||||
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, String searchKey,
|
||||
HttpServletRequest request) {
|
||||
return orgDeviceStockTakeService.getOrgDeviceSummaryFromPage(orgDeviceSummaryParam, startTime, endTime, pageNo,
|
||||
pageSize, searchKey, request);
|
||||
=======
|
||||
public R<?> getOrgDeviceSummaryFromPage(OrgDeviceSummaryParam orgDeviceSummaryParam,
|
||||
@RequestParam(value = "pageNo", defaultValue = "1") Integer pageNo,
|
||||
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize, String searchKey,
|
||||
HttpServletRequest request) {
|
||||
return orgDeviceStockTakeService.getOrgDeviceSummaryFromPage(orgDeviceSummaryParam, pageNo, pageSize, searchKey,
|
||||
request);
|
||||
>>>>>>> v1.3
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -51,9 +96,15 @@ public class OrgDeviceStockTakeController {
|
||||
*
|
||||
* @return 科室耗材汇总单
|
||||
*/
|
||||
<<<<<<< HEAD
|
||||
@PutMapping(value = "/orgdevice-summary")
|
||||
public R<?> orgDeviceSummary(OrgDeviceSummaryParam orgDeviceSummaryParam) {
|
||||
return orgDeviceStockTakeService.orgDeviceSummary(orgDeviceSummaryParam);
|
||||
=======
|
||||
@PutMapping(value = "/org-device-summary")
|
||||
public R<?> orgDeviceSummary(@RequestBody List<OrgDeviceSummaryParam> orgDeviceSummaryParamList) {
|
||||
return orgDeviceStockTakeService.orgDeviceSummary(orgDeviceSummaryParamList);
|
||||
>>>>>>> v1.3
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -177,5 +177,33 @@ public class AdmissionPatientInfoDto {
|
||||
*/
|
||||
private String editFlag;
|
||||
|
||||
// TODO 体温单相关字段
|
||||
|
||||
/**
|
||||
* 身高
|
||||
*/
|
||||
private String height;
|
||||
/**
|
||||
* 体重
|
||||
*/
|
||||
private String weight;
|
||||
/**
|
||||
* 体温
|
||||
*/
|
||||
private String temperature;
|
||||
/**
|
||||
* 心率
|
||||
*/
|
||||
private String hertRate;
|
||||
/**
|
||||
* 脉搏
|
||||
*/
|
||||
private String pulse;
|
||||
/**
|
||||
* 低压
|
||||
*/
|
||||
private String endBloodPressure;
|
||||
/**
|
||||
* 高压
|
||||
*/
|
||||
private String highBloodPressure;
|
||||
}
|
||||
|
||||
@@ -29,6 +29,12 @@ public class AdmissionPatientPageDto {
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long encounterId;
|
||||
|
||||
/**
|
||||
* 账号id
|
||||
*/
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long accountId;
|
||||
|
||||
/**
|
||||
* 住院号
|
||||
*/
|
||||
@@ -45,6 +51,11 @@ public class AdmissionPatientPageDto {
|
||||
*/
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date startTime;
|
||||
/**
|
||||
* 入科时间
|
||||
*/
|
||||
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date admissionTime;
|
||||
|
||||
/**
|
||||
* 出院时间
|
||||
@@ -131,4 +142,9 @@ public class AdmissionPatientPageDto {
|
||||
* 费别
|
||||
*/
|
||||
private String contractName;
|
||||
/**
|
||||
* 患者id
|
||||
*/
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long patientId;
|
||||
}
|
||||
|
||||
@@ -48,7 +48,11 @@ public class AdviceExecuteDetailParam {
|
||||
/** 组号 */
|
||||
private Long groupId;
|
||||
|
||||
<<<<<<< HEAD
|
||||
/** 执行时间点集合 */
|
||||
=======
|
||||
/** 预计执行时间点集合 */
|
||||
>>>>>>> v1.3
|
||||
private List<String> executeTimes;
|
||||
|
||||
}
|
||||
|
||||
@@ -3,10 +3,13 @@
|
||||
*/
|
||||
package com.openhis.web.inhospitalnursestation.dto;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
/**
|
||||
* 医嘱执行参数
|
||||
@@ -18,6 +21,13 @@ import lombok.experimental.Accessors;
|
||||
@Accessors(chain = true)
|
||||
public class AdviceExecuteParam {
|
||||
|
||||
/**
|
||||
* 实际执行时间
|
||||
*/
|
||||
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date exeDate;
|
||||
|
||||
/**
|
||||
* 医嘱执行详细参数
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
package com.openhis.web.inhospitalnursestation.dto;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
/**
|
||||
* 自动滚方基础服务 Dto
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class AutoRollBasicServiceDto {
|
||||
|
||||
/**
|
||||
* 诊疗定义id
|
||||
*/
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long activityDefinitionId;
|
||||
|
||||
/**
|
||||
* 数量
|
||||
*/
|
||||
private BigDecimal quantity;
|
||||
|
||||
/**
|
||||
* 就诊id
|
||||
*/
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long encounterId;
|
||||
|
||||
/**
|
||||
* 住院科室id
|
||||
*/
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long organizationId;
|
||||
|
||||
/**
|
||||
* 患者id
|
||||
*/
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long patientId;
|
||||
|
||||
/**
|
||||
* 账号id | 住院就诊的个人现金账户id
|
||||
*/
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long accountId;
|
||||
|
||||
/**
|
||||
* 诊断ID
|
||||
*/
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long conditionId;
|
||||
|
||||
/**
|
||||
* 就诊诊断id
|
||||
*/
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long encounterDiagnosisId;
|
||||
|
||||
/**
|
||||
* 请求者 | 开方人
|
||||
*/
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long requesterId;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
package com.openhis.web.inhospitalnursestation.dto;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
/**
|
||||
* 自动滚方护理医嘱 Dto
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class AutoRollNursingDto {
|
||||
|
||||
/**
|
||||
* 诊疗定义id
|
||||
*/
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long activityDefinitionId;
|
||||
|
||||
/**
|
||||
* 数量
|
||||
*/
|
||||
private BigDecimal quantity;
|
||||
|
||||
/**
|
||||
* 就诊id
|
||||
*/
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long encounterId;
|
||||
|
||||
/**
|
||||
* 住院科室id
|
||||
*/
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long organizationId;
|
||||
|
||||
/**
|
||||
* 患者id
|
||||
*/
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long patientId;
|
||||
|
||||
/**
|
||||
* 账号id | 住院就诊的个人现金账户id
|
||||
*/
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long accountId;
|
||||
|
||||
/**
|
||||
* 诊断ID
|
||||
*/
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long conditionId;
|
||||
|
||||
/**
|
||||
* 就诊诊断id
|
||||
*/
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long encounterDiagnosisId;
|
||||
|
||||
/**
|
||||
* 请求者 | 开方医生
|
||||
*/
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long requesterId;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.openhis.web.inhospitalnursestation.dto;
|
||||
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
|
||||
import com.openhis.common.annotation.Dict;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
/**
|
||||
* 自动滚方数据源 Dto
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class AutoRollSourceDto {
|
||||
|
||||
/**
|
||||
* 实例id
|
||||
*/
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long instanceId;
|
||||
|
||||
/**
|
||||
* 实例名称
|
||||
*/
|
||||
private String instanceName;
|
||||
|
||||
/**
|
||||
* 使用单位
|
||||
*/
|
||||
@Dict(dictCode = "unit_code")
|
||||
private String permittedUnitCode;
|
||||
private String permittedUnitCode_dictText;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package com.openhis.web.inhospitalnursestation.dto;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.core.common.annotation.Excel;
|
||||
import com.openhis.administration.dto.CostDetailDto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
/**
|
||||
* 住院记账-费用明细导出专用DTO
|
||||
*
|
||||
* @author swb
|
||||
* @date 2025/12/19
|
||||
*/
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Accessors(chain = true)
|
||||
public class CostDetailExcelOutDto {
|
||||
/**
|
||||
* 就诊ID
|
||||
*/
|
||||
private Long encounterId;
|
||||
/**
|
||||
* 费用明细列表
|
||||
*/
|
||||
@Excel()
|
||||
private List<CostDetailDto> data;
|
||||
/**
|
||||
* 患者姓名
|
||||
*/
|
||||
@Excel(name = "姓名", sort = 1, needMerge = true)
|
||||
private String name;
|
||||
}
|
||||
@@ -45,4 +45,10 @@ public class DispenseFormSearchParam implements Serializable {
|
||||
/** 汇总人id */
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long applicantId;
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
|
||||
/** 发放状态 */
|
||||
private Integer statusEnum;
|
||||
>>>>>>> v1.3
|
||||
}
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
package com.openhis.web.inhospitalnursestation.dto;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
/**
|
||||
* 就诊消费 dto
|
||||
*
|
||||
* @author: 1x1
|
||||
* @date: 2025/11/19 13:50
|
||||
*/
|
||||
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class EncounterAccountDto {
|
||||
|
||||
// 就诊ID
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long encounterId;
|
||||
|
||||
// 预交金
|
||||
private BigDecimal advanceAmount;
|
||||
|
||||
// 总额
|
||||
private BigDecimal totalAmount;
|
||||
|
||||
// 余额
|
||||
private BigDecimal balanceAmount;
|
||||
|
||||
// 险种类型
|
||||
private String insutype;
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package com.openhis.web.inhospitalnursestation.dto;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
/**
|
||||
* 自动滚方绑定 查询Dto
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class EncounterAutoRollQueryDto {
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long id;
|
||||
|
||||
/** 状态 */
|
||||
private Integer statusEnum;
|
||||
private String statusEnum_enumText;
|
||||
|
||||
/** 数量 */
|
||||
private BigDecimal quantity;
|
||||
|
||||
/**
|
||||
* 单位
|
||||
*/
|
||||
private String unitCodeName;
|
||||
|
||||
/**
|
||||
* 服务定义名称
|
||||
*/
|
||||
private String definitionName;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
package com.openhis.web.inhospitalnursestation.dto;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
/**
|
||||
* 自动滚方绑定 保存Dto
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class EncounterAutoRollSaveDto {
|
||||
|
||||
/**
|
||||
* 就诊id
|
||||
*/
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long encounterId;
|
||||
|
||||
/**
|
||||
* 实例id
|
||||
*/
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long instanceId;
|
||||
|
||||
/** 数量 */
|
||||
private BigDecimal quantity;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
package com.openhis.web.inhospitalnursestation.dto;
|
||||
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
/**
|
||||
* 在床患者信息 Dto
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class InBedPatientInfoDto {
|
||||
|
||||
/**
|
||||
* 就诊id
|
||||
*/
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long encounterId;
|
||||
|
||||
/**
|
||||
* 住院科室id
|
||||
*/
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long organizationId;
|
||||
|
||||
/**
|
||||
* 患者id
|
||||
*/
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long patientId;
|
||||
|
||||
/**
|
||||
* 账号id | 住院就诊的个人现金账户id
|
||||
*/
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long accountId;
|
||||
|
||||
/**
|
||||
* 诊断ID
|
||||
*/
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long conditionId;
|
||||
|
||||
/**
|
||||
* 就诊诊断id
|
||||
*/
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long encounterDiagnosisId;
|
||||
|
||||
}
|
||||
@@ -242,4 +242,18 @@ public class InpatientAdviceDto {
|
||||
*/
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long performerCheckId;
|
||||
|
||||
/**
|
||||
* 药品/服务类型
|
||||
*/
|
||||
private Integer categoryCode;
|
||||
/**
|
||||
* 执行科室
|
||||
*/
|
||||
private String orgName;
|
||||
/** 单价 */
|
||||
private BigDecimal unitPrice;
|
||||
|
||||
/** 总价 */
|
||||
private BigDecimal totalPrice;
|
||||
}
|
||||
|
||||
@@ -56,4 +56,19 @@ public class MedicineSummaryInfoDto {
|
||||
@Dict(dictCode = "unit_code")
|
||||
private String unitCode;
|
||||
private String unitCode_dictText;
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
|
||||
/**
|
||||
* 药品类型
|
||||
*/
|
||||
@Dict(dictCode = "med_category_code")
|
||||
private String categoryCode;
|
||||
private String categoryCode_dictText;
|
||||
|
||||
/**
|
||||
* 生产厂家
|
||||
*/
|
||||
private String manufacturerText;
|
||||
>>>>>>> v1.3
|
||||
}
|
||||
|
||||
@@ -18,11 +18,23 @@ import java.util.List;
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class OrgDeviceSummaryParam {
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
/** 发放地点 */
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long sourceLocationId;
|
||||
>>>>>>> v1.3
|
||||
|
||||
/** 项目id */
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long itemId;
|
||||
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
/** 器材名称 */
|
||||
private String name;
|
||||
|
||||
>>>>>>> v1.3
|
||||
/** 库存id */
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long inventoryItemId;
|
||||
@@ -36,10 +48,13 @@ public class OrgDeviceSummaryParam {
|
||||
/** 批号 */
|
||||
private String lotNumber;
|
||||
|
||||
<<<<<<< HEAD
|
||||
/** 发放地点 */
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long sourceLocationId;
|
||||
|
||||
=======
|
||||
>>>>>>> v1.3
|
||||
/** 使用单位 */
|
||||
@Dict(dictCode = "unit_code")
|
||||
private String useUnitCode;
|
||||
|
||||
@@ -0,0 +1,107 @@
|
||||
package com.openhis.web.inhospitalnursestation.dto;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
|
||||
import com.openhis.common.annotation.Dict;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
||||
/**
|
||||
* 待配/退药 dto
|
||||
*
|
||||
* @Author: 1x1
|
||||
* @CreateTime: 2025-11-19 15:49
|
||||
*/
|
||||
@Data
|
||||
@Accessors(chain = true)
|
||||
public class PendingMedicationDto {
|
||||
|
||||
/**
|
||||
* 药品请求ID
|
||||
*/
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long medicationRequestId;
|
||||
|
||||
/**
|
||||
* 药品发放ID
|
||||
*/
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long medicationDispenseId;
|
||||
|
||||
/**
|
||||
* 科室
|
||||
*/
|
||||
private String orgName;
|
||||
|
||||
/**
|
||||
* 药房
|
||||
*/
|
||||
private String performLocationName;
|
||||
|
||||
/**
|
||||
* 药品名称
|
||||
*/
|
||||
private String medicationName;
|
||||
|
||||
/**
|
||||
* 药品规格
|
||||
*/
|
||||
private String medicationSpec;
|
||||
|
||||
/**
|
||||
* 单价
|
||||
*/
|
||||
private BigDecimal unitPrice;
|
||||
|
||||
/**
|
||||
* 待退数量
|
||||
*/
|
||||
private BigDecimal requestQuantity;
|
||||
|
||||
/**
|
||||
* 待配数量
|
||||
*/
|
||||
private BigDecimal dispenseQuantity;
|
||||
/**
|
||||
* 数量单位编码
|
||||
*/
|
||||
@Dict(dictCode = "unit_code")
|
||||
private String unitCode;
|
||||
private String unitCode_dictText;
|
||||
|
||||
/**
|
||||
* 总价
|
||||
*/
|
||||
private BigDecimal totalPrice;
|
||||
|
||||
/**
|
||||
* 发药人ID
|
||||
*/
|
||||
private Long dispensePractitionerId;
|
||||
|
||||
/**
|
||||
* 发药人姓名
|
||||
*/
|
||||
private String dispensePractitionerName;
|
||||
|
||||
/**
|
||||
* 预定发药时间
|
||||
*/
|
||||
|
||||
private Date plannedDispenseTime;
|
||||
|
||||
/**
|
||||
* 请求状态
|
||||
*/
|
||||
private Integer requestStatusEnum;
|
||||
|
||||
/**
|
||||
* 发放状态
|
||||
*/
|
||||
private Integer dispenseStatusEnum;
|
||||
|
||||
}
|
||||
@@ -3,16 +3,16 @@
|
||||
*/
|
||||
package com.openhis.web.inhospitalnursestation.mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Constants;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.openhis.web.inhospitalnursestation.dto.AdmissionBedPageDto;
|
||||
import com.openhis.web.inhospitalnursestation.dto.AdmissionPageParam;
|
||||
import com.openhis.web.inhospitalnursestation.dto.AdmissionPatientInfoDto;
|
||||
import com.openhis.web.inhospitalnursestation.dto.AdmissionPatientPageDto;
|
||||
import com.openhis.web.common.dto.PerformRecordDto;
|
||||
import com.openhis.web.inhospitalnursestation.dto.*;
|
||||
|
||||
/**
|
||||
* 入出转管理 appMapper
|
||||
@@ -82,4 +82,74 @@ public interface ATDManageAppMapper {
|
||||
@Param("bed") Integer bed, @Param("primaryNurse") String primaryNurse,
|
||||
@Param("attendingDoctor") String attendingDoctor, @Param("admittingDoctor") String admittingDoctor,
|
||||
@Param("chiefDoctor") String chiefDoctor);
|
||||
|
||||
/**
|
||||
* 诊断个人账户金额信息获取
|
||||
*
|
||||
* @param personalCashAccount 账户类型:个人现金账户
|
||||
* @param billable 收费状态:待结算
|
||||
* @param billed 收费状态:已结算
|
||||
* @param refunded 收费状态:已退费
|
||||
* @param encounterId 诊断id
|
||||
* @return EncounterAccountDto 诊断账户金额
|
||||
**/
|
||||
EncounterAccountDto getAmount(@Param("personalCashAccount") String personalCashAccount,
|
||||
@Param("billable") Integer billable, @Param("billed") Integer billed, @Param("refunded") Integer refunded,
|
||||
@Param("encounterId") Long encounterId);
|
||||
|
||||
/**
|
||||
* 获取待配/退药
|
||||
*
|
||||
* @param encounterId 诊断id
|
||||
* @param preparationStatus 配药状态:待配
|
||||
* @param summarizedStatus 配药状态:已汇总
|
||||
* @param requestStatus 发药状态:待退
|
||||
* @param tenantId 租户id
|
||||
* @return PendingMedicationDto 待配/退药
|
||||
**/
|
||||
List<PendingMedicationDto> getPendingMedication(@Param("encounterId") Long encounterId,
|
||||
@Param("preparationStatus") Integer preparationStatus, @Param("summarizedStatus") Integer summarizedStatus,
|
||||
@Param("requestStatus") Integer requestStatus, @Param("tenantId") Integer tenantId);
|
||||
|
||||
/**
|
||||
* 查询医嘱分页列表
|
||||
*
|
||||
* @param page 分页信息
|
||||
* @param queryWrapper 查询条件
|
||||
* @param worServiceRequest 请求所在表:服务请求
|
||||
* @param medMedicationRequest 请求所在表:药品请求
|
||||
* @param draft 医嘱状态:待发送
|
||||
* @param stopped 医嘱状态:停嘱
|
||||
* @param active 住院位置状态:使用中
|
||||
* @param bed 位置类型:病床
|
||||
* @param admittingDoctor 住院医生
|
||||
* @param personalCashAccount 个人现金账户
|
||||
* @param billable 收费状态:待结算
|
||||
* @param billed 收费状态:已结算
|
||||
* @param refunded 收费状态:已退费
|
||||
* @param imp 患者状态:住院
|
||||
* @param doctorPrescription 医嘱类型:医生开立
|
||||
* @param transfer 特殊医嘱:转科
|
||||
* @param discharge 特殊医嘱:出院
|
||||
* @param nursing 特殊医嘱:护理级别
|
||||
* @return 医嘱分页列表
|
||||
*/
|
||||
Page<InpatientAdviceDto> selectInpatientAdvicePage(@Param("page") Page<InpatientAdviceDto> page,
|
||||
@Param(Constants.WRAPPER) QueryWrapper<InpatientAdviceParam> queryWrapper,
|
||||
@Param("medMedicationRequest") String medMedicationRequest,
|
||||
@Param("worServiceRequest") String worServiceRequest, @Param("draft") Integer draft,
|
||||
@Param("stopped") Integer stopped, @Param("active") Integer active, @Param("bed") Integer bed,
|
||||
@Param("admittingDoctor") String admittingDoctor, @Param("personalCashAccount") String personalCashAccount,
|
||||
@Param("billable") Integer billable, @Param("billed") Integer billed, @Param("refunded") Integer refunded,
|
||||
@Param("imp") Integer imp, @Param("doctorPrescription") Integer doctorPrescription,
|
||||
@Param("transfer") String transfer, @Param("discharge") String discharge, @Param("nursing") String nursing);
|
||||
|
||||
/**
|
||||
* 查询执行记录
|
||||
*
|
||||
* @param reqIds 项目ids
|
||||
* @return 执行记录列表
|
||||
*/
|
||||
List<PerformRecordDto> selectPerformRecordList(@Param("reqIds") List<Long> reqIds);
|
||||
|
||||
}
|
||||
|
||||
@@ -35,13 +35,14 @@ public interface AdviceProcessAppMapper {
|
||||
* @param ward 位置类型:病区
|
||||
* @param house 位置类型:病房
|
||||
* @param bed 位置类型:病床
|
||||
* @param personalCashAccount 个人现金账户
|
||||
* @return 入院患者分页列表
|
||||
*/
|
||||
Page<AdmissionPatientPageDto> selectInpatientPage(@Param("page") Page<AdmissionPatientPageDto> page,
|
||||
@Param(Constants.WRAPPER) QueryWrapper<AdmissionPageParam> queryWrapper, @Param("imp") Integer imp,
|
||||
@Param("toBeRegistered") Integer toBeRegistered, @Param("registered") Integer registered,
|
||||
@Param("active") Integer active, @Param("ward") Integer ward, @Param("house") Integer house,
|
||||
@Param("bed") Integer bed);
|
||||
@Param("bed") Integer bed, @Param("personalCashAccount") String personalCashAccount);
|
||||
|
||||
/**
|
||||
* 查询医嘱分页列表
|
||||
@@ -59,6 +60,7 @@ public interface AdviceProcessAppMapper {
|
||||
* @param billed 收费状态:已结算
|
||||
* @param refunded 收费状态:已退费
|
||||
* @param imp 患者状态:住院
|
||||
* @param doctorPrescription 医嘱类型:医生开立
|
||||
* @return 医嘱分页列表
|
||||
*/
|
||||
Page<InpatientAdviceDto> selectInpatientAdvicePage(@Param("page") Page<InpatientAdviceDto> page,
|
||||
@@ -67,5 +69,6 @@ public interface AdviceProcessAppMapper {
|
||||
@Param("worServiceRequest") String worServiceRequest, @Param("draft") Integer draft,
|
||||
@Param("active") Integer active, @Param("bed") Integer bed, @Param("admittingDoctor") String admittingDoctor,
|
||||
@Param("personalCashAccount") String personalCashAccount, @Param("billable") Integer billable,
|
||||
@Param("billed") Integer billed, @Param("refunded") Integer refunded, @Param("imp") Integer imp);
|
||||
@Param("billed") Integer billed, @Param("refunded") Integer refunded, @Param("imp") Integer imp,
|
||||
@Param("doctorPrescription") Integer doctorPrescription);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
/*
|
||||
* Copyright ©2023 CJB-CNIT Team. All rights reserved
|
||||
*/
|
||||
package com.openhis.web.inhospitalnursestation.mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import com.openhis.web.inhospitalnursestation.dto.*;
|
||||
|
||||
/**
|
||||
* 住院就诊滚方
|
||||
*/
|
||||
@Repository
|
||||
public interface EncounterAutoRollAppMapper {
|
||||
|
||||
/**
|
||||
* 查询自动滚方数据源
|
||||
*
|
||||
* @param status 状态
|
||||
* @param basicService 基础服务
|
||||
* @return 自动滚方数据源
|
||||
*/
|
||||
List<AutoRollSourceDto> getSource(@Param("status") Integer status, @Param("basicService") String basicService);
|
||||
|
||||
/**
|
||||
* 查询住院就诊滚方绑定信息
|
||||
*
|
||||
* @param encounterId 就诊id
|
||||
* @return 住院就诊滚方绑定信息
|
||||
*/
|
||||
List<EncounterAutoRollQueryDto> getEncounter(@Param("encounterId") Long encounterId);
|
||||
|
||||
/**
|
||||
* 查询在床患者信息
|
||||
*
|
||||
* @param status 启用状态
|
||||
* @param classEnum 就诊类型
|
||||
* @param formEnum 床位
|
||||
* @param typeCode 个人现金账号
|
||||
* @param maindiseFlag 主诊断标识
|
||||
* @return 在床患者信息
|
||||
*/
|
||||
List<InBedPatientInfoDto> getInBedPatientInfo(@Param("status") Integer status,
|
||||
@Param("classEnum") Integer classEnum, @Param("formEnum") Integer formEnum, @Param("typeCode") String typeCode,
|
||||
@Param("maindiseFlag") Integer maindiseFlag);
|
||||
|
||||
/**
|
||||
* 查询需要自动计费的护理医嘱
|
||||
*
|
||||
* @param status 状态为已完成(已校对)
|
||||
* @param categoryEnum 类型为护理
|
||||
* @param encounterIdList 就诊id集合
|
||||
* @return 需要自动计费的护理医嘱
|
||||
*/
|
||||
List<AutoRollNursingDto> getNursingRequest(@Param("status") Integer status,
|
||||
@Param("categoryEnum") Integer categoryEnum, @Param("encounterIdList") List<Long> encounterIdList);
|
||||
|
||||
/**
|
||||
* 查询需要自动计费的绑定基础服务信息
|
||||
*
|
||||
* @param status 状态
|
||||
* @param encounterIdList 就诊id集合
|
||||
* @return 需要自动计费的绑定基础服务信息
|
||||
*/
|
||||
List<AutoRollBasicServiceDto> getAutoRollBasicService(@Param("status") Integer status,
|
||||
@Param("encounterIdList") List<Long> encounterIdList);
|
||||
|
||||
}
|
||||
@@ -48,13 +48,21 @@ public interface MedicineSummaryAppMapper {
|
||||
* @param page 分页信息
|
||||
* @param queryWrapper 查询条件
|
||||
* @param completed 发药状态:已完成
|
||||
<<<<<<< HEAD
|
||||
* @param inProgress 发药状态:待发药
|
||||
=======
|
||||
* @param preparation 发药状态:待配药
|
||||
>>>>>>> v1.3
|
||||
* @param summaryDispense 单据类型:汇总发药
|
||||
* @return 汇总单列表
|
||||
*/
|
||||
Page<MedicineSummaryFormDto> selectMedicineSummaryFormPage(@Param("page") Page<MedicineSummaryFormDto> page,
|
||||
@Param(Constants.WRAPPER) QueryWrapper<DispenseFormSearchParam> queryWrapper,
|
||||
<<<<<<< HEAD
|
||||
@Param("completed") Integer completed, @Param("inProgress") Integer inProgress,
|
||||
=======
|
||||
@Param("completed") Integer completed, @Param("preparation") Integer preparation,
|
||||
>>>>>>> v1.3
|
||||
@Param("summaryDispense") Integer summaryDispense);
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,7 +1,56 @@
|
||||
package com.openhis.web.inhospitalnursestation.mapper;
|
||||
|
||||
<<<<<<< HEAD
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
public interface NurseBillingAppMapper {
|
||||
=======
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Constants;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.openhis.web.inhospitalnursestation.dto.InpatientAdviceDto;
|
||||
import com.openhis.web.inhospitalnursestation.dto.InpatientAdviceParam;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Date;
|
||||
|
||||
@Repository
|
||||
public interface NurseBillingAppMapper {
|
||||
|
||||
/**
|
||||
* 查询医嘱分页列表
|
||||
*
|
||||
* @param page 分页信息
|
||||
* @param queryWrapper 查询条件
|
||||
* @param worServiceRequest 请求所在表:服务请求
|
||||
* @param worDeviceRequest 请求所在表:请求
|
||||
* @param draft 医嘱状态:待发送
|
||||
* @param active 住院位置状态:使用中
|
||||
* @param bed 位置类型:病床
|
||||
* @param admittingDoctor 住院医生
|
||||
* @param personalCashAccount 个人现金账户
|
||||
* @param billable 收费状态:待结算
|
||||
* @param billed 收费状态:已结算
|
||||
* @param refunded 收费状态:已退费
|
||||
* @param imp 患者状态:住院
|
||||
* @param generateSourceEnum 请求来源
|
||||
* @param startTime 开始时间
|
||||
* @param startTime 结束时间
|
||||
* @return 医嘱分页列表
|
||||
*/
|
||||
Page<InpatientAdviceDto> getInNurseBillingPage(@Param("page") Page<InpatientAdviceDto> page,
|
||||
@Param(Constants.WRAPPER) QueryWrapper<InpatientAdviceParam> queryWrapper,
|
||||
@Param("worDeviceRequest") String worDeviceRequest, @Param("worServiceRequest") String worServiceRequest,
|
||||
@Param("draft") Integer draft, @Param("active") Integer active, @Param("bed") Integer bed,
|
||||
@Param("admittingDoctor") String admittingDoctor, @Param("personalCashAccount") String personalCashAccount,
|
||||
@Param("billable") Integer billable, @Param("billed") Integer billed, @Param("refunded") Integer refunded,
|
||||
@Param("imp") Integer imp, @Param("generateSourceEnum") Integer generateSourceEnum,
|
||||
@Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime);
|
||||
>>>>>>> v1.3
|
||||
}
|
||||
|
||||
@@ -18,5 +18,11 @@ public interface OrgDeviceStockTakeAppMapper {
|
||||
* @return 科室耗材信息
|
||||
*/
|
||||
Page<OrgDeviceDto> selectOrgDeviceInfo(@Param("page") Page<OrgDeviceDto> page,
|
||||
<<<<<<< HEAD
|
||||
@Param(Constants.WRAPPER) QueryWrapper<OrgDeviceDto> queryWrapper);
|
||||
=======
|
||||
@Param(Constants.WRAPPER) QueryWrapper<OrgDeviceDto> queryWrapper, @Param("imp") Integer imp,
|
||||
@Param("requestStatus") Integer requestStatus, @Param("dispenseStatus") Integer dispenseStatus,
|
||||
@Param("chargeItemStatus") Integer chargeItemStatus);
|
||||
>>>>>>> v1.3
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user