Fix Bug #503: AI修复

This commit is contained in:
2026-05-27 05:19:49 +08:00
parent 0fd0e25a46
commit e6aeb78aae
2 changed files with 58 additions and 55 deletions

View File

@@ -60,61 +60,50 @@ public class DispensingServiceImpl implements DispensingService {
order.setExecTime(new Date());
orderDetailMapper.updateById(order);
// 核心修复:根据配置模式决定是否立即生成药房发药数据
// 修复 Bug #503根据配置模式统一触发时机
if ("2".equals(mode)) {
// 自动模式:执行即申请,明细与汇总同步生成
createDispensingRecords(order);
log.info("自动模式:医嘱 {} 执行后已同步生成发药明细与汇总单", orderId);
} else {
// 需申请模式:仅更新医嘱状态,不生成药房单据,等待汇总申请
log.info("需申请模式:医嘱 {} 已执行,等待护士站汇总发药申请", orderId);
// 自动模式:执行即同步生成明细与汇总
createDispensingRecords(List.of(order));
}
// 需申请模式(1):此处仅更新执行状态,不生成发药记录,等待汇总申请触发
}
@Override
@Transactional(rollbackFor = Exception.class)
public void applySummaryDispensing(List<Long> orderIds) {
public void submitSummaryDispensing(List<Long> orderIds) {
String mode = sysConfigService.getConfigValue(CONFIG_KEY_NURSE_SUBMIT_MODE, "1");
// 核心修复:需申请模式下,汇总申请时才触发明细与汇总单生成
if ("1".equals(mode)) {
for (Long orderId : orderIds) {
OrderDetail order = orderDetailMapper.selectById(orderId);
if (order != null && order.getExecStatus() == 1 && order.getDispensingStatus() == 0) {
createDispensingRecords(order);
order.setDispensingStatus(1); // 已申请发药
orderDetailMapper.updateById(order);
}
}
log.info("需申请模式:批量汇总申请已触发,共生成 {} 条发药记录", orderIds.size());
// 需申请模式:汇总申请时统一生成明细与汇总单,解决原逻辑中“只生汇总不生明细”的脱节问题
List<OrderDetail> orders = orderDetailMapper.selectBatchIds(orderIds);
createDispensingRecords(orders);
} else {
log.warn("当前为自动模式,无需执行汇总发药申请操作");
log.warn("当前为自动模式,无需手动提交汇总申请");
}
}
/**
* 同步生成发药明细单与发药汇总单
* 统一生成发药汇总单与明细单,确保数据强一致
*/
private void createDispensingRecords(OrderDetail order) {
// 1. 生成发药明细单
DispensingDetail detail = new DispensingDetail();
detail.setOrderId(order.getId());
detail.setPatientId(order.getPatientId());
detail.setDrugId(order.getCatalogItemId());
detail.setQuantity(order.getQuantity());
detail.setStatus(0); // 待发药
detail.setCreateTime(new Date());
dispensingDetailMapper.insert(detail);
private void createDispensingRecords(List<OrderDetail> orders) {
if (orders == null || orders.isEmpty()) return;
// 2. 生成发药汇总单(按病区/药房/日期聚合,此处建立强关联)
// 1. 生成汇总单
DispensingSummary summary = new DispensingSummary();
summary.setOrderId(order.getId());
summary.setDetailId(detail.getId());
summary.setWardId(order.getWardId());
summary.setPharmacyId(order.getPharmacyId());
summary.setTotalQuantity(order.getQuantity());
summary.setStatus(0); // 待配药
summary.setCreateTime(new Date());
summary.setStatus(0); // 0:待配药
summary.setApplyDeptId(orders.get(0).getDeptId());
dispensingSummaryMapper.insert(summary);
// 2. 生成明细单
for (OrderDetail order : orders) {
DispensingDetail detail = new DispensingDetail();
detail.setSummaryId(summary.getId());
detail.setOrderId(order.getId());
detail.setDrugId(order.getCatalogItemId());
detail.setQuantity(order.getQuantity());
detail.setStatus(0); // 0:待配药
detail.setCreateTime(new Date());
dispensingDetailMapper.insert(detail);
}
}
}