<?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="task">
<!-- 以下与实体类的中字段一致 -->
<sql id="selectId">
fguid,
forderguid,
fordernumber,
ftaskname,
fdisplayname,
fstate,
ftaskflag,
freturntaskguid,
fbacktasknames,
fcirculationway,
fperformtype,
fcreatetime,
fovertime,
freadtime,
firstovertime,
fautotag,
fparenttaskguid,
fvariable,
fwithdraw,
fcountersigngroupguid,
fsingleforeachguid,
fsingleforeachnum,
fbatch,
ftaskcount,
ftasksort,
ftaskurgentlevel,
forksigntag,
forktasknames,
ftasknamelist,
fumpire
</sql>
<sql id="task_alias">
st.fguid,
st.forderguid,
st.fordernumber,
st.ftaskname,
st.fdisplayname,
st.fstate,
st.ftaskflag,
st.freturntaskguid,
st.fbacktasknames,
st.fcirculationway,
st.fperformtype,
st.fcreatetime,
st.fovertime,
st.freadtime,
st.firstovertime,
st.fautotag,
st.fparenttaskguid,
st.fvariable,
st.fwithdraw,
st.fcountersigngroupguid,
st.fsingleforeachguid,
st.fsingleforeachnum,
st.fbatch,
st.ftaskcount,
st.ftasksort,
st.ftaskurgentlevel,
st.forksigntag,
st.forktasknames,
st.ftasknamelist,
st.fumpire
</sql>
<sql id="userInfoMsg">
fuserorgname,
fbzid,
fuserid,
fusername
</sql>
<!-- 保存任务对象 -->
<insert id="saveTask" parameterType="Task">
insert into sys_task
(fguid,forderguid,fordernumber,ftaskname,fdisplayname,fstate,ftaskflag,freturntaskguid,fbacktasknames,fcirculationway,fperformtype,fcreatetime,fovertime,firstovertime,fautotag,fparenttaskguid,fvariable,fwithdraw,fcountersigngroupguid,fsingleforeachguid,fsingleforeachnum,fbatch,ftaskcount,ftasksort,ftaskurgentlevel,forksigntag,forktasknames,ftasknamelist,fumpire)
values
(#{fguid},#{forderguid},#{fordernumber},#{ftaskname},#{fdisplayname},#{fstate},#{ftaskflag},#{freturntaskguid},#{fbacktasknames},#{fcirculationway},#{fperformtype},#{fcreatetime},#{fovertime},#{firstovertime},#{fautotag},#{fparenttaskguid},#{fvariable},#{fwithdraw},#{fcountersigngroupguid},#{fsingleforeachguid},#{fsingleforeachnum},#{fbatch},#{ftaskcount},#{ftasksort},#{ftaskurgentlevel},#{forksigntag},#{forktasknames},#{ftasknamelist},#{fumpire})
</insert>
<!-- 根据任务fguid获取任务 -->
<select id="getTask" resultType="Task" parameterType="String">
select
<include refid="selectId" />
from sys_task where fguid = #{taskguid}
</select>
<!-- 根据编制号获取用户信息 -->
<select id="getUserInfoByBz" parameterType="hashmap"
resultType="HashMap">
SELECT <include refid="userInfoMsg" />
<if test="flag==true"> ,fphone,femail </if>
FROM sys_user_detail WHERE
fbzid IN
<foreach collection="userBzs" item="item" index="index" open="("
separator="," close=")">
#{item}
</foreach>
</select>
<!-- 保存任务参与者 -->
<insert id="saveTaskActor" parameterType="hashmap">
insert into
sys_task_actor (fguid,ftaskguid, fbzid) values (#{fguid},#{taskguid}, #{fbzid})
</insert>
<!-- 根据任务guid查询所有活动任务参与者集合 -->
<select id="getTaskActorbzByTaskGuid"
resultType="com.zhc.eap.entity.TaskActorBz" parameterType="String">
SELECT sta.ftaskguid,sta.fbzid,st.ftaskname,st.fordernumber FROM sys_task_actor sta
INNER JOIN sys_task st ON sta.ftaskguid = st.fguid AND sta.ftaskguid = #{taskguid}
</select>
<!-- 删除任务参与者编制号 -->
<delete id="deleteTaskActor" parameterType="String">
delete from sys_task_actor where ftaskguid = #{taskguid}
</delete>
<!-- 删除任务 -->
<delete id="deleteTask" parameterType="String">
delete from sys_task where fguid = #{taskguid}
</delete>
<!-- 根据参数查询活动任务(如果任务guid不为空,则查询的结果集合排除该任务) -->
<select id="getActiveTasks" resultType="Task"
parameterType="HashMap">
select
<include refid="selectId" />
from sys_task where forderguid = #{orderguid}
<if test="taskguid != null and taskguid != ''"> AND fguid <![CDATA[<>]]> #{taskguid} </if>
<if test="taskname != null and taskname != ''"> AND ftaskname = #{taskname} </if>
<if test="parenttaskguid != null and parenttaskguid != ''"> and fparenttaskguid = #{parenttaskguid} </if>
</select>
<!--根据参数查询活动任务(如果任务guid不为空,则查询的结果集合排除该任务) -->
<select id="getActiveTasksByTaskNames" resultType="Task" parameterType="HashMap">
select
<include refid="selectId" />
from sys_task where forderguid = #{orderguid}
<if test="taskguid != null and taskguid != ''"> AND fguid <![CDATA[<>]]> #{taskguid} </if>
<if test="taskname != null and taskname.length > 0">
AND ftaskname in
<foreach collection="taskname" item="item" index="index"
open="(" separator="," close=")">
#{item}
</foreach>
</if>
</select>
<!-- 获取已完成会签任务数量 -->
<select id="getProcessedTaskCount" resultType="int" parameterType="HashMap">
SELECT COUNT(DISTINCT fbzid) FROM sys_hist_task WHERE forderguid = #{orderguid} AND
ftaskname = #{taskname} AND fparenttaskguid = #{parenttaskguid} AND fcountersigngroupguid = #{countersigngroupguid} AND
(ftaskstage='processed' OR ftaskstage='tsAfterSigned')
</select>
<!-- 修改加签前任务的状态(fstate)为:tsCanceled,任务处理状态(ftaskstage)为:取消 -->
<update id="updateParentSignFstate" parameterType="java.util.List">
UPDATE sys_hist_task SET fstate = 'tsCanceled',ftaskstage='cancel' WHERE fguid IN
<foreach collection="list" item="taskIds" open="("
index="index" separator="," close=")">
#{taskIds}
</foreach>
</update>
<!-- 更新任务阅读时间 -->
<update id="updateTaskReadTime" parameterType="hashmap">
UPDATE sys_task SET freadtime= #{readtime} WHERE fguid = #{taskguid}
</update>
<!-- 根据流程id,任务父id获取子任务列表(单签) -->
<select id="getSubActiveTasksAny" resultType="Task" parameterType="HashMap">
select <include refid="selectId" />
from sys_task where forderguid = #{orderguid} and fparenttaskguid = #{parenttaskguid}
</select>
<!-- 根据流程id,任务名称,任务父id,分组id,获取子任务列表(会签) -->
<select id="getSubActiveTasksAll" resultType="Task" parameterType="HashMap">
select
<include refid="selectId"/>
from sys_task where forderguid = #{orderguid} and fparenttaskguid in (
select fguid from sys_hist_task where forderguid = #{orderguid} and ftaskname = #{taskname}
and fparenttaskguid = #{parenttaskguid} and fcountersigngroupguid = #{countersigngroupguid}
)
</select>
<!-- 流程图显示待办任务信息 -->
<select id="getActiveTaskAndUserInfo" resultType="HashMap" parameterType="HashMap">
SELECT
st.fdisplayname,st.fcreatetime,st.ftaskname,st.ftasknamelist,
sud.fbzid,sud.fuserid,sud.fusername,sud.forgname,sud.frolename
FROM sys_task st
INNER JOIN sys_task_actor sta ON st.fguid = sta.ftaskguid
INNER JOIN sys_user_detail sud ON sud.fbzid = sta.fbzid
WHERE st.forderguid = #{orderguid}
</select>
<!-- 根据流程单号获取任务信息 -->
<select id="getTaskInfoByFordernumber" resultType="HashMap" parameterType="HashMap">
SELECT top 1 st.fguid,sta.fbzid FROM sys_task st
INNER JOIN sys_task_actor sta ON st.fguid = sta.ftaskguid
INNER JOIN sys_user_detail sud ON sud.fbzid = sta.fbzid
AND st.fordernumber = #{fordernumber} AND sud.fuserid = #{fuserid}
</select>
<!-- 根据条件查找顺序任务数量,排除当前这条任务(只适用普通顺序任务(普通顺序任务执行转办再次顺序加签任务),加签顺序任务,局部验证) -->
<select id="getSequenceTaskCountLocal" resultType="int" parameterType="HashMap">
SELECT count(*) FROM sys_task WHERE forderguid = #{orderguid} AND fguid <![CDATA[<>]]> #{taskguid} AND
ftaskname = #{taskname} AND ftasksort = #{tasksort}
<if test="parenttaskguid != null and parenttaskguid != ''"> AND fparenttaskguid = #{parenttaskguid} </if>
<if test="countersigngroupguid != null and countersigngroupguid != ''"> AND fcountersigngroupguid = #{countersigngroupguid} </if>
<if test="singleforeachguid != null and singleforeachguid != ''"> AND fsingleforeachguid = #{singleforeachguid} </if>
</select>
<!-- 根据条件查找顺序任务数量,排除当前这条任务(只适用当前环节全局数量验证,排除状态为 tsWaiting ) -->
<select id="getSequenceTaskCountGlobal" resultType="int" parameterType="HashMap">
SELECT count(*) FROM sys_task WHERE forderguid = #{orderguid} AND fguid <![CDATA[<>]]> #{taskguid} AND
ftaskname = #{taskname} AND fstate <![CDATA[<>]]> 'tsWaiting'
<if test="countersigngroupguid != null and countersigngroupguid != ''"> AND fcountersigngroupguid = #{countersigngroupguid} </if>
<if test="singleforeachguid != null and singleforeachguid != ''"> AND fsingleforeachguid = #{singleforeachguid} </if>
</select>
<!-- 根据当前任务顺序 + 1 查找是否存在等待中的任务 -->
<select id="getSequenceTaskGuids" resultType="Task" parameterType="HashMap">
SELECT <include refid="task_alias" />,sta.fbzid as tempBzid FROM sys_task st INNER JOIN sys_task_actor sta on st.fguid = sta.ftaskguid
WHERE st.forderguid = #{orderguid} AND st.ftaskname = #{taskname} AND st.fparenttaskguid = #{parenttaskguid} AND st.ftasksort = #{tasksort}
<if test="countersigngroupguid != null and countersigngroupguid != ''"> AND st.fcountersigngroupguid = #{countersigngroupguid} </if>
<if test="singleforeachguid != null and singleforeachguid != ''"> AND st.fsingleforeachguid = #{singleforeachguid} </if>
</select>
<!-- 修改顺序任务状态为tsTask -->
<update id="updateSequenceTaskFstate" parameterType="HashMap">
UPDATE sys_task SET fstate = #{fstate} WHERE fguid in
<foreach collection="sequenceTasks" item="item" index="index"
open="(" separator="," close=")">
#{item.fguid}
</foreach>
</update>
</mapper>