{
+
+ /**
+ * ID
+ */
+ @Schema(description = "ID")
+ private String id;
+
+ /**
+ * 名称
+ */
+ @Schema(description = "名称")
+ private String name;
+
+ /**
+ * 文件大小
+ */
+ @Schema(description = "文件大小")
+ private String fileSize;
+
+ /**
+ * 上传记录ID
+ */
+ @Schema(description = "上传记录ID")
+ private String recordId;
+
+ /**
+ * 总数据条数
+ */
+ @Schema(description = "总数据条数")
+ private Long totalCount;
+
+ /**
+ * 创建时间
+ */
+ @Schema(description = "创建时间")
+ private LocalDateTime createTime;
+
+ /**
+ * 完成时间
+ */
+ @Schema(description = "完成时间")
+ private LocalDateTime finishTime;
+
+ public SuccessExportTaskBo(ExportTask dto) {
+ super(dto);
+ }
+}
diff --git a/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/components/export/ExportTaskWorker.java b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/components/export/ExportTaskWorker.java
new file mode 100644
index 0000000..4abf075
--- /dev/null
+++ b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/components/export/ExportTaskWorker.java
@@ -0,0 +1,47 @@
+package com.lframework.starter.mq.core.components.export;
+
+import com.lframework.starter.web.core.components.excel.ExcelModel;
+import com.lframework.starter.web.core.components.resp.PageResult;
+
+public interface ExportTaskWorker {
+
+ /**
+ * 解析传入参数
+ *
+ * @param json
+ * @return
+ */
+ P parseParams(String json);
+
+ /**
+ * 查询数据
+ *
+ * @param pageIndex
+ * @param pageSize
+ * @param params
+ * @return
+ */
+ PageResult getDataList(int pageIndex, int pageSize, P params);
+
+ /**
+ * 导出数据
+ *
+ * @param data
+ */
+ M exportData(D data);
+
+ /**
+ * 处理异常
+ *
+ * @param e
+ */
+ default void handleError(Exception e) {
+ }
+
+ /**
+ * 获取导出模型类
+ *
+ * @return
+ */
+ Class getModelClass();
+}
diff --git a/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/config/MqBeanAutoConfiguration.java b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/config/MqBeanAutoConfiguration.java
new file mode 100644
index 0000000..a039b13
--- /dev/null
+++ b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/config/MqBeanAutoConfiguration.java
@@ -0,0 +1,25 @@
+package com.lframework.starter.mq.core.config;
+
+import com.lframework.starter.mq.core.controller.ExportTaskController;
+import com.lframework.starter.mq.core.impl.ExportTaskServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.context.EnvironmentAware;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+import org.springframework.core.env.Environment;
+
+@Slf4j
+@Configuration
+@Import({
+ ExportTaskServiceImpl.class,
+ ExportTaskController.class,
+})
+@MapperScan("com.lframework.starter.mq.core.**.mappers")
+public class MqBeanAutoConfiguration implements EnvironmentAware {
+
+ @Override
+ public void setEnvironment(Environment environment) {
+ log.info("mq-core加载完成");
+ }
+}
diff --git a/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/config/MqSwaggerAutoConfiguration.java b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/config/MqSwaggerAutoConfiguration.java
new file mode 100644
index 0000000..9416c3e
--- /dev/null
+++ b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/config/MqSwaggerAutoConfiguration.java
@@ -0,0 +1,18 @@
+package com.lframework.starter.mq.core.config;
+
+import org.springdoc.core.models.GroupedOpenApi;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class MqSwaggerAutoConfiguration {
+
+ @Bean("mqApiDocket")
+ public GroupedOpenApi mqApiDocket() {
+ return GroupedOpenApi.builder()
+ .group("消息队列模块")
+ .packagesToScan("com.lframework.starter.mq.core")
+ .pathsToMatch("/**")
+ .build();
+ }
+}
diff --git a/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/controller/ExportTaskController.java b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/controller/ExportTaskController.java
new file mode 100644
index 0000000..9ae3e9e
--- /dev/null
+++ b/mq-starter/mq-core/src/main/java/com/lframework/starter/mq/core/controller/ExportTaskController.java
@@ -0,0 +1,107 @@
+package com.lframework.starter.mq.core.controller;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.lframework.starter.common.utils.StringUtil;
+import com.lframework.starter.mq.core.bo.ExportingExportTaskBo;
+import com.lframework.starter.mq.core.bo.FailExportTaskBo;
+import com.lframework.starter.mq.core.bo.SuccessExportTaskBo;
+import com.lframework.starter.mq.core.entity.ExportTask;
+import com.lframework.starter.mq.core.enums.ExportTaskStatus;
+import com.lframework.starter.mq.core.service.ExportTaskService;
+import com.lframework.starter.mq.core.vo.QueryFailExportTaskVo;
+import com.lframework.starter.mq.core.vo.QuerySuccessExportTaskVo;
+import com.lframework.starter.web.core.components.resp.InvokeResult;
+import com.lframework.starter.web.core.components.resp.InvokeResultBuilder;
+import com.lframework.starter.web.core.components.resp.PageResult;
+import com.lframework.starter.web.core.components.security.SecurityUtil;
+import com.lframework.starter.web.core.controller.DefaultBaseController;
+import com.lframework.starter.web.core.utils.PageResultUtil;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.validation.Valid;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 导出任务
+ *
+ * @author zmj
+ */
+@Tag(name = "导出任务")
+@Validated
+@RestController
+@RequestMapping("/export/task")
+public class ExportTaskController extends DefaultBaseController {
+
+ @Autowired
+ private ExportTaskService exportTaskService;
+
+ /**
+ * 正在导出列表
+ */
+ @Operation(summary = "正在导出列表")
+ @GetMapping("/exporting")
+ public InvokeResult> queryExporting() {
+
+ Wrapper queryWrapper = Wrappers.lambdaQuery(ExportTask.class)
+ .eq(ExportTask::getCreateById, SecurityUtil.getCurrentUser().getId())
+ .in(ExportTask::getStatus, ExportTaskStatus.CREATED, ExportTaskStatus.EXPORTING)
+ .orderByDesc(ExportTask::getCreateTime);
+ List datas = exportTaskService.list(queryWrapper);
+
+ List results = datas.stream().map(ExportingExportTaskBo::new)
+ .collect(Collectors.toList());
+
+ return InvokeResultBuilder.success(results);
+ }
+
+ @Operation(summary = "导出成功列表")
+ @GetMapping("/success")
+ public InvokeResult> querySuccess(
+ @Valid QuerySuccessExportTaskVo vo) {
+ Wrapper queryWrapper = Wrappers.lambdaQuery(ExportTask.class)
+ .eq(ExportTask::getCreateById, SecurityUtil.getCurrentUser().getId())
+ .eq(ExportTask::getStatus, ExportTaskStatus.SUCCESS)
+ .like(StringUtil.isNotBlank(vo.getName()), ExportTask::getName, vo.getName())
+ .orderByDesc(ExportTask::getCreateTime);
+
+ Page page = new Page<>(getPageIndex(vo), getPageSize(vo));
+
+ Page pageList = exportTaskService.page(page, queryWrapper);
+ PageResult pageResult = PageResultUtil.convert(pageList);
+ List datas = pageResult.getDatas();
+ List results = datas.stream().map(SuccessExportTaskBo::new)
+ .collect(Collectors.toList());
+
+ return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results));
+ }
+
+ @Operation(summary = "导出失败列表")
+ @GetMapping("/fail")
+ public InvokeResult> queryFail(
+ @Valid QueryFailExportTaskVo vo) {
+ Wrapper queryWrapper = Wrappers.lambdaQuery(ExportTask.class)
+ .eq(ExportTask::getCreateById, SecurityUtil.getCurrentUser().getId())
+ .eq(ExportTask::getStatus, ExportTaskStatus.FAIL)
+ .like(StringUtil.isNotBlank(vo.getName()), ExportTask::getName, vo.getName())
+ .orderByDesc(ExportTask::getCreateTime);
+
+ Page page = new Page<>(getPageIndex(vo), getPageSize(vo));
+
+ Page pageList = exportTaskService.page(page, queryWrapper);
+ PageResult pageResult = PageResultUtil.convert(pageList);
+ List