<?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="com.ruoyi.system.mapper.FlowBusinessKeyMapper">

    <select id="selectAllFlowTaskByParams" parameterType="com.ruoyi.system.domain.FlowTaskEntity"  resultType="com.ruoyi.system.domain.FlowTaskEntity">
        SELECT
            fa.procInsId,
            fa.deployId,
            fa.createTime,
            fa.finishTime,
            fa.duration,
            fa.procDefKey,
            fa.procDefName,
            fa.procDefVersion,
            fa.category,
            fa.businessKey,
            fa.businessDeptId,
            fa.businessKeyName,
            fa.startUserId,
            fa.startUserName,
            fa.startDeptName,
            fa.taskId,
            fa.taskName,
            fa.assigneeId,
            fa.assigneeName,
            fa.assigneeDeptName
        FROM
            vw_flow_all fa
        <where>
            <if test="taskName != null  and taskName != ''"> and fa.taskName like concat('%', #{taskName}, '%')</if>
            <if test="procDefName != null  and procDefName != ''"> and fa.procDefName like concat('%', #{procDefName}, '%')</if>
            <if test="businessKey != null  and businessKey != ''"> and fa.businessKey = #{businessKey}</if>
            <if test="startDeptName != null  and startDeptName != ''"> and fa.startDeptName like concat('%', #{startDeptName}, '%')</if>
            <if test="startUserName != null  and startUserName != ''"> and fa.startUserName like concat('%', #{startUserName}, '%')</if>
            <if test="businessKeyName != null  and businessKeyName != ''"> and fa.businessKeyName like concat('%', #{businessKeyName}, '%')</if>
            <if test="category != null  and category != ''"> and fa.category = #{category}</if>
            <if test="params.beginDate != null and params.beginDate != '' and params.endDate != null and params.endDate != ''"> and fa.createTime between #{params.beginDate} and #{params.endDate}</if>
            <!-- 查询条件-项目部门 -->
            <if test="projectDeptId != null "> and fa.businessDeptId = #{projectDeptId}</if>
            <!--子部门数据-->
            <if test='nowRole == "4"'> and fa.businessDeptId = #{nowDept}</if>
            <!--监理单位/总包公司/分包单位查询当前关联数据-->
            <if test='nowRole == "5" or nowRole == "6" or nowRole == "7"'> and fa.businessKey in (select DISTINCT projectId from sur_project_unit_info where unitId=#{nowDept} and del_flag=0)</if>
            <!--普通用户查询项目人员-->
            <if test='nowRole == "15" or nowRole == "16" or nowRole == "17" or nowRole == "99"'> and fa.startUserId = #{nowUser}</if>
            <if test='activeName == "await"'> and fa.finishTime is null</if>
            <if test='activeName == "finished"'> and fa.finishTime is not null</if>
        </where>
        order by fa.createTime desc
    </select>

    <!--查询工作流操作日志-->
    <select id="selectCommentByProcInsId" parameterType="string"  resultType="map">
        select * from vw_flow_comment where procInstId = #{procInstId} order by startTime DESC
    </select>

    <!--查询工作流携带的参数-->
    <select id="selectFormDatasByProcInsId" parameterType="string"  resultType="map">
        select hv.NAME_ as `name`,hv.TEXT_ as text from act_hi_varinst hv where hv.PROC_INST_ID_ = #{procInstId}
    </select>

    <!--查询我的代办任务-->
    <select id="selectMyAwaitFlowTask" parameterType="com.ruoyi.system.domain.FlowTaskEntity"  resultType="map">
        select fa.* from vw_flow_await fa
        where
            1=1
            <if test="procDefName != null  and procDefName != ''"> and fa.procDefName like concat('%', #{procDefName}, '%')</if>
            <if test="businessKey != null  and businessKey != ''"> and fa.businessKey = #{businessKey}</if>
            <if test="businessKeyName != null  and businessKeyName != ''"> and fa.businessKeyName like concat('%', #{businessKeyName}, '%')</if>
            <if test="category != null  and category != ''"> and fa.category = #{category}</if>
            <if test="params.beginDate != null and params.beginDate != '' and params.endDate != null and params.endDate != ''"> and fa.createTime between #{params.beginDate} and #{params.endDate}</if>
            <!-- 查询条件-项目部门 -->
            <if test="projectDeptId != null "> and fa.businessDeptId = #{projectDeptId}</if>
            <!--子部门数据-->
            <if test='nowRole == "4"'> and fa.businessDeptId = #{nowDept}</if>
            <!--监理单位/总包公司/分包单位查询当前关联数据-->
            <if test='nowRole == "5" or nowRole == "6" or nowRole == "7"'> and fa.businessKey in (select DISTINCT projectId from sur_project_unit_info where unitId=#{nowDept} and del_flag=0)</if>
            <!--普通用户查询项目人员-->
            <if test='nowRole == "15" or nowRole == "16" or nowRole == "17" or nowRole == "99"'> and fa.businessKey in (select DISTINCT project_id from sur_project_userinfo where user_id=#{nowUser} and is_del=0)</if>
            AND (fa.ASSIGNEE_ = #{nowUser}
                OR (
                        fa.ASSIGNEE_ IS NULL
                    AND (
                        fa.USER_ID_ = #{nowUser}
                    OR (
                        fa.GROUP_ID_ IN
                        <foreach collection="roleIds" item="roleId" open="(" separator="," close=")">
                            #{roleId}
                        </foreach>
                        )
                    )
                )
            )
        order by fa.createTime desc
    </select>

    <!--查询我的已办任务-->
    <select id="selectMyFinishedFlowTask" parameterType="com.ruoyi.system.domain.FlowTaskEntity"  resultType="map">
        select fa.* from vw_flow_finished fa
        where
        fa.ASSIGNEE_=#{nowUser}
        <if test="procDefName != null  and procDefName != ''"> and fa.procDefName like concat('%', #{procDefName}, '%')</if>
        <if test="businessKey != null  and businessKey != ''"> and fa.businessKey = #{businessKey}</if>
        <if test="businessKeyName != null  and businessKeyName != ''"> and fa.businessKeyName like concat('%', #{businessKeyName}, '%')</if>
        <if test="category != null  and category != ''"> and fa.category = #{category}</if>
        <if test="params.beginDate != null and params.beginDate != '' and params.endDate != null and params.endDate != ''"> and fa.endTime between #{params.beginDate} and #{params.endDate}</if>
        order by fa.endTime desc
    </select>
    <select id="groupByCategory" parameterType="com.ruoyi.system.domain.FlowTaskEntity"  resultType="com.ruoyi.system.domain.FlowTaskEntity">
        SELECT a.dict_label taskName,b.cnt assigneeId,c.cnt procDefVersion FROM
                ( SELECT * FROM sys_dict_data  WHERE dict_type = 'sys_process_category') a
                    LEFT JOIN (SELECT category,COUNT(1) cnt FROM vw_flow_all WHERE finishTime IS NOT NULL
                    <if test="deployId !=null and deployId!=''">and businessDeptId=#{deployId}</if>
                    <if test="businessKey !=null and businessKey!=''">and businessKey=#{businessKey}</if>
                    <if test="prjIds !=null and prjIds.size()>0">
                        and businessKey in
                        <foreach collection="prjIds"  item="item" index="index" open="(" close=")" separator=",">
                            #{item}
                        </foreach>
                    </if>

        GROUP BY category) b ON a.dict_value=b.category
                    LEFT JOIN (SELECT category,COUNT(1) cnt FROM vw_flow_all WHERE finishTime IS  NULL AND taskName!='提交申请'
                    <if test="deployId !=null and deployId!=''">and businessDeptId=#{deployId}</if>
                    <if test="businessKey !=null and businessKey!=''">and businessKey=#{businessKey}</if>
                    <if test="prjIds !=null and prjIds.size()>0">
                        and businessKey in
                        <foreach collection="prjIds"  item="item" index="index" open="(" close=")" separator=",">
                            #{item}
                        </foreach>
                    </if>

        GROUP BY category) c  ON a.dict_value=c.category
    </select>
    <select id="groupByUnit" parameterType="com.ruoyi.system.domain.FlowTaskEntity"  resultType="com.ruoyi.system.domain.FlowTaskEntity">
        SELECT cat taskName, COUNT(1) assigneeId FROM (
              SELECT *,'总包单位' cat FROM vw_flow_all WHERE finishTime IS NULL AND taskName LIKE '总包%'
                <if test="deployId !=null and deployId!=''">and businessDeptId=#{deployId}</if>
                <if test="businessKey !=null and businessKey!=''">and businessKey=#{businessKey}</if>
        <if test="prjIds !=null and prjIds.size()>0">
            and businessKey in
            <foreach collection="prjIds"  item="item" index="index" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
              UNION
              SELECT *,'监理单位' cat FROM vw_flow_all WHERE finishTime IS NULL AND taskName LIKE '监理%'
                <if test="deployId !=null and deployId!=''">and businessDeptId=#{deployId}</if>
                <if test="businessKey !=null and businessKey!=''">and businessKey=#{businessKey}</if>
        <if test="prjIds !=null and prjIds.size()>0">
            and businessKey in
            <foreach collection="prjIds"  item="item" index="index" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
              UNION
              SELECT *,'设计单位' cat FROM vw_flow_all WHERE finishTime IS NULL AND taskName LIKE '设计%'
                <if test="deployId !=null and deployId!=''">and businessDeptId=#{deployId}</if>
                <if test="businessKey !=null and businessKey!=''">and businessKey=#{businessKey}</if>
        <if test="prjIds !=null and prjIds.size()>0">
            and businessKey in
            <foreach collection="prjIds"  item="item" index="index" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
              UNION
              SELECT *,'甲方代表' cat FROM vw_flow_all WHERE finishTime IS NULL AND taskName LIKE '甲方%'
                <if test="deployId !=null and deployId!=''">and businessDeptId=#{deployId}</if>
                <if test="businessKey !=null and businessKey!=''">and businessKey=#{businessKey}</if>
        <if test="prjIds !=null and prjIds.size()>0">
            and businessKey in
            <foreach collection="prjIds"  item="item" index="index" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
              UNION
              SELECT *,'子公司' cat FROM vw_flow_all WHERE finishTime IS NULL AND taskName LIKE '工程%'
                <if test="deployId !=null and deployId!=''">and businessDeptId=#{deployId}</if>
                <if test="businessKey !=null and businessKey!=''">and businessKey=#{businessKey}</if>
        <if test="prjIds !=null and prjIds.size()>0">
            and businessKey in
            <foreach collection="prjIds"  item="item" index="index" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
          )  a
        GROUP BY cat
    </select>
    <select id="listByUnit"   parameterType="com.ruoyi.system.domain.FlowTaskEntity" resultType="com.ruoyi.system.domain.FlowTaskEntity">
        SELECT * FROM vw_flow_all WHERE finishTime IS NULL
        <if test="taskId!=null">
            <if test="taskId==1"> AND taskName LIKE '总包%' </if>
            <if test="taskId==2"> AND taskName LIKE '监理%' </if>
            <if test="taskId==3"> AND taskName LIKE '设计%' </if>
            <if test="taskId==4"> AND taskName LIKE '甲方%' </if>
            <if test="taskId==5"> AND taskName LIKE '工程%' </if>
        </if>
        <if test="deptId !=null and deptId>0">and businessDeptId=#{deptId}</if>
        <if test="projectId !=null and projectId>0">and businessKey=#{projectId}</if>
        <if test="prjIds !=null and prjIds.size()>0">
            and businessKey in
            <foreach collection="prjIds"  item="item" index="index" open="(" close=")" separator=",">
                #{item}
            </foreach>
        </if>
    </select>
    <select id="listByState"   parameterType="com.ruoyi.system.domain.FlowTaskEntity" resultType="com.ruoyi.system.domain.FlowTaskEntity">
        SELECT * FROM vw_flow_all
        <where>
        <if test="taskId!=null">
            <if test="taskId==1"> AND taskName!='提交申请' </if>
            <if test="taskId==2"> AND finishTime IS NULL AND taskName!='提交申请' </if>
            <if test="taskId==3"> AND finishTime IS NOT NULL </if>
        </if>
        <if test="deptId !=null and deptId>0">and businessDeptId=#{deptId}</if>
        <if test="projectId !=null and projectId>0">and businessKey=#{projectId}</if>
            <if test="prjIds !=null and prjIds.size()>0">
                and businessKey in
                <foreach collection="prjIds"  item="item" index="index" open="(" close=")" separator=",">
                    #{item}
                </foreach>
            </if>
        </where>
    </select>
</mapper>