fix(doctorstation): 解决诊疗项目执行科室验证及耗材价格显示问题 bug#220
- 修复诊疗项目执行科室非空校验逻辑,使用effectiveOrgId替代positionId - 添加getEffectiveOrgId方法统一获取执行科室ID的兼容处理 - 修复耗材价格处理逻辑,正确区分price和retailPrice字段避免零值判断错误 - 更新数据库查询映射,优化设备定义表与收费项目定义表关联条件 - 添加调试日志输出便于问题排查
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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'
|
||||
<where>
|
||||
T1.delete_flag = '0'
|
||||
AND T2.instance_table = 'adm_device_definition'
|
||||
|
||||
</where>
|
||||
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'
|
||||
<where>
|
||||
T1.delete_flag = '0'
|
||||
AND T2.instance_table = 'adm_device_definition'
|
||||
|
||||
<if test="id!= null">
|
||||
AND T1.id = #{id}
|
||||
|
||||
@@ -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;
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user