<?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.DmsTemplateNotificationMapper">
|
<resultMap id="Event" type="jnpf.dmsEntity.storage.DmsTemplateNotification">
|
<id column="tenant_id" property="tenantId"/><id column="task_id" property="taskId"/>
|
<result column="audit_id" property="auditId"/><result column="template_id" property="templateId"/>
|
<result column="document_no" property="documentNo"/><result column="document_name" property="documentName"/>
|
<result column="version_label" property="versionLabel"/><result column="actor_id" property="actorId"/>
|
<result column="attempts" property="attempts"/><result column="lease_token" property="leaseToken"/>
|
</resultMap>
|
<resultMap id="Template" type="java.util.LinkedHashMap">
|
<id column="f_id" property="id"/><result column="xiaoxi_tixing_bumen" property="departments"/>
|
<result column="wenben_mingcheng" property="name"/>
|
</resultMap>
|
<resultMap id="UserId" type="java.lang.String"><constructor><arg column="f_id" javaType="java.lang.String"/></constructor></resultMap>
|
<!-- 审批事实独立于文件登记及未来生效日;只发现当前主文件携带来源的升版。 -->
|
<insert id="discover">
|
INSERT INTO public.dms_template_upgrade_notifications
|
(tenant_id,task_id,audit_id,template_id,document_no,document_name,version_label,actor_id)
|
SELECT a.f_tenant_id,a.f_flow_task_id,a.f_id,(CASE WHEN a.wenjian IS JSON ARRAY THEN a.wenjian::jsonb ELSE '[]'::jsonb END)->0->>'laiyuan_muban_id',
|
a.wenjian_bianhao,a.wenjian_mingcheng,a.banbenhao,
|
COALESCE(NULLIF(t.f_last_modify_user_id,''),t.f_creator_user_id)
|
FROM public.dms_wenjian_xiuding_shenhe a
|
JOIN public.workflow_task t ON t.f_tenant_id=a.f_tenant_id AND t.f_id=a.f_flow_task_id
|
AND (t.f_flow_id=a.f_flow_id OR t.f_template_id=a.f_flow_id)
|
WHERE a.f_delete_mark IS NULL AND a.f_flow_state=2 AND a.biangeng_fangshi='shengji'
|
AND t.f_delete_mark IS NULL AND t.f_status=2 AND t.f_end_time IS NOT NULL
|
AND CASE WHEN NULLIF(a.wenjian,'') IS NULL THEN false
|
ELSE jsonb_typeof((CASE WHEN a.wenjian IS JSON ARRAY THEN a.wenjian::jsonb ELSE '[]'::jsonb END))='array' AND jsonb_array_length((CASE WHEN a.wenjian IS JSON ARRAY THEN a.wenjian::jsonb ELSE '[]'::jsonb END))=1
|
AND NULLIF((CASE WHEN a.wenjian IS JSON ARRAY THEN a.wenjian::jsonb ELSE '[]'::jsonb END)->0->>'laiyuan_muban_id','') IS NOT NULL END
|
AND NOT EXISTS (SELECT 1 FROM public.dms_template_upgrade_notifications n
|
WHERE n.tenant_id=a.f_tenant_id AND n.task_id=a.f_flow_task_id)
|
ORDER BY t.f_end_time,a.f_flow_task_id LIMIT 100
|
ON CONFLICT (tenant_id,task_id) DO NOTHING
|
</insert>
|
<select id="pending" resultMap="Event">
|
SELECT * FROM public.dms_template_upgrade_notifications WHERE completed_at IS NULL
|
AND next_attempt_at <= CURRENT_TIMESTAMP AND (lease_until IS NULL OR lease_until <= CURRENT_TIMESTAMP)
|
ORDER BY next_attempt_at,task_id LIMIT 100
|
</select>
|
<select id="find" resultMap="Event">
|
SELECT * FROM public.dms_template_upgrade_notifications WHERE tenant_id=#{tenant} AND task_id=#{task}
|
</select>
|
<update id="claim">
|
UPDATE public.dms_template_upgrade_notifications SET lease_token=#{token},
|
lease_until=CURRENT_TIMESTAMP+INTERVAL '5 minutes',attempts=attempts+1
|
WHERE tenant_id=#{event.tenantId} AND task_id=#{event.taskId} AND completed_at IS NULL
|
AND next_attempt_at <= CURRENT_TIMESTAMP AND (lease_until IS NULL OR lease_until <= CURRENT_TIMESTAMP)
|
</update>
|
<select id="template" resultMap="Template">
|
SELECT f_id,xiaoxi_tixing_bumen,wenben_mingcheng FROM public.dms_wenjian_jilu_muban_guanli
|
WHERE f_tenant_id=#{tenant} AND f_id=#{id} AND f_delete_mark IS NULL
|
</select>
|
<select id="recipients" resultMap="UserId">
|
WITH RECURSIVE departments AS (
|
SELECT f_id FROM public.base_organize WHERE f_tenant_id=#{tenant} AND f_delete_mark IS NULL
|
AND f_id IN <foreach collection="departments" item="id" open="(" separator="," close=")">#{id}</foreach>
|
UNION
|
SELECT o.f_id FROM public.base_organize o JOIN departments d ON o.f_parent_id=d.f_id
|
WHERE o.f_tenant_id=#{tenant} AND o.f_delete_mark IS NULL
|
)
|
SELECT DISTINCT u.f_id FROM public.base_user u
|
WHERE u.f_tenant_id=#{tenant} AND u.f_delete_mark IS NULL AND u.f_enabled_mark=1
|
AND (u.f_organize_id IN (SELECT f_id FROM departments) OR EXISTS (
|
SELECT 1 FROM public.base_user_relation r WHERE r.f_tenant_id=#{tenant} AND r.f_user_id=u.f_id
|
AND r.f_object_type='organize' AND r.f_delete_mark IS NULL
|
AND r.f_object_id IN (SELECT f_id FROM departments)))
|
ORDER BY u.f_id
|
</select>
|
<update id="finish">
|
UPDATE public.dms_template_upgrade_notifications SET lease_token=NULL,lease_until=NULL,
|
last_error=#{error,jdbcType=VARCHAR},outcome=#{outcome,jdbcType=VARCHAR},
|
completed_at=CASE WHEN #{error,jdbcType=VARCHAR} IS NULL THEN CURRENT_TIMESTAMP ELSE NULL END,
|
next_attempt_at=CURRENT_TIMESTAMP+INTERVAL '1 minute'*LEAST(60,GREATEST(1,attempts))
|
WHERE tenant_id=#{event.tenantId} AND task_id=#{event.taskId} AND lease_token=#{token}
|
</update>
|
</mapper>
|