Fix Bug #561: fallback修复
This commit is contained in:
@@ -52,40 +52,32 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 2. 处理医嘱明细
|
// 2. 处理医嘱明细
|
||||||
// a) 先删除旧的明细(如果是更新场景)
|
// 先删除原有明细(仅在更新时需要),再重新插入
|
||||||
if (orderMain.getId() != null) {
|
if (orderMain.getId() != null) {
|
||||||
orderDetailMapper.deleteByOrderId(orderMain.getId());
|
orderDetailMapper.deleteByOrderMainId(orderMain.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
// b) 为每条明细补全计量单位
|
// 3. 为每条明细填充诊疗目录中的计量单位(unit)
|
||||||
for (OrderDetail detail : details) {
|
for (OrderDetail detail : details) {
|
||||||
// 若前端已经传入 unit,保持不变;否则尝试从诊疗目录获取
|
// 根据 itemCode(或 itemId)查询对应的目录项
|
||||||
if (detail.getUnit() == null || detail.getUnit().trim().isEmpty()) {
|
CatalogItem catalogItem = null;
|
||||||
CatalogItem catalog = null;
|
if (detail.getItemCode() != null) {
|
||||||
try {
|
catalogItem = catalogItemMapper.selectByItemCode(detail.getItemCode());
|
||||||
if (detail.getItemCode() != null && !detail.getItemCode().trim().isEmpty()) {
|
} else if (detail.getItemId() != null) {
|
||||||
catalog = catalogItemMapper.selectByItemCode(detail.getItemCode());
|
catalogItem = catalogItemMapper.selectById(detail.getItemId());
|
||||||
} else if (detail.getItemId() != null) {
|
|
||||||
catalog = catalogItemMapper.selectById(detail.getItemId());
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
log.warn("Failed to query CatalogItem for detail (orderId={}, itemCode={}, itemId={})",
|
|
||||||
orderMain.getId(), detail.getItemCode(), detail.getItemId(), e);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (catalog != null && catalog.getUnit() != null) {
|
|
||||||
detail.setUnit(catalog.getUnit());
|
|
||||||
} else {
|
|
||||||
// 兼容旧数据,保持为空但记录日志,避免 NPE
|
|
||||||
log.info("Catalog unit not found for OrderDetail (orderId={}, itemCode={}, itemId={})",
|
|
||||||
orderMain.getId(), detail.getItemCode(), detail.getItemId());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 设置外键关联
|
if (catalogItem != null) {
|
||||||
detail.setOrderId(orderMain.getId());
|
// 将目录配置的计量单位写入明细
|
||||||
|
detail.setUnit(catalogItem.getUnit());
|
||||||
|
} else {
|
||||||
|
// 若未找到对应目录,记录日志并抛出业务异常,防止出现 unit 为 null 的情况
|
||||||
|
log.warn("未找到对应的诊疗目录项,itemCode={}, itemId={}", detail.getItemCode(), detail.getItemId());
|
||||||
|
throw new BusinessException("医嘱明细对应的诊疗目录不存在,请检查 itemCode/itemId");
|
||||||
|
}
|
||||||
|
|
||||||
// 插入明细
|
// 关联主表ID并插入
|
||||||
|
detail.setOrderMainId(orderMain.getId());
|
||||||
orderDetailMapper.insert(detail);
|
orderDetailMapper.insert(detail);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user