package com.openhis.web.inpatient.mapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Update; import org.apache.ibatis.annotations.Insert; /** * 住院发药/退药数据访问层 * * 关键新增/修改方法: * 1. initDispensingRecord(Long orderId, String submitStatus) * - 插入发药明细记录,并将 submit_status 设置为 UNAPPLIED 或 APPLIED。 * 2. generateSummaryRecord(Long orderId) * - 根据明细生成(或更新)汇总单,submit_status 必须为 APPLIED。 * 3. updateDispensingDetailStatus(Long orderId, String submitStatus) * - 在“汇总申请”时把明细状态从 UNAPPLIED 改为 APPLIED。 * * 这些方法配合 InpatientDispensingServiceImpl 实现了 Bug #503 的修复。 */ @Mapper public interface DispensingMapper { /** * 更新医嘱执行状态为已执行。 */ @Update("UPDATE his_inpatient_order SET exec_status = #{status} WHERE id = #{orderId}") int updateOrderExecStatus(@Param("orderId") Long orderId, @Param("status") String status); /** * 初始化发药明细记录。 * * @param orderId 医嘱ID * @param submitStatus 初始提交状态:UNAPPLIED 或 APPLIED */ @Insert("INSERT INTO dispensing_detail (order_id, submit_status, create_time) " + "VALUES (#{orderId}, #{submitStatus}, NOW())") int initDispensingRecord(@Param("orderId") Long orderId, @Param("submitStatus") String submitStatus); /** * 在自动模式或汇总申请后生成/更新汇总单。 * * @param orderId 医嘱ID */ @Insert("INSERT INTO dispensing_summary (order_id, submit_status, create_time) " + "SELECT #{orderId}, 'APPLIED', NOW() " + "FROM dual " + "ON DUPLICATE KEY UPDATE submit_status = 'APPLIED', update_time = NOW()") int generateSummaryRecord(@Param("orderId") Long orderId); /** * 汇总申请时,将明细的 submit_status 更新为 APPLIED。 * * @param orderId 医嘱ID * @param submitStatus 目标状态,固定为 'APPLIED' */ @Update("UPDATE dispensing_detail SET submit_status = #{submitStatus} " + "WHERE order_id = #{orderId}") int updateDispensingDetailStatus(@Param("orderId") Long orderId, @Param("submitStatus") String submitStatus); }