<?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.DmsDisableApplicationMapper">
|
<resultMap id="Occupancy" type="jnpf.dmsEntity.storage.approval.DmsDisableOccupancy">
|
<result column="tenant_id" property="tenantId"/><result column="operation" property="operation"/>
|
<result column="application_id" property="applicationId"/>
|
<result column="creator_user_id" property="creatorUserId"/><result column="flow_id" property="flowId"/>
|
<result column="task_id" property="taskId"/><result column="flow_state" property="flowState"/>
|
<result column="file_id" property="fileId"/><result column="folder_id" property="folderId"/>
|
</resultMap>
|
<!-- Compatibility path until technical migration and workflow draft cutover. -->
|
<sql id="Applications">
|
SELECT m.f_tenant_id tenant_id,m.f_flow_task_id task_id,m.f_flow_id flow_id,to_jsonb(c)->>'wenjian_id' file_id
|
FROM public.dms_wenjian_chexiao_tiyi m JOIN public.dms_wenjian_chexiao_tiyi_zixiang c
|
ON c.f_tenant_id=m.f_tenant_id AND c.f_foreign_id=m.f_id AND c.f_delete_mark IS NULL
|
WHERE m.f_tenant_id=#{tenantId} AND m.f_delete_mark IS NULL AND m.f_flow_state IN (1,2,3,4,5,6,7,8,9,10)
|
UNION ALL
|
SELECT m.f_tenant_id,m.f_flow_task_id,m.f_flow_id,to_jsonb(c)->>'wenjian_id'
|
FROM public.dms_wenjian_shixiao_shenqing m JOIN public.dms_wenjian_shixiao_shenqing_zixiang c
|
ON c.f_tenant_id=m.f_tenant_id AND c.f_foreign_id=m.f_id AND c.f_delete_mark IS NULL
|
WHERE m.f_tenant_id=#{tenantId} AND m.f_delete_mark IS NULL AND m.f_flow_state IN (1,2,3,4,5,6,7,8,9,10)
|
</sql>
|
<!-- A classification parent is not the main file's dedicated directory. -->
|
<sql id="RelatedRecord">
|
EXISTS (SELECT 1 FROM public.dms_wenjian_guanxi g
|
WHERE g.f_tenant_id=z.f_tenant_id AND g.zhu_wenjian_id=<include refid="MainId"/>
|
AND g.guanlian_wenjian_id=z.f_id AND g.guanxi_leixing='jilu'
|
AND g.biz_status='effective' AND g.f_delete_mark IS NULL)
|
</sql>
|
<sql id="MainId">${mainAlias}.file_id</sql>
|
<select id="legacyApplicationsForFile" resultMap="Occupancy">
|
SELECT DISTINCT a.task_id,a.flow_id FROM public.dms_wenjian_ziyuan z
|
JOIN (<include refid="Applications"/>) a ON a.tenant_id=z.f_tenant_id
|
WHERE z.f_tenant_id=#{tenantId} AND z.f_id=#{fileId} AND z.f_delete_mark IS NULL
|
AND (a.file_id=z.f_id OR <include refid="RelatedRecord"><property name="mainAlias" value="a"/></include>)
|
</select>
|
<select id="legacyApplicationsForDocument" resultMap="Occupancy">
|
SELECT DISTINCT a.task_id,a.flow_id FROM public.dms_wenjian_ziyuan z
|
JOIN (<include refid="Applications"/>) a ON a.tenant_id=z.f_tenant_id
|
WHERE z.f_tenant_id=#{tenantId}
|
AND z.wenjian_zhongxin_wenjian_id=CAST(#{documentId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler} AS text)
|
AND z.f_delete_mark IS NULL
|
AND (a.file_id=z.f_id OR <include refid="RelatedRecord"><property name="mainAlias" value="a"/></include>)
|
</select>
|
<sql id="StillOccupied">o.active=true</sql>
|
<sql id="FixedOccupied">
|
EXISTS (SELECT 1 FROM public.dms_file_operation_occupancies o
|
WHERE o.tenant_id=z.f_tenant_id AND (o.file_id=z.f_id OR <include refid="RelatedRecord"><property name="mainAlias" value="o"/></include>)
|
AND <include refid="StillOccupied"/>)
|
</sql>
|
<select id="pendingForFile" resultType="int">
|
SELECT count(*) FROM public.dms_wenjian_ziyuan z WHERE z.f_tenant_id=#{tenantId} AND z.f_id=#{fileId}
|
AND z.f_delete_mark IS NULL AND <include refid="FixedOccupied"/>
|
</select>
|
<select id="pendingForDocument" resultType="int">
|
SELECT count(*) FROM public.dms_wenjian_ziyuan z WHERE z.f_tenant_id=#{tenantId}
|
AND z.wenjian_zhongxin_wenjian_id=CAST(#{documentId,jdbcType=OTHER,typeHandler=jnpf.dmsDatabase.DmsUuidTypeHandler} AS text)
|
AND z.f_delete_mark IS NULL AND <include refid="FixedOccupied"/>
|
</select>
|
<select id="conflictingFiles" resultType="int">
|
SELECT count(*) FROM public.dms_wenjian_ziyuan z WHERE z.f_tenant_id=#{tenantId}
|
AND z.f_id IN <foreach collection="fileIds" item="id" open="(" separator="," close=")">#{id}</foreach>
|
AND EXISTS (SELECT 1 FROM public.dms_file_operation_occupancies o
|
WHERE o.tenant_id=z.f_tenant_id AND (o.file_id=z.f_id OR <include refid="RelatedRecord"><property name="mainAlias" value="o"/></include>)
|
AND (#{taskId,jdbcType=VARCHAR} IS NULL OR o.task_id<>#{taskId,jdbcType=VARCHAR})
|
AND <include refid="StillOccupied"/>)
|
</select>
|
<sql id="NativeMain"><choose><when test="operation == 'yichexiao'">public.dms_wenjian_chexiao_tiyi</when><otherwise>public.dms_wenjian_shixiao_shenqing</otherwise></choose></sql>
|
<sql id="NativeChild"><choose><when test="operation == 'yichexiao'">public.dms_wenjian_chexiao_tiyi_zixiang</when><otherwise>public.dms_wenjian_shixiao_shenqing_zixiang</otherwise></choose></sql>
|
<select id="application" resultMap="Occupancy">
|
SELECT f_tenant_id tenant_id,f_id application_id,f_flow_id flow_id,f_flow_task_id task_id,f_flow_state flow_state,
|
<choose>
|
<when test="operation == 'yichexiao'">tiyi_ren_id</when>
|
<otherwise>shenqing_ren_id</otherwise>
|
</choose> creator_user_id
|
FROM <include refid="NativeMain"/> WHERE f_tenant_id=#{tenantId} AND f_flow_task_id=#{taskId} AND f_delete_mark IS NULL
|
</select>
|
<select id="applicationFiles" resultMap="Occupancy">
|
SELECT to_jsonb(c)->>'wenjian_id' file_id,z.wenjian_zhongxin_wenjian_id folder_id
|
FROM <include refid="NativeChild"/> c LEFT JOIN public.dms_wenjian_ziyuan z
|
ON z.f_tenant_id=c.f_tenant_id AND z.f_id=to_jsonb(c)->>'wenjian_id'
|
AND z.f_delete_mark IS NULL AND z.wenjian_leixing='zhuwenjian' AND z.biz_status='effective'
|
WHERE c.f_tenant_id=#{tenantId} AND c.f_foreign_id=#{applicationId} AND c.f_delete_mark IS NULL
|
ORDER BY c.f_id
|
</select>
|
<select id="selectedFiles" resultMap="Occupancy">
|
SELECT z.f_id file_id,z.wenjian_zhongxin_wenjian_id folder_id FROM public.dms_wenjian_ziyuan z
|
WHERE z.f_tenant_id=#{tenantId} AND z.f_delete_mark IS NULL AND z.wenjian_leixing='zhuwenjian'
|
AND z.biz_status='effective'
|
AND NULLIF(z.wenjian_zhongxin_wenjian_id,'') IS NOT NULL AND z.f_id IN
|
<foreach collection="fileIds" item="id" open="(" separator="," close=")">#{id}</foreach>
|
</select>
|
<insert id="occupy">
|
INSERT INTO public.dms_file_operation_occupancies
|
(tenant_id,operation,application_id,flow_id,task_id,file_id,folder_id,active)
|
VALUES (#{tenantId},#{operation},#{applicationId},#{flowId},#{taskId},#{fileId},#{folderId},true)
|
ON CONFLICT (tenant_id,task_id,operation,file_id) DO UPDATE
|
SET folder_id=EXCLUDED.folder_id,active=true,released_at=NULL
|
</insert>
|
<update id="releaseTask">
|
UPDATE public.dms_file_operation_occupancies SET active=false,released_at=CURRENT_TIMESTAMP
|
WHERE tenant_id=#{tenantId} AND task_id=#{taskId} AND operation=#{operation} AND active=true
|
</update>
|
<update id="releaseFile">
|
UPDATE public.dms_file_operation_occupancies SET active=false,released_at=CURRENT_TIMESTAMP
|
WHERE tenant_id=#{tenantId} AND task_id=#{taskId} AND operation=#{operation} AND file_id=#{fileId} AND active=true
|
</update>
|
</mapper>
|