TaskMapper.xml 9.96 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.TaskMapper">

    <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.objectCategory!=null"> AND `OBJECT_CATEGORY` =#{ request.objectCategory }</if>
        <if test="request.listId!=null"> AND `LIST_ID` =#{ request.listId }</if>
        <if test="request.ownerUserId!=null">
        AND (
            `OWNER_USER_ID` =#{ request.ownerUserId }
            OR EXISTS(SELECT ID FROM TSK_LIST_USER tlu WHERE tlu.TASK_LIST_ID=LIST_ID AND tlu.USER_ID=#{ request.ownerUserId } AND tlu.IS_DELETED = 0)
        )
        </if>
        <if test="request.isStar!=null"> AND `IS_STAR` =#{ request.isStar }</if>
        <if test="request.hasDeadline!=null"> AND `HAS_DEADLINE` =#{ request.hasDeadline }</if>
        <if test="request.deadlineDate!=null"> AND #{ request.deadlineDate } > `DEADLINE_DATE`</if>
        <if test="request.isDone!=null"> AND `IS_DONE` = #{ request.isDone }</if>
    </sql>

    <sql id="whereForSearchList">
           (
            `OBJECT_NAME` LIKE CONCAT ('%',#{ request.keyword },'%')
            OR `OBJECT_DESCRIPTION` LIKE CONCAT ('%',#{ request.keyword },'%')
            OR `OWNER_USER_NAME` LIKE CONCAT ('%',#{ request.keyword },'%')
           )
    </sql>

    <sql id="sort">
        <if test="request.sortColumn != null">
            ORDER BY ${request.sortColumn}
            <if test="request.sortType != null">
                ${request.sortType}
            </if>
        </if>
    </sql>

    <sql id="findColumnList">
        tt.`ID`,tt.`TENANT_ID`,tt.`OBJECT_TYPE`,tt.`OBJECT_ID`,tt.`OBJECT_CATEGORY`,tt.`OBJECT_NAME`,tt.`OBJECT_NAME_PINYIN`,tt.`OBJECT_NAME_PY`,tt.`OBJECT_DESCRIPTION`,tt.`OBJECT_URL`,tt.`OWNER_USER_ID`,tt.`OWNER_USER_NAME`,tt.`IS_STAR`,tt.`PRIOITY`,tt.`HAS_DEADLINE`,tt.`DEADLINE_DATE`,tt.`NEED_REMINDING`,tt.`REMNDING_TIME`,tt.`COMPLETE`,tt.`PRODUCT_ID`,tt.`APPLICATION_ID`,tt.`PROJECT_ID`,tt.`HAS_SUBTASK`,tt.`SUBTASK_COUNT`,tt.`SUBTASK_DONE_COUNT`,tt.`LIST_ID`,tt.`IS_DONE`,tt.`DO_USER_ID`,tt.`DO_USER_NAME`,tt.`DO_TIME`,tt.`ROW_VERSION`,tt.`IS_DELETED`,tt.`CREATED_BY`,tt.`CREATION_TIME`,tt.`LAST_UPDATED_BY`,tt.`LAST_UPDATE_TIME`
    </sql>
    <select id="find" resultMap="taskPO">
        SELECT * FROM
        (
            SELECT
                <include refid="entityColumnList"/>
            FROM
                `TSK_TASK`
            WHERE
                `IS_DELETED`=0
                AND `TENANT_ID`=#{ passport.tenantId }
                <include refid="whereForFindList" />
                <if test="request.keyword !=null">
                    AND <include refid="whereForSearchList" />
                </if>
                <include refid="sort"/>
        ) AS T

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

    <select id="findCount"   resultType="java.lang.Long">
        SELECT
            COUNT(*)
        FROM
            `TSK_TASK`
        WHERE
            `IS_DELETED`=0
            AND `TENANT_ID`=#{ passport.tenantId }
            <include refid="whereForFindList" />
    </select>

    <select id="findByTaskUser" resultMap="taskPO">
        SELECT * FROM
        (
            SELECT
                <include refid="findColumnList"/>
            FROM
                `TSK_TASK_USER` ttu
            INNER JOIN `TSK_TASK` tt ON ttu.TASK_ID = tt.ID AND tt.IS_DELETED = 0
            WHERE
                ttu.`IS_DELETED`=0
                AND ttu.`TENANT_ID`=#{ passport.tenantId }
                <if test="request.ownerUserId!=null"> AND ttu.`USER_ID` =#{ request.ownerUserId }</if>
                <if test="request.isDone!=null"> AND tt.`IS_DONE` = #{ request.isDone }</if>
                <include refid="sort"/>
        ) AS T
        <if test="request.pageSize !=0">
            LIMIT #{ request.beginItemIndex }, #{ request.pageSize }
        </if>
    </select>

    <select id="findByTaskUserCount"   resultType="java.lang.Long">
        SELECT
            COUNT(*)
        FROM
            `TSK_TASK_USER` ttu
        INNER JOIN `TSK_TASK` tt ON ttu.TASK_ID = tt.ID AND tt.IS_DELETED = 0
        WHERE
            ttu.`IS_DELETED`=0
            AND ttu.`TENANT_ID`=#{ passport.tenantId }
            <if test="request.ownerUserId!=null"> AND ttu.`USER_ID` =#{ request.ownerUserId }</if>
            <if test="request.isDone!=null"> AND tt.`IS_DONE` = #{ request.isDone }</if>
    </select>

    <select id="search" resultMap="taskPO">
        SELECT * FROM
        (
            SELECT
                <include refid="entityColumnList"/>
            FROM
                `TSK_TASK`
            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(*)
        FROM
            `TSK_TASK`
        WHERE
            `IS_DELETED`=0
            AND `TENANT_ID`=#{ passport.tenantId }
            AND <include refid="whereForSearchList" />
    </select>

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


    <update id="update">
        UPDATE
            `TSK_TASK`
        SET
        `OBJECT_TYPE`=#{ request.objectType },
        `OBJECT_ID`=#{ request.objectId },
        `OBJECT_CATEGORY`=#{ request.objectCategory },
        `OBJECT_NAME`=#{ request.objectName },
        `OBJECT_NAME_PINYIN`=#{ request.objectNamePinyin },
        `OBJECT_NAME_PY`=#{ request.objectNamePy },
        `OBJECT_DESCRIPTION`=#{ request.objectDescription },
        `OBJECT_URL`=#{ request.objectUrl },
        `OWNER_USER_ID`=#{ request.ownerUserId },
        `OWNER_USER_NAME`=#{ request.ownerUserName },
        `IS_STAR`=#{ request.isStar },
        `PRIOITY`=#{ request.prioity },
        `HAS_DEADLINE`=#{ request.hasDeadline },
        `DEADLINE_DATE`=#{ request.deadlineDate },
        `NEED_REMINDING`=#{ request.needReminding },
        `REMNDING_TIME`=#{ request.remndingTime },
        `COMPLETE`=#{ request.complete },
        `PRODUCT_ID`=#{ request.productId },
        `APPLICATION_ID`=#{ request.applicationId },
        `PROJECT_ID`=#{ request.projectId },
        `HAS_SUBTASK`=#{ request.hasSubtask },
        `SUBTASK_COUNT`=#{ request.subtaskCount },
        `SUBTASK_DONE_COUNT`=#{ request.subtaskDoneCount },
        `LIST_ID`=#{ request.listId },
        `IS_DONE`=#{ request.isDone },
        `DO_USER_ID`=#{ request.doUserId },
        `DO_USER_NAME`=#{ request.doUserName },
        `DO_TIME`=#{ request.doTime },
        `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="setReminding">
        UPDATE
            `TSK_TASK`
        SET
        `NEED_REMINDING`=#{ request.needReminding },
        `REMNDING_TIME`=#{ request.remndingTime },
        `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="setDeadline">
        UPDATE
            `TSK_TASK`
        SET
        `DEADLINE_DATE`=#{ request.deadlineDate },
        `NEED_REMINDING`=#{ request.needReminding },
        `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="setStar">
        UPDATE
            `TSK_TASK`
        SET
        `IS_STAR`=#{ request.isStar },
        `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="done">
        UPDATE
            `TSK_TASK`
        SET
        `IS_DONE`=#{ request.isDone },
        `DO_USER_ID`=#{ request.doUserId },
        `DO_USER_NAME`=#{ request.doUserName },
        `DO_TIME`=#{ request.doTime },
        `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>

    <select id="findReminding" resultMap="taskPO">
        SELECT * FROM
        (
        SELECT
        <include refid="entityColumnList"/>
        FROM
        `TSK_TASK`
        WHERE
        `IS_DELETED`=0
        AND `IS_DONE`=0
        AND `NEED_REMINDING`=1
        AND `REMNDING_TIME` <![CDATA[ >= ]]> #{ beginTime }
        AND `REMNDING_TIME` <![CDATA[ < ]]> #{ endTime }
        ) AS T
    </select>

</mapper>