刘光辉
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<?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.DmsWenjianBupinghengMapper">
    <resultMap id="ExecutionMap" type="jnpf.dmsEntity.fenfa.DmsWenjianBupinghengExecution" autoMapping="false">
        <id column="f_id" property="id"/>
        <result column="biz_sign" property="bizSign"/>
        <result column="zhixing_shijian" property="zhixingShijian"/>
        <result column="f_tenant_id" property="tenantId"/>
        <result column="dengji_ren_id" property="dengjiRenId"/>
        <result column="f_version" property="version"/>
    </resultMap>
    <resultMap id="ItemMap" type="jnpf.dmsEntity.fenfa.DmsWenjianBupinghengExecution$Item" autoMapping="false">
        <id column="f_id" property="id"/>
        <result column="dayin_jilu_id" property="dayinJiluId"/>
        <result column="cuoshi" property="cuoshi"/>
        <result column="yuanyin" property="yuanyin"/>
        <result column="xin_dayin_renwu_id" property="xinDayinRenwuId"/>
    </resultMap>
    <select id="lockDocument" resultMap="ExecutionMap">
        SELECT f_id, biz_sign, zhixing_shijian, f_tenant_id, dengji_ren_id, COALESCE(f_version, 0) AS f_version
        FROM dms_wenjian_bupingheng_dengji
        WHERE f_tenant_id = #{tenantId} AND f_id = #{id} AND f_delete_mark IS NULL FOR UPDATE
    </select>
    <select id="lockItems" resultMap="ItemMap">
        SELECT f_id, dayin_jilu_id, cuoshi, yuanyin, xin_dayin_renwu_id
        FROM dms_wenjian_bupingheng_dengji_zixiang
        WHERE f_tenant_id = #{tenantId} AND f_foreign_id = #{id} AND f_delete_mark IS NULL
        ORDER BY f_id FOR UPDATE
    </select>
    <update id="completeDocument">
        UPDATE dms_wenjian_bupingheng_dengji
        SET zhixing_shijian = #{now}, f_version = COALESCE(f_version, 0) + 1
        WHERE f_tenant_id = #{tenantId} AND f_id = #{id} AND f_delete_mark IS NULL
          AND zhixing_shijian IS NULL
    </update>
    <update id="linkReplacement">
        UPDATE dms_wenjian_bupingheng_dengji_zixiang SET xin_dayin_renwu_id = #{taskId}
        WHERE f_tenant_id = #{tenantId} AND f_id = #{id} AND f_foreign_id = #{documentId}
          AND f_delete_mark IS NULL AND (xin_dayin_renwu_id IS NULL OR btrim(xin_dayin_renwu_id) = '')
    </update>
    <update id="voidPrint">
        UPDATE dms_wenjian_dayin_jilu
        SET biz_status = 'yizuofei', f_last_modify_user_id = #{userId}, f_last_modify_time = #{now}
        WHERE f_tenant_id = #{tenantId} AND f_id = #{id}
          AND biz_status IN ('daifafang', 'daiqianshou') AND f_delete_mark IS NULL
    </update>
    <!-- 已无待交接副本:已交接或提前回收则完成,全部作废才取消;提前回收仍须等待打印完成。 -->
    <update id="finishDistribution">
        UPDATE dms_wenjian_fenfa_renwu d
        SET biz_status = CASE WHEN signed.f_id IS NULL AND recycled.task_status IS NULL
                             THEN 'yiquxiao' ELSE 'yiwancheng' END,
            jieshou_ren_id = COALESCE(signed.qianshou_ren_id, d.jieshou_ren_id),
            fafang_ren_id = COALESCE(signed.fafang_ren_id, d.fafang_ren_id),
            fafang_bumen_id = COALESCE(signed.fafang_bumen_id, d.fafang_bumen_id),
            fafang_shijian = COALESCE(signed.fafang_shijian, d.fafang_shijian),
            f_last_modify_user_id = #{userId}, f_last_modify_time = #{now}
        FROM (SELECT 1) seed
        LEFT JOIN LATERAL (
            SELECT p.f_id, p.qianshou_ren_id, p.fafang_ren_id, p.fafang_bumen_id, p.fafang_shijian
            FROM dms_wenjian_dayin_jilu p
            WHERE p.f_tenant_id = #{tenantId} AND p.dayin_renwu_id = #{taskId}
              AND p.biz_status &lt;&gt; 'yizuofei' AND p.qianshou_shijian IS NOT NULL
              AND p.f_delete_mark IS NULL
            ORDER BY p.qianshou_shijian DESC, p.f_id LIMIT 1
        ) signed ON TRUE
        LEFT JOIN LATERAL (
            SELECT t.biz_status AS task_status
            FROM dms_wenjian_dayin_renwu t
            WHERE t.f_tenant_id = #{tenantId} AND t.f_id = #{taskId}
              AND t.f_delete_mark IS NULL
              AND t.laiyuan_leixing IN ('wenjian_xinzeng_shenhe', 'wenjian_xiuding_shenhe')
              AND EXISTS (
                  SELECT 1 FROM dms_wenjian_dayin_jilu p
                  WHERE p.f_tenant_id = t.f_tenant_id AND p.dayin_renwu_id = t.f_id
                    AND p.f_delete_mark IS NULL AND p.qianshou_shijian IS NULL
                    AND p.biz_status IN ('daixiaohui', 'yixiaohui', 'daiguidang', 'yiguidang')
                    AND EXISTS (
                        SELECT 1 FROM dms_wenjian_dayin_queren q
                        WHERE q.f_tenant_id = p.f_tenant_id AND q.dayin_renwu_id = p.dayin_renwu_id
                          AND COALESCE(NULLIF(q.jieguo_neirong, ''), '[]')::jsonb
                              @> jsonb_build_array(jsonb_build_object('id', p.f_id))
                    )
              )
        ) recycled ON TRUE
        WHERE d.f_tenant_id = #{tenantId} AND d.dayin_renwu_id = #{taskId}
          AND d.biz_status IN ('daifafang', 'daiqianshou') AND d.f_delete_mark IS NULL
          AND (recycled.task_status IS NULL OR recycled.task_status = 'yidayin')
          AND NOT EXISTS (
              SELECT 1 FROM dms_wenjian_dayin_jilu p
              WHERE p.f_tenant_id = d.f_tenant_id AND p.dayin_renwu_id = d.dayin_renwu_id
                AND p.biz_status IN ('daifafang', 'daiqianshou') AND p.f_delete_mark IS NULL
          )
    </update>
</mapper>