refactor(job): 统一返回结构并优化分页参数

- 将 JobInfoController 和 JobLogController 中的 pageList 方法参数从 start/length 改为 offset/pagesize
- 修改 pageList 接口返回类型为 Response<PageModel<XxlJobInfo>>,统一返回结构- 替换所有 ReturnT 返回类型为 Response 类型
- 更新 OpenApiController 中的返回类型及验证逻辑
- 调整前端 JS 文件中的分页参数传递方式,并增加 dataFilter 处理后端返回数据格式
- 引入 PageModel 类用于封装分页数据
- 删除无用的 ReturnT 相关注解和导入语句
3.3.0-release
xuxueli 1 month ago
parent 2e4242e37a
commit fa7eec0693

@ -17,6 +17,7 @@ import com.xxl.sso.core.helper.XxlSsoHelper;
import com.xxl.sso.core.model.LoginInfo;
import com.xxl.tool.core.CollectionTool;
import com.xxl.tool.core.DateTool;
import com.xxl.tool.response.PageModel;
import com.xxl.tool.response.Response;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
@ -74,20 +75,20 @@ public class JobInfoController {
@RequestMapping("/pageList")
@ResponseBody
public Map<String, Object> pageList(HttpServletRequest request,
@RequestParam(value = "start", required = false, defaultValue = "0") int start,
@RequestParam(value = "length", required = false, defaultValue = "10") int length,
@RequestParam("jobGroup") int jobGroup,
@RequestParam("triggerStatus") int triggerStatus,
@RequestParam("jobDesc") String jobDesc,
@RequestParam("executorHandler") String executorHandler,
@RequestParam("author") String author) {
public Response<PageModel<XxlJobInfo>> pageList(HttpServletRequest request,
@RequestParam(required = false, defaultValue = "0") int offset,
@RequestParam(required = false, defaultValue = "10") int pagesize,
@RequestParam int jobGroup,
@RequestParam int triggerStatus,
@RequestParam String jobDesc,
@RequestParam String executorHandler,
@RequestParam String author) {
// valid jobGroup permission
JobGroupPermissionUtil.validJobGroupPermission(request, jobGroup);
// page
return xxlJobService.pageList(start, length, jobGroup, triggerStatus, jobDesc, executorHandler, author);
return xxlJobService.pageList(offset, pagesize, jobGroup, triggerStatus, jobDesc, executorHandler, author);
}
@RequestMapping("/add")

@ -14,7 +14,6 @@ import com.xxl.job.core.openapi.ExecutorBiz;
import com.xxl.job.core.openapi.model.KillRequest;
import com.xxl.job.core.openapi.model.LogRequest;
import com.xxl.job.core.openapi.model.LogResult;
import com.xxl.job.core.openapi.model.ReturnT;
import com.xxl.job.core.context.XxlJobContext;
import com.xxl.tool.core.CollectionTool;
import com.xxl.tool.core.DateTool;
@ -95,14 +94,14 @@ public class JobLogController {
/*@RequestMapping("/getJobsByGroup")
@ResponseBody
public ReturnT<List<XxlJobInfo>> getJobsByGroup(HttpServletRequest request, @RequestParam("jobGroup") int jobGroup){
public Response<List<XxlJobInfo>> getJobsByGroup(HttpServletRequest request, @RequestParam("jobGroup") int jobGroup){
// valid permission
JobInfoController.validJobGroupPermission(request, jobGroup);
// query
List<XxlJobInfo> list = xxlJobInfoMapper.getJobsByGroup(jobGroup);
return ReturnT.ofSuccess(list);
return Response.ofSuccess(list);
}*/
@RequestMapping("/pageList")
@ -228,15 +227,15 @@ public class JobLogController {
@RequestMapping("/logKill")
@ResponseBody
public ReturnT<String> logKill(HttpServletRequest request, @RequestParam("id") int id){
public Response<String> logKill(HttpServletRequest request, @RequestParam("id") int id){
// base check
XxlJobLog log = xxlJobLogMapper.load(id);
XxlJobInfo jobInfo = xxlJobInfoMapper.loadById(log.getJobId());
if (jobInfo==null) {
return ReturnT.ofFail(I18nUtil.getString("jobinfo_glue_jobid_unvalid"));
return Response.ofFail(I18nUtil.getString("jobinfo_glue_jobid_unvalid"));
}
if (ReturnT.SUCCESS_CODE != log.getTriggerCode()) {
return ReturnT.ofFail( I18nUtil.getString("joblog_kill_log_limit"));
if (XxlJobContext.HANDLE_CODE_SUCCESS != log.getTriggerCode()) {
return Response.ofFail( I18nUtil.getString("joblog_kill_log_limit"));
}
// valid JobGroup permission
@ -257,15 +256,15 @@ public class JobLogController {
log.setHandleMsg( I18nUtil.getString("joblog_kill_log_byman")+":" + (runResult.getMsg()!=null?runResult.getMsg():""));
log.setHandleTime(new Date());
XxlJobAdminBootstrap.getInstance().getJobCompleter().complete(log);
return ReturnT.ofSuccess(runResult.getMsg());
return Response.ofSuccess(runResult.getMsg());
} else {
return ReturnT.ofFail(runResult.getMsg());
return Response.ofFail(runResult.getMsg());
}
}
@RequestMapping("/clearLog")
@ResponseBody
public ReturnT<String> clearLog(HttpServletRequest request,
public Response<String> clearLog(HttpServletRequest request,
@RequestParam("jobGroup") int jobGroup,
@RequestParam("jobId") int jobId,
@RequestParam("type") int type){
@ -294,7 +293,7 @@ public class JobLogController {
} else if (type == 9) {
clearBeforeNum = 0; // 清理所有日志数据
} else {
return ReturnT.ofFail(I18nUtil.getString("joblog_clean_type_unvalid"));
return Response.ofFail(I18nUtil.getString("joblog_clean_type_unvalid"));
}
List<Long> logIds = null;
@ -305,7 +304,7 @@ public class JobLogController {
}
} while (logIds!=null && logIds.size()>0);
return ReturnT.ofSuccess();
return Response.ofSuccess();
}
}

@ -52,9 +52,9 @@ public class JobUserController {
@ResponseBody
@XxlSso(role = Consts.ADMIN_ROLE)
public Response<PageModel<XxlJobUser>> pageList(@RequestParam(required = false, defaultValue = "0") int offset,
@RequestParam(required = false, defaultValue = "10") int pagesize,
@RequestParam String username,
@RequestParam int role) {
@RequestParam(required = false, defaultValue = "10") int pagesize,
@RequestParam String username,
@RequestParam int role) {
// page list
List<XxlJobUser> list = xxlJobUserMapper.pageList(offset, pagesize, username, role);

@ -4,11 +4,11 @@ import com.xxl.job.admin.scheduler.config.XxlJobAdminBootstrap;
import com.xxl.job.core.openapi.AdminBiz;
import com.xxl.job.core.openapi.model.HandleCallbackRequest;
import com.xxl.job.core.openapi.model.RegistryRequest;
import com.xxl.job.core.openapi.model.ReturnT;
import com.xxl.job.core.util.XxlJobRemotingUtil;
import com.xxl.sso.core.annotation.XxlSso;
import com.xxl.tool.core.StringTool;
import com.xxl.tool.gson.GsonTool;
import com.xxl.tool.response.Response;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
@ -38,19 +38,19 @@ public class OpenApiController {
// valid
if (!"POST".equalsIgnoreCase(request.getMethod())) {
return ReturnT.ofFail("invalid request, HttpMethod not support.");
return Response.ofFail("invalid request, HttpMethod not support.");
}
if (StringTool.isBlank(uri)) {
return ReturnT.ofFail("invalid request, uri-mapping empty.");
return Response.ofFail("invalid request, uri-mapping empty.");
}
if (StringTool.isBlank(requestBody)) {
return ReturnT.ofFail("invalid request, requestBody empty.");
return Response.ofFail("invalid request, requestBody empty.");
}
// valid token
if (StringTool.isNotBlank(XxlJobAdminBootstrap.getInstance().getAccessToken())
&& !XxlJobAdminBootstrap.getInstance().getAccessToken().equals(accesstoken)) {
return ReturnT.ofFail("The access token is wrong.");
return Response.ofFail("The access token is wrong.");
}
// dispatch request
@ -69,10 +69,10 @@ public class OpenApiController {
return adminBiz.registryRemove(registryParam);
}
default:
return ReturnT.ofFail("invalid request, uri-mapping("+ uri +") not found.");
return Response.ofFail("invalid request, uri-mapping("+ uri +") not found.");
}
} catch (Exception e) {
return ReturnT.ofFail("openapi invoke error: " + e.getMessage());
return Response.ofFail("openapi invoke error: " + e.getMessage());
}
}

@ -1,9 +1,9 @@
package com.xxl.job.admin.service;
import com.xxl.job.admin.model.XxlJobInfo;
import com.xxl.job.core.openapi.model.ReturnT;
import com.xxl.sso.core.model.LoginInfo;
import com.xxl.tool.response.PageModel;
import com.xxl.tool.response.Response;
import java.util.Date;
@ -18,81 +18,46 @@ public interface XxlJobService {
/**
* page list
*
* @param start
* @param length
* @param jobGroup
* @param jobDesc
* @param executorHandler
* @param author
* @return
*/
public Map<String, Object> pageList(int start, int length, int jobGroup, int triggerStatus, String jobDesc, String executorHandler, String author);
public Response<PageModel<XxlJobInfo>> pageList(int offset, int pagesize, int jobGroup, int triggerStatus, String jobDesc, String executorHandler, String author);
/**
* add job
*
* @param jobInfo
* @return
*/
public ReturnT<String> add(XxlJobInfo jobInfo, LoginInfo loginInfo);
/**
* update job
*
* @param jobInfo
* @return
*/
public ReturnT<String> update(XxlJobInfo jobInfo, LoginInfo loginInfo);
/**
* remove job
* *
* @param id
* @return
*/
public ReturnT<String> remove(int id, LoginInfo loginInfo);
/**
* start job
*
* @param id
* @return
*/
public ReturnT<String> start(int id, LoginInfo loginInfo);
/**
* stop job
*
* @param id
* @return
*/
public ReturnT<String> stop(int id, LoginInfo loginInfo);
/**
* trigger
*
* @param loginInfo
* @param jobId
* @param executorParam
* @param addressList
* @return
*/
public ReturnT<String> trigger(LoginInfo loginInfo, int jobId, String executorParam, String addressList);
/**
* dashboard info
*
* @return
*/
public Map<String,Object> dashboardInfo();
/**
* chart info
*
* @param startDate
* @param endDate
* @return
*/
public Response<Map<String,Object>> chartInfo(Date startDate, Date endDate);

@ -19,6 +19,7 @@ import com.xxl.job.core.enums.ExecutorBlockStrategyEnum;
import com.xxl.job.core.glue.GlueTypeEnum;
import com.xxl.sso.core.model.LoginInfo;
import com.xxl.tool.core.DateTool;
import com.xxl.tool.response.PageModel;
import com.xxl.tool.response.Response;
import jakarta.annotation.Resource;
import org.slf4j.Logger;
@ -48,18 +49,18 @@ public class XxlJobServiceImpl implements XxlJobService {
private XxlJobLogReportMapper xxlJobLogReportMapper;
@Override
public Map<String, Object> pageList(int start, int length, int jobGroup, int triggerStatus, String jobDesc, String executorHandler, String author) {
public Response<PageModel<XxlJobInfo>> pageList(int offset, int pagesize, int jobGroup, int triggerStatus, String jobDesc, String executorHandler, String author) {
// page list
List<XxlJobInfo> list = xxlJobInfoMapper.pageList(start, length, jobGroup, triggerStatus, jobDesc, executorHandler, author);
int list_count = xxlJobInfoMapper.pageListCount(start, length, jobGroup, triggerStatus, jobDesc, executorHandler, author);
List<XxlJobInfo> list = xxlJobInfoMapper.pageList(offset, pagesize, jobGroup, triggerStatus, jobDesc, executorHandler, author);
int list_count = xxlJobInfoMapper.pageListCount(offset, pagesize, jobGroup, triggerStatus, jobDesc, executorHandler, author);
// package result
Map<String, Object> maps = new HashMap<String, Object>();
maps.put("recordsTotal", list_count); // 总记录数
maps.put("recordsFiltered", list_count); // 过滤后的总记录数
maps.put("data", list); // 分页列表
return maps;
PageModel<XxlJobInfo> pageModel = new PageModel<>();
pageModel.setPageData(list);
pageModel.setTotalCount(list_count);
return Response.ofSuccess(pageModel);
}
@Override

@ -10,15 +10,23 @@ $(function() {
type:"post",
data : function ( d ) {
var obj = {};
obj.offset = d.start;
obj.pagesize = d.length;
obj.jobGroup = $('#jobGroup').val();
obj.triggerStatus = $('#triggerStatus').val();
obj.jobDesc = $('#jobDesc').val();
obj.executorHandler = $('#executorHandler').val();
obj.author = $('#author').val();
obj.start = d.start;
obj.length = d.length;
return obj;
}
},
dataFilter: function (json ) {
var result = JSON.parse(json);
return JSON.stringify({
"recordsTotal": result.data.totalCount,
"recordsFiltered": result.data.totalCount,
"data": result.data.pageData
});
}
},
"searching": false,
"ordering": false,

Loading…
Cancel
Save