diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/JobSaveReqVO.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/JobSaveReqVO.java new file mode 100644 index 0000000..29e61bf --- /dev/null +++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/JobSaveReqVO.java @@ -0,0 +1,32 @@ +package cn.iocoder.yudao.framework.common.pojo; + +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.NotNull; + +@Data +public class JobSaveReqVO { + + private Long id; + + @NotEmpty(message = "任务名称不能为空") + private String name; + + @NotEmpty(message = "处理器的名字不能为空") + private String handlerName; + + private String handlerParam; + + @NotEmpty(message = "CRON 表达式不能为空") + private String cronExpression; + + @NotNull(message = "重试次数不能为空") + private Integer retryCount; + + @NotNull(message = "重试间隔不能为空") + private Integer retryInterval; + + private Integer monitorTimeout; + +} diff --git a/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/job/JobApi.java b/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/job/JobApi.java new file mode 100644 index 0000000..1d8aec9 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/job/JobApi.java @@ -0,0 +1,13 @@ +package cn.iocoder.yudao.module.infra.api.job; + +import cn.iocoder.yudao.framework.common.pojo.JobSaveReqVO; + +import javax.validation.Valid; +import java.util.Map; +import cn.iocoder.yudao.framework.common.pojo.JobSaveReqVO; + +public interface JobApi { + + Long createJob(JobSaveReqVO jobSaveReqVO) throws Throwable; + +} diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/api/job/JobApiImpl.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/api/job/JobApiImpl.java new file mode 100644 index 0000000..d6e9124 --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/api/job/JobApiImpl.java @@ -0,0 +1,22 @@ +package cn.iocoder.yudao.module.infra.api.job; + +import cn.iocoder.yudao.module.infra.service.job.JobService; + +import javax.annotation.Resource; +import java.util.Map; +import cn.iocoder.yudao.framework.common.pojo.JobSaveReqVO; +import org.quartz.SchedulerException; +import org.springframework.stereotype.Service; + +@Service +public class JobApiImpl implements JobApi +{ + + @Resource + private JobService jobService; + + @Override + public Long createJob(JobSaveReqVO jobSaveReqVO) throws Throwable { + return jobService.createJob(jobSaveReqVO); + } +} diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/JobController.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/JobController.java index 9b01ce7..a95a11e 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/JobController.java +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/admin/job/JobController.java @@ -9,7 +9,8 @@ import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.quartz.core.util.CronUtils; import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobPageReqVO; import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobRespVO; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobSaveReqVO; +//import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobSaveReqVO; +import cn.iocoder.yudao.framework.common.pojo.JobSaveReqVO; import cn.iocoder.yudao.module.infra.dal.dataobject.job.JobDO; import cn.iocoder.yudao.module.infra.service.job.JobService; import io.swagger.v3.oas.annotations.Operation; diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobService.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobService.java index ff1cca5..ed4bc38 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobService.java +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobService.java @@ -2,7 +2,8 @@ package cn.iocoder.yudao.module.infra.service.job; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobPageReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobSaveReqVO; +//import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobSaveReqVO; +import cn.iocoder.yudao.framework.common.pojo.JobSaveReqVO; import cn.iocoder.yudao.module.infra.dal.dataobject.job.JobDO; import org.quartz.SchedulerException; diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobServiceImpl.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobServiceImpl.java index 0687d13..e54a420 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobServiceImpl.java +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/job/JobServiceImpl.java @@ -1,13 +1,15 @@ package cn.iocoder.yudao.module.infra.service.job; import cn.hutool.extra.spring.SpringUtil; +import cn.iocoder.yudao.framework.common.pojo.JobSaveReqVO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler; import cn.iocoder.yudao.framework.quartz.core.scheduler.SchedulerManager; import cn.iocoder.yudao.framework.quartz.core.util.CronUtils; import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobPageReqVO; -import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobSaveReqVO; +//import cn.iocoder.yudao.module.infra.controller.admin.job.vo.job.JobSaveReqVO; +import cn.iocoder.yudao.framework.common.pojo.JobSaveReqVO; import cn.iocoder.yudao.module.infra.dal.dataobject.job.JobDO; import cn.iocoder.yudao.module.infra.dal.mysql.job.JobMapper; import cn.iocoder.yudao.module.infra.enums.job.JobStatusEnum; diff --git a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java index fe9aa22..41ee2d6 100644 --- a/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java +++ b/yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/ErrorCodeConstants.java @@ -182,4 +182,6 @@ public interface ErrorCodeConstants { ErrorCode TASK_INFO_NOT_EXISTS = new ErrorCode(1-003-001-003, "任务不存在"); + ErrorCode TASK_TAG_NOT_EXISTS = new ErrorCode(1-003-001-004, "任务标签不存在"); + } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/enterprise/EnterpriseController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/enterprise/EnterpriseController.java index 4895cc6..7812506 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/enterprise/EnterpriseController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/enterprise/EnterpriseController.java @@ -125,7 +125,7 @@ public class EnterpriseController { @GetMapping("/page") @Operation(summary = "获得企业分页") @PreAuthorize("@ss.hasPermission('system:enterprise:query')") - public CommonResult> getEnterprisePage(@Valid EnterprisePageReqVO pageReqVO) { + public CommonResult> getEnterprisePage(EnterprisePageReqVO pageReqVO) { PageResult pageResult = enterpriseService.getEnterprisePage(pageReqVO); pageResult.getList().forEach(item->{ //企业审核状态 diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/enterprise/vo/EnterpriseRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/enterprise/vo/EnterpriseRespVO.java index 140fa3c..74329ba 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/enterprise/vo/EnterpriseRespVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/enterprise/vo/EnterpriseRespVO.java @@ -95,7 +95,7 @@ public class EnterpriseRespVO { private List qualificationList; @Schema(description = "企业标签", example = "26433") - private List> tagList; + private List tagList; } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/taskinfo/TaskInfoController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/taskinfo/TaskInfoController.java index aa854fc..39b87f8 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/taskinfo/TaskInfoController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/taskinfo/TaskInfoController.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.system.controller.admin.taskinfo; +import cn.iocoder.yudao.module.infra.api.job.JobApi; import cn.iocoder.yudao.module.system.service.user.AdminUserService; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; @@ -41,6 +42,7 @@ public class TaskInfoController { @Resource private AdminUserService adminUserService; + @PostMapping("/create") @Operation(summary = "创建任务表,用于存储所有的任务信息,任务可由不同用户创建并管理。") @PreAuthorize("@ss.hasPermission('system:task-info:create')") diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/taskinfo/vo/TaskInfoSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/taskinfo/vo/TaskInfoSaveReqVO.java index a722d16..0a5f45f 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/taskinfo/vo/TaskInfoSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/taskinfo/vo/TaskInfoSaveReqVO.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.system.controller.admin.taskinfo.vo; +import cn.iocoder.yudao.module.system.dal.dataobject.enterprise.EnterpriseDO; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; @@ -29,7 +30,7 @@ public class TaskInfoSaveReqVO { @NotNull(message = "任务类型,表示任务的类别,例如:1.发布任务、2.自动任务等不能为空") private Integer taskType; - @Schema(description = "任务优先级", requiredMode = Schema.RequiredMode.REQUIRED) + @Schema(description = "任务优先级") @NotEmpty(message = "任务优先级不能为空") private Integer priority; @@ -55,4 +56,10 @@ public class TaskInfoSaveReqVO { @Schema(description = "总共几步") private Integer taskTotal; + @Schema(description = "标签集合") + private List tagIds; + + @Schema(defaultValue = "企业集合") + private List enterpriseIds; + } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tasktag/TaskTagController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tasktag/TaskTagController.java new file mode 100644 index 0000000..9fd8cbf --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tasktag/TaskTagController.java @@ -0,0 +1,95 @@ +package cn.iocoder.yudao.module.system.controller.admin.tasktag; + +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.system.controller.admin.tasktag.vo.*; +import cn.iocoder.yudao.module.system.dal.dataobject.tasktag.TaskTagDO; +import cn.iocoder.yudao.module.system.service.tasktag.TaskTagService; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; + +@Tag(name = "管理后台 - 任务标签关联") +@RestController +@RequestMapping("/system/task-tag") +@Validated +public class TaskTagController { + + @Resource + private TaskTagService taskTagService; + + @PostMapping("/create") + @Operation(summary = "创建任务标签关联") + @PreAuthorize("@ss.hasPermission('system:task-tag:create')") + public CommonResult createTaskTag(@Valid @RequestBody TaskTagSaveReqVO createReqVO) { + return success(taskTagService.createTaskTag(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新任务标签关联") + @PreAuthorize("@ss.hasPermission('system:task-tag:update')") + public CommonResult updateTaskTag(@Valid @RequestBody TaskTagSaveReqVO updateReqVO) { + taskTagService.updateTaskTag(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除任务标签关联") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('system:task-tag:delete')") + public CommonResult deleteTaskTag(@RequestParam("id") Long id) { + taskTagService.deleteTaskTag(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得任务标签关联") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('system:task-tag:query')") + public CommonResult getTaskTag(@RequestParam("id") Long id) { + TaskTagDO taskTag = taskTagService.getTaskTag(id); + return success(BeanUtils.toBean(taskTag, TaskTagRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得任务标签关联分页") + @PreAuthorize("@ss.hasPermission('system:task-tag:query')") + public CommonResult> getTaskTagPage(@Valid TaskTagPageReqVO pageReqVO) { + PageResult pageResult = taskTagService.getTaskTagPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, TaskTagRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出任务标签关联 Excel") + @PreAuthorize("@ss.hasPermission('system:task-tag:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportTaskTagExcel(@Valid TaskTagPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = taskTagService.getTaskTagPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "任务标签关联.xls", "数据", TaskTagRespVO.class, + BeanUtils.toBean(list, TaskTagRespVO.class)); + } + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tasktag/vo/TaskTagPageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tasktag/vo/TaskTagPageReqVO.java new file mode 100644 index 0000000..f724cea --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tasktag/vo/TaskTagPageReqVO.java @@ -0,0 +1,28 @@ +package cn.iocoder.yudao.module.system.controller.admin.tasktag.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 任务标签关联分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class TaskTagPageReqVO extends PageParam { + + @Schema(description = "企业id", example = "19196") + private Long taskId; + + @Schema(description = "标签id", example = "12139") + private Long tagId; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tasktag/vo/TaskTagRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tasktag/vo/TaskTagRespVO.java new file mode 100644 index 0000000..d0d3b53 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tasktag/vo/TaskTagRespVO.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.system.controller.admin.tasktag.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 任务标签关联 Response VO") +@Data +@ExcelIgnoreUnannotated +public class TaskTagRespVO { + + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "29084") + @ExcelProperty("主键") + private Long id; + + @Schema(description = "企业id", example = "19196") + @ExcelProperty("企业id") + private Long taskId; + + @Schema(description = "标签id", example = "12139") + @ExcelProperty("标签id") + private Long tagId; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tasktag/vo/TaskTagSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tasktag/vo/TaskTagSaveReqVO.java new file mode 100644 index 0000000..42e8c9c --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/tasktag/vo/TaskTagSaveReqVO.java @@ -0,0 +1,20 @@ +package cn.iocoder.yudao.module.system.controller.admin.tasktag.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; + +@Schema(description = "管理后台 - 任务标签关联新增/修改 Request VO") +@Data +public class TaskTagSaveReqVO { + + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "29084") + private Long id; + + @Schema(description = "企业id", example = "19196") + private Long taskId; + + @Schema(description = "标签id", example = "12139") + private Long tagId; + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/taskinfo/TaskInfoDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/taskinfo/TaskInfoDO.java index 57414e8..66b619d 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/taskinfo/TaskInfoDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/taskinfo/TaskInfoDO.java @@ -4,6 +4,8 @@ import com.sun.xml.bind.v2.TODO; import lombok.*; import java.time.LocalDate; +import java.time.LocalDateTime; + import com.baomidou.mybatisplus.annotation.*; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; @@ -56,11 +58,11 @@ public class TaskInfoDO extends BaseDO { /** * 任务计划开始时间 */ - private LocalDate startDate; + private LocalDateTime startDate; /** * 任务计划结束时间 */ - private LocalDate endDate; + private LocalDateTime endDate; /** * 父任务id */ diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/tasktag/TaskTagDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/tasktag/TaskTagDO.java new file mode 100644 index 0000000..4f9cfd5 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/tasktag/TaskTagDO.java @@ -0,0 +1,39 @@ +package cn.iocoder.yudao.module.system.dal.dataobject.tasktag; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 任务标签关联 DO + * + * @author dx + */ +@TableName("task_tag") +@KeySequence("task_tag_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class TaskTagDO extends BaseDO { + + /** + * 主键 + */ + @TableId + private Long id; + /** + * 企业id + */ + private Long taskId; + /** + * 标签id + */ + private Long tagId; + +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/tasktag/TaskTagMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/tasktag/TaskTagMapper.java new file mode 100644 index 0000000..8a43317 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/tasktag/TaskTagMapper.java @@ -0,0 +1,28 @@ +package cn.iocoder.yudao.module.system.dal.mysql.tasktag; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.system.dal.dataobject.tasktag.TaskTagDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.system.controller.admin.tasktag.vo.*; + +/** + * 任务标签关联 Mapper + * + * @author dx + */ +@Mapper +public interface TaskTagMapper extends BaseMapperX { + + default PageResult selectPage(TaskTagPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(TaskTagDO::getTaskId, reqVO.getTaskId()) + .eqIfPresent(TaskTagDO::getTagId, reqVO.getTagId()) + .betweenIfPresent(TaskTagDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(TaskTagDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/TaskExecJob.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/TaskExecJob.java new file mode 100644 index 0000000..c807a4a --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/job/TaskExecJob.java @@ -0,0 +1,27 @@ +package cn.iocoder.yudao.module.system.job; + +import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler; +import cn.iocoder.yudao.module.system.service.taskinfo.TaskInfoService; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +@Component +public class TaskExecJob implements JobHandler { + /** + * 执行任务 + * + * @param param 参数 + * @return 结果 + * @throws Exception 异常 + */ + @Resource + private TaskInfoService taskInfoService; + + @Override + public String execute(String param) throws Exception { + final Long taskId = Long.valueOf(param); + taskInfoService.sendTask(taskId); + return ""; + } +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/taskinfo/TaskInfoService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/taskinfo/TaskInfoService.java index bcd9d69..a570089 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/taskinfo/TaskInfoService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/taskinfo/TaskInfoService.java @@ -53,4 +53,7 @@ public interface TaskInfoService { */ PageResult getTaskInfoPage(TaskInfoPageReqVO pageReqVO); + //定时执行任务 + void sendTask(Long taskId); + } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/taskinfo/TaskInfoServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/taskinfo/TaskInfoServiceImpl.java index 903903d..e028b09 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/taskinfo/TaskInfoServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/taskinfo/TaskInfoServiceImpl.java @@ -1,15 +1,20 @@ package cn.iocoder.yudao.module.system.service.taskinfo; +import cn.iocoder.yudao.module.infra.api.job.JobApi; +import cn.iocoder.yudao.module.system.dal.dataobject.tasktag.TaskTagDO; +import cn.iocoder.yudao.module.system.dal.mysql.tasktag.TaskTagMapper; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import org.springframework.transaction.annotation.Transactional; +import java.time.LocalDate; import java.util.*; import cn.iocoder.yudao.module.system.controller.admin.taskinfo.vo.*; import cn.iocoder.yudao.module.system.dal.dataobject.taskinfo.TaskInfoDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.common.pojo.JobSaveReqVO; import cn.iocoder.yudao.module.system.dal.mysql.taskinfo.TaskInfoMapper; @@ -29,16 +34,57 @@ public class TaskInfoServiceImpl implements TaskInfoService { @Resource private TaskInfoMapper taskInfoMapper; + @Resource + private TaskTagMapper taskTagMapper; + @Resource + private JobApi jobApi; @Override public Long createTaskInfo(TaskInfoSaveReqVO createReqVO) { // 插入 TaskInfoDO taskInfo = BeanUtils.toBean(createReqVO, TaskInfoDO.class); taskInfoMapper.insert(taskInfo); + + //添加任务标签 + if (!createReqVO.getTagIds().isEmpty() && createReqVO.getTagIds().size() > 0) { + createReqVO.getTagIds().forEach(item->{ + taskTagMapper.insert(new TaskTagDO().setTaskId(taskInfo.getId()).setTagId(item)); + }); + } + +// +// //添加定时任务 +// JobSaveReqVO jobSaveReqVO = new JobSaveReqVO(); +// try { +// jobApi.createJob(jobSaveReqVO); +// } catch (Throwable e) { +// throw new RuntimeException(e); +// } + //添加企业范围 + + // 返回 return taskInfo.getId(); } + /** + * 生成 Cron 表达式 + * @param year + * @param month + * @param day + * @return java.lang.String + * @Date 2025-02-06 上午11:39 + **/ + public static String generateCronExpression(int year, int month, int day) { + // 校验输入的年月日 + LocalDate date = LocalDate.of(year, month, day); + + // 生成 Cron 表达式 + String cronExpression = String.format("0 0 %d %d *", day, month); + + return cronExpression; + } + @Override public void updateTaskInfo(TaskInfoSaveReqVO updateReqVO) { // 校验存在 @@ -72,4 +118,18 @@ public class TaskInfoServiceImpl implements TaskInfoService { return taskInfoMapper.selectPage(pageReqVO); } + @Override + public void sendTask(Long taskId) { + final TaskInfoDO taskInfoDO = taskInfoMapper.selectById(taskId); + if (taskInfoDO == null) { + throw exception(TASK_INFO_NOT_EXISTS); + } + + // + + //发送订阅消息给微信 + + + } + } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/tasktag/TaskTagService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/tasktag/TaskTagService.java new file mode 100644 index 0000000..a4b8638 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/tasktag/TaskTagService.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.system.service.tasktag; + +import java.util.*; +import cn.iocoder.yudao.module.system.controller.admin.tasktag.vo.*; +import cn.iocoder.yudao.module.system.dal.dataobject.tasktag.TaskTagDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +import javax.validation.Valid; + +/** + * 任务标签关联 Service 接口 + * + * @author dx + */ +public interface TaskTagService { + + /** + * 创建任务标签关联 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createTaskTag(@Valid TaskTagSaveReqVO createReqVO); + + /** + * 更新任务标签关联 + * + * @param updateReqVO 更新信息 + */ + void updateTaskTag(@Valid TaskTagSaveReqVO updateReqVO); + + /** + * 删除任务标签关联 + * + * @param id 编号 + */ + void deleteTaskTag(Long id); + + /** + * 获得任务标签关联 + * + * @param id 编号 + * @return 任务标签关联 + */ + TaskTagDO getTaskTag(Long id); + + /** + * 获得任务标签关联分页 + * + * @param pageReqVO 分页查询 + * @return 任务标签关联分页 + */ + PageResult getTaskTagPage(TaskTagPageReqVO pageReqVO); + +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/tasktag/TaskTagServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/tasktag/TaskTagServiceImpl.java new file mode 100644 index 0000000..ac4b4bf --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/tasktag/TaskTagServiceImpl.java @@ -0,0 +1,75 @@ +package cn.iocoder.yudao.module.system.service.tasktag; + +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import cn.iocoder.yudao.module.system.controller.admin.tasktag.vo.*; +import cn.iocoder.yudao.module.system.dal.dataobject.tasktag.TaskTagDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + +import cn.iocoder.yudao.module.system.dal.mysql.tasktag.TaskTagMapper; + +import javax.annotation.Resource; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.*; + +/** + * 任务标签关联 Service 实现类 + * + * @author dx + */ +@Service +@Validated +public class TaskTagServiceImpl implements TaskTagService { + + @Resource + private TaskTagMapper taskTagMapper; + + @Override + public Long createTaskTag(TaskTagSaveReqVO createReqVO) { + // 插入 + TaskTagDO taskTag = BeanUtils.toBean(createReqVO, TaskTagDO.class); + taskTagMapper.insert(taskTag); + // 返回 + return taskTag.getId(); + } + + @Override + public void updateTaskTag(TaskTagSaveReqVO updateReqVO) { + // 校验存在 + validateTaskTagExists(updateReqVO.getId()); + // 更新 + TaskTagDO updateObj = BeanUtils.toBean(updateReqVO, TaskTagDO.class); + taskTagMapper.updateById(updateObj); + } + + @Override + public void deleteTaskTag(Long id) { + // 校验存在 + validateTaskTagExists(id); + // 删除 + taskTagMapper.deleteById(id); + } + + private void validateTaskTagExists(Long id) { + if (taskTagMapper.selectById(id) == null) { + throw exception(TASK_TAG_NOT_EXISTS); + } + } + + @Override + public TaskTagDO getTaskTag(Long id) { + return taskTagMapper.selectById(id); + } + + @Override + public PageResult getTaskTagPage(TaskTagPageReqVO pageReqVO) { + return taskTagMapper.selectPage(pageReqVO); + } + +} diff --git a/yudao-server/src/main/resources/application-local.yaml b/yudao-server/src/main/resources/application-local.yaml index 100e3df..dbe9dd0 100644 --- a/yudao-server/src/main/resources/application-local.yaml +++ b/yudao-server/src/main/resources/application-local.yaml @@ -7,7 +7,7 @@ spring: autoconfigure: exclude: - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源 - - org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration # 默认 local 环境,不开启 Quartz 的自动配置 +# - org.springframework.boot.autoconfigure.quartz.QuartzAutoConfiguration # 默认 local 环境,不开启 Quartz 的自动配置 - de.codecentric.boot.admin.server.config.AdminServerAutoConfiguration # 禁用 Spring Boot Admin 的 Server 的自动配置 - de.codecentric.boot.admin.server.ui.config.AdminServerUiAutoConfiguration # 禁用 Spring Boot Admin 的 Server UI 的自动配置 - de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration # 禁用 Spring Boot Admin 的 Client 的自动配置