diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java
index aa2e422c..748e1876 100644
--- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java
+++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/appservice/impl/DoctorStationAdviceAppServiceImpl.java
@@ -1077,7 +1077,8 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
for (AdviceSaveDto adviceSaveDto : insertOrUpdateList) {
// 🔧 Bug Fix #238: 诊疗项目执行科室非空校验
if (adviceSaveDto.getAdviceType() != null && adviceSaveDto.getAdviceType() == 3) {
- if (adviceSaveDto.getPositionId() == null) {
+ Long effectiveOrgId = adviceSaveDto.getEffectiveOrgId();
+ if (effectiveOrgId == null) {
throw new ServiceException("诊疗项目必须选择执行科室");
}
}
@@ -1116,8 +1117,8 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
serviceRequest.setRequesterId(adviceSaveDto.getPractitionerId()); // 开方医生
serviceRequest.setEncounterId(adviceSaveDto.getEncounterId()); // 就诊id
serviceRequest.setAuthoredTime(curDate); // 请求签发时间
- // 执行科室
- serviceRequest.setOrgId(adviceSaveDto.getPositionId());
+ // 执行科室 - 使用兼容方法获取执行科室ID
+ serviceRequest.setOrgId(adviceSaveDto.getEffectiveOrgId());
serviceRequest.setContentJson(adviceSaveDto.getContentJson()); // 请求内容json
serviceRequest.setYbClassEnum(adviceSaveDto.getYbClassEnum());// 类别医保编码
serviceRequest.setConditionId(adviceSaveDto.getConditionId()); // 诊断id
diff --git a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdviceSaveDto.java b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdviceSaveDto.java
index 0b973fad..743e8684 100644
--- a/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdviceSaveDto.java
+++ b/openhis-server-new/openhis-application/src/main/java/com/openhis/web/doctorstation/dto/AdviceSaveDto.java
@@ -50,10 +50,32 @@ public class AdviceSaveDto {
/**
* 物理位置id | 可能是 发药药房id,耗材房id,执行科室id
+ * 前端字段名:orgId(诊疗项目)
+ * 对应数据库:org_id / perform_location
*/
@JsonSerialize(using = ToStringSerializer.class)
private Long positionId;
+ /**
+ * 执行科室ID | 诊疗项目使用
+ * 前端传来字段名:orgId
+ * 对应数据库:org_id
+ * 🔧 Bug Fix #238: 添加此字段以支持前端orgId传参
+ */
+ @JsonSerialize(using = ToStringSerializer.class)
+ private Long orgId;
+
+ /**
+ * 获取有效的执行科室ID(兼容处理)
+ * 优先使用orgId,如果不存在则使用positionId
+ * 🔧 Bug Fix #238: 统一获取执行科室ID的方法
+ *
+ * @return 有效的科室ID,如果都为null则返回null
+ */
+ public Long getEffectiveOrgId() {
+ return orgId != null ? orgId : positionId;
+ }
+
/** 药品性质 | 分方使用 */
private String pharmacologyCategoryCode;
diff --git a/openhis-server-new/openhis-application/src/main/resources/mapper/datadictionary/DeviceManageMapper.xml b/openhis-server-new/openhis-application/src/main/resources/mapper/datadictionary/DeviceManageMapper.xml
index ca161cf9..38baa0a5 100644
--- a/openhis-server-new/openhis-application/src/main/resources/mapper/datadictionary/DeviceManageMapper.xml
+++ b/openhis-server-new/openhis-application/src/main/resources/mapper/datadictionary/DeviceManageMapper.xml
@@ -100,10 +100,11 @@
AND T5.instance_table = 'adm_device_definition'
) as maximum_retail_price--最高零售价
FROM adm_device_definition T1
- LEFT JOIN adm_charge_item_definition T2 ON T1.id = T2.instance_id
+ LEFT JOIN adm_charge_item_definition T2
+ ON T1.id = T2.instance_id
+ AND T2.instance_table = 'adm_device_definition'
T1.delete_flag = '0'
- AND T2.instance_table = 'adm_device_definition'
ORDER BY T1.bus_no
@@ -170,10 +171,11 @@
AND T5.instance_table = 'adm_device_definition'
) as maximum_retail_price--最高零售价
FROM adm_device_definition T1
- LEFT JOIN adm_charge_item_definition T2 ON T1.id = T2.instance_id
+ LEFT JOIN adm_charge_item_definition T2
+ ON T1.id = T2.instance_id
+ AND T2.instance_table = 'adm_device_definition'
T1.delete_flag = '0'
- AND T2.instance_table = 'adm_device_definition'
AND T1.id = #{id}
diff --git a/openhis-ui-vue3/src/views/doctorstation/components/adviceBaseList.vue b/openhis-ui-vue3/src/views/doctorstation/components/adviceBaseList.vue
index a3719be7..2e4d4171 100644
--- a/openhis-ui-vue3/src/views/doctorstation/components/adviceBaseList.vue
+++ b/openhis-ui-vue3/src/views/doctorstation/components/adviceBaseList.vue
@@ -257,35 +257,45 @@ function fetchFromApi(searchKey) {
searchKey: searchKey || '',
statusEnum: 2,
}).then((res) => {
+ console.log('[Debug] 耗材列表返回数据:', res.data);
if (res.data && res.data.records) {
- adviceBaseList.value = res.data.records.map((item) => ({
- adviceName: item.name || item.busNo,
- adviceType: 4,
- unitCode: item.unitCode || '',
- unitCode_dictText: item.unitCode_dictText || '',
- minUnitCode: item.minUnitCode || item.unitCode || '',
- minUnitCode_dictText: item.minUnitCode_dictText || item.unitCode_dictText || '',
- volume: item.size || item.totalVolume || '',
- partPercent: item.partPercent || 1,
- priceList: item.price ? [{ price: item.price }] : (item.retailPrice ? [{ price: item.retailPrice }] : []),
- inventoryList: [],
- adviceDefinitionId: item.id,
- adviceTableName: 'adm_device_definition',
- chargeItemDefinitionId: item.id,
- positionId: item.locationId,
- positionName: item.locationId_dictText || '',
- dose: 0,
- doseUnitCode: item.minUnitCode || item.unitCode || '',
- doseUnitCode_dictText: item.minUnitCode_dictText || item.unitCode_dictText || '',
- injectFlag: 0,
- injectFlag_enumText: '否',
- skinTestFlag: 0,
- skinTestFlag_enumText: '否',
- categoryCode: item.categoryCode || '',
- deviceId: item.id,
- deviceName: item.name,
- ...item,
- }));
+ adviceBaseList.value = res.data.records.map((item) => {
+ console.log('[Debug] 耗材项:', item.name, 'price:', item.price, 'retailPrice:', item.retailPrice);
+ return {
+ adviceName: item.name || item.busNo,
+ adviceType: 4,
+ unitCode: item.unitCode || '',
+ unitCode_dictText: item.unitCode_dictText || '',
+ minUnitCode: item.minUnitCode || item.unitCode || '',
+ minUnitCode_dictText: item.minUnitCode_dictText || item.unitCode_dictText || '',
+ volume: item.size || item.totalVolume || '',
+ partPercent: item.partPercent || 1,
+ // 🔧 Bug #220 修复:正确处理耗材价格,支持price或retailPrice字段
+ // 零售价可能是0,所以不能用简单的布尔判断,需要明确检查null/undefined
+ priceList: (item.price !== undefined && item.price !== null)
+ ? [{ price: item.price }]
+ : ((item.retailPrice !== undefined && item.retailPrice !== null)
+ ? [{ price: item.retailPrice }]
+ : []),
+ inventoryList: [],
+ adviceDefinitionId: item.id,
+ adviceTableName: 'adm_device_definition',
+ chargeItemDefinitionId: item.id,
+ positionId: item.locationId,
+ positionName: item.locationId_dictText || '',
+ dose: 0,
+ doseUnitCode: item.minUnitCode || item.unitCode || '',
+ doseUnitCode_dictText: item.minUnitCode_dictText || item.unitCode_dictText || '',
+ injectFlag: 0,
+ injectFlag_enumText: '否',
+ skinTestFlag: 0,
+ skinTestFlag_enumText: '否',
+ categoryCode: item.categoryCode || '',
+ deviceId: item.id,
+ deviceName: item.name,
+ ...item,
+ };
+ });
nextTick(() => {
currentIndex.value = 0;
});