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) {
|
for (AdviceSaveDto adviceSaveDto : insertOrUpdateList) {
|
||||||
// 🔧 Bug Fix #238: 诊疗项目执行科室非空校验
|
// 🔧 Bug Fix #238: 诊疗项目执行科室非空校验
|
||||||
if (adviceSaveDto.getAdviceType() != null && adviceSaveDto.getAdviceType() == 3) {
|
if (adviceSaveDto.getAdviceType() != null && adviceSaveDto.getAdviceType() == 3) {
|
||||||
if (adviceSaveDto.getPositionId() == null) {
|
Long effectiveOrgId = adviceSaveDto.getEffectiveOrgId();
|
||||||
|
if (effectiveOrgId == null) {
|
||||||
throw new ServiceException("诊疗项目必须选择执行科室");
|
throw new ServiceException("诊疗项目必须选择执行科室");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1116,8 +1117,8 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
|
|||||||
serviceRequest.setRequesterId(adviceSaveDto.getPractitionerId()); // 开方医生
|
serviceRequest.setRequesterId(adviceSaveDto.getPractitionerId()); // 开方医生
|
||||||
serviceRequest.setEncounterId(adviceSaveDto.getEncounterId()); // 就诊id
|
serviceRequest.setEncounterId(adviceSaveDto.getEncounterId()); // 就诊id
|
||||||
serviceRequest.setAuthoredTime(curDate); // 请求签发时间
|
serviceRequest.setAuthoredTime(curDate); // 请求签发时间
|
||||||
// 执行科室
|
// 执行科室 - 使用兼容方法获取执行科室ID
|
||||||
serviceRequest.setOrgId(adviceSaveDto.getPositionId());
|
serviceRequest.setOrgId(adviceSaveDto.getEffectiveOrgId());
|
||||||
serviceRequest.setContentJson(adviceSaveDto.getContentJson()); // 请求内容json
|
serviceRequest.setContentJson(adviceSaveDto.getContentJson()); // 请求内容json
|
||||||
serviceRequest.setYbClassEnum(adviceSaveDto.getYbClassEnum());// 类别医保编码
|
serviceRequest.setYbClassEnum(adviceSaveDto.getYbClassEnum());// 类别医保编码
|
||||||
serviceRequest.setConditionId(adviceSaveDto.getConditionId()); // 诊断id
|
serviceRequest.setConditionId(adviceSaveDto.getConditionId()); // 诊断id
|
||||||
|
|||||||
@@ -50,10 +50,32 @@ public class AdviceSaveDto {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 物理位置id | 可能是 发药药房id,耗材房id,执行科室id
|
* 物理位置id | 可能是 发药药房id,耗材房id,执行科室id
|
||||||
|
* 前端字段名:orgId(诊疗项目)
|
||||||
|
* 对应数据库:org_id / perform_location
|
||||||
*/
|
*/
|
||||||
@JsonSerialize(using = ToStringSerializer.class)
|
@JsonSerialize(using = ToStringSerializer.class)
|
||||||
private Long positionId;
|
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;
|
private String pharmacologyCategoryCode;
|
||||||
|
|
||||||
|
|||||||
@@ -100,10 +100,11 @@
|
|||||||
AND T5.instance_table = 'adm_device_definition'
|
AND T5.instance_table = 'adm_device_definition'
|
||||||
) as maximum_retail_price--最高零售价
|
) as maximum_retail_price--最高零售价
|
||||||
FROM adm_device_definition T1
|
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>
|
<where>
|
||||||
T1.delete_flag = '0'
|
T1.delete_flag = '0'
|
||||||
AND T2.instance_table = 'adm_device_definition'
|
|
||||||
|
|
||||||
</where>
|
</where>
|
||||||
ORDER BY T1.bus_no
|
ORDER BY T1.bus_no
|
||||||
@@ -170,10 +171,11 @@
|
|||||||
AND T5.instance_table = 'adm_device_definition'
|
AND T5.instance_table = 'adm_device_definition'
|
||||||
) as maximum_retail_price--最高零售价
|
) as maximum_retail_price--最高零售价
|
||||||
FROM adm_device_definition T1
|
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>
|
<where>
|
||||||
T1.delete_flag = '0'
|
T1.delete_flag = '0'
|
||||||
AND T2.instance_table = 'adm_device_definition'
|
|
||||||
|
|
||||||
<if test="id!= null">
|
<if test="id!= null">
|
||||||
AND T1.id = #{id}
|
AND T1.id = #{id}
|
||||||
|
|||||||
@@ -257,35 +257,45 @@ function fetchFromApi(searchKey) {
|
|||||||
searchKey: searchKey || '',
|
searchKey: searchKey || '',
|
||||||
statusEnum: 2,
|
statusEnum: 2,
|
||||||
}).then((res) => {
|
}).then((res) => {
|
||||||
|
console.log('[Debug] 耗材列表返回数据:', res.data);
|
||||||
if (res.data && res.data.records) {
|
if (res.data && res.data.records) {
|
||||||
adviceBaseList.value = res.data.records.map((item) => ({
|
adviceBaseList.value = res.data.records.map((item) => {
|
||||||
adviceName: item.name || item.busNo,
|
console.log('[Debug] 耗材项:', item.name, 'price:', item.price, 'retailPrice:', item.retailPrice);
|
||||||
adviceType: 4,
|
return {
|
||||||
unitCode: item.unitCode || '',
|
adviceName: item.name || item.busNo,
|
||||||
unitCode_dictText: item.unitCode_dictText || '',
|
adviceType: 4,
|
||||||
minUnitCode: item.minUnitCode || item.unitCode || '',
|
unitCode: item.unitCode || '',
|
||||||
minUnitCode_dictText: item.minUnitCode_dictText || item.unitCode_dictText || '',
|
unitCode_dictText: item.unitCode_dictText || '',
|
||||||
volume: item.size || item.totalVolume || '',
|
minUnitCode: item.minUnitCode || item.unitCode || '',
|
||||||
partPercent: item.partPercent || 1,
|
minUnitCode_dictText: item.minUnitCode_dictText || item.unitCode_dictText || '',
|
||||||
priceList: item.price ? [{ price: item.price }] : (item.retailPrice ? [{ price: item.retailPrice }] : []),
|
volume: item.size || item.totalVolume || '',
|
||||||
inventoryList: [],
|
partPercent: item.partPercent || 1,
|
||||||
adviceDefinitionId: item.id,
|
// 🔧 Bug #220 修复:正确处理耗材价格,支持price或retailPrice字段
|
||||||
adviceTableName: 'adm_device_definition',
|
// 零售价可能是0,所以不能用简单的布尔判断,需要明确检查null/undefined
|
||||||
chargeItemDefinitionId: item.id,
|
priceList: (item.price !== undefined && item.price !== null)
|
||||||
positionId: item.locationId,
|
? [{ price: item.price }]
|
||||||
positionName: item.locationId_dictText || '',
|
: ((item.retailPrice !== undefined && item.retailPrice !== null)
|
||||||
dose: 0,
|
? [{ price: item.retailPrice }]
|
||||||
doseUnitCode: item.minUnitCode || item.unitCode || '',
|
: []),
|
||||||
doseUnitCode_dictText: item.minUnitCode_dictText || item.unitCode_dictText || '',
|
inventoryList: [],
|
||||||
injectFlag: 0,
|
adviceDefinitionId: item.id,
|
||||||
injectFlag_enumText: '否',
|
adviceTableName: 'adm_device_definition',
|
||||||
skinTestFlag: 0,
|
chargeItemDefinitionId: item.id,
|
||||||
skinTestFlag_enumText: '否',
|
positionId: item.locationId,
|
||||||
categoryCode: item.categoryCode || '',
|
positionName: item.locationId_dictText || '',
|
||||||
deviceId: item.id,
|
dose: 0,
|
||||||
deviceName: item.name,
|
doseUnitCode: item.minUnitCode || item.unitCode || '',
|
||||||
...item,
|
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(() => {
|
nextTick(() => {
|
||||||
currentIndex.value = 0;
|
currentIndex.value = 0;
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user