refactor: 将groupby分页mapperid提取到template包, 并全局自定义countId

This commit is contained in:
dhb52 2024-05-21 00:32:51 +08:00
parent fe32c2fa77
commit 229f1b8991
15 changed files with 82 additions and 221 deletions

View File

@ -2,11 +2,10 @@ package com.aizuda.snailjob.template.datasource.persistence.mapper;
import com.aizuda.snailjob.template.datasource.persistence.dataobject.DashboardCardResponseDO;
import com.aizuda.snailjob.template.datasource.persistence.dataobject.DashboardLineResponseDO;
import com.aizuda.snailjob.template.datasource.persistence.po.Job;
import com.aizuda.snailjob.template.datasource.persistence.po.JobSummary;
import com.aizuda.snailjob.template.datasource.persistence.dataobject.DashboardRetryLineResponseDO.Rank;
import com.aizuda.snailjob.template.datasource.persistence.dataobject.DashboardRetryLineResponseDO.Task;
import com.aizuda.snailjob.template.datasource.persistence.dataobject.DashboardLineResponseDO;
import com.aizuda.snailjob.template.datasource.persistence.po.Job;
import com.aizuda.snailjob.template.datasource.persistence.po.JobSummary;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@ -28,16 +27,20 @@ public interface JobSummaryMapper extends BaseMapper<JobSummary> {
int batchUpdate(@Param("list") List<JobSummary> list);
IPage<Task> jobTaskList(@Param("ew") Wrapper<Job> wrapper, Page<Object> page);
// jobTaskList 自定义 countStatement
long jobTaskListCount(@Param("ew") Wrapper<Job> wrapper);
IPage<Task> workflowTaskList(@Param("ew") Wrapper<Job> wrapper, Page<Object> page);
// workflowTaskList 自定义 countStatement
long workflowTaskListCount(@Param("ew") Wrapper<Job> wrapper);
List<DashboardLineResponseDO> jobLineList(@Param("dateFormat") String dateFormat, @Param("ew") Wrapper<JobSummary> wrapper);
List<Rank> dashboardRank(@Param("systemTaskType") Integer systemTaskType, @Param("ew") Wrapper<JobSummary> wrapper);
DashboardCardResponseDO.JobTask toJobTask(@Param("ew") Wrapper<JobSummary> wrapper);
long countJobTask(@Param("ew") Wrapper<Job> wrapper);
}

View File

@ -32,9 +32,10 @@ public interface RetrySummaryMapper extends BaseMapper<RetrySummary> {
IPage<DashboardRetryLineResponseDO.Task> retryTaskList(@Param("ew") Wrapper<RetrySceneConfig> wrapper, Page<Object> page);
long retryTaskListCount(@Param("ew") Wrapper<RetrySceneConfig> wrapper);
List<DashboardLineResponseDO> retryLineList(@Param("dateFormat") String dateFormat, @Param("ew") Wrapper<RetrySummary> wrapper);
List<DashboardRetryLineResponseDO.Rank> dashboardRank(@Param("ew") Wrapper<RetrySummary> wrapper);
long countRetryTask(@Param("ew") Wrapper<RetrySceneConfig> wrapper);
}

View File

@ -0,0 +1,39 @@
<?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.aizuda.snailjob.template.datasource.persistence.mapper.JobSummaryMapper">
<select id="jobTaskList"
resultType="com.aizuda.snailjob.template.datasource.persistence.dataobject.DashboardRetryLineResponseDO$Task">
SELECT group_name AS groupName,
SUM(CASE WHEN (job_status = 1) THEN 1 ELSE 0 END) AS run,
COUNT(*) AS total
FROM sj_job
${ew.customSqlSegment}
GROUP BY namespace_id, group_name
ORDER BY group_name
</select>
<select id="jobTaskListCount" resultType="long">
SELECT COUNT(DISTINCT group_name)
FROM sj_job
${ew.customSqlSegment}
</select>
<select id="workflowTaskList"
resultType="com.aizuda.snailjob.template.datasource.persistence.dataobject.DashboardRetryLineResponseDO$Task">
SELECT group_name AS groupName,
SUM(CASE WHEN (workflow_status = 1) THEN 1 ELSE 0 END) AS run,
COUNT(*) AS total
FROM sj_workflow
${ew.customSqlSegment}
GROUP BY namespace_id, group_name
ORDER BY group_name
</select>
<select id="workflowTaskListCount" resultType="long">
SELECT COUNT(DISTINCT group_name)
FROM sj_workflow
${ew.customSqlSegment}
</select>
</mapper>

View File

@ -0,0 +1,22 @@
<?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.aizuda.snailjob.template.datasource.persistence.mapper.RetrySummaryMapper">
<select id="retryTaskList"
resultType="com.aizuda.snailjob.template.datasource.persistence.dataobject.DashboardRetryLineResponseDO$Task">
SELECT group_name AS groupName,
SUM(CASE WHEN (scene_status = 1) THEN 1 ELSE 0 END) AS run,
COUNT(*) AS total
FROM sj_retry_scene_config
${ew.customSqlSegment}
GROUP BY namespace_id, group_name
ORDER BY group_name
</select>
<select id="retryTaskListCount" resultType="long">
SELECT COUNT(DISTINCT group_name)
FROM sj_retry_scene_config
${ew.customSqlSegment}
</select>
</mapper>

View File

@ -111,13 +111,4 @@
LIMIT 10
</select>
<select id="jobTaskList"
resultType="com.aizuda.snailjob.template.datasource.persistence.dataobject.DashboardRetryLineResponseDO$Task">
SELECT group_name AS groupName,
SUM(CASE WHEN (job_status = 1) THEN 1 ELSE 0 END) AS run,
COUNT(*) AS total
FROM sj_job
${ew.customSqlSegment}
GROUP BY namespace_id, group_name
</select>
</mapper>

View File

@ -106,13 +106,4 @@
LIMIT 10
</select>
<select id="retryTaskList"
resultType="com.aizuda.snailjob.template.datasource.persistence.dataobject.DashboardRetryLineResponseDO$Task">
SELECT group_name AS groupName,
SUM(CASE WHEN (scene_status = 1) THEN 1 ELSE 0 END) AS run,
COUNT(*) AS total
FROM sj_retry_scene_config
${ew.customSqlSegment}
GROUP BY namespace_id, group_name
</select>
</mapper>

View File

@ -1,23 +1,6 @@
<?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.aizuda.snailjob.template.datasource.persistence.mapper.JobSummaryMapper">
<resultMap id="BaseResultMap" type="com.aizuda.snailjob.template.datasource.persistence.po.JobSummary">
<id column="id" jdbcType="BIGINT" property="id"/>
<result column="namespace_id" jdbcType="TINYINT" property="namespaceId"/>
<result column="group_name" jdbcType="TINYINT" property="groupName"/>
<result column="business_id" jdbcType="TINYINT" property="businessId"/>
<result column="trigger_at" jdbcType="TIMESTAMP" property="triggerAt"/>
<result column="system_task_type" jdbcType="TINYINT" property="systemTaskType"/>
<result column="success_num" jdbcType="TINYINT" property="successNum"/>
<result column="fail_num" jdbcType="TINYINT" property="failNum"/>
<result column="fail_reason" jdbcType="VARCHAR" property="failReason"/>
<result column="stop_num" jdbcType="TINYINT" property="stopNum"/>
<result column="stop_reason" jdbcType="VARCHAR" property="stopReason"/>
<result column="cancel_num" jdbcType="TINYINT" property="cancelNum"/>
<result column="cancel_reason" jdbcType="VARCHAR" property="cancelReason"/>
<result column="create_dt" jdbcType="TIMESTAMP" property="createDt"/>
<result column="update_dt" jdbcType="TIMESTAMP" property="updateDt"/>
</resultMap>
<insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id">
INSERT INTO sj_job_summary (namespace_id, group_name, business_id, trigger_at, system_task_type,
@ -111,23 +94,4 @@
LIMIT 10
</select>
<select id="jobTaskList"
resultType="com.aizuda.snailjob.template.datasource.persistence.dataobject.DashboardRetryLineResponseDO$Task">
SELECT group_name AS groupName,
SUM(CASE WHEN (job_status = 1) THEN 1 ELSE 0 END) AS run,
COUNT(*) AS total
FROM sj_job
${ew.customSqlSegment}
GROUP BY namespace_id, group_name
</select>
<select id="workflowTaskList"
resultType="com.aizuda.snailjob.template.datasource.persistence.dataobject.DashboardRetryLineResponseDO$Task">
SELECT group_name AS groupName,
SUM(CASE WHEN (workflow_status = 1) THEN 1 ELSE 0 END) AS run,
COUNT(*) AS total
FROM sj_workflow
${ew.customSqlSegment}
GROUP BY namespace_id, group_name
</select>
</mapper>

View File

@ -106,13 +106,4 @@
LIMIT 10
</select>
<select id="retryTaskList"
resultType="com.aizuda.snailjob.template.datasource.persistence.dataobject.DashboardRetryLineResponseDO$Task">
SELECT group_name AS groupName,
SUM(CASE WHEN (scene_status = 1) THEN 1 ELSE 0 END) AS run,
COUNT(*) AS total
FROM sj_retry_scene_config
${ew.customSqlSegment}
GROUP BY namespace_id, group_name
</select>
</mapper>

View File

@ -1,23 +1,6 @@
<?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.aizuda.snailjob.template.datasource.persistence.mapper.JobSummaryMapper">
<resultMap id="BaseResultMap" type="com.aizuda.snailjob.template.datasource.persistence.po.JobSummary">
<id column="id" jdbcType="BIGINT" property="id"/>
<result column="namespace_id" jdbcType="TINYINT" property="namespaceId"/>
<result column="group_name" jdbcType="TINYINT" property="groupName"/>
<result column="business_id" jdbcType="TINYINT" property="businessId"/>
<result column="trigger_at" jdbcType="TIMESTAMP" property="triggerAt"/>
<result column="system_task_type" jdbcType="TINYINT" property="systemTaskType"/>
<result column="success_num" jdbcType="TINYINT" property="successNum"/>
<result column="fail_num" jdbcType="TINYINT" property="failNum"/>
<result column="fail_reason" jdbcType="VARCHAR" property="failReason"/>
<result column="stop_num" jdbcType="TINYINT" property="stopNum"/>
<result column="stop_reason" jdbcType="VARCHAR" property="stopReason"/>
<result column="cancel_num" jdbcType="TINYINT" property="cancelNum"/>
<result column="cancel_reason" jdbcType="VARCHAR" property="cancelReason"/>
<result column="create_dt" jdbcType="TIMESTAMP" property="createDt"/>
<result column="update_dt" jdbcType="TIMESTAMP" property="updateDt"/>
</resultMap>
<insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="false" keyProperty="id">
INSERT INTO sj_job_summary (namespace_id, group_name, business_id, trigger_at, system_task_type,
@ -107,13 +90,4 @@
WHERE ROWNUM <![CDATA[ <= ]]> 10
</select>
<select id="jobTaskList"
resultType="com.aizuda.snailjob.template.datasource.persistence.dataobject.DashboardRetryLineResponseDO$Task">
SELECT group_name AS groupName,
SUM(CASE WHEN (job_status = 1) THEN 1 ELSE 0 END) AS run,
COUNT(*) AS total
FROM sj_job
${ew.customSqlSegment}
GROUP BY namespace_id, group_name
</select>
</mapper>

View File

@ -105,14 +105,4 @@
WHERE ROWNUM <![CDATA[ <= ]]> 10
</select>
<select id="retryTaskList"
resultType="com.aizuda.snailjob.template.datasource.persistence.dataobject.DashboardRetryLineResponseDO$Task">
SELECT group_name AS groupName,
SUM(CASE WHEN (scene_status = 1) THEN 1 ELSE 0 END) AS run,
COUNT(*) AS total
FROM sj_retry_scene_config
${ew.customSqlSegment}
GROUP BY namespace_id, group_name
</select>
</mapper>

View File

@ -1,27 +1,10 @@
<?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.aizuda.snailjob.template.datasource.persistence.mapper.JobSummaryMapper">
<resultMap id="BaseResultMap" type="com.aizuda.snailjob.template.datasource.persistence.po.JobSummary">
<id column="id" jdbcType="BIGINT" property="id"/>
<result column="namespace_id" jdbcType="TINYINT" property="namespaceId"/>
<result column="group_name" jdbcType="TINYINT" property="groupName"/>
<result column="business_id" jdbcType="TINYINT" property="businessId"/>
<result column="trigger_at" jdbcType="TIMESTAMP" property="triggerAt"/>
<result column="system_task_type" jdbcType="TINYINT" property="systemTaskType"/>
<result column="success_num" jdbcType="TINYINT" property="successNum"/>
<result column="fail_num" jdbcType="TINYINT" property="failNum"/>
<result column="fail_reason" jdbcType="VARCHAR" property="failReason"/>
<result column="stop_num" jdbcType="TINYINT" property="stopNum"/>
<result column="stop_reason" jdbcType="VARCHAR" property="stopReason"/>
<result column="cancel_num" jdbcType="TINYINT" property="cancelNum"/>
<result column="cancel_reason" jdbcType="VARCHAR" property="cancelReason"/>
<result column="create_dt" jdbcType="TIMESTAMP" property="createDt"/>
<result column="update_dt" jdbcType="TIMESTAMP" property="updateDt"/>
</resultMap>
<insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id">
INSERT INTO sj_job_summary (namespace_id, group_name, business_id, trigger_at, system_task_type,
success_num,fail_num,fail_reason,stop_num,stop_reason, cancel_num,cancel_reason)
success_num,fail_num,fail_reason,stop_num,stop_reason, cancel_num,cancel_reason)
VALUES
<foreach collection="list" item="item" separator=",">
(
@ -110,13 +93,4 @@
ORDER BY total DESC LIMIT 10
</select>
<select id="jobTaskList"
resultType="com.aizuda.snailjob.template.datasource.persistence.dataobject.DashboardRetryLineResponseDO$Task">
SELECT group_name AS groupName,
SUM(CASE WHEN (job_status = 1) THEN 1 ELSE 0 END) AS run,
count(*) AS total
FROM sj_job
${ew.customSqlSegment}
GROUP BY namespace_id, group_name
</select>
</mapper>

View File

@ -103,13 +103,4 @@
ORDER BY total DESC LIMIT 10
</select>
<select id="retryTaskList"
resultType="com.aizuda.snailjob.template.datasource.persistence.dataobject.DashboardRetryLineResponseDO$Task">
SELECT group_name AS groupName,
SUM(CASE WHEN (scene_status = 1) THEN 1 ELSE 0 END) AS run,
COUNT(*) AS total
FROM sj_retry_scene_config
${ew.customSqlSegment}
GROUP BY namespace_id, group_name
</select>
</mapper>

View File

@ -1,23 +1,6 @@
<?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.aizuda.snailjob.template.datasource.persistence.mapper.JobSummaryMapper">
<resultMap id="BaseResultMap" type="com.aizuda.snailjob.template.datasource.persistence.po.JobSummary">
<id column="id" jdbcType="BIGINT" property="id"/>
<result column="namespace_id" jdbcType="TINYINT" property="namespaceId"/>
<result column="group_name" jdbcType="TINYINT" property="groupName"/>
<result column="business_id" jdbcType="TINYINT" property="businessId"/>
<result column="trigger_at" jdbcType="TIMESTAMP" property="triggerAt"/>
<result column="system_task_type" jdbcType="TINYINT" property="systemTaskType"/>
<result column="success_num" jdbcType="TINYINT" property="successNum"/>
<result column="fail_num" jdbcType="TINYINT" property="failNum"/>
<result column="fail_reason" jdbcType="VARCHAR" property="failReason"/>
<result column="stop_num" jdbcType="TINYINT" property="stopNum"/>
<result column="stop_reason" jdbcType="VARCHAR" property="stopReason"/>
<result column="cancel_num" jdbcType="TINYINT" property="cancelNum"/>
<result column="cancel_reason" jdbcType="VARCHAR" property="cancelReason"/>
<result column="create_dt" jdbcType="TIMESTAMP" property="createDt"/>
<result column="update_dt" jdbcType="TIMESTAMP" property="updateDt"/>
</resultMap>
<insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id">
INSERT INTO sj_job_summary (namespace_id, group_name, business_id, trigger_at, system_task_type,
@ -118,24 +101,4 @@
ORDER BY name DESC
</select>
<!-- SQL Server GROUP BY 的分页必须 ORDER BY xxx -->
<select id="jobTaskList"
resultType="com.aizuda.snailjob.template.datasource.persistence.dataobject.DashboardRetryLineResponseDO$Task">
SELECT
group_name AS groupName,
SUM(CASE WHEN (job_status = 1) THEN 1 ELSE 0 END) AS run,
COUNT(*) AS total
FROM sj_job
${ew.customSqlSegment}
GROUP BY namespace_id, group_name
ORDER BY group_name
</select>
<!-- 用于 jobTaskList 分页的 COUNT,
SQL Server SELECT COUNT(*) FROM (... ORDER BY ) 会报错 -->
<select id="countJobTask" resultType="long">
SELECT COUNT(DISTINCT group_name)
FROM sj_job
${ew.customSqlSegment}
</select>
</mapper>

View File

@ -1,19 +1,6 @@
<?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.aizuda.snailjob.template.datasource.persistence.mapper.RetrySummaryMapper">
<resultMap id="BaseResultMap" type="com.aizuda.snailjob.template.datasource.persistence.po.RetrySummary">
<id column="id" jdbcType="BIGINT" property="id"/>
<result column="namespace_id" jdbcType="TINYINT" property="namespaceId"/>
<result column="group_name" jdbcType="TINYINT" property="groupName"/>
<result column="scene_name" jdbcType="TINYINT" property="sceneName"/>
<result column="trigger_at" jdbcType="TIMESTAMP" property="triggerAt"/>
<result column="running_num" jdbcType="TINYINT" property="runningNum"/>
<result column="finish_num" jdbcType="TINYINT" property="finishNum"/>
<result column="max_count_num" jdbcType="VARCHAR" property="maxCountNum"/>
<result column="suspend_num" jdbcType="TINYINT" property="suspendNum"/>
<result column="create_dt" jdbcType="TIMESTAMP" property="createDt"/>
<result column="update_dt" jdbcType="TIMESTAMP" property="updateDt"/>
</resultMap>
<insert id="batchInsert" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id">
INSERT INTO sj_retry_summary (namespace_id, group_name, scene_name, trigger_at,
@ -113,24 +100,4 @@
ORDER BY total DESC
</select>
<!-- SQL Server GROUP BY 的分页必须 ORDER BY xxx -->
<select id="retryTaskList"
resultType="com.aizuda.snailjob.template.datasource.persistence.dataobject.DashboardRetryLineResponseDO$Task">
SELECT
group_name AS groupName,
SUM(CASE WHEN (scene_status = 1) THEN 1 ELSE 0 END) AS run,
COUNT(*) AS total
FROM sj_retry_scene_config
${ew.customSqlSegment}
GROUP BY namespace_id, group_name
ORDER BY group_name
</select>
<!-- 用于 retryTaskList 分页的 自定义 COUNT,
SQL Server SELECT COUNT(*) FROM (... ORDER BY group_name) 会报错 -->
<select id="countRetryTask" resultType="long">
SELECT COUNT(DISTINCT group_name)
FROM sj_retry_scene_config
${ew.customSqlSegment}
</select>
</mapper>

View File

@ -165,11 +165,10 @@ public class DashBoardServiceImpl implements DashBoardService {
.eq(RetrySceneConfig::getNamespaceId, namespaceId)
.in(CollUtil.isNotEmpty(groupNames), RetrySceneConfig::getGroupName, groupNames);
// 针对SQL Server的分页COUNT, 自定义statement ID
if (DbTypeEnum.SQLSERVER == DbUtils.getDbType()) {
pager.setSearchCount(false);
pager.setTotal(retrySummaryMapper.countRetryTask(wrapper));
}
// 针对 Group By 分页自定义countStatement
pager.setSearchCount(false);
pager.setTotal(retrySummaryMapper.retryTaskListCount(wrapper));
IPage<DashboardRetryLineResponseDO.Task> page = retrySummaryMapper.retryTaskList(wrapper, pager);
List<DashboardRetryLineResponseVO.Task> taskList = JobSummaryResponseVOConverter.INSTANCE.convertList(page.getRecords());
@ -234,11 +233,12 @@ public class DashBoardServiceImpl implements DashBoardService {
.eq(Job::getDeleted, 0)
.eq(Job::getNamespaceId, namespaceId)
.in(CollUtil.isNotEmpty(groupNames), Job::getGroupName, groupNames);
// 针对SQL Server的分页COUNT, 自定义statement ID
if (DbTypeEnum.SQLSERVER == DbUtils.getDbType()) {
pager.setSearchCount(false);
pager.setTotal(jobSummaryMapper.countJobTask(wrapper));
}
// 针对 Group By 分页自定义countStatement
pager.setSearchCount(false);
pager.setTotal(SystemModeEnum.JOB.name().equals(mode) ?
jobSummaryMapper.jobTaskListCount(wrapper):
jobSummaryMapper.workflowTaskListCount(wrapper));
IPage<DashboardRetryLineResponseDO.Task> taskIPage = SystemModeEnum.JOB.name().equals(mode) ?
jobSummaryMapper.jobTaskList(wrapper, pager) : jobSummaryMapper.workflowTaskList(wrapper, pager);