From e320ce60b3b177ee6fe32cec6994d20a8e8f4504 Mon Sep 17 00:00:00 2001 From: ant Date: Mon, 29 Jul 2024 16:42:05 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E4=BF=AE=E6=94=B9=E5=90=8E=E5=8F=B0?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application.yml | 71 +++++++----------- .../inspection/work/vo/WrkDataVO.java | 11 +++ .../project/service/WrkProjectService.java | 26 +++++-- .../service/impl/PollingTaskServiceImpl.java | 41 +++++++---- .../service/impl/FiveStoreServiceImpl.java | 61 ++++++++++------ .../work/controller/WrkInfoController.java | 2 +- .../service/impl/WrkInfoPhoneServiceImpl.java | 10 +-- .../work/service/impl/WrkInfoServiceImpl.java | 72 ++++++++++++++----- .../com/chushang/task/entity/TaskInfo.java | 15 ++++ .../task/entity/dto/CreateTaskDTO.java | 10 ++- .../task/entity/dto/UpdateTaskDTO.java | 9 ++- .../task/consumer/TaskConsumerService.java | 34 ++++++++- .../task/controller/TaskController.java | 9 ++- .../task/service/TaskInfoService.java | 20 ++---- 14 files changed, 259 insertions(+), 132 deletions(-) diff --git a/chushang-modules/chushang-module-gateway/src/main/resources/application.yml b/chushang-modules/chushang-module-gateway/src/main/resources/application.yml index 01a8870..45adc59 100644 --- a/chushang-modules/chushang-module-gateway/src/main/resources/application.yml +++ b/chushang-modules/chushang-module-gateway/src/main/resources/application.yml @@ -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 diff --git a/chushang-modules/chushang-module-inspection/inspection-feign/src/main/java/com/chushang/inspection/work/vo/WrkDataVO.java b/chushang-modules/chushang-module-inspection/inspection-feign/src/main/java/com/chushang/inspection/work/vo/WrkDataVO.java index 498b73e..3b222d7 100644 --- a/chushang-modules/chushang-module-inspection/inspection-feign/src/main/java/com/chushang/inspection/work/vo/WrkDataVO.java +++ b/chushang-modules/chushang-module-inspection/inspection-feign/src/main/java/com/chushang/inspection/work/vo/WrkDataVO.java @@ -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; } diff --git a/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/project/service/WrkProjectService.java b/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/project/service/WrkProjectService.java index 2be3bce..0ef0dc9 100644 --- a/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/project/service/WrkProjectService.java +++ b/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/project/service/WrkProjectService.java @@ -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 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 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 .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 export(String params){ ProjectQuery projectQuery = JSON.parseObject(params, ProjectQuery.class); diff --git a/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/project/service/impl/PollingTaskServiceImpl.java b/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/project/service/impl/PollingTaskServiceImpl.java index fc7d20e..5e189fd 100644 --- a/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/project/service/impl/PollingTaskServiceImpl.java +++ b/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/project/service/impl/PollingTaskServiceImpl.java @@ -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 implements FiveStoreService { @@ -51,9 +52,9 @@ public class FiveStoreServiceImpl extends ServiceImpl * pt2.number secondaryBranchesNumber, * pt2.`name` secondaryBranchesName, */ @Override public PageResult pageList(FiveUnifiedStoreDetailsQuery query) { - Page page = new Page<>(query.getPage(),query.getLimit()); + Page page = new Page<>(query.getPage(), query.getLimit()); List listFiveStores = baseMapper.pageList(query, page); convert(listFiveStores); return new PageResult( @@ -83,7 +84,19 @@ public class FiveStoreServiceImpl extends ServiceImpl export(String params){ + public Result export(String params) { FiveUnifiedStoreDetailsQuery query = JSON.parseObject(params, FiveUnifiedStoreDetailsQuery.class); List listFiveStores = baseMapper.pageList(query, null); convert(listFiveStores); - try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()){ - ExcelUtils.exportList(outputStream, FiveStoreVO.class, listFiveStores, "五统一商户明细"); + try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { + ExcelUtils.exportList(outputStream, FiveStoreVO.class, listFiveStores, "五统一商户明细"); // 上传到oss fileStore 是五统一的商户文件 Result> listResult = ossService.uploadBytes(UploadBytesDTO.builder() .bytes(outputStream.toByteArray()).build(), "五统一商户明细导出.xlsx", false, "", "fiveStore", SecurityConstants.INNER); - if (listResult.isSuccess() && CollectionUtil.isNotEmpty(listResult.getData())){ + if (listResult.isSuccess() && CollectionUtil.isNotEmpty(listResult.getData())) { List data = listResult.getData(); FileSourceVo fileSourceVo = data.get(0); String filePath = fileSourceVo.getFilePath(); return Result.ok(filePath); - }else { + } else { log.error("生成文件异常, {}, {}", listResult.getCode(), listResult.getMsg()); return Result.failed(listResult.getCode(), listResult.getMsg()); } @@ -125,9 +141,8 @@ public class FiveStoreServiceImpl extends ServiceImpl listFiveStores){ - if (CollectionUtil.isNotEmpty(listFiveStores)) - { + public void convert(List listFiveStores) { + if (CollectionUtil.isNotEmpty(listFiveStores)) { // firstLevel Set firstLevelBranches = listFiveStores.stream().map(FiveStoreVO::getFirstLevelBranch).collect(Collectors.toSet()); Set secondaryBranches = listFiveStores.stream().map(FiveStoreVO::getSecondaryBranch).collect(Collectors.toSet()); @@ -135,31 +150,31 @@ public class FiveStoreServiceImpl extends ServiceImpl taskMap = new HashMap<>(); - if (CollectionUtil.isNotEmpty(alls)){ + if (CollectionUtil.isNotEmpty(alls)) { List pollingTasks = taskService.listByIds(alls); taskMap = pollingTasks.stream().collect(Collectors.toMap(PollingTask::getId, pollingTask -> pollingTask, (oldValue, newValue) -> newValue)); } Set storeIds = listFiveStores.stream().map(FiveStoreVO::getStoreId).collect(Collectors.toSet()); Map storeMap = new HashMap<>(); - if (CollectionUtil.isNotEmpty(storeIds)){ + if (CollectionUtil.isNotEmpty(storeIds)) { List stores = storeService.listByIds(storeIds); storeMap = stores.stream().collect(Collectors.toMap(Store::getStoreId, store -> store, (oldValue, newValue) -> newValue)); } for (FiveStoreVO listFiveStore : listFiveStores) { Long storeId = listFiveStore.getStoreId(); Store store = storeMap.get(storeId); - if (ObjectUtil.isNotEmpty(store)){ + if (ObjectUtil.isNotEmpty(store)) { listFiveStore.setStoreName(store.getStoreName()); } Long firstLevelBranch = listFiveStore.getFirstLevelBranch(); Long secondaryBranch = listFiveStore.getSecondaryBranch(); PollingTask firstPollingTask = taskMap.get(firstLevelBranch); - if (ObjectUtil.isNotEmpty(firstPollingTask)){ + if (ObjectUtil.isNotEmpty(firstPollingTask)) { listFiveStore.setFirstLevelBranchNumber(firstPollingTask.getNumber()); listFiveStore.setFirstLevelBranchName(firstPollingTask.getName()); } PollingTask secondPollingTask = taskMap.get(secondaryBranch); - if (ObjectUtil.isNotEmpty(secondPollingTask)){ + if (ObjectUtil.isNotEmpty(secondPollingTask)) { listFiveStore.setFirstLevelBranchNumber(secondPollingTask.getNumber()); listFiveStore.setFirstLevelBranchName(secondPollingTask.getName()); } diff --git a/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/work/controller/WrkInfoController.java b/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/work/controller/WrkInfoController.java index eb2b0bd..d205eed 100644 --- a/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/work/controller/WrkInfoController.java +++ b/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/work/controller/WrkInfoController.java @@ -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) +"]"); diff --git a/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/work/service/impl/WrkInfoPhoneServiceImpl.java b/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/work/service/impl/WrkInfoPhoneServiceImpl.java index 33eff2e..0682dac 100644 --- a/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/work/service/impl/WrkInfoPhoneServiceImpl.java +++ b/chushang-modules/chushang-module-inspection/inspection-service/src/main/java/com/chushang/inspection/work/service/impl/WrkInfoPhoneServiceImpl.java @@ -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 implements WrkInfoPhoneService { - @Resource - RemoteTaskService remoteTaskService; @Resource StoreService storeService; @Resource @@ -71,6 +69,8 @@ public class WrkInfoPhoneServiceImpl extends ServiceImpl 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 impl AssertUtil.invalidate(page.getTotal() == 0, "下载信息为空"); DateUtils.format(LocalDate.now()); // 下载巡检单信息 - Result task = remoteTaskService.createTask(CreateTaskDTO.builder() +// Result 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 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 impl WrapperUtils.buildSql(wrkDataQuery); Page page = new Page<>(commonParam.getPage(), commonParam.getLimit()); List records = baseMapper.wrkData(wrkDataQuery, page); + if (CollectionUtil.isNotEmpty(records)){ + setDeptName(records); + } return new PageResult(records, page); } + private void setDeptName(List records) { + Set deptIds = records.stream().map(WrkDataVO::getDeptId).collect(Collectors.toSet()); + Map 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 page = new Page<>(commonParam.getPage(), commonParam.getLimit()); + Page page = new Page<>(1, 1); List 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 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 impl WrkDataQuery projectQuery = JSON.parseObject(params, WrkDataQuery.class); WrapperUtils.buildSql(projectQuery); List list = baseMapper.wrkData(projectQuery, null); + if (CollectionUtil.isNotEmpty(list)){ + setDeptName(list); + } try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()){ // 如果为空时 创建一个空excel if (CollectionUtil.isEmpty(list)){ diff --git a/chushang-modules/chushang-module-task/task-feign/src/main/java/com/chushang/task/entity/TaskInfo.java b/chushang-modules/chushang-module-task/task-feign/src/main/java/com/chushang/task/entity/TaskInfo.java index 4b58349..b22a3ef 100644 --- a/chushang-modules/chushang-module-task/task-feign/src/main/java/com/chushang/task/entity/TaskInfo.java +++ b/chushang-modules/chushang-module-task/task-feign/src/main/java/com/chushang/task/entity/TaskInfo.java @@ -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; } diff --git a/chushang-modules/chushang-module-task/task-feign/src/main/java/com/chushang/task/entity/dto/CreateTaskDTO.java b/chushang-modules/chushang-module-task/task-feign/src/main/java/com/chushang/task/entity/dto/CreateTaskDTO.java index 90331a6..a075a6f 100644 --- a/chushang-modules/chushang-module-task/task-feign/src/main/java/com/chushang/task/entity/dto/CreateTaskDTO.java +++ b/chushang-modules/chushang-module-task/task-feign/src/main/java/com/chushang/task/entity/dto/CreateTaskDTO.java @@ -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; } diff --git a/chushang-modules/chushang-module-task/task-feign/src/main/java/com/chushang/task/entity/dto/UpdateTaskDTO.java b/chushang-modules/chushang-module-task/task-feign/src/main/java/com/chushang/task/entity/dto/UpdateTaskDTO.java index 179fa4d..725f7cd 100644 --- a/chushang-modules/chushang-module-task/task-feign/src/main/java/com/chushang/task/entity/dto/UpdateTaskDTO.java +++ b/chushang-modules/chushang-module-task/task-feign/src/main/java/com/chushang/task/entity/dto/UpdateTaskDTO.java @@ -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; } diff --git a/chushang-modules/chushang-module-task/task-service/src/main/java/com/chushang/task/consumer/TaskConsumerService.java b/chushang-modules/chushang-module-task/task-service/src/main/java/com/chushang/task/consumer/TaskConsumerService.java index ad560ea..7e59599 100644 --- a/chushang-modules/chushang-module-task/task-service/src/main/java/com/chushang/task/consumer/TaskConsumerService.java +++ b/chushang-modules/chushang-module-task/task-service/src/main/java/com/chushang/task/consumer/TaskConsumerService.java @@ -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 { +public class TaskConsumerService implements RocketMQListener { + + @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); + } } } diff --git a/chushang-modules/chushang-module-task/task-service/src/main/java/com/chushang/task/controller/TaskController.java b/chushang-modules/chushang-module-task/task-service/src/main/java/com/chushang/task/controller/TaskController.java index 1cda414..4e7e41c 100644 --- a/chushang-modules/chushang-module-task/task-service/src/main/java/com/chushang/task/controller/TaskController.java +++ b/chushang-modules/chushang-module-task/task-service/src/main/java/com/chushang/task/controller/TaskController.java @@ -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(); +// } + } diff --git a/chushang-modules/chushang-module-task/task-service/src/main/java/com/chushang/task/service/TaskInfoService.java b/chushang-modules/chushang-module-task/task-service/src/main/java/com/chushang/task/service/TaskInfoService.java index 7c06b94..b1c6473 100644 --- a/chushang-modules/chushang-module-task/task-service/src/main/java/com/chushang/task/service/TaskInfoService.java +++ b/chushang-modules/chushang-module-task/task-service/src/main/java/com/chushang/task/service/TaskInfoService.java @@ -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 imple @Resource MqProduceService mqProduceService; - @DataScope(deptAlias = "t") + @DataScope public PageResult pagePostList(TaskInfo sysPost, CommonParam commonParam){ + LambdaQueryWrapper sql = WrapperUtils.builder(sysPost, commonParam); IPage 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 buildWrapper(TaskInfo taskInfo, CommonParam commonParam) { - return new QueryWrapper() - .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);