实现科室护士管理患者排队叫号队列,实现患者智能分诊、队列调整、叫号控制等功能

This commit is contained in:
2026-01-12 17:36:55 +08:00
parent c1d453600b
commit 32adb984e2
12 changed files with 870 additions and 234 deletions

View File

@@ -8,6 +8,7 @@ import com.openhis.web.chargemanage.dto.CurrentDayEncounterDto;
import com.openhis.web.chargemanage.dto.OrgMetadata;
import com.openhis.web.chargemanage.dto.PatientMetadata;
import com.openhis.web.chargemanage.dto.PractitionerMetadata;
import com.openhis.web.chargemanage.dto.ReprintRegistrationDto;
import com.openhis.web.paymentmanage.dto.CancelRegPaymentDto;
import javax.servlet.http.HttpServletRequest;
@@ -85,4 +86,12 @@ public interface IOutpatientRegistrationAppService {
*/
R<?> cancelRegister(Long encounterId);
/**
* 补打挂号
*
* @param reprintRegistrationDto 补打挂号信息
* @return 结果
*/
R<?> reprintRegistration(ReprintRegistrationDto reprintRegistrationDto);
}

View File

@@ -65,8 +65,16 @@ public class OutpatientPricingAppServiceImpl implements IOutpatientPricingAppSer
@Override
public IPage<AdviceBaseDto> getAdviceBaseInfo(AdviceBaseDto adviceBaseDto, String searchKey, Long locationId,
Long organizationId, Integer pageNo, Integer pageSize) {
// 根据前端传入的adviceType动态构建查询类型列表
// 如果adviceType不为空只查询该类型如果为空查询所有类型1:药品, 2:耗材, 3:诊疗)
List<Integer> adviceTypes;
if (adviceBaseDto != null && adviceBaseDto.getAdviceType() != null) {
adviceTypes = List.of(adviceBaseDto.getAdviceType());
} else {
adviceTypes = List.of(1, 2, 3);
}
return iDoctorStationAdviceAppService.getAdviceBaseInfo(adviceBaseDto, searchKey, locationId, null,
organizationId, pageNo, pageSize, Whether.YES.getValue(), List.of(1, 2, 3), null);
organizationId, pageNo, pageSize, Whether.YES.getValue(), adviceTypes, null);
}
}

View File

@@ -27,6 +27,7 @@ import com.openhis.web.chargemanage.dto.CurrentDayEncounterDto;
import com.openhis.web.chargemanage.dto.OrgMetadata;
import com.openhis.web.chargemanage.dto.PatientMetadata;
import com.openhis.web.chargemanage.dto.PractitionerMetadata;
import com.openhis.web.chargemanage.dto.ReprintRegistrationDto;
import com.openhis.web.chargemanage.mapper.OutpatientRegistrationAppMapper;
import com.openhis.web.paymentmanage.appservice.IPaymentRecService;
import com.openhis.web.paymentmanage.dto.CancelPaymentDto;
@@ -283,7 +284,7 @@ public class OutpatientRegistrationAppServiceImpl implements IOutpatientRegistra
HttpServletRequest request) {
// 构建查询条件
QueryWrapper<CurrentDayEncounterDto> queryWrapper = HisQueryUtils.buildQueryWrapper(null, searchKey,
new HashSet<>(Arrays.asList("patient_name", "organization_name", "practitioner_name", "healthcare_name")),
new HashSet<>(Arrays.asList("patient_name", "organization_name", "practitioner_name", "healthcare_name", "identifier_no")),
request);
// 手动处理 statusEnum 参数(用于过滤退号记录)
@@ -330,4 +331,18 @@ public class OutpatientRegistrationAppServiceImpl implements IOutpatientRegistra
return R.ok("已取消挂号");
}
/**
* 补打挂号
* 补打挂号不需要修改数据库,只需要返回成功即可,前端已有所有需要的数据用于打印
*
* @param reprintRegistrationDto 补打挂号信息
* @return 结果
*/
@Override
public R<?> reprintRegistration(ReprintRegistrationDto reprintRegistrationDto) {
// 补打挂号只是重新打印,不需要修改数据库
// 可以在这里添加日志记录补打操作
return R.ok(null, "补打挂号成功");
}
}

View File

@@ -8,6 +8,7 @@ import com.openhis.common.enums.PriorityLevel;
import com.openhis.financial.domain.PaymentReconciliation;
import com.openhis.web.chargemanage.appservice.IOutpatientRegistrationAppService;
import com.openhis.web.chargemanage.dto.OutpatientRegistrationInitDto;
import com.openhis.web.chargemanage.dto.ReprintRegistrationDto;
import com.openhis.web.paymentmanage.appservice.IEleInvoiceService;
import com.openhis.web.paymentmanage.dto.CancelRegPaymentDto;
import lombok.AllArgsConstructor;
@@ -151,4 +152,15 @@ public class OutpatientRegistrationController {
return R.ok(iOutpatientRegistrationAppService.getCurrentDayEncounter(searchKey, pageNo, pageSize, request));
}
/**
* 补打挂号
*
* @param reprintRegistrationDto 补打挂号信息
* @return 结果
*/
@PostMapping(value = "/reprint")
public R<?> reprintRegistration(@RequestBody ReprintRegistrationDto reprintRegistrationDto) {
return iOutpatientRegistrationAppService.reprintRegistration(reprintRegistrationDto);
}
}

View File

@@ -136,4 +136,9 @@ public class CurrentDayEncounterDto {
*/
private String phone;
/**
* 就诊卡号
*/
private String identifierNo;
}

View File

@@ -65,7 +65,8 @@
T9.charge_item_ids,
T9.payment_id,
T9.picture_url,
T9.birth_date
T9.birth_date,
T9.identifier_no
from (
SELECT T1.tenant_id AS tenant_id,
T1.id AS encounter_id,
@@ -88,7 +89,8 @@
T13.charge_item_ids,
T13.id AS payment_id,
ai.picture_url AS picture_url,
T8.birth_date AS birth_date
T8.birth_date AS birth_date,
T18.identifier_no AS identifier_no
FROM adm_encounter AS T1
LEFT JOIN adm_organization AS T2 ON T1.organization_id = T2.ID AND T2.delete_flag = '0'
LEFT JOIN adm_healthcare_service AS T3 ON T1.service_type_id = T3.ID AND T3.delete_flag = '0'
@@ -118,6 +120,18 @@
ON T1.ID = T6.encounter_id AND T6.delete_flag = '0' AND T6.encounter_flag = '1'
LEFT JOIN fin_contract AS T7 ON T6.contract_no = T7.bus_no AND T7.delete_flag = '0'
LEFT JOIN adm_patient AS T8 ON T1.patient_id = T8.ID AND T8.delete_flag = '0'
LEFT JOIN (
SELECT patient_id,
identifier_no
FROM (
SELECT patient_id,
identifier_no,
ROW_NUMBER() OVER (PARTITION BY patient_id ORDER BY create_time ASC) AS rn
FROM adm_patient_identifier
WHERE delete_flag = '0'
) t
WHERE rn = 1
) AS T18 ON T8.id = T18.patient_id
LEFT JOIN adm_charge_item AS T10 ON T1.id = T10.encounter_id AND T10.delete_flag = '0'
LEFT JOIN adm_account AS T11 ON T10.account_id = T11.id AND T11.delete_flag = '0'
LEFT JOIN adm_practitioner AS T12 ON T12.ID = T10.enterer_id AND T12.delete_flag = '0'

View File

@@ -229,11 +229,12 @@
LEFT JOIN adm_charge_item_definition AS T2
ON T2.instance_id = T1.ID
AND T2.delete_flag = '0' AND T2.status_enum = #{statusEnum}
AND T2.instance_table = #{activityTableName}
LEFT JOIN adm_organization_location AS T3 ON T3.activity_definition_id = T1.ID
AND T3.delete_flag = '0' AND (CURRENT_TIME :: time (6) BETWEEN T3.start_time AND T3.end_time)
WHERE T1.delete_flag = '0'
<if test="pricingFlag ==1">
AND T1.pricing_flag = #{pricingFlag}
AND (T1.pricing_flag = #{pricingFlag} OR T1.pricing_flag IS NULL)
</if>
<if test="adviceDefinitionIdParamList != null and !adviceDefinitionIdParamList.isEmpty()">
AND T1.id IN
@@ -242,7 +243,6 @@
</foreach>
</if>
AND T1.status_enum = #{statusEnum}
AND T2.instance_table = #{activityTableName}
)
</if>
) AS abi