Fix Bug #503: AI修复
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user