刘光辉
4 小时以前 06f314545ac3514d7ce28939920866ae8188d31c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="jnpf.dmsMapper.DmsVersionStateMapper">
    <resultMap id="State" type="jnpf.dmsIntegration.audit.DmsVersionStateAuditRow">
        <id column="file_version_id" property="fileVersionId" typeHandler="jnpf.dmsDatabase.DmsUuidTypeHandler"/>
        <result column="lifecycle_status" property="lifecycleStatus"/>
        <result column="effective_from" property="effectiveFrom"/>
        <result column="effective_to" property="effectiveTo"/>
        <result column="status_reason" property="statusReason"/>
    </resultMap>
    <update id="updateCurrentEffectiveTo">
        UPDATE public.dms_version_states SET effective_to=#{effectiveTo}, revision=revision+1, updated_at=statement_timestamp()
        WHERE tenant_id=#{tenantId} AND file_version_id=#{fileVersionId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}
          AND lifecycle_status='EFFECTIVE' AND effective_from &lt;= statement_timestamp()
          AND effective_to &gt; statement_timestamp() AND #{effectiveTo} &gt; effective_to
    </update>
    <select id="selectAuditState" resultMap="State">SELECT file_version_id, lifecycle_status, effective_from, effective_to, status_reason FROM public.dms_version_states WHERE tenant_id = #{tenantId} AND file_version_id = #{fileVersionId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}</select>
    <insert id="insertDirectEffective">INSERT INTO public.dms_version_states (file_version_id, tenant_id, document_id, lifecycle_status, approved_at, approved_by, archived_at, effective_from, approval_source_type, approval_source_id, status_reason, status_changed_by) VALUES (#{fileVersionId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}, #{tenantId}, #{documentId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}, 'EFFECTIVE', CURRENT_TIMESTAMP, #{userId}, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'DIRECT', CAST(#{fileVersionId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler} AS TEXT), 'DMS 临时上传直接生效', #{userId})</insert>
    <insert id="insertWorkflowPending">INSERT INTO public.dms_version_states (file_version_id, tenant_id, document_id, lifecycle_status, approved_at, approved_by, archived_at, effective_from, approval_source_type, approval_source_id, status_reason, status_changed_by, workflow_flow_id, workflow_task_id, workflow_file_type) VALUES (#{fileVersionId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}, #{tenantId}, #{documentId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}, 'PENDING_APPROVAL', NULL, NULL, CURRENT_TIMESTAMP, NULL, 'WORKFLOW', #{approvalSourceId}, '工作流文件已暂存,等待审批', #{userId}, #{flowId}, #{taskId}, #{fileType})</insert>
    <update id="activateWorkflowPending">UPDATE public.dms_version_states SET lifecycle_status = 'EFFECTIVE', approved_at = CURRENT_TIMESTAMP, approved_by = #{userId}, archived_at = CURRENT_TIMESTAMP, effective_from = CURRENT_TIMESTAMP, effective_to = NULL, status_reason = '工作流审批通过并生效', status_changed_at = CURRENT_TIMESTAMP, status_changed_by = #{userId}, revision = revision + 1, updated_at = CURRENT_TIMESTAMP WHERE tenant_id = #{tenantId} AND file_version_id = #{fileVersionId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler} AND lifecycle_status = 'PENDING_APPROVAL' AND workflow_flow_id = #{flowId} AND workflow_task_id = #{taskId} AND workflow_file_type = #{fileType}</update>
    <!-- A record removed by a revision becomes historical; document/directory access is unchanged. -->
    <update id="retireCurrent">
        UPDATE public.dms_version_states SET lifecycle_status='SUPERSEDED', effective_to=CURRENT_TIMESTAMP,
            status_reason='修订移除记录,保留历史', status_changed_at=CURRENT_TIMESTAMP,
            status_changed_by=#{userId}, revision=revision+1, updated_at=CURRENT_TIMESTAMP
        WHERE tenant_id=#{tenantId} AND document_id=#{documentId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}
          AND file_version_id=#{fileVersionId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}
          AND lifecycle_status='EFFECTIVE' AND effective_from &lt;= CURRENT_TIMESTAMP
          AND (effective_to IS NULL OR effective_to &gt; CURRENT_TIMESTAMP)
    </update>
    <update id="supersedeCurrent">UPDATE public.dms_version_states SET lifecycle_status = 'SUPERSEDED', effective_to = CURRENT_TIMESTAMP, status_reason = CONCAT('修订,已由版本 ', #{newVersionLabel}, ' 替代'), status_changed_at = CURRENT_TIMESTAMP, status_changed_by = #{userId}, revision = revision + 1, updated_at = CURRENT_TIMESTAMP WHERE tenant_id = #{tenantId} AND document_id = #{documentId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler} AND file_version_id = #{fileVersionId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler} AND lifecycle_status = 'EFFECTIVE' AND effective_from &lt;= CURRENT_TIMESTAMP AND (effective_to IS NULL OR CURRENT_TIMESTAMP &lt; effective_to)</update>
    <insert id="insertRevisionEffective">INSERT INTO public.dms_version_states (file_version_id, tenant_id, document_id, lifecycle_status, approved_at, approved_by, archived_at, effective_from, approval_source_type, approval_source_id, status_reason, status_changed_by) VALUES (#{fileVersionId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}, #{tenantId}, #{documentId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}, 'EFFECTIVE', CURRENT_TIMESTAMP, #{userId}, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'DIRECT', CONCAT('revision:', CAST(#{baseFileVersionId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler} AS TEXT), ':', #{sourceId}), #{revisionReason}, #{userId})</insert>
    <update id="approvePending">
        UPDATE public.dms_version_states SET lifecycle_status = 'PENDING_EFFECTIVE',
            approved_at = #{approvedAt}, approved_by = #{actorId}, effective_from = #{scheduledAt}, effective_to = #{effectiveTo},
            status_reason = '审核通过,等待日期生效', status_changed_by = #{actorId}, revision = revision + 1
        WHERE tenant_id = #{tenantId} AND file_version_id = #{versionId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler} AND lifecycle_status = 'PENDING_APPROVAL'
    </update>
    <update id="activateApproved">
        UPDATE public.dms_version_states SET lifecycle_status = 'EFFECTIVE', effective_from = CURRENT_TIMESTAMP,
            status_reason = '批准文件按日期生效', status_changed_by = #{actorId}, revision = revision + 1
        WHERE tenant_id = #{tenantId} AND file_version_id = #{versionId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler} AND lifecycle_status = 'PENDING_EFFECTIVE'
          AND effective_from &lt;= CURRENT_TIMESTAMP AND (effective_to IS NULL OR effective_to &gt; CURRENT_TIMESTAMP)
    </update>
    <update id="expire">
        UPDATE public.dms_version_states SET lifecycle_status = 'EXPIRED',
            status_reason = #{statusReason}, status_changed_by = #{changedBy},
            revision = revision + 1, status_changed_at = statement_timestamp(), updated_at = statement_timestamp()
        WHERE tenant_id = #{tenantId}
          AND file_version_id = #{fileVersionId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler}
          AND lifecycle_status = 'EFFECTIVE'
          AND effective_to &lt;= statement_timestamp()
    </update>
</mapper>