package jnpf.dmsMapper; import jnpf.base.mapper.SuperMapper; import jnpf.dmsEntity.recordprint.DmsJiluDayinLiushuiEntity; import jnpf.dmsEntity.recordprint.DmsJiluDayinShenqingZixiangEntity; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; import java.util.List; /** * 记录文件打印准备数据库操作。 */ @Mapper public interface DmsJiluDayinLiushuiMapper extends SuperMapper { /** * 锁定并读取打印申请子项,保证同一子项只能由一个请求生成流水记录。 * * @param id 打印申请子项主键 * @return 未删除的打印申请子项 */ DmsJiluDayinShenqingZixiangEntity selectPrintItemForUpdate(@Param("id") String id); /** * 统计打印申请子项已经生成的有效流水记录。 * * @param printItemId 打印申请子项主键 * @return 有效流水记录数量 */ int countActivePrintRecords(@Param("printItemId") String printItemId); /** * 批量新增打印流水实体。 * * @param records 打印流水实体集合 * @return 新增条数 */ int insertPrintRecords(@Param("records") List records); /** * 将打印申请子项更新为打印中,并写入与 A 表相同的打印人和打印时间。 * * @param entity 打印申请子项实体 * @return 更新条数 */ int markPrintItemProcessing(DmsJiluDayinShenqingZixiangEntity entity); /** * 取得记录打印流水号业务事务锁。 * *

该锁跨 DMS 实例生效,并持续到当前数据库事务结束。所有使用同一单据规则的 * DMS 入口都必须遵守该锁协议,才能保证批次号码不会互相穿插。

* * @return 固定值 1 */ @Select("SELECT 1 FROM (SELECT pg_advisory_xact_lock(" + "hashtextextended('dms:record-print:serial', 0))) serial_lock") Integer lockSerialAllocation(); }