1. 修改后台任务相关

This commit is contained in:
ant 2024-07-29 16:42:05 +08:00
parent a8e997e260
commit e320ce60b3
14 changed files with 259 additions and 132 deletions

View File

@ -45,31 +45,31 @@ spring:
- DELETE
- OPTIONS
add-to-simple-url-handler-mapping: true
routes:
# 认证中心
- id: auth-service
uri: lb://auth-service
predicates:
- Path=/api/auth/**
filters:
- StripPrefix=1
# 验证码处理
- CacheRequestFilter
- ValidateCodeFilter
# 系统模块
- id: system-service
uri: lb://system-service
predicates:
- Path=/api/system/**
filters:
- StripPrefix=1
# 定时任务
- id: job-service
uri: lb://job-service
predicates:
- Path=/api/job/**
filters:
- StripPrefix=1
# routes:
# # 认证中心
# - id: auth-service
# uri: lb://auth-service
# predicates:
# - Path=/api/auth/**
# filters:
# - StripPrefix=1
# # 验证码处理
# - CacheRequestFilter
# - ValidateCodeFilter
# # 系统模块
# - id: system-service
# uri: lb://system-service
# predicates:
# - Path=/api/system/**
# filters:
# - StripPrefix=1
# # 定时任务
# - id: job-service
# uri: lb://job-service
# predicates:
# - Path=/api/job/**
# filters:
# - StripPrefix=1
# default-filters:
# - name: BlackListUrlFilter
# args:
@ -89,27 +89,6 @@ spring:
# # 一个请求需要多少令牌 这是为每个请求从桶中获取的令牌数量默认为1。
# redis-rate-limiter.requestedTokens: 1
# key-resolver: "#{@remoteAddrKeyResolver}"
# 安全配置
security:
# 验证码
captcha:
enabled: true
type: char
# 防止XSS攻击
xss:
enabled: true
#excludeUrls:
# - /api/auth/login
# 不校验白名单
ignore:
whites:
- /auth/logout
- /auth/login
- /auth/register
- /feign/**
- /demo/**
logging:
config: classpath:logback-nacos.xml

View File

@ -1,5 +1,6 @@
package com.chushang.inspection.work.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
@Data
@ -7,42 +8,52 @@ public class WrkDataVO {
/**
* 项目id
*/
@ExcelProperty("项目id")
private Long projectId;
/**
* 项目名称
*/
@ExcelProperty("项目名称")
private String projectName;
/**
* 部门id
*/
@ExcelProperty("部门id")
private Long deptId;
/**
* 部门名称
*/
@ExcelProperty("部门名称")
private String deptName;
/**
* 任务id
*/
@ExcelProperty("任务id")
private Long taskId;
/**
* 任务名称
*/
@ExcelProperty("任务名称")
private String taskName;
/**
* 终端数
*/
@ExcelProperty("终端总数")
private Integer totalTer;
/**
* 工单数
*/
@ExcelProperty("工单总数")
private Integer totalWrk;
/**
* 完成数
*/
@ExcelProperty("完成总数")
private Integer totalSuc;
/**
* 超时
*/
@ExcelProperty("超时总数")
private Integer totalTimeOut;
}

View File

@ -10,6 +10,7 @@ import com.chushang.common.core.constant.SecurityConstants;
import com.chushang.common.core.exception.utils.AssertUtil;
import com.chushang.common.core.web.Result;
import com.chushang.common.excel.utils.ExcelUtils;
import com.chushang.common.mq.produce.MqProduceService;
import com.chushang.common.mybatis.enums.Operator;
import com.chushang.common.mybatis.page.CommonParam;
import com.chushang.common.mybatis.utils.PageResult;
@ -19,12 +20,9 @@ import com.chushang.inspection.project.dto.ContractDTO;
import com.chushang.inspection.project.dto.ProjectDTO;
import com.chushang.inspection.project.po.WrkProjectContract;
import com.chushang.inspection.project.query.ProjectQuery;
import com.chushang.inspection.project.vo.CountVO;
import com.chushang.inspection.project.vo.ProjectVO;
import com.chushang.inspection.terminal.query.FiveUnifiedStoreDetailsQuery;
import com.chushang.inspection.terminal.service.StoreService;
import com.chushang.inspection.terminal.service.TerminalService;
import com.chushang.inspection.terminal.vo.FiveStoreVO;
import com.chushang.inspection.work.service.WrkInfoService;
import com.chushang.oss.entity.dto.UploadBytesDTO;
import com.chushang.oss.entity.vo.FileSourceVo;
@ -74,6 +72,8 @@ public class WrkProjectService extends ServiceImpl<WrkProjectMapper, WrkProject>
RemoteTaskService remoteTaskService;
@Resource
RemoteOssService ossService;
@Resource
MqProduceService mqProduceService;
@DataScope
public PageResult pageList(WrkProject project, CommonParam commonParam) {
@ -296,8 +296,7 @@ public class WrkProjectService extends ServiceImpl<WrkProjectMapper, WrkProject>
sql
);
AssertUtil.invalidate (recordList <= 0, "导出数据为空");
return remoteTaskService.createTask(CreateTaskDTO.builder()
CreateTaskDTO createTask = CreateTaskDTO.builder()
.params(JSON.toJSONString(projectQuery))
.taskName("项目数据导出")
.applicationName(ServiceEnum.INSPECTION)
@ -307,7 +306,22 @@ public class WrkProjectService extends ServiceImpl<WrkProjectMapper, WrkProject>
.taskType(TaskTypeEnum.DOWN)
.remark("五统一商户明细导出")
.createBy(SecurityUtils.getUsername())
.build(), SecurityConstants.INNER).getData();
.userId(SecurityUtils.getUserId())
.build();
mqProduceService.send(ServiceEnum.TASK.getServiceName(), createTask);
// return remoteTaskService.createTask(CreateTaskDTO.builder()
// .params(JSON.toJSONString(projectQuery))
// .taskName("项目数据导出")
// .applicationName(ServiceEnum.INSPECTION)
// .methodName("export")
// .className(this.getClass().getName())
// .deptId(SecurityUtils.getDeptId())
// .taskType(TaskTypeEnum.DOWN)
// .remark("五统一商户明细导出")
// .createBy(SecurityUtils.getUsername())
// .build(), SecurityConstants.INNER).getData();
return 1L;
}
public Result<String> export(String params){
ProjectQuery projectQuery = JSON.parseObject(params, ProjectQuery.class);

View File

@ -12,13 +12,13 @@ import com.alibaba.fastjson2.JSONObject;
import com.alibaba.nacos.shaded.com.google.common.collect.Maps;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.chushang.common.core.constant.SecurityConstants;
import com.chushang.common.core.util.DateUtils;
import com.chushang.common.core.util.SpringUtils;
import com.chushang.common.core.util.StringUtils;
import com.chushang.common.core.util.TreeUtils;
import com.chushang.common.core.web.Result;
import com.chushang.common.excel.utils.ExcelUtils;
import com.chushang.common.mq.produce.MqProduceService;
import com.chushang.common.mybatis.enums.Operator;
import com.chushang.common.mybatis.page.CommonParam;
import com.chushang.common.mybatis.utils.WrapperUtils;
@ -34,7 +34,6 @@ import com.chushang.security.utils.SecurityUtils;
import com.chushang.task.entity.dto.CreateTaskDTO;
import com.chushang.task.enums.ServiceEnum;
import com.chushang.task.enums.TaskTypeEnum;
import com.chushang.task.feign.RemoteTaskService;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.annotation.CacheConfig;
@ -64,7 +63,7 @@ public class PollingTaskServiceImpl extends ServiceImpl<PollingTaskMapper, Polli
* 通过远程调用的方式进行入库
*/
@Resource
RemoteTaskService remoteTaskService;
MqProduceService mqProduceService;
@Override
@DataScope
@ -217,9 +216,8 @@ public class PollingTaskServiceImpl extends ServiceImpl<PollingTaskMapper, Polli
paramMap.put("parentId", parentId);
Long deptId = SecurityUtils.getDeptId();
String username = SecurityUtils.getUsername();
// 交给后台任务
remoteTaskService.createTask(
CreateTaskDTO.builder()
mqProduceService.send(ServiceEnum.TASK.getServiceName(), CreateTaskDTO.builder()
.params(JSON.toJSONString(paramMap))
.taskName("任务导入")
.applicationName(ServiceEnum.INSPECTION)
@ -228,8 +226,21 @@ public class PollingTaskServiceImpl extends ServiceImpl<PollingTaskMapper, Polli
.deptId(deptId)
.taskType(TaskTypeEnum.UPLOAD)
.createBy(username)
.build(), SecurityConstants.INNER
);
.userId(SecurityUtils.getUserId())
.build());
// 交给后台任务
// remoteTaskService.createTask(
// CreateTaskDTO.builder()
// .params(JSON.toJSONString(paramMap))
// .taskName("任务导入")
// .applicationName(ServiceEnum.INSPECTION)
// .methodName("importTask")
// .className(this.getClass().getName())
// .deptId(deptId)
// .taskType(TaskTypeEnum.UPLOAD)
// .createBy(username)
// .build(), SecurityConstants.INNER
// );
}
@Override

View File

@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.chushang.common.core.constant.SecurityConstants;
import com.chushang.common.core.web.Result;
import com.chushang.common.excel.utils.ExcelUtils;
import com.chushang.common.mq.produce.MqProduceService;
import com.chushang.common.mybatis.utils.PageResult;
import com.chushang.datascope.annotation.DataScope;
import com.chushang.inspection.project.po.PollingTask;
@ -24,7 +25,6 @@ import com.chushang.security.utils.SecurityUtils;
import com.chushang.task.entity.dto.CreateTaskDTO;
import com.chushang.task.enums.ServiceEnum;
import com.chushang.task.enums.TaskTypeEnum;
import com.chushang.task.feign.RemoteTaskService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -39,6 +39,7 @@ import java.util.stream.Collectors;
/**
* 五统一商户 -- 只有建行内蒙古有
*
* @auther: zhao
* @date: 2024/6/21 16:39
*/
@ -51,9 +52,9 @@ public class FiveStoreServiceImpl extends ServiceImpl<FiveStoreMapper, FiveStore
@Resource
StoreService storeService;
@Resource
RemoteTaskService remoteTaskService;
@Resource
RemoteOssService ossService;
@Resource
MqProduceService mqProduceService;
/**
@ -61,7 +62,7 @@ public class FiveStoreServiceImpl extends ServiceImpl<FiveStoreMapper, FiveStore
* s.store_name,
* pt1.number firstLevelBranchNumber,
* pt1.`name` firstLevelBranchName,
*
* <p>
* pt2.number secondaryBranchesNumber,
* pt2.`name` secondaryBranchesName,
*/
@ -83,7 +84,19 @@ public class FiveStoreServiceImpl extends ServiceImpl<FiveStoreMapper, FiveStore
@Override
@DataScope(deptAlias = "t")
public void download(FiveUnifiedStoreDetailsQuery query, HttpServletResponse response) {
remoteTaskService.createTask(CreateTaskDTO.builder()
// remoteTaskService.createTask(CreateTaskDTO.builder()
// .params(JSON.toJSONString(query))
// .taskName("五统一商户明细导出")
// .applicationName(ServiceEnum.INSPECTION)
// .methodName("export")
// .className(this.getClass().getName())
// .deptId(SecurityUtils.getDeptId())
// .taskType(TaskTypeEnum.DOWN)
// .remark("五统一商户明细导出")
// .createBy(SecurityUtils.getUsername())
// .build(), SecurityConstants.INNER);
mqProduceService.send(ServiceEnum.TASK.getServiceName(), CreateTaskDTO.builder()
.params(JSON.toJSONString(query))
.taskName("五统一商户明细导出")
.applicationName(ServiceEnum.INSPECTION)
@ -93,11 +106,14 @@ public class FiveStoreServiceImpl extends ServiceImpl<FiveStoreMapper, FiveStore
.taskType(TaskTypeEnum.DOWN)
.remark("五统一商户明细导出")
.createBy(SecurityUtils.getUsername())
.build(), SecurityConstants.INNER);
.userId(SecurityUtils.getUserId())
.build());
}
/**
* 参考 com.chushang.inspection.project.service.WrkProjectService#projectDataExport
*
* @param params
* @return
*/
@ -126,8 +142,7 @@ public class FiveStoreServiceImpl extends ServiceImpl<FiveStoreMapper, FiveStore
}
public void convert(List<FiveStoreVO> listFiveStores) {
if (CollectionUtil.isNotEmpty(listFiveStores))
{
if (CollectionUtil.isNotEmpty(listFiveStores)) {
// firstLevel
Set<Long> firstLevelBranches = listFiveStores.stream().map(FiveStoreVO::getFirstLevelBranch).collect(Collectors.toSet());
Set<Long> secondaryBranches = listFiveStores.stream().map(FiveStoreVO::getSecondaryBranch).collect(Collectors.toSet());

View File

@ -251,7 +251,7 @@ public class WrkInfoController {
* @param wrkDataQuery 查询条件
*/
@GetMapping(value = "/data/export")
@RequiresPermissions("wrk:data:export")
// @RequiresPermissions("wrk:data:export")
public AjaxResult wrkDataExport(WrkDataQuery wrkDataQuery)
{
return AjaxResult.success("工单数据导出成功, 请在后台任务中查看, 任务id: ["+ wrkInfoService.wrkDataExport(wrkDataQuery) +"]");

View File

@ -17,6 +17,7 @@ import com.chushang.common.core.web.AjaxResult;
import com.chushang.common.core.web.Result;
import com.chushang.common.dict.utils.DictUtils;
import com.chushang.common.excel.utils.ExcelUtils;
import com.chushang.common.mq.produce.MqProduceService;
import com.chushang.common.mybatis.page.CommonParam;
import com.chushang.common.mybatis.utils.PageResult;
import com.chushang.common.mybatis.utils.WrapperUtils;
@ -37,7 +38,6 @@ import com.chushang.system.feign.RemoteUserService;
import com.chushang.task.entity.dto.CreateTaskDTO;
import com.chushang.task.enums.ServiceEnum;
import com.chushang.task.enums.TaskTypeEnum;
import com.chushang.task.feign.RemoteTaskService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@ -59,8 +59,6 @@ import java.util.stream.Collectors;
@Service
public class WrkInfoPhoneServiceImpl extends ServiceImpl<WrkInfoPhoneMapper, WrkInfoPhone> implements WrkInfoPhoneService {
@Resource
RemoteTaskService remoteTaskService;
@Resource
StoreService storeService;
@Resource
@ -71,6 +69,8 @@ public class WrkInfoPhoneServiceImpl extends ServiceImpl<WrkInfoPhoneMapper, Wrk
RemoteUserService remoteUserService;
@Resource
RemoteOssService remoteOssService;
@Resource
MqProduceService mqProduceService;
@Override
public PageResult pageList(WrkInfoQuery query) {
@ -113,8 +113,10 @@ public class WrkInfoPhoneServiceImpl extends ServiceImpl<WrkInfoPhoneMapper, Wrk
.taskType(TaskTypeEnum.DOWN)
.remark("电话工单导入")
.createBy(SecurityUtils.getUsername())
.userId(SecurityUtils.getUserId())
.build();
remoteTaskService.createTask(task, SecurityConstants.INNER);
// remoteTaskService.createTask(task, SecurityConstants.INNER);
mqProduceService.send(ServiceEnum.TASK.getServiceName(), task);
return AjaxResult.success("导入成功, 请在后台任务中查看导入结果");
}

View File

@ -16,7 +16,6 @@ import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.chushang.common.core.constant.SecurityConstants;
import com.chushang.common.core.exception.ResultException;
import com.chushang.common.core.exception.utils.AssertUtil;
import com.chushang.common.core.util.DateUtils;
import com.chushang.common.core.util.IPUtils;
@ -24,6 +23,7 @@ import com.chushang.common.core.util.SpringUtils;
import com.chushang.common.core.web.Result;
import com.chushang.common.dict.utils.DictUtils;
import com.chushang.common.excel.utils.ExcelUtils;
import com.chushang.common.mq.produce.MqProduceService;
import com.chushang.common.mybatis.enums.Operator;
import com.chushang.common.mybatis.page.CommonParam;
import com.chushang.common.mybatis.utils.PageResult;
@ -32,12 +32,9 @@ import com.chushang.datascope.annotation.DataScope;
import com.chushang.inspection.ins.GeneratedInsFactory;
import com.chushang.inspection.project.dto.AuditDTO;
import com.chushang.inspection.project.po.InspectionData;
import com.chushang.inspection.project.po.WrkProject;
import com.chushang.inspection.project.query.ProjectQuery;
import com.chushang.inspection.project.service.InspectionDataService;
import com.chushang.inspection.project.service.PollingTaskService;
import com.chushang.inspection.project.vo.CountVO;
import com.chushang.inspection.project.vo.ProjectVO;
import com.chushang.inspection.terminal.po.FiveStore;
import com.chushang.inspection.terminal.po.Store;
import com.chushang.inspection.terminal.po.Terminal;
@ -60,7 +57,6 @@ import com.chushang.system.feign.RemoteDeptService;
import com.chushang.task.entity.dto.CreateTaskDTO;
import com.chushang.task.enums.ServiceEnum;
import com.chushang.task.enums.TaskTypeEnum;
import com.chushang.task.feign.RemoteTaskService;
import com.chushang.security.entity.po.SysUser;
import com.chushang.system.feign.RemoteUserService;
import lombok.RequiredArgsConstructor;
@ -106,11 +102,11 @@ public class WrkInfoServiceImpl extends ServiceImpl<WrkInfoMapper, WrkInfo> impl
private final WrkInfoAuditService infoAuditService;
private final InspectionDataService inspectionDataService;
private final RemoteTaskService remoteTaskService;
private final RemoteUserService userFeignService;
private final RemoteDeptService remoteDeptService;
private final DispatchRecordService dispatchRecordService;
private final RemoteOssService remoteOssService;
private final MqProduceService mqProduceService;
@Value("${push.icbc-js.enable:false}")
private boolean enable;
@ -316,7 +312,18 @@ public class WrkInfoServiceImpl extends ServiceImpl<WrkInfoMapper, WrkInfo> impl
AssertUtil.invalidate(page.getTotal() == 0, "下载信息为空");
DateUtils.format(LocalDate.now());
// 下载巡检单信息
Result<Long> task = remoteTaskService.createTask(CreateTaskDTO.builder()
// Result<Long> task = remoteTaskService.createTask(CreateTaskDTO.builder()
// .params(JSON.toJSONString(query))
// .taskName(DateUtils.format(LocalDate.now()) + "-" + SecurityUtils.getUsername() + "-导出-" + query.getTaskId() + "-巡检单信息")
// .applicationName(ServiceEnum.INSPECTION)
// .methodName("downInspectionTemplate")
// .className(this.getClass().getName())
// .deptId(SecurityUtils.getDeptId())
// .taskType(TaskTypeEnum.DOWN)
// .remark("导出巡检单信息")
// .createBy(SecurityUtils.getUsername())
// .build(), SecurityConstants.INNER);
mqProduceService.send(ServiceEnum.TASK.getServiceName(), CreateTaskDTO.builder()
.params(JSON.toJSONString(query))
.taskName(DateUtils.format(LocalDate.now()) + "-" + SecurityUtils.getUsername() + "-导出-" + query.getTaskId() + "-巡检单信息")
.applicationName(ServiceEnum.INSPECTION)
@ -326,11 +333,14 @@ public class WrkInfoServiceImpl extends ServiceImpl<WrkInfoMapper, WrkInfo> impl
.taskType(TaskTypeEnum.DOWN)
.remark("导出巡检单信息")
.createBy(SecurityUtils.getUsername())
.build(), SecurityConstants.INNER);
if (task.isSuccess() && task.getData() != null) {
return task.getData();
}
throw new ResultException("创建后台任务异常");
.userId(SecurityUtils.getUserId())
.build());
//
// if (task.isSuccess() && task.getData() != null) {
// return task.getData();
// }
// throw new ResultException("创建后台任务异常");
return 1L;
}
/**
@ -688,20 +698,33 @@ public class WrkInfoServiceImpl extends ServiceImpl<WrkInfoMapper, WrkInfo> impl
WrapperUtils.buildSql(wrkDataQuery);
Page<WrkDataVO> page = new Page<>(commonParam.getPage(), commonParam.getLimit());
List<WrkDataVO> records = baseMapper.wrkData(wrkDataQuery, page);
if (CollectionUtil.isNotEmpty(records)){
setDeptName(records);
}
return new PageResult(records, page);
}
private void setDeptName(List<WrkDataVO> records) {
Set<Long> deptIds = records.stream().map(WrkDataVO::getDeptId).collect(Collectors.toSet());
Map<Long, String> deptNameMap
= remoteDeptService.getDeptNameByIds(deptIds, SecurityConstants.INNER);
records.forEach(r->{
r.setDeptName(deptNameMap.get(r.getDeptId()));
});
}
/**
* 工单数据导出
*/
@Override
@DataScope(deptAlias = "wi")
public Long wrkDataExport(WrkDataQuery wrkDataQuery) {
CommonParam commonParam = CommonParam.buildPageRequest();
WrapperUtils.buildSql(wrkDataQuery);
Page<WrkDataVO> page = new Page<>(commonParam.getPage(), commonParam.getLimit());
Page<WrkDataVO> page = new Page<>(1, 1);
List<WrkDataVO> records = baseMapper.wrkData(wrkDataQuery, page);
AssertUtil.invalidate (records.size() <= 0, "导出数据为空");
return remoteTaskService.createTask(CreateTaskDTO.builder()
mqProduceService.send(ServiceEnum.TASK.getServiceName(), CreateTaskDTO.builder()
.params(JSON.toJSONString(wrkDataQuery))
.taskName("工单数据导出")
.applicationName(ServiceEnum.INSPECTION)
@ -711,7 +734,21 @@ public class WrkInfoServiceImpl extends ServiceImpl<WrkInfoMapper, WrkInfo> impl
.taskType(TaskTypeEnum.DOWN)
.remark("五统一商户明细导出")
.createBy(SecurityUtils.getUsername())
.build(), SecurityConstants.INNER).getData();
.userId(SecurityUtils.getUserId())
.build());
// return remoteTaskService.createTask(CreateTaskDTO.builder()
// .params(JSON.toJSONString(wrkDataQuery))
// .taskName("工单数据导出")
// .applicationName(ServiceEnum.INSPECTION)
// .methodName("exportWrkData")
// .className(this.getClass().getName())
// .deptId(SecurityUtils.getDeptId())
// .taskType(TaskTypeEnum.DOWN)
// .remark("五统一商户明细导出")
// .createBy(SecurityUtils.getUsername())
// .build(), SecurityConstants.INNER).getData();
return 1L;
}
/**
@ -723,6 +760,9 @@ public class WrkInfoServiceImpl extends ServiceImpl<WrkInfoMapper, WrkInfo> impl
WrkDataQuery projectQuery = JSON.parseObject(params, WrkDataQuery.class);
WrapperUtils.buildSql(projectQuery);
List<WrkDataVO> list = baseMapper.wrkData(projectQuery, null);
if (CollectionUtil.isNotEmpty(list)){
setDeptName(list);
}
try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()){
// 如果为空时 创建一个空excel
if (CollectionUtil.isEmpty(list)){

View File

@ -5,10 +5,12 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.chushang.common.dict.annotation.DictFormat;
import com.chushang.common.mybatis.annotation.Condition;
import com.chushang.common.mybatis.base.BaseEntity;
import com.chushang.task.enums.ServiceEnum;
import com.chushang.task.enums.TaskStatusEnum;
import lombok.*;
import org.springframework.context.annotation.Conditional;
import java.time.LocalDateTime;
@ -27,27 +29,32 @@ public class TaskInfo extends BaseEntity {
* 主键id
*/
@TableId(value = "task_id", type = IdType.ASSIGN_ID)
@Condition(name = "task_id")
private Long taskId;
/**
* 后台任务名称
*/
@TableField(value = "task_name")
@Condition(name = "task_name", type = Condition.ConditionType.like)
private String taskName;
/**
* 所属服务名
* ServiceEnum value
*/
@TableField(value = "application_name")
@Condition(name = "application_name", type = Condition.ConditionType.like)
private String applicationName;
/**
* 方法名称
*/
@TableField(value = "method_name")
@Condition(name = "method_name", type = Condition.ConditionType.like)
private String methodName;
/**
* 类名
*/
@TableField(value = "class_name")
@Condition(name = "class_name")
private String className;
/**
* 任务状态
@ -56,12 +63,14 @@ public class TaskInfo extends BaseEntity {
*/
@TableField(value = "task_status")
@DictFormat(dictType = "task_status")
@Condition(name = "task_status")
private Integer taskStatus;
/**
* 后台任务类型
*/
@TableField(value = "task_type")
@DictFormat(dictType = "task_type")
@Condition(name = "task_type")
private Integer taskType;
/**
* 后台任务执行参数
@ -88,4 +97,10 @@ public class TaskInfo extends BaseEntity {
*/
@TableField("dept_id")
private Long deptId;
/**
* 当前用户只能查看自己的后台任务
*/
@TableField("user_id")
@Condition(name = "user_id")
private Long userId;
}

View File

@ -7,6 +7,8 @@ import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* @auther: zhao
* @date: 2024/6/11 10:19
@ -15,7 +17,9 @@ import lombok.NoArgsConstructor;
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CreateTaskDTO {
public class CreateTaskDTO implements Serializable {
private static final long serialVersionUId = 1L;
/**
* 后台任务名称
@ -54,4 +58,8 @@ public class CreateTaskDTO {
* 部门id
*/
private Long deptId;
/**
* 当前登录用户id
*/
private Long userId;
}

View File

@ -6,6 +6,7 @@ import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
@ -16,7 +17,9 @@ import java.time.LocalDateTime;
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UpdateTaskDTO {
public class UpdateTaskDTO implements Serializable {
private static final long serialVersionUId = 1L;
/**
* 任务状态
* 字典表 task_status
@ -37,4 +40,8 @@ public class UpdateTaskDTO {
* 备注信息
*/
private String remark;
/**
* 任务id
*/
private Long taskId;
}

View File

@ -1,22 +1,50 @@
package com.chushang.task.consumer;
import com.alibaba.fastjson2.JSON;
import com.chushang.common.core.constant.ServiceConstant;
import com.chushang.task.entity.TaskInfo;
import com.chushang.task.entity.dto.CreateTaskDTO;
import com.chushang.task.enums.TaskStatusEnum;
import com.chushang.task.service.TaskInfoService;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* @auther: zhao
* @date: 2024/6/12 15:03
* 后台任务队列 --> 此处用于创建以及修改后台任务
*/
@Slf4j
@Component
@RocketMQMessageListener(topic = ServiceConstant.TASK, consumerGroup = ServiceConstant.TASK_CONSUMER_GROUP)
public class TaskConsumerService implements RocketMQListener<String> {
public class TaskConsumerService implements RocketMQListener<CreateTaskDTO> {
@Resource
TaskInfoService taskInfoService;
@Override
public void onMessage(String message) {
log.info("msg {}", message);
public void onMessage(CreateTaskDTO task) {
log.info("创建后台任务 {}", JSON.toJSONString(task));
TaskInfo taskInfo = TaskInfo.builder()
.applicationName(task.getApplicationName().getServiceName())
.className(task.getClassName())
.methodName(task.getMethodName())
.params(task.getParams())
.taskStatus(TaskStatusEnum.CREATE.getCode())
.deptId(task.getDeptId())
.taskType(task.getTaskType().getCode())
.taskName(task.getTaskName())
.build();
taskInfo.setCreateBy(task.getCreateBy());
boolean save = taskInfoService.save(taskInfo);
// 如果 入库成功, 则将其发送到消息队列中
if (save){
log.info("消息发送队列 {}", taskInfo.getTaskId());
taskInfoService.joinQueue(taskInfo);
}
}
}

View File

@ -4,6 +4,7 @@ import com.chushang.common.core.web.AjaxResult;
import com.chushang.common.mybatis.page.CommonParam;
import com.chushang.common.mybatis.utils.PageResult;
import com.chushang.security.annotation.RequiresPermissions;
import com.chushang.security.utils.SecurityUtils;
import com.chushang.task.entity.TaskInfo;
import com.chushang.task.service.TaskInfoService;
import org.springframework.web.bind.annotation.GetMapping;
@ -28,6 +29,8 @@ public class TaskController {
@GetMapping("/list")
public AjaxResult page(TaskInfo taskInfo){
CommonParam commonParam = CommonParam.buildPageRequest();
Long userId = SecurityUtils.getUserId();
taskInfo.setUserId(userId);
PageResult pageResult = taskInfoService.pagePostList(taskInfo, commonParam);
return AjaxResult.success(pageResult);
}
@ -35,10 +38,14 @@ public class TaskController {
/**
* 获取 后台任务信息
*/
@GetMapping(value = "/{taskId}")
@GetMapping(value = "/info/{taskId}")
@RequiresPermissions("system:task:info")
public AjaxResult info(@PathVariable Long taskId){
return AjaxResult.success(taskInfoService.getById(taskId));
}
// public AjaxResult ss(){
// return AjaxResult.success();
// }
}

View File

@ -1,6 +1,7 @@
package com.chushang.task.service;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
@ -8,6 +9,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.chushang.common.mq.produce.MqProduceService;
import com.chushang.common.mybatis.page.CommonParam;
import com.chushang.common.mybatis.utils.PageResult;
import com.chushang.common.mybatis.utils.WrapperUtils;
import com.chushang.datascope.annotation.DataScope;
import com.chushang.datascope.constants.ScopeConstants;
import com.chushang.task.entity.TaskInfo;
@ -31,28 +33,16 @@ public class TaskInfoService extends ServiceImpl<TaskInfoMapper, TaskInfo> imple
@Resource
MqProduceService<TaskInfo> mqProduceService;
@DataScope(deptAlias = "t")
@DataScope
public PageResult pagePostList(TaskInfo sysPost, CommonParam commonParam){
LambdaQueryWrapper<TaskInfo> sql = WrapperUtils.builder(sysPost, commonParam);
IPage<TaskInfo> page = this.page(
new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(commonParam.getPage(), commonParam.getLimit()),
buildWrapper(sysPost, commonParam)
sql
);
return new PageResult(page);
}
public Wrapper<TaskInfo> buildWrapper(TaskInfo taskInfo, CommonParam commonParam) {
return new QueryWrapper<TaskInfo>()
.orderBy(true, "asc".equals(commonParam.getIsAsc()), commonParam.getOrderBy())
.lambda()
.eq(null != taskInfo.getTaskId(), TaskInfo::getTaskId, taskInfo.getTaskId())
.like(null != taskInfo.getApplicationName(), TaskInfo::getApplicationName, taskInfo.getApplicationName())
.eq(StringUtils.isNotEmpty(taskInfo.getTaskName()), TaskInfo::getTaskName, taskInfo.getTaskName())
.eq(null != taskInfo.getTaskStatus(), TaskInfo::getTaskStatus, taskInfo.getTaskStatus())
.like(StringUtils.isNotEmpty(taskInfo.getClassName()), TaskInfo::getClassName, taskInfo.getClassName())
.like(StringUtils.isNotEmpty(taskInfo.getMethodName()), TaskInfo::getMethodName, taskInfo.getMethodName())
.in(ObjectUtils.isNotEmpty(taskInfo.getSqlParam().get(ScopeConstants.DATA_SCOPE)), TaskInfo::getDeptId, taskInfo.getSqlParam().get(ScopeConstants.DATA_SCOPE));
}
public void joinQueue(TaskInfo taskInfo){
mqProduceService.send(taskInfo.getApplicationName(), taskInfo);