fix(doctorstation): 修复耗材无库存时价格设置问题
- 前端组件中确保覆盖后端可能冲突的字段并强制设置耗材类型 - 后端服务中修复库存为空时无法获取价格的问题,直接从定价主表获取统一零售价 - 数据库查询中使用COALESCE函数优先从多个来源获取零售价,提高价格获取准确性 - 优化价格获取逻辑,支持从adm_charge_item_definition和adm_charge_item_def_detail表中按优先级获取价格 - 添加按批次售价的价格匹配机制,确保不同定价策略的正确应用
This commit is contained in:
@@ -389,6 +389,18 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
|
|||||||
unitCode = baseDto.getUnitCode();
|
unitCode = baseDto.getUnitCode();
|
||||||
chargeItemDefinitionId = baseDto.getChargeItemDefinitionId();
|
chargeItemDefinitionId = baseDto.getChargeItemDefinitionId();
|
||||||
List<AdvicePriceDto> priceDtoList = new ArrayList<>();
|
List<AdvicePriceDto> priceDtoList = new ArrayList<>();
|
||||||
|
|
||||||
|
// 🔧 Bug #220 修复:耗材无库存时也需要设置价格
|
||||||
|
if (inventoryList.isEmpty()) {
|
||||||
|
// 库存为空时,直接从定价主表获取统一零售价
|
||||||
|
String finalUnitCode = unitCode; // 创建final变量用于lambda
|
||||||
|
List<AdvicePriceDto> mainPrice = mainCharge.stream()
|
||||||
|
.filter(e -> baseDto.getChargeItemDefinitionId() != null && e.getDefinitionId() != null
|
||||||
|
&& baseDto.getChargeItemDefinitionId().equals(e.getDefinitionId()))
|
||||||
|
.peek(e -> e.setUnitCode(finalUnitCode)) // 设置 unitCode
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
priceDtoList.addAll(mainPrice);
|
||||||
|
} else {
|
||||||
// 库存信息里取 命中条件 去匹配价格
|
// 库存信息里取 命中条件 去匹配价格
|
||||||
for (AdviceInventoryDto adviceInventoryDto : inventoryList) {
|
for (AdviceInventoryDto adviceInventoryDto : inventoryList) {
|
||||||
Long finalChargeItemDefinitionId = chargeItemDefinitionId;
|
Long finalChargeItemDefinitionId = chargeItemDefinitionId;
|
||||||
@@ -413,6 +425,7 @@ public class DoctorStationAdviceAppServiceImpl implements IDoctorStationAdviceAp
|
|||||||
priceDtoList.addAll(mainPrice);
|
priceDtoList.addAll(mainPrice);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// 价格信息
|
// 价格信息
|
||||||
baseDto.setPriceList(priceDtoList);
|
baseDto.setPriceList(priceDtoList);
|
||||||
} else if (CommonConstants.TableName.WOR_ACTIVITY_DEFINITION.equals(tableName)) { // 诊疗
|
} else if (CommonConstants.TableName.WOR_ACTIVITY_DEFINITION.equals(tableName)) { // 诊疗
|
||||||
|
|||||||
@@ -81,7 +81,20 @@
|
|||||||
T1.chrgitm_lv,--医保等级
|
T1.chrgitm_lv,--医保等级
|
||||||
T2.type_code as item_type_code,
|
T2.type_code as item_type_code,
|
||||||
T2.yb_type,
|
T2.yb_type,
|
||||||
T2.price as retail_price,--零售价,
|
-- 🔧 Bug #220 修复:使用COALESCE优先从多个来源获取零售价
|
||||||
|
-- 优先顺序:1. adm_charge_item_definition.price 2. adm_charge_item_def_detail.amount (condition_code='3')
|
||||||
|
COALESCE(
|
||||||
|
T2.price,
|
||||||
|
(SELECT T4.amount
|
||||||
|
FROM adm_charge_item_definition T5
|
||||||
|
LEFT JOIN adm_charge_item_def_detail T4 ON T4.definition_id = T5.id
|
||||||
|
WHERE T4.condition_code = '3'
|
||||||
|
AND T5.instance_id = T1.id
|
||||||
|
AND T5.instance_table = 'adm_device_definition'
|
||||||
|
AND T4.delete_flag = '0'
|
||||||
|
ORDER BY T4.create_time DESC
|
||||||
|
LIMIT 1)
|
||||||
|
) as retail_price,--零售价,
|
||||||
( SELECT T4.amount
|
( SELECT T4.amount
|
||||||
FROM adm_charge_item_definition T5
|
FROM adm_charge_item_definition T5
|
||||||
LEFT JOIN adm_charge_item_def_detail T4 ON T4.definition_id = T5.id
|
LEFT JOIN adm_charge_item_def_detail T4 ON T4.definition_id = T5.id
|
||||||
@@ -152,7 +165,19 @@
|
|||||||
T1.item_max_quantity,
|
T1.item_max_quantity,
|
||||||
T2.type_code as item_type_code,
|
T2.type_code as item_type_code,
|
||||||
T2.yb_type,
|
T2.yb_type,
|
||||||
T2.price as retail_price,--零售价,
|
-- 🔧 Bug #220 修复:使用COALESCE优先从多个来源获取零售价
|
||||||
|
COALESCE(
|
||||||
|
T2.price,
|
||||||
|
(SELECT T4.amount
|
||||||
|
FROM adm_charge_item_definition T5
|
||||||
|
LEFT JOIN adm_charge_item_def_detail T4 ON T4.definition_id = T5.id
|
||||||
|
WHERE T4.condition_code = '3'
|
||||||
|
AND T5.instance_id = T1.id
|
||||||
|
AND T5.instance_table = 'adm_device_definition'
|
||||||
|
AND T4.delete_flag = '0'
|
||||||
|
ORDER BY T4.create_time DESC
|
||||||
|
LIMIT 1)
|
||||||
|
) as retail_price,--零售价,
|
||||||
( SELECT T4.amount
|
( SELECT T4.amount
|
||||||
FROM adm_charge_item_definition T5
|
FROM adm_charge_item_definition T5
|
||||||
LEFT JOIN adm_charge_item_def_detail T4 ON T4.definition_id = T5.id
|
LEFT JOIN adm_charge_item_def_detail T4 ON T4.definition_id = T5.id
|
||||||
|
|||||||
@@ -293,7 +293,23 @@ function fetchFromApi(searchKey) {
|
|||||||
categoryCode: item.categoryCode || '',
|
categoryCode: item.categoryCode || '',
|
||||||
deviceId: item.id,
|
deviceId: item.id,
|
||||||
deviceName: item.name,
|
deviceName: item.name,
|
||||||
|
// 🔧 Bug Fix: ...item 展开放在前面,然后用前端字段覆盖
|
||||||
...item,
|
...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,
|
||||||
|
// 价格字段优先使用retailPrice
|
||||||
|
priceList: (item.retailPrice !== undefined && item.retailPrice !== null)
|
||||||
|
? [{ price: item.retailPrice }]
|
||||||
|
: ((item.price !== undefined && item.price !== null)
|
||||||
|
? [{ price: item.price }]
|
||||||
|
: []),
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
nextTick(() => {
|
nextTick(() => {
|
||||||
|
|||||||
Reference in New Issue
Block a user