diff --git a/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/JobTaskBatchMapper.xml b/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/JobTaskBatchMapper.xml
index 4fe593da..b506e7a2 100644
--- a/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/JobTaskBatchMapper.xml
+++ b/easy-retry-datasource/easy-retry-mysql-datasource/src/main/resources/mysql/mapper/JobTaskBatchMapper.xml
@@ -25,13 +25,13 @@
and a.group_name = #{queryDO.groupName}
- and task_status = #{queryDO.taskBatchStatus}
+ and task_batch_status = #{queryDO.taskBatchStatus}
and job_name like #{queryDO.jobName}
and a.deleted = 0
- order by id desc
+ order by a.id desc
diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/JobController.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/JobController.java
index f98fa856..fb82baa4 100644
--- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/JobController.java
+++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/controller/JobController.java
@@ -2,9 +2,11 @@ package com.aizuda.easy.retry.server.web.controller;
import com.aizuda.easy.retry.server.web.annotation.LoginRequired;
import com.aizuda.easy.retry.server.web.model.base.PageResult;
+import com.aizuda.easy.retry.server.web.model.request.JobBatchQueryVO;
import com.aizuda.easy.retry.server.web.model.request.JobQueryVO;
import com.aizuda.easy.retry.server.web.model.request.JobRequestVO;
import com.aizuda.easy.retry.server.web.model.request.JobUpdateJobStatusRequestVO;
+import com.aizuda.easy.retry.server.web.model.response.JobBatchResponseVO;
import com.aizuda.easy.retry.server.web.model.response.JobResponseVO;
import com.aizuda.easy.retry.server.web.service.JobService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -67,4 +69,12 @@ public class JobController {
return jobService.getTimeByCron(cron);
}
+ @GetMapping("/job-name/list")
+ @LoginRequired
+ public List getJobNameList(
+ @RequestParam(value = "keywords", required = false) String keywords,
+ @RequestParam(value = "jobId", required = false) Long jobId
+ ) {
+ return jobService.getJobNameList(keywords, jobId);
+ }
}
diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/JobBatchQueryVO.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/JobBatchQueryVO.java
index 29a0218c..5b9f3234 100644
--- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/JobBatchQueryVO.java
+++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/model/request/JobBatchQueryVO.java
@@ -12,7 +12,7 @@ import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
public class JobBatchQueryVO extends BaseQueryVO {
- private Long jobId ;
+ private Long jobId;
private String jobName;
private Integer taskBatchStatus;
private String groupName;
diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/JobService.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/JobService.java
index b8ce1ea9..27ecea26 100644
--- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/JobService.java
+++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/JobService.java
@@ -27,4 +27,6 @@ public interface JobService {
Boolean deleteJobById(Long id);
List getTimeByCron(String cron);
+
+ List getJobNameList(String keywords, Long jobId);
}
diff --git a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/JobServiceImpl.java b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/JobServiceImpl.java
index ffa8da25..b8fc4230 100644
--- a/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/JobServiceImpl.java
+++ b/easy-retry-server/easy-retry-server-web/src/main/java/com/aizuda/easy/retry/server/web/service/impl/JobServiceImpl.java
@@ -58,7 +58,7 @@ public class JobServiceImpl implements JobService {
}
if (StrUtil.isNotBlank(queryVO.getJobName())) {
- queryWrapper.like(Job::getJobName, "%" + queryVO.getJobName() + "%");
+ queryWrapper.like(Job::getJobName, "%" + queryVO.getJobName().trim() + "%");
}
if (Objects.nonNull(queryVO.getJobStatus())) {
@@ -90,7 +90,7 @@ public class JobServiceImpl implements JobService {
try {
ZonedDateTime zdt = now.atZone(ZoneOffset.ofHours(8));
nextValidTime = new CronExpression(cron).getNextValidTimeAfter(Date.from(zdt.toInstant()));
- now = LocalDateTime.ofEpochSecond( nextValidTime.getTime() / 1000,0, ZoneOffset.ofHours(8));
+ now = LocalDateTime.ofEpochSecond(nextValidTime.getTime() / 1000, 0, ZoneOffset.ofHours(8));
list.add(dateTimeFormatter.format(now));
} catch (ParseException ignored) {
}
@@ -99,6 +99,23 @@ public class JobServiceImpl implements JobService {
return list;
}
+ @Override
+ public List getJobNameList(String keywords, Long jobId) {
+
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper()
+ .select(Job::getId, Job::getJobName);
+ if (StrUtil.isNotBlank(keywords)) {
+ queryWrapper.like(Job::getJobName, "%" + keywords.trim() + "%");
+ }
+
+ if (Objects.nonNull(jobId)) {
+ queryWrapper.eq(Job::getId, jobId);
+ }
+
+ PageDTO pageDTO = new PageDTO<>(1, 20);
+ PageDTO selectPage = jobMapper.selectPage(pageDTO, queryWrapper);
+ return JobResponseVOConverter.INSTANCE.toJobResponseVOs(selectPage.getRecords());
+ }
@Override
public boolean saveJob(JobRequestVO jobRequestVO) {
diff --git a/frontend/src/api/jobApi.js b/frontend/src/api/jobApi.js
index a9b96d8c..820a74b5 100644
--- a/frontend/src/api/jobApi.js
+++ b/frontend/src/api/jobApi.js
@@ -8,6 +8,7 @@ const jobApi = {
updateJobStatus: '/job/status',
delJob: '/job/',
timeByCron: '/job/cron',
+ jobNameList: '/job/job-name/list',
// 任务批次
jobBatchList: '/job/batch/list',
@@ -22,6 +23,14 @@ const jobApi = {
export default jobApi
+export function jobNameList (parameter) {
+ return request({
+ url: jobApi.jobNameList,
+ method: 'get',
+ params: parameter
+ })
+}
+
export function timeByCron (parameter) {
return request({
url: jobApi.timeByCron,
diff --git a/frontend/src/views/job/JobBatchList.vue b/frontend/src/views/job/JobBatchList.vue
index f8a2a356..6235aafd 100644
--- a/frontend/src/views/job/JobBatchList.vue
+++ b/frontend/src/views/job/JobBatchList.vue
@@ -16,13 +16,28 @@
-
+
+
+ {{ item.jobName }}
+
+
+
-
+
{{ item.name }}
@@ -79,8 +94,9 @@
:data="loadData"
:alert="options.alert"
:rowSelection="options.rowSelection"
+ :scroll="{ x: 1800 }"
>
-
+
{{ record.id }}
@@ -142,7 +158,7 @@
import ATextarea from 'ant-design-vue/es/input/TextArea'
import AInput from 'ant-design-vue/es/input/Input'
import { STable } from '@/components'
-import { jobBatchList } from '@/api/jobApi'
+import { jobBatchList, jobNameList } from '@/api/jobApi'
import { getAllGroupNameList } from '@/api/manage'
const enums = require('@/utils/enum')
@@ -162,38 +178,46 @@ export default {
// 高级搜索 展开/关闭
advanced: false,
// 查询参数
- queryParam: {},
+ queryParam: {
+ jobId: null
+ },
taskBatchStatus: enums.taskBatchStatus,
operationReason: enums.operationReason,
// 表头
columns: [
{
title: 'ID',
- scopedSlots: { customRender: 'serial' }
+ scopedSlots: { customRender: 'serial' },
+ width: '5%'
},
{
title: '组名称',
dataIndex: 'groupName',
- ellipsis: true
+ ellipsis: true,
+ width: '15%'
},
{
title: '任务名称',
dataIndex: 'jobName',
- ellipsis: true
+ ellipsis: true,
+ width: '15%'
+ },
+ {
+ title: '开始执行时间',
+ dataIndex: 'executionAt',
+ width: '10%'
},
{
title: '状态',
dataIndex: 'taskBatchStatus',
- scopedSlots: { customRender: 'taskBatchStatus' }
- },
- {
- title: '开始执行时间',
- dataIndex: 'executionAt'
+ scopedSlots: { customRender: 'taskBatchStatus' },
+ width: '5%'
},
{
title: '操作原因',
dataIndex: 'operationReason',
- scopedSlots: { customRender: 'operationReason' }
+ scopedSlots: { customRender: 'operationReason' },
+ width: '15%'
},
{
title: '创建时间',
@@ -211,6 +235,7 @@ export default {
],
// 加载数据方法 必须为 Promise 对象
loadData: (parameter) => {
+ // this.queryParam['jobId'] = this.$route.query.jobId
return jobBatchList(Object.assign(parameter, this.queryParam)).then((res) => {
return res
})
@@ -233,7 +258,7 @@ export default {
},
optionAlertShow: false,
groupNameList: [],
- sceneList: []
+ jobNameList: []
}
},
created () {
@@ -242,7 +267,16 @@ export default {
if (this.groupNameList !== null && this.groupNameList.length > 0) {
this.queryParam['groupName'] = this.groupNameList[0]
this.$refs.table.refresh(true)
- this.handleChange(this.groupNameList[0])
+ }
+ })
+
+ const jobId = this.$route.query.jobId
+ jobNameList({ jobId: jobId }).then(res => {
+ this.jobNameList = res.data
+ console.log(jobId)
+ if (jobId) {
+ this.queryParam['jobId'] = this.jobNameList[0].id
+ this.$refs.table.refresh(true)
}
})
},
@@ -253,7 +287,16 @@ export default {
handleBatchNew () {
this.$refs.batchSaveRetryTask.isShow(true, null)
},
+ handleSearch (value) {
+ console.log(`selected ${value}`)
+ jobNameList({ keywords: value }).then(res => {
+ this.jobNameList = res.data
+ })
+ },
handleChange (value) {
+ console.log(`handleChange ${value}`)
+ // this.queryParam['jobId'] = value
+ // this.$refs.table.refresh(true)
},
toggleAdvanced () {
this.advanced = !this.advanced
diff --git a/frontend/src/views/job/JobList.vue b/frontend/src/views/job/JobList.vue
index c9c265cc..ed7ae27c 100644
--- a/frontend/src/views/job/JobList.vue
+++ b/frontend/src/views/job/JobList.vue
@@ -78,6 +78,7 @@
:rowKey="(record) => record.id"
:columns="columns"
:data="loadData"
+ :scroll="{ x: 2000 }"
>
{{ record.id }}
@@ -112,6 +113,8 @@
详情
+ 批次
+
编辑
{{ record.id }}
@@ -140,7 +141,8 @@ export default {
columns: [
{
title: 'ID',
- scopedSlots: { customRender: 'serial' }
+ scopedSlots: { customRender: 'serial' },
+ width: '8%'
},
{
title: '组名称',