TaskListMapper.xml 10.5 KB
<?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.xiniunet.task.dal.TaskListMapper">

    <resultMap  id="taskListSummary" type="com.xiniunet.task.domain.TaskListSummary">
        <id column="ID" jdbcType="NUMERIC" property="id" />
        <result column="TENANT_ID"  jdbcType="NUMERIC" property="tenantId"></result>
        <result column="IS_TOP"  jdbcType="TINYINT" property="isTop"></result>
        <result column="TOP_INDEX"  jdbcType="INTEGER" property="topIndex"></result>
        <result column="OBJECT_TYPE"  jdbcType="VARCHAR" property="objectType"></result>
        <result column="OBJECT_NAME"  jdbcType="VARCHAR" property="objectName"></result>
        <result column="TAKS_OBJECT_TYPE"  jdbcType="VARCHAR" property="taskObjectType"></result>
        <result column="TASK_OBJECT_CATEGORY"  jdbcType="VARCHAR" property="taskObjectCategory"></result>
        <result column="TASK_OBJECT_NAME"  jdbcType="VARCHAR" property="taskObjectName"></result>
        <result column="TASK_COUNT"  jdbcType="NUMERIC" property="taskCount"></result>
        <result column="OVERDUE_COUNT"  jdbcType="NUMERIC" property="overdueCount"></result>
    </resultMap>

    <sql id="whereForFindList">
        <if test="request.objectType!=null"> AND `OBJECT_TYPE` = #{ request.objectType }</if>
        <if test="request.objectId!=null"> AND `OBJECT_ID` = #{ request.objectId }</if>
        <if test="request.userId!=null"> AND `OWNER_USER_ID` = #{ request.userId }</if>
    </sql>

    <sql id="whereForSearchList">
           (
           )
    </sql>
    <sql id="sort">

        ORDER BY IS_TOP DESC,CREATION_TIME DESC

    </sql>

    <select id="findSystem" resultMap="taskListPO">
        SELECT
        <include refid="entityColumnList"/>
        from `TSK_TASK_LIST`
        WHERE
        `IS_DELETED`=0
        AND ID IN(0,1,2)

    </select>

    <select id="find" resultMap="taskListPO">
        SELECT
          <include refid="entityColumnList"/>
        from `TSK_TASK_LIST`
        WHERE
            `IS_DELETED`=0
            AND ID IN(0,1,2)
        UNION
        SELECT
            <include refid="entityColumnList"/>
        FROM
            `TSK_TASK_LIST`
        WHERE
            `IS_DELETED`=0
            AND `TENANT_ID`=#{ passport.tenantId }
            <include refid="whereForFindList" />
            <include refid="sort" />
        <if test="request.pageSize !=0">
            LIMIT #{ request.beginItemIndex }, #{ request.pageSize }
        </if>
    </select>

    <select id="findCount"   resultType="java.lang.Long">

        SELECT
            COUNT(1)
        FROM
        (
            SELECT
            ID
            from `TSK_TASK_LIST`
            WHERE
            `IS_DELETED`=0
            AND ID IN(0,1,2)
            UNION
            SELECT
            ID
            FROM
            `TSK_TASK_LIST`
            WHERE
            `IS_DELETED`=0
            AND `TENANT_ID`=#{ passport.tenantId }
            <include refid="whereForFindList" />
        ) T
    </select>
    <select id="findIndexCount" resultType="java.lang.Long">
       SELECT count(1) FROM
        (SELECT ID FROM
        (SELECT
                ttl.ID
            FROM
                tsk_task_user ttu
            LEFT JOIN tsk_task tt ON ttu.TASK_ID = tt.ID
            LEFT JOIN tsk_task_list ttl ON ttl.ID = tt.LIST_ID
            WHERE
              ttu.`TENANT_ID`=#{ passport.tenantId }
              AND ttu.IS_DELETED = 0
              AND ttu.USER_ID = #{ request.userId }
              and tt.LIST_ID IS NOT NULL
            GROUP BY ttl.ID
       /* UNION
                    SELECT
                    ID
                    from `TSK_TASK_LIST`
                    WHERE
                    `IS_DELETED`=0
                    AND ID IN(0,1,2)*/
        ) T
        GROUP BY T.ID) TT
    </select>
    <select id="findIndex" resultMap="taskObjectPO">
       SELECT * FROM
        (SELECT
                ttl.ID,
                ttl.OBJECT_ID,
                ttl.OBJECT_NAME,
                ttl.OBJECT_TYPE,
                ttl.IS_TOP,
                ttl.OBJECT_DESCRIPTION,
                ttl.OWNER_USER_ID,
                sum(ttu.HISTORY_COUNT) + sum(ttu.COMMENT_COUNT) AS UN_READ_COUNT,
                GROUP_CONCAT(tt.OBJECT_NAME) GROUP_TASK_NAME,
                count(1) TASK_COUNT
            FROM
                tsk_task_user ttu
            LEFT JOIN tsk_task tt ON ttu.TASK_ID = tt.ID
            LEFT JOIN tsk_task_list ttl ON ttl.ID = tt.LIST_ID
            WHERE
              ttu.`TENANT_ID`=#{ passport.tenantId }
              AND ttu.IS_DELETED = 0
              AND ttu.USER_ID = #{ request.userId }
              and tt.LIST_ID IS NOT NULL
            GROUP BY ttl.ID
            /*UNION
                    SELECT
                    ID,OBJECT_ID,OBJECT_NAME,OBJECT_TYPE,IS_TOP,OBJECT_DESCRIPTION,OWNER_USER_ID,0,NUll,0
                    from `TSK_TASK_LIST`
                    WHERE
                    `IS_DELETED`=0
                    AND ID IN(0,1,2)*/
        ) T
        GROUP BY T.ID
        <if test="request.pageSize !=0">
            LIMIT #{ request.beginItemIndex }, #{ request.pageSize }
        </if>
    </select>
    <select id="findSummary" resultMap="taskListSummary">
        SELECT
            t1.*, IFNULL(t2.OVERDUE_COUNT, 0) AS OVERDUE_COUNT
        FROM
            (SELECT
                ttl.ID, ttl.TENANT_ID, ttl.OBJECT_TYPE, ttl.OBJECT_NAME, tt.OBJECT_TYPE AS TAKS_OBJECT_TYPE, tt.OBJECT_CATEGORY AS TASK_OBJECT_CATEGORY, tt.OBJECT_NAME AS TASK_OBJECT_NAME, count(tt.ID) AS TASK_COUNT
            FROM
                tsk_task_list ttl
            LEFT JOIN tsk_task tt
            ON ttl.ID = tt.LIST_ID
            AND tt.`IS_DELETED`=0
            AND tt.`TENANT_ID`=#{ passport.tenantId }
            AND (tt.OWNER_USER_ID = #{ownerUserId} OR
                EXISTS(SELECT ID FROM TSK_LIST_USER tlu WHERE tlu.TASK_LIST_ID=ttl.ID AND tlu.USER_ID=#{ownerUserId} AND tlu.IS_DELETED = 0))
            WHERE
                ttl.`IS_DELETED`=0
                AND ttl.`TENANT_ID`=#{ passport.tenantId }
                AND (ttl.OBJECT_TYPE = 'MANUAL' AND (ttl.OWNER_USER_ID = #{ownerUserId} OR EXISTS(SELECT ID FROM TSK_LIST_USER tlu WHERE tlu.TASK_LIST_ID=ttl.ID AND tlu.USER_ID=#{ownerUserId} AND tlu.IS_DELETED = 0)))
                OR (ttl.OBJECT_TYPE != 'MANUAL' AND tt.ID IS NOT NULL)
            GROUP BY ttl.ID, ttl.OBJECT_TYPE, tt.OBJECT_TYPE, tt.OBJECT_CATEGORY) t1
        LEFT JOIN
            (SELECT
                ttl.ID, ttl.OBJECT_TYPE, tt.OBJECT_TYPE AS TAKS_OBJECT_TYPE, tt.OBJECT_CATEGORY AS TASK_OBJECT_CATEGORY, COUNT(tt.ID) AS OVERDUE_COUNT
            FROM
                tsk_task_list ttl
            LEFT JOIN tsk_task tt
            ON ttl.ID = tt.LIST_ID
            AND tt.`IS_DELETED`=0
            AND tt.`TENANT_ID`=#{ passport.tenantId }
            AND (tt.OWNER_USER_ID = #{ownerUserId} OR
                EXISTS(SELECT ID FROM TSK_LIST_USER tlu WHERE tlu.TASK_LIST_ID=ttl.ID AND tlu.USER_ID=#{ownerUserId} AND tlu.IS_DELETED = 0))
            WHERE
                ttl.`IS_DELETED`=0
                AND ttl.`TENANT_ID`=#{ passport.tenantId }
                AND tt.IS_DONE = FALSE
                AND DATE_FORMAT(SYSDATE(),'%Y%m%d') > DATE_FORMAT(tt.DEADLINE_DATE,'%Y%m%d')
            GROUP BY ttl.ID, ttl.OBJECT_TYPE, tt.OBJECT_TYPE, tt.OBJECT_CATEGORY) t2
        ON t1.ID = t2.ID
        AND t1.OBJECT_TYPE = t2.OBJECT_TYPE
        AND t1.TAKS_OBJECT_TYPE = t2.TAKS_OBJECT_TYPE
        AND t1.TASK_OBJECT_CATEGORY = t2.TASK_OBJECT_CATEGORY
    </select>

    <select id="search" resultMap="taskListPO">
        SELECT * FROM
        (
            SELECT
                <include refid="entityColumnList"/>
            FROM
                `TSK_TASK_LIST`
            WHERE
                `IS_DELETED`=0
                AND `TENANT_ID`=#{ passport.tenantId }
                <if test="request.keyword !=null">
                      AND <include refid="whereForSearchList" />
                </if>

        ) AS T
        <if test="request.pageSize !=0">
            LIMIT #{ request.beginItemIndex }, #{ request.pageSize }
        </if>
    </select>

    <select id="searchCount"   resultType="java.lang.Long">
        SELECT
            COUNT(1)
        FROM
            `TSK_TASK_LIST`
        WHERE
            `IS_DELETED`=0
            AND `TENANT_ID`=#{ passport.tenantId }
            AND <include refid="whereForSearchList" />
    </select>

    <select id="existByCode" resultType="java.lang.Long">
        SELECT
            COUNT(1)
        FROM
            `TSK_TASK_LIST`
        WHERE
            `IS_DELETED`=0
            AND `TENANT_ID`=#{ passport.tenantId }
            AND  `ID` != #{id}
            AND `CODE` = #{code}
    </select>


    <update id="update">
        UPDATE
            `TSK_TASK_LIST`
        SET
        <if test="request.isTop!=null">
        `IS_TOP`=#{ request.isTop },
        </if>
        <if test="request.topIndex!=null">
        `TOP_INDEX`=#{ request.topIndex },
        </if>
        <if test="request.objectType!=null">
        `OBJECT_TYPE`=#{ request.objectType },
        </if>
        <if test="request.objectId!=null">
        `OBJECT_ID`=#{ request.objectId },
        </if>
        <if test="request.ownerUserId!=null">
        `OWNER_USER_ID`=#{ request.ownerUserId },
        </if>
        <if test="request.objectName!=null and request.objectName!=''">
        `OBJECT_NAME`=#{ request.objectName },
        </if>
        <if test="request.objectDescription!=null and request.objectDescription!=''">
        `OBJECT_DESCRIPTION`=#{ request.objectDescription },
         </if>
        `LAST_UPDATED_BY`=#{ passport.userId }
        ,`LAST_UPDATE_TIME`=SYSDATE()
        ,`ROW_VERSION`=#{ request.rowVersion }+1
        WHERE
            `IS_DELETED`=0
            AND `TENANT_ID`=#{ passport.tenantId }
            AND `ID` = #{ request.id }
            AND `ROW_VERSION` = #{ request.rowVersion }
    </update>

    <update id="top">
        UPDATE
        `TSK_TASK_LIST`
        SET
        <if test="request.isTop!=null">
            `IS_TOP`=#{ request.isTop },
        </if>
        <if test="request.topIndex!=null">
            `TOP_INDEX`=#{ request.topIndex },
        </if>
        `LAST_UPDATED_BY`=#{ passport.userId },
        `LAST_UPDATE_TIME`=SYSDATE(),
        `ROW_VERSION`=#{ request.rowVersion }+1
        WHERE
        `IS_DELETED`=0
        AND `TENANT_ID`=#{ passport.tenantId }
        AND `ID` = #{ request.id }
        AND `ROW_VERSION` = #{ request.rowVersion }
    </update>
</mapper>